Skip to content

Latest commit

 

History

History
765 lines (530 loc) · 18.9 KB

240706a_alpine.md

File metadata and controls

765 lines (530 loc) · 18.9 KB

AlpineLinux作为桌面系统使用的安装过程以及注意事项

可以参考视频 BV1PF4m1T7Zh

手动安装步骤参考官方文档 https://docs.alpinelinux.org/user-handbook/0.1a/Installing/manual.html

目录

1 基本安装流程

1.1 键盘

setup-keymap us us

会在当前tmpfs中/etc/conf.d/loadkmap添加KEYMAP配置,同时创建/etc/keymap目录,安装kbd-bkeymaps,将/usr/share/bkeymaps/us/us.bmap.gz放到里面

1.2 主机名和hosts

setup-hostname xxx

这个命令检查名称xxx合法性并写入到/etc/hostname

更改/etc/hosts

127.0.0.1   localhost localhost.localdomain xxx xxx.localdomain
::1         localhost localhost.localdomain xxx xxx.localdomain

重启hostname服务,可以看到主机名生效

rc-service hostname restart

1.3 网络配置

setup-interfaces

会依次询问配置的接口(eth0wlan0),是否使用DHCP。这里使用DHCP。如果使用无线网还会有额外操作。结束输入done

Alpine的网络接口配置文件位于/etc/network/interfaces。这里先了解一下,不用配置

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

配置完成后启动networking

rc-service networking start

看一下DHCP是否成功获取到IP

ip address

1.3.1 改源

/etc/apk/repositories。可以添加本地路径源,示例(也可以使用release版本对应的源)

改源可以一开始就做好

/media/cdrom/apks
https://mirrors.ustc.edu.cn/alpine/latest-stable/main
https://mirrors.ustc.edu.cn/alpine/latest-stable/community

建议添加edge

https://mirrors.ustc.edu.cn/alpine/edge/main
https://mirrors.ustc.edu.cn/alpine/edge/community
https://mirrors.ustc.edu.cn/alpine/edge/testing

1.4 时区

直接执行setup-timezone,根据提示输入时区即可

setup-timezone

该命令本质上是将/usr/share/zoneinfo下的文件复制到/etc/zoneinfo,再将同样的文件链接到/etc/localtime

1.5 用户配置

配置root密码直接执行passwd

passwd

1.6 NTP时钟同步配置

直接执行setup-ntp,选择使用chronyd

setup-ntp

1.7 磁盘分区

使用UEFI模式启动。多系统不要使用setup-disk进行分区与格式化操作。这里只分一个ext4/和一个vfat的ESP,内核和initramfs放在ext4分区中(不给/boot专门分区)。AlpineLinux中的fdiskbusybox的版本,使用方法和传统的fdisk不一样

安装分区工具(cfdiskparted)与格式化工具

apk add cfdisk parted e2fsprogs

cfdisk是图形化界面操作不再展示。如果执行时提示动态库问题,apk upgrade一下就好。这里使用parted

alias pt="parted -s --align=optimal"
pt /dev/sda mklabel gpt
pt /dev/sda mkpart '""' 2048s 411647s
pt /dev/sda mkpart '""' 411648s 252069887s

第一个分区从2048扇区开始,一个LBA大小512B。假设ESP大小200M那么扇区范围2048s411647s。依次类推。也可以直接使用MiB等单位

如果有需要,可以使用set 1 esp on/dev/sda1设为EFI System。不设定也没问题。其他常用的有swaplvm

分好区以后使用fdisk再检查一下

fdisk -l /dev/sda

格式化分区

mkfs.vfat /dev/sda1
mkfs.ext4 /dev/sda2

1.8 正式安装

挂载分区

可以先不挂载ESP分区,可以到setup-disk以后安装UEFI引导时再挂载,否则setup-disk会将ESP挂载点也添加到/etc/fstab

mount -t ext4 /dev/sda2 /mnt
mkdir -p /mnt/boot/efi
mount -t vfat /dev/sda1 /mnt/boot/efi

执行系统安装,先不安装grub

BOOTLOADER=none setup-disk -m sys /mnt

1.8.1 chroot

Alpine没有像Arch一样提供arch-chroot。想要使用chroot时,获取较为完全的功能要按需挂载以下文件系统,假设新的根分区挂载到/mnt

cd /mnt
mount -t proc /proc proc/
mount -t sysfs /sys sys/
mount -o bind /dev dev/
mount --rbind /run run/
mount --rbind /sys/firmware/efi/efivars sys/firmware/efi/efivars/
cp /etc/resolv.conf etc/resolv.conf
chroot .

1.8.2 fstab

如果有需要,可以删除以下所示/mnt/etc/fstab中的ESP分区挂载项

UUID=xxxx-xxxx  /boot/efi   vfat ...

1.9 启动引导

1.9.1 rEFInd

这里只讲述Alpine下安装rEFInd的方法。也可以从其他系统安装与配置

在安装环境中直接执行chroot/mnt下。可以不用挂载/proc

也可以不chroot,直接在livecd环境下安装

chroot /mnt

Alpine的latest-stable源暂时没有refind。需要添加edge/testing

https://mirrors.ustc.edu.cn/alpine/edge/testing

然后安装

apk update && apk add refind

手动复制refind.efi到ESP分区

mkdir -p /boot/efi/EFI/refind
cp /usr/share/refind/refind_x64.efi /boot/efi/EFI/refind/

UEFI的Fallback可执行EFI文件路径与名称为/EFI/BOOT/bootx64.efi

复制文件系统驱动到ESP分区

mkdir /boot/efi/EFI/refind/drivers_x64
cp /usr/share/refind/drivers_x86_64/ext*.efi /boot/efi/EFI/refind/drivers_x64

复制样本配置文件到ESP

cp /usr/share/refind/refind.conf-sample /boot/efi/EFI/refind/refind.conf

可以复制图标文件到ESP。后面会有界面主题配置方法,使用更好看的图标,可以只创建目录而不复制

cp -r /usr/share/refind/icons /boot/efi/EFI/refind

退出chroot,使用efibootmgrrefind.efi添加到启动项开头。添加完成以后记得再执行一下efibootmgr检查一下PARTUUID是否和ESP的一致

apk add efibootmgr
efibootmgr -c -d /dev/sda -p 1 -l /EFI/refind/refind_x64.efi -L "rEFInd"

编辑配置文件

vim /mnt/boot/efi/EFI/refind/refind.conf

保证refind正常引导Alpine需要的最小配置示例。其中分辨率依照实际调整(有可能不支持屏幕物理分辨率,尤其在开启CSM的平台)。可以使用例如include os.conf包含其他配置文件。分别使用lsblk -dno PARTUUID /dev/sdaxvolume项)和lsblk -dno UUID /dev/sdaxoptions项)查看PARTUUIDUUID

timeout 5
use_nvram false
icons_dir icons
scanfor manual
default_selection 1

menuentry "Alpine" {
    icon    /EFI/refind/icons/os_linux.png
    volume  xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    loader  /boot/vmlinuz-lts
    initrd  /boot/initramfs-lts
    options "root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro modules=sd-mod,usb-storage,ext4 rootfstype=ext4 loglevel=3"
}

仅文字模式

timeout 5
use_nvram false
textonly
scanfor manual
default_selection 1
menuentry "Alpine" {
    volume  xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    loader  /boot/vmlinuz-lts
    initrd  /boot/initramfs-lts
    options "root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro modules=sd-mod,usb-storage,ext4 rootfstype=ext4 loglevel=3"
}

1.9.2 GRUB

执行chroot

cd /mnt
mount -t proc /proc proc/
mount -t sysfs /sys sys/
mount -o bind /dev dev/
mount --rbind /sys/firmware/efi/efivars sys/firmware/efi/efivars/
chroot .

假设ESP依旧挂载到/boot/efi,安装grub本体到/boot/efi/EFI/grub

apk update && apk add grub-efi efibootmgr
grub-install --target=x86_64-efi --boot-directory=/boot/efi --efi-directory=/boot/efi --bootloader-id=grub --no-nvram

删除trigger调用grub-mkconfig生成的grub配置

rm -rf /boot/grub

/etc/default/grub添加一行

GRUB_DISABLE_OS_PROBER=true

删除文件30_uefi-firmware30_os-prober

rm /etc/grub.d/30_uefi-firmware
rm /etc/grub.d/30_os-prober

生成配置

grub-mkconfig -o /boot/efi/grub/grub.cfg

修改该文件,找到menuentry 'Alpine...的地方,修改入口为以下内容。其中UUID都为文件系统UUIDlsblk -dno UUID /dev/sdxx),hdx,gpty表示第x个磁盘(从0开始),第y个GPT分区(从1开始)

load_video
insmod gzio
insmod part_gpt
insmod ext2
set root='hdx,gptx'
search --no-floppy --fs-uuid --set=root xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
echo 'Loading Linux lts ...'
linux /boot/vmlinuz-lts root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro modules=sd-mod,usb-storage,ext4 rootfstype=ext4 loglevel=3
echo 'Loading initial ramdisk ...'
initrd /boot/initramfs-lts

安装efibootmgr添加grub到BIOS启动项

apk add efibootmgr
efibootmgr -c -d /dev/sda -p 1 -l /EFI/grub/grubx64.efi -L "GRUB"

2 安装后杂项

2.1 OpenRC并行启动

编辑/etc/rc.conf开启并行启动。但是通常加速作用不是很大

rc_parallel="YES"

有些服务例如chronydnetworking可能拖慢开机速度。chronyd依赖于networking。可以禁用chronyd自启动,这种情况下networking也不会启动。需要手动启动

rc-update del chronyd

2.2 rEFInd界面美化

主要是更换图标与背景

创建主题目录

mkdir -p /boot/efi/EFI/refind/themes/custom

参考 https://github.com/evanpurkhiser/rEFInd-minimal

主题备份 https://github.com/apachiww/refind-bk

将文件拷贝至/boot/efi/EFI/refind/themes/custom,在refind.conf末尾添加一行包含该文件

include themes/custom/theme.conf

删除以下行

icons_dir icons

最后修改入口项图标路径。其他所有入口项同理

menuentry "Alpine" {
    icon    /EFI/refind/themes/custom/icons/os_alpine.png
    volume  xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    loader  /boot/vmlinuz-lts
    initrd  /boot/initramfs-lts
    options "root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro modules=sd-mod,usb-storage,ext4 rootfstype=ext4 loglevel=3"
}

theme.conf中主要包含以下内容,包含了背景的设定

hideui singleuser,hints,arrows,label,badges
icons_dir themes/custom/icons
banner themes/custom/background/bk.png
banner_scale fillscreen
selection_big themes/custom/selection_big.png
selection_small themes/custom/selection_small.png
showtools shutdown

2.3 图形界面:Sway

最新dotfile https://github.com/apachiww/dotfiles/tree/main/snap-240904-thinkpadt440p-alpine 。可使用swaywayfire

2.3.1 显卡与声卡

Intel核显3D与编解码驱动。平台Haswell,Thinkpad T440p

apk add mesa mesa-utils mesa-vulkan-intel libva-intel-driver libva-utils linux-firmware-i915 mesa-dri-gallium mesa-va-gallium igt-gpu-tools

AMD显卡平台(从GCN开始)安装mesa-vulkan-ati提供Vulkan支持,还需要libvalinux-firmware-amdgpu(GCN前的显卡安装linux-firmware-radeon,且没有Vulkan支持)。此外GCN1需要在内核启动命令行添加参数radeon.si_support=0 amdgpu.si_support=1,GCN2需要添加参数radeon.cik_support=0 amdgpu.cik_support=1,否则radeon驱动会先于amdgpu加载,导致无法使用Vulkan。使用lspci -k可以查看当前使用的驱动

将用户加入video组。后续可执行vainfo查看是否可访问视频编解码

adduser xxx video

ALSA

apk add alsa-utils alsaconf

将用户加入audio

adduser xxx audio

此时尝试执行一下alsamixer。如果默认声卡不是耳机孔输出,可以修改默认声卡

vim /usr/share/alsa/alsa.conf

设定声卡序号

defaults.ctl.card 1
defaults.pcm.card 1

ALSA服务默认不启动,需要另外配置启动

rc-service alsa start
rc-update add alsa

第一次启动时由于还没有音量设定缓存会报警告。重启一下alsa即可

2.3.2 基本安装

可以使用Alpine自带的setup-desktop安装sway

setup-desktop sway

上述命令安装elogind, polkit-elogind, eudev(被调用的setup-waylanddmenu, font-dejavu , foot, grim, i3status, sway, swayidle, swaylockd, util-linux-login, wl-clipboard, wmenu, xwayland, firefoxsetup-desktop sway)。上述命令会将系统mdev切换至udevsetup-devd udev),同时将elogind polkit设为开机启动。

如果没有需求,可以删除swayidle swaylockd swaylock

支持桌面背景需要再安装swaybg

apk add swaybg

安装dbus并设定为开机启动。dbus-x11提供waybar所需的dbus-launch命令

apk add dbus dbus-x11
rc-service dbus start
rc-update add dbus

安装其他一些基础功能与附加小组件,包括字体,图标等。使用doas替代sudo

apk add man-db man-pages bash bash-completion font-jetbrains-mono font-droid-sans-mono-nerd font-noto-emoji font-wqy-zenhei adwaita-icon-theme papirus-icon-theme fuzzel mako waybar doas doasedit foot-extra-terminfo nemo wpa_supplicant usbutils pciutils

修改shell为bash

apk add bash bash-completion
usermod xxx -s /bin/bash

在用户家目录添加.bash_profile.bashrc

# ~/.bash_profile

[[ -f ~/.bashrc ]] && . ~/.bashrc
# ~/.bashrc

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

alias ls='ls --color=auto'

添加.config/sway/launch.sh。可以使用export设定一些图形环境需要的环境变量。启动sway通过该脚本启动。必须加上dbus-run-session,否则通过xwayland运行的程序无法使用输入法

#!/bin/bash

exec dbus-run-session sway

2.3.3 配置

swaywm配置教程见 https://github.com/swaywm/sway/wiki ,基于/etc/sway/config示例配置简单更改就可以使用

粘贴板配置

安装cliphist wl-clipboard,在sway配置文件添加。此外按需调整foot终端的复制粘贴快捷键

exec wl-paste --type text --watch cliphist store
exec wl-paste --type image --watch cliphist store

截图软件配置

安装grimshot slurp swappy,创建截屏脚本.config/sway/screenshot.sh

#!/bin/bash

grim -g "$(slurp)" - | swappy -f -

sway配置文件添加快捷键设定

bindsym Print exec ~/.config/sway/screenshot.sh

修改鼠标光标,在sway配置文件添加,大小按需调节

seat seat0 xcursor_theme Adwaita 18

添加waybar。配置完成后在sway配置文件添加一行

exec waybar

命令行补全,例如doas。在.bashrc添加

complete -F _command doas

查看显示器输出,外接显示器可能需要查看并按需修改配置

swaymsg -t get_outputs

也可以使用wlr-randr

wlr-randr

2.3.4 网络管理

DNS配置在/etc/resolv.confnetworking启动后会自动配置好

前文已经讲过以太网接口的配置。这里再给一个静态地址配置示例

iface eth0 inet static
    address 192.168.1.4
    netmask 255.255.255.0
    gateway 192.168.1.1

无线网

前面已经禁用networking自启动。禁用wpa_supplicant自启动

rc-update del wpa_supplicant boot

无线网卡可以通过rfkill开启或关闭

rfkill list
rfkill block 1
rfkill unblock 1

wlan0。再次执行ip link可以看到<>中出现UP

ip link set wlan0 up

此时可以使用iw扫描AP

iw dev wlan0 scan

使用wpa_passphrase存储无线密码配置到/etc/wpa_supplicant/wpa_supplicant.conf。如果有必要,可以删除其中的密码明文

wpa_passphrase 'SSID' 'Passwd' > /etc/wpa_supplicant/wpa_supplicant.conf

手动启动wpa_supplicant作为服务运行

wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf

wlan0启动dhcp

udhcpc -i wlan0

上述过程没有问题后,将无线网加入/etc/network/interfacesnetworking启动时自动配置该接口。wpa_supplicant需要在networking前启动

auto wlan0
iface wlan0 inet dhcp

wpa_supplicant默认不会在网络发生变化时重新获取IP。如果要实现网络变化时通知udhcpc,需要修改wpa_supplicant启动命令行,使用/etc/wpa_supplicant/wpa_cli.sh

### /etc/conf.d/wpa_cli

WPACLI_OPTS="-a /etc/wpa_supplicant/wpa_cli.sh"

此外需要额外启动wpa_cli

2.3.5 输入法

2024.09.04:sway 1.9下wayland原生应用依然不支持输入法候选框。建议等待几个月后1.10发布

此外sway仅支持text-input-v3,无法支持wayland原生模式下运行Chromium浏览器以及Electron应用(仅支持text-input-v1)。建议这些应用使用x11模式运行,执行时加上参数--set-features=UseOzonePlatform --ozone-platform=x11

安装fcitx需要添加源

https://mirrors.ustc.edu.cn/alpine/edge/main
https://mirrors.ustc.edu.cn/alpine/edge/community

安装fcitx5

apk add fcitx5 fcitx5-chinese-addons fcitx5-configtool fcitx5-qt fcitx5-gtk xdg-desktop-portal xdg-desktop-portal-wlr xdg-desktop-portal-gtk

sway配置文件添加启动

exec fcitx5

添加环境变量(不加也可以使用)

export XMODIFIERS=@im=fcitx
export QT_IM_MODULE=fcitx

2.4 图形界面:Wayfire

显卡和声卡配置基本同前

安装wayfire

apk add wayfire wf-shell

复制配置文件。按需配置

mkdir .config/wayfire
cp /usr/share/wayfire/wayfire.ini.default .config/wayfire/wayfire.ini
ln -s /abs/path/to/wayfire.ini ~/.config/wayfire.ini

启动脚本同理~/.config/wayfire/launch.sh

#!/bin/bash

exec dbus-run-session wayfire