其中 deb 格式是 系统(包含 和 )专属安装包格式,配合 APT 软件管理系统,成为了当前在 Linux 下非常流行的一种安装包。进入 2.x 时代之后有 Cydia 作者 Jay () 移植到 平台上,一起的还有 APT 软件管理系统。
而 ipa 格式则是苹果在 iOS 平台上推出的专属软件安装包,在2.0固件开始才正式使用,是目前 /iPod Touch/iPad 平台上唯一的官方安装包。
而pxl格式则起源于 Mac 系统上的 pkg 安装包,被广泛应用于1.x固件时代,曾经是 平台上唯一的软件安装包,现在仍在被91等软件所使用。
.deb
deb 是 Unix 系统(其实主要是 Linux )下的安装包,基于 tar 包,因此本身会记录文件的权限(读/写/可执行)以及所有者/用户组。
由于 Unix 类系统对权限、所有者、组的严格要求,而 deb 格式安装包又经常会涉及到系统比较底层的操作,所以权限等的设置尤其重要。
deb 包本身有三部分组成:
deb 本身可以使用不同的压缩方式。tar 格式并不是一种压缩格式,而是直接把分散的文件和目录集合在一起,并记录其权限等数据信息。之前提到过的 data.tar.XXX,这里 XXX 就是经过压缩后的后缀名。deb 默认使用的压缩格式为 gzip 格式,所以最常见的就是 data.tar.gz。常有的压缩格式还有 bzip2 和 lzma,其中 lzma 压缩率最高,但压缩需要的 CPU 资源和时间都比较长。
data.tar.gz包含的是实际安装的程序数据,而在安装过程中,该包里的数据会被直接解压到根目录(即 / ),因此在打包之前需要根据文件所在位置设置好相应的文件/目录树。
而 .tar.gz 则包含了一个 deb 安装的时候所需要的控制信息。一般有 5 个文件:
关于 deb 的详细介绍和打包说明,请见此贴1楼:
.ipa
使用过 Mac OS 的人可能都知道,Mac 下的软件大部分都只有一个 .app 目录,里面包含了程序全部资源和可执行文件。简单来说,Mac 下的软件就像是 下的绿色软件一样,解压后即可使用,不需要安装,卸载的话也只用删除程序文件即可(这里不涉及 pkg 格式安装包)。而 ipa 格式可以视为这种 .app 软件的衍生物。
ipa 文件实质是一个 zip 压缩包(不是 rar 或 7z 包),包含 3 个组件:
由于 zip 包不能记录权限和所有者等信息,所以苹果规定了 ipa 的安装方式,即全部 ipa 都会解包安装在 /var// 目录下,全部文件和目录的所有者及用户组均设为 (ID 为 501),主程序(可执行文件)的权限设为 0755 (所有人都可以执行,但只有所有者可以修改),可执行文件在 plist 中定义。全部目录权限设为 0755,而其它所有文件都设为 0644(仅所有者可以修改,其余人只允许读取,全部人都不允许执行)。
ipa 解包后并非直接放置于 目录下,而是放在一串由随机码构成的目录下,其作用在于,只允许这个软件运行在一个特定的沙盒()中,不能干扰其他软件。因此那串随机码目录下,除了 ipa 本身的三个组件之外,还有三个目录:
由于这个软件只能在这个特定的目录下运行(当然了,部分程序会调用系统的通讯录、相机等组件,但仍然是受限制的),从而保证了整个系统的安全性和稳定性。
由于 Unix 系统下对权限的规定相当严格,所以“越权”的行为是绝对不允许的。举个例子, 用户无权删除 root 所有的文件,因为 root 的权限高于 。所以有些人在修改 ipa 安装后的文件时,比如进行汉化或者修改存档,发现不能删除干净软件,或不能保存,这是因为删除时不能删除 root 所有的文件,程序本身也无法对 root 所有的存档文件进行写入操作。
.pxl
pxl 格式在1.x时代是 平台上唯一的安装格式,原因是那时候还没有 Cydia 这样的 APT 管理软件,苹果官方也没有推出 App Store。由于在1.x时代积累了大量人气,在接下来的 App Store 时代中,pxl 格式以其相对简易的打包和安装方式,仍然占据了很大一部分市场。但随着 的停止开发, 等软件停止更新,目前唯一还在坚持使用 pxl 格式的就只剩下91一家了。
pxl 安装包通常包含3个组件:
.plist 记录程序文件的存放位置、所有者、权限以及软件标识等信息;文 件夹,存放安装和卸载脚本;程序文件。
.plist 文件的开头通常是 ,记录着软件的唯一标识,以和其他软件进行区分。 则记录软件版本。 被用来记录可以运行的固件版本。其余还有一些键值是用来记录软件介绍、网址、作者信息等数据。
除了软件标识、软件版本和可用固件版本以外,.plist 的核心部分就是 和 ht 两项。 记录了程序文件应该被复制到的路径,并提供了是否覆盖的参数: 。而 ht 则记录程序文件应该被赋予的所有者和权限,分别以 chown 和 chmod 命令来实现。另外,对于含有安装/卸载脚本的 pxl 来说,还会以 sh 命令执行相应的脚本 和 。
通常包含两个文件,安装后执行的脚本 和卸载前执行的脚本 ,这两个脚本就是标准的 Linux Shell ,以 sh 命令执行。
安装包的特点
.deb
deb 的安装方法大体有 5 种:
Cydia 或同类 APT 管理软件在线安装,这个是最佳的安装方式,因为通常无需考虑依赖关系,但缺点是对网络的要求比较高;命令行中以 dpkg -i XXX.deb 的形式安装,好处是可以以通配符一次性安装多个 deb,而且也可以直接看到脚本的运行状况和安装成功/失败的提示信息,缺点是需要命令行软件的支持,如 Putty/的控制台/iSSH/,很多人也不熟悉命令行下的操作。另外,安装完后会不显示图标;放置于 目录重启安装。该方法实际是 Cydia 提供的一个启动脚本,在每次系统启动时以 dpkg 命令安装 目录下的 deb,好处是不需要命令行操作,缺点是必须要重启,有些甚至要重启两次,也会出现不显示图标的情况;利用 iFile 安装,好处是图形化操作,桌面会显示图标,缺点是不能一次安装多个 deb;用 Cyder II 等软件来安装,其原理是模拟一个 APT 软件管理器来下载相应的 deb 文件并传到设备,然后以前面几种方式来安装。
总体来说,deb 的安装都是依赖于 dpkg -i 命令来安装,只不过有些是在命令行下输入命令,有些是提供了图形界面。但除了 Cydia 安装一种方式之外,其余几种安装方式都存在一些共有的问题:
当然了,deb 软件的卸载也比较简单,有两种方式:
其实,不管是安装还是删除,都可以才要全手动的方法。即,解包 deb 之后,自己将文件放到相应位置,然后设置权限等并执行脚本。但这样有必要么?
deb 的安装过程如下:
读取数据库并锁定,避免同时有两个安装程序在运行读取 中的 (软件包标识)和版本信息,并搜索数据库,若已存在,则卸载之后再安装;检查 , Pre-, 和 ,如果检测到已存在 中存在的软件,则报错并终止安装。如未找到 Pre- 指定的软件,则报错并终止安装。如找到 中指定的软件,则卸载之;将数据写入 /var/lib/dpkg/ 文件中;执行 脚本(如果有);解包 data.tar.gz,将文件放置于相应位置,并将文件列表写入 /var/lib/dpkg/info/XXX.list;运行 和 脚本(如果有);如果之前的安装都没有出错,即安装成功,那么会在 文件中写入 : ok 信息,否则会写入其它状态数据,比如 (未解包数据)、-(脚本未能成功执行)、Half-(安装失败等);重新加载数据库并解除锁定。
deb 的卸载过程如下:
读取数据库并锁定;根据软件标识搜寻数据库;检查是否有软件依赖于待卸载的软件,如果有则提示,并中断卸载;执行 prerm 脚本(如果有);读取 /var/lib/dpkg/info/XXX.list 文件,并删除 list 文件中记录的全部文件和非空文件夹;运行 脚本;如果卸载命令是 dpkg -r,则保留 中的记录并改为 : Not ;如果卸载命令是 dpkg -P,则删除全部数据;如果卸载过程没有错误的话,重新读取数据库并解除锁定。
由于 deb 安装的软件可能会在运行时在 /var// 下放置存档文件,或在 /var/// 下放置设置文件,而这些文件并没有记录在 list 文件里,所以卸载的时候不会被删除。
.ipa
之前提到过,ipa 软件是被安装在一个类似于沙盒的环境中,除了能对 /var//Media/DCIM 目录(拍照、截图存放目录)进行操作,或是调用壁纸、铃声、相机等组件,不能对系统进行任何干涉,这样在最大程度上保证了系统的稳定运行,也不会干扰其它软件的正常使用。但问题是,由于 ipa 软件的权限很低,想要对系统进行修改,尤其是应用补丁时,ipa 就无能为力了。
ipa 软件官方的安装方式有两种,一是在 App Store 这个软件中下载安装,二是用 同步。
前者的问题主要是网络问题,网速不好很容易安装失败;GPRS之类的上网安装又很耗流量。后者的问题主要是不能在不同系统下使用(包含不同电脑和同一部电脑上的不同系统),在其它系统上同步会抹掉原有的软件。当然了, 每次同步时间比较长也是经常被人诟病的。尤其是当安装软件比较多的时候,每次同步之前的备份需要很长很长时间,这个很恶心(不过可以直接 X 掉备份操作)。
由于以上两种方式存在一些问题,所以很多人会选择使用 或 91 来安装 ipa,这也确实是个不错的选择。
一般没什么问题,但对部分验证比较严格的 ipa 处理不是很好。虽然 基本能代替 ,但毕竟不完全等同。最典型的就是 安装 官方出的 Live (正版,非破解版)时不能运行。实际上 对很多未破解的正版软件支持不是很好。
至于91,经常被人批评。91 虽然可以安装 ipa,但除了 都有的正版软件的支持问题外,由于91的安装机制有缺陷,软件不能实现多语言,只会使用英文界面,而忽略掉 zh_CN.lproj,zh_TW.lproj 这些语言包。这对那些用希望使用汉化版的人来说实在是一个悲剧。所以通常是要避免使用91来安装 ipa 的。
至于卸载,三种方法:
.pxl
实际上,pxl 格式和 deb 格式具有的功能完全一样。虽然 pxl 不能记录文件的权限等数据,但完全可以用脚本来弥补。即是说,pxl 格式和 deb 格式其实是不相伯仲的。而且因为 pxl 格式的制作并不需要比较少见的 Unix 环境,尤其是 环境,其本身是优于 deb 格式的。
但为什么现在很多人都经常在说不要使用 pxl 呢?我个人认为,原因主要有以下几个:
由此可以看出,pxl 格式的问题更多不是 pxl 本身的问题,而是打包者的问题以及安装方式的缺陷所致。
另外要指出的是,pxl 最大的提供者,91,经常是转载他人发布的软件(包括 网友自己购买破解的,或 Cydia 上直接下载的)然后当作自己发布的软件,对版权问题完全不在意,这样也引起了很多人,尤其是原发布者的反感。这种赤裸裸的剽窃行为实在是令人不耻。正因为这样,很多人是因为不爽91而不爽 pxl,这实在是冤枉 pxl 格式本身了。
安装和卸载:
pxl 转 ipa
pxl 转 deb
pxl 格式曾经是1.x时代唯一的安装包格式,给我们留下了太多的回忆,对于 pxl 的贡献,我们还是应该缅怀和尊敬的。但随着时代的发展,pxl 已经老态尽显,就如同 的退出一样,pxl 最终会退出市场而被供奉在殿堂之内。
总结
一般的软件还是尽量用 ipa 格式,不要使用 ipa 转换成的 deb 或 pxl 格式,这样可以确保兼容性和安全性。而在系统级的程序(如 和输入法),ipa 是绝无能力的,那么最好的选择还是 deb。pxl 作为快被淘汰的格式,还是果断的放弃比较好。
至于 ipa 和 deb 的安装方式,ipa 的安装首选 同步和 App Store 在线安装,次选 ,以保证最佳兼容性。deb 的安装首选 Cydia 在线安装,次选除91外的其它任何安装方式。
任何情况下都不推荐用91来安装 ipa 和 deb,因为91的安装机制并不完善,很容易出问题。