arch linux 安装
好长时间都没有更新自己的博客了,我简单翻阅了一下自己的更新记录,上一次更新好像还是在5月份左右,距今也有快半年,这半年也是遇到了很多事情,有不好的,也有好的。这半年我对在日常生活工作中使用Linux系统产生了一些兴趣,从零开始折腾这一系列的内容,主要从安装、配置、以及尝试各种软件来取代Windows的主导地位,也产生了一些心得,这里我想分几篇博客来聊聊我是如何慢慢使用arch Linux 来替代以前的Windows机器
为何选择arch Linux
我本身有一台6年前买的联想的笔记本,随着每次系统的更新,也变得越来越卡了,终于有一点我忍不了想着要不退回到windows 7吧,windows 10这台机器已经有点不行了。恰巧我最近在看一本关于计算机发展史的书,书中提到自由软件运动,那种运动有一种人人为我,我为人人的理想主义色彩,我想既然不能编写自由软件造福一方,至少应该享受自由软件带来的好处,而且国内经常爆出各种软件窃取用户隐私的新闻。何不趁此机会转移到自由软件阵营呢?说做就做,自由软件的基础自然是需要一个自由的操作系统,Linux是目前使用最为广泛的自由操作系统。在看了各种Linux发行版本之后我决定使用arch Linux,主要有以下几个原因:
- 更新方式比较激进,arch Linux采用滚动更新的方式,这意味着用户能享受最新的软件版本,当然过激的更新行为会导致一些问题,比如常见的滚挂。我自认为我不缺少动手能力,这个我有信心能自己解决
- arch Linux 丰富的软件源使它能够安装其他发行版Linux无法安装的软件
- 丰富的wiki文档,你能遇到的问题几乎都可以在里面找到答案
- 最小化安装,arch Linux自身是最精简的系统,几乎精简到不能再精简。因此比起其他发行版本的Linux来说,它提供更高自由度的可配置性。
- 安装困难,我一直觉得对于自己专业内的事情,要做就做最困难的,既然它的安装使用最为困难,那我就用它,当彻底征服了这一块内容,带来的成就感是无法比拟的。而且熟悉了它的安装过程,又例如提高对Linux的认识
基于上述几点理由,我开始了漫长的折腾之路
arch Linux 安装
安装主要参考 arch wiki 好在文档大部分都有中文版本,对于英语不好的人来说阅读起来也不会有过多的阻碍
制作U盘启动项
首先去官方指定的镜像站下载安装包,然后使用相应的工作制作U盘启动项,windows上我使用的是rufus、Linux或者mac上直接使用如下命令写入到U盘
sudo dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress oflag=sync
上述命令的含义是制作一个镜像文件,源文件内容保存在if
参数所指定的位置,输出到 of
所指定的位置, status=progress 表示现实制作进度, oflag=sync表示以同步的方式写入,即所有数据写入完成命令结束,而不是刚写入就结束
需要注意的是,sdx 是u盘在系统中的命名,一般插入U盘后,在shell上使用fdisk -l
可以看到,另外有的U盘可能经过分区,显示出下面还有sdx1、sdx2等分区,要写到sdx,而不是sdx1或者sdx2
将U盘插入待装机的电脑上,进入bios调整启动顺序和安全设施,如果使用uefi方式启动的话,需要调整启动方式为uefi only 而不是 legacy/csm
接下来就可以启动电脑,进入arch Linux的安装界面了
联网设置
进入到安装界面的第一步需要连接上网络,这里使用 iwctl
进行网络连接配置
iwctl #进入交互式命令行
device list # 列出设备名,比如无线网卡一般叫做 wlan0
station wlan0 scan #扫描Wi-Fi
station wlan0 get-networks #列出扫描到的Wi-Fi名称,例如要连接到esi-0这个Wi-Fi
station wlan0 connect esi-0 #尝试连接,这个时候需要输入密码
成功后就连上互联网了,可以使用 ping archlinux.org
来试试网络是否成功连上
更新系统时间
后续在访问https之类的站点时会验证客户端和服务器的证书和时间的,有时候时间不统一,在访问时可能会报无效的证书之类的错误
使用命令
timedatectl set-ntp true
更新之后可以使用 timedatectl status
检查服务状态
磁盘分区与格式化
根据arch wiki上的说法,采用uefi的启动方式时,至少需要一个boot
或者efi
分区作为efi
系统分区(大小不能小于280M)、一个根分区。
这里假设硬盘大小为100G,我采用如下的分区方案
- efi 分区
/efi
1G - 根分区
/
40G - 用户主目录
/home
剩余全部空间,越大越好
跟windows
做类比的话,根分区相当于c 盘,主要用来装系统相关的内容,用户分区相当于D盘或者其他盘,用来放用户数据,后续如果系统挂了,重装系统的话,不会破坏用户目录的内容,甚至如果用户目录在其他物理盘上,后面换机器了直接将这块盘挂载到其他机器上,数据直接就能用了
首先将磁盘分区表转化为gpt
类型
lsblk #显示分区状况
parted /dev/sdx #执行parted命令, 进行磁盘类型变更
(parted)mktable #输入mktable 修改磁盘分区表类型
new disk label type? gpt #输入gpt,修改分区表为gpt类型
quit #最后退出parted交互式命令
接下来使用cfdisk 命令对磁盘进行分区
cfdisk /dev/sdx #使用cfdisd对磁盘进行分区
free space
表示未分区的部分,上下键用来选择区域,左右键用来选择操作
先选择new
新建分区,然后输入大小,最后回车,重复几次这个操作,按照之前定义的大小来完成分区
记得完成之后,将选项调整到wirte
在退出前将分区写入到磁盘。完成之后使用
fdisk -l
查看分区
接下来格式化磁盘中的各个分区
- efi 分区格式化为 vfat 格式
- 根分区和用户分区格式化为 ext4格式
mkfs.ext4 /dev/sda2
mkfs.ext4 /dev/sda3
mkfs.vfat /dev/sda1
接下来将磁盘挂在到当前系统的文件目录下,使磁盘能正常被系统访问到
mount /dev/sda2 /mnt
mkdir /mnt/efi
mkdir /mnt/home
mount /dev/sda1 /mnt/efi
mount /dev/sda3 /mnt/home
系统安装
折腾了这么多东西,终于要开始正式安装系统了,arch linux
提供了一个脚本用来自动安装系统内核
pacstrap /mnt base base-devel linux linux-firmware
这句命令可以帮助我们将系统所需要的包安装到/mnt 这个目录也就是磁盘上
等待一段时间,安装就完成了,先别着急重启,还有一些内容需要安装
pacstrap /mnt dhcpcd vim sudo networkmanager # dhcpcd networkmanager 是网络相关的软件包,后期缺少可以通过网络下载,联网软件没有的话只能白瞎
系统自身配置
到这里基本已经完成了安装部分的工作了,接下来要进行的就是重启前的基本配置了
生成磁盘分区的记录文件
genfstab -U /mnt >> /mnt/etc/fstab
生成之后可以使用cat
或者 vim
之类的命令复查一下生成的是否有误
接下来切换到新安装的系统上
arch-chroot /mnt
在新系统中先在/etc/hostname
中设置主机名,在文件中输入你想要的主机名,例如叫 arch
接下来在文件/etc/hosts
中设置与其匹配的条目,可以加入以下内容
127.0.0.1 localhost
::1 localhost
127.0.1.1 arch.localdomain arch
接着设置时区,在/usr/localtime
下用 /usr
中合适的时区创建符号连接
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
将系统时间同步到硬件时间
hwclock --systohc
接下来进行本地化操作,程序如果需要本地化文件,都需要依赖 locale,它规定了地域、货币、时区日期的格式、字符排列方式和本地化标准。需要在这两个文件中设置 locale.gen
与 locale.conf
编辑 /etc/locale.gen
然后去掉 en_US.UTF-8 UTF-8
和其他需要的地区前的注释,例如作为中文用户可以去掉 zh_CN.UTF-8 UTF-8
以显示中文
编辑完成之后使用如下命令生成 locale
locale-gen
在/etc/locale.conf
文件中指定系统使用的语言,这里推荐使用英文,否则在出错的时候可能会出现中文乱码,不便与排错
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
设置root
密码
passwd root
根据cpu的不同,安装对应的微码,以确保处理器能稳定运行
pacman -S intel-ucode #intel
pacman -S amd-ucode #amd
安装引导程序
为了能在机器加电之后正常找到Linux所在位置,需要安装引导程序,来引导操作系统的启动。
pacman -S grub efibootmgr # 使用grub做引导程序,efibootmgr 是uefi方式启动需要的
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=arch #将启动项取名为arch 启动类型为efi的64位系统 系统启动位置在 /efi
接下来可以稍微对启动配置做一些修改,编辑 `/etc/default/grub` 文件,去掉 `GRUB_CMDLINE_LINUX_DEFAULT` 一行中最后的 `quit` 参数,同时把`log level` 的数值从3改到5,这样是为了后续如果出现系统错误方便排查。同时加入 `nowatchdog` 参数,这样可以显著提升开关机速度
修改完成之后生成grub
所需的配置文件
grub-mkconfig -o /boot/grub/grub.cfg
这样就完成了安装
exit
umount -R /mnt
reboot
一切顺利的话,重启之后应该就能进入系统了。
新系统基础配置
网络配置
之前我们下载了与网络相关的两个工具networkmanager
和dhcpcd
,用来管理网络和dhcp自动分配IP地址
systemctl enable --now NetworkManager # 启动networmmanager服务
nmcli device wifi list # 查看Wi-Fi列表
nmcli device wifi connect ssid password password #连接Wi-Fi,ssid表示Wi-Fi名,后面一个password表示连接wifi的真实密码
网络连接成功之后,使用pacman
将系统更新到最新版本
pacman -Syyu
创建非root用户
为了系统安全防止自己某天抽风不小心输入类似 rm -rf /
之类的危险命令,平时最好使用非root登陆。 对于系统操作使用sudo
来提升权限
useradd -m -G wheel -s /bin/bash arch
创建一个名为arch的用户,将用户组归属到wheel
中,同时创建用户目录, 并且指定shell使用bash
接下来使用 passwd arch
来修改用户密码
由于系统中并没有安装vi,所以默认会使用vi命令的一些命令都会失效。所以需要将 vi
链接到 vim
ln -sf /usr/bin/vim /usr/bin/vi
使用visudo
将文件中 #%whell ALL=(ALL) ALL
这行的注释去掉
使用su arch
将当前用户切换到arch
。可以使用命令sudo pacman -Syyu
来更新系统,同时测试一下输入用户密码之后能否执行一些root
命令
设置交换文件
在桌面环境中,交换分区或文件用来实现休眠(hibernate)的功能,即将当前环境保存在磁盘的交换文件或分区部分。除此之外,某些特定软件需要 swap 才可以正确运行。交换文件与分区性能相同,且交换文件更为灵活,可随时变更大小,增加与删除
dd if=/dev/zero of=swapfile bs=1M count=4096 status=progress #设置4G的交换分区,大小根据系统的实际内存来决定,一般最好略大于物理内存
chmod 600 /swapfile
mkswap /swapfile # 格式化swap文件
swapon /swapfile # 启用swap文件
最后往/etc/fstab
中追加如下内容
/swapfile none swap defaults 0 0
开启32位软件库支持与ArchLinuxCN库的支持
为了系统的稳定,官方关闭了32位软件以及aur软件库,但是仅仅只依靠官方源中的软件时不够用的,这里我们要打开这两个库
vim /etc/pacman.conf
去掉[multilib]一节中两行的注释,来开启 32 位库支持。
在文档结尾处加入下面的文字,来开启 ArchLinuxCN 源。
[archlinuxcn]
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch
执行 sudo pacman -Syyu
更新pacman数据库
然后需要安装 archlinuxcn-keyring
包以导入 GPG key
sudo pacman -S arhclinuxcn-keyring
有时候因为密钥环的问题,导致这一步安装报错,可以依次执行下面的命令
sudo pacman -syyu
sudo pacman -S haveged
sudo pacman -Syu haveged
sudo systemctl start haveged
sudo systemctl enable haveged
sudo rm -fr /etc/pacman.d/gnupg
sudo pacman-key --init
sudo pacman-key --populate archlinux
sudo pacman-key --populate archlinuxcn
然后再重新安装,即可解决问题
最后安装 yay
用来下载archlinuxcn
库中的软件
结尾
至此,已经完成了对系统的安装到基础配置,现在已经有了一个基本可用的操作系统了,但是目前系统仍然只有一个基本的黑框框,作为日常使用还远远不足,至少还需要一个桌面环境,后面的博文会陆续介绍我是如何安装并配置一个基本的桌面环境。最后到一个基本可用于日常生活和工作中的操作系统。