Arch Linux 安装配置流程
文章目录
1. 说明
此流程用于在一块单独硬盘、USB存储设备中配置一个 Arch Linux系统。
为什么是Arch Linux?
我自己同时在使用的操作系统有很多,家里玩游戏的win10,去学校办公、敲代码的是Macbook Pro,学校电脑是Kubuntu(之前装过Manjaro被显卡驱动劝退了),实验设备都是树莓派(Raspberry Pi OS 和 Ubuntu Server 18.04-ROS Melodic)系统玩的多了就会发现一个问题,发行版操作系统的预装以及linux上python2的遗体问题很让人头疼。当然有办法卸载删除,但是总觉得很臃肿,而且永远的会留下隐患,特别是Python2的问题。我已经无数次被坑在ROS、PX4、Ardupilot 编译报错上了,8成的原因是Python多版本打架。所以就选了Arch,当然也是在尝试和学习,不过从零到1的过程很实用,而且一步一步只添加需要的软件这是最重要的。
为什么要写这个教程?
能找到的文字版教程不能满足我的需求,我需要一个可以随时带走的Arch Linux,既可以保护电脑原有系统不用做任何删除处理,又可以保证一旦安装失败不会造成额外的损失。搜了很多Arch安装在移动设备的教程。但这些教程真的太难用了,不是各种转载导致的教程不详细,就是利用虚拟机设备安装配置(对于一个拒绝虚拟机的人来说简直太痛苦了)。我又不想直接看wiki(wiki内容十分强大,但是你要耐心的把每一步看完并且对linux系统整个架构有一定了解才行)。下面这个教程相对于你一步步看wiki会简单粗暴的多,帮你把好多坑都太好了。
2. 准备工作——Arch Linux Live 制作过程
安装前准备:
- Arch Linux 镜像文件 (Arch Linux Link)
- 1 个usb 存储 ——用于制作Arch Linux Live
- 1 个 硬盘或者USB存储设备(容量至少16GB,紧建议)
- Arch wiki (学会用wiki好过其他的教程)
使用balenaEtcher或者其他的可以将iso镜像烧录在usb存储的软件
首推balenaEtcher Link 这个是开源免费的。另外提醒一句,一定要更新到最新的stable版,要不然烧录可能失败。
3步操作:1、选择镜像;2、选择USB存储; 3、烧录
3. Arch Linux 安装配置
将上一步中制作完成的Arch Linux Live USB 和准备装系统的硬盘连接电脑,Boot Menu中选择Arch Linux Live USB,选择第一个进入Arch Linux Live
3.1 第一步:硬盘分区
首先查看硬盘相关信息
$ fdisk -l
-
找到用于安装arch的硬盘名字 一般为
/dev/sdX
注意:sdX
可能是任意名字 完全取决于fdsik指令后打印的列表内容,下面均以sdX
为例
说明
:硬盘格式MBR或者GPT 需要进行二选一完全取决于之后以哪种方式进行启动;这里推荐GPT,后面配置允许此硬盘既可以UEFI,又可以Legacy启动。 -
硬盘扇区设置
$ dd if=/dev/zero of=/dev/sdX bs=1k count=2048
- 设置硬盘为GPT 注意:此处使用sgdisk指令,也可以fdisk分区,需要教程自行度娘
$ sgdisk -z /dev/sdX
$ sgdisk -o /dev/sdX
- 设置分区
$ sgdisk -n 1:0:409600 #创建一个200M分区 挂在/boot 用于启动
$ sgdisk -n 2:409601:17186817 #创建一个SWAP分区 这里大小为8G 根据需要自行修改
$ sgdisk -n 3:17186818:-0 #创建一个文件跟目录分区 挂在/
- 对分区进行格式化 注意:sdX1代表刚才的分区方式
$ mkfs.fat -F32 /dev/sdX1 #第一个分区设置为FAT32格式 即UEFI必须的ESP
$ mkfs.swap /dev/sdX2 #第二个分区是SWAP交换空间
$ mkfs.ext4 /dev/sdX3 #第三个分区是Linux的文件分区 ext4
3.2 分区挂在
将对应分区进行挂载
$ mount /dev/sdX3 /mnt #挂载根目录
$ mkdir /mnt/boot/efi #创建引导目录
$ mount /dev/sdX1 /mnt/boot #挂载引导分区
$ swapon /dev/sdX2 #挂载swap空间
3.3 安装基本系统
$ pacstrap /mnt base
# 其他的包——推荐一下 直接添加到 base 后面即可
linux linux-firmware base-devel nano dialog git sudo
# hostname
inetutils
# 网络管理
dhcpcd wpa_supplicant
说明:最简化的只需要 base ,后面可以根据自己需要添加修改。比如不用nano,用vi 就可以直接添加vi而不写nano。 下面是官方wiki对base的解释
3.4 配置系统
$ genfstab -U -p /mnt >> /mnt/etc/fstab
3.5 使用chroot
进行基本配置
chroot
是超级用户权限 相当于系统开发商,使用chroot
以后算是正式进入硬盘开始配置你的专属arch了。
$ arch-chroot /mnt
# 开始
# 设置 root 的密码
$ passwd
#设置时区
$ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#本地化
$ cd /etc
$ locale-gen
$ nano /etc/locale.conf #如果是vi 就运行 vi /etc/locale.conf
## 添加 这里暂时都设置为英文,可以设置中文但是容易导致后续出错,后续可再更改
LANG=en_US.UTF-8
# LC_CTYPE= en_US.UTF-8 # 此处可不添加,如果之后安装了sublime text安装后运行软件会提示你需要设置 LC_CTYPE
## 键盘布局
$ nano /etc/vconsole.conf
KEYMAP=de-latin1
#设置主机名
$ nano /etc/hostname
myhostname(主机名)
$ nano /etc/hosts
127.0.0.1 localhost
::1 localhost
127.0.1.1 myhostname.localdomain myhostname # 主机名.本地域名 主机名
# Initramfs
$ mkinitcpio -p linux # 如果报错 请检查/xxxx/linuxxx
# 有线网络设置
$ systemctl enable dhcpcd
#普通用户的添加
$ useradd -m -G wheel -s /bin/bash [username]
$ passwd [username]
$ nano /etc/sudoers
# 去掉下面这行#符号
#%wheel ALL=(ALL) ALL
# 并在 root ALL=(ALL:ALL) ALL这行下面添加
[username] ALL=(ALL:ALL) ALL
3.6 系统引导配置
此处很关键,可选的有很多,需要的看wiki [Arch boot process (简体中文)]
推荐Clover,GRUB,Syslinux。Clover 就不用说了,黑苹果首推clover引导。GRUB最常见的引导方式,兼容性最好的选择。Syslinux 有较好的兼容性。这里我只需要对syslinux和GRUB进行二选一,其他的请自行移步wiki。
3.6.1 Syslinux
#安装syslinux
$ pacman -S syslinux
- 启动流程
下图为官方wiki对启动流程的描述,具体过程可理解可不理解,但是通过官方描述检查对应引导文件夹中是否缺失必要的启动的文件
必要文件列表:
mbr.bin
/gptmbr.bin
ldlinux.sys
ldlinux.c32
syslinux.cfg
/extlinux.conf
lib*.c32
和*.c32
- Legacy 启动
#BIOS 配置
$ mkdir /boot/syslinux
$ cp -r /usr/lib/syslinux/bios/* /boot/syslinux/
$ sgdisk /dev/sdX1 --attributes=1:set:2
$ sgdisk /dev/sdX1 --attributes=1:show
------------------------------------
1:2:1 (legacy BIOS bootable)
$ dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/gptmbr.bin of=/dev/sdX
$ extlinux --install /boot/syslinux
$ nano /boot/syslinux/syslinux.conf
- UEFI 启动
$ mkdir -p /boot/EFI/syslinux
$ cp -r /usr/lib/syslinux/efi64/* /boot/EFI/syslinux/
$ cd /boot/EFI
$ mv syslinux boot
$ cd boot
$ mv syslinux.efi bootx64.efi
$ nano /boot/syslinux/syslinux.conf
- 配置文件设置
* BIOS: /boot/syslinux/syslinux.cfg
* UEFI: esp/EFI/syslinux/syslinux.cfg
--------------------------------------------------------------------------------------
UI menu.c32
# UI vesamenu.c32
PROMPT 50
DEFAULT arch
MENU TITLE Boot Menu
# MENU BACKGROUND splash.png 图片link(https://gitlab.archlinux.org/archlinux/archiso/-/tree/master/configs/releng/syslinux/splash.png)
TIMEOUT 50
MENU RESOLUTION 800 600 # 万用分辨率
MENU WIDTH 78
MENU VSHIFT 10
MENU HSHIFT 10
MENU MARGIN 4
MENU ROWS 5
MENU TIMEOUTROW 13
MENU TABMSGROW 11
MENU CMDLINEROW 11
MENU HELPMSGROW 16
MENU HELPMSGENDROW 29
# Refer to https://wiki.syslinux.org/wiki/index.php/Comboot/menu.c32
MENU COLOR border 30;44 #40ffffff #a0000000 std
MENU COLOR title 1;36;44 #9033ccff #a0000000 std
MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all
MENU COLOR unsel 37;44 #50ffffff #a0000000 std
MENU COLOR help 37;40 #c0ffffff #a0000000 std
MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std
MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std
MENU COLOR msg07 37;40 #90ffffff #a0000000 std
MENU COLOR tabmsg 31;40 #30ffffff #00000000 std
#注意:对每一个 LABEL 记录, APPEND 命令只能出现在一行内(就是说,把命令拆分成多行是无效的)。
LABEL arch
LINUX ../vmlinuz-linux
APPEND root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw #此处强烈建议用UUID 这样不会报错
INITRD ../initramfs-linux.img
LABEL archfallback
LINUX ../vmlinuz-linux
APPEND root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw
INITRD ../initramfs-linux-fallback.img
...
LABEL windows
MENU LABEL Windows
COM32 chain.c32
APPEND mbr:0xffffffff #0xffffffff 通过指令fdisk -l 中widows 硬盘中Disk identifier 中的信息进行更改
...
#内存测试
...
LABEL memtest
MENU LABEL Memtest86+
LINUX ../memtest86+/memtest.bin
...
#硬盘检测工具
LABEL hdt
MENU LABEL Hardware Info
COM32 hdt.c32
#保证对应的syslinux文件夹下包含多有的*.c32和lib*.c32文件
#需要显示PCI总线信息,将 /usr/share/hwdata/pci.ids 复制到 */syslinux/pci.ids
LABEL reboot
MENU LABEL Reboot
COM32 reboot.c32
LABEL poweroff
MENU LABEL Power Off
COM32 poweroff.c32
MENU CLEAR #当退出时清空屏幕
以上的大部分人可能会用到的配置,其他的配置请参考wiki [Syslinux (简体中文)]
3.6.2 GRUB
GRUB全称 是GRand Unified Bootloader。 这里指的 GRUB 其实是 GRUB 2 并不是GRUB Legacy, GRUB Legacy不支持 UEFI启动。
- 首先安装grub 和 efibootmgr
$ pacman -S grub efibootmgr
- 安装grub
$ grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=Arch
注意 此处esp 应该是 /dev/sdX1
具体根据你自己的盘进行修改
3. 生成配置文件
$ grub-mkconfig -o /boot/grub/grub.cfg
说明 如果需要多系统请参考wiki中的配置说明。GRUB WIKI
因为我的移动硬盘同时装了4个linux(后续会发文章,(链接坑)) 所以我在对每个linux的gurb的默认文件进行了修改 每个linux的grub默认文件都在 /etc/default/grub
中,具体更改了两项:
GRUB_DEFAULT="6>7" #此处数字标示次Linux相关选项在grub列表中的位置
GRUB_CMDLINE_LINUX_DEFAULT="text" #默认一般为quiet splash即不打印启动信息,使用过场动画,此处可以不修改 但是如果第一次启动出现问题或者卡黑屏了你就什么错误信息就都不知道了
另外 grub.cfg
这个文件不建议第一尝试的人手动修改,一旦改错 对应启动选项就不可用了。如果你是高手,修改完保存后别忘了运行 sudo update-grub
。
3.6.3 小结
目前使用syslinux进行了BIOS 测试完全没有问题,GRUB 之安装了UEFI测试完全没问题。
3.7 退出&重启
完成以上配置以后,你已经拥有了一个带引导的Arch Linux。
$ exit # 退出chroot
$ umount -R /mnt # 卸载之前挂在的目录
$ reboot
最基本的配置已经完成了。之后就可以重启,从boot menu中启动你的Arch Linux了。
4. 小结
下一篇将讲述如何自定义桌面环境以及一些基础软件推荐。
参考链接
- https://wiki.archlinux.org/title/Install_Arch_Linux_on_a_removable_medium
- https://vhernando.github.io/archlinux-install-usb-from-debian-existing-linux
- https://gist.github.com/elerch/678941eb670324ffc3f261eabba81310