Arch Linux安装指南

发布于 2020-02-15  2676 次阅读


原本一直没注意到BIOS默认的硬盘模式是IDE,于是把硬盘改成了AHCI模式,之后发现因为驱动的原因无法启动。想着与其改来改去,不如干脆重新安装一遍,顺便记录一下安装过程。

准备

  • U盘一个;
  • 电脑一台;
  • 网络连接。

制作安装盘

在Arch Linux的官方下载页面可以下载到诸如archlinux-version-x86_64.iso形式的安装镜像,中间的version为安装镜像的版本号。如果官方的下载链接速度很慢或者无法下载的话可以在页面的下方找到镜像下载站点来下载。

如果使用Linux/macOS之类的系统可以使用dd命令来将镜像写入U盘:

dd if=archlinux-version-x86_64.iso of=dev/sdb

其中if=后面为安装镜像的文件名,of=后面为U盘的路径。

使用Windows安装的话可以使用balenaEtcher或者其他镜像制作工具来将镜像写入到U盘内。

启动到live环境

将制作好的安装盘插入到电脑并开机,在开机时选取使用U盘启动。选取启动顺序的方法一般可以在电脑或主板的说明书上找到,或者显示在开机界面中。如果找不到的话,可以搜索电脑或主板的品牌名+启动顺序来找到修改方法。

如果无法启动到U盘的话可能是启动顺序设定错误或者U盘写入失败。如果始终无法成功写入U盘的话可以换一个U盘来尝试。

在U盘启动后可以看到Arch菜单界面,选择Boot Arch Linux,并按Enter键进入安装环境。

验证启动方式

现在大多数主板都使用了UEFI来进行引导,可以使用如下命令来验证启动模式:

ls /sys/firmware/efi/efivars

如果存在该目录,则为UEFI启动方式,如果显示如下内容:

ls: cannot access '/sys/firmware/efi/efivars': No such file or directory

说明目录不存在,则系统可能为BIOS启动方式。

此外,可以使用fdisk -l命令来查看硬盘分区,如果硬盘的Disklabel type属性为gpt,且硬盘当中有Type类型为EFI System的分区,说明引导方式为EFI模式。

不过,最靠谱的方法其实是查看主板或者电脑的说明书。

连接到网络

使用有线网络并且使用启用了DHCP的话,安装镜像会在启动时使用dhcpcd来配置有线连接。如果没有自动连接的话可以使用一下命令获取IP地址:

dhcpcd

如果使用无线网络连接的话使用如下命令来进入Wi-Fi的设置:

wifi-menu

在设置界面中选择要连接的Wi-Fi并输入密码进行连接。

新版的安装镜像似乎换掉了netctl,所以以上命令应该改为用iwctl来代替。由于现在暂时不用Arch了,所以这个怎么用,可以去看官网的说明。

网络连接成功的话可以使用ping命令来测试网络连接:

ping archlinux.org

更新系统时间

使用timedatectl来确保系统时间是准确的:

timedatectl set-nap true

正常情况下执行该命令后不会有输出。

建立磁盘分区

[danger]进行分区可能会导致数据丢失,请确保分区之前对重要数据进行了备份![/danger]

被系统识别的磁盘会被分配为块设备,可以使用fdisk来查看当前磁盘状况

fdisk -l

如果使用EFI方式来启动的话,需要建立EFI分区,或者直接利用硬盘中已有的EFI分区。如果使用BIOS方式引导,则不需要EFI分区。

创建EFI分区

使用fdisk来进行分区:

fdisk /dev/sdX

其中X为要进行分区的磁盘,例如sda,输入m可以查看帮助列表。

如果是一块新硬盘的话,输入g来创建一个新的分区表,否则跳过这一步。

输入n创建分区,首先会输入编号和起始扇区,使用默认数值即可,然后输入结束扇区或分区大小。建议的分区大小为260-512MiB。输入+512M即可创建512M大小的分区。

输入t并选择之前创建的分区编号来改变分区类型,输入l可以查看支持的分区类型以及序号,这里EFI分区对应的序号为1,所以在这里输入1

输入p可以查看磁盘状态,确保之前的步骤没有做错。

输入w将之前的设置写入磁盘,然后输入一下命令来格式化分区:

mkfs.fat -F32 /dev/sdXY

其中sdXY为之前创建的分区。

创建根分区

使用fdisk进行分区:

fdisk /dev/sdX

其中sdX为要分区的磁盘。

如果是新硬盘并且使用BIOS引导的话,输入o来创建新的MBR分区表;如果是是新硬盘并且EFI分区位于另一块硬盘时,输入g创建新的gpt分区表;如果在上一步建立过分区表和EFI分区,则跳过这一步。

输入n来创建新的分区,首先输入编号和起始扇区,一般使用默认值即可。之后输入结束扇区或分区大小。如果要占据所有剩余空间的话,可以直接使用默认值;如果要创建交换空间的话,可以输入-512M来在最后空出512M的空间,其中512M可以替换为想要划留下来的空间大小。如果使用支持交换文件的文件系统,例如ext4,也可以不设置交换空间,而是设置交换文件来代替。

交换空间的分区方式可参照EFI分区的分区方法,其中交换分区的序号为82,并且交换分区无需格式化。

输入p可以查看分区的状态,确认无误后输入w写入操作。

分区完成之后使用以下命令来格式化根分区:

mkfs.ext4 /dev/sdXY

其中sdXY为之前创建的根分区。

如果创建了交换分区的话,使用mkswap来初始化交换分区。

mkswap /dev/sdXY
swapon /dev/sdXY

其中sdXY为交换分区。

挂载分区

使用mount命令将根分区挂载到/mnt中:

mount /dev/sdXY /mnt

其中sdXY为根分区。

如果使用EFI方式启动的话,还需要挂载EFI分区到/mnt/boot/mnt/efi目录中:

mkdir /mnt/boot
mount /dev/sdXY /mnt/boot

这里的sdXY为EFI分区。

安装

选择镜像

设置地理位置最近的镜像源可以加快下载速度,默认的设置当中镜像源已经被启用通过改变文件当中镜像源的顺序,可以改变不同镜像源的优先级,越靠前的镜像源的优先级最高。编辑/etc/pacman.d/mirrorlist文件来设置镜像源:

vim /etc/pacman.d/mirrorlist

找到其中标有China的源,将其剪切到文件的开头来将其优先级设为最高。也可以直接在文件开头直接输入,例如清华和浙大的镜像源:

Server = http://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
Server = http://mirrors.zju.edu.cn/archlinux/$repo/os/$arch

该文件接下来会被pacstrap复制到安装的系统当中,安装之后不需要重新设置。

安装必须软件包

使用pacstrap脚本可以安装Linux内核,基本软件包和硬件的固件:

pacstrap /mnt base linux linux-firmware

如果需要安装其他软件包组,例如base-devel,应将其名称添加到命令的后面,并用空格将其隔开。或者在Chroot到新系统之后使用pacman来进行安装。

配置系统

配置Fstab

Fstab文件可以用来自动挂载分区,使用以下命令可以生成fstab文件:

genfstab -U /mnt >>mnt/etc/fstab

在执行完命令后,应检查生成的文件是否正确:

cat /mnt/etc/fstab

检查该文件当中分区的挂载设置是否正确,例如根分区和EFI分区是否挂载到了对应的目录。

Chroot

使用Chroot来改变当前进程和子进程的可见根路径,通常用于系统维护。执行该命令后,就进入到了新安装的系统当中。

arch-chroot /mnt

设置时区

使用以下命令可以设置时区:

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

其中Region和City分别为地区和城市,例如:

ln -sf /usr/share/zoneinfo/Asis/Shanghai /etc/localtime

之后使用hwclock命令来生成/etc/adjtime文件:

hwclock --systohc

安装常用软件

由于系统中只包括了一些基本的软件,很多常用的软件都没有包括在内,例如文本编辑器和联网所需程序等,所以要先进行安装。安装软件需要使用Arch Linux的包管理器Pacman。这里使用Pacman来安装文本编辑器vim;连接有线网络需要的dhcpcd;连接无线网络的wpa_supplicant;显示图形化Shell界面的dialog,:

pacman -S vim dhcpcd wpa_supplicant dialog

当询问是否继续安装时输入Y来继续安装。

本地化

本地化通过Locale来设置,通过编辑/etc/locale.gen文件来指定需要的本地化类型,通过去除对应行前面的注释符号#即可:

vim /etc/locale.gen

然后移除以下行前面的注释符号:

en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
zh_HK.UTF-8 UTF-8
zh_TW.UTF-8 UTF-8

保存之后执行locale-gen命令来生成locale信息:

locale-gen

接下来创建locale.conf并编辑LANG变量:

vim /etc/locale.conf

然后输入:

LANG=en_US.UTF-8

要注意这里不要输入中文的locale,由于Linux内核不支持中文,设置中文会导致乱码。

网络设置

编辑/etc/hostname文件:

vim /etc/hostname

在其中输入想要设置的名称例如myhostname

myhostname

接下来编辑/etc/hosts文件:

vim /etc/hosts

在文件内添加对应的信息:

127.0.0.1    localhost
::1          localhost
127.0.1.1    myhostname.localdomain myhostname

如果在网络中使用固定IP,则使用固定的IP来替换127.0.0.1。

再次重新使用网络管理软件来重新进行网络连接。

设置Root密码

由于Root用户权限很高,所以要设置Root密码来避免安全问题。执行以下命令:

passwd

之后输入两次要设置的密码,输入的密码在屏幕中不会有任何显示。

安装引导程序

使用UEFI的主板可以使用EFISTUB直接引导或者使用引导程序,BIOS主板可以使用引导程序来引导。

UEFI直接引导

Linux内核原生支持使用EFISTUB来将内核作为EFI可执行文件加载,EFISTUB可以支持UEFI主板直接引导内核或者使用引导程序来间接引导内核。如果主板的UEFI引导菜单不便操作并且有多个系统或内核要引导,可以使用引导程序例如GRUB。

如果将EFI分区挂载到/boot目录的话,在使用pacman进行更新时,也可以同时更新EFI固件所读取的内核。

首先安装efibootmgr:

pacman -S efibootmgr

接下来使用efibootmgr创建加载内核的引导项:

efibootmgr --disk /dev/sdX --part Y --create --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw initrd=\initramfs-linux.img' --verbose

其中/dev/sdXY为EFI分区的驱动器和分区号,例如EFI分区为/dev/sda1,则应分别替换为/dev/sda1。root=参数后面为系统的根分区,XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX为分区的UUID,此外,也可以不使用UUID,而是使用分区的路径,例如可以将PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX替换为/dev/sda2

使用GRUB引导

GRUB可以引导BIOS启动或者是UEFI启动,在安装之前如果已经安装过其他系统,请确保之前安装的GRUB已经被卸载。

首先安装os-proberntfs-3g,它们可以与Grub配合检测已安装的系统并自动设置:

pacman -S os-prober ntfs-3g

使用BIOS方式引导

首先安装grub

pacman -S grub

部署grub:

grub-install --target=i386-pc /dev/sdX

其中sdX为系统所在硬盘。

生成配置文件:

rub-mkconfig -o /boot/grub/grub.cfg

使用EFI方式引导

安装grubefibootmgr

pacman -S grub efibootmgr

部署grub:

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub

生成配置文件:

grub-mkconfig -o /boot/grub/grub.cfg

检查配置

打开gurb的生成的grub.cfg文件:

vim /boot/grub/grub.cfg

查看文件的menuentry部分是否有已安装的所有系统的入口,如果没看到刚安装的Arch Linux入口,可以先检查EFI目录中是否正确部署了Linux内核:

cd /boot
ls

查看是否有如下文件:

initramfs-linux-fallback.img initramfs-linux.img intel-ucode.img vmlinuz-linux

如果没有,则可能是内核没有被正确部署,在确认/boot目录无误后,使用pacman重新部署内核:

pacman -S linux

之后重新生成grub的配置文件。

如果os-prober软件包安装争产,但是没有其他系统的入口则可能是安装环境下无法检查到其他系统。可以在重启到新系统之后执行以下命令:

grub-mkconfig -o /boot/grub/grub.cfg

如果仍然没有其他系统,可以参照Wiki手动编辑配置文件来添加。

重启

首先退出chroot状态。执行以下内容:

exit

卸除挂载:

umount /mnt/boot
umount /mnt

最后重启:

reboot

推荐配置

连接网络

重启到新系统之后,默认状态下并没有连接网络,所以需要重新联网。使用有线网络的话执行如下命令:

dhcpcd

使用无线网络的话执行以下命令:

wifi-menu

创建交换文件

如果之前没有建立交换分区的话,也可以在这一步建立交换文件来代替。首先为交换文件划分空间:

fallocate -l 512M /swapfile
其中512M为分配的大小,单位为M或G。交换文件的权限如果过大会出现很严重的问题,所以要修改权限,执行:
chmod 600 /swapfile
设置交换文件:
mkswap /swapfile
启用交换文件:
swapon /swapfile

编辑/etc/fstab文件来自动挂载:

vim /etc/fstab

在最下方新建一行输入以下内容:

/swapfile none swap defaults 0 0

建立新用户

root用户由于权限很高,容易出现安全风险,所以一般推荐建立新的用户来日常使用,使用以下命令建立一个新用户:

useradd -m -G wheel username

其中username为新用户的用户名,之后为新用户设置一个密码:

passwd username

其中username为新用户的用户名,在这里输入两次密码确认设置。

安装sudo

使用sudo可以避免在执行需要管理员权限的命令时切换到root用户,首先安装sudo:

pacman -S sudo

sudo提供了编辑配置文件的专门命令:

visudo

如果提示没有默认编辑器或者对默认不满意的的话可以使用以下命令指定使用的编辑器:

EDITOR=vim visudo

找到以下行,并去掉开头的注释符号#

# %wheel ALL=(ALL)ALL

配置完成之后重启系统:

reboot

安装AUR助手

Arch Linux本身并不能直接安装AUR中的软件,而是要下载后进行安装。使用AUR助手可以以包管理器的形式来安装AUR中的软件。AUR助手本身就是AUR软件,所以要将其下载后进行安装。首先安装git用来下载AUR助手:

pacman -S git

这里使用yay作为AUR助手,首先下载yay:

git clone https://aur.archlinux.org/yay.git

进入yay的文件夹中:

cd yay

安装:

makepkg -si

yay的使用方式类似pacman,并且也可以调用pacman来更新和安装软件。

参考

  1. Installation guide (简体中文) - ArchWiki
  2. 以官方Wiki的方式安装ArchLinux
  3. EFISTUB - ArchWiki
  4. systemd-boot和EFISTUB - 知乎
  5. General recommendations (简体中文) - ArchWiki
  6. ArchLinux安装后的必须配置与图形界面安装教程
  7. ArchLinux你可能需要知道的操作与软件包推荐「持续更新」