忽然去看了下 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.Zinitrd.gz 复制到 /boot/efi/EFI/Slackware 目录下,但是却把 /lib/modules/ 下旧内核的文件全删除了(可以在 /etc/slackpkg/blacklist 里去掉 kernel-* 的注释以避免这个行为),导致重启后还是用的旧内核,网卡驱动找不到而丢失了 eth0,而 KDE 这个奇葩在没网时居然启动会卡住,因此需要手动修正下:

geninitrd
eliloconfig

上面两个命令也可以通过执行 sudo pkgtool,选择对话框里的 Setup 菜单,再选择 01.mkinitrdll.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 也有辅助工具 sbopkgslpkgsbouisbotoolsslackreposlackpkg+,其中 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