Reprepro是一款小巧的命令行工具來方便地創建並管理.deb倉庫。今天我們會展示給你如何使用reprepro簡單地創建一個Debian包倉庫,並使用rsync上傳到Sourceforge.net。
Ubuntu下deb包的安裝方法 http://www.linuxidc.com/Linux/2014-03/99037.htm
步驟 1: 安裝Reprepro並生成key
首先,安裝所有需要的包,使用下面的apt-get命令。
- $ sudo apt-get install reprepro gnupg
現在你需要使用gnupg生成一個gpg key,這裡使用下面的命令。
- $ gpg --gen-key
它會詢問你一些問題,比如你想要哪種key、key的有效期、如果你不知道如何回答,只需點擊回車 來選擇默認選項(建議)
當然,它會詢問你用戶名和密碼,在腦海中記住這些,因為我們會在之後需要它。
- gpg (GnuPG)1.4.14;Copyright(C)2013FreeSoftwareFoundation,Inc.
- Thisis free software: you are free to change and redistribute it.
- Thereis NO WARRANTY, to the extent permitted by law.
- Pleaseselect what kind of key you want:
- (1) RSA and RSA (default)
- (2) DSA andElgamal
- (3) DSA (sign only)
- (4) RSA (sign only)
- Your selection?
- RSA keys may be between 1024and4096 bits long.
- What keysize do you want?(2048)
- Requested keysize is2048 bits
- Please specify how long the key should be valid.
- 0= key does not expire
- = key expires in n days
- w = key expires in n weeks
- m = key expires in n months
- y = key expires in n years
- Keyis valid for?(0)
- Key does not expire at all
- Isthis correct?(y/N) Y
- You need a user ID to identify your key; the software constructs the user ID
- from the RealName,CommentandEmailAddressinthis form:
- "Heinrich Heine (Der Dichter) <[email protected]>"
- Real name: ravisaive
- Email address: [email protected]
- Comment: tecmint
- You selected this USER-ID:
- "Ravi Saive (tecmint) <[email protected]>"
- Change(N)ame,(C)omment,(E)mail or(O)kay/(Q)uit? O
- You need a Passphrase to protect your secret key.
- We need to generate a lot of random bytes.Itis a good idea to perform
- some other action (type on the keyboard, move the mouse, utilize the
- disks) during the prime generation;this gives the random number
- generator a better chance to gain enough entropy.
- +++++
- gpg: key 2EB446DD marked as ultimately trusted
- publicand secret key created andsigned.
- gpg: checking the trustdb
- gpg:3 marginal(s) needed,1 complete(s) needed, PGP trust model
- gpg: depth:0 valid:1signed:0 trust:0-,0q,0n,0m,0f,1u
- pub 2048R/2EB446DD2014-06-24
- Key fingerprint = D222 B1C9 342E591102B191473BD679182EB446DD
- uid RaviSaive(tecmint)<[email protected]>
- sub2048R/7EF2F7502014-06-24
現在你的key已經生成了,要檢查一下,用root權限運行這條命令。
- $ sudo gpg --list-keys
示例輸出
- /home/ravisaive/.gnupg/pubring.gpg
- ----------------------------------
- pub 2048R/2EB446DD2014-06-24
- uid ravisaive (tecmint)<[email protected]>
- sub2048R/7EF2F7502014-06-24
步驟 2: 創建一個包倉庫並導出key
我們現在要開始創建倉庫,首先你需要創建一些文件夾,我們的倉庫會放在/var/www/apt目錄,讓我們先創建這些目錄。
- $ sudo su
- # cd /var/www
- # mkdir apt
- # mkdir -p ./apt/incoming
- # mkdir -p ./apt/conf
- # mkdir -p ./apt/key
你現在需要將key導出到倉庫文件夾,運行:
- # gpg --armor --export username [email protected] >> /var/www/apt/key/deb.gpg.key
注意:用你之前步驟中輸入的用戶名代替username,用你的email代替上面的[email protected]。
我們需要在/var/www/apt/conf創建一個文件“distributions”。
- # touch /var/www/apt/conf/distributions
加入下面這幾行到distributions這個文件中並保存。
- Origin:(你的名字)
- Label:(庫的名字)
- Suite:(stable 或 unstable)
- Codename:(發布的代碼名,比如 trusty)
- Version:(發布的版本,比如14.04)
- Architectures:(軟件包所支持的架構,比如 i386 或 amd64)
- Components:(包含的部件,比如 main restricted universe multiverse)
- Description:(描述)
- SignWith: yes
接下來我們會創建倉庫樹,運行這些命令:
- # reprepro --ask-passphrase -Vb /var/www/apt export
示例輸出
- Created directory "/var/www/apt/db"
- ExportingTrusty...
- Created directory "/var/www/apt/dists"
- Created directory "/var/www/apt/dists/Trusty"
- Created directory "/var/www/apt/dists/Trusty/universe"
- Created directory "/var/www/apt/dists/Trusty/universe/binary-i386"
- FF5097B479C8220C ravisaive (tecmint)<[email protected]> needs a passphrase
- Please enter passphrase:
- Successfully created '/var/www/apt/dists/Trusty/Release.gpg.new'
- FF5097B479C8220C ravisaive (tecmint)<[email protected]> needs a passphrase
- Please enter passphrase:
- Successfully created '/var/www/apt/dists/Trusty/InRelease.new'
步驟 3: 在新創建的倉庫中加入包
現在准備你的.deb包來加入到倉庫中。進入 /var/www/apt目錄,你每次要加包的時候都必須這麼做。
- # cd /var/www/apt
- # reprepro --ask-passphrase -Vb . includedeb Trusty /home/ravisaive/packages.deb
注意:用你在distributions文件中輸入的倉庫代號來代替trusty ,並且用包的路徑替換/home/username/package.deb,你會被要求輸入密碼。
示例輸出
- /home/ravisaive/packages.deb : component guessed as'universe'
- Created directory "./pool"
- Created directory "./pool/universe"
- Created directory "./pool/universe/o"
- Created directory "./pool/universe/o/ojuba-personal-lock"
- Exporting indices...
- FF5097B479C8220C ravisaive (tecmint)<[email protected]> needs a passphrase
- Please enter passphrase:
- Successfully created './dists/Trusty/Release.gpg.new'
- FF5097B479C8220C ravisaive (tecmint)<[email protected]> needs a passphrase
- Please enter passphrase:
- Successfully created './dists/Trusty/InRelease.new'
你的包已經加入了倉庫,如果要移除它的話采用如下命令:
- # reprepro --ask-passphrase -Vb /var/www/apt remove trusty package.deb
當然你需要用你的包名與倉庫代號來修改命令。
步驟 4: 上傳倉庫到Sourceforge.net
要上傳倉庫到Sourceforge.net,你當然需要一個可用的賬號與一個可用的項目,讓我假設你想要上傳倉庫到http://sourceforge.net/projects/myfoo/testrepository,這裡的myfoo是項目名(UNIX上的名稱,不是URL,不是標題),testrepository是你想要上傳文件到這上面的目錄,這裡我們會使用rsync 命令。(LCTT譯注:當然你也可以上傳到其它的支持Http/Rsync的服務器上,以提供遠程軟件庫的服務。)
- # rsync -avP -e ssh /var/www/apt/ [email protected]:/home/frs/project/myfoo/testrepository/
注意:用你在sourceforge.net上的用戶名代替username,用你的項目的UNIX名稱代替myfoo,用你想要存儲的文件夾代替testrepository。
現在你的倉庫(包括設置和key等等)上傳到了http://sourceforge.net/projects/myfoo/testrepository。
要把它加入到一個已裝好的系統,首先你需要導入倉庫key,它實際上就是/var/www/apt/key/deb.gpg.key,但是這是一個本地路徑,使用你的倉庫的其它用戶不能添加到他們的系統中,這就是為什麼我們要導入來自sourceforge.net的key的原因。
- $ sudo su
- # wget -O - http://sourceforge.net/projects/myfoo/testrepository/apt/key/deb.gpg.key | apt-key add -
你現在可以非常輕松地把倉庫加入到系統中了,打開/etc/apt/sources.list,並加入下面這行:
- deb http://sourceforge.net/projects/myfoo/testrepository/apt/key/deb.gpg.key trusty main
Note:用你的項目的UNIX類型名稱代替myfoo,用你的倉庫代碼代替trusty,用你上傳存儲的文件夾代替testrepository,用你在distributionsj加入的倉庫組件代替main。
接下來,運行下面的命令來更新倉庫列表。
- $ sudo apt-get update
祝賀你! 你的軟件倉庫已經激活了!你現在可以非常簡單地在你需要的時候安裝包了。
via: http://www.tecmint.com/create-deb-pacakge-repository-in-ubuntu/
譯者:geekpi 校對:wxy
本文由 LCTT 原創翻譯,Linux中國 榮譽推出
更多Ubuntu相關信息見Ubuntu 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=2