老设备之家

找回密码
立即注册
搜索
热搜: iOSIPA 美化
发新帖

1238

积分

0

好友

6

主题
发表于 2025-5-12 00:16:19 | 查看: 109| 回复: 2

引用

制作deb文件需要有dpkg-deb命令,Ubuntu/Debian 系统自带此命令,越狱过的 iPhone OS 也有此命令,Mac OS X 下需安装Fink,Windows 下需安装 Cygwin。

Fink 下载页面:http://www.finkproject.org/download/
Cygwin下载地址: http://www.cygwin.com/setup.exe

以上系统中,iPhone OS最适合用来打包deb文件,因为iPhone OS上的用户/组设置与所需要的设置是完全一致的。但因为iPhone/iPod Touch毕竟是手持设备,处理性能比不上电脑,在打包体积较大的deb文件时需要很长时间,有可能会导致失去连接或者SpringBoard崩溃。而且在WinSCP中涉及文本修改的部分,如果文本含有中文的话,编码是个问题(不会保存为UTF-8)。
Ubuntu/Debian 是 deb 文件系统的原生系统,在兼容性和处理性能上最好,但问题在于,Ubuntu/Debian 没有 iPhone OS 上的一些用户和组,最典型的就是wheel、mobile组和mobile用户。
Mac OS X的问题跟 Ubuntu/Debian 差不多,没有mobile用户/组,而且需要装 Fink 才能支持 deb。
Windows的问题最多,Cygwin体积超大不说,使用起来还很麻烦,加上 Windows 的文件系统和 Unix 标准完全不同,且 Windows 下会面临更严重的编码问题,所以不推荐用 Windows 来打包。

不管是哪个系统,打包 deb 的方法是一样的,只是在某些地方对于某些系统需要特别注意。



一个 deb 安装包由两个部分组成,一个是安装控制/识别信息,另外一个就是实际的程序文件。

用7-zip或Linux下的存档管理器打开 deb 文件,其中安装控制/识别信息储存在 control.tar.gz 里面,而 data.tar.xxx 则储存了程序数据。

解包deb文件
引用
有时候不是需要制作一个全新的deb,而是需要修改现有的deb,那么第一步就是解包。假设deb的文件名是abc_1.0.deb

那么解包命令是[url=]复制代码[/url]
  • dpkg-deb -x abc_1.0.deb tmp

[url=]复制代码[/url]
  • dpkg-deb -e abc_1.0.deb tmp/DEBIAN


第一个命令是用于解压出实际数据到tmp目录下,后一个命令是解压出安装控制脚本到tmp/DEBIAN目录下,此处必须是大写的DEBIAN。 169_163635_f1b1871305dcf20.png
可以看到在tmp目录下出现了实际数据和DEBIAN目录。

以dpkg-deb -x 和- e 命令解包deb会保留文件的属性/权限/用户/组等信息。

关于dpkg-deb的命令,可以输入[url=]复制代码[/url]
  • dpkg-deb --help



进入DEBIAN目录,可以看到有一个control文件,无后缀名,这个文件就是用来记录deb的安装信息。有时候还可以看到postinst,preinst,prerm,postrm,extrainst_这些文件,这些文件是deb安装的时候执行的脚本(类似于Windows下的批处理文件)。

另外一种解包deb的方法就是用7-zip或者存档管理器之类的软件直接解包到指定目录,但这样不会保留文件的属性/权限/用户/组等信息,因此除非这些信息不重要,或者这些信息是通过脚本来设置,否则不推荐使用该种方法。如果只是要提取某些文件的话倒是可以用,省事一些。



准备打包deb的目录/文件
引用

如果是解包已有的deb,那么目录已经配置好了。如果是新建一个deb,需要有一个主目录,这里以tmp为例,在tmp目录下新建一个目录,DEBIAN。


完成deb数据配置
引用

将程序文件放在tmp目录下。放置规则是,假如在iPhone OS上一个文件是 /Applications/ABC.app/ABC,那么就在 tmp 目录下依次新建目录Applications,ABC.app,然后把ABC放在ABC.app下。其余文件和目录也是一样的放置。

这里要注意的是文件的属性/权限/用户/组的问题,当然前提是知道文件的属性和权限等信息。

通常来说,可执行文件,比如应用程序的可执行文件,脚本等,属性需设为0755或更高(0775或0777),/var/mobile/下的绝大部分文件/文件夹的用户/组需设为mobile等。

要设置文件/文件夹的权限/属性,使用命令[url=]复制代码[/url]
  • chmod ABCD XXX

这样的格式,ABCD为需要的属性/权限,比如0644,0755等,一般来说,可行性文件需要设为0755(0775和0777大部分情况下是用不上的,有些特殊的需要设为4755等),其它文件默认就是0644(不可执行),XXX是文件名,可以加上路径。

要设置文件/文件夹的用户/组,使用命令[url=]复制代码[/url]
  • chown user:group XXXX

其中user是需要设置的用户,group是组。最常用的是root:wheel和mobile:mobile。 169_163635_9616ed33649c3b2.png
注意:
1. 如果当前用户是非root帐户,如果要将文件的用户/组设为root,需要使用sudo命令来提示权限。
2. 如果要递归设置以上信息,可以使用 -R 参数。比如要将tmp目录下的所有子目录和文件设为0755及root:wheel,可以使用命令[url=]复制代码[/url]
  • chmod -R 0755 tmp
  • chown -R root:wheel tmp


关于文件/文件夹的属性/权限/用户/组的更多说明:
  • 因为deb打包是先将所有的文件/文件夹归档为tar文件之后再压缩,因此文件/文件夹的属性/权限/用户/组这些信息会被保留下来,因此如果直接设置好了以后再打包deb的话就不需要通过postinst之类的控制脚本来设置权限等信息。
  • 如果无法直接设置属性/用户/组等信息,通常需要在postinst脚本里加入设置属性/权限/用户/组的命令
  • 如果deb中的目录是在iPhone OS本身就有的,那么不需要另外设置属性/权限/用户/组等,即使现有的和需要的不一样。因为deb安装不会替换原有文件夹的数据。比如/Applications目录是root:admin,而要打包的deb中该目录是ABCEF,那么不需要修改ABCEF
  • 尤其要注意的是mobile:mobile
  • Ubuntu/Debian上虽然没有wheel组,但是root:root在iPhone上会自动转为root:wheel,所以如果是准备将root:root变为root:wheel,那么可以保留root:root就可以了。
  • 理论上来说,在无安装脚本设置用户/组的前提下,如果不涉及mobile:mobile的用户/组,全部操作都可以直接在Ubuntu/Debian和Mac OS X上完成



114514!Repo Cydia越狱源,获取越狱插件和附加功能的最佳场所。地址apt.senpai114514.icu
发表于 2025-5-12 00:18:39
DEBIAN之control
引用

control记录了软件包标识,软件名,介绍,作者,冲突软件等信息,用来标识一个软件包。在某些软件中,如Icy,是区分大小写的,但在Cydia中是不区分大小写的。

特别注意:
  • control文件必须是UTF-8,Unix编码,Unix/Linux换行符(LF),不符合规范的control会导致Cydia无法打开。
  • 文件末尾需有一个空行。


Package:
软件包标识符,类似于身份证,一个软件包必须要有一个唯一的标识符。通常是用com.xxx.abc这样的形式来命名。

Architecture:
架构,用于标识运行的系统,iPhone上为iphoneos-arm

Version:
版本号,不能用下划线和逗号和空格。格式有(以逗号分隔) 1.0,1.0f,0-1,1:1.0,其中1:1.0这种格式比较特殊,在Cydia中,1:1.0仍然会显示为1.0,但版本号实际是高于1.0的。


以上3项是必须的,缺了任何一项deb打包就不能成功。

以下均为可选项:

Name:
软件包在Cydia中的显示名称,中英文不限,也可以用空格,但不宜过长(长了显示不完全)。 169_163635_588c7b3c13dfb38.png

Author:
软件作者。

Maintainer:
维护者,一般是软件源的拥有者。 169_163635_21d652aafcafd52.jpg

Sponsor:
负责人,可以是个人也可以是网站。

Author,Maintainer,Sponsor 的格式相同,均为 名称+空格+<邮件地址或网址>,经测试,如果名称为中文的话,即使写了邮件地址和网址,在Cydia中点击也不会跳转。
示例: WEIP.Tech <weip.com@gmail,com> 或 WeiPhone.com <http://www.weiphone.com>
如果没有邮件地址或网址,则不需要 <> 及<>中的内容。
中文名或未提供邮件/网址,无 > 符号

Icon:
指定软件包的图标显示。当无Icon设定时,Cydia会显示该软件包所在的分类的图标。
格式:
  • 在线地址,如 http://www.abc.com/abc.png
  • 本地地址:file://+路径,如file:///Applications/Cydia.app/Sources/app.weiphone.com.png
    注:在软件页面(非列表页面),自定义的图标是不会显示的,显示的是分类图标。

    Section:
    软件分类,中英文无限制,排列顺序是 英文->中文。
    169_163635_86722f1e6d6fb52.png
    另外,如果在分类加上[],比如 [工具],那么这个是排在最前面的。

    Installed-Size:
    解包后的文件大小,可以有小数位,以kb为单位,不需要注明kb,这个不需要很精确,而且小数位在Cydia里显示不出来(不是四舍五入,全部舍了)。至于文件大小是否包含DEBIAN目录中的内容就随意了。 169_163635_398f032ae12c4c0.jpg

    Priority:
    优先级,可填 Required,Important,Standard,Optional,Extra,依次为 必须,重要,一般,可选,次要。虽然没有什么实际作用,但优先级为Required和Important的软件包在卸载时会有警告,这样可以避免删除一些系统必须的软件。但Required和Important不要滥用,一般用Standard,Optional或Extra即可。 169_163635_5dddc47f1875719.png
    优先级在Cydia中是不会显示的  

    Essential:
    是否必须软件包,可填 yes 和 no, 填yes则为必须软件包,卸载时Cydia会有警告。卸载Essential标记为yes的软件包可能会导致系统问题。当然此功能需慎用,不要因为不希望用户删除自己的软件而加入Essential: yes。如果没有Essential这项的话默认就是非必须的,相当于Essential: no。 169_163635_3601288d90100ac.png

    Depends:
    Depends 字段应该包含您的软件包正常工作绝对必需的任何软件包的名称。

    Pre-Depends:
    "Pre-Depends"是为特例而保留的。当某个软件包被作为"Pre-Depends"列出时,它强制系统在试图安装您的软件包之前完全安装所指定的软件包。

    Conflicts:
    冲突软件包。比如软件包A和B有冲突,不能同时安装。比如说A和B冲突,当系统已经安装了A的时候尝试安装B,则不能继续。

    Provides:
    提供的软件包,比如说软件包A包含B的全部功能,那么则是A provides B,因此可以在安装了A的前提下不安装B。但此功能在非Cydia的软件管理工具中可能会无法识别(实际是这些软件不合deb标准)

    Replaces:
    替换软件包,安装A会替换B。
    • 以上5项的格式相同,直接填软件包的Package标识即可,如果需要加入版本号,则为 软件表标识+空格+(判断符号 版本号)。
      比如 Depends: apt-key, firmware (>=3.0), 这表示依赖于apt-key,不限版本,firmware,且版本大于或等于3.0。
    • 判断符号:远远低于(<<)、低于(<)、低于或等于(<=)、仅等于(=)、等于或高于(>=)、大于(>)以及远远高于(>>)。
    • 表示多个软件包,以英文逗号分隔。
    • 表示“或”关系,用 | 分隔。比如软件包C依赖于A或B,可写Depends: A | B。 但“或”关系要慎用。原因是,当不存在“或”关系的时候,假设B依赖于A,且系统并未安装A,那么在Cydia中安装B的时候会自动下载安装A。而假如说C依赖于A或B,且A与B都未安装,那么在安装C的时候就会失败,因为系统无法判断是应该下载A还是B。除非系统已经安装了A或B,否则C不能安装。
    • 一个特殊的依赖:firmware。这个Package记录了固件版本,在对固件版本有要求的软件包上特别重要。
    • 假设B依赖于A,那么在卸载A的时候也会一起卸载B


    Description:
    软件描述,不能在control里直接换行,如果需要实现换行显示,可以使用<br>代码。当指定了Depiction时,在软件查看页面不会显示Description。 169_163635_45d02ee16c2099f.jpg

    Depiction:
    功能类似于软件描述,链接到一个网页,以网页的内容代替软件描述。只在软件查看页面显示,在软件包列表页面不显示。
    可以使用本地网页,格式同Icon。
    注意:此功能可能会消耗大量网络流量。

    Homepage:
    链接到页面,Cydia中显示为More Information。
    页面不会主动加载。

    Tag:
    标签,用于分类软件包信息。
    purpose:: 软件包类型,比如软件源,命令行,库等等。purpose::console表示该软件为命令行界面。可选项有 commercial, console, daemon, extension, library, uikit, x,对应图标文件在 /Applications/Cydia.app/Purposes 目录下。也可以自行添加 purpose 分类,并加入同名图标即可。
    role:: 软件包使用者归类。developer开发者,hacker骇客,enduser普通用户,该标签用于Cydia中软件包显示过滤。
    cydia::commercial Cydia Store软件。



发表于 2025-5-12 08:58:19

部分图片生效了,记得清理一下,否则网页打开非常卡顿。
非常好的教程使我旋转 ,金币+300
您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|小黑屋|老设备之家

GMT+8, 2025-5-24 04:53 , Processed in 0.080370 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表