Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

建立自己的 Debian APT repository
post by tommy @ 14 元月, 2012 12:52

由於 Debian Stable 版本除非非換新的版本才能修正安全性的問題, 否則, 是不會把所使用到的軟體的版本升級的. 這時... 就只能選擇使用 backports, 但是如果要用的東西沒在 backports 裡頭時, 就只能自己抓 Debian pool 裡頭的 source 回來自己重編.

時間一久, 自己重編的東西就越來越多,  當然如果用的機器也多, 每次要把重編好的東西, 先用 ftp copy 到機器上再去用 dpkg 去手動安裝,也就越來越麻煩了. 所以就想自己弄一個 apt 的 repository 來用, 這樣只要放上去後, 其它的機器一樣用 apt-get 或其它 dpkg 的前端程式就能處理了.

原本只是建個目錄, 把檔案丟進去, 然後使用 apt-ftparchive 產生相關的 Packages.gz 就可以用了.

不過... 這樣子處理後, 在目前 Secure APT 的部份, 會有 untrust 的警告, 所以就想辦法加上 sign 的部份, 不過.... 自己用 apt-ftparchive 來產生相關的 Release 再用 gpg 去產生 Release.gpg 之後, 用 apt-get update 時, 老是出錯, 想不出為什麼.... 所以就想找看看有沒有別的工具可以用.... 試了幾種, 最後用的是 reprepro 這軟體最符合我的需求, 用一個簡單的指令就可以做加入的動作, 並且處理後所有 Package 或 Release 的東西, 當然也有做 sign 的動作.

首先, 你要有一個 gpg 的 key (如果有用 ssh key 登入的方式, 那個 key 拿來用就可以), 如果沒有, 可以用

gpg --gen-key

來產生, 如果有現成的 key, 就直接用 gpg --import 匯入就可以. 詳細的 gpg 用法, 可以參考這篇文章 (請在你要執行 reprepro 指令的使用者建立或匯入這個 key).

有了 key 之後, 記得再用 gpg --export 指令把 public key export 出來一個檔案, 給使用這個 repository 的機器去用 apt-key 加入, 這樣那些機器才會 trust 這一個 repository.

接著直接裝上 reprepro 這軟體:

apt-get install reprepro

然後... 我不相把 reprepro 相關的資料與設定和產生的 apt repository 放一起 (之前試過好幾種作法, 似乎都是這樣放), 所以先建立下面的目錄:

mkdir /var/spool/reprepro
mkdir /var/spool/reprepro/conf

然後建立 /var/spool/reprepro/conf/distributions 這個檔案, 內容如下:

Origin: TeaTime
Label: TeaTime
Codename: stable
Architectures: amd64
Components: main
Description: TeaTime
SignWith: yes

上頭 TeaTime 的部份隨你填, Architectures 就看你產生的是那一個平台用的, 我是只用 amd64, 所以就只填 amd64.

然後建立 /var/spool/reprepro/conf/options 這個檔案, 內容如下:

verbose
ask-passphrase
component main
architecture amd64

然後, 使用下面的指令來加入你自行製作的 .deb 檔案:

#!/bin/sh
 
BASEDIR="/var/spool/reprepro"
FTP_HOME="/home/ftp"
DEBIAN_HOME="${FTP_HOME}/my-debian"
DEBIAN_DIST="stable"
 
if [ "x$1" == "x" ]; then
DEB="/usr/src/debian/debs/*.deb"
else
DEB=$*
fi
if [ ! -d "${FTP_HOME}" ]; then
echo "directory not exists: ${FTP_HOME}"
exit
fi
if [ ! -d "${DEBIAN_HOME}" ]; then
mkdir "${DEBIAN_HOME}"
fi
reprepro --basedir "${BASEDIR}" --outdir="${DEBIAN_HOME}" includedeb "${DEBIAN_DIST}" ${DEB}

執行上頭的指令, 參數是你要加入的 .deb 檔案 (可以用萬用字元加入多個檔案) 就可以. 剩下的動作 reprepro 都會處理好.

東西放上去後, 在要使用這個 repository 的機器的 sources.list 加上:

deb ftp://my-debian-server/my-debian/ stable main

然後執行 apt-get update 之後, 就可以安裝這個 repository 的東西了.

Del.icio.us Furl HEMiDEMi Technorati MyShare
迴響
暱稱:
標題:
個人網頁:
電子郵件:
authimage

迴響

  

Bad Behavior 已經阻擋了 60 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS