更新时间: `2018-09-12`
- 升级: 9.5.0 版本出来了,9.3.0应该不用了
- 缘起:之前喜欢的slax 7.0.8 是很久以前的版本,在新硬件上表现不好,新的 9.x.0 版本架构有些不同,记录一下
- 官网: http://www.slax.org/
## 经验
- `iso/slax/` 文件夹是最重要的文件夹,要在电脑上启动或U盘上启动,复制slax文件夹到根目录,然后设置一下引导就可以
- 这个目录下有`0x-xxx.sb` ,这些都是系统预制的包,看名字就能看出是干啥的,它们就是一些文件的集合打包,可以使用dir2sb制作,用sb2dir解压
- `boot` 目录包含win/linux启动安装脚本
- `changes` 目录如果启动时使用perch参数,会在该目录下保存与原始包的差异
- `modules` 目录可以将自制的包放到这里,启动除了会自动夹在slax下的sb,也会加载这个目录下的sb文件
- `rootcopy` 目录,启动时会将这个目录下的文件复制到系统的/根目录下,自己发挥想象力可以干啥
- 系统加载时应该是按照文件名的顺序来逐步加载,优先级高的包数字小,自己制作的包可以给个较大的数字
- 自己制作sb文件比较简单,将需要新增或覆盖的文件,文件夹复制到一个目录下,例如/dev/shm/00,使用命令 `dir2sb /dev/shm/00/ /dev/shm/81-mypkg.sb`
- 由于9.x.0系统采用apt做包管理系统,只要能联网,就能安装需要的软件,非常方便,但由于它是为debian系的系统设计的,而slax的sb包思想基于slackware,还是有些差别的,sb包可以看作一层层的包搭起来的系统,但是deb/dpkg/apt的包使用 `/var/lib/dpkg/status` 文本数据库来管理包,所以自己升级或制作自己的软件或设置包的话要将这个目录下的文件也打包进去,而且不同包的顺序也不能再改,不然数据库和实际会有差异,造成一些故障
## 设置
- 修改国内源 `/etc/apt/sources.list`
```config
deb http://mirrors.ustc.edu.cn/debian/ stretch main contrib non-free
deb http://mirrors.ustc.edu.cn/debian/ stretch-updates main contrib non-free
deb http://mirrors.ustc.edu.cn/debian-security/ stretch/updates main contrib non-free
```
- 提示:可以将修改好的sources.list文件复制到 `slax/rootcopy/etc/apt/`,启动时会覆盖原文件,或者将这些设置文件制作成.sb文件
- 更新缓存,安装中文字体
```shell
apt update
apt install fonts-wqy-zenhei
```
- 提示:将这个字体做成 .sb文件,放到slax目录下启动加载
- 可以下载解压deb解包(这种方式在`dpkg -l`中会没有记录,复杂包安装不正常)
```shell
cd /dev/shm/
mkdir 50-fonts-wqy-zenhei
apt download fonts-wqy-zenhei
dpkg -X fonts-wqy-zenhei_0.9.45-6_all.deb 50-fonts-wqy-zenhei
dir2sb 50-fonts-wqy-zenhei/ 50-fonts-wqy-zenhei.sb
```
- 或者复制changes目录下的新增文件(这个会覆盖dpkg的数据库,如果不包含statu数据库文件,也在dpkg -l中无记录)
- 注意 `/var/lib/dpkg/` 下就是dpkg的数据库,尤其是statu文件
- 如果使用7.0.8中的中文包,可能会出现xterm字体显示问题,修改 `~/.Xresources`
```config
XTerm*faceName:Dejavu Sans Mono:size=11
XTerm*faceNameDoublesize:WenQuanYi Zen Hei Mono:size=10
XTerm*boldFont:Dejavu Sans Mono:size=11
```
- 一些设置,修改`~/.bashrc`
```shell
export PATH=$HOME/bin/:$PATH
alias cdr='cd /dev/shm'
alias cdd='cd /run/initramfs/memory/data'
alias pan='axel -n 55'
alias aaa='rdesktop 192.168.1.100:3389 -u administrator -g 1280x768 -r clipboard:PRIMARYCLIPBOARD -r disk:ram=/dev/shm/'
```
- 上面的aaa可以在被控主机上访问如下路径: `\\tsclient\ram\`
- grub4dos 的引导设置
```config
default 0
timeout 9
title Slax 9.4.0 automount toram perch
find --set-root /slax/boot/vmlinuz
kernel /slax/boot/vmlinuz vga=normal load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 slax.flags=automount,toram,perch
initrd /slax/boot/initrfs.img
```
- 其他一些设置,参考 [使用Linux记录](2017-09-26_linux.html)
## 2018-05-11 进桌面后自动启动程序及tilda
- 因为slax9.4.0使用的是fluxbox做为默认桌面,搜索得到可在 `~/.fluxbox/apps` 中添加一行 `[startup] {tilda}`
- 实测以上生效,其他需要启动的程序或脚本依次类似添加
- `~/.fluxbox/` 下有些文件可以查看一下,例如快捷键及右键菜单配置
- 本来想安装`guake`终端的,apt 安装失败,于是选用`tilda`,它的配置文件保存在 `~/.config/tilda/` 目录下,配置好后,将程序及配置文件打包成sb文件,搞定
- 还有`xbindkeys`及`conky`可以尝试看看,应该不错,顺便说下fluxbox将两窗口合并为一个带标签窗口的操作是ctrl+鼠标左拖动窗口栏
- fluxbox 的底部任务栏在中文标题时会显示方框,style配置影响了它,在`.fluxbox`里面grep style得到当前style文件路径`/usr/share/fluxbox/styles/Slax`这是个目录,修改下面的`theme.cfg`文件中的`*font: WenQuanYi Micro Hei-9`
- `~/.fluxbox/keys`添加一行: `Control Shift l :Exec /usr/bin/java -jar $HOME/bin/LiveMgr.jar`
- 参考: http://blog.chinaunix.net/uid-20315410-id-1967104.html
## 关于升级
- 由于采用了apt,整个包管理有了一些不同,升级的时候就不要更新kernel了
- `apt-mark hold linux-image-686-pae`
## 一个包一个包的升级
### 先升级第一个包
- 先只保留`01-core.sb`
- 进入系统后,修改 `sources.list` 为国内源
- `apt update`
- `apt-mark hold linux-image-686-pae`
- `apt upgrade`
- 进入 `/run/initramfs/memory/changes/` 目录,这个目录下就是与原始系统的差异
- `mkdir -p /dev/shm/changes` ,这个目录是放置changes
- `cp -PR * /dev/shm/changes/`
- `cd /dev/shm/changes/`
- `/lib/` `/sbin/` `/usr/` `/var/lib/dpk/` 目录需要保留,其他的看名字是否相关才做保留
- 现在这个目录基本就是更新的内容了
- `mkdir -p /dev/shm/00`
- `cp -PR /run/initramfs/memory/bundles/01-core.sb/* /dev/shm/00/`
- `cp -PR /dev/shm/changes/* /dev/shm/00/`
- `dir2sb /dev/shm/00/ /dev/shm/01-core.sb`
- 这样就更新了除`linux-image-686-pae`这个包外的所有包
### 升级第二个包,实际这个包暂时没有需要升级的包,也许目前没有
- 更新 `01-firmware.sb` 前要将 dpkg 的数据库文件 `/var/lib/dpkg/status` 升级
- 先复制 `01-core.sb/var/lib/dpkg/status` 为 status.1c
- 先复制 `01-firmware.sb/var/lib/dpkg/status` 为 status.1f
- 复制上面更新后的 `/var/lib/dpkg/status` 为 status.1cfox1
- `diff status.1c status.1f > fox.diff`
- `patch status.1cfox1 fox.diff`
- `mv status.1cfox1 status.1ffox1`
- 这样 `status.1ffox1` 就是升级后的数据库文件
- 使用升级后的`01-core.sb` 和原始 `01-firmware.sb` 来进入系统后,复制`status.1ffox1` 到`/var/lib/dpkg/status`
- 然后 `apt update` 就可以得到需要升级的包,然后按照升级`01-core.sb`的套路来升级
## 一次性升级05-chromium.sb之前的包
- 因为实际发现升级后大小变化不大,可以一次性升级01-04的包,免得操作过于复杂,chromium由于依赖较多,单独升级
- 升级方法参照升级第一个包,不过引导时选择01-04的包
## 2017-03-14 升级
- 今天升级了50个包,很多包都升级了,从01开始一个包一个包升级的方法太蛋疼了,所以直接从04开始以新增补丁包的方式升级,这个包有24M了,使用原始方式升级05-chromium.sb出现问题,只好`apt install chromium`,跟原始包的大小差不多,发现一个问题,可能是安全原因,chromium 在root用户下运行需要加参数--no-sandbox,可以搜索*.desktop,修改其中的启动参数,修改后点图标启动正常,就是会弹出了xterm窗口,强迫症表示接受不能
- 时间老不对,使用命令: `dpkg-reconfigure tzdata`,这个命令是在`apt upgrade`时看提示得到的,实际使用有效,将etc下的时区设置放到配置包中,终于正常了
- 另外一个就是想安装firefox,发现木有这个包,从官网上下载,缺少包libgtk-3-0,安装后搞定
- `fonts-wqy-zenhei/stable 0.9.45-6 all` 和 `xfonts-wqy/stable 1.0.0~rc1-6 all` ,这中文字体包就不再包含status文件了,避免每次升级后都要重新制作一下
- 在虚拟机里面更新制作包,久了vdi文件变大,搜索找到工具: `zerofree`,用法:
```shell
mount -o ro,remount /dev/sda1
zerofree /dev/sda1
mount -o rw,remount /dev/sda1
```
- 关闭虚拟机,然后就可以释放vdi空间了: `VBoxManage modifyhd --compact /home/VM/slax930x86/slax930x86.vdi`
- win下可以使用 `sdelete -z` 命令
### 一个自动复制已修改文件到 `/dev/shm/nnnn` 的脚本 `bundleHelper.sh`:
```shell
#! /bin/bash
SRCDIR="/run/initramfs/memory/changes"
TARDIR="/dev/shm/$(date +%M%S)"
cd $SRCDIR
echo "--- du -sh *"
du -sh *
echo "---"
mkdir -p $TARDIR/var/lib/
echo "- copy: /var/lib/dpkg"
cp -PR var/lib/dpkg $TARDIR/var/lib/
rm $TARDIR/var/lib/dpkg/status-old
for fname in $(ls) ; do
if [[ $fname = "boot" ]] ; then continue ; fi
if [[ $fname = "dev" ]] ; then continue ; fi
if [[ $fname = "home" ]] ; then continue ; fi
if [[ $fname = "media" ]] ; then continue ; fi
if [[ $fname = "mnt" ]] ; then continue ; fi
if [[ $fname = "proc" ]] ; then continue ; fi
if [[ $fname = "root" ]] ; then continue ; fi
if [[ $fname = "run" ]] ; then continue ; fi
if [[ $fname = "sys" ]] ; then continue ; fi
if [[ $fname = "tmp" ]] ; then continue ; fi
if [[ $fname = "var" ]] ; then continue ; fi
echo "- copy: /$fname"
cp -PR $fname $TARDIR/
done
echo "- del: /etc/: fstab ld.so.cache mtab resolv.conf wicd/"
rm -fr $TARDIR/etc/fstab
rm -fr $TARDIR/etc/ld.so.cache # ldconfig remake
# rm -fr $TARDIR/etc/mailcap # apps diff
rm -fr $TARDIR/etc/mtab
rm -fr $TARDIR/etc/resolv.conf
rm -fr $TARDIR/etc/wicd
echo "# Done, Now cd /dev/shm/ , check dir and files specialy: /usr/lib/python2.7"
echo "# dir2sb $TARDIR $TARDIR.sb"
```
### 列一下9.5.0包名:
```shell
01-core.sb
01-firmware.sb
02-xorg.sb
03-desktop.sb
04-apps.sb
05-chromium-0911.sb
06-curl_rdesktop_vim-tiny_adb_n2n_axel_jq_p7zip-0911.sb
07-mpv_ffmpeg-0911.sb
08-openjdk-8-jre_tildat-0911.sb
09-foxupgrade-0911.sb
50-apt-list-180911.sb
53-root-bin-180820.sb
54-fonts-wqy-zenhei_microhei_xfonts-wqy-180327.sb
55-foxetc-180522.sb
```
## 2018-05-02: 升级05-chromium.sb
- 更新时发现chromium更新了,这个系统内置的包还有点麻烦
```shell
sb2dir 05-chromium.sb /dev/shm/old/
apt install chromium
bundleHelper.sh
cd /dev/shm/1102/
cp -PRv * ../old/
cd ../old/
# 上面是常规操作,下面两个操作是区别
# 系统已经有chromium.desktop,不需要这个新的,旧的执行的是 `fbliveapp chromium`
rm usr/share/applications/chromium.desktop
# 下面这行是执行 `fbliveapp chromium` 错误提示得到的
chmod 4755 usr/lib/chromium/chrome-sandbox
# 可以用了,现在打包一下
cd ..
dir2sb old/ 05-chromium-0911.sb
# 复制这个sb文件到slax目录,删除旧的即可
```