From 663ae79661be58b2cec9b9840cc76ae4922a5f34 Mon Sep 17 00:00:00 2001 From: wcbing Date: Sat, 30 Nov 2024 01:15:52 +0800 Subject: [PATCH] refactor: change repo path, add arm64 repo --- deb/add.sh | 3 +-- deb/del.sh | 4 ++-- init_deb.py | 24 +++++++++++++----------- merge-apt-repo.py | 42 ++++++++++++++++++++++++++++++++---------- run.sh | 19 ++++++++++--------- 5 files changed, 58 insertions(+), 34 deletions(-) diff --git a/deb/add.sh b/deb/add.sh index d3183bc..094da52 100644 --- a/deb/add.sh +++ b/deb/add.sh @@ -1,4 +1,3 @@ -curl -fsSLo /etc/apt/keyrings/wcbing.gpg https://packages.wcbing.top/wcbing.gpg -echo "deb [signed-by=/etc/apt/keyrings/wcbing.gpg] https://packages.wcbing.top/deb /" > \ +echo "deb [trusted=yes] https://packages.wcbing.top/deb/$(dpkg --print-architecture) /" > \ /etc/apt/sources.list.d/wcbing.list apt update diff --git a/deb/del.sh b/deb/del.sh index 1c6223a..c85c2eb 100644 --- a/deb/del.sh +++ b/deb/del.sh @@ -1,3 +1,3 @@ -rm /etc/apt/keyrings/wcbing.gpg -rm /etc/apt/sources.list.d/wcbing.list +rm -f /etc/apt/keyrings/wcbing.gpg +rm -f /etc/apt/sources.list.d/wcbing.list apt update diff --git a/init_deb.py b/init_deb.py index a19bed6..4731cd7 100755 --- a/init_deb.py +++ b/init_deb.py @@ -4,8 +4,10 @@ import os import sqlite3 # create dir -if not os.path.exists("deb"): - os.mkdir("deb") +if not os.path.exists("deb/amd64"): + os.makedirs("deb/amd64") +if not os.path.exists("deb/arm64"): + os.makedirs("deb/arm64") # create table conn = sqlite3.connect("deb.db") @@ -18,15 +20,15 @@ conn.execute( ); """ ) -# conn.execute( -# """ -# CREATE TABLE IF NOT EXISTS arm64 ( -# name TEXT UNIQUE, -# version TEXT, -# url TEXT -# ); -# """ -# ) +conn.execute( + """ + CREATE TABLE IF NOT EXISTS arm64 ( + name TEXT UNIQUE, + version TEXT, + url TEXT + ); + """ +) conn.commit() conn.close() diff --git a/merge-apt-repo.py b/merge-apt-repo.py index f286ac9..bc9b42b 100755 --- a/merge-apt-repo.py +++ b/merge-apt-repo.py @@ -86,15 +86,19 @@ def get_latest(deb_packages): def process_repo(r): try: deb_packages = b"" - if r.get("amd64_path"): - # 获取 Repo 中 Amd64 包信息 - deb_packages += get_remote_packages(r["repo"], r["amd64_path"]) - if r.get("arm64_path"): - # 获取 Repo 中 Arm64 包信息 - deb_packages += get_remote_packages(r["repo"], r["arm64_path"]) if r.get("mix_path"): # 获取扁平 Repo 中包信息 deb_packages += get_remote_packages(r["repo"], r["mix_path"]) + else: + if r.get("amd64_path"): + # 获取 Repo 中 Amd64 包信息 + deb_packages += get_remote_packages(r["repo"], r["amd64_path"]) + if r.get("arm64_path"): + # 获取 Repo 中 Arm64 包信息 + deb_packages += get_remote_packages(r["repo"], r["arm64_path"]) + if r.get("all_path"): + # 获取 Repo 中 All 包信息 + deb_packages += get_remote_packages(r["repo"], r["all_path"]) get_latest(deb_packages) except Exception as e: logging.error(f"Error processing repo {r.get('name', 'unknown')}: {e}") @@ -111,11 +115,18 @@ def parse_arguments(): default="data/repo_list.json", help="Path to the repository list file. Default is 'data/repo_list.json'.", ) + parser.add_argument("--local", type=str, help="Process Packages in local repo") return parser.parse_args() if __name__ == "__main__": args = parse_arguments() + + # 处理本地 repo + if args.local: + with open(args.local) as f: + get_latest(f.read().encode()) + repo_list = args.repo repo_list = read_repo_list(repo_list) if not repo_list: @@ -124,7 +135,18 @@ if __name__ == "__main__": with ThreadPoolExecutor(max_workers=10) as executor: executor.map(process_repo, repo_list) - # 有需要可以分别输出到不同文件 - for list in package_info.values(): - for i in list.values(): - print(i.decode(), end="") + # 分别输出到不同文件 + with open("deb/amd64/Packages", "+wb") as f: + for i in package_info["amd64"].values(): + f.write(i) + for i in package_info["i386"].values(): + f.write(i) + for i in package_info["all"].values(): + f.write(i) + f.close + with open("deb/arm64/Packages", "+wb") as f: + for i in package_info["arm64"].values(): + f.write(i) + for i in package_info["all"].values(): + f.write(i) + f.close diff --git a/run.sh b/run.sh index 1ae4b1e..9862c12 100755 --- a/run.sh +++ b/run.sh @@ -1,21 +1,22 @@ #!/bin/sh date -# merge the Packages files of third-party repositories -./merge-apt-repo.py > deb/Packages # check for updates $HOME/go/bin/github-downloader -r -o deb find get -maxdepth 1 -type f -name "*.sh" -exec sh {} \; - -# generate the files cd deb -apt-ftparchive packages . >> Packages +# generate the local Packages +apt-ftparchive packages . > tempPackages +cd .. + +sed -i "s/\.\//\.\.\//g" deb/tmpPackages +# merge the Packages files of third-party repositories +./merge-apt-repo.py --local deb/tmpPackages -# list brief information about packages -cat Packages | grep "Package\|Version\|Architecture\|^\$" > version.txt # generate the Release file +cd deb/amd64 +apt-ftparchive release . > Release +cd ../arm64 apt-ftparchive release . > Release -gpg --yes --armor --detach-sign --sign -o Release.gpg Release -gpg --yes --clearsign -o InRelease Release echo done \ No newline at end of file