MacBook Air上运行Arch Linux

为了能够 在 mba11_late_2010 部署LFS ,我采用先在 MacBook Air 11" Late 2010 完成精简的 Arch Linux,以便能够温习 Arch Linux 的运维。本次实践在原先 MacBook Pro上运行Arch LinuxThinkPad X220上运行Arch Linux 综合改进,并参考最新 archlinux Installation guide

下载 arch linux iso 和制作启动U盘

  • Arch Liux Downloads 页面找到合适的下载,我当前使用的是 archlinux-2024.09.01-x86_64.iso

对下载iso检查 sha256sum
# macOS上面使用sha256校验
sha256 archlinux-2024.09.01-x86_64.iso
  • macOS平台制作启动U盘,执行如下命令创建安装U盘:

在macOS平台执行iso转换并创建启动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连接无线网络 简单命令就能够启动无线:

简单配置wifi
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 密码以便能够远程登陆)

磁盘分区

UEFI with GPT磁盘分区

安装挂载点

分区

分区类型

建议大小

说明

/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 输入如下

parted 显示分区
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镜像网站到第一行(越靠前优先级越高):

/etc/pacman.d/mirrorlist 添加163的镜像网站,加速文件下载
Server = https://mirrors.163.com/archlinux/$repo/os/$arch
...
  • 安装基本软件:

安装基础软件包,Linux内核和firmware
pacstrap -K /mnt base linux linux-firmware

配置

  • 生成fstab文件(这里 -U-L 定义UUID或labels):

生成fstab文件
genfstab -U /mnt >> /mnt/etc/fstab

此时检查 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 将根修改到新系统:

chroot进入安装的arch linux系统
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 然后执行:

本地化语言支持 UTF
locale-gen
  • 创建 locale.conf 设置如下:

/etc/locale.conf 配置
LANG=en_US.UTF-8
  • 创建 /etc/hostname 文件,内容是主机名:

/etc/hostname 配置主机名
air-cloud
  • 编辑 /etc/hosts :

/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 镜像

修订 /etc/mkinitcpio.conf 后执行 mkinitcpio 生成定制的 Initramfs
mkinitcpio -P
  • 设置root密码:

设置root密码
passwd
  • 创建日常账号( admin )并设置sudo:

设置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
安装和设置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 执行输出如下:

grub-install 执行输出信息
Installing for x86_64-efi platform.
Installation finished. No error reported.

注意,如果没有安装 efibootmgr 会出现如下报错:

grub-install 执行输出显示没有安装 efibootmgr 错误
Installing for x86_64-efi platform.
grub-install: error: efibootmgr: not found.

如果一切正常, grub-mkconfig 执行输出如下:

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 ,其他一致):

创建对应无线网卡的 /etc/wpa_supplicant/wpa_supplicant-<无线网卡名>.conf
# 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
激活对应无线网卡的 wpa_supplicant 服务,并激活 dhcpcd (DHCP客户端)
systemctl enable wpa_supplicant@wlan0.service
systemctl enable dhcpcd
  • 设置必要启动的服务:

设置必要启动服务
# 确保sshd在系统启动时启动,以便远程登陆管理
systemctl enable sshd

参考