Debian本地源的搭建方法

一些自己開發或者修改的debian程序,如果想使用apt-get工具進行安裝的話,需要自己搭建debian軟件源,本文簡要介紹一下搭建方法。

  • 目錄結構:
buildd@debian:~/debian-dev$ tree -d -L 4
.
├── dists
│   ├── jessie
│   │   ├── contrib
│   │   │   ├── binary-all
│   │   │   ├── binary-amd64
│   │   │   ├── binary-armel
│   │   │   ├── binary-armhf
│   │   │   └── source
│   │   ├── main
│   │   │   ├── binary-all
│   │   │   ├── binary-amd64
│   │   │   ├── binary-armel
│   │   │   ├── binary-armhf
│   │   │   └── source
│   │   └── non-free
│   │       ├── binary-all
│   │       ├── binary-amd64
│   │       ├── binary-armel
│   │       ├── binary-armhf
│   │       └── source
│   ├── jessie-dev -> jessie/
│   └── stable -> jessie
└── pool
    ├── contrib
    ├── main
    │   ├── a
    │   │   └── audit
    │   └── libs
    │       ├── libselinux
    │       └── libsepol
    └── non-free

31 directories

dists目錄用於存儲repo信息,pool目錄用於存儲軟件代碼和編譯好的deb包。

  • 修改Release配置文件,便於使用工具管理:
buildd@debian:~/debian-dev$ cat apt-release.cnf 
APT::FTPArchive::Release::Codename "jessie-dev";
APT::FTPArchive::Release::Origin "ZWB";
APT::FTPArchive::Release::Components "main contrib non-free";
APT::FTPArchive::Release::Label "Debian ZWB";
APT::FTPArchive::Release::Architectures "amd64 armel armhf";
APT::FTPArchive::Release::Suite "stable";
  • 生成gpg密鑰,用於對Release文件和deb包簽名:
buildd@debian:~/debian-dev$ gpg --gen-key
gpg (GnuPG) 1.4.18; Copyright (C) 2014 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

請選擇您要使用的密鑰種類:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (僅用於簽名)
   (4) RSA (僅用於簽名)
您的選擇? 4
RSA 密鑰長度應在 1024 位與 4096 位之間。
您想要用多大的密鑰尺寸?(2048)2048
您所要求的密鑰尺寸是 2048 位
請設定這把密鑰的有效期限。
         0 = 密鑰永不過期
      <n>  = 密鑰在 n 天后過期
      <n>w = 密鑰在 n 周後過期
      <n>m = 密鑰在 n 月後過期
      <n>y = 密鑰在 n 年後過期
密鑰的有效期限是?(0) 10y
密鑰於 20260322日 星期日 151327秒 CST 過期
以上正確嗎?(y/n)y

您需要一個用戶標識來辨識您的密鑰;本軟件會用真實姓名、註釋和電子郵件地址組合
成用戶標識,如下所示:
    “Heinrich Heine (Der Dichter) <[email protected]>”

真實姓名:your name
電子郵件地址:[email protected]
註釋:comm
您選定了這個用戶標識:
    “your name (comm) <[email protected]>”

更改姓名(N)、註釋(C)、電子郵件地址(E)或確定(O)/退出(Q)?o
您需要一個密碼來保護您的私鑰。

我們需要生成大量的隨機字節。這個時候您可以多做些瑣事(像是敲打鍵盤、移動
鼠標、讀寫硬盤之類的),這會讓隨機數字發生器有更好的機會獲得足夠的熵數。

隨機字節不夠多。請再做一些其他的瑣事,以使操作系統能蒐集到更多的熵!
(還需要190字節)
......+++++
..+++++
gpg: 密鑰 A9A6BBB3 被標記爲絕對信任
公鑰和私鑰已經生成並經簽名。

gpg: 正在檢查信任度數據庫
gpg: 需要 3 份勉強信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性:  2 已簽名:  0 信任度:0-,0q,0n,0m,0f,2u
gpg: 下次信任度數據庫檢查將於 2026-03-22 進行
pub   2048R/A9A6BBB3 2016-03-24 [有效至:2026-03-22]
密鑰指紋 = 5BBC 569F A8D9 F81F 6F11  BC0C E3CF 8397 A9A6 BBB3
uid                  your name (comm) <[email protected]>

請注意這把密鑰還不能用來加密,您必須先用“--edit-key”指令
生成用於加密的子鑰。
#可以使用 gpg --list-keys 進行密鑰對的查詢
#可以使用 gpg --export A9A6BBB3 > Release.gpg 導出公鑰,用於使用者添加信任密鑰
  • 編寫軟件源自動化管理腳本:
buildd@debian:~/debian-dev$ cat auto.sh 
#!/bin/sh

ARCH="amd64 armhf armel"
COMP="contrib main non-free"

for arch in $ARCH
do
        for cc in $COMP 
        do
                dpkg-scanpackages -a $arch pool/$cc > dists/jessie/$cc/binary-$arch/Packages
                gzip -9c dists/jessie/$cc/binary-$arch/Packages > dists/jessie/$cc/binary-$arch/Packages.gz
        done
done

for cc in $COMP
do
        dpkg-scansources pool/$cc > dists/jessie/$cc/source/Sources
        gzip -9c dists/jessie/$cc/source/Sources > dists/jessie/$cc/source/Sources.gz
done

rm -f dists/jessie/Release
rm -f dists/jessie/InRelease
rm -f dists/jessie/Release.gpg
apt-ftparchive -c /home/buildd/debian-dev/apt-release.cnf  release dists/jessie > .Release
mv .Release dists/jessie/Release
gpg --clearsign -o dists/jessie/InRelease dists/jessie/Release
gpg -o dists/jessie/Release.gpg -abs dists/jessie/Release

#以上腳本用於生成Packages文件和Sources文件,並生成.gz壓縮包;
#apt-ftparchive release時用到了上一步的apt-release.cnf配置文件,用於Release文件頭部分信息的生成;
  • 軟件源的使用:
    本地軟件源可以使用file::///形式進行配置,也可使用Apache服務器進行網絡發佈,具體參照/etc/apt/source.list文件進行配置。需要注意的是:使用之初需要添加自己的公鑰爲信任密鑰,可使用apt-key add進行導入。
buildd@debian:~/debian-dev$ cat /etc/apt/sources.list

deb http://192.168.1.2/debian-dev jessie-dev contrib main
deb-src http://192.168.1.2/debian-dev jessie-dev contrib main

deb http://ftp.debian.org/debian jessie contrib main
deb-src http://ftp.debian.org/debian jessie contrib main
  • 其他問題

原件源的優先級問題
如果source.list文件中配置的兩個軟件源有重複軟件,需要使用Pin-Priority進行定義優先級。例如:

buildd@debian:~/debian-dev$ cat /etc/apt/preferences
Package: *
Pin: release n=jessie-dev
Pin-Priority: 600

Package: *
Pin: release n=jessie
Pin-Priority: 500

#本例中軟件源的發行版name設定爲jessie-dev,優先級爲600,官方源優先級定義爲500,所有在使用apt-get的時候如果有重複的軟件會根據優先級進行判別從哪個源進行下載安裝;

#可使用apt-cache policy package_name進行查看軟件現在地址細節

deb包簽名:

dpkg-sig --sign builder file1.deb
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章