首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

從零構建面向 MIPS 架構的 Ubuntu 私有軟件源服務器

     編輯:Java 綜合教學

項目背景

在嵌入式開發(如龍芯/Loongson MIPS 平台)中,官方 Ubuntu 源往往缺乏特定架構的軟件包,或下載速度極慢。搭建一套基於 Reprepro 的私有 APT 源服務器,可實現:

  • 自動管理軟件包池、元數據生成、簽名驗證
  • 支援多發行版、多組件、多架構
  • 配合 dupload 實現本地構建包一鍵上傳入庫

核心工具鏈

工具作用
RepreproDebian/Ubuntu 軟件倉庫管理核心,處理 pool、dists、PGP 簽名
dupload將 .changes/.deb 文件上傳到遠端倉庫服務器
dpkg-scanpackages生成 Packages.gz/bz2 索引(Reprepro 內部調用)
dpkg-deb解包/重打包 .deb,修改 control 信息

服務器端部署步驟

1. 安裝 Reprepro 並初始化倉庫目錄結構

sudo apt-get update && sudo apt-get install reprepro gnupg
mkdir -p /var/www/repo/ubuntu/{conf,incoming,project}
cd /var/www/repo/ubuntu

2. 配置 distributions 文件(關鍵:指定架構為 mipsel)

# /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

3. 生成 GPG 密鑰並導出公鑰供客戶端驗證

gpg --gen-key  # 按提示生成
gpg --armor --export YOUR_KEY_ID > /var/www/repo/ubuntu/public.key

4. 使用 Reprepro 導入現有 .deb 包

# 導入單個包
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

5. 配置 Nginx/Apache 提供 HTTP 服務

# Nginx 示例
server {
    listen 80;
    server_name repo.yourdomain.com;
    root /var/www/repo/ubuntu;
    autoindex on;
    location / {
        allow all;
    }
}

客戶端(開發機/構建機)配置與自動化腳本

1. 添加源並導入公鑰

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

2. 一鍵構建、修改、上傳腳本(整合 dupload + Reprepro)

#!/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 <

常見坑與排查

  • Architecture mismatch:distributions 中 Architectures 必須包含 mipsel,且 .deb 文件控制字段 Architecture: mipsel 一致。
  • GPG 簽名失敗:確保服務器有足夠熵池(rng-tools),或使用 SignWith 指定正確密鑰 ID。
  • dupload 配置:~/.dupload.conf 中定義 $cfg{'repo'} = { fqdn => 'repo.yourdomain.com', method => 'scp', login => 'user', incoming => '/var/www/repo/ubuntu/incoming' };。
  • 客戶端 404:檢查 Nginx root 指向是否為包含 dists/ pool/ 的目錄,URL 路徑與 sources.list 一致。

總結

通過 Reprepro + dupload + Nginx,你可以在幾小時內搭建起一套專業級、可擴展的 MIPS 架構 Ubuntu 私有源。後續只需將構建好的 .deb 扔給自動化腳本,即可實現「一鍵入庫、全網可用」。這對於碎片化嵌入式開發環境尤為高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved