ThinkPad X220上运行Arch Linux(U盘)¶
之前在 ThinkPad X220上运行Arch Linux 是作为个人工作站,随着我在 私有云架构 部署需要有独立主机来实现带外管理和监控,并且ThinkPad X220已经不作为主工作桌面,硬盘已经拆除,所以将ThinkPad X220上安装U盘来运行一个经鉴定 Arch Linux 。
警告
我最初以为在U盘上安装Arch Linux和 ThinkPad X220上运行Arch Linux 是一样的 ,毕竟拆掉了SSD硬盘之后,插入的U盘也被识别成 /dev/sda
设备。然而,实践发现,同样的步骤安装 EFISTUB
启动却失败。原来还是需要配置一个启动管理器。
准备工作¶
创建安装U盘:
sudo dd if=archlinux-2022.06.01-x86_64.iso of=/dev/rdisk3 bs=10m
将U盘插到ThnkPad X220的USB接口,启动主机,选择U盘启动,字符终端
Arch Linux安装需要网络,在 ThinkPad X220笔记本 上可以自动识别网络设备,所以安装比 MacBook Pro上运行Arch Linux 方便很多:
ip link
可以看到:
enp0s25
wlan0
有线网络设置¶
默认启动dhcp分配IP地址,所以如果有线局域网已经提供DHCP服务,则可以自动分配IP地址连接网络。 默认安装系统是已经启动了sshd服务,就可以远程登陆系统进行下一步安装
如果网络没有提供DHCP服务,则采用静态IP配置:
ip address add 192.168.6.199/24 dev enp0s25 ip route add 0.0.0.0 via 192.168.6.200 dev enp0s25 ip link set enp0s25 up
准备工作¶
更新系统时钟:
timedatectl set-ntp true
parted分区工具 磁盘分区(128G规格):
parted /dev/sda mklabel gpt parted -a optimal /dev/sda mkpart ESP fat32 0% 256MB parted /dev/sda set 1 esp on parted /dev/sda set 1 boot on parted -a optimal /dev/sda mkpart primary xfs 256MB 100%
备注
/dev/sdb1 划分为 EFI系统分区,大小 260-512MB
/dev/sdb2 根分区,大小100+GB(剩余空间)
完成后检查 fdisk -l
可以看到:
Disk /dev/sda: 115.69 GiB, 124218507264 bytes, 242614272 sectors
Disk model: Ultra Fit
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: FD028129-1CA4-4370-BAF7-510BF30CED83
Device Start End Sectors Size Type
/dev/sda1 2048 499711 497664 243M EFI System
/dev/sda2 499712 242612223 242112512 115.4G Linux filesystem
格式化分区:
mkdosfs -F 32 /dev/sda1 mkfs.xfs /dev/sda2
(废弃,针对EFISTUB的方法)挂载文件系统:
mount /dev/sda2 /mnt mkdir /mnt/boot mount /dev/sda1 /mnt/boot
(正确,采用GRUB)挂在文件系统:
mount /dev/sda2 /mnt
安装¶
安装基本软件包:
pacstrap /mnt base linux linux-firmware
配置¶
fstab
生成fstab文件(这里 -U
或 -L
定义UUID或labels):
genfstab -U /mnt >> /mnt/etc/fstab
chroot
将根修改到新系统:
arch-chroot /mnt
设置时区:
ln -sf /usr/share/zoneinifo/Asia/Shanghai /etcc/localtime
运行 hwclock 生成 /etc/cadjtime
hwclock --systohc
安装简化版vi作为服务器配置维护工具:
pacman -S vi
本地化语言支持 - 只需要UTF支持就可以,所以修改
/etc/locale.gen
保留en_US.UTF-8 UTF-8
然后执行:locale-gen
创建 locale.conf
设置如下:
LANG=en_US.UTF-8
网络配置¶
创建
/etc/hostname
文件,内容是主机名:acloud
编辑
/etc/hosts
127.0.0.1 localhost 127.0.0.1 acloud.staging.huatai.me acloud
Root密码及用户账号¶
设置root密码:
passwd
设置日常账号:
groupadd -g 20 staff useradd -g 20 -u 502 -d /home/huatai -m huatai passwd huatai
设置sudo:
pacman -S sudo echo "huatai ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers
安装系统工具¶
安装openssh:
pacman -S openssh
此时还在chroot状态,所以无法直接使用 Systemd进程管理器 ,则执行以下命令手工启动 sshd
ssh-keygen -A
/usr/bin/sshd
使用EFISTUB启动(失败)¶
备注
我尝试了EFISTUB方式,但是在移动U盘上失败,启动页面空白。所以改为参考 Install Arch Linux on a removable medium 采用安装标准boot loader 来启动
本段落是我的尝试记录,实际未成功,所以应该跳过这段
安装 efibootmgr
pacman -S efibootmgr
获取
/dev/sda1
分区ID (PARTUUID):ls -lh /dev/disk/by-partuuid/
显示:
lrwxrwxrwx 1 root root 10 Jun 14 02:42 258b404c-d631-4b9a-9457-05c928be2e02 -> ../../sda2
lrwxrwxrwx 1 root root 10 Jun 14 02:42 f8b79904-985b-455f-8182-75e313efbbdf -> ../../sda1
这里 sda1
的PARTUUID是我们需要用来创建启动PART ID的参数:
efibootmgr --disk /dev/sda --part 1 --create --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=258b404c-d631-4b9a-9457-05c928be2e02 rw initrd=\initramfs-linux.img' --verbose
备注
参数:
--part 1
标识ESP分区root=
标识root分区,也就是这里的sda2
如果使用swap分区,则还可以添加
resume=
参数来标识swap分区
警告
这里有一个疑惑, --disk /dev/sda
能保证系统启动时候设备识别么?毕竟每次启动系统是被磁盘顺序不同,可能会有不同的设备标记。
例如,我安装启动U盘和目标U盘都插在主机上,启动时候
arch linux不能识别ESP分区的vfat文件系统,启动时候会报错
mount: /new_root: unknown filesystem type 'vfat'
。原因是我将VFAT的分区/etc/sda1
作为/boot
,但是默认安装的内核是没有带有VFAT模块。
修改 /etc/mkinitcpio.conf
添加 vfat 和 xfs 模块:
MODULES=(vfat xfs)
BINARIES=(fsck fsck.ext2 fsck.ext3 fsck.ext4 e2fsck fsck.vfat fsck.msdos fsck.fat fsck.xfs)
安装fsck工具:
pacman -S dosfstools xfsprogs
生成新的initramfs:
mkinitcpio -P
这里有一些WARNING提示,是和硬件相关的 firmware
==> WARNING: Possibly missing firmware for module: aic94xx
==> WARNING: Possibly missing firmware for module: bfa
==> WARNING: Possibly missing firmware for module: qed
==> WARNING: Possibly missing firmware for module: qla1280
==> WARNING: Possibly missing firmware for module: qla2xxx
==> WARNING: Possibly missing firmware for module: wd719x
==> WARNING: Possibly missing firmware for module: xhci_pci
只要系统已经安装了 linux-firmware
,上述WARNING可以忽略
设置以后检查启动项:
efibootmgr --verbose
设置启动顺序:
efibootmgr --bootorder XXXX,XXXX --verbose
这里 xxxx,xxxx
是刚才 efibootmgr --verbose
输出的每个启动项的编号。默认就是刚才新添加的启动项在最前面,也就是默认先启动刚才新安装的配置
备注
如果历史上积累了太多无用的EFI启动项,可以通过以下命令删除:
efibootmgr -b # -B
这里 #
是项目,请替换成实际值,例如:
efibootmgr -b 001F -B
重启系统
使用exit或者ctrl-d命令chroot环境,然后 umount -R /mnt
,最后输入 reboot
命令重启系统。
安装Boot Loader - GRUB¶
对于使用GRUB的系统,和前面EFISTUB不同,暂时不挂载
/dev/sda1
,只挂载/dev/sda2
到/mnt
即执行pacstrap /mnt base linux linux-firmware
。不过,我已经执行过一次efibootmgr
,所以简单将文件移动到/boot
目录下即可执行chroot:
arch-chroot /mnt
其他安装软件步骤都是相同的,见上文
安装Grub bootloader:
pacman -S grub efibootmgr
备注
Grub会调用 efibootmgr
来操作UEFI
创建EFI分区挂载目录:
mkdir /boot/efi
挂载ESP分区:
mount /dev/sda1 /boot/efi
安装grub:
grub-install --target=x86_64-efi --bootloader-id=GRUB --efi-directory=/boot/efi
创建配置:
grub-mkconfig -o /boot/grub/grub.cfg
注意
/etc/fstab
配置,需要修订/boot/efi
挂载/dev/sda1
# /dev/sda2 UUID=e5f1f419-266c-41b3-9df8-fef7fcd26f02 / xfs rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 1 # /dev/sda1 UUID=5800-6B75 /boot/efi vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2
备注
这里 /dev/sda1
挂载修改为 /boot/efi
修改
/etc/mkinitcpio.conf
添加 vfat 和 xfs 模块(重要步骤,确保内核启动支持vfat和xfs分区),并且带上必要的磁盘fsck(按需要支持的分区类型添加):MODULES=(vfat xfs) BINARIES=(fsck fsck.ext2 fsck.ext3 fsck.ext4 e2fsck fsck.vfat fsck.msdos fsck.fat fsck.xfs)
修改
HOOKS
段落,将block
和keyboard
提前到autodetect
前面。这个措施对于在多系统启动是在早期用户空间加载需要的模块:#HOOKS=(base udev autodetect modconf block filesystems keyboard fsck) HOOKS=(base udev block keyboard autodetect modconf filesystems fsck)
如果U盘需要用于不同的处理器,例如intel或amd,则同时安装
amd-ucode
和intel-ucode
软件包:#pacman -S amd-ucode intel-ucode pacman -S intel-ucode
安装fsck工具:
pacman -S dosfstools xfsprogs
生成新的initramfs:
mkinitcpio -P
安装必要软件包¶
为方便工作,安装以下软件包:
pacman -S sudo screen wpa_supplicant
升级系统:
sudo pacman -Syu
网络配置¶
这次安装的arch linux是作为服务器使用,所以只安装字符界面工具。网络配置我没有采用 ThinkPad X220上运行Arch Linux 的 netctl 工具。
arch linux配置IP(静态或动态) 提供了不同的网络配置方法,这里实践仅采用简洁的 Systemd Networkd服务 完成
静态IP¶
编辑
/etc/systemd/network/enp0s25.network
[Match] Name=enp0s25 [Network] Address=192.168.6.199/24 Gateway=192.168.6.200 DNS=192.168.6.200
启动服务:
sudo systemctl enable --now systemd-networkd
备注
上述配置是完成对物理主机的有线网卡静态IP地址配置,这个IP地址是内网IP地址
无线网络¶
系统默认采用了 Systemd进程管理器 ,所以通常可以直接 使用systemd-networkd配置无线 ,对于复杂的 802.1x和EAP
认证,可以 使用wpa_supplicant连接无线网络