1.以软件包形式安装的软件源,如Cydia默认的软件源,Modmyi、BigBoss等,该类软件源是以独立的.list文件记录软件源地址。
2. 由用户在Cydia里输入地址添加的软件源,该类软件源全部保存在cydia.list中。
以上两种形式的软件源本质没有差别,但只软件源的文件存放位置上是有不同的。
以Saurik自己的软件源为例。打开 saurik.list文件, 可以看到有以下内容(以#开头的行属于注释,没有实际用途)
引用debhttp://apt.saurik.com/tangelo-3.7main
那么,软件源的 Release 文件的地址是http://apt.saurik.com/dists/tangelo-3.7/Release
Cydia就是通过或许Release文件进而检测软件源的存在,然后再下载记录软件包相关信息的 Packages文件。
而对于在Cydia中输入软件源地址进行添加的这种源,方法有些不同。因为默认情况下,输入地址以后,Cydia会认为Release文件存放于输入的地址所在的目录下。在list文件中的记录信息为:
引用debhttp://www.xxx.com./
并不会继续往子目录里检测Release文件。
因此,搭建Cydia软件源首先需要配置服务器上相关目录和文件的存放位置。
取决于软件源的添加方式,文件/目录的路径设置可以分为以下两种情况:
1.只公布软件源的地址,让用户手动输入地址来添加。这种方式的文件/目录设置最为简单。
以威锋源为例,威锋源的地址为http://app.weiphone.com/cydia
那么在郁闷app.weiphone.com下,存在目录cydia。目录cydia即使软件源所在的目录。
将文件Release放置在cydia目录下即完成了软件源的搭建。
要注意,搭建软件源,必须保证至少有Release和Packages两个文件。
2. 以软件包的形式安装,即直接在 /etc/apt/source.list.d/目录以文件的形式添加,那么这个就没有什么固定的位置了。
基本上仿照Saurik和BigBoss的list文件的格式即可。
list文件格式:
复制代码
- # do not edit this file to add your own custom sources
- # this file is subject to be upgraded as part of a package
- # either add your own .list file to /etc/apt/sources.list.d
- # or add your entry to the global /etc/apt/sources.list file
- deb 软件源地址 项目名 类型
文件名任意
其中,Release文件应放置于 软件源地址/项目名/这个目录下,Packages文件放置位置由Release文件来决定(详情见后文)。
之前提到过,搭建软件源必须要有Release和Packages两个文件。前者的作用是记录软件源本身的相关信息,而后者的作用则是记录具体软件包的存放位置和安装信息等数据。
以下是Release文件的格式:
引用Origin:BigBoss
Label:BigBoss
Suite:stable
Version:1.0
Codename:BigBoss
Support:http://cydia.saurik.com/support/*
Architectures:darwin-armiphoneos-arm
Components:main
Description:Apps& Themes! We host your apps. Emailme.
MD5Sum:
be8806290d5904cdf45b542706f6a3ad 165020main/binary-darwin-arm/Packages
03026ac993187b0eecae50466f64fb3c35049main/binary-darwin-arm/Packages.gz
93091f5ca485e066d5fc32ca1327830c3031061main/binary-iphoneos-arm/Packages
d7aec18dee5b627339b77a9d91e3f92f368222 main/binary-iphoneos-arm/Packages.bz2
其中红字部分是必填内容,紫色部分是可选内容。
每项的作用:
引用
必须
Origin:软件源名称,可以使用中文(Cydia的软件源列表中显示的标题)
Label:同上,也可以使用中文
Suite:软件源的类型,比如正式源,测试源等,可以分别用stable, beta, unstable等来表示,一般填stable就可以了
Version:版本号,这个其实不重要,随便填,一般都是写1.0
Codename:代码代号,比如BigBoss的就写BigBoss,威锋的就写WeiPhone,也没什么限制,只能用英文
Architectures:结构。iPhone平台统一写iphoneos-arm
Components:main
Description:软件介绍,可以使用中文和html代码,具体能使用哪些代码在下面会介绍。
可选
Support:支持,没什么作用,除非特别需要,否则可以不要这个。
MD5Sum:不是必须的,但如果Packages文件位置不与Release文件在同一目录下,则必须有此项。另外,如果需要签名Release文件,也必须有这个。关于MD5Sum的格式,在下文也会介绍。
Description格式
显示在Cydia中每个软件页面最下方。
不能直接换行,如果要实现显示换行显示,可以使用<br>代码。
要加粗显示,可以使用<strong></strong>代码
可以使用html代码设置字体颜色。
不能使用超链接代码。
代码:Description:WeiPhone-威锋网为您提供iPhone所需软件/补丁。<br><br>联系我们:<strong>weip.com@gmail.com</strong>
实际显示效果如下:
MD5Sum格式
MD5Sum是用来记录Packages即相关文件的文件大小,存放路径和MD5值。
MD5Sum:之后另起一行,开头要空一格(论坛里用quote或code代码之后都不显示开头的空格)
每行格式是:
空格+文件MD5值+空格+文件大小(以字节为单位)+文件路径 (全部没有+)
而文件路径的格式则有文件存放位置来决定。
如果是没有设置Release文件的路径,那么Release和Packages同在根目录,则路径为Packages,直接就是文件名,没有其它路径。
如果在之前设置了Release文件的路径,如Saurik和BigBoss,那么Packages 的路径为main/binary-iphoneos-arm/Packages,起始文件夹,即main,要与Release文件同在一个目录下。main和binary-iphoneos-arm要与Releases中的对应信息相匹配。
对于Packages.gz和Packages.bz2,格式相同,也记得要另起一行。
因此,Packages文件的保存位置就是软件源地址/dists/main/Codename(与Release文件中一致)/main/binary-iphoneos-arm下。
Release文件的示例可以参看以下几个地址:
http://app.weiphone.com/cydia/Release
http://apt.saurik.com/dists/tangelo-3.7/Release
http://apt.bigboss.us.com/repofiles/cydia/dists/stable/Release
以下是生成Packages文件的方法:
Packages文件格式
复制代码
- Package: 3proxy
- Version: 0.5.3k-2
- Architecture: iphoneos-arm
- Maintainer: Jay Freeman (saurik) <>
- Installed-Size: 1208
- Filename: debs/3proxy_0.5.3k-2_iphoneos-arm.deb
- Size: 416318
- MD5sum: f84cb6764a9df30ab326c17f51de15fd
- Section: Networking
- Priority: optional
- Homepage: http://3proxy.ru/download/
- Description: tiny free proxy server
- Name: 3proxy
- Depiction: http://cydia.saurik.com/info/3proxy/
- Tag: purpose::daemon, role::hacker
Packages实质上是deb文件的control信息集合,另外多了deb文件本身的信息。(control文件是记录软件包本身的信息,但没有deb文件本身)
多出的deb文件信息为:
要保证Cydia能正确获取deb的相关数据,除了以上3个deb文件信息以为,还必须保证至少有以下两项:
这里重点关注的是Filename。Filename项决定了在服务器上deb文件的存放位置。如果没有上级目录,即deb文件和Packages文件处于同一目录,那么只需要一个单独的文件名就可以了,不需要加上目录名,即xxxx.deb。但这样在软件数量多的时候会导致管理上的混乱。
假设deb文件存放在debs目录下,那么Filename就应该是 debs/xxx.deb这样的格式。
其余项会在二楼deb制作教程中介绍。
一个软件包的全部信息在Packages文件中是以连续的一段存在,每一行是不同的信息。不同软件之间以空行做分隔。
如何生成Packages文件
方法一:
引用
环境:任何支持dpkg命令的unix系统
工具:dpkg及相关组件。
以上系统中,Fedora不支持dpkg,也无法通过安装系统组件来支持dpkg,因此Fedora系统不能用于生成Packages文件。
而对于Mac OS X系统,本身虽然不支持dpkg,但可以通过安装一个叫 Fink的软件来获得dpkg命令。
Fink 下载页面:http://www.finkproject.org/download/
如何安装请见官网说明。
对于Windows系统,可以通过安装 Cygwin + dpkg来获取dpkg命令。
Cygwin下载地址:http://www.cygwin.com/setup.exe
dpkg命令可以直接在Cygwin中获取。
但个人不推荐在Windows下使用dpkg,因为Cygwin体积很大,与其安装这个,还不如直接安装个Ubuntu来的简单。
各个系统下生成Packages的方法基本一样。
最简单的方法是利用dpkg-scanpackages命令来制作Packages文件。
iPhone OS 不适用(因为没有这个命令)
- 将需要发布的deb文件放在一个目录,比如说debs下
- 命令行里进入到debs目录的上级目录
- 执行命令复制代码
,其中debs为deb存放目录。运行该命令可能需要root权限,可以使用root帐户登录,login root 或 su root或使用sudo
- dpkg-scanpackages debs > Packages
- Packages存放于当前目录
如图所示
如果指定的文件夹不存在,则提示dpkg-scanpackages:error: Binary dir ebs not found
如果在指定的文件夹内没有deb文件,则提示 Wrote 0 entries to output Packagesfile.
注意:Debian/Ubuntu系统下的dpkg-scanpackages命令不会输出Name,Author,Sponsor,Depiction等信息不会自动添加进去,所以需要手动加入这些数据。MacOS X下无此问题。
以dpkg-scanpackages命令来生成Packages文件有一个很大的限制,就是必须保留全部要发布的和已经发布的deb文件,在deb数量多的情况下会浪费大量磁盘空间。
因此可以使用改进命令:复制代码,这样不会每次都重新生成Packages文件,而是将debs目录下的deb信息添加到已有的Packages文件末尾。在新增软件的时候没什么问题,但如果是软件更新,那么就会出现重复条目的问题,这时候需要手动删除旧的软件包信息。
- dpkg-scanpackages debs >>Packages
方法二
引用
上面的方法里也提到过,可以直接编辑Packages文件,因此用文本编辑器将相关数据写入Packages也是可以的,只是这样工作量会比较大,但这种方法没有系统的限制,任何系统下,不管有没有dpkg相关命令都可以使用。格式也是一样的,每项之间只要把Packages放在第一个就可以了,其余项没有顺序要求。
由于绝大部分数据可以从control里直接复制,需要自己获取的就只有Filename,Size和MD5sum。
在Unix系统下,包括Mac OS X和Linux,以及iPhone OS,获取文件大小可以使用命令 ls -l;获取MD5值可以使用命令 md5sum
另外,在Windows下要解包deb文件可以使用7-zip,control 文件位于 control.tar.gz下
方法三 (2010/03/23更新scandebs脚本)
引用
生成Packages和Release文件只是最基础的步骤,实际还需要压缩Packages文件,有时候还需要签名Release文件,为了简化操作,我自己写了一个脚本,具有以下功能:
http://app.weiphone.com/files/scandebs.tar.gz
更新记录 (8/11 v1.3):
1.修正grep命令精确匹配问题
2.若不存在debs目录或debs目录下无deb文件,退出
3.现在可以在Linux和BSD(iPhone和Mac)系统下使用了
4.其它优化
更新记录 (5/13 v1.2):
1.针对mac系统下无md5sum命令的问题,用openssl md5 FILE来获取文件MD5值
2.规范control文件格式(强制将Package项放在第一行)
3.完全自动模式,无需用户在签名Release时输入密码(需自行修改一下脚本,方法见下文)
更新记录 (3/23 v1.1):
1.修正了Release中Packages.gz项的拼写错误
2.增加参数功能,可以显示帮助,版本号,自选是否签名Release
3.每次生成Packages时会按Package标识排序
使用之前需要先修改下脚本(只需修改一次即可)【因为更新过,所以图片所示的行数已不匹配了,但是内容基本还是一样的。】
- 第46行,将wget后的地址改为自己源的Packages的地址
另外,因为iPhoneOS本身没有wget这个命令,可以去Cydia安装一个wget。使用此命令需要联网,否则请事先准备好Packages文件。- 第132,136,140这三行,将Packages,Packages.bz2和Packages.gz根据需要自己修改(如果需要指定这几个文件的存放位置)
- 第151-158行,引号内的内容根据需要自己来修改(此部分用于生成Release文件)
- 第166行,引号内的内容修改为自己的私匙的用户名和密码
- Ubuntu 用户请注意:Ubuntu下的 GPG默认开启了use-agent功能,所以在签名Release的时候会弹出一个提示框,而这个提示框根本就没用,所以要禁用。
- 禁用方法:打开 ~/.gnupg/gpg.conf(~表示当前用户)或者直接用命令复制代码
搜索 use-agent,将其注释掉(即修改为 #use-agent)
- gedit ~/.gnupg/gpg.conf
使用方法:
- 将scandebs文件放置在任意位置
- 准备debs文件夹,需在scandebs同级目录下
- 将要更新的deb文件放置在debs目录下
- 【可选】将Packages文件放置在scandebs同级目录下(如果需要修改Packages文件中的已有数据)
- 以命令sh scandebs + 参数 来执行脚本;或 将文件属性设为0755,命令 chmod 0755scandebs,之后可以直接使用命令 ./scandebs + 参数
- 【可选】如果提示要你输入签名Release文件的密码,输入之
- 得到Packages,Packages.bz2,Packages.gz,Release和Release.gpg【可选】这5或4个文件
显示帮助复制代码
- ./scandebs -h
- 或
- ./scandebs --help
显示版本号复制代码
- ./scandebs -v
- 或
- ./scandebs --version
不签名Release(无参数)复制代码
- ./scandebs
使用签名Release功能复制代码
- ./scandebs -s
- 或
- ./scandebs --sign
手动修改Packages注意事项
引用
前面说过,Packages文件可以手动编辑,有时候仅仅需要更改一些字段的内容,如果因为这个要重新打包deb,不一定合算,因此手动编辑Packages可以省下一些工作量。以下是一些注意事项:
签名Release的方法
引用
- 获取用于签名的GPG密匙(方法见下文)
- 运行命令复制代码
- gpg -abs -r "HuangRui" -o Release.gpg Release
其中引号内的字符串为用于签名的密匙的用户名(用于区分不同的签名密匙)- 输入密码
- 完成
为什么要签名Release
虽然不签名Release文件也没什么大的问题,但是签名Release有以下几个用途:
【可选】deb文件规范命名
引用
命令复制代码
- dpkg-name abc_1.0.deb
如果想指定文件名格式,可以使用复制代码
- dpkg-name --help
来查看命令的使用帮助图形界面的deb制作工具 DebianPackage Maker
网址:http://code.google.com/p/debianpackagemaker/
个人感觉不如直接在命令行里来的直观,有兴趣的朋友可以自己试试。