搜索
查看: 1214|: 0

在Ubuntu下如何创建远程“.deb”包仓库

[复制链接]

202

主题

6

回帖

885

积分

高级会员

积分
885
发表于 2014-7-25 11:05:16 | 显示全部楼层 |阅读模式

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) <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.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)<tecmint.com@gmail.com>
  • sub2048R/7EF2F7502014-06-24

现在你的key已经生成了,要检查一下,用root权限运行这条命令。

  • $ sudo gpg --list-keys
示例输出
  • /home/ravisaive/.gnupg/pubring.gpg
  • ----------------------------------
  • pub 2048R/2EB446DD2014-06-24
  • uid ravisaive (tecmint)<tecmint.com@gmail.com>
  • 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导出到仓库文件夹,运行:

注意:用你之前步骤中输入的用户名代替username,用你的email代替上面的yourmail@mail.com

我们需要在/var/www/apt/conf创建一个文件“distributions”。

  • # touch /var/www/apt/conf/distributions

加入下面这几行到distributions这个文件中并保存。

  • Origin你的名字)
  • Label库的名字)
  • Suitestable 或 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)<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的服务器上,以提供远程软件库的服务。)

注意:用你在sourceforge.net上的用户名代替username,用你的项目的UNIX名称代替myfoo,用你想要存储的文件夹代替testrepository。

现在你的仓库(包括设置和key等等)上传到了http://sourceforge.net/projects/myfoo/testrepository

要把它加入到一个已装好的系统,首先你需要导入仓库key,它实际上就是/var/www/apt/key/deb.gpg.key,但是这是一个本地路径,使用你的仓库的其它用户不能添加到他们的系统中,这就是为什么我们要导入来自sourceforge.net的key的原因。

你现在可以非常轻松地把仓库加入到系统中了,打开/etc/apt/sources.list,并加入下面这行:

Note:用你的项目的UNIX类型名称代替myfoo,用你的仓库代码代替trusty,用你上传存储的文件夹代替testrepository,用你在distributionsj加入的仓库组件代替main。

接下来,运行下面的命令来更新仓库列表。

  • $ sudo apt-get update

祝贺你! 你的软件仓库已经激活了!你现在可以非常简单地在你需要的时候安装包了。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

大数据中国微信

QQ   

版权所有: Discuz! © 2001-2013 大数据.

GMT+8, 2024-12-24 01:05 , Processed in 0.106989 second(s), 25 queries .

快速回复 返回顶部 返回列表