越狱开发前后端之搭建简单Cydia源
本帖最后由 元始天尊 于 2021-8-6 12:44 编辑## 为什么要搭建Cydia源
  如果你是越狱软件开发者开发了若干软件,并打算推广给人试用,那么最好有自己的源,这样对于客户比较方便。本节教程源码位于<https://gitee.com/lich0/jailbroken_programming_lesson/tree/master/frontend2_cydia>
## 搭建Cydia源
  环境和工具依赖: Mac系统,Theos,Python3,dpkg,gzip,bzip2,xz
  本例中笔者生成了一个最小化Theos工程nopdeb,此工程产生随机deb包,用于测试从源安装deb
  在目录下执行rebuild_source.sh,脚本自动编译deb包,并打包为源。成功后目录下会产生多个文件(Packages,Packages.bz2,Packages.gz,Packages.xz),并启动python的http服务器。
### nopdeb结构
  nopdeb是笔者创建的最小的Theos工程,其目录结构为(是的你没看错,就2个文件):
```
layout/DEBIAN/control 描述待生成deb包的信息,包括作者,文件路径,依赖等
Makefile 用于打包
```
```
./rebuild_source.sh
make: Entering directory '/private/tmp/jailbroken_programming_lesson/frontend2_cydia/nopdeb'
make: Entering directory '/private/tmp/jailbroken_programming_lesson/frontend2_cydia/nopdeb'
dd if=/dev/random of=layout/tmp/test bs=1m count=1
1+0 records in
1+0 records out
1048576 bytes transferred in 0.002648 secs (395970695 bytes/sec)
make: Leaving directory '/private/tmp/jailbroken_programming_lesson/frontend2_cydia/nopdeb'
make: Entering directory '/private/tmp/jailbroken_programming_lesson/frontend2_cydia/nopdeb'
dpkg-deb: 正在 './packages/nop_0.0.1-1+debug_iphoneos-arm.deb' 中构建软件包 'nop'。
make: Leaving directory '/private/tmp/jailbroken_programming_lesson/frontend2_cydia/nopdeb'
make: Leaving directory '/private/tmp/jailbroken_programming_lesson/frontend2_cydia/nopdeb'
dpkg-scanpackages: info: Wrote 1 entries to output Packages file.
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
```
  手机打开cydia->软件源->编辑->添加->http://192.168.0.20(笔者Mac本IP地址),源很快就添加好了,如图所示
![添加源](https://gitee.com/lich0/jailbroken_programming_lesson/raw/master/frontend2_cydia/screenshot/screenshot1.png)
  测试安装nopdeb,安装成功。如图所示
![安装deb](https://gitee.com/lich0/jailbroken_programming_lesson/raw/master/frontend2_cydia/screenshot/screenshot2.png)
![安装deb](https://gitee.com/lich0/jailbroken_programming_lesson/raw/master/frontend2_cydia/screenshot/screenshot3.png)
![安装deb](https://gitee.com/lich0/jailbroken_programming_lesson/raw/master/frontend2_cydia/screenshot/screenshot4.png)
![安装deb](https://gitee.com/lich0/jailbroken_programming_lesson/raw/master/frontend2_cydia/screenshot/screenshot5.png)
  Cydia添加源时大致行为如下
```
发送HEAD请求,检测/Packages.xz是否存在
发送HEAD请求,检测/Packages.gz是否存在
发送HEAD请求,检测/Packages.bz2是否存在
发送HEAD请求,检测/Packages.lzma是否存在
发送HEAD请求,检测/Packages是否存在
如果上述请求成功,则GET请求对应Packages(注1),从Pacakges获取软件列表并缓存
如果上述请求均不成功,则显示失败,源内空空如也
安装软件时,从Pacakges中提取软件的下载地址下载
```
  从过程可以看出Cydia优先读取压缩格式的Packages,某些源的软件比较多时,Packages文件本身会达到十几到几十MB,因此支持压缩文件传输是很必要的
* 注1 这一步请求的特殊点是Cydia使用了路径前缀`/.`,而Sileo是正常的无此前缀。如果你的服务器不能正确处理`/.`前缀,那么添加源将会失败。下面列举一些笔者测试过的服务器
```
nginx 可用Cydia添加源
Python2+SimpleHTTPServer/Python3+http.server 可用Cydia添加源
tornado 可用Cydia添加源
github/github pages 可用Cydia添加源(很多人把github作为免费源了,就是国内访问速度巨卡)
gitee 不可用Cydia添加源,且文件大小限制为1M(所以你们会看到很多人写教程都是github搭建源,没听说过用gitee搭建源的吧,gitee搭建的只能给Sileo用)
七牛对象存储 不可用Cydia添加源
其他的留给读者自己去测了
```
  Tips 源里找不到某软件有以下几种可能
* 手机中已经安装的软件版本高于源中的版本,因此Cydia不显示该软件.
* 手机中其他源的软件版本高于当前源中的版本,因此Cydia不显示该软件.
* 源服务器故障,所有软件均不显示
  
```
// 添加源
192.168.0.221 - - "HEAD /Packages.xz HTTP/1.1" 200 -
192.168.0.221 - - "HEAD /Packages.gz HTTP/1.1" 200 -
192.168.0.221 - - "HEAD /Packages.bz2 HTTP/1.1" 200 -
192.168.0.221 - - code 404, message File not found
192.168.0.221 - - "GET /./InRelease HTTP/1.1" 404 -
192.168.0.221 - - code 404, message File not found
192.168.0.221 - - "GET /./Release HTTP/1.1" 404 -
192.168.0.221 - - "GET /./Packages.xz HTTP/1.1" 304 -
192.168.0.221 - - code 404, message File not found
192.168.0.221 - - "GET /./CydiaIcon.png HTTP/1.1" 404 -
// 安装deb
192.168.0.221 - - code 404, message File not found
192.168.0.221 - - "GET /CydiaIcon.png HTTP/1.1" 404 -
192.168.0.221 - - "GET /deb/nop_0.0.1-1%2bdebug_iphoneos-arm.deb HTTP/1.1" 200 -
```
## 扩展Cydia源
  如果用户较多,并且服务器的流量带宽有限,那么建议对Cydia源进行扩展。步骤如下
* 将deb存放在文件服务器(如网盘)/对象存储(七牛),关键点是可以直接拿到文件的可下载URL
* 服务器配置成对deb/前缀的访问进行301/302跳转到真实下载地址。
页:
[1]