ArchInstallOnUSB

TurnToJPG -->


Hardware

320G usb disk, laptop(running archlinux already).

Steps

fdisk the usb disk and create with following partitions:

$ sudo fdisk -l /dev/sdc
Disk /dev/sdc:298.09 GiB,320072933376 字节,625142448 个扇区
磁盘型号:Storage         
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x112a2f3d

设备       启动    起点      末尾      扇区   大小 Id 类型
/dev/sdc1          2048   1050623   1048576   512M ef EFI (FAT-12/16/32)
/dev/sdc2       1050624 625142447 624091824 297.6G 83 Linux

Format the disk:

$ $ sudo mkfs.fat -F32 /dev/sdc1
mkfs.fat 4.1 (2017-01-24)
$ sudo mkfs.ext4 /dev/sdc2

Install arch-install-scripts on archlinux. Then mount the disk to install point:

$ sudo mount /dev/sdc2 /mnt
$ sudo mkdir -p /mnt/boot
$ sudo mount /dev/sdc1 /mnt/boot

Now use pacstrap for installing basic system onto usb disk:

$ sudo pacstrap -c /mnt base linux linux-firmware base-devel

Generate /etc/fstab:

# genfstab -U /mnt >> /mnt/etc/fstab
# vim /mnt/etc/fstab
comment the swap partition

chroot into /mnt:

# arch-chroot /mnt
# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# pacman -S vim
# vim /etc/locale.gen
en_US.UTF-8 UTF-8  
en_US ISO-8859-1  
zh_CN.GB18030 GB18030  
zh_CN.GBK GBK  
zh_CN.UTF-8 UTF-8  
zh_CN GB2312 
# locale-gen
# vim /etc/locale.conf
LANG=en_US.UTF-8
# vim /etc/hostname
archusb
# vim /etc/hosts 
    # Static table lookup for hostnames.
    # See hosts(5) for details.
    127.0.0.1	localhost
    ::1		localhost
    127.0.1.1	archusb
# pacman -S net-tools tcpdump iotop dhcpcd openssh dosfstools ntfs-3g amd-ucode intel-ucode grub efibootmgr
# systemctl enable sshd
# cat /etc/mkinitcpio.conf | grep block
    #    HOOKS=(base udev autodetect block filesystems)
    #    HOOKS=(base udev block filesystems)
    #    HOOKS=(base udev block mdadm encrypt filesystems)
    #    HOOKS=(base udev block lvm2 filesystems)
    HOOKS=(base udev block keyboard autodetect modconf filesystems fsck)
#  mkinitcpio -P
# passwd

Make grub configuration:

# grub-install --target=i386-pc /dev/sdc --recheck
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --removable --recheck

Or(uefi mode):

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB 
grub-mkconfig -o /boot/grub/grub.cfg 

Support generic gpu:

# pacman -S xf86-video-vesa xf86-video-ati xf86-video-intel xf86-video-amdgpu xf86-video-nouveau xf86-video-fbdev

Network configuration:

# pacman -S networkmanager
# systemctl enable NetworkManager
# grub-mkconfig -o /boot/grub/grub.cfg

Now you could use usb disk for booting up the system, enjoy it.

libvirt configuration

Install iptables, etc.

# pacman -S ebtables iptables dnsmasq

Configure bridge networking using network manager:

$ nmcli connection add type bridge ifname br0 stp no
$ nmcli connection add type bridge-slave ifname enp30s0 master br0

Case static ip address:

nmcli conn add type bridge ifname br0 ipv4.method manual ipv4.address "10.137.149.5/24" ipv4.gateway "10.137.149.1" ipv4.dns 223.5.5.5 
nmcli connection add type bridge-slave ifname eth0 master br0

Case dhcp(notice the bridge name):

nmcli connection modify bridge-br0 ipv4.method auto

Change mtu to 9000:

# nmcli connection modify bridge-slave-eth0 802-3-ethernet.mtu 9000
# nmcli connection show bridge-slave-eth0 | grep mtu
802-3-ethernet.mtu:                     9000

iptables for libvirt:

# iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
# iptables-save -f /etc/iptables/iptables.rules
# systemctl enable iptables.service

Then your bridge could be use.