平时使用yum方式安装更新软件,可以自建一个yum源,同步官方更新源,这样如果本地有机器要升级的话就可以直接使用本地的更新源了。这里系统为CentOS 6.2。

一、服务端

1、安装需要的环境

自建yum本地更新源可以使用http服务或ftp服务,由于ftp服务器要考虑防火墙配置,主动、被动连接模式,这里使用http服务。

安装apache:

yum install httpd

配置apache过程略过。

2、安装createrepo软件包

yum install createrepo

3、建立存放软件包目录

mkdir -p /home/yum/centos/6/

chown -R apache:apache /home/yum/

4、apache创建虚拟目录

vim /etc/httpd/conf/httpd.conf

在最后加入:

NameVirtualHost *:80
DocumentRoot /home/yum
ServerName XXX.XXX.XXX #填写绑定的域名
Options Indexes FollowSymlinks

5、将rpm软件包放入/home/yum/centos/6/目录

6、执行createrepo

createrepo /home/yum/centos/6

在/home/yum/centos/6目录下会自动生成repodata目录,repodata目录里是一个数据库,其中的文件主要是XML格式,描述了一个rpm包的详细信息,如依赖关系,包含文件,校验码信息。

二、客户端

1、创建yum客户端repo文件

vim /etc/yum.repos.d/test.repo

以.repo为后缀,这里名字为test。

添加:

[test]
name=yum test
baseurl=http://XXX.XXX.XXX/centos/6
enabled=1
gpgcheck=1
gpgkey=http://XXX.XXX.XXX/centos/RPM-GPG-KEY-TESTREPO
说明:

[test]:是repo id。

name:仓库的描述。

baseurl:仓库的位置。

enabled:是否启用这个仓库,1为起用,0为禁用。

gpgcheck:是否检查gpg签名,1为检查,0为不检查。

(XXX.XXX.XXX是绑定的域名)

PS:如果是内部使用,gpgcheck可以设置为0(同时gpgkey也不用设置),如果更新源放在公网上的话还是需要检查gpg签名,保证客户端得到来源的可靠性。

2、查看yum更新源列表

yum repolist

是否有名为yum test的源出现。

三、(可选)服务端使用gpg key对rpm软件包进行签名

1、创建gpg key

gpg key也是基于非对称加密算法,产生公钥和私钥。

执行:

cd ~

gpg --gen-key

创建过程:


选择加密算法、加密强度、是否设置有效期


设置名称和邮箱



输入保护密码


在/root/.gnupg目录下生成公钥和私钥文件。据观察pubring.gpg是公钥,secring.gpg是私钥。

2、查看公钥

gpg --list-key

显示如下:

/root/.gnupg/pubring.gpg
------------------------
pub 2048R/EF9632F2 2012-07-21
uid test repo 
sub 2048R/C17A35BC 2012-07-21

3、在家目录建立.rpmmacros文件

cd ~

vim .rpmmacros

添加:
%_signature gpg
%_gpg_name test repo 
%_gpg_name后面要填写gpg –list-key命令显示的uid,指定这一组key进行签名。
4、对rpm软件包签名
以mtree-2.7-1.el6.rf.i686.rpm软件包为例。
cd /home/yum/centos/6
rpm --resign mtree-2.7-1.el6.rf.i686.rpm

随后需要输入保护密码。

5、导出公钥到文本文件

cd ~

gpg --export -a "test repo " >RPM-GPG-KEY-TESTREPO

6、验证是否签名成功

查看rpm数据库中的公钥:

rpm -q gpg-pubkey

gpg-pubkey-c105b9de-4e0fd3a3

导入公钥:

rpm --import RPM-GPG-KEY-TESTREPO

rpm -q gpg-pubkey

gpg-pubkey-c105b9de-4e0fd3a3

gpg-pubkey-ef9632f2-500a6e55

已经添加了一组公钥。

检验rpm软件包:

cd /home/yum/centos/6

rpm -K mtree-2.7-1.el6.rf.i686.rpm

mtree-2.7-1.el6.rf.i686.rpm: rsa sha1 (md5) pgp md5 OK

7、将公钥放到web服务器上

cp ~/RPM-GPG-KEY-TESTREPO /home/yum/centos/

8、服务端更新仓库信息

createrepo --update /home/yum/centos/6

主要是更新repodata目录中的数据。

四、(可选)客户端导入公钥

rpm --import http://XXX.XXX.XXX/centos/RPM-GPG-KEY-TESTREPO

(XXX.XXX.XXX是绑定的域名)

测试安装:

yum install mtree