ArchWiki 上的 Installation Guide 和 General Recommendations 详尽地描述了Arch Linux的安装过程以及一些必要的系统配置. 其实把指南看作一个系统组件的说明更为合适, 日后如果某部分的设置出现了问题或需要更改, 可以直接参考相应的内容, 而不必费时费力地重装. 这里简要记录一下安装过程和遇到的一些问题, 算是使用Arch Linux的笔记. 以下几乎所有的 shell 操作都需要root权限.

刻录系统镜像

安装系统前需要一张光盘镜像, 也可以用U盘替代. 刻录前需要先下载Arch Linux的镜像文件, 并且确保U盘能正常使用并且接触良好. 注意刻录的时候U盘上的数据会被销毁.

Windows上要使用 Rufus或USBWriter等工具来刻录.

Linux上可以使用 dd 命令, 可以先用 lsblk 查看 usb:

dd if=/path/to/image of=/dev/sdx bs=4M status=progress && sync

建立网络连接

建立网络链接是安装中的关键一步. 本地连接一般很容易, 但无线网卡如果遇到驱动问题就会非常麻烦, 所以在安装前一定要查看一下Linux是否支持自己的网卡, 或是否有相应的解决办法.

查看网卡和驱动模块:

lspci -v | awk -v RS='' '/[Ee]thernet/'

00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (2) I219-V (rev 31)
    ...
    Kernel driver in use: e1000e
    Kernel modules: e1000e

检查驱动是否加载:

dmesg | grep e1000e

...
[    5.107773] e1000e: enpxxxxxx NIC Link is Up 100 Mbps Full Duplex, Flow Control: Rx/Tx

有些网卡驱动可能和内核模块的加载顺序有关. 比如以前遇到的Broadcom无线网卡需要在内核模块 tg3 之前先加载 broadcom 模块.

modprobe -r tg3
modprobe broadcom
modprobe tg3

可以创建 /etc/modprobe.d/broadcom.conf 来指明加载顺序(参见 problem with tg3 and broadcom modules in system.d):

softdep tg3 pre: broadcom

利用Arch Linux自带的 iproute 包可以查看网络接口:

ip link show

...
2: enpxxxxxx: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000

本地连接的接口以 enp 开头, 无线网络一般以 wlp 开头. 如果网络状态 <BROADCAST,MULTICAST,UP,LOWER_UP> 不是 UP 的话需要启用网络接口:

ip link set network_interface up

本地连接直接通过 dhcpcd 建立连接就可以了: dhcpcd eth0

无线网络需要先验证身份, 可以利用 wpa_supplicant:

wpa_supplicant -B -i wifi0 -c /path/to/config.file

config.file 大概这样:

network={
  ssid="wifi_name"
  psk="password"
}

注意等号前后不能有空格. 然后同样使用 dhcpcd 建立连接.

可以用 systemd 来自动连接网络:

systemctl enable dhcpcd@enpxxxxxx.service
systemctl start dhcpcd@enpxxxxxx.service 

最后, ping 一下 www.archlinux.org 看一下网络连接是否大功告成:

ping -c 5 www.archlinux.org

注意, 在系统安装完成重新启动后, 需要在新系统里重新设置网络, 可以参考以上方法, 也可以安装 networkmanager 等工具自动设置.

安装系统

安装系统前需要先在硬盘上分出相应的区域. 目前有两种不同的分区方案, 一种是 Master Boot Record(MBR), 另一种是 GUID Partition Table(GPT). 它们的应用范围和分区方式可以参见 Archwiki上的 Partitioning 和 EFI system partition(不太懂, 不赘述了). UEFI 下需要创建一个 EFI System Partiton(ESP), 推荐512MiB, 对于高级格式化4K本地驱动器, 最小为256MiB.

分区方案要因人而异, 一开始我只分了 /boot (ESP) 和 / 两个分区, 后来加了块大硬盘, 又分出了 /home. 其他的 swap 之类的分区可以视情况而定, 但我觉得个人的电脑可以简单点.

分区的步骤主要如下:

  1. 利用 fdisk 分区, 创建一个至少256MiB的 ESP分区(假设为 /dev/sda1), 并标记为 bootable 以及其他分区(假定为 /dev/sda2);
  2. 格式化相应分区: mkfs.fat -F32 /dev/sda1 && mkfs.ext4 /dev/sda2
  3. 挂载分区: mkdir /mnt/boot && mount /dev/sda1 /mnt/boot && mount /dev/sda2 /mnt

然后按照 Installation Guide 安装系统就可以了:

  1. 在 /etc/pacman.d/mirrorlist 中取消要使用的镜像站前面的注释.
  2. 安装系统: pacstrap /mnt base.
  3. 生成要挂载的文件系统: genfstab -U /mnt >> /mnt/etc/fstab.
  4. 进入新安装的系统: arch-chroot /mnt.

Boot loader

Boot loader 就是启动系统时候的引导程序, 一般都会使用 GRUB 的吧. 安装 grub 之后, 需要配置一下:

grub-install --target=i386-pc /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

有时候原先硬盘的MBR会被某些程序写入一些乱七八糟的东西, 比如 Sector 32 being in use by FlexNet 这个问题. 这时候需要清空 MBR, 当然要先备份以防万一:

dd if=/dev/sda of=/archive/file bs=512 count=63
dd if=/dev/zero of=/dev/sda bs=512 count=63

开机的时候可以编辑 GRUB 中的启动条目来进入不同的模式, 适合在弄崩了图形界面之后进入, 省去使用安装盘.

在启动条目上按 e 在下面这行后面加上数字进入不同的 run level(这里是3, 带网络连接的命令行模式):

linux /boot/vmlinuz quiet 3 # boot into run level 3

不同模式可以参见下表:

run level number description
0 halt the system
1 single user model
2 local multiuser without network service started
3 full multiuser with network service started
4 not used
5 full multiuser with network service and X windows(GUI)
6 reboot

系统语言

可以按以下步骤来设置系统语言(locale):

  1. 在 /etc/locale-gen 取消需要的locale前面的注释.
  2. 生成locale: locale-gen.
  3. 设置 $LANG: echo "LANG=en_US.UTF-8" > /etc/locale.conf.
  4. 生成locale encodings: localedef -v -c -i en_US -f UTF-8 en_US.UTF-8.

忽略最后一步的话可能会在 terminal 里出现 “cannot set LC_TYPE/LC_MESSAGE/LC_ALL to default locale”.

时区和时间

设置时区, 国内是 Asia/Shanghai.

ln -sf /usr/share/zoneinfo/Region/City /etc/localtime

常用的查看/更改时间的命令有:

  1. 查看系统时间: timedatectl.
  2. 查看硬件时间: hwclock --show.
  3. 更改系统时间: date MMDDhhmm.
  4. 更改硬件时间: hwclock --systohc.

可以利用 systemd-timesyncd 来进行时钟同步:

timedatectl set-ntp true

利用 timedatectl status 可以查看时钟同步状态:

timedatectl status

                      Local time: Mon 2018-07-23 21:38:55 CST
                  Universal time: Mon 2018-07-23 13:38:55 UTC
                        RTC time: Mon 2018-07-23 13:38:55
                       Time zone: Asia/Shanghai (CST, +0800)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no

桌面环境

Xorg

个人电脑肯定是要装桌面的. Arch Linux 默认的安装里不包含桌面, 需要自己选择. 首先安装 xorg-server 和 xorg-server-utils (包含 xterm, xinit 等工具). 如果安装了桌面环境, 可以通过 /etc/X11/xinit/xinitrc 自动启动(以 lxde 为例):

exec startlxde

也可以使用 display manager 来图形化登陆. 可以参考 Desktop Environment 和 Display Manager.

输入法

中文输入法需要设置几个环境变量, 一般放在 ~/.xprofile 里, Xorg 启动后会从中读取, 这里以 fcitx 为例

export GTK_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export QT_IM_MODULE=fcitx

注意, 有些软件可能并不从 shell 或者相关文件中读取这些环境变量, 比如, 利用 systemd 启动 emacs --dameon 的时候需要指定 XMODIFIERS:

[Unit]
Description=Emacs Daemon

[Service]
Type=simple
Environment="LC_CTYPE=zh_CN.UTF-8" "XMODIFIERS=@im=fcitx"
ExecStart=/usr/bin/emacs --fg-daemon
ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"
Restart=always

[Install]
WantedBy=default.target

声音

Linux的声音驱动程序是 ALSA, 可以安装 alsa-utils, 然后用 alsamixer 来设置声音.

alsamixer 有个简单的界面, 里面标上 MM 的都处于静音状态, 如图:

img

小结

简要叙述了 Arch Linux 安装过程和一些必要的配置. 随着使用经验和相关知识的增加, 有些不懂的地方会豁然开朗. 也有很多时候因为折腾一些问题而有点灰心. 就像玩具一样, 喜欢的人自然会乐在其中了.