[技術博客] 自制 apt deb Repository

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

在修改整合遵循GPLv3的Android terminal app and Linux environment:termux時,遇到修改applicationId致使apt沒法獲取deb包的問題。不是常規的deb倉庫製做。html

如下介紹自制的過程linux

Part 1. bootstrap.zip

這是termux首次安裝時須要解析安裝的必須的包,用於提供基本的linux environment環境,包含apt, bash, curl, dash, dpkg, libc++等。android

使用docker編譯軟件包nginx

  • 安裝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-packages\scripts\build\termux_step_setup_variables.sh中的
    : "${TERMUX_PREFIX:="/data/data/com.termux/files/usr"}"
    : "${TERMUX_ANDROID_HOME:="/data/data/com.termux/files/home"}"

    改成c++

    : "${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上軟件包的下載地址。git

編譯好bootstrap所需的包以後,生成Package 列表:github

dpkg-scanpackages ./  /dev/null | Packages # ./ 爲軟件包所在目錄

而後使用clone termux 提供的打包腳本:
https://github.com/termux/termux-packaging
能夠選擇使用Rust寫的腳原本打包, 也可使用一樣功能的shell腳本,可是兩者生成的文件目錄結構並不同,使用shell生成的文件結構和termux官方同樣。咱們選擇使用shell腳本打包:docker

  • 首先修改硬編碼字段: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-${architecture}/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源。shell

那麼如何製做本身的apt源呢。bootstrap

  • 首先像編譯bootstrap所需的包同樣編譯全部可以經過apt-get 獲得的包,總數大概800+個包,此次不用打包成gz了。
  • 注意全部須要修改的硬編碼的字段都須要確認已修改。
  • 生成Package和Release後直接用nginx部署在服務器上就能夠了。部署過程見:http://www.javashuo.com/article/p-wsexegqk-bg.html
  • 以後能夠手動修改sources.list: deb http://butubs.cn/dist/stable/main/binary-aarch64 /
    apt-get update 更新source便可。

bingo!

相關文章
相關標籤/搜索