忽然去看了下 Slackware 主页的 15.0 Release note,有点感动于 Pat Volkerding 的坚持,于是又在虚拟机里安装了下 Slackware 试试——我为什么要说「又」呢?😄
安装
USTC 的 Slackware 镜像速度很快,下载 [ISO 文件](Index of /slackware/slackware-iso/slackware64-15.0-iso/)后放到 VMWare 虚拟机里启动,使用 UEFI 模式,安装开头会要求用 fdisk 或者 cfdisk 手动分区,做一个 300M EFI System 分区,剩下的做一个 Linux filesystem 分区即可,然后执行 setup 命令进入安装程序,整个安装过程基本一路回车,非常简单,由于 Slackware Linux 并不维护软件包粒度的依赖关系,所以为了简单,选择全部安装即可,占用大约 16GB 磁盘。
安装完后,使用 adduser xxx
命令创建第一个普通用户,然后修改 /etc/slackpkg/mirrors
,把第二个 CHINA (CN)
下面的 http://mirrors.ustc.edu.cn/slackware/slackware64-current/ 这行取消注释,然后执行:
# 更新软件包索引文件以及开发者的 GPG 公钥
slackpkg update
slackpkg update gpg # 只用执行一次
# 参考 https://mirrors.ustc.edu.cn/slackware/slackware64-current/UPGRADE.TXT
# 做跨大版本升级,或者从稳定版切换到 current 版本时执行:
slackpkg upgrade aaa_glibc-solibs
slackpkg upgrade pkgtools
slackpkg upgrade tar xz findutils
slackpkg upgrade slackpkg
# 升级整个系统
slackpkg install-new
slackpkg upgrade-all
slackpkg clean-system
升级过程中会提示有一些配置文件是否要覆盖,选择 O 覆盖,如果 /etc/slackpkg/mirrors
文件被还原了,再重新编辑下即可。
Slackware 的内核升级有个坑,它没给新内核重新生成 initrd
,也没把 vmlinuz-generic-X.Y.Z
和 initrd.gz
复制到 /boot/efi/EFI/Slackware
目录下,但是却把 /lib/modules/
下旧内核的文件全删除了(可以在 /etc/slackpkg/blacklist
里去掉 kernel-*
的注释以避免这个行为),导致重启后还是用的旧内核,网卡驱动找不到而丢失了 eth0,而 KDE 这个奇葩在没网时居然启动会卡住,因此需要手动修正下:
geninitrd
eliloconfig
上面两个命令也可以通过执行 sudo pkgtool
,选择对话框里的 Setup
菜单,再选择 01.mkinitrd
和 ll.eliloconfig
来执行。
这一通整完后,可以修改 /etc/inittab
文件中的 id:3:initdefault:
这行,把 3 替换成 4,就会默认启动 X 了,或者用 telinit 4
命令切换到 runlevel 4。
然后就是普通的 Linux 使用了,Slackware 的文档很简洁,只有官网和 Slackbook 两个地方可看,倒也省事。
Slackware 的 init 很简单,从 /sbin/init 和 /etc/inittab 开始,然后进入 /etc/rc.d 里的脚本,启用或者禁用服务是通过设置或者取消 /etc/rc.d/rc.SVC 文件的可执行权限达到的。整个系统里 Slackware 定制的痕迹非常少,主要在如下地方:
-
/etc/rc.d/
-
/etc/slackpkg/ slackpkg 命令使用的配置文件
-
/usr/doc/slackpkg-X.Y.Z/
-
/usr/doc/slacktrack-X.Y.Z/
-
/var/log/pkgtools/
-
/var/cache/packages/
-
/var/lib/pkgtools/packages/ 已安装软件包的元信息
-
/var/lib/slackpkg/ slackpkg 命令使用的软件仓库元信息
Slackware 官方打包的软件包只有一千六百多个,它有个类似 ArchLinux 的 AUR 的仓库 SlackBuilds,包含八千多个软件包。类似 AUR 有 yay 和 paru 辅助工具,SlackBuilds 也有辅助工具 sbopkg、 slpkg、sboui、sbotools、slackrepo、slackpkg+,其中 slackpkg+ 是 Slackware 官方包管理器 slackpkg 插件,可以安装第三方编译好的二进制包,可以在 slackpkg upgrade-all
是自动更新 initrd 和 ELILO 配置。
配置
Slackware 官方打包了 KDE,没有包含 Gnome,需要注意当前最新的 sddm-0.19.0 不支持 fish 作为 login shell,会导致 KDE Plasma 启动不了,sddm 开发版本代码已经修正,但还未发布。
Slackware 默认没有启动 ntpd,需要设置下:
chmod a+x /etc/rc.d/rc.ntpd
# 编辑 /etc/ntp.conf 把 server 127.127.1.0 和 fudge 127.127.1.0 两行注释掉
# 并去掉 server 0.pool.ntp.org 那几行的注释,然后启动 ntpd
/etc/rc.d/rc.ntpd start
Slackware 默认安装了 Fcitx 5 和 IBus,放到 /etc/xdg/autostart/ 下了,对应的启动脚本会判断环境变量来决定是否要启动自己,因此要在 ~/.bash_profile
里设置下:
# 参考 /usr/share/sddm/scripts/{Xsession,wayland-session},里面会使用 login shell 的初始化文件,
# 如果使用 Fish shell 作为 login shell,则要放在 ~/.profile 里
export LANG=en_US.UTF-8
export LC_CTYPE=zh_CN.UTF-8
export XMODIFIERS='@im=fcitx'
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export GLFW_IM_MODULE=ibus # https://www.fcitx-im.org/wiki/Setup_Fcitx_5
export SDL_IM_MODULE=fcitx
注销重新登录 KDE,执行 fcitx5-configtool
选择右下角按钮 + Add Input Method...
,添加 Pinyin
输入法即可使用 Ctrl + Space 在输入文本时切换出拼音输入法了,有点可惜的是 Slackware 没有打包 Fcitx 5 的 Rime 输入引擎。
再调教下字体设置,默认的 Liberation 英文字体和文泉驿中文字体不太讨喜。
sudo slackpkg remove wqy-zenhei-font-ttf
echo wqy-zenhen-font-ttf | sudo tee -a /etc/slackpkg/blacklist
mkdir -p ~/.config/fontconfig/conf.d
ln -s /etc/fonts/conf.avail/{70-no-bitmaps,70-noto-cjk}.conf ~/.config/fontconfig/conf.d
Slackware 官方没有打包 open-vm-tools,会导致 VMWare Fusion 里的 Slackware 虚拟机在选择菜单 Virtual Machine
-> Shutdown
时虚拟机里面的 acpid 服务收不到关机信号,可以从 SlackBuilds.org 里安装下:
# 可以使用 sbopkg, slpkg, sbotools, sboui 安装 open-vm-tools,这里选择使用 slpkg
sudo chmod a+x /etc/rc.d/rc.acpid
sudo /etc/rc.d/rc.acpid start
sudo slpkg update
sudo slpkg install open-vm-tools
sudo chmod a+x /etc/rc.d/rc.vmtoolsd
for i in 2 3 4 5; do sudo ln -s /etc/rc.d/rc.vmtoolsd /etc/rc.d/rc$i.d/S01vmtoolsd; done
for i in 0 1 6 ; do sudo ln -s /etc/rc.d/rc.vmtoolsd /etc/rc.d/rc$i.d/K01vmtoolsd; done
sudo /etc/rc.d/rc.vmtoolsd start
话说 Patrick 没有公开 Slackware 官方的源代码仓库,不知何故,难道真的不用版本控制工具? 还好有 Slackware 社区大腕 Eric Hameleers (网名 Alien BOB) 的非官方 GIT 仓库 https://git.slackware.nl 。