iPhoneiPad安装包的三种格式deb、ipa和pxl的解释和说明
.deb
deb 是 Unix 系统(其实主要是 Linux )下的安装包,基于 tar 包,因此本⾝会记录⽂件的权限(读/写/可执⾏)以及所有者/⽤户组。
由于 Unix 类系统对权限、所有者、组的严格要求,⽽ deb 格式安装包⼜经常会涉及到系统⽐较底层的操作,所以权限等的设置尤其重要。靳东主演的电视剧有哪些
deb 包本⾝有三部分组成:
数据包,包含实际安装的程序数据,⽂件名为 data.tar.XXX;
安装信息及控制脚本包,包含 deb 的安装说明,标识,脚本等,⽂件名为 ;
最后⼀个是 deb ⽂件的⼀些⼆进制数据,包括⽂件头等信息,⼀般看不到,在某些软件中打开可以看到。
deb 本⾝可以使⽤不同的压缩⽅式。tar 格式并不是⼀种压缩格式,⽽是直接把分散的⽂件和⽬录集合在
⼀起,并记录其权限等数据信息。之前提到过的 data.tar.XXX,这⾥ XXX 就是经过压缩后的后缀名。deb 默认使⽤的压缩格式为 gzip 格式,所以最常见的就是 。常有的压缩格式还有 bzip2 和 lzma,其中 lzma 压缩率最⾼,但压缩需要的 CPU 资源和时间都⽐较长。
包含的是实际安装的程序数据,⽽在安装过程中,该包⾥的数据会被直接解压到根⽬录(即 / ),因此在打包之前需要根据⽂件所在位置设置好相应的⽂件/⽬录树。
⽽ 则包含了⼀个 deb 安装的时候所需要的控制信息。⼀般有 5 个⽂件:
control,⽤了记录软件标识,版本号,平台,依赖信息等数据;
preinst,在解包 前运⾏的脚本;
postinst,在解包数据后运⾏的脚本;
prerm,卸载时,在删除⽂件之前运⾏的脚本;
postrm,在删除⽂件之后运⾏的脚本;
在 Cydia 系统中,Cydia 的作者 Saurik 另外添加了⼀个脚本,extrainst_,作⽤与 postinst 类似。
关于 deb 的详细介绍和打包说明,请见此贴1楼:
ipad下载的文件在哪里.ipa
使⽤过 Mac OS 的⼈可能都知道,Mac 下的软件⼤部分都只有⼀个 .app ⽬录,⾥⾯包含了程序全部资源和可执⾏⽂件。简单来说,Mac 下的软件就像是 Windows 下的绿⾊软件⼀样,解压后即可使⽤,不需要安装,卸载的话也只⽤删除程序⽂件即可(这⾥不涉及 pkg 格式安装包)。⽽ ipa 格式可以视为这种 .app 软件的衍⽣物。
ipa ⽂件实质是⼀个 zip 压缩包(不是 rar 或 7z 包),包含 3 个组件:
马智宇个人资料简介payload ⽬录下的 .app ⽬录,这个是软件的主程序;
iTunesArtwork,实质是⼀个⽆后缀名的 png 图⽚,⽤来在 iTunes 中显⽰图标;
iTunesMetadata.plist,记录购买者信息、售价等数据。
由于 zip 包不能记录权限和所有者等信息,所以苹果规定了 ipa 的安装⽅式,即全部 ipa 都会解包安装在 /var/mobile/Applications ⽬录下,全部⽂件和⽬录的所有者及⽤户组均设为 mobile(ID 为 501),主程序(可执⾏⽂件)的权限设为 0755 (所有⼈都可以执⾏,但只有所有者可以修改),可执⾏⽂件在 plist
中定义。全部⽬录权限设为 0755,⽽其它所有⽂件都设为 0644(仅所有者可以修改,其余⼈只允许读取,全部⼈都不允许执⾏)。
ipa 解包后并⾮直接放置于 Applications ⽬录下,⽽是放在⼀串由随机码构成的⽬录下,其作⽤在于,只允许这个软件运⾏在⼀个特定的沙盒(Sandbox)中,不能⼲扰其他软件。因此那串随机码⽬录下,除了 ipa 本⾝的三个组件之外,还有三个⽬录:Library,⼀般是⽤了储存设置⽂件等数据;
Documents,存储数据,多⽤了保存存档;
tmp,临时⽂件夹。
由于这个软件只能在这个特定的⽬录下运⾏(当然了,部分程序会调⽤系统的通讯录、相机等组件,但仍然是受限制的),从⽽保证了整个系统的安全性和稳定性。
由于 Unix 系统下对权限的规定相当严格,所以“越权”的⾏为是绝对不允许的。举个例⼦,mobile ⽤户⽆权删除 root 所有的⽂件,因为 root 的权限⾼于 mobile。所以有些⼈在修改 ipa 安装后的⽂件时,⽐如进⾏或者修改存档,发现不能删除⼲净软件,或不能保存,这是因为删除时不能删除 root 所有的⽂件,程序本⾝也⽆法对 root 所有的存档⽂件进⾏写⼊操作。
.pxl
pxl 格式在1.x时代是 iPhone 平台上唯⼀的安装格式,原因是那时候还没有 Cydia 这样的 APT 管理软件,苹果官⽅也没有推出 App Store。由于在1.x时代积累了⼤量⼈⽓,在接下来的 App Store 时代中,pxl 格式以其相对简易的打包和安装⽅式,仍然占据了很⼤⼀部分市场。但随着 Installer 的停⽌开发,iBrickr 等软件停⽌更新,⽬前唯⼀还在坚持使⽤ pxl 格式的就只剩下91⼀家了。
pxl 安装包通常包含3个组件:
1. PxlPkg.plist 记录程序⽂件的存放位置、所有者、权限以及软件标识等信息;
2. PkgScript⽂件夹,存放安装和卸载脚本;
3. 程序⽂件。
PxlPkg.plist ⽂件的开头通常是 CFBundleIdentifier,记录着软件的唯⼀标识,以和其他软件进⾏区分。RDPxlPackageVersion 则记录软件版本。RDPxlPackageFireware 被⽤来记录可以运⾏的固件版本。其余还有⼀些键值是⽤来记录软件介绍、⽹址、作者信息等数据。
生日快乐 英文
除了软件标识、软件版本和可⽤固件版本以外,PxlPkg.plist 的核⼼部分就是 RDPxlPackageFiles 和 RDPxlPackagePostflight 两项。RDPxlPackageFiles 记录了程序⽂件应该被复制到的路径,并提供了是否覆盖的参数: overwrite。⽽ RDPxlPackagePostflight 则记录程序⽂件应该被赋予的所有者和权限,
分别以 chown 和 chmod 命令来实现。另外,对于含有安装/卸载脚本的 pxl 来说,还会以 sh 命令执⾏相应的脚本 Postflight 和 Preremove。
PkgScript 通常包含两个⽂件,安装后执⾏的脚本 Postflight 和卸载前执⾏的脚本 Preremove,这两个脚本就是标准的 Linux Shell Script,以 sh 命令执⾏。
安装包的特点
.deb
丰富的资源:Cydia 上本⾝就不少,更何况任何格式的安装包都可以转换为 deb。
相对⽅便的在线购买模式:Cydia Store,不过尽管没有 App Store 的5台设备的限制,但对国内⽤户来说,付款⽅式⽐较困难。
破解难度较⼤,没有使⽤ App Store 的验证⽅式,所以必须将验证和防破解措施加⼊程序⾥⾯,这样就⽐较难破解,对软件开发者来说是个好事。
完善的 Unix ⽂件系统⽀持:⽆需以命令设置⽂件的权限、所有者和⽤户组(当然也可以以脚本来设置)
完善的脚本⽀持:5个脚本依照安装和卸载的先后顺序执⾏,可以提供更多选择。⽐如备份还原操作,可以在 preinst 中备份⽂件,⽽在 postrm 中还原⽂件
严格的依赖关系:deb 遵循严格的依赖关系(于 Depends 和 Pre-Depends 指定),可以确保软件运⾏所必需的组件。在线安装的时候会⾃动安装所依赖的软件包。卸载时也很重要,⽐如软件包 A 依赖于 B,当卸载 B 的时候会提⽰ A 依赖于 B,卸载掉 B 的话会导致
A 不能⽤,这样可以确保系统的完整性和稳定性。
Conflicts、Replaces、Provides 等键值的存在可以实现冲突提⽰或替换其它软件包。
完全权限:由于 deb 必须以最⾼权限 root 的⾝份运⾏,deb可以对系统任何位置进⾏操作,换句话说,deb 拥有对整个系统的完全控制,因此 deb 安装包软件可以实现很多 ipa 不能实现的功能。
相对简单的获取⽅式(在线或离线)和安装⽅式,也不⽤担⼼在不同机器上同步会删掉程序的问题。
安装相对简单:其实⽆论是哪种安装包,安装⽅法都不算很复杂,只不过 deb 稍微复杂⼀些。
deb 的安装⽅法⼤体有 5 种:
1. Cydia 或同类 APT 管理软件在线安装,这个是最佳的安装⽅式,因为通常⽆需考虑依赖关系,但缺点是对⽹络的要求⽐较⾼;
2. 命令⾏中以 dpkg -i XXX.deb 的形式安装,好处是可以以通配符⼀次性安装多个 deb,⽽且也可以直接看到脚本的运⾏状况和安装成
功/失败的提⽰信息,缺点是需要命令⾏软件的⽀持,如 Putty/WinSCP的控制台/iSSH/MobileTerminal,很多⼈也不熟悉命令⾏下的操作。另外,安装完后会不显⽰图标;
3. 放置于 AutoInstall ⽬录重启安装。该⽅法实际是 Cydia 提供的⼀个启动脚本,在每次系统启动时以 dpkg 命令安装 AutoInstall ⽬录下
的 deb,好处是不需要命令⾏操作,缺点是必须要重启,有些甚⾄要重启两次,也会出现不显⽰图标的情况;
4. 利⽤ iFile 安装,好处是图形化操作,桌⾯会显⽰图标,缺点是不能⼀次安装多个 deb;
5. ⽤ Cyder II 等软件来安装,其原理是模拟⼀个 APT 软件管理器来下载相应的 deb ⽂件并传到设备,然后以前⾯⼏种⽅式来安装。
总体来说,deb 的安装都是依赖于 dpkg -i 命令来安装,只不过有些是在命令⾏下输⼊命令,有些是提供了图形界⾯。但除了 Cydia 安装⼀种⽅式之外,其余⼏种安装⽅式都存在⼀些共有的问题:
不会⾃⾏搜索依赖关系,必须⼿动提供所依赖的 deb;
Cydia 会读取安装脚本⾥的⼀些特殊语句,⽐如仅在全新安装时执⾏⽽不在升级时执⾏,安装完成后重启 SpringBoard 或设备等等。当然了,deb 软件的卸载也⽐较简单,有两种⽅式:
Cydia ⾥卸载,优点是卸载过程和提⽰信息很详细,全图形界⾯操作,同时也提供了重新安装的选项;
以 dpkg -r Package_ID 命令或 dpkg -P Package_ID 命令来卸载(详情后⾯会说);
Cydelete 来卸载,优点是可以直接在桌⾯上卸载有图标的软件,但对那些没有图标的⽆能为⼒。
其实,不管是安装还是删除,都可以才要全⼿动的⽅法。即,解包 deb 之后,⾃⼰将⽂件放到相应位置,然后设置权限等并执⾏脚本。但这样有必要么?
deb 的安装过程如下:
1. 读取数据库并锁定,避免同时有两个安装程序在运⾏
2. 读取 control 中的 Package(软件包标识)和版本信息,并搜索数据库,若已存在,则卸载之后再安装;
3. 检查 Depends, Pre-Depends, Conflicts 和 Replaces,如果检测到已存在 Conflicts 中存在的软件,则报错并终⽌安装。如未到 Pre-
Depends 指定的软件,则报错并终⽌安装。如到 Replaces 中指定的软件,则卸载之;
4. 将数据写⼊ /var/lib/dpkg/status ⽂件中;
5. 执⾏ preinst 脚本(如果有);
6. 解包 ,将⽂件放置于相应位置,并将⽂件列表写⼊ /var/lib/dpkg/info/XXX.list;
7. 运⾏ postinst 和 extrainst_ 脚本(如果有);
8. 如果之前的安装都没有出错,即安装成功,那么会在 status ⽂件中写⼊ Status: install ok installed 信息,否则会写⼊其它状态数据,
⽐如 Unpacked (未解包数据)、Failed-config(脚本未能成功执⾏)、Half-installed(安装失败等);
9. 重新加载数据库并解除锁定。
deb 的卸载过程如下:
1. 读取数据库并锁定;
2. 根据软件标识搜寻数据库;
3. 检查是否有软件依赖于待卸载的软件,如果有则提⽰,并中断卸载;
4. 执⾏ prerm 脚本(如果有);
5. 读取 /var/lib/dpkg/info/XXX.list ⽂件,并删除 list ⽂件中记录的全部⽂件和⾮空⽂件夹;
6. 运⾏ postrm 脚本;
7. 如果卸载命令是 dpkg -r,则保留 status 中的记录并改为 Status: Not installed;如果卸载命令是 dpkg -P,则删除全部数据;
8. 如果卸载过程没有错误的话,重新读取数据库并解除锁定。
由于 deb 安装的软件可能会在运⾏时在 /var/mobile/Documents 下放置存档⽂件,或在 /var/mobile/Library/Preferences 下放置设置⽂件,⽽这些⽂件并没有记录在 list ⽂件⾥,所以卸载的时候不会被删除。
.ipa
丰富的资源:App Store 上那么多资源,apptrackr 等⽹站也提供了很多破解版。
完善的更新、后期服务。
只能使⽤最⼩权限,保障安全性。
不涉及系统级的操作,所以⼀般不容易造成死机或⽩苹果(有些是因为资源消耗太⼤所以卡死)。
便捷的安装⽅式,⽆论是直接在设备上⽤App Store安装,还是⽤ iTunes 来同步,抑或是⽤ Installous 和 91 这类第三⽅软件来安装,都是很⽅便快速的安装⽅式。
超级简单的卸载⽅式:还有什么⽐只需要点⼀个 X 就能卸载更简单呢?
完全删除,不会留下任何垃圾⽂件(如存档、设置⽂件等)
总体来说破解还是⽐较容易的,但现在越来越多软件加⼊了防破解措施。
之前提到过,ipa 软件是被安装在⼀个类似于沙盒的环境中,除了能对 /var/mobile/Media/DCIM ⽬录(拍照、截图存放⽬录)进⾏操作,或是调⽤壁纸、铃声、相机等组件,不能对系统进⾏任何⼲涉,这样在最⼤程度上保证了系统的稳定运⾏,也不会⼲扰其它软件的正常使⽤。但问题是,由于 ipa 软件的权限很低,想要对系统进⾏修改,尤其是应⽤补丁时,ipa 就⽆能为⼒了。
ipa 软件官⽅的安装⽅式有两种,⼀是在 App Store 这个软件中下载安装,⼆是⽤ iTunes 同步。
前者的问题主要是⽹络问题,⽹速不好很容易安装失败;GPRS之类的上⽹安装⼜很耗流量。后者的问题主要是不能在不同系统下使⽤(包含不同电脑和同⼀部电脑上的不同系统),在其它系统上同步会抹掉原有的软件。当然了,iTunes 每次同步时间⽐较长也是经常被⼈诟病的。尤其是当安装软件⽐较多的时候,每次同步之前的备份需要很长很长时间,这个很恶⼼(不过可以直接 X 掉备份操作)。
由于以上两种⽅式存在⼀些问题,所以很多⼈会选择使⽤ Installous 或 91 来安装 ipa,这也确实是个不错的选择。
连云港景点
Installous ⼀般没什么问题,但对部分验证⽐较严格的 ipa 处理不是很好。虽然 Installous 基本能代替 iTunes,但毕竟不完全等同。最典型的就是 Installous 安装 Microsoft 官⽅出的 Live Messenger (正版,⾮破解版)时不能运⾏。实际上 Installous 对很多未破解的正版软件⽀持不是很好。
⾄于91,经常被⼈批评。91 虽然可以安装 ipa,但除了 Installous 都有的正版软件的⽀持问题外,由于91的安装机制有缺陷,软件不能实现多语⾔,只会使⽤英⽂界⾯,⽽忽略掉 zh_CN.lproj,zh_TW.lproj 这些语⾔包。这对那些⽤希望使⽤版的⼈来说实在是⼀个悲剧。所以通常是要避免使⽤91来安装 ipa 的。
⾄于卸载,三种⽅法:
设备上按住图标直到开始晃动,点击图标左上⾓的 X 即可卸载;
于 iTunes 中取消选中,然后同步
到 /var/mobile/Applications 下的相应⽬录,强⾏删除整个⽂件夹。这个在前⾯两种⽅法⽆法使⽤是可以采⽤(有时候卸载体积太⼤的软件,⽐如超过 1G,因为删除过程太长导致失去响应并删除失败。),但这种⽅法会造成系统的不稳定。除⾮是确实碰到了问题,否则强烈建议不要使⽤。
.pxl
严格来说,pxl 格式的资源并不算多,但也不少。现在使⽤ pxl 格式的绝⼤多数都是91的⽤户。
从时效性上来说,很多软件(主要是 App Store 上的)⼀被⼈破解就马上会被⼈转成 pxl 格式,这样来说,pxl 格式的更新还是不错的。
由于91⼿机助⼿没有 iTunes 同步会抹掉软件的问题,加上其它⼀些⽐较⽅便的功能,使得很多新⼿都是从91开始了解并熟悉
iPhone/iPod Touch 的使⽤。其结果是,pxl 格式依赖于91⽽⽣存。
pxl 格式的流⾏也不是历史的遗物,⽽是符合市场规律的需求。91助⼿的便捷的软件管理⽅式(尤其是⽀持 WiFi 管理),加上免费的旗号,使得 pxl 格式在新⼿中很受欢迎。
实际上,pxl 格式和 deb 格式具有的功能完全⼀样。虽然 pxl 不能记录⽂件的权限等数据,但完全可以⽤脚本来弥补。即是说,pxl 格式和deb 格式其实是不相伯仲的。⽽且因为 pxl 格式的制作并不需要⽐较少见的 Unix 环境,尤其是 Debian 环境,其本⾝是优于 deb 格式的。但为什么现在很多⼈都经常在说不要使⽤ pxl 呢?我个⼈认为,原因主要有以下⼏个:
电脑亮度怎么调资源的局限性:除了91公司⾃⼰开发的⼏个软件之外,其余所有软件都是从 deb 和 ipa 转换⽽来。如果原版软件没破解,pxl ⽆能为⼒(⽐如 Microsoft 官⽅出的 Live Messenger 和 Cydia 上⼀众没被破解的软件);
资源时效性:跟上⾯⼀点相似,pxl 格式⼤部分是从其它格式转换⽽来,跟原版相⽐总是会慢⼀些,尤其是当⽆法破解时,pxl 根本就出不来;
打包⼈⽔平有限:现在很多⼈都是直接⽤91助⼿来打包 pxl。对⼤部分只有⼀个 XXX.app ⽬录的程序来说⼀般不会有问题,但若遇见那些对⽂件权限等数据有严格要求的软件(⽐如可执⾏⽂件没有可执⾏权限,或是 mobile ⽤户不能改写 root 所有的⽂件等等),或是需要⽐较复杂的脚本才能运⾏的软件,往往 pxl 制作者并没有能⼒去制作⼀个完善的 pxl 出来,这样也导致了许多安装使⽤上的问题;
安全性:绝⼤部分⼈在制作 pxl 的时候都习惯⽤ chmod -R 命令来将整个 XXX.app ⽬录及其中的全部⽂件和⼦⽬录设为755/775/777权限,⽽这种⾏为会造成⼀定的安全隐患。关于这些数字的意思请⾃⾏搜索相关资料。这⾥简单说明⼀下。644属性表⽰仅有该⽂件的所有⼈才可以进⾏改写操作,其余任何⼈都只能读取,任何⼈都不能执⾏这个⽂件。755和775是在644的基础上加⼊了可执⾏权限,755是该⽂件所在的⽤户组的所有⼈都可以改写。⽽777权限则标识任何⼈都可以改写并执⾏。由于 mobile 本⾝是受限账户,如果使⽤777权限的话,有机会通过这个漏洞来获取整个系统的控制权。只不过因为 iPhone 系统相对封闭,也不太有机会造成损失。但采⽤775和777权限是不应该的;
ipa 转 pxl 的存档问题:不少⼈都有这样的经历,在游戏 A 存档之后再进游戏 B,存档 B 之后再进 A,发现 A 的存档已经不在了。原因在于,ipa 转换成的 pxl 软件,存档全部是放在 /var/mobile/Documents ⽬录下,⽽正好有两个软件的存档⽂件名相同(最常见的就是 data.sav 或 save.data),互相改写之后导致不能读取。这种问题也发⽣在 ipa 转 deb 上,⽽且⽆法解决;
⽆法完整删除:卸载 pxl 格式时,不会删除存档⽂件、配置⽂件、临时⽂件等数据,长期使⽤会导致可⽤空间减少;
在部分机型上存在兼容问题:有些机器越狱后并没有将系统分区中的 /Applications ⽬录转移到 /var/stash 的⽤户分区中。由于系统分区的可⽤空间很少(默认500MB,通常可⽤空间不超过50MB),强⾏往 /Applications ⾥安装会导致剩余空间消耗殆尽或安装失败。
由此可以看出,pxl 格式的问题更多不是 pxl 本⾝的问题,⽽是打包者的问题以及安装⽅式的缺陷所致。
另外要指出的是,pxl 最⼤的提供者,91,经常是转载他⼈发布的软件(包括⽹友⾃⼰购买破解的,或 Cydia 上直接下载的)然后当作⾃⼰发布的软件,对版权问题完全不在意,这样也引起了很多⼈,尤其是原发布者的反感。这种⾚裸裸的剽窃⾏为实在是令⼈不耻。正因为这样,很多⼈是因为不爽91⽽不爽 pxl,这实在是冤枉 pxl 格式本⾝了。
安装和卸载:
91⼿机助⼿
91百宝箱
总结
⼀般的软件还是尽量⽤ ipa 格式,不要使⽤ ipa 转换成的 deb 或 pxl 格式,这样可以确保兼容性和安全性。⽽在系统级的程序(如SBSettings 和输⼊法),ipa 是绝⽆能⼒的,那么最好的选择还是 deb。pxl 作为快被淘汰的格式,还是果断的放弃⽐较好。
⾄于 ipa 和 deb 的安装⽅式,ipa 的安装⾸选 iTunes 同步和 App Store 在线安装,次选 Installous,以保证最佳兼容性。deb 的安装⾸选Cydia 在线安装,次选除91外的其它任何安装⽅式。
任何情况下都不推荐⽤91来安装 ipa 和 deb,因为91的安装机制并不完善,很容易出问题。