安装最新最热的 deepin
如果你使用了物理板卡,那么你可以在文档列表中找到对应的安装教程。如果你没有板卡那么可以参考Cherrling的教程用qemu来启动,或者在开发板漂流计划中白嫖一个。
获取应用
丢掉所有的工作流和坑,只是拽源码打包的话,你应该在
1
|
sudo vim /etc/apt/sources.list
|
将 community 和 ci 源对应行复制粘贴,并将粘贴行前的 deb 改为 deb-src 。这两个源码源是最终我们确定一个软件包是否真实存在的最终判据,具体原因在《给 deepin 修包(入世篇)》进行讲解。
假设说你要打 gperf ,那你可以使用
获得源码包。
创建一个干净的 rootfs
为了防止你打的包被奇怪的依赖项干扰,确保这个包能够在所有的同系统环境下工作,我们需要创建一个干净的 rootfs 并在内部操作打包的其他操作。注意这里所有的修包的改动都应在新建的 rootfs 之外完成,否则文件从 rootfs 移出后所属用户和用户组依然为 root ,会为后续工作带来不便。
以下命令看起来多而复杂,实际上使用的时候中间打分号然后复制粘贴即可。
使用如下的命令可以创建一个 rootfs 并把刚才获得的 gperf 丢到 rootfs 中打包。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
mkdir rootfs ; cd rootfs
# 通过软件源构建 rootfs
sudo mmdebstrap < /etc/apt/sources.list > chroot.tar
sudo tar xvf chroot.tar
# 一些 java 和日志相关的依赖需要这三个根目录的子目录,进行挂载
# 如果你在修包的半路重启了开发板,应当重新挂载这三个目录
sudo mount --bind /dev ./dev
sudo mount --bind /proc ./proc
sudo mount --bind /sys ./sys
# 这个新的 rootfs 没有 bash 高亮之类的我们熟悉的功能,把 dotfile 丢进去
# quiltrc-dpkg 是什么在《入世篇》说...
sudo cp ~/.bashrc ~/.quiltrc-dpkg ./root
# 一股脑把要打包的东西全丢进来
sudo cp -r ../gperf* ./root
# 进入 rootfs
sudo chroot .
|
接下来就在这个新环境中操作……
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# 将 locale 退回 POSIX ,防止 locale 缺失依赖导致的终端输出混乱
# 这个 unset 每次推出并进入 rootfs 都应该运行一次
unset LANG ; unset LANGUAGE
# 由于 apt 默认对 ca-certificates 进行校验而我们的 rootfs 中没有对应的证书,暂时绕过它,安装证书
echo 'Acquire::https::Verify-Peer "false";' > /etc/apt/apt.conf.d/99verify
apt update
apt install -y ca-certificates
rm /etc/apt/apt.conf.d/99verify
# 安装修包需要的基本依赖
apt install debhelper build-essential devscripts quilt pristine-tar lintian
cd gperf-3.1/
# 避免循环依赖设置环境变量,然后安装源码包构建时需要的依赖
export DEB_BUILD_PROFILES=nocheck ; apt build-dep .
# 打包!
dpkg-buildpackage -j8 -us -uc
|
如果最后出现了 complete 之类的字样,恭喜你,打包成功。不过还得检查一下包的质量……
这里的输出信息可能很多,尤其许多软件包本身不是在 RISC-V 设备上进行首次构建的,所以绝大多数关于 architecture 的警告都可以忽略,只要检查诸如不可复现之类的架构无关的错误即可。具体的信息在lintian tags中有介绍。
如果 lintian 的检查通过了,那你的包理论上就应该没什么问题了。
但是这只是一个没什么坑的包,甚至是一个游离于整个 deepin 工作流之外的早已稳定的包,而且 debian 文件夹是什么,循环依赖又是什么,这里都没有解释。这些内容等到《入世篇》再说。
工作完成后就可以释放打包的空间了:
1
2
3
4
5
6
7
8
|
# 退出rootfs
exit
# 取消挂载
sudo umount ./dev ; sudo umount ./proc ; sudo umount ./sys
# 删除 rootfs ,这里不使用 sudo 会由于权限不足无法删除。
sudo rm -rf rootfs
|