许吉友 - 运维

repodata 的同一级目录下,创建一个 Packages 目录,用来放各种 rpm 文件,目录结构如下:

$ ls 
__mnt_vde_rpm  Packages  repodata

__mnt_vde_rpm 这个目录是自己生成的,不用管。

这里我下载了一个 jdk 的 RPM 包,名为 jdk-8u241-linux-x64.rpm ,这个 RPM 包没有其他依赖,将 rpm 文件放到这个 Packages 目录下后,然后更新 repodata

$ createrepo --update .

验证:

$ verifytree /mnt/vde/rpm

然后创建 repo 文件:

$ vim /etc/yum.repos.d/local.repo
[rpm]
name=rpm_package
baseurl=file:///mnt/vde/rpm
gpgcheck=0
enabled=1

gpgcheck设置为0,则不需要认证签名。

创建完成后,更新缓存

$ yum clean all # 可不执行
$ yum makecache

查看 repo 列表:

$ yum repolist

会发现上面方括号中定义的 rpm 已经出现在列表中了,注意后面软件的数量要和 Packages 中的数量一致。

使用 yum 安装来测试一下,这里使用 --enablerepo 来指定 repo 库:

$ yum install jdk --enablerepo=rpm

配置 HTTP 服务

配置了 HTTP 服务之后,内网多台服务器都可以使用了。

配置方法,先下载几个 rpm 包:

$ wget http://mirror.centos.org/centos/7/os/x86_64/Packages/apr-1.4.8-5.el7.x86_64.rpm
$ wget http://mirror.centos.org/centos/7/os/x86_64/Packages/apr-util-1.5.2-6.el7.x86_64.rpm
$ wget https://buildlogs.centos.org/c7.01.00/httpd/20150312150148/2.4.6-31.el7.centos.x86_64/httpd-tools-2.4.6-31.el7.centos.x86_64.rpm
$ wget http://mirror.centos.org/centos/7/os/x86_64/Packages/mailcap-2.1.41-2.el7.noarch.rpm
$ wget https://buildlogs.centos.org/c7.01.00/httpd/20150312150148/2.4.6-31.el7.centos.x86_64/httpd-2.4.6-31.el7.centos.x86_64.rpm

注意这里 httpd 版本只能是 2.4.6-31, 其他版本的话依赖也变了。全部包如下:

按照上边的套路,把 rpm 包加入到上边的目录,然后 yum 安装即可:

$ yum install httpd --enablerepo=rpm

配置文件是 /etc/httpd/conf/httpd.conf,我这里测试需要,把 80 端口改成 81。

然后启动:

$ systemctl enable httpd
$ systemctl start httpd

然后创建一个软链接到 httpd 的数据目录:

$ ln -s /mnt/vde/rpm /var/www/html/rpm

然后修改刚才的 local.repo :

$ vim /etc/yum.repos.d/local.repo
[rpm]
name=rpm_package
baseurl=http://localhost:81/rpm
gpgcheck=0
enabled=1

测试一下 :

$ yum install jdk --enablerepo=rpm

OK,搞定。

签名认证

上面忽略了签名认证,这里添加上。以下使用 root 账户操作

安装随机数工具并启动:

$ sudo yum install rng-tools -y
$ sudo  service rngd start

先生成证书和私钥,命令:

$ sudo gpg --gen-key

过程如下:

image-20200415104324651

中间需要输入密码,输入两次即可。

查看公钥:

$ gpg --list-key
/root/.gnupg/pubring.gpg
------------------------
pub   2048R/76CB8438 2020-04-15
uid                  xujiyou-test-name <xujiyou@bbdservice.com>
sub   2048R/5739118F 2020-04-15

安装 rpm 签名命令:

$ sudo yum install rpm-sign -y

编辑文件 /root/.rpmmacros

$ sudo vim /root/.rpmmacros

文件内容如下:

%_signature gpg
%_gpg_name xujiyou-test-name repo xujiyou@bbdservice.com

对 rpm 包进行签名:

$ rpm --resign jdk-8u241-linux-x64.rpm

需要输入刚才的密码。

导出公钥到文本文件:

$ gpg --export -a xujiyou@bbdservice.com > RPM-GPG-KEY-TESTREPO

查看 rpm 数据库中的公钥:

$ rpm -q gpg-pubkey

导入刚刚生成的公钥:

$ rpm --import RPM-GPG-KEY-TESTREPO

再次查看 rpm 数据库中的公钥,发现多了一个:

$ rpm -q gpg-pubkey

检查刚才进行了签名的软件包:

$ rpm -K jdk-8u241-linux-x64.rpm

将公钥放到 web 服务器上

$ cp /root/RPM-GPG-KEY-TESTREPO /mnt/vde/rpm/
$ ls /var/www/html/rpm/

上面已经在 /mnt/vde/rpm//var/www/html/rpm/ 之间做了软链接

更新仓库:

$ createrepo --update .

修改 repo 文件为:

[rpm]
name=rpm_package
baseurl=http://fueltank-1:81/rpm
gpgcheck=1
enabled=1
gpgkey=http://fueltank-1:81/rpm/RPM-GPG-KEY-TESTREPO

gpgcheck 为 1 ,表示验证签名。

测试安装:

$ yum install jdk --enablerepo=rpm

(可选)客户端导入公钥

$ sudo rpm --import http://fueltank-1:81/rpm/RPM-GPG-KEY-TESTREPO

大功告成。