# build-tiny-rootfs
 对小小电脑项目rootfs制作的说明

### 为什么不直接制作一个脚本呢？

因为我不会，所以只能用自然语言记录一下制作步骤。

## 制作步骤（xfce和lxqt）

### 安装Debian容器

- 安装Termux
- 在Termux内安装tmoe
- 在tmoe内安装Debian Bookworm的proot容器
  - 是否新建sudo用户-是-用户名tiny-密码tiny
  - 是否设置tiny为默认用户-是
  - 是否为root配置zsh-否
  - 是否删除zsh.sh等-是
  - 是否启动tmoe tools-是
  - 其余对话框默认直接按回车
  - 来到tmoe tool界面时取消，退出

### 安装其他软件

安装xfce部分是根据记忆写的，如果有误请指出。

桌面环境只安装一个。

#### 安装桌面环境(lxqt)

- 输入debian-i进入tmoe tools
- 图形界面-rootless-lxqt-core
- 不安装electron apps
- 不安装chromium

- 按需调整

#### 安装桌面环境(xfce)

前面的部分和lxqt一致，只是选桌面环境时选了xfce-lite。

下面是额外的美化部分。推荐先安装软件再做这个，因为使用kali-undercover时可能有依赖报错，但我忘记是哪些依赖了。但后面安装的某个软件会帮我们把依赖补上。

- xfce美化
  - 前往kali源下载kali-undercover包并apt install安装
  - 修改kali-undercover脚本中检测xfce环境的地方，强制允许
    - 即注释第一个if里的exit 1
  - 执行kali-undercover
  - 按需调整
    - 注释.bashrc中把bash风格改为windows风格的语句
    - 调整状态栏
    - ......

#### 安装VNC

安装桌面环境后会自动进行这一步，使用tmoe tools全部安装即可。

- 选择tigervnc
- 密码12345678

安装完成后，输入debian-i回到tmoe继续修改一些参数，主要目的是避免与termux的容器端口一致产生冲突

- 修改显示端口到5904
  - 远程桌面-tigervnc-显示端口-4
- 修改novnc端口到36082
  - 远程桌面-novnc-端口-36082
- 修改startnovnc启动脚本(避免每次启动novnc时打开浏览器，虽然不是windows)
  - 注释start_win10_edge_novnc_addr(大概在倒数第五行)

接下来对novnc应用补丁，以添加"通过滑块修改分辨率"等功能

- [下载novnc.patch](https://github.com/Cateners/noVNC/releases/tag/1.2)
- 切换目录到/usr/local/etc/tmoe-linux/novnc
- `patch -p1 < novnc.patch`
- ```bash
    find . '(' \
    -name \*-baseline -o \
    -name \*-merge -o \
    -name \*-original -o \
    -name \*.orig -o \
    -name \*.rej \
    ')' -delete
    ```


#### 修复tmoe不能下载软件

在我发布的xfce版本中，我给每个aria2c调用都添加了--async-dns=false参数。

先切换到tmoe目录`/usr/local/etc/tmoe-linux/git/share`，然后执行脚本`./replace.sh old-version`：
```shell
#!/bin/bash
# 用法: ./replace.sh 目录
# 该脚本会递归地在给定目录下的所有文件中替换文本
# 原文本: aria2c --console-log-level
# 新文本: aria2c --async-dns=false --console-log-level

# 检查参数是否正确
if [ $# -ne 1 ]; then
  echo "错误: 需要一个目录作为参数"
  exit 1
fi

# 检查目录是否存在
if [ ! -d "$1" ]; then
  echo "错误: 目录 $1 不存在"
  exit 2
fi

# 遍历目录下的所有文件
find "$1" -type f | while read file; do
  # 使用sed命令替换文本
  sed -i 's/aria2c --console-log-level/aria2c --async-dns=false --console-log-level/g' "$file"
  echo
done
```

用完后删除replace.sh；

另外现在tmoe官方给出了[解决办法](https://gitee.com/mo2/linux/issues/I8BQG3)，不过我测试似乎还是不行，所以就先这样了

#### 修改apt源

按需修改/etc/apt/sources.list，另外把non-free改为non-free-firmware

#### 安装火狐浏览器

`sudo apt install firefox-esr firefox-esr-l10n-zh-cn`

#### 安装输入法

- debian-i
- 03秘密花园-10输入法-fcitx4-安装4libpinyin和6云拼音模块
- 在图形界面应用找到fcitx配置-附加组件-云拼音-配置-云拼音来源，把Google改为百度，确认
  - 启动图形界面：输入startnovnc，会出现一个类似xxx.xxx.xxx.xxx:36082/vnc.html的网址，复制到本机的浏览器中输入vnc密码12345678就可以访问了。

#### 安装gdebi

这个软件包能使用户通过图形界面安装deb安装包

安装：`sudo apt install gdebi`

修改启动器：在/usr/share/applications/gdebi.desktop的Exec=后加上sudo

#### 安装VSCode

VSCode使用tmoe安装，正好测试一下不能下载软件的问题是否存在

- 2软件-2开发-1VSCode-1Official

tmoe还会安装gnome-keyring，由于之前我做xfce包时会造成VSCode反复弹窗更新密钥环所以被我卸载了，这个按需决定是否保留吧

#### 安装ffmpeg

这个是为了预览推流用的，按需安装

`sudo apt install ffmpeg`

### 其他修补

#### cmatrix

这个是给快捷指令的彩蛋。下载cmatrix的包，并将cmatrix文件提取放到/home/tiny/.local/bin里即可，记得添加执行权限

#### WPS

**（20241112）注意，新版wps不再需要将整合模式改为多组件模式也能正常使用，所以可以跳过软件设置修改的步骤**

- 软件设置修改
  - 从官网下载WPS linux arm64 deb安装包，直接在图形界面点开用gdebi安装(正好测试一下gdebi是否能用)
  - 打开WPS-右上角设置-其他-切换窗口管理模式-整合模式改为多组件模式(否则一些设备在新建文档等操作时卡死，目前原因不明)
  - 使用gdebi(或自行)卸载WPS
- libtiff.so.5库修补
  - 切换到/lib/aarch64-linux-gnu文件夹，创建软链把libtiff.so.6链接到libtiff.so.5
  - 或者找libtiff.so.5的包并安装，这样可能更好一些
- 预装ttf-mscorefonts-installer
  - 这个包是WPS的依赖，会在sourceforge下载字体，可能会非常慢，所以提前apt装好


### 额外步骤

- 修复系统更新时变英文（v1.0.19）：把/etc/locale.gen文件里包含zh_CN.UTF-8的那行代码解除注释
- 修复了xfce使用Termux:X11时占用过高（v1.0.19）：把底部面板的电量管理插件移除（右键-面板-面板首选项-项目）
- 不弹出终端窗口（v1.0.18）：把/etc/X11/xinit/Xsession文件倒数第二行open_terminal删掉
- 关闭垂直同步以使用Turnip+Zink（v1.0.17）：把文件~/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml内vblank_mode值从auto改为off
- xfce版本安装了图片查看器ristretto和压缩文件管理器xarchiver（v1.0.16）

### 打包

- 首先退出容器，在容器挂载选项里取消对sd和termux的挂载，之后进入容器删除termux软连接
  - 在后面使用tar打包时，即使指定了exclude，tar也会尝试把它们打包进去
  - 这个很可能因为我自己没用对参数，如果你非常自信的话就不需要这么做，自行打包即可=v=
- 在[这里](https://github.com/meefik/busybox/releases)下载提取busybox的可执行文件，并放到系统根目录
  - 我使用busybox的tar来打包，而不是容器自带的tar，原因是容器自带的tar会把硬链接打包成单独的文件，导致打包解包后占用多出1GB
  - 这个也很可能是我自己没用对参数，如果你非常自信就不用这么做......
- 尽可能多地删除使用痕迹，包括但不限于
  - apt clean
  - /tmp下的文件，退出容器后删
  - tiny和root目录下的
    - .cache
    - .vnc/vnc.log, .vnc/x.log
    - .bash_history
    - .ICEauthority
    - .Xauthority
    - 等等
- 切换到root用户，切换到根目录，`/busybox tar -Jcpvf /debian.tar.xz --exclude=debian.tar.xz --exclude=dev --exclude=proc --exclude=system --exclude=storage --exclude=apex --exclude=sys --exclude=media/sd --exclude=busybox --exclude=".l2s.*" /`


## 制作步骤（GXDE OS）

### 咕咕咕

其实流程和前面差不多。基本上就是 装图形界面->修复中文->修复tmoe->修non-free-firmware->（随便看看空间占用，略）->修wps->准备busybox以便打包->添加Xsession文件以便启动

请看VCR：
```
    1  exit
    2  sudo apt install sd/Download/gxde-source_1.0.1_all.deb 
    3  sudo apt install ./sd/Download/gxde-source_1.0.1_all.deb 
    4  sudo apt update
    5  sudo apt install gxde-testing-source
    6  sudo apt update
    7  sudo apt install gxde-desktop-android --no-install-recommends
    8  sudo apt install spark-store gxde-terminal
    9  nano /etc/locale.gen
   10  cd /usr/local/etc/tmoe-linux/git/share
   11  nano replace.sh
   12  ./replace.sh old-version
   13  chmod +x replace.sh 
   14  ./replace.sh old-version
   15  rm replace.sh 
   16  cd
   17  tmoe
   18  nano /etc/apt/sources.list
   19  sudo apt update
   20  nano /etc/apt/sources.list
   21  sudo apt update
   22  cd /var/log
   23  ls -l
   24  du -h --max-depth=1 | sort -h
   25  cd ..
   26  du -h --max-depth=1 | sort -h
   27  cd cache/
   28  ls -l
   29  sudo apt update ttf-mscorefonts-installer
   30  sudo apt install ttf-mscorefonts-installer
   31  cd /usr/lib/aarch64-linux-gnu/
   32  ln -s libtiff.so.6 libtiff.so.5
   33  history
   34  cd /
   35  cp home/tiny/termux/home/.local/share/tmoe-linux/containers/proot/debian-bookworm_arm64/busybox .
   36  cd /etc/X11/xinit/
   37  ls
   38  cp ~/termux/home/.local/share/tmoe-linux/containers/proot/debian-bookworm_arm64/etc/X11/xinit/Xsession .
   39  ls -l Xsession 
   40  cd /
   41  ls -l busybox 
   42  exit
   43  sudo apt clean;sudo apt autoclean;sudo apt autoremove --purge || sudo apt autoremove
   44  history
   45  history > /sd/history.txt
```

关于Xsession文件：

因为当前小小电脑代码写死了启动X11图形界面就通过执行/etc/X11/xinit/Xsession，如果通过tmoe安装图形界面这个文件是自带的，但安装GXDE没有通过tmoe，所以随便写了个：
```
rm -rf /run/dbus/pid
sudo dbus-daemon --system
export $(dbus-launch)
startgxde_android
```
