.. _archlinux_on_thinkpad_x220: ================================ ThinkPad X220上运行Arch Linux ================================ 在 :ref:`ubuntu_on_thinkpad_x220` 一段时间后,感觉还有一些不满意:主要是 :ref:`thinkpad_x220` 对Linux非常友好,能够hack BIOS释放更大性能,可玩性高,所以权衡之后,转为采用arch linux来运行底层操作系统,部署了桌面系统作为个人开发平台。 在 :ref:`thinkpad_x220` 上可以自动识别网络设备,所以安装比 :ref:`archlinux_on_mbp` 方便很多 安装 ====== - 创建安装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之后,就可以远程登陆系统进行下一步安装 无线网络设置 ================ .. note:: Arch Linux安装需要网络,通常建议先通过有线网络连接Internet来完成安装过程。不过,我的工作环境没有有线,所以先设置无线网络。 .. note:: 默认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 可以看到内核加载了无线网卡的模块 设置无线的简易方法:wifi-menu ------------------------------ Arch Linux提供了一个字符终端设置无线的交互工具 ``wifi-menu`` ,直接执行这个命令可以打开 ncurse 控制台图形界面,非常方便使用。 设置无线的复杂方法: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 .. note:: - /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): .. literalinclude:: archlinux_on_mba/fstab :caption: 生成fstab文件 - chroot 将根修改到新系统: .. literalinclude:: archlinux_on_mba/chroot :caption: chroot进入安装的arch linux系统 :language: bash - 设置时区: .. literalinclude:: archlinux_on_mba/timezone :language: bash :caption: 设置上海时区 - 运行 hwclock 生成 /etc/cadjtime : .. literalinclude:: archlinux_on_mba/hwclock :language: bash :caption: 同步校正时间到硬件时钟 - 本地化语言支持 - 只需要UTF支持就可以,所以修改 ``/etc/locale.gen`` 保留 ``en_US.UTF-8 UTF-8`` 然后执行: .. literalinclude:: archlinux_on_mba/local-gen :language: bash :caption: 本地化语言支持 UTF - 创建 ``locale.conf`` 设置如下: .. literalinclude:: archlinux_on_mba/locale.conf :language: bash :caption: ``/etc/locale.conf`` 配置 网络配置 ---------- - 创建 ``/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 镜像: .. literalinclude:: archlinux_on_mba/mkinitcpio :language: bash :caption: 修订 ``/etc/mkinitcpio.conf`` 后执行 ``mkinitcpio`` 生成定制的 **Initramfs** Root密码及用户账号 ==================== - 设置root密码: .. literalinclude:: archlinux_on_mba/passwd :language: bash :caption: 设置root密码 - 创建日常账号( ``admin`` )并设置sudo: .. literalinclude:: archlinux_on_mba/admin_sudo :language: bash :caption: 设置admin账号并设置sudo 安装Boot Loader ================== .. note:: 请参考 `EFISTUB `_ ,我这里采用了将 ESP 分区挂载到 ``/boot`` 目录,直接使用 EFISUB 就不需要安装bootloader。 如果要使用常规的boot loader,例如GRUB,则需要将 ESP 分区挂载到 ``/efi`` 目录。 详细请参考 `EFI system partition - Mount the partitioon `_ - 安装Boot Loader (参考 :ref:`gentoo_grub` ) (实际实践是在 :ref:`archlinux_on_mba` 完成) .. literalinclude:: archlinux_on_mba/grub :language: bash :caption: 安装和设置grub 使用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 .. note:: ``PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX`` 设置PARTUUID参数请检查 ``ls -lh /dev/disk/by-partuuid/`` 目录下设备文件的软链接,可以找到对应磁盘 ``/dev/sda1`` 的 PARTUUID。请注意,PARTUUID和磁盘UUID不同,在 ``/etc/fstab`` 中使用的是UUID。 .. warning:: 这里存在一个问题,就是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 .. note:: 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无线网络 ----------------------- .. note:: 个人实践发现,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_supplicant :: Description="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设置网络 ~~~~~~~~~~~~~~~ 参考 `Arch Linux 文档 - 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 .. note:: 参考 `arch linux文档 - Xorg `_ 参考 ======= - `archlinux Installation guide `_ - `How to Install Arch Linux `_ - `How To Setup A WiFi Network In Arch Linux Using Terminal `_