ThinkPad X220上运行Arch Linux
在 ThinkPad X220上运行Ubuntu 一段时间后,感觉还有一些不满意:主要是 ThinkPad X220笔记本 对Linux非常友好,能够hack BIOS释放更大性能,可玩性高,所以权衡之后,转为采用arch linux来运行底层操作系统,部署了桌面系统作为个人开发平台。
在 ThinkPad X220笔记本 上可以自动识别网络设备,所以安装比 MacBook Pro上运行Arch Linux 方便很多
安装
创建安装U盘:
hdiutil convert -format UDRW -o archlinux-2019.09.01-x86_64.img archlinux-2019.09.01-x86_64.iso sudo dd if=archlinux-2019.09.01-x86_64.img.dmg of=/dev/rdisk3 bs=10m
通过U盘启动
启动后进入的是字符终端,安装方式类似Gentoo。
有线网络设置
配置:
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
默认安装系统是已经启动了sshd服务,所以上述配置IP之后,就可以远程登陆系统进行下一步安装
无线网络设置
备注
Arch Linux安装需要网络,通常建议先通过有线网络连接Internet来完成安装过程。不过,我的工作环境没有有线,所以先设置无线网络。
备注
默认Linux内核是模块华的,硬件的设备驱动作为内核模块保存在硬盘上。当操作系统启动时udev会根据硬件加载不同的驱动模块,这就创建了需要的网络接口。有些无线芯片需要额外的固件(firmware),则默认安装的 linux-firmware
包含了很多固件支持。虽然udev能自动加载内核模块,但是也有一些内核模块需要手动安装,如果加载了互相冲突的模块,则需要屏蔽掉不需要的模块。
安装无线软件包 wireless_tools
可以提供 iwconfig
命令
检查网络接口名称:
iwconfig
可以看到如下输出:
wlp3s0 IEEE 802.11 ESSIID:off/any
...
激活无线网卡:
ip link set wlp3s0 up
搜索可用的无线网络:
iwlist wlp3s0 scan | less
检查兼容网卡:
lspci -k
可以看到内核加载了无线网卡的模块
设置无线的复杂方法:netctl
进入 netctl 案例目录:
cd /etc/netctl/examples cp /etc/netctl/examples/wireless-wep /etc/netctl/home
这里 home
是profile名字。
修改profile文件
/etc/netctl/home
,主要修订 Interface 和 SSID 以及密钥启动无线网络连接:
netctl start home
准备工作
更新系统时钟:
timedatectl set-ntp true
磁盘分区:
parted /dev/sda
备注
/dev/sda1 划分为 EFI系统分区,大小 260-512MB
/dev/sda2 根分区,大小50GB
格式化分区:
mkfs.ext4 /dev/sda2
挂载文件系统:
mount /dev/sda2 /mnt mkdir /mnt/boot mount /dev/sda1 /mnt/boot
安装
选择镜像网站
arch linux的镜像网站定义在 /etc/pacman.d/mirrorlist
。在这个定义文件中,越靠前的网站优先级越高,所以建议将地理位置最近的网站列到最前面。例如,在中国,可以选择163镜像网站。
安装基本软件包:
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/zoneinfo/Asia/Shanghai /etc/localtime
运行 hwclock 生成 /etc/cadjtime :
hwclock --systohc
本地化语言支持 - 只需要UTF支持就可以,所以修改
/etc/locale.gen
保留en_US.UTF-8 UTF-8
然后执行:
locale-gen
创建
locale.conf
设置如下:
/etc/locale.conf
配置LANG=en_US.UTF-8
网络配置
创建
/etc/hostname
文件,内容是主机名:zcloud
编辑
/etc/hosts
127.0.0.1 localhost 127.0.1.1 zcloud.huatai.me zcloud
Initramfs
通常不需要创建新的 initramfs
,因为在执行 pacstrap
命令安装linux软件包的时候已经执行过 mkinitcpio
。不过,对于LVM, 系统加密 或者 RAID ,则需要修改 mkinitcpio.conf
然后创建 initramfs 镜像:
/etc/mkinitcpio.conf
后执行 mkinitcpio
生成定制的 Initramfsmkinitcpio -P
Root密码及用户账号
设置root密码:
passwd
创建日常账号(
admin
)并设置sudo:
# arch linux使用wheel组,debian则使用sudo组
groupadd -g 505 admin
useradd -g 505 -u 505 -s /bin/bash -d /home/admin -m admin
usermod -aG wheel admin
echo "%wheel ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
# 必须设置admin密码,默认root用户无法ssh登陆,需要使用admin账号
passwd admin
安装Boot Loader
备注
请参考 EFISTUB ,我这里采用了将 ESP 分区挂载到 /boot
目录,直接使用 EFISUB 就不需要安装bootloader。
如果要使用常规的boot loader,例如GRUB,则需要将 ESP 分区挂载到 /efi
目录。
安装Boot Loader (参考 Gentoo GRUB ) (实际实践是在 MacBook Air上运行Arch Linux 完成)
pacman -S grub efibootmgr os-prober
# EFI分区单独挂载在 /efi 目录
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
使用EFISTUB启动
安装 efibootmgr
pacman -S efibootmgr
参考 EFISTUB - Using UEFI directly 执行如下命令:
efibootmgr --disk /dev/sda --part 1 --create --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw initrd=\initramfs-linux.img' --verbose
备注
PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
设置PARTUUID参数请检查 ls -lh /dev/disk/by-partuuid/
目录下设备文件的软链接,可以找到对应磁盘 /dev/sda1
的 PARTUUID。请注意,PARTUUID和磁盘UUID不同,在 /etc/fstab
中使用的是UUID。
警告
这里存在一个问题,就是arch linux不能识别ESP分区的vfat文件系统,启动时候会报错 mount: /new_root: unknown filesystem type 'vfat'
。原因是我将VFAT的分区 /etc/sda1
作为 /boot
,但是默认安装的内核是没有带有VFAT模块。
解决方法参考 Minimal initramfs 修改添加vfat模块以及对应的fsck工具(我这里也添加了btrfs,以便后续使用btrfs数据盘。注意需要安装对应的fsck工具)
MODULES=(vfat btrfs)
BINARIES=(fsck fsck.ext2 fsck.ext3 fsck.ext4 e2fsck fsck.vfat fsck.msdos fsck.fat fsck.btrfs)
安装fsck工具:
pacman -S dosfstools btrfs-prog
生成新的initramfs:
mkinitcpio -P
设置以后检查启动项:
efibootmgr --verbose
设置启动顺序:
efibootmgr --bootorder XXXX,XXXX --verbose
这里 xxxx,xxxx
是刚才 efibootmgr --verbose
输出的每个启动项的编号。
重启系统
使用exit或者ctrl-d命令chroot环境,然后 umount -R /mnt
,最后输入 reboot
命令重启系统。
安装必要软件包
为方便工作,安装以下软件包:
pacman -S sudo screen wpa_supplicant \ firefox midori parole \ ristretto leafpad keepassxc
备注
firefox虽然没有chromium(chrome)速度快,但是相对节约资源,并且随着版本迭代,速度已经基本和chrome接近。并且插件丰富,可以实现很多的功能,也是开发web应用的利器。
midori是Xfce4平台支持的浏览器开源项目,内核采用webkit,非常轻量级,作为主要的工作浏览器。(Xfce4修改默认浏览器方法: Settings -> Settings Manager -> Preferred Applications )
parole是Xfce4推荐的媒体播放器。
ristretto和leafpad是Xfce4平台支持的轻量级图片浏览和文本编辑器。
KeePassX在Linux平台需要安装mono实在太沉重,所以替换成社区版本到KeePassXC,不过不能打开KeePassX的最新割舍密码库文件,所以采用先从KeePassX导出CSV文件,然后导入到KeePassXC中使用。
升级系统:
sudo pacman -Syu
公司802.1X无线网络
备注
个人实践发现,802.1X设置相对比较复杂,虽然能够通过命令行和配置文件实现,例如使用nmcli或netctl结合wpa_supplicant完成配置。但是,实际上协议分为很多种加密和认证类别,命令行配置需要花费很多时间尝试。即使我之前配置过很多次,依然发现在配置中遇到很多挫折。
推荐采用 NetworkManager 来完成配置,兼容性和易用性非常好。虽然wicd更为轻量,但是我发现wicd强制需要提供详细的WPA/WEP协议细节,反而非常难以匹配环境。实际上,最终我采用NetworkManager一次配置成功。
netctl命令行配置网络
参考 Getting wired internet with 802.1X security running at install
创建
/etc/netctl/office
配置文件,认证信息采用 wpa_supplicantDescription="802.1X wireless connection" Interface=wlp3s0 Connection=wireless IP=dhcp Auth8021X=yes WPAConfigFile=/etc/wpa_supplicant/wpa_supplicant-office.conf
创建
/etc/wpa_supplicant/wpa_supplicant-office.conf
配置文件包含认证信息:ctrl_interface=/var/run/wpa_supplicant ap_scan=0 network={ key_mgmt=IEEE8021X eap=TTLS identity="email address" password="password" phase2="autheao=MSCHAPV2" }
然后通过netctl启动无线网络:
sudo netctl start office
就可以连接802.1X认证网络。
wicd设置网络
Xfce虽然没有提供默认的网路管理工具,但是结合轻量级wicd管理工具非常容易设置。
安装:
sudo pacman -S wicd wicd-gtk
将用户加入到users组:
sudo gpasswd -a USERNAME users
启动wicd:
sudo systemctl start wicd sudo systemctl enable wicd
启动客户端:
wicd-client
也可以启动到通知栏:
wicd-client --tray
NetworkManager设置网络
参考 Arch Linux 文档 - NetworkManager
安装NetworkManager:
sudo pacman -S networkmanager network-manager-applet
激活NetworkManager:
sudo systemctl start NetworkManager sudo systemctl enable NetworkManager
重新登陆xfce图形桌面,会看到自动启动NetworkManager Applet,则在托盘可以看到图标,配置交互方式完成,EASY
图像界面
安装显卡驱动(虽然没有选择mesa 3D支持但是依然会安装):
sudo pacman -S xf86-video-intel
安装 xorg-server (没选安装 xorg 是为了降低软件包):
sudo pacman -S xorg-server
备注