在 Ubuntu 下如何创建远程 .deb 包仓库
Reprepro 是一款小巧的命令行工具来方便地创建并管理 .deb 仓库。今天我们会展示给你如何使用 reprepro 简单地创建一个 Debian 包仓库,并使用 rsync 上传到 Sourceforge.net。
步骤 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) 2013 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. Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) Your selection? RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) Requested keysize is 2048 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 Key is valid for? (0) Key does not expire at all Is this correct? (y/N) Y You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>" Real name: ravisaive Email address: tecmint.com@gmail.com Comment: tecmint You selected this USER-ID: "Ravi Saive (tecmint) <tecmint.com@gmail.com>" 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. It is 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 public and secret key created and signed. gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u pub 2048R/2EB446DD 2014-06-24 Key fingerprint = D222 B1C9 342E 5911 02B1 9147 3BD6 7918 2EB4 46DD uid Ravi Saive (tecmint) <tecmint.com@gmail.com> sub 2048R/7EF2F750 2014-06-24
现在你的 key 已经生成了,要检查一下,用 root 权限运行这条命令。
$ sudo gpg --list-keys
示例输出
/home/ravisaive/.gnupg/pubring.gpg ---------------------------------- pub 2048R/2EB446DD 2014-06-24 uid ravisaive (tecmint) <tecmint.com@gmail.com> sub 2048R/7EF2F750 2014-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 yourmail@mail.com >> /var/www/apt/key/deb.gpg.key
注意:用你之前步骤中输入的用户名代替 username,用你的 email 代替上面的 yourmail@mail.com 。
我们需要在 /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" Exporting Trusty... 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) <tecmint.com@gmail.com> needs a passphrase Please enter passphrase: Successfully created '/var/www/apt/dists/Trusty/Release.gpg.new' FF5097B479C8220C ravisaive (tecmint) <tecmint.com@gmail.com> 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) <tecmint.com@gmail.com> needs a passphrase Please enter passphrase: Successfully created './dists/Trusty/Release.gpg.new' FF5097B479C8220C ravisaive (tecmint) <tecmint.com@gmail.com> 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/ username@frs.sourceforge.net:/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
祝贺你 ! 你的软件仓库已经激活了!你现在可以非常简单地在你需要的时候安装包了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论