zoukankan      html  css  js  c++  java
  • [技术博客] 自制 apt deb Repository

    [技术博客] 自制 apt deb Repository (termux)

    在修改整合遵循GPLv3的Android terminal app and Linux environment:termux时,遇到修改applicationId导致apt无法获取deb包的问题。不是常规的deb仓库制作。

    以下介绍自制的过程

    Part 1. bootstrap.zip

    这是termux首次安装时需要解析安装的必须的包,用于提供基本的linux environment环境,包含apt, bash, curl, dash, dpkg, libc++等。

    使用docker编译软件包

    • 安装docker,详见技术博客-Windows下docker的使用
    • 编译之前,需要修改环境变量 export TERMUX_PREFIX=/data/data/com.bingduoduo/files/usr export TERMUX_ANDROID_HOME=/data/data/com.bingduoduo/files/home 需要注意的是,在docker中使用export命令定义或者定义在/etc/profile中的环境变量只存活在当前活动周期,在容器重启或者关机后环境变量就失效了。所以每次启动docker的时候都要执行上述两条命令。万一哪次忘了,那么就可能造成编译的包不能使用。 有两种解决方法
      • 将环境变量定义在/root/.bashrc中,再次登录依然有效
      • 使用Dockerfile构建镜像,并配置环境变量 我们的环境中因为缺少文件的原因不能使用这个方法,所以采取第二种方法,在Dockerfile的脚本中定义环境变量,这样一来,docker的环境变量在构建容器的时候就会固定下来。具体来说,就是修改termux-packagesscriptsuild ermux_step_setup_variables.sh中的
      : "${TERMUX_PREFIX:="/data/data/com.termux/files/usr"}"
      : "${TERMUX_ANDROID_HOME:="/data/data/com.termux/files/home"}"
      
      改为
      : "${TERMUX_PREFIX:="/data/data/com.bingduoduo/files/usr"}"
      : "${TERMUX_ANDROID_HOME:="/data/data/com.bingduoduo/files/home"}"
      
    • 编译时容易出现的问题 编译时容易出现的主要问题是一个是build-all.sh脚本的顺序不太对,有的时候会出现依赖缺失的情况,这个时候我们可以修改buildstatus.txt中的软件名跳过不重要的软件包 第二个问题是,部分软件包的源代码仓库已经废弃或者由于网络问题无法访问,我们需要及时修改下载地址,使正常编译。 最常使用的备选仓库是https://www.debian.org/distrib/packages,其中有大部分debian上软件包的下载地址。

    编译好bootstrap所需的包之后,生成Package 列表:

    dpkg-scanpackages ./  /dev/null | Packages # ./ 为软件包所在目录
    

    然后使用clone termux 提供的打包脚本: https://github.com/termux/termux-packaging 可以选择使用Rust写的脚本来打包, 也可以使用同样功能的shell脚本,但是二者生成的文件目录结构并不一样,使用shell生成的文件结构和termux官方一样。我们选择使用shell脚本打包:

    • 首先修改硬编码字段:```bash 17 REPO_BASE_URL="https://dl.bintray.com/termux/termux-packages-24" 20 TERMUX_PREFIX="/data/data/com.termux/files/usr" 47 "({REPO_BASE_URL}/dists/stable/main/binary-)/Packages"
      修改为:```bash 17 REPO_BASE_URL="https://github.com/bingduoduo1/public_doc/tree/master/android24packages" #我们选择放在github上
      20 TERMUX_PREFIX="/data/data/com.bingduoduo/files/usr" # 前缀改为com.bingduoduo
      47 	"https://raw.githubusercontent.com/bingduoduo1/public_doc/master/android24packages/Packages" # 这个直接改成Packages的下载路径稍有不妥,但是能work
      
    • 然后开始编译:bash ./generate-bootstraps.sh --architectures aarch64 得到 bootstrap-aarch64.zip,可以选择放在github或者其他地放,我们最后放在本地直接解析速度极快,省去下载步骤,虽然app变得臃肿了。
    • 在termux 源码中的TermuxInstaller 中修改determineZipUrl() 中的URL为: urlhttps://github.com/bingduoduo1/public_doc/raw/master/bootstraps/aarch64/bootstrap-aarch64.zip 启动包的编译配置完成。

    Part 2. apt 源

    在安装完bootstrap包之后,会发现apt-get update不能够使用,查看com.bingduoduo/usr/etc/apt/source.list发现apt 默认的deb源还是termux.net,为了方便用户,我们在编译apt包的时候,将源码中的source.list相关字段修改成了我们自己的apt源。

    那么如何制作自己的apt源呢。

    • 首先像编译bootstrap所需的包一样编译所有能够通过apt-get 得到的包,总数大概800+个包,这次不用打包成gz了。
    • 注意所有需要修改的硬编码的字段都需要确认已修改。
    • 生成Package和Release后直接用nginx部署在服务器上就可以了。部署过程见:https://www.cnblogs.com/bingduoduo/p/10917554.html
    • 之后可以手动修改sources.list: deb http://butubs.cn/dist/stable/main/binary-aarch64 /
      apt-get update 更新source即可。

    bingo!

  • 相关阅读:
    《构建之法》
    《构建之法》第一单元
    查询特殊字符
    Excel文件批量导入SQLSERVER数据库中(利用Foreach容器)
    当月的最后一天SELECT DATEADD(dd,1,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) 20140930 00:00:00.000
    the difference between primary key and unique key
    sql中如何再判断一个字段是否为空,如果不为空然后再Select这个字段,这要如何写呢?
    union和union all的区别
    UIImageView的基本使用
    UINavigationController导航控制器
  • 原文地址:https://www.cnblogs.com/bingduoduo/p/10918759.html
Copyright © 2011-2022 走看看