1.38. 配置Yum软件仓库

1.38.1. Centos7使用互联网yum

#更换阿里源国内源
cp -rf /etc/yum.repos.d/CentOS-Base.repo{,.bak}
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

#在国内安装包会很慢,可以改为aliyun的epel源,先备份epel本身的源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo  #可选
#生成缓存
yum clean all && yum makecache

1.38.2. Yum的特点与基本用法

yum的基本用法

yum list                                    # 所有软件列表
yum install 包名                            # 安装包和依赖包
yum -y update                               # 升级所有包版本,依赖关系,系统版本内核都升级
yum -y update 软件包名                      # 升级指定的软件包
yum -y ss -tnl| grep 3306                   # 不改变软件设置更新软件,系统版本升级,内核不改变
yum search mail                              # yum搜索相关包
yum grouplist                                # 软件包组
yum -y groupinstall "Virtualization"         # 安装软件包组
rpm -ql gstreamer                            # 不安装软件查看包含文件
yum clean all                                # 清除var下缓存

yum repolist all                #列出所有仓库
yum list all                    #列出仓库中所有软件包
yum info                        #查看软件包信息
yum install                     #安装软件包
yum reinstall                   #重新安装软件包
yum update                      #升级软件包
yum remove                      #移除软件包
yum clean all                   #清除所有仓库缓存
yum check-update                #检查可更新的软件包
yum grouplist                   #查看系统中已经安装的软件包组
yum groupinstall                #安装指定的软件包组
yum groupremove                 #移除指定的软件包组
yum groupinfo                   #查询指定的软件包组信息
yum provides screen             #根据命令查询yum包中的名称


yum makecache   #重新做缓存
 [root@localhost ~]#yum list extras

注:也就是通过其他网站下载安装的rpm包。
要列出资源库中所有可以安装或更新的rpm包,命令如下。
    [root@localhost ~]#yum list

要列出资源库中特定的可以安装或更新以及已经安装的rpm包,命令如下。
    [root@localhost ~]#yum list sendmail
    [root@localhost ~]#yum list gcc*

注意
可以在rpm包名中使用匹配符,如上面的例子列出所有以gcc开头的rpm包。
要搜索匹配特定字符的rpm包的详细信息,命令如下。
    [root@localhost ~]#yum search wget

要搜索包含特定文件名的rpm包,命令如下。
    [root@localhost ~]#yum provides realplay

(4)通过yum操作暂存信息(/var/cache/yum)要清除暂存的rpm包文件,命令如下。
    [root@localhost ~]#yum clean packages

要清除暂存的rpm头文件,命令如下。
    [root@localhost ~]#yum clean headers

要清除暂存中旧的rpm头文件,命令如下。
    [root@localhost ~]#yum clean oldheaders

要清除暂存中旧的rpm头文件和包文件,命令如下。
    [root@localhost ~]#yum clean 或
    [root@localhost ~]#yum clean all
#下载对应版本 repo 文件, 放入 /etc/yum.repos.d/ (操作前请做好相应备份)
cp -rf/etc/yum.repos.d/CentOS-Base.repo{,_bak}


# 163的Centos5~6~7 yum源下载地址
http://mirrors.163.com/.help/centos.html

1.38.3. 基于ISO镜像构建本地Yum软件仓库

配置本地yum步骤

[root@pxe-server ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1  4.3G  0 rom

创建挂载点后进行挂载操作,并设置成开机自动挂载

[root@pxe-server ~]# mount /dev/sr0 /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载

[root@linuxprobe yum.repos.d]# vim /etc/fstab
/dev/cdrom /mnt/ iso9660 defaults 0 0

[root@pxe-server ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk
sr0              11:0    1  4.3G  0 rom  /mnt

[root@pxe-server ~]# cp -rf /etc/yum.repos.d/CentOS-Base.repo{,._BAK}

[root@pxe-server yum.repos.d]# cat > /etc/yum.repos.d/CentOS-Base.repo <<EOF
[yum]
name=Centos7
baseurl=file:///mnt
enabled=1
gpgcheck=1
gpgkey=file:///mnt/RPM-GPG-KEY-CentOS-7
EOF

[root@pxe-server yum.repos.d]# yum clean all        #清空YUM cache


[root@pxe-server yum.repos.d]# yum install screen -y

1.38.4. Centos7基于HTTP构建局域网yum源

由于ISO镜像中的软件包太少、太老,所以我的实验使用的yum源是阿里云镜像源;
但是阿里云镜像源必须要连接外网才可以使用,做实验时倒无所谓;
但是在公司部署大量服务器时会占用出口带宽。另外有些特殊的镜像源架设在国外,使用起来很不稳定。
所以本地yum源仓库时必要的

下面是我在部署公司本地yum仓库时的具体部署步骤(以epel-7源为例):

1、部署环境:

系统:Centos7 x86_64
应用服务:httpd、createrepo、reposync
镜像源:https://mirrors.aliyun.com/repo/epel-7.repo

2、现在阿里云镜像源repo文件到本地:

[root@localhost ~] wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

3、安装httpd服务,用于提供存放yum源:

[root@localhost ~] yum install httpd -y
使用默认配置即可,如果有特殊需求可以修改配置文件/etc/httpd/conf/httpd.conf
http默认家目录/var/www/html

4、安装yum-utils提供reporsync服务:

[root@localhost ~] yum install yum-utils -y

5、选择指定仓库标识作为本地yum源:

执行yum repolist命令查看yum仓库标识
[root@localhost ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.163.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.163.com
 * updates: mirrors.163.com
repo id                                                                                               repo name                                                                                                                            status
base/7/x86_64                                                                                         CentOS-7 - Base                                                                                                                       9,363
epel/x86_64                                                                                           Extra Packages for Enterprise Linux 7 - x86_64                                                                                       11,681
extras/7/x86_64                                                                                       CentOS-7 - Extras                                                                                                                       380
updates/7/x86_64                                                                                      CentOS-7 - Updates                                                                                                                    1,838
repolist: 23,262

我使用epel作为本地yum源,用/var/www/html作为yum仓库根目录

[root@localhost ~]# reposync -r epel -p /var/www/html/
  命令执行完毕后,会将阿里云中的epel源同步到本地/var/www/html中;在/var/www/html中自动创建epel目录用于存放rpm包;第一次同步是时间可能较长,大概1W多个rpm包。


                                                                                                                                                                        |  19 kB  00:00:00
(11680/11681): zvbi-fonts-0.2.35-1.el7.noarch.rpm                                                                                                                                                                         | 116 kB  00:00:00
(11681/11681): xonotic-data-0.8.2-1.el7.noarch.rpm                                                                                                                                                                        | 873 MB  00:14:38
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# ll /var/www/html/
total 4
drwxr-xr-x. 31 root root 4096 May 27 23:50 epel

6、createrepo 命令创对/var/www/html/epel下的 rpm 包 创建为本地的 YUM 仓库,目的是为生成repodata目录并自动创建索引信息

[root@localhost ~]# createrepo -pdo /var/www/html/epel/ /var/www/html/epel/  #第一个目录是repodata存放目录,第二个目录是需要生成索引信息yum源仓库目录
Spawning worker 0 with 5841 pkgs
Spawning worker 1 with 5840 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@localhost ~]# ll /var/www/html/epel/repodata/
total 34824
-rw-r--r--. 1 root root 2950038 May 28 02:09 458c248cc2fc1f9be754a7fd20f576c4acd231e32a49dfe26ba441d9ef1e8196-other.sqlite.bz2
-rw-r--r--. 1 root root 9980489 May 28 02:09 691ac5899b99b6a7d6de2c03f8706ab40a4104ffa95169837cd53860be9bd08c-filelists.sqlite.bz2
-rw-r--r--. 1 root root 9029887 May 28 02:09 9efa5c655cbaa93cfe74fa88f1521a00cdd7575a1ee537b3285c2f739470cd78-filelists.xml.gz
-rw-r--r--. 1 root root 6186568 May 28 02:09 b833e13dd3f617ae5c2f228991fcaecaf5b2602844da466fae2b6eef2578e64e-primary.sqlite.bz2
-rw-r--r--. 1 root root 3369194 May 28 02:09 f5dc4532b7ee4bc249b397e441842f684dc9df3b6b37cfb709080802c4fe9fce-primary.xml.gz
-rw-r--r--. 1 root root 2101964 May 28 02:09 f9f0522ce0356e3e95b0849e59ebfe35870c4359a8d1c6447b1d017a23ececbe-other.xml.gz
-rw-r--r--. 1 root root 3012 May 28 02:09 repomd.xml

7、验证本地yum源是否能正常使用:

  登录其他内网其他服务器,要能与yum源服务器通信;编写repo文件:

vim /etc/yum.repos.d/epel-7.repo内容如下

[epel]
name=local epel
baseurl=http://yum源服务器IP/epel
enabled=1
gpgcheck=0

备份其他repo文件至/etc/yum.repos.d/repobak目录下,以防影响测试:

[root@localhost yum.repos.d]# ll /etc/yum.repos.d/
total 8
-rw-r--r--. 1 root root   79 May 28 17:26 epel.repo
drwxr-xr-x. 2 root root 4096 May 28 17:25 repobak
  执行yum clean all、yum makecache:
[root@localhost yum.repos.d]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: epel
Cleaning up everything
[root@localhost yum.repos.d]# yum makecache
Loaded plugins: fastestmirror
epel                                                                                                                                                                                                                      | 2.9 kB  00:00:00
(1/3): epel/primary_db                                                                                                                                                                                                    | 5.9 MB  00:00:00
(2/3): epel/filelists_db                                                                                                                                                                                                  | 9.5 MB  00:00:00
(3/3): epel/other_db                                                                                                                                                                                                      | 2.8 MB  00:00:00
Determining fastest mirrors
Metadata Cache Created
#上面信息表明本地epel源被正常缓存;表明配置成功。

7、为保证本地yum源能和阿里云镜像源同步,可以通过脚本定时任务实现:

vim /root/yum-update.sh
#!/bin/bash
datetime=`date +"%Y-%m-%d"`
exec > /var/log/epel.log #同步日志输出
reposync -d -r epel -p /var/www/html/  #同步镜像源
if [ $? -eq 0 ];then
    createrepo --update  /var/www/html/epel #每次添加新的rpm时,必须更新epel索引信息
    echo "SUCESS: $datetime epel update successful"else
    echo "ERROR: $datetime epel update failed"fi
#定时任务:每周六凌晨三点同步yum源
crontab -e
0 3 * * 6 /bin/bash /root/yum-update.sh

参考文献 centos7系统配置本地yum源

https://www.zstack.io/help\_support/detail.php?id=83

1.38.5. YUM源软件包扩展

当要使用挂载移动硬盘时需要使用ntfs-3g软件包支持,而光盘镜像中没有该软件包,此时需要往YUM源端添加ntfs-3g软件包 添加方式如下:

(1)切换到/var/www/html/centos目录,官网下载ntfs-3g软件包
cd /var/www/html/centos/
wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/n/ntfs-3g-2017.3.23-11.el7.x86_64.rpm
wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/n/ntfs-3g-devel-2017.3.23-11.el7.x86_64.rpm

(2)createrepo命令更新软件包,如下新增其他软件包,把软件包下载到本地,然后通过createrepo更新即可。
createrepo -- update centos/

(3)客户端YUM进行验证,安装ntfs-3g软件包。

1.38.6. 同步外网yum源

把外网yum源中所有软件包同步到本地,完善本地yum源的软件包数量以及完整性。

reposync可以同步几乎所有的YUM源,下面以reporsync为案例,同步外网YUM源软件至本地。步骤如下:

①:下载CentOS源文件到/etc/yum.repos.d/,安装reposync命令工具

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
yum clean all
yum -y install yum-utils createrepo
yum repolist

先安装局域网yum (服务器端 192.168.20.200)

mkdir -p /var/www/html/centos
mount /dev/sr0 /mnt/
cp -rf /mnt/Packages/* /var/www/html/centos

yum -y install createrepo*
cd /var/www/html/
createrepo centos/
yum install httpd-devel -y
useradd apache -g apache
systemctl restart httpd.service
setenforce 0
systemctl stop firewalld.service

[root@pxe-server html]# ps -ef| grep httpd
root       8499      1  0 10:59 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     8500   8499  0 10:59 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     8501   8499  0 10:59 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     8502   8499  0 10:59 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     8503   8499  0 10:59 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     8504   8499  0 10:59 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
root       8545   7306  0 11:01 pts/0    00:00:00 grep --color=auto httpd

yum客户端配置:

[root@pxe-server rules.d]# cat > /etc/yum.repos.d/CentOS-Base.repo <<EOF
[base]
name="CentOS7 HTTP YUM"
baseurl=http://192.168.20.200/centos/
gpgcheck=0
enabled=1
[updates]
name="CentOS7 HTTP YUM"
baseurl=http://192.168.20.200/centos
gpgcheck=0
enabled=1
EOF

yum clean all           # 清空YUM cache
yum install ntpd -y
yum remove nginx -y

②通过reposync 命令工具获取外网YUM 源所有软件包, -r 指定repolist id , 默认不 加-r 表示获取外网所有YUM 软件包, -P 参数表示指定下载软件的路径。

reposync -r base -p /var/www/html/centos/
reposync -r updates -p /var/www/html/centos/

③ 通过reposync工具下载完所有的软件包之后,需要执行createrepo更新本地YUM仓库。

createrepo /var/www/html/centos

至此本地局域网YUM就同步完成互联网的yum源信息了。后续的新包可以直接安装使用了。

1.38.7. 几个不错的yum源

CentOS 自带的官方 yum源中由于去除了很多有版权争议的软件,因此可使用的软件种类并不丰富, 而且软件版本都普遍较低,对于软件bug修复、更新也很慢,当需要使用最新稳定版本的软件时, 可能需要手动进行软件更新,操作比较麻烦。下面介绍几个不错的yum源,以供软件升级和漏洞修复使用。

EPEL(Extra Pockages for Enterprise Linux,企业版Linux附加软件包), 是一个由特别兴趣小组创建、维护并管理,针对红帽企业版Linux(RHEL)及其衍生发行版 (例如CentOS、Scientific Linux)的一个高质量附加软件包项目。 其官方网址为:

http://fedoraproject.org/wiki/EPEL/zh-cn,
EPEL的软件包不会与企业版Linux官方源中的软件包发生冲突,或者互相替换文件。因此可以放心使用。

EPEL包含一个叫做“epel-release”的包,这个包包含了EPEL源的gpg密钥和软件源信息。 可以通过yum命令将这个软件包安装到企业级Linux发行版上。这样就可以使用最全面、最稳定的Linux软件包了。 除了epel-release源之外,还有一个叫做“epel-testing”的源,这个源包含最新的测试软件包, 其版本很新但是安装有风险,可以根据情况自行斟酌使用。

相关的EPEL可以从EPEL官方网站下载到,针对CentOS系统,有EL5、EL6、EL7三个版本, 分别针对CentOS 5.x、CentOS 6.x、CentOS 7.x三个系列版本。

读者可根据系统环境进行下载使用。

RPMForge是一个第三方软件源仓库,也是CentOS官方社区推荐的第三方yum源, 它为CentOS系统提供了超过10000个软件包,被CentOS社区认为是最安全也是最稳定的一个软件仓库。 但是由于这个安装源不是CentOS本身的组成部分,因此要使用RPMForge,需要手动下载并安装。

RPMForge的官方网站是

http://repoforge.org/

可以在

http://pkgs.repoforge.org/rpmforge-release/

下载 RHEL/CentOS 各个版本的“rpmforge-release”包,这样就可以使用RPMForge提供的丰富软件了。

USTC Mirror Help

1.38.8. Centos7自建Openstack Yum源

参考文献:

centos7 创建内网yum源 OpenStack源部署

1.38.9. 官方源、镜像源汇总

阿里的yum源

https://developer.aliyun.com/mirror/

1.38.10. 搭建企业内部yum仓库(centos6+centos7+epel源)

1.38.11. Linux下载_Linux系统各种版本ISO镜像下载(redhat,centos,oracle,ubuntu,openSUSE)