lala.im:解包/打包Cydia内的deb软件包

技術·lala.im · 2019-03-05 · 115 人浏览

原文地址:https://lala.im/5128.html,請支持原作者!該處僅作轉載。

其实如果你稍微懂一点Linux就应该知道deb是Debian系下面最常见的一种格式。而Cydia其实就是把Debian的APT包管理器给移植过去了,所以实际上手机越狱之后通过Cydia安装的各种软件都是通过APT完成的。
我这边建议用Ubuntu16.04桌面版去做这些操作,有图形化操作更方便,其次为什么不去用最新的18.04?18.10?这些新版里面附带的dpkg估计是因为版本太新,打包出来的deb不能在Cydia上正常使用。所以说有时候去盲目追新没什么意义,操作系统是拿来完成工作的,不是拿来玩的。
以下操作均在VMware的Ubuntu16.04内完成。不要把这些东西想的很难,别给自己找包袱背。。。
默认情况下,安装好的Ubuntu16.04只允许普通用户登录到桌面内,所以在桌面内打开终端之后需要设置root密码(打包解包或者是制作deb的时候建议使用root权限):

sudo passwd root

第一遍输入当前用户的密码,然后就是设置你的系统root密码了,接着再:

su

输入你刚才设置的root密码就可以切到root用户下了:

範例
现在我们来尝试解包,首先把需要解包的deb拖到VMware内,然后进入到桌面目录。
这里我以这个com.wxhbts.yayuanxiao_1.2_iphoneos-arm.deb包为例。首先创建一个工作目录:

mkdir -p yayuanxiao/DEBIAN

解出实际需要安装的文件:

dpkg -x com.wxhbts.yayuanxiao_1.2_iphoneos-arm.deb yayuanxiao

解出控制文件:

dpkg -e com.wxhbts.yayuanxiao_1.2_iphoneos-arm.deb yayuanxiao/DEBIAN

这个包就是解完了,很简单对不对其实真正需要用到的命令就2条。当我解出这个包后,进入到yayuanxiao目录内,我目录的结构目前是这样的:

範例
在这个软件包内,System这个目录就是实际需要安装到iPhone手机内的文件。而DEBIAN目录下的文件就是deb包的控制文件。
根据Debian的文档:
https://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.zh-cn.html
我得知在这几个控制文件内,对应的作用如下:
control:
描述软件包的信息文件
preinst:
Debian软件包(.deb)解压前执行的脚本,为正在被升级的包停止相关服务,直到升级或安装完成。(成功后执行postinst脚本)。
postinst:
主要完成软件包(.deb)安装完成后所需的配置工作。通常,postinst脚本要求用户输入,和/或警告用户如果接受默认值,应该记得按要求返回重新配置这个软件,一个软件包安装或升级完成后,postinst脚本驱动命令,启动或重起相应的服务。
prerm:
停止一个软件包的相关进程,要卸载软件包的相关文件前执行。
postrm:
修改相关文件或连接,和/或卸载软件包所创建的文件。
一个deb包的构成,control文件是必须要有的,而preinst/prerm/postinst/postrm则是按需求去添加。
我现在解出来的这个包:com.wxhbts.yayuanxiao_1.2_iphoneos-arm.deb,实际上的功能是给iPhone手机替换字体的,替换字体这种操作在越狱之后其实已经是属于比较危险的操作了,所以这个包制作的很标准,它包含了所有需要用到的控制文件。我们现在可以浏览一下这个包对应的控制文件,去试着理解一下上面说的这些控制文件具体的作用。
首先是control,可以看到它里面包含了这个软件包的各项基本(描述)信息:

Package: com.wxhbts.yayuanxiao
Version: 1.2
Priority: standard
Section: 字体美化
Essential: no
Depends: firmware (>= 10),shell-cmds,dpkg
Architecture: iphoneos-arm
Name: 浪漫雅园小字体
Author: 心雨
Icon: https://apt.wxhbts.com/icon/%E5%AD%97%E4%BD%93%E7%BE%8E%E5%8C%96.png

如图所示:

範例
然后是preinst,里面的脚本就是在给安装前做备份工作,将目前手机内的原字体文件全部备份下来:

範例
可以这么理解,这个备份操作是不是只能在安装前去做,如果字体已经安装好了,还能备份吗?显然不能,已经替换掉原有的系统字体文件了,再去备份也只会是安装后的字体文件,所以这里肯定是只能去用preinst完成,而不是postinst。
在preinst跑完之后,postinst才开始真正的去替换系统的字体文件,并在完成之后提示让用户去注销设备使新的字体生效:

範例
而当用户去卸载这个deb包时,prerm脚本内的命令就是在卸载前还原备份并把备份文件删除:

範例
最后postrm收尾,清理缓存然后提示用户去注销设备使系统字体还原成最初的状态:

範例
一条龙服务,这操作看上去很美对不对?但是你要知道这些命令可都是别人一条条敲上去的,万一哪条错了,或者漏备份了哪个文件,那么恭喜你,你的手机字体就炸了。所以说,没事别用这种方法去安装手机字体,最保险的方法应该是自己去手动备份并替换。。。
还有很重要的是,如果你已经使用deb包安装过字体了,再去用deb包安装其他字体之前一定要先卸载掉之前安装的字体。
接下来我们可以尝试打包,打包也很简单,但需要注意权限问题,一般情况下,安装到手机内的目录以及目录下的文件都应该是777权限,而控制文件则是755,当然你也可以按照Debian的标准(必须>=0555且<=0775),但我建议没什么特殊需求755最保险。例如我现在要把之前的工作目录(yayuanxiao)重新打包成deb软件包,就应该先设置好权限:\n\n\n\nchmod -R 777 System\r\nchmod -R 755 DEBIAN\n接着回到这个目录的上级目录,只需要一条命令即可完成:\ndpkg -b yayuanxiao im.lala.yayuanxiao_1.3_iphoneos-arm.deb\n不出意外这个包就能够正常在Cydia内安装了。\n

chmod -R 777 System
chmod -R 755 DEBIAN

接着回到这个目录的上级目录,只需要一条命令即可完成:

dpkg -b yayuanxiao im.lala.yayuanxiao_1.3_iphoneos-arm.deb

不出意外这个包就能够正常在Cydia内安装了。

技術 lala.im
Theme Jasmine by Kent Liao