ArchLinux

前言

近来无事,准备将ArchLinux安装至自己的机子上作为备用系统使用,
也是用于更好地学习Linux系统


正文

ArchLinux的安装

由于个人精力有限,因此其安装过程针对一定的安装环境,实际操作请对照官方文档进行安装

其他相关链接:

  1. ArchLinux社区
  2. 一些Linux启动流程的解析

什么是UEFI,BIOS

BIOS(基本输入输出系统,Basic I/O System),是固化在计算机ROM上的一组程序,这组程序如其名字一样,作为操作系统启动前的步骤为操作系统的正式启动提供:

  1. 加电自检,检测CPU,计时芯片等各种计算机必需设备
  2. 枚举设备,初始化各设备和设备资源
  3. 从CMOS(可读写的RAM芯片,存储一些硬件配置和用户设定参数)中读取数据并进行有关系统设置
    等功能

UEFI(Unified Extensible Firmware Interface,统一可拓展固件接口),其作为一个硬件接口,可用于系统启动,维护的硬件支持。

UEFI的前身是EFI,作为BIOS方案的竞争者,由于早期没有如UEFI一样的接口标准,导致各个厂家的EFI千差万别。

使用了UEFI固件支持的BIOS提供更多的功能如:

  1. 支持2TB以上的硬盘
  2. 支持GPT分区(传统的MBR格式最多支持四个主分区,若要更多的分区需要逻辑分区)等

同时UEFI并没有传统BIOS的自检流程(传统启动方式称为Legacy),因此可以提供更为快速的启动速度。

什么是文件系统(filesystem)

文件系统的概念针对我们日常生活中所使用的各种存储设备如硬盘,USB,光盘等。

无论是我们日常所编写的文本文档,还是计算机程序,抑或是操作系统本身,都是一个文件,存储在我们使用的存储设备当中。

但是存储设备本身并没有特定的结构,整体就是存储单元的集合。而文件的调用,操作系统的引导都需要一种特定的结构去找到存储设备中对应的文件进行执行,例如索引结构等。

因此我们需要各种不同组织文件的方式,这就是文件系统

文件系统提供了各种文件在硬盘上的组织、存放方式,规定了文件本身的属性如文件名最大长度等。同时将数据结构的记录存储至存储设备上,使存储设备逻辑上具有所谓的文件系统

什么是分区表(MBR,GPT)

现今存储设备的容量已经大大提高,1TB的硬盘已经变得司空见惯。

而我们实际生活使用的过程中,由于各种需要,常对硬盘进行分区。

比如重要文件存放至分区1,其余文件存放至分区2。又或者系统1(作为一个文件)存放至分区3,系统2存放至分区4。

因此分区表就是为了对硬盘进行分区(逻辑意义上),并提供分区索引,分区信息存储等功能。

分区表存放于每一个分区的开始部分,提供了该分区的起始扇区,终止扇区,文件系统,下一个分区的索引等。

mbr格式的分区表由于其所占存储空间有限,最多只能支持2TB的存储空间,且每一个设备最多划分出4个主分区。

超出4个需要使用逻辑分区支持。

而gpt格式的分区表存储空间更大,因此可以提供更多的信息,支持9.2ZB的存储空间,且可以存储更多的分区信息而无需划分出逻辑分区。

什么是grub,syslinux(BootLoader)

Grub和Syslinux(只能启动Linux系统)等都是一种系统引导程序(Bootloader),本身也作为一个文件存储于设备之中。

UEFI或者BIOS会识别对应的分区并加载对应的程序,当BootLoader加载之后可以根据已有的配置加载已有的系统

类似Grub和Elilo等的BootLoader有针对UEFI和BIOS有相应的版本,安装时根据自己主板的型号进行选择。

需要注意的是,BIOS版本的BootLoader存放于boot分区(fdisk),UEFI版本的BootLoader存放于EFI分区(EFI文件系统,EFI System)

现在来安装一个ArchLinux

安装时间:2021.09.26

本机安装环境:

  1. 系统存储于外置硬盘
  2. 通过U盘启动盘安装
  3. x86_64芯片架构

下载ArchLinux镜像

下载地址:官网

制作启动盘

Windows下:

可以使用DiskGenius或者Windows自带的设备管理器进行分区

分区完毕后可以使用UltralISO进行启动盘的制作

Linux下:

dd if=(source file name) of=(target file name) (Options)

使用dd命令将镜像文件拷贝至对应U盘设备

根据主板型号进入BIOS/UEFI并选择U盘启动

通常使用F2Esc进入,不同型号的主板可能有所差异,请以主板制造商说明为准。

存储设备分区

*注:若无特殊说明,/dev/xxx统一为与挂载,分区等操作对应的设备分区

使用fdisk -l查看各个存储设备和编号

若为UEFI启动:使用gdisk /dev/xxx(设备编号)命令进行gpt格式的分区

同时需要注意预留500MB以上的EFI分区,swap分区建议为内存大小或者两倍内存大小

若为BIOS启动:使用fdisk /dev/xxx(设备编号)命令进行mbr格式的分区

需要启动一个boot分区

初始化文件系统

  • mkfs.vfat /dev/xxx 或者 mkfs.fat -F32 /dev/xxx 设置EFI分区(若需要的话)
  • mkfs.ext4 /dev/xxx 对需挂载根目录等的分区进行ext4文件系统的格式化
  • mkswap /dev/xxx 设置交换分区
  • swapon /dev/xxx 开启交换分区

挂载分区

由于我们需要从U盘进入我们安装的系统进行操作,因此需要先进行分区的挂载

我们挂载至/mnt分区下,此分区适用于挂载其他系统并对其进行操作。

由于我们刚格式化分区,因此系统以及相关组件并未被安装,并没有类似/home等目录

因此我们手动建立文件夹并进行相应的挂载

  • mount /dev/xxx /mnt 挂载根分区
  • mkdir /mnt/boot 建立boot目录,若为BIOS/MBR启动,此时可以进行mount /dev/xxx /mnt/boot
  • mkdir /mnt/boot/EFI 建立EFI目录,若为UEFI/GPT启动,此时可以进行mount /dev/xxx /mnt/boot/EFI
  • mkdir ...
  • mount ...
  • 直到全部分区正确挂载完毕

下载基本Linux系统和必要组件

格式化的分区并没有基本的Linux系统和组件,因此需要下载

如果下载过程中遇到下载速度慢或者中断等问题,请查看源设置:

打开 /etc/pacman.d/mirrorlist 并添加

  • 兰大镜像源
    Server = https://mirror.lzu.edu.cn/archlinux/$repo/os/$arch
  • 清华镜像源
    Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch

或者其他国内镜像源

然后刷新源

pacman -Syy

下载基本系统和组件

pacstrap /mnt base linux linux-firmware

pacstrap 是Arch提供的脚本,用于安装一些基础软件

实际使用时可以再安装vim nano等文本编辑器软件方便之后的配置文件的更改

生成fstab

fstab用于在加载linux系统时提供分区挂载的信息,缺少此文件或者配置出错将会导致系统无法进入甚至崩溃。

ArchLinux下提供了自动生成目录表的工具genfstab

具体使用:

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

-U 参数表示使用设备的UUID进行挂载

UUID是一个设备的绝对地址(理论上会产生冲突,但实际情况下发生冲突的可能性可以忽略不记)

>> 表示将前部分的输出写入后部分对应的文件

从U盘进入系统

arch-chroot /mnt

设置时间

设置时区

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

同步时间

hwclock –systohc

可以使用ntp进行时间的同步。

修改主机名

建立 /etc/hostname 文件写入主机名

更改语言

修改 /etc/locale.gen 文件将需要的字符集前的注释 # 删去

建立 /etc/locale.conf 文件写入

LANG=en_US.UTF-8

*官方wiki中推荐的是先使用en_US.UTF-8,以便终端界面能够正常显示

运行 locale-gen 使语言设置生效

修改网络设置

修改 /etc/hosts 文件写入

127.0.0.1 localhost

::1 localhost

127.0.0.1 主机名.localdomain 主机名

安装网络相关的包

由于ArchLinux秉持轻量化,因此基本系统中并未包括我们常用的网络资源管理相关的软件,需要自行下载。

pacman -S iw wpa_supplicant dialog dhcpcd

*dhcpcd 用于设置ip,如果使用 ip wpa_supplicant dhcpcd 方式配置网络需要安装

安装引导程序(bootloader)

BIOS/MBR

grub-install –target=i386-pc /dev/xxx (这里为boot分区挂载的设备)

grub-mkconfig -o /boot/grub/grub.cfg 根据grub配置更改grub相应参数(可自定义)

UEFI/GPT

pacman -S grub efibootmgr

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

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

initramfs生成

由于Linux系统的启动需要同时启动必要的组件,而某些组件之间又相互依赖,或者存在兼容性问题。

为了解决这些问题,Linux在真正的系统启动前需要启动initramfs,即initram file system,用于提供一个用户态的环境以完成内核不易完成的操作,比如加载必要的模块等

使用mkinitcpio -P打包initramfs

关于/usr分区独立进行挂载的问题

在目前的ArchLinux中,/sbin 链接至 /usr/sbin 当我们将/usr分区独立挂载后,会导致initramfs无法找到相应的文件导致启动失败

解决方法:

  1. 修改/etc/fstab文件找到/usr分区一行,将pass参数设置为0
  2. 修改/etc/mkinitcpio.conf文件,在HOOK中添加shutdown和usr

然后重新打包initramfs

mkinitcpio -P

修改root密码

passwd

退出当前系统

exit

解除挂载

umount -R /mnt (从根目录递归解除挂载)

重启进入系统

reboot

ArchLinux系统的配置

网络配置

*使用 ip+wpa_supplicant+dhcpcd 方式

启用网络接口

lspci | grep Network

查看网卡设备是否能被识别到

ip link

查看网络借口名称

*lo表示本地,wl开头表示无线网络接口,en开头表示有线网络接口

ip link set 接口名称 up

启用指定网络接口

使用wpa_supplicant连接无线网络

建立 /etc/wpa_supplicant/wpa_supplicant.conf 文件,写入

ctrl_interface=/run/wpa_supplicant

update_config=1

查看网络设备ifconfig

*本人的网络设备是wlan0

根据配置设置wpa_supplicant

wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf

网络设置

*一下为需要执行的命令,具体参数请根据自己的网络状态配置

wpa_cli

scan
scan_results
add_network
set_network 0 ssid “MYSSID”
set_network 0 psk “passphrase”
enable_network 0
save_config

由此配置完毕,之后可以于/etc/wpa_supplicant/wpa_supplicant.conf修改网络配置

systemctl enable wpa_supplicant.service

启用wpa_supplicant,当存在网络时自动连接,同时启用dhcpcd(systemctl enable dhcpcd)

dhcpcd设置ip

dhcpcd 接口名称

自动获取ip

GRUB引导多系统

UEFI/GPT下引导Windows

查看Win10启动分区(EFI分区)UUID,首先使用fdisk -l查看是哪个分区,比如是/dev/sda1

使用blkid /dev/sda1查看分区的UUID

修改 /boot/grub/grub.cfg 文件

找到 ### BEGIN /etc/grub.d/30_os-prober

添加Windows启动项

1
2
3
4
5
6
7
menuentry 'Microsoft Windows 10'  {
insmod part_gpt
insmod fat
insmod chain ## 链式加载
search --fs-uuid --no-floppy --set=root XXXX-XXXX ## EFI分区的UUID
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}

重启进入Grub引导界面查看效果

*如果没有发现Windows启动项,请试着修改 /etc/default/grub 文件

在文件中添加

GRUB_DISABLE_OS_PROBER=false

之后重新配置grub(已被发现则无需配置)

  1. 在Arch下是grub-mkconfig -o /boot/grub/grub.cfg
  2. 在一些系统下是update-grub

请以安装的系统提供的grub文档为准

安装音频支持

*本人对音频安装需要解决:声卡内核驱动的安装,解除声卡静音,设置默认声卡

声卡内核驱动的安装

使用 高级Linux声音体系(Advanced Linux Sound Architecture,ALSA) 提供声卡的内核驱动

pacman -S alsa-utils

安装软件包,用来设置声音

解除声卡静音

alsamixer

进入声音管理界面调节声音,MM表示静音,使用m命令接触静音

speaker-test -c 8

检查是否正常输出声音,若没有声音输出或错误,可能是默认声卡配置的原因

aplay -L | grep :CARD

获取声卡的信息,:=前的名称为声卡的名称

speaker-test -D default:名称 -c 8

由上面的信息指定使用声卡名称进行测试

设置默认声卡

我们通过上述步骤获取声卡信息,其中包括声卡的编号,此时我们需要设置默认的声卡

建立 /etc/asound.conf 或者 ~/.asoundrc 文件,在文件中键入

1
2
defaults.pcm.card 编号
defaults.ctl.card 编号

保存退出,再次测试可以更改默认声卡

可以安装图形化音频调节kmix

目前我使用的音量调节程序:

alsamixer - cli界面调节音量

amixer - amixer set Master 50 , 调节主音量为50

kmix - 图形化界面调节音量

使linux支持挂载ntfs文件系统(微软使用)

pacman -S ntfs-3g

安装之后连接对应存储设备,可以直接使用mount命令挂载

安装中文输入法

首先安装输入法引擎,然后再安装对应语言的输入法。

pacman -S fcitx

安装fcitx输入法引擎

pacman -S fcitx-sunpinyin

安装一个中文输入法

pacman -S fcitx-im

安装输入法组件,以支持各种应用

pacman -S fcitx-configtool

图形化设置fcitx

同步时间

pacman -S ntp

安装ntp软件包

ntpd -u ntp:ntp

使用ntp

ntpq -p

启动时启用ntpd,用来同步时间

ArchLinux系统的美化

grub theme

grub作为引导程序,支持定制化,因此可以制作个性化的启动页面主题。

grub主题资源:

  1. Gnome-look
  2. Opendesktop.org

自定义安装:

  1. 首先将主题文件放置到系统grub主题文件夹中
  2. Arch下可以是/boot/grub/themes/,也可以是/usr/share/grub/themes/
  3. 修改 /etc/default/grub 文件,修改GRUB_THEME=对应主题目录/themes.txt
  4. 重启系统查看效果

中文字体的支持和安装

我们在/etc/locale.gen指定的是支持的字符集,但是除了字符集,我们还需要图形码来支持正常显示文字,也就是安装对应的字体。

Wiki ArchLinux的字体列表中,我们可以查看相应的字体并进行查看。

这里我下载安装两种字体,具体的应用会使用不同的字体。

pacman -S wqy-zenhei adobe-source-han-sans-otc-fonts

使用fc系列命令管理字体(请自行研究)


资料引用

  1. 什么是UEFI和BIOS
  2. 简单分析UEFI
  3. 文件系统
  4. 鸟哥的Linux私房菜
  5. ArchLinux安装(UEFI)
  6. ArchLinux Wiki上的mkinitcpio解释
  7. Linux Grub引导程序的主题美化
  8. ArchLinux Wiki上的wpa_supplicant解释
  9. Grub双系统配置
  10. os-prober错误配置导致多系统引导出错
  11. ArchLinux Wiki上的声音设备配置教程
  12. ArchLinux Wiki上输入法的安装
  13. ArchLinux Wiki上时间同步程序ntp的安装
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

请我喝杯咖啡吧~

支付宝
微信