如何在Raspberry Pi 5上安装Arch Linux ARM
首先注意喵!这篇文章其实是kokononine酱一年半以前的时候写的喵~所以时效性可能不是很好的样子的说喵w…

前言

入手Raspberry Pi 5

在某平静又不是那么平静的一天,kokononine酱入手了一块Raspberry Pi 5的说…

Q: 为何要入手SBC
A: kokononine酱现在使用的的v**o手机并不可以解锁bootloader,也就意味着不可以刷机,不可以获取到root权限,不可以使用基于chroot的termux distro的说。
而基于proot的termux proot-distro有着诸多的局限和bug,于是kokononine酱就萌生了购买一个SBC作为研究(wan2)对象(ju4)的想法,所以入手了Raspberry Pi 5的说。
Q: 为何要选择Raspberry Pi 5
A1: 首先,kokononine酱的架构取向是ARM而不是RISC-V,RISC-V架构目前来讲,支持的操作系统少,各方面的适配都很不完善的说。
A2: 其次,虽然CP值比Raspberry Pi 5高的ARM SBC有很多,但大都面临着资料少,适配的发行版少,驱动不完善等等问题,甚至自己开发的操作系统都需要在毒盘上下载(说的就是你opi)的说,
A3: 最后,kokononine酱不想一边使用SBC一边进行debug,所以kokononine保守地选择了更适合kokononine酱的Raspberry Pi 5的说。
Q: Raspberry Pi 5有什么优缺点呢
A1: 优点:
资料相对完善
驱动相对完善
各种操作系统对Raspberry Pi 5的支持
社群的活跃度高
体积相对较小
性能相对不错
支持的配件繁多

A2: 缺点:
相比上一代Raspberry Pi 4耗电
相比上一代Raspberry Pi 4挤牙膏
相比较于其他高CP值SBC,Raspberry Pi 5的CP值较低
一部分硬件没有非FLOSS(自由开源软件)的驱动

拆开包装,安装kokononine为Raspberry Pi酱准备的外设的说喵~

然后为SD卡安装Raspberry Pi Foundation的官方操作系统的说:Raspberry Pi OS(Bookworm),插上SD卡,上电开机~

切换到Arch Linux ARM的原因,以及musescore的版本落差

でもね,Raspberry Pi OS(Bookworm)所使用的Debian其实不太适合kokononine酱口味的说…

包管理复杂,打包更复杂,而且还给包打了很多补丁(kokononine不喜欢对软件包打一堆非必要(主观性)的补丁的说喵w)…

很多包都非常非常陈旧的说,譬如打谱软件musescore,Debian(Bookworm)仓库中的版本(上一个版本Bullseye也是)永远定格在了3.2.3的说,与此同时,Arch Linux的主存储库中的版本是4.3.0,跨度整整有6年之久的说。

也许如此这样经久测试过的陈旧的软件包所带来的稳定性对于服务器运维和产品设计者来讲可能再也合适不过的说,但对于想体验软件包的新功能和bug修复的kokononine酱来讲,还是Arch Linux比较合适的说,Arch Linux会让kokononine酱对系统有几乎完全的掌握,打包也异常简单的说~

Q: 为什么kokononine酱没有选择Gentoo呢
A: 虽然很想使用gentoo的说,但是Raspberry Pi想要用gentoo的话,如果要从头开始到编译出一个桌面环境来使用的话,大概需要一周吧(好费电啊),这样漫长的等待,もう勘弁的说!
A: 关于musescore的新版本
A: 值得一提的是,musescore 4.3.0这个版本有个大bug的说,音色库有些声音变成了默认的钢琴,kokononine酱查看了一下和上个版本的差异的说,音色库并没有变,可能是主程序的问题,所以说快点修好啊!

U: 新版本修复了,但是Arch Linux的主存储库还没有更新(已近半个月了啊喂)。

查找资料未果

之后,kokononine酱就从各种搜索引擎上开始寻找信息的说…

ん…そうか,其实根本没有教程的说…

うえ?那这样的话,就让kokononine酱来创造一个教程叭~

Arch Linux ARM的网站上的教程和wiki停留在了Raspberry Pi 4,其实是可以参考的说的喵~

需要准备的材料列表

  • 一台可以启动Linux的PC/Server(在安装过程中全程会使用到Linux环境的说喵)
  • 一个Raspberry Pi 5
  • 一个Raspberry Pi 5电源(推荐Raspberry Pi官方的27W USB-C Power Supply (5V 5A),根据Raspberry Pi官方给出的文档,至少需要5V 3A的电源来启动Raspberry Pi 5)
  • 一个SD卡读卡器(推荐USB3.0的SD卡读卡器喵!USB2.0的SD卡读卡器速度最高只有40MiB/s,劣质的USB2.0 SD卡读卡器甚至不到10MiB/s)
  • 一个可爱的你

需要用到的软件包列表

以Arch Linux为例:

  • coreutils
  • shell (bash / zsh)
  • util-linux
  • bsdtar (libarchive)
  • dosfstools
  • e2fsprogs
  • curl / wget

如非特殊说明,本次文章内的所有shell命令行均需使用root权限执行

写入Arch Linux ARM的镜像

首先需要为Raspberry Pi 5酱所准备使用的SD卡写一个MBR入分区表的说~

注意喵!Raspberry Pi 5酱只支持从MBR的FAT12/16/32主分区启动的说喵!

但是启动之后可以从GPT格式的硬盘读写数据的说喵~

接下来需要把Raspberry Pi 5酱所准备使用的SD卡插入(是的kokononine酱是很H的喵喵的说喵~)到SD卡读卡器的说喵~

使用fdisk为SD卡分区

Raspberry Pi OS(Bookworm)的镜像是一个包含MBR分区表和FAT32分区以及ext4分区的磁盘镜像文件的说,而Arch Linux ARM的镜像是rootfs tarball文件,所以我们需要手动分区的说~

使用fdisk给Raspberry Pi 5所准备使用的的SD卡分区的说:

# 给 Raspberry Pi 5 所准备使用的 SD卡 分区的说(将'sdX'中的'X'替换为你所使用的SD卡读卡器的标识的说)
fdisk /dev/sdX

# 新建一个 MBR 分区表
Command (m for help): o
Created a new DOS (MBR) disklabel with disk identifier 0xabcdabcd.

# 新建一个 MBR 分区
Command (m for help): n
# 选择新建一个 MBR 主分区
Select (default p): [Enter]
# 选择新建的 MBR 主分区 的编号,此处为 '1'
Partition number (1-4, default 1): [Enter]
# 新建的 MBR 主分区 的起始位置,以块为单位,通常一块是 512B 的说
First sector (2048-999999, default 2048): [Enter]
# 新建的 MBR 主分区 的结束位置,以块为单位
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-999999, default 999999): +200M

# 新建一个 MBR 分区
Command (m for help): n
# 选择新建一个 MBR 主分区
Select (default p): [Enter]
# 选择新建的 MBR 主分区 的编号,此处为 '2'
Partition number (2-4, default 2): [Enter]
# 新建的 MBR 主分区 的起始位置,以块为单位
First sector (411648-999999, default 411648): [Enter]
# 新建的 MBR 主分区 的结束位置,以块为单位
Last sector, +/-sectors or +/-size{K,M,G,T,P} (411648-999999, default 999999): [Enter]

# 修改 MBR 分区 标识
Command (m for help): t
# 选择 MBR 主分区 的编号,此处为 '1'
Partition number (1,2, default 2): 1
# 选择 MBR 主分区 的标识编号,此处为 'FAT32'
Hex code or alias (type L to list all): c
Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.

只能使用MBR分区表的说,也就是说,必须要忍受只可以有4个主分区,最大2TB的的限制的说!

格式化SD卡分区

Raspberry Pi 5的启动分区只支持FAT12,FAT16和FAT32的说,

格式化启动分区为FAT32,根分区为ext4的说:

# 格式化启动分区为 FAT32 的说
mkfs.vfat -F 32 "/dev/sdX1"

# 格式化根分区为 ext4,如果需要ext4的保留块可以去掉命令行 '-m 0' 的说
mkfs.ext4 -m 0 "/dev/sdX2"

kokononine酱不建议酱高级文件系统(诸如btrfs之类的)格式化到Raspberry Pi 5所使用的SD卡上的说,在Raspberry Pi 5上,子卷管理可能会异常麻烦的说!

设置卷标

如果需要使用桌面环境的话,kokononine建议设置卷标来更方便的区分磁盘分区的说。

(可选步骤)设置卷标的说(将’sdX’中的’X’替换为你所使用的SD卡读卡器的标识的说):

# 可选步骤,设置根分区卷标的说
e2label "/dev/sdX2" "rootfs"

# 可选步骤,设置启动分区卷标的说
fatlabel "/dev/sdX1" "bootfs"

挂载SD卡分区

挂载刚刚格式化的分区,之后需要释放Arch Linux ARM Raspberry Pi rootfs tarball到挂载点的说。

挂载分区的说:

# 挂载根分区的说
mount --mkdir /dev/sdX2 /mnt/archlinuxarm-rpi

# 挂载启动分区的说
mount --mkdir /dev/sdX1 /mnt/archlinuxarm-rpi/boot

释放Arch Linux ARM Raspberry Pi rootfs tarball到SD卡

Arch Linux ARM Raspberry Pi rootfs tarball 是为Raspberry Pi定制的的说,虽然不支持Raspberry Pi 5,但是里面包含了Raspberry Pi的firmware等(包括bluetooth wierless)正常驱动Raspberry Pi硬件所需的包的说。

下载并释放Arch Linux ARM Raspberry Pi rootfs tarball的说:

# 下载 Arch Linux ARM 的 Raspberry Pi 版本 rootfs tarball,如果速度太慢或下载不到,可以到所在地的镜像站下载的说
wget https://os.archlinuxarm.org/os/ArchLinuxARM-rpi-aarch64-latest.tar.gz

# 释放 rootfs tarball 到 SD卡 的 rootfs挂载点 的说
bsdtar -xpvf ./ArchLinuxARM-rpi-aarch64-latest.tar.gz -C /mnt/archlinuxarm-rpi

删除旧的boot分区

我们需要删除刚刚释放的tarball的boot分区的说,Arch Linux ARM Raspberry Pi tarball 里默认使用主线Linux内核(未包含Raspberry Pi Foundation所整合到长期支持版本linux-rpi的代码) + uboot-raspberrypi启动,而直接释放进去无法启动的直接原因就是Raspberry Pi 5不支持uboot-raspberrypi的说,所以暂时先不要管其他的事情,先删除掉它的说喵!

# 很暴力很残忍的做法的说,但是这是迫不得已之下必须要做的行为,删除刚刚释放的 SD卡启动分区的所有内容的说
rm -rf /mnt/archlinuxarm-rpi/boot/*

释放新的boot分区

适用于所有型号的Raspberry Pi的 linux-rpi 包( linux-rpi-16k 包 仅支持Raspberry Pi 5的说喵 )包含启动Raspberry Pi 5所需要的device tree文件和为Raspberry Pi 5编译的PE格式的linux核心文件的说,而 Arch Linux ARM Raspberry Pi tarball 里默认使用的是主线linux内核和为Raspberry Pi定制的uboot搭配的组合的说,所以用 linux-rpi 包 或者 linux-rpi-16k 包 的boot分区替换原来的 Arch Linux ARM Raspberry Pi tarball 的boot分区的说。

下载linux-rpi包,并释放其boot文件夹到SD卡boot分区的说:

# 下载 'linux-rpi' 或者 'linux-rpi-16k' 包,需要自己到镜像站(例如https://mirror.archlinuxarm.org/aarch64/core/)上找一找最新版本,否则可能404的说
wget https://mirror.archlinuxarm.org/aarch64/core/linux-rpi-6.6.31-2-aarch64.pkg.tar.xz

# 建立一个临时文件夹,也可以把它挂载为 tmpfs 以避免磁盘损耗的说
mkdir -p ./linux-rpi

# 释放刚刚下载到的 'linux-rpi' 包到刚刚创建的 'linux-rpi' 文件夹的说
tar -xvf ./linux-rpi-6.6.31-2-aarch64.pkg.tar.xz -C ./linux-rpi

# 复制 'linux-rpi' 包中的启动分区里的文件到SD卡的启动分区里的说
cp -rf ./linux-rpi/boot/* /mnt/archlinuxarm-rpi/boot

# 删除刚刚释放的 'linux-rpi' 包的说
rm -rf ./linux-rpi

# 可选步骤的说喵~如果执行了此步骤可以直接跳到 再次开机 的说喵~
cp -rf ./linux-rpi-6.6.31-2-aarch64.pkg.tar.xz /mnt/archlinuxarm-rpi/root

# 如果执行了上一步骤的话,同步 没有完全写入的文件 到 磁盘 的说
sync

完全写入SD卡

最后,同步磁盘操作并卸载SD卡分区的说:

# 同步 没有完全写入的文件 到 磁盘 的说
sync

# 卸载 SD卡 的所有分区的说
umount -R /mnt/archlinuxarm-rpi

开机,但是……

风扇狂转

基本系统安装算是完成的说(うえ?这样真的能行吗?),可以把SD卡插入(ss的说喵!)到Raspberry Pi 5上了!

上电开机,登录到默认的root用户喵,密码是root的说喵~

如果有安装了Active Cooler的话,风扇会狂转……这是因为内核找不着内核模块导致的说,也就是说,能启动就算是非常幸运的说的喵。

这个时候,我们需要为启动Raspberry Pi 5而未完全安装的linux-rpi包补全核心模块的说。

拷贝linux-rpi包到SD卡

我们先关机,回到安装基本系统的设备上,重新挂载rootfs分区,找一个你可以找到的地方,拷贝linux-rpi包到SD卡的rootfs分区的说。

# 挂载根分区的说
mount --mkdir /dev/sdX2 /mnt/archlinuxarm-rpi

# 复制 'linux-rpi' 包到 root用户文件夹 里
cp ./linux-rpi-6.6.31-2-aarch64.pkg.tar.xz /mnt/archlinuxarm-rpi/root

# 同步没有完全写入的文件到磁盘的说
sync

# 卸载 SD卡 的所有分区的说
umount -R /mnt/archlinuxarm-rpi

再次开机

重新插入SD卡到Raspberry Pi 5的说,上电启动。

风扇仍然狂转,试试安装linux-rpi包吧!

# 覆盖安装 'linux-rpi' 包的说,不加--overwrite的话会报错文件已存在的说喵~
pacman -U --overwrite="/boot/*" /root/inux-rpi-6.6.31-2-aarch64.pkg.tar.xz

重启

需要重启一下Raspberry Pi 5的说:

# 重启
systemctl reboot

风扇回归到安静了,这样的话,那岂不是系统也变正常了へ的说!

安装Arch Linux ARM

联网并修正时间

联网

需要大家注意的是,Arch Linux ARM预装的的wifi联网工具不是(也并没有)平时大家安装Arch Linux的时候所常用的iwd的说,我们需要使用系统中存在的wpa_supplicant来联网:

# 如果你有外接网卡或无法使用 wlan0 的话,请把 wlan0 换成 你的网卡设备名 的说
wpa_passphrase WIFI的SSID WIFI的密码 | tee /etc/wpa_supplicant/wpa_supplicant-wlan0.conf

# 启动 wpa_supplicant 服务的说
systemctl start wpa_supplicant@wlan0.service

修正时间

Raspberry Pi 5已经附带了RTC(硬件实时时钟,需要额外购置并安装电池)功能的说,如果未曾给Raspberry Pi 5校准时间的话,时间大概率是不对的说。

残酷的修罗场时刻来临啦,手动或自动的方法需要二选一,如果要同时使用的话是会为难timedatectl的喵的说!

自动校准时间的说:

# systemd 的 timedatectl 同步的时间可能并不准确,可以碰碰运气的说~
timedatectl set-ntp true

手动校准时间的说:

# 关闭 systemd ntp 服务
timedatectl set-ntp false

# 手动修正 UTC 时间,注意是 UTC 时间,用你所在的时区的本地时间来计算的说,如 UTC+8 "2000-01-01 08:00:00" 转换为 UTC+0 "2000-01-01 00:00:00"
timedatectl set-time "yyyy-mm-dd hh:mm:ss"

# 如果安装了 RTC(实时时钟) 电池,同步现在的时间到硬件时钟的说
hwclock --systohc

如果没有安装RTC电池,并且NTP服务没有设置自动启动的话,或者即使开启了NTP服务,时间也不准确的话的话,每次断电之后再开机都需要手动同步时间的说,否则本机时间与网络时间超过1000秒的话,是不能访问大部分网站的喵的说~

现在可以正常的走安装流程了喵的说~

配置pacman

养成好习惯,先备份原来的mirrorlist,新建一个mirrorlist的说:

# 备份原来的 mirrorlist 的说
mv /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak

# 新建一个 mirrorlist 的说,键入以下内容,按下 [Ctrl] + [O](注意不是0) 键输入 [y] [Enter] 保存,按下 [Ctrl] + [X] 键退出的说
nano /etc/pacman.d/mirrorlist

Server = http://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo

# 或者直接这样执行的说
echo -en "Server = http://mirrors.ustc.edu.cn/archlinuxarm/\$arch/\$repo\n" | tee /etc/pacman.d/mirrorlist

初始化keyring

需要先初始化keyring才可以安装软件包的说喵~

# 初始化 pacman GPG 密钥环的说
pacman-key --init

# 信任 archlinux 的 GPG 密钥环的说
pacman-key --populate archlinux

# 信任 archlinuxarm 的 GPG 密钥环的说
pacman-key --populate archlinuxarm

安装并配置一些基本软件

安装

  • base-devel : 由makepkg使用的依赖环的说
  • git : 广泛使用的版本控制软件的说
  • networkmanager : 对桌面环境友好的网络管理软件的说
  • sudo : 广泛使用的提权软件的说
  • arch-install-scripts : 实用的安装Arch Linux所使用的官方小工具包的说
  • vim : 好用的终端文本编辑器,如果需要gui则安装gvim的说
# 两次 'yy' 和 'uu' 命令行以完全更新系统的说
pacman -Syyuu base-devel git networkmanager sudo arch-install-scripts vim

配置sudo

将提权规则写入到/etc/sudoers.d/wheel或者/etc/sudoers的说:

# 添加以下内容到 '/etc/sudoers.d/wheel' 或者 '/etc/sudoers' 的说,一个字也不可以错,错字的是受的说,按下 [i] 键进入编辑模式后输入以下内容,按下 [ESC] 键退出到命令模式,输入 [:] [w] [q] [!] 并按下 [Enter] 键退出的说
vim /etc/sudoers.d/wheel

%wheel ALL=(ALL:ALL) ALL

# 或者直接这样执行的说
echo -en "%wheel ALL=(ALL:ALL) ALL\n" | tee /etc/sudoers.d/wheel

配置networkmanager

禁用wpa_supplicant服务,并且安全起见,kokononine酱建议同时删除刚刚创建的wpa_supplicant配置文件的说:

# 禁用 wpa_supplicant 服务的说
systemctl stop wpa_supplicant@wlan0.service

# 建议删除 wpa_supplicant 配置文件的说,里面明文存储着你的WIFI密码,不相信的话可以看一眼的说喵
rm -f /etc/wpa_supplicant/wpa_supplicant-wlan0.conf

使用nmtui联网的说:

# 启动 NetworkManager 服务的说
systemctl start Networkmanager.service

# 打开 终端UI界面 的 networkmanager 的说
nmtui
Active a connection
(选择SSID的说)
Active
(输入密码的说)
[ESC]
[ESC]

配置网络主机相关的设置

配置hostname

配置/etc/hostname文件,用处是在网络中用来识别你的说:

# 覆盖默认的主机名 'archiso'
echo "你期望的主机名" | tee /etc/hostname

# 或者这样,添加以下内容到 '/etc/hosts' 的说,按下 [i] 键进入编辑模式,删除原有内容并输入以下内容,按下 [ESC] 键退出到命令模式,输入 [:] [w] [q] [!] 并按下 [Enter] 键退出的说
vim /etc/hostname
你期望的主机名

配置hosts

配置/etc/hosts文件,用处是映射你的hostname和长串长串又难记的ip地址的说:

其实不需要写这么多也可以的说的喵

# 添加以下内容到 '/etc/hosts' 的说,按下 [i] 键进入编辑模式后在文件末尾输入以下内容,按下 [ESC] 键退出到命令模式,输入 [:] [w] [q] [!] 并按下 [Enter] 键退出的说
vim /etc/hosts

127.0.0.1 localhost 你的主机名 你的主机名.local 你的主机名.localhost 你的主机名.localdomain localdomain localhost.localdomain ip4.localhost.localdomain ip4-localhost ip4-localdomain ip4.localhost ip4.localdomain localhost4 localdomain4 localhost4.localdomain4
::1       localhost 你的主机名 你的主机名.local 你的主机名.localhost 你的主机名.localdomain localdomain localhost.localdomain ip6.localhost.localdomain ip6-localhost ip6-localdomain ip6.localhost ip6.localdomain localhost6 localdomain6 localhost6.localdomain6

# 或者直接这样执行的说
echo -en "
127.0.0.1 localhost 你的主机名 你的主机名.local 你的主机名.localhost 你的主机名.localdomain localdomain localhost.localdomain ip4.localhost.localdomain ip4-localhost ip4-localdomain ip4.localhost ip4.localdomain localhost4 localdomain4 localhost4.localdomain4
::1       localhost 你的主机名 你的主机名.local 你的主机名.localhost 你的主机名.localdomain localdomain localhost.localdomain ip6.localhost.localdomain ip6-localhost ip6-localdomain ip6.localhost ip6.localdomain localhost6 localdomain6 localhost6.localdomain6
" | tee -a /etc/hosts

配置本地化设置

配置locale.gen

好心的GNU开发的glibc为我们准备了locale-gen的说,用来生成我们最熟悉的母语资源文件的说:

# 打开 '/etc/locale.gen' 的说,按下 [i] 键进入编辑模式后取消注释(也就是把所在行的最前面的 # 删除掉的说)以下内容,按下 [ESC] 键退出到命令模式,输入 [:] [w] [q] [!] 并按下 [Enter] 键退出的说
vim /etc/locale.gen

en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8

# 或者直接这样执行的说
sed -e "s?^#en_US.UTF-8 UTF-8?en_US.UTF-8 UTF-8?g" -i /etc/locale.gen
# 如果需要中文的说
sed -e "s?^#zh_CN.UTF-8 UTF-8?zh_CN.UTF-8 UTF-8?g" -i /etc/locale.gen

配置locale.conf

locale-gen帮我们准备好了语言的说,但是我们需要环境变量来告诉软件包需要使用我们的语言的说,所以还需要配置locale.conf的说:

# 添加以下内容到 '/etc/locale.conf' 的说,按下 [i] 键进入编辑模式后,删除原有内容并输入以下内容,按下 [ESC] 键退出到命令模式,输入 [:] [w] [q] [!] 并按下 [Enter] 键退出的说
vim /etc/locale.conf

LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:en_US:en:C

# 或者直接这样执行的说
echo -en "LANG=zh_CN.UTF-8\nLANGUAGE=zh_CN:en_US:en:C\n" | tee /etc/locale.conf

配置时区

如果你不想要零点就起床的话,就需要设置时区的说喵~:

# 在/usr/share/zoneinfo查看所有时区的说
ln -sf "/usr/share/zoneinfo/Asia/Shanghai" "/etc/localtime"

配置杂项设置

配置vconsole.conf

如果你不想要按z键出y,按y键出z的话,就需要确定键盘映射的说:

其实默认的键盘映射就是us的说~上面的例子是de的说喵w~

# 添加以下内容到 '/etc/vconsole.conf' 的说,按下 [i] 键进入编辑模式后输入以下内容,按下 [ESC] 键退出到命令模式,输入 [:] [w] [q] [!] 并按下 [Enter] 键退出的说
vim /etc/vconsole.conf

KEYMAP=us

# 或者直接这样执行的说
echo -en "KEYMAP=us\n" | tee /etc/vconsole.conf

配置faillock.conf

如果你不想要错字受输错密码3次就要被锁定十几分钟的话,就需要配置faillock的说:

# 打开 '/etc/security/faillock.conf',按下 [i] 键进入编辑模式后,取消注释(删除#)以下内容并修改其值,按下 [ESC] 键退出到命令模式,输入 [:] [w] [q] [!] 并按下 [Enter] 键退出的说
vim /etc/security/faillock.conf

deny = 9

# 或者直接这样执行的说
sed -e "s?^# deny = .*\$?deny = 需要的密码重试次数?g" -i /etc/security/faillock.conf

安装桌面环境

如果你不想要盯着黑黑的tty界面看着字符飘来飘去的话,就需要安装桌面环境的说。

安装Xorg

让我们来安装Xorg和视频驱动吧,不安装的话就会缺少功能的说,如Arch Linux ARM的wiki中所说,Raspberry Pi 5的Xorg视频驱动是xf86-video-fbdev包提供的的说,安装xorgxorg-drivers包组的说:

  • xorg : 提供Xorg服务器实现,Xorg客户端实现,Xorg实用程序,Xorg字体等
  • xorg-drivers : 提供Xorg视频驱动,触控驱动等
pacman -S xorg xorg-drivers

安装KDE

安装桌面环境套件来使用的说。

kokononine酱是KDE派的说,根据需要来安装KDE Plasma桌面环境,音频服务器,IME(输入法),浏览器和字体的说:

  • plasma-meta : KDE Plasma桌面环境,最新版本为6
  • kde-applications-meta : KDE应用程序合集
  • pipewire* : pipewire音频服务器,可以使用pulseaudio套装来替代的说
  • wireplumber : pipewire会话管理器
  • firefox : firefox网络浏览器
  • fcitx5-im fcitx5-chinese-addons : fcitx5输入法框架和中文插件
  • noto-fonts* : noto fonts字体,cjk中日韩字体,emoji字体
  • ttf-dejavu : 为了避免字体发虚的说
  • ttf-liberation : 也是为了避免字体发虚的说
pacman -S plasma-meta kde-applications-metao noto-fonts noto-fonts-cjk noto-fonts-emoji ttf-dejavu ttf-liberation

安装实用工具

安装一些实用工具,kokononine保证你之后会用到的说:

  • htop : 进程监控软件
  • lsof : 查看进程打开的文件
  • sshfs : 挂载远程ssh服务器为一个文件系统,基于fuse的说
  • man-db : 手册分页程序
  • man-pages* : 手册合集及其翻译
  • neofetch : 快速打印系统信息
pacman -S htop lsof sshfs man-db man-pages man-pages-zh_cn neofetch

neofetch年久失修被Arch Linux移出主存储库的说了喵~

配置桌面环境所需的服务

如果你不想要每次开机都需要打命令才可以联网和启动桌面的话,就需要使networkmanagersddm开机自启动的说:

# 使 网络管理器 NetworkManager 开机自动启动
systemctl enable NetworkManager.service

# 使 登录管理器 sddm 开机自动启动
systemctl enable sddm.service

添加普通用户,配置zsh

安装并配置zsh

如果你不太喜欢bash,可以换成功能更全面的zsh的说,kokononine不是omz(oh my zsh)派的说,相比较于omz,kokononine更喜欢使用更简单的grml zsh config的说:

  • zsh : zsh本体
  • zsh-completions : zsh特有的命令补全脚本的说喵
  • bash-completion : bash的命令补全脚本的说喵,如果zsh没有找到特有的命令补全脚本,就会到bash那里找
  • zsh-syntax-highlighting : 类似于fish的命令高亮插件的说喵
  • zsh-history-substring-search : 按照关键字查找历史记录的插件的说喵,使用Ctrl+R触发
  • zsh-autosuggestions : 类似于fish的命令自动建议的插件的说喵
  • zsh-autocomplete : Real-time type-ahead completion for Zsh
  • grml-zsh-config : 一个功能很多的zshrc,archiso里默认的zsh就是搭配的这个的说喵
pacman -S zsh zsh-completions bash-completion zsh-syntax-highlighting zsh-history-substring-search zsh-autosuggestions grml-zsh-config

添加普通用户

如果你不想冒着巨大的安全风险使用root用户的话,就需要新建一个普通用户并且把密码设置的复杂复杂的不让坏人破解或者知道的说:

# 删除原来的 alarm 用户,如果不想要删除 /home/alarm 目录就删去 -r 选项的说喵~
userdel --force -r alarm

# 新建名为 你的用户名 的用户,加入 wheel(用来使用sudo) 组,创建与 你的用户名 同名的组,UID 为 1000 ,用户全名为 你的用户全名 的说
useradd -m -G wheel -U --uid 1000 -c "你的用户全名" 你的用户名

# 为新的普通用户设置密码,没有回显是正常的,防止坏人看到的说
passwd 你的用户名

# 为 root 用户设置密码的说
passwd root

配置zshrc

可以添加以下的kokononine的zshrc到你的 /home/你的用户名/.zshrc 的说(用来启用刚刚安装的zsh插件的说喵~):

if test -f "~/.bashrc"
then
    source "~/.bashrc"
fi

autoload -U compinit promptinit colors

compinit
promptinit
colors
3
# prompt -p 预览所有提示符
prompt redhat

if test -f "/usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh"
then
    source "/usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh"
fi

if test -f "/usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
then
    source "/usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
fi

if test -f "/usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh"
then
    source "/usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh"
fi

章节的尾巴

如果你有在tty终端下使用Linux的需求,不想看到方块中文的话,需要在第一次启动桌面环境之前强制生成英文的3D(Desktop Documents Downloads)文件夹们和~/.config/user-dirs.dirs和~/.config/user-dirs.locale的说:

# 把语言环境变量临时设置为默认的C,再执行xdg-user-dirs-update的说喵
LANG=C su 你的用户名 -c "xdg-user-dirs-update --force"

如果已经打开过桌面环境,删除用户文件夹的所有内容重新打开一遍桌面环境的说!

# 删除你的用户文件夹的所有内容
rm -rf /home/你的用户名/*
rm -rf /home/你的用户名/.*

# 把语言环境变量临时设置为默认的C,重新执行xdg-user-dirs-update的说喵
LANG=C su 你的用户名 -c "xdg-user-dirs-update --force"

# 重新打开桌面环境

# 重新创建zshrc

应该没有问题…吧

重启一下……等等…

为什么会黑屏的说喵?kokononine在误人子弟へ的说!

不要着急的说喵~让我们来排查排查问题的说~

Ctrl+Alt+F3切换到第三个tty终端,登录root用户,打开htop(现在知道kokononine酱让你安装的原因了叭的说喵w~)的说~

满屏幕就是重复的那麽几个进程的说,sddm还在,Xorg没有启动的说……

等等,Xorg没有启动え的说喵???

sddm依赖的Xorg没有启动え的说!??

没有画面的原因找到了的说,来排查Xorg的问题吧,查看Xorg日志的说

less /var/log/Xorg.0.log

日志提示找不到屏幕的说(kokononine懒得找具体日志啦的说喵~)

这样来讲,难道是是驱动有问题的说喵?

kokononine来告诉你一个办法,把这些难记难记的东西加到/etc/X11/xorg.conf.d/99-v3d.conf,一个字也不可以错,错字是受的说喵~:

Section "OutputClass"
    Identifier "vc4"
    MatchDriver "vc4"
    Driver "modesetting"
    Option "PrimaryGPU" "true"
EndSection

Section "Device"
    Identifier "kms"
    Driver "modesetting"
    Option "AccelMethod" "msdri3"
    Option "UseGammaLUT" "off"
EndSection

这其实是Raspberry Pi OS(Bookworm)中所做的更改的说,作为一名Archer,需要有发掘和探索和解决问题的能力的说喵~

或者把它打包,找个你喜欢的地方,新建一个PKGBUILD的说:

touch PKGBUILD

填入以下内容的说:

# Maintainer: kokononine <nine_9 at outlook dot jp>
#
# pkgbase=""
pkgname="xorg-vc4-v3d-conf"
pkgver="1.0.0"
pkgrel="1"
# epoch=""
pkgdesc="Xorg VideoCore 4 V3D configure file for Raspberry Pi"
arch=("any")
url="https://kokononine.moe/blog/"
license=("GPL-3.0-or-later")
# groups=()
depends=("xorg-server" "xf86-video-fbdev")
makedepends=("sh")
checkdepends=("sh")
optdepends=("linux-rpi: Linux kernel and modules (RPi Foundation fork) with 4k pagesize"
            "linux-rpi-16k: Linux kernel and modules (RPi Foundation fork) with 16k pagesize")
# provides=()
# conflicts=()
# replaces=()
backup=("etc/X11/xorg.conf.d/99-vc4-v3d.conf")
# options=()
# source=()
# noextract=()
# validpgpkeys=()
install="./PKGBUILD"
changelog="./PKGBUILD"
# b2sums=(    "")
# sha512sums=("")
# sha384sums=("")
# sha256sums=("")
# sha224sums=("")
# sha1sums=(  "")
# md5sums=(   "")

package()
{
    mkdir -p "${pkgdir}/etc/X11/xorg.conf.d"
    echo -en "${pkgdir}/etc/X11/xorg.conf.d/99-vc4-v3d.conf" "\
Section \"OutputClass\"
    Identifier \"vc4\"
    MatchDriver \"vc4\"
    Driver \"modesetting\"
    Option \"PrimaryGPU\" \"true\"
EndSection

Section \"Device\"
    Identifier \"kms\"
    Driver \"modesetting\"
    Option \"AccelMethod\" \"msdri3\"
    Option \"UseGammaLUT\" \"off\"
EndSection
" | tee "${pkgdir}/etc/X11/xorg.conf.d/99-v3d.conf"
}

cd(change directory, chdir, 改变目录)到刚刚创建PKGBUILD的目录,使用makepkg打包上面的PKGBUILD并安装的说:

makepkg -sfi

一点小问题

重启一下的说喵……

sddm状态正常的说,进入KDE桌面的说喵…

鼠标滑到左上角的说,看一下窗口概览,うえ!?竟然是黑屏的说……

解决方法除了使用非常陈旧陈旧的X11窗口协定外,kokononine将也不知道怎么解决的说,但是Debian的KDE5没有这个问题的说喵…

(那么刚刚kokononine酱立的flag呢~就是那个,说Archer需要有发掘和探索和解决问题的能力~kokononine酱食言啦的说喵~)

(问题发掘到了,也探索了,但是找不到解决办法的说!ふぅ~呜呜呜喵~)

文章的尾巴

至此,你在kokononine酱的引导下已经得到了一个运行在Raspberry Pi 5之上的基本没有问题的Arch Linux ARM操作系统的说喵,敬请愉快的使用它叭的说喵w (:

杂谈

关于fstab

如果你打算不移除SD卡启动在U盘上安装的Arch Linux ARM的话,你需要修改一下每个系统的fatab的说喵~

下面是一个例子的说喵喵喵~

# Static information about the filesystems.
# See fstab(5) for details.

# <file system> <dir> <type> <options> <dump> <pass>
# /dev/nvme0n1p2 LABEL=rootfs
UUID=abcdabcd-abcd-abcd-abcd-abcdabcdabcd	/         	ext4      	rw,relatime	0 1

# /dev/nvme0n1p1 LABEL=bootfs
UUID=ABCD-ABCD      	/boot     	vfat      	rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro	0 2

你可能需要的软件包

AUR助手

  • paru(AUR) : yay和pacman命令行兼容的AUR助手,使用rust编写的说喵~
  • yay(AUR) : yaourt的继承者,pacman命令行兼容的AUR助手,使用golang编写的说喵~

蓝牙

  • bluez : linux下常用的蓝牙支持的说喵~
  • bluez-utils : linux下常用的蓝牙支持的工具包的说喵~

浏览器

  • firefox : Mozilla基金会赞助开发的浏览器的说喵~
  • chromium : chromium开源专案的浏览器的说喵~
  • mircosoft-edge-stable-bin(AUR) : 基于chromium开发的浏览器的说喵~,是专有软件的说,一定要谨慎使用的说
  • google-chrome(AUR) : chromium的更多功能封装的说喵~,也是专有软件的说,一定要谨慎使用的说

邮件客户端

  • thunderbird: Mozilla基金会赞助开发的邮件客户端的说喵~

文件系统读写支持

  • ntfs-3g : 用于创建,修复,读写常用于Windows的NTFS的说喵~
  • dosfstools : 用于创建,读写FAT文件系统的说喵~
  • sshfs : 用于挂载远程ssh服务器的文件系统为本地挂载点的说喵~

容器

  • docker: 成熟的容器平台的说喵~
  • lxc: 自定义程度极高的容器平台的说喵~
  • waydroid(AUR): 基于lxc的Android容器的说喵~

服务器套件

  • apache : Apache基金会赞助开发的http服务器的说喵~
  • nginx : 目前使用量第二大的多功能服务器的说喵~
  • php : 可以嵌入html的服务器后端语言的说喵~
  • php-apache : php的apache支持的说喵~
  • php-gd : php的gd插件,用于处理图像的说喵~
  • php-imagick : php的imagick插件,用于处理图像的说喵~
  • mariadb : 与mysql兼容的数据库软件的说喵~
  • mysql(AUR) : 经典的数据库软件的说喵~

C套件

  • gcc : GNU编译器套装,内含C和C++编译器的说喵~
  • clang : C,C++,Objective-C的编译器的另一个选择的说喵~
  • llvm : clang的后端的说喵~
  • cmake : 常用的编译控制平台的说喵~
  • svn : 常用的版本控制平台的说喵~

JDK

  • jdk-openjdk : 最新的JDK的说喵~
  • jdk17-openjdk : JDK17的说喵~

聊天

  • telegram-desktop : TG的linux客户端的说喵~
  • discord : discord的linux客户端的说喵~

时常更新系统

记得时常更新系统的说,否则一更新的话Arch娘会就在地上乱滚一番然后再也起不来的说喵~

sudo pacman -Syu

如何安装AUR包

AUR助手paru本体就存在于AUR的说,下面以paru来举例的说~

首先克隆paru的PKGBUILD的说喵~:

git clone https://aur.archlinux.org/paru.git

使用makepkg打包的说喵~:

cd paru
makepkg -si

之后就能用paru安装AUR包的说喵~:

paru -S yay

或者不想安装paru的话,手动克隆安装也并无不妥的说~

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇