MacBook Air上运行Arch Linux¶
为了能够 在 mba11_late_2010 部署LFS ,我采用先在 MacBook Air 11" Late 2010 完成精简的 Arch Linux,以便能够温习 Arch Linux 的运维。本次实践在原先 MacBook Pro上运行Arch Linux 和 ThinkPad X220上运行Arch Linux 综合改进,并参考最新 archlinux Installation guide
下载 arch linux iso 和制作启动U盘¶
从 Arch Liux Downloads 页面找到合适的下载,我当前使用的是
archlinux-2024.09.01-x86_64.iso
# macOS上面使用sha256校验
sha256 archlinux-2024.09.01-x86_64.iso
macOS平台制作启动U盘,执行如下命令创建安装U盘:
hdiutil convert -format UDRW -o archlinux-2024.09.01-x86_64.img archlinux-2024.09.01-x86_64.iso
sudo dd if=archlinux-2024.09.01-x86_64.img.dmg of=/dev/rdisk4 bs=100m
按住 option(alt)
键启动 MacBook Air 11" Late 2010 ,即从U盘启动安装
网络连接¶
备注
安装步骤和 MacBook Pro上运行Arch Linux / ThinkPad X220上运行Arch Linux 类似,实践中罗帷调整
Arch Linux安装需要网络,通常建议先通过有线网络连接Internet来完成安装过程
MacBook Air 11" Late 2010 无线网卡兼容性较好,能够直接被 Arch Linux 安装识别,通过 使用wpa_supplicant连接无线网络 简单命令就能够启动无线:
cd /etc/wpa_supplicant
wpa_passphrase SSID PASSWORD > wpa_supplicant.conf
wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlan0 -B
dhcpcd
如果没有无线,则将电脑通过有线连接,启动 dhcpcd
获取有线网络动态分配地址(或静态配置)
然后就可以通过 ssh服务 访问arch linux安装的主机(需要先设置 root
密码以便能够远程登陆)
磁盘分区¶
安装挂载点 |
分区 |
分区类型 |
建议大小 |
说明 |
---|---|---|---|---|
/boot/efi |
/dev/sda1 |
EFI系统分区 |
256M |
主机上多个操作系统共用(后期和LFS共用) |
/boot/ |
/dev/sda2 |
内核存储以及引导信息 |
1G |
主机上多个操作系统共用(后期和LFS共用) |
[SWAP] |
/dev/sda3 |
Linux交换分区 |
4G |
MacBook Air 11" Late 2010 内存只有4G过小 所以需要设置SWAP |
/ |
/dev/sda4 |
Arch Linux root分区 |
32G |
后期我使用较少(以LFS为主) |
/ |
/dev/sda5 |
LFS root分区 |
64G |
主要使用LFS |
zpool-data |
/dev/sd6 |
ZFS 存储(剩余空间) |
数据存储以及docker容器 |
使用 parted分区工具 划分分区:
# 案例: /dev/sda (第二块虚拟磁盘)作为LFS磁盘
# 初始化磁盘分区表
parted /dev/sda mklabel gpt
# 创建第一个sda1分区,用于EFI启动
parted -a optimal /dev/sda mkpart ESP fat32 0% 256MB
parted /dev/sda set 1 esp on
# /boot分区 sda2,分配1GB, ext4
parted -a optimal /dev/sda mkpart bootfs ext4 256MB 1278MB
# swap分区 sda3, 分配4GB
parted -a optimal /dev/sda mkpart swap linux-swap 1278MB 5374MB
# Arch Linux root分区 sda4 ,分配大约32G
parted -a optimal /dev/sda mkpart arch-rootfs ext4 5374MB 37GB
# LFS Linux root分区 sda5 ,分配大约64G
parted -a optimal /dev/sda mkpart lfs-rootfs ext4 37GB 101GB
# ZFS 分区 sda6,所有剩余磁盘(使用fdisk工具中t子命令来标记 FreeBSD ZFS 分区类型,不过ZFS并不在乎这个分区标签)
parted -a optimal /dev/sda mkpart zpool 101GB 100%
# 完成后检查
parted /dev/sda print
# 分区格式化
mkfs.vfat -F 32 -n EFI /dev/sda1
mkfs.ext4 /dev/sda2
mkswap /dev/sda3
mkfs.ext4 /dev/sda4
mkfs.ext4 /dev/sda5
# 最后一个sda5是保留给ZFS使用,所以不要格式化
最后执行 parted /dev/sda print
输入如下
Model: ATA SAMSUNG MZNTN512 (scsi)
Disk /dev/sda: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 256MB 255MB fat32 ESP boot, esp
2 256MB 1278MB 1022MB ext4 bootfs
3 1278MB 5374MB 4096MB linux-swap(v1) swap swap
4 5374MB 37.0GB 31.6GB ext4 arch-rootfs
5 37.0GB 101GB 64.0GB ext4 lfs-rootfs
6 101GB 512GB 411GB zpool
挂载文件系统¶
root
卷需要挂载到 /mnt
,其他分区需要依次挂载到这个 /mnt
下子目录:
mount /dev/sda4 /mnt
mount --mkdir /dev/sda2 /mnt/boot
mount --mkdir /dev/sda1 /mnt/efi
swapon /dev/sda3
备注
参考 EFI_system_partition#Typical_mount_points :
/efi
独立挂载目录现在推荐使用,替代了长期使用的/boot/efi
在使用 parted分区工具 为EFI分区创建时已经命名分区为
ESP
,这个名字在后续grub
设置时会使用到
安装¶
为加快文件下载,修订
/etc/pacman.d/mirrorlist
,添加163镜像网站到第一行(越靠前优先级越高):
Server = https://mirrors.163.com/archlinux/$repo/os/$arch
...
安装基本软件:
pacstrap -K /mnt base linux linux-firmware
配置¶
生成fstab文件(这里
-U
或-L
定义UUID或labels):
genfstab -U /mnt >> /mnt/etc/fstab
此时检查 fstab 内容如下:
# Static information about the filesystems.
# See fstab(5) for details.
# <file system> <dir> <type> <options> <dump> <pass>
# /dev/sda4
UUID=19c98f2a-9a5a-4c35-ad71-bb15fbaaa5c9 / ext4 rw,relatime 0 1
# /dev/sda2
UUID=c703f0e8-2a62-474c-84a1-5f3c0efdba6b /boot ext4 rw,relatime 0 2
# /dev/sda1 LABEL=EFI
UUID=F997-B03A /efi vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2
# /dev/sda3
UUID=38d401c4-69f1-4968-b8b1-04c5e728a0e9 none swap defaults 0 0
chroot 将根修改到新系统:
arch-chroot /mnt
设置时区:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
运行 hwclock 生成 /etc/cadjtime :
hwclock --systohc
本地化语言支持 - 只需要UTF支持就可以,所以修改
/etc/locale.gen
保留en_US.UTF-8 UTF-8
然后执行:
locale-gen
创建
locale.conf
设置如下:
LANG=en_US.UTF-8
创建
/etc/hostname
文件,内容是主机名:
air-cloud
编辑
/etc/hosts
:
# Static table lookup for hostnames.
# See hosts(5) for details.
127.0.0.1 localhost
127.0.1.1 air-cloud.cloud-atlas.io air-cloud
Initramfs : 通常不需要创建新的
initramfs
(修订/etc/mkinitcpio.conf
),因为在执行pacstrap
命令安装linux软件包的时候已经执行过mkinitcpio
。不过,对于LVM, 系统加密 或者 RAID ,则需要修改mkinitcpio.conf
然后创建 initramfs 镜像
mkinitcpio -P
设置root密码:
passwd
创建日常账号(
admin
)并设置sudo:
# arch linux使用wheel组,debian则使用sudo组
groupadd -g 505 admin
useradd -g 505 -u 505 -s /bin/bash -d /home/admin -m admin
usermod -aG wheel admin
echo "%wheel ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
# 必须设置admin密码,默认root用户无法ssh登陆,需要使用admin账号
passwd admin
安装Boot Loader (参考 Gentoo GRUB )
pacman -S grub efibootmgr os-prober
# EFI分区单独挂载在 /efi 目录
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
如果一切正常, grub-install
执行输出如下:
Installing for x86_64-efi platform.
Installation finished. No error reported.
注意,如果没有安装 efibootmgr
会出现如下报错:
Installing for x86_64-efi platform.
grub-install: error: efibootmgr: not found.
如果一切正常, grub-mkconfig
执行输出如下:
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
Found fallback initrd image(s) in /boot: initramfs-linux-fallback.img
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done
这里提示 os-prober
没有激活配置,所以不会添加其他可启动分区的操作系统入口配置
备注
由于安全原因, os-prober
默认禁用。在 /etc/default/grub
配置中添加 GRUB_DISABLE_OS_PROBER=false
来激活
安装必要软件:
# 初始安装一些必要应用软件
# 以及系统维护工具
# parted: 分区
pacman -S vi which sudo wpa_supplicant wireless_tools net-tools dhcpcd openssh tmux \
parted
配置无线网络(这里无线网卡识别为
wlp1s0b1
,所以下面配置方法中,需要将wlan0
替换为wlp1s0b1
,其他一致):
# AP scanning
echo "ap_scan=1" >> /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
# ISO/IEC alpha2 country code in which the device is operating
echo "country=CN" >> /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
wpa_passphrase <SSID> <SSID_PASSWD> | tee -a /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
systemctl enable wpa_supplicant@wlan0.service
systemctl enable dhcpcd
设置必要启动的服务:
# 确保sshd在系统启动时启动,以便远程登陆管理
systemctl enable sshd