Arch Linux

Arch Linux基础安装
(参考https://archlinuxstudio.github.io/ArchLinuxTutorial/#/rookie/basic_install)
1.0禁用reflector
reflector 会为你选择速度合适的镜像源,但其结果并不准确,同时会清空配置文件中的内容,对于新人来讲并不适用,我们首先对其进行禁用。
$ systemctl stop reflector.service
1.1再次确保是否为 UEFI 模式
$ ls /sys/firmware/efi/efivars
若输出了一堆东西,即 efi 变量,则说明已在 UEFI 模式。否则请确认你的启动方式是否为 UEFI。
1.2连接网络
一般来说,你连接的网络几乎均可以通过 DHCP 的方式来进行 IP 地址和 DNS 的相关设置,你无需进行额外操作。在没有合适网络的情况下,使用手机的移动热点也是很方便的选择。如果你的网络环境需要配置静态 IP 和 DNS,请自行参考 Arch Wiki。
对于有线连接来说,直接插入网线即可。
对于无线连接,则需进行如下操作进行网络连接。
无线连接使用 iwctl 命令进行,按照如下步骤进行网络连接:
iwctl #执行iwctl命令,进入交互式命令行
device list #列出设备名,比如无线网卡看到叫 wlan0
station wlan0 scan #扫描网络
station wlan0 get-networks #列出网络 比如想连接YOUR-WIRELESS-NAME这个无线
station wlan0 connect YOUR-WIRELESS-NAME #进行连接 输入密码即可
exit #成功后exit退出
可以等待几秒等网络建立链接后再进行下面测试网络的操作。
$ ping www.gnu.org
如果你不能正常连接网络,首先确认系统已经启用网络接口
$ ip link #列出网络接口信息,如不能联网的设备叫wlan0
$ ip link set wlan0 up #比如无线网卡看到叫 wlan0
如果随后看到类似Operation not possible due to RF-kill的报错,继续尝试rfkill命令来解锁无线网卡。
$ rfkill unblock wifi
1.3更新系统时钟
$ timedatectl set-ntp true #将系统时间与网络时间进行同步
$ timedatectl status #检查服务状态
1.4分区
这里总共设置三个分区,是一个我们认为较为通用的方案。此步骤会清除磁盘中全部内容,请事先确认。
- EFI 分区[2]: /efi 800M
- 根目录: / 100G
- 用户主目录: /home 剩余全部
这里根目录的大小仅为参考,一般来说个人日常使用的 linux 分配 100G 已经够用了。根目录最小建议不小于 50G,根目录过小会造成无法更新系统软件包等问题。
首先将磁盘转换为 gpt 类型,这里假设比如你想安装的磁盘名称为 sdx。如果你使用 NVME 的固态硬盘,你看到的磁盘名称可能为 nvme0n1。
lsblk #显示分区情况 找到你想安装的磁盘名称
parted /dev/sdx #执行parted,进入交互式命令行,进行磁盘类型变更
(parted)mktable #输入mktable
New disk label type? gpt #输入gpt 将磁盘类型转换为gpt 如磁盘有数据会警告,输入yes即可
quit #最后quit退出parted命令行交互
接下来使用 cfdisk 命令对磁盘分区。进入 cfdisk 后的操作很直观,用键盘即可操作分配各个分区的大小与格式。一般建议将 EFI 分区设置为磁盘的第一个分区,据说有些主板如果不将 EFI 设置为第一个分区,可能有不兼容的问题。其中 EFI 分区选择EFI System类型,其余两个分区选择Linux filesystem类型。
cfdisk /dev/nvme0n1px #来执行分区操作,分配各个分区大小,类型
fdisk -l #分区结束后, 复查磁盘情况
1.5格式化
建立好分区后,需要对分区用合适的文件系统进行格式化。这里用mkfs.ext4命令格式化根分区与 home 分区,用mkfs.vfat命令格式化 EFI 分区。如下命令中的 sdax 中,x 代表分区的序号。格式化命令要与上一步分区中生成的分区名字对应才可以。如果你还是不会操作,可参见配套视频中的详细操作。
磁盘若事先有数据,会提示你: 'proceed any way?' 按 y 回车继续即可。
mkfs.ext4 /dev/nvme0n1px #格式化根目录和home目录的两个分区
mkfs.vfat /dev/nvme0n1px #格式化efi分区
1.6挂载
在挂载时,挂载是有顺序的,先挂载根分区,再挂载 EFI 分区。 这里的 sdax 只是例子,具体根据你的实际情况来。
mount /dev/sdax /mnt
mkdir /mnt/efi #创建efi目录
mount /dev/sdax /mnt/efi
mkdir /mnt/home #创建home目录
mount /dev/sdax /mnt/home
1.6.1双系统+windows挂载准备
检查磁盘分区,确认Windows的安装位置
fdisk -l /dev/sda
找到Windows的EFI分区之后,挂载它以确保os-prober可以发现:
mount /dev/sdax /mnt/win
ls -l /mnt/win
1.7.镜像源的选择
使用如下命令编辑镜像列表:
vim /etc/pacman.d/mirrorlist
1.8安装系统
pacstrap /mnt base base-devel linux linux-headers linux-firmware ntfs-3g #base-devel在AUR包的安装是必须的
pacstrap /mnt dhcpcd iwd vim bash-completion #一个有线所需(iwd也需要dhcpcd) 一个无线所需 一个编辑器 一个补全工具
1.9生成fstab文件
fstab 用来定义磁盘分区
genfstab -U /mnt >> /mnt/etc/fstab
复查一下 /mnt/etc/fstab 确保没有错误
cat /mnt/etc/fstab
1.10change root
把环境切换到新系统的/mnt下
arch-chroot /mnt
1.11时区设置
设置时区,在/etc/localtime 下用/usr 中合适的时区创建符号连接。如下设置上海时区。
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
随后进行硬件时间设置,将当前的正确 UTC 时间写入硬件时间。
hwclock --systohc
1.12设置Locale进行本地化
Locale 决定了地域、货币、时区日期的格式、字符排列方式和其他本地化标准。
编辑 /etc/locale.gen,去掉 en_US.UTF-8 所在行以及 zh_CN.UTF-8 所在行的注释符号(#)。
然后使用如下命令生成 locale。
locale-gen
向 /etc/locale.conf 导入内容
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
1.13设置主机名
首先在/etc/hostname设置主机名
vim /etc/hostname 加入你想为主机取的主机名,这里比如叫 myarch。
接下来在/etc/hosts设置与其匹配的条目。
vim /etc/hosts
加入如下内容
127.0.0.1 localhost
::1 localhost
127.0.1.1 myarch
某些情况下如不设置主机名,在 KDE 下可能会存在网络情况变更时无法启动 GUI 应用的问题,在终端中出现形如No protocol specified qt.qpa.xcb: could not connect to display的错误,这种情况较为少见
1.14为root用户设置密码
passwd root
1.15安装微码
pacman -S intel-ucode #Intel
pacman -S amd-ucode #AMD
1.16安装引导程序
pacman -S grub efibootmgr os-prober #grub是启动引导器,efibootmgr被 grub 脚本用来将启动项写入 NVRAM。os-prober是多系统efi识别
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB
接下来编辑/etc/default/grub 文件,去掉GRUB_CMDLINE_LINUX_DEFAULT一行中最后的 quiet 参数,同时把 log level 的数值从 3 改成 5。这样是为了后续如果出现系统错误,方便排错。同时在同一行加入 nowatchdog 参数,这可以显著提高开关机速度。
vim /etc/default/grub
最后生成 GRUB 所需的配置文件
grub-mkconfig -o /boot/grub/grub.cfg
我们在之前的命令中指定了 bootloader-id 为 GRUB,这一般不会出现问题。然而在某些主板安装完成后,你会发现没有 nvme 启动条目。这是因为某些主板的 UEFI 固件在显示 UEFI NVRAM 引导条目之前,需要在特定的位置存放可引导文件,不支持自定义存放 efi 文件。解决方式是使用--removable 参数解决一些主板 NVRAM 的兼容性问题。
grub-install --target=x86_64-efi --efi-directory=/efi --removable
grub-mkconfig -o /boot/grub/grub.cfg
1.16.1双系统+windows
os-prober
cp /boot/grub/grub.cfg /boot/grub/grub.cfg.bak #当然,为了安全起见,首先执行下面命令,备份原有的boot配置
grub-mkconfig -o /boot/grub/grub.cfg #重新生辰GRUB配置文件
1.17完成安装
exit # 退回安装环境#
umount -R /mnt # 卸载新分区
reboot # 重启
注意,重启前要先拔掉优盘,否则你重启后还是进安装程序而不是安装好的系统。重启后,开启 dhcp 服务,即可连接网络
systemctl start dhcpcd #立即启动dhcp
ping www.gnu.org #测试网络连接
若为无线链接,则还需要启动 iwd 才可以使用 iwctl 连接网络
systemctl start iwd #立即启动iwd
iwctl #和之前的方式一样,连接无线网络
桌面环境与常用应用
2.1确保系统为最新
如果你在做完上一节的内容后,重启并放置过一段时间,那需要先按照上节末尾处的方式重新连接网络,然后更新系统。
pacman -Syyu #升级系统中全部包
2.2准备非 root 用户
添加用户,比如新增加的用户叫 user
useradd -m -G wheel -s /bin/bash user #wheel附加组可sudo,以root用户执行命令 -m同时创建用户家目录
设置新用户 testuser 的密码
passwd testuser
编辑 sudoers 配置文件
EDITOR=vim visudo # 需要以 root 用户运行 visudo 命令
找到下面这样的一行,把前面的注释符号 # 去掉,:wq 保存并退出即可。
#%wheel ALL=(ALL) ALL
这里稍微解释一下 %wheel 代表是 wheel 组,百分号是前缀 ALL= 代表在所有主机上都生效(如果把同样的sudoers文件下发到了多个主机上) (ALL) 代表可以成为任意目标用户 ALL 代表可以执行任意命令 一个更详细的例子:
%mailadmin snow,rain=(root) /usr/sbin/postfix, /usr/sbin/postsuper, /usr/bin/doveadm
nobody ALL=(root) NOPASSWD: /usr/sbin/rndc reload
组 mailadmin 可以作为 root 用户,执行一些邮件服务器控制命令。可以在 "snow" 和 "rain"这两台主机上执行 用户 nobody 可以以 root 用户执行rndc reload命令。可以在所有主机上执行。同时可以不输入密码。(正常来说 sudo 都是要求输入调用方的密码的)
2.3安装 KDE Plasma 桌面环境
pacman -S plasma-meta konsole dolphin #安装plasma-meta元软件包以及终端和文件管理器
2.4配置 greeter sddm
systemctl enable sddm