在嵌入式開發(如龍芯/Loongson MIPS 平台)中,官方 Ubuntu 源往往缺乏特定架構的軟件包,或下載速度極慢。搭建一套基於 Reprepro 的私有 APT 源服務器,可實現:
dupload 實現本地構建包一鍵上傳入庫| 工具 | 作用 |
|---|---|
| Reprepro | Debian/Ubuntu 軟件倉庫管理核心,處理 pool、dists、PGP 簽名 |
| dupload | 將 .changes/.deb 文件上傳到遠端倉庫服務器 |
| dpkg-scanpackages | 生成 Packages.gz/bz2 索引(Reprepro 內部調用) |
| dpkg-deb | 解包/重打包 .deb,修改 control 信息 |
sudo apt-get update && sudo apt-get install reprepro gnupg
mkdir -p /var/www/repo/ubuntu/{conf,incoming,project}
cd /var/www/repo/ubuntu
# /var/www/repo/ubuntu/conf/distributions
Origin: YourOrg
Label: Ubuntu MIPS Repository
Suite: stable
Codename: lucid
Version: 10.04
Architectures: mipsel binary source
Components: main restricted universe multiverse
Description: Ubuntu 10.04 packages for Loongson MIPS
SignWith: YOUR_GPG_KEY_ID
# 可再添加 unstable 等 suite
Suite: unstable
Codename: sid
Architectures: mipsel binary source
Components: main restricted universe multiverse
Description: Unstable packages for MIPS
SignWith: YOUR_GPG_KEY_ID
gpg --gen-key # 按提示生成
gpg --armor --export YOUR_KEY_ID > /var/www/repo/ubuntu/public.key
# 導入單個包
reprepro -Vb /var/www/repo/ubuntu includedeb lucid /path/to/package_mipsel.deb
# 批量導入目錄
reprepro -Vb /var/www/repo/ubuntu includedeb lucid /path/to/debs/*.deb
# Nginx 示例
server {
listen 80;
server_name repo.yourdomain.com;
root /var/www/repo/ubuntu;
autoindex on;
location / {
allow all;
}
}
echo "deb https://repo.yourdomain.com/ubuntu lucid main" | sudo tee /etc/apt/sources.list.d/mips-repo.list
wget -qO- https://repo.yourdomain.com/ubuntu/public.key | sudo apt-key add -
sudo apt-get update
#!/bin/bash
# build-and-upload.sh
set -euo pipefail
REPO_DIR="/home/user/Desktop/repository"
DEB_DIR="${REPO_DIR}/deb"
ORIG_DIR="/home/user/Documents/Original_debs"
OUT_DIR="/home/user/Documents/Output_debs"
TMP_DIR="/home/user/Documents/tmp"
mkdir -p "${ORIG_DIR}" "${OUT_DIR}" "${TMP_DIR}/DEBIAN" "${DEB_DIR}"
read -p "輸入 .deb 文件名(含路徑): " FILE
[[ -f "$FILE" ]] || { echo "文件不存在"; exit 1; }
cp "$FILE" "${ORIG_DIR}/"
dpkg-deb -x "$FILE" "${TMP_DIR}/"
dpkg-deb --control "$FILE" "${TMP_DIR}/DEBIAN/"
echo "請編輯 control 文件(按 Enter 繼續)..."
${EDITOR:-gedit} "${TMP_DIR}/DEBIAN/control"
dpkg-deb -b "${TMP_DIR}" "$FILE"
cp "$FILE" "${DEB_DIR}/"
rm -rf "${TMP_DIR}"
# 重建倉庫元數據(本地預覽)
cd "${REPO_DIR}"
dpkg-scanpackages -m . /dev/null | bzip2 -9c > Packages.bz2
dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
# 上傳到遠端服務器(需配置 .dupload.conf 或使用 FTP/SCP)
# 這裡示例用 FTP,生產建議用 SSH + reprepro processincoming
ftp -n repo.yourdomain.com <
distributions 中 Architectures 必須包含 mipsel,且 .deb 文件控制字段 Architecture: mipsel 一致。rng-tools),或使用 SignWith 指定正確密鑰 ID。~/.dupload.conf 中定義 $cfg{'repo'} = { fqdn => 'repo.yourdomain.com', method => 'scp', login => 'user', incoming => '/var/www/repo/ubuntu/incoming' };。dists/ pool/ 的目錄,URL 路徑與 sources.list 一致。通過 Reprepro + dupload + Nginx,你可以在幾小時內搭建起一套專業級、可擴展的 MIPS 架構 Ubuntu 私有源。後續只需將構建好的 .deb 扔給自動化腳本,即可實現「一鍵入庫、全網可用」。這對於碎片化嵌入式開發環境尤為高效。