[Linux]CentOS7搭建/配置:YUM仓库/源[本地源/Web源(Apache HTTP(D))/自建源仓库]
阅读原文时间:2023年07月08日阅读:1

若想搞懂整个配置过程和原理,就按照章节(1 / 2)一步一步地来。

若想直接一步到位,不想花过多时间,尽快配好,就直接看附件章节。

什么是yum源?

Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora、RedHat/RHEL、SUSE以及CentOS等Linux发行版的/repo/【Shell】前端【软件包管理器】。

yum源 := yum仓库 := yum管理下的软件源/软件仓库

怎么生动地理解这一点呢?

yum 类同于 CENTOS操作系统的 软件管理器;Web前端开发的 npm 包(依赖)管理软件;Java后端开发的 maven 包(依赖)管理软件。

值得注意的是,CENTOS 8新增了 DNF 包管理器,以取代之前OS版本的 YUM。

1 本地YUM源

Eg: 操作系统的镜像iso文件



即 搭建yum仓库

将操作系统镜像(CentOS-….-.iso)挂载在本地目录中;

此次【挂载】目录为/var/www/html/repo/(此目录本身不存在,需要创建);

为什么是/var/www/html目录?

因为以便以后发布http(d)服务,http(d)服务中配置文件/etc/httpd/conf/httpd.conf的默认发布Web资源目录正是"DocumentRoot "/var/www/html"

可参见此博文: CentOS7搭建httpd服务 - CSDN

mkdir /var/www/
mkdir /var/www/html
mkdir /var/www/html/repo

mkdir /iso
(上传iso镜像到目录/iso/下)
mount /iso/CentOS7-1804.iso  /var/www/html/repo/

  • 特别说明

    • 1.vmware下的centos虚拟机一般重启后,此mount命令就失效了,重启后需要重新执行mount命令进行挂载
    • 2.基于1,若不想每次重启后都重新挂载,可配置开机自启shell,具体操作如下:

    sudo chmod +x /etc/rc.d/rc.local
    sudo echo "mount /iso/CentOS7-1804.iso /var/www/html/repo/" >> /etc/rc.d/rc.local
    source /etc/profile

  • 【查看/核验】

    df -h /iso/CentOS7-1804.iso # 查看指定文件(or目录)所属的磁盘/文件系统及其挂载路径
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/cl-root 15T 38G 15T 1% /

    df –h # 查看已挂载设备的信息
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/cl-root 15T 14G 15T 1% /
    devtmpfs 32G 0 32G 0% /dev
    tmpfs 32G 0 32G 0% /dev/shm
    tmpfs 32G 9.4M 32G 1% /run
    tmpfs 32G 0 32G 0% /sys/fs/cgroup
    /dev/sda2 1016M 131M 886M 13% /boot
    /dev/sda1 200M 9.5M 191M 5% /boot/efi
    tmpfs 6.3G 0 6.3G 0% /run/user/0
    /dev/loop0 4.1G 4.1G 0 100% /var/www/html/repo

    ll /var/www/html/repo # 查看挂载的目录中是否有内容
    total 654
    -rw-r--r--. 1 root root 14 Dec 5 2016 CentOS_BuildTag
    drwxr-xr-x. 3 root root 2048 Dec 5 2016 EFI
    -rw-r--r--. 1 root root 215 Dec 10 2015 EULA
    -rw-r--r--. 1 root root 18009 Dec 10 2015 GPL
    drwxr-xr-x. 3 root root 2048 Dec 5 2016 images
    drwxr-xr-x. 2 root root 2048 Dec 5 2016 isolinux
    drwxr-xr-x. 2 root root 2048 Dec 5 2016 LiveOS
    drwxrwxr-x. 2 root root 630784 Dec 5 2016 Packages
    drwxrwxr-x. 2 root root 4096 Dec 5 2016 repodata
    -rw-r--r--. 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-7
    -rw-r--r--. 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-Testing-7
    -r--r--r--. 1 root root 2883 Dec 5 2016 TRANS.TBL

即 配置yum源

在默认配置文件目录中添加编辑配置文件;此次添加的配置文件为repo_local.repo

【本地主机 配置 本地的YUM源仓库】
cd /etc/yum.repos.d/
touch repo_local.repo # 后缀必须为repo
vi repo_local.repo
    [repo_local] # yum仓库名,必须与文件名【repo_local.repo】的前半部分一致
    name=repo for local # yum仓库的描述信息
    baseurl=file:///var/www/html/repo/ # yum源的访问地址(目录内,一般含: /Packages、/repodata等子目录)。file://+本地yum源目录是本地yum源访问地址的固定格式
    enabled=1 # 启用仓库
    gpgcheck=0 # 不进行红帽标签检查

【本地主机 屏蔽 其他YUM仓库(repo)】
ll /etc/yum.repos.d/
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.bak
mv CentOS-CR.repo CentOS-CR.repo.bak
mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
mv CentOS-fasttrack.repo CentOS-fasttrack.repo.bak
mv CentOS-Media.repo CentOS-Media.repo.bak
mv CentOS-Sources.repo CentOS-Sources.repo.bak
mv CentOS-Vault.repo CentOS-Vault.repo.bak


yum repolist       # 查看yum源中是否有软件包/软件包个数

repo_local仓库中存在9911个软件包 即 本地yum仓库源搭建成功

2 网络YUM源

即 通过发布http服务来搭建、共享yum仓库

安装httpd软件,启动httpd服务,并设置httpd为开机启动,以http链接地址来访问yum源/仓库

详见本博文:

  • 1.1 [YUM仓库/服务端] 获取:软件包资源
  • 1.2 [YUM仓库/服务端] 挂载/搭建:yum仓库(资源)
  • 1.3 [客户端/本地] 配置:yumRepoName.repo文件

httpd服务的默认Web资源目录 即 /var/www/html/

可参见此博文:

【查看/核验】查看httpd是否安装成功,httpd服务是否启动

ps -ef | grep httpd
或
ss -lntp | grep httpd


http://serverIP:9999/dirName

在默认配置文件目录中添加编辑配置文件。此次添加的配置文件为repo_http.repo.

【本机 配置 指定远程主机的YUM源仓库】
cd /etc/yum.repos.d/
touch repo_http.repo # 后缀必须为repo
vi repo_http.repo
    [repo_http]                                  # yum仓库名,必须与文件名【repo_local.repo】的前半部分一致
    name=repo for http                           # yum仓库的描述信息
    baseurl=http://176.130.2.72/repo/            # yum源的网络访问地址(目录内,一般含: /Packages、/repodata等子目录)。
    enabled=1                                    # 启用仓库
        # 通过 yum 的 --enablerepo=[repo_name] 和 --disablerepo=[repo_name] 选项,或者通过 PackageKit 的"添加/删除软件"工具,也能够方便地启用和禁用指定的软件仓库 # Eg: yum --enablerepo=epel -y install xrdp
    gpgcheck=0                                   # 不进行红帽标签检查

【本机 屏蔽 其他YUM仓库(repo)】
mv CentOS-Base.repo CentOS-Base.repo.bak
mv CentOS-CR.repo CentOS-CR.repo.bak
mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
mv CentOS-fasttrack.repo CentOS-fasttrack.repo.bak
mv CentOS-Media.repo CentOS-Media.repo.bak
mv CentOS-Sources.repo CentOS-Sources.repo.bak
mv CentOS-Vault.repo CentOS-Vault.repo.bak

详见本文: 1.4 检验:搭建yum成功与否

yum repolist

3 自建yum源仓库

即 使用自行下载的rpm制作yum仓库,以httpd或Nginx发布Web共享yum源服务

mkdir -p /app/yum/centos7/x86_64/

查找、下载RPM等软件包的推荐网站

里面有2个下载好的软件包

createrepo命令:用于创建yum源(软件仓库),即为存放于本地的rpm包目录建立索引,描述各包所需依赖的信息,生成元数据信息。可生成yum软件包清单文件。

yum -y install createrepo
    createrepo --version
createrepo  -pdo /app/yum/centos7/x86_64/ /app/yum/centos7/x86_64/
createrepo --update -v /app/yum/centos7/x86_64/ # 若归档目录添加或删除了rpm包,可update更新索引,不必重新生成,节省时间


[补充: 备注/可选项]
[root@CENTOS7-20200707 ~]# createrepo -v /app/yum/centos7/x86_64
Spawning worker 0 with 1 pkgs
Worker 0: reading nano-2.3.1-10.el7.x86_64.rpm
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Starting other db creation: Mon Jul 27 16:58:18 2020
Ending other db creation: Mon Jul 27 16:58:18 2020
Starting filelists db creation: Mon Jul 27 16:58:18 2020
Ending filelists db creation: Mon Jul 27 16:58:18 2020
Starting primary db creation: Mon Jul 27 16:58:18 2020
Ending primary db creation: Mon Jul 27 16:58:18 2020
Sqlite DBs complete

[root@CENTOS7-20200707 ~]# ls /app/yum/centos7/x86_64/repodata
095096a77a0e87e74a7f0643be9dac988673d6b6d7663955620ff337cd6ab56d-filelists.xml.gz
0bd7f5f95ba7827f903a03bc8dfaf69ac6e286f30872af854de450746392fbe7-primary.xml.gz
8219a3fe4e77eab1c0dde4cbbd0a3893dae31fbe5b19aaf084deb36e7dc3016d-filelists.sqlite.bz2
9505d2b881f676b5c7ea72b1ac40e66ec48e3b79cf1dae55eff6e47155626e3b-other.sqlite.bz2
a2de74407d710f8f310a54d4ae166de3423c58f02f0827d63b8177e4b48afe00-other.xml.gz
b80638e29d421f080b67b51db0a9a65490bb2473ba95dba946c3cbb06a8e2552-primary.sqlite.bz2
repomd.xml


【2 配置/发布 Apache HTTP(D)服务】
mkdir -p /var/www/html

vi /etc/selinux/config
    SELINUX=disabled (避免出现权限不足,访问不了WEB资源的情况)

yum -y install httpd
systemctl restart httpd
systemctl enable httpd # 设置开机启动
firewall-cmd --permanent --zone=public --add-port=80/tcp
    ss -lntp
        "httpd"
    关闭端口 firewall-cmd --permanent --zone=public --remove-port=80/tcp
ps -ef | grep httpd
systemctl restart firewalld


cp -a /app/yum/centos7/x86_64/     /var/www/html/
或
ln -s /app/yum/centos7/x86_64/ /var/www/html/x86_64
    删除软链接: rm /var/www/html/x86_64

访问: http://ip/x86_64

在默认配置文件目录中添加编辑配置文件。此次添加的配置文件为repo_self.repo.

cd /etc/yum.repos.d/
touch repo_self.repo # 后缀必须为repo
vi repo_self.repo
    [repo_self]                          # yum仓库名,必须与文件名【repo_local.repo】的前半部分一致
    name=repo for self
    baseurl=http://176.130.2.72/x86_64/   # yum源的访问地址
    enabled=1                            # 启用仓库
    gpgcheck=0                           # 不进行红帽标签检查

详见本文: 1.4 检验:搭建yum成功与否

yum repolist

4 附件/福利: 搭建基于HTTP服务发布的YUM源仓库

源自一实际项目的实操全过程

【1 制作本地YUM】

mkdir -p /var/www/html/repo
mkdir /iso

(FTP上传镜像到/iso/CentOS-7-x86_64-DVD-1611.iso )

mount /iso/CentOS-7-x86_64-DVD-1611.iso /var/www/html/repo

ll /var/www/html/repo/
    若iso镜像挂载到文件系统目标目录下成功,则:改文件系统目录下会出现iso镜像内的各类文件资源

若 mount 时出现: mount: /iso/CentOS-7-x86_64-DVD-1611.iso is not a block device (maybe try -o loop'?)解决方法:mount后加参数-o loop(使用 loop 模式用来将一个文件/档案当成硬盘分割挂上系统;网上有人说,iso文件镜像都是需要添加-o loop`)

mount -o loop /iso/CentOS-7-x86_64-DVD-1611.iso /var/www/html/repo

【2 配置/发布 HTTPD服务】

yum -y install httpd
systemctl restart httpd
systemctl enable httpd
firewall-cmd --permanent --zone=public --add-port=25/tcp
    ss -lntp
        "master"
    关闭端口
        firewall-cmd --permanent --zone=public --remove-port=25/tcp
firewall-cmd --permanent --zone=public --add-port=80/tcp
    ss -lntp
        "httpd"
ps -ef | grep httpd
systemctl restart firewalld

【3 配置制作的本地YUM源仓库】

cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.bak
mv CentOS-CR.repo CentOS-CR.repo.bak
mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
mv CentOS-fasttrack.repo CentOS-fasttrack.repo.bak
mv CentOS-Media.repo CentOS-Media.repo.bak
mv CentOS-Sources.repo CentOS-Sources.repo.bak
mv CentOS-Vault.repo CentOS-Vault.repo.bak
touch repo_local.repo
vi repo_local.repo
    [repo_local]
    name=repo for local
    baseurl=file:///var/www/html/repo/
    enabled=1
    gpgcheck=0

【4 查看/核验 YUM源】

df -h 【查看ISO镜像挂载情况】
    Filesystem           Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root   15T   14G   15T   1% /
    devtmpfs              32G     0   32G   0% /dev
    tmpfs                 32G     0   32G   0% /dev/shm
    tmpfs                 32G  9.4M   32G   1% /run
    tmpfs                 32G     0   32G   0% /sys/fs/cgroup
    /dev/sda2           1016M  131M  886M  13% /boot
    /dev/sda1            200M  9.5M  191M   5% /boot/efi
    tmpfs                6.3G     0  6.3G   0% /run/user/0
    /dev/loop0           4.1G  4.1G     0 100% /var/www/html/repo
ll /var/www/html/repo 【查看挂载目录文件】
    total 654
    -rw-r--r--. 1 root root     14 Dec  5  2016 CentOS_BuildTag
    drwxr-xr-x. 3 root root   2048 Dec  5  2016 EFI
    -rw-r--r--. 1 root root    215 Dec 10  2015 EULA
    -rw-r--r--. 1 root root  18009 Dec 10  2015 GPL
    drwxr-xr-x. 3 root root   2048 Dec  5  2016 images
    drwxr-xr-x. 2 root root   2048 Dec  5  2016 isolinux
    drwxr-xr-x. 2 root root   2048 Dec  5  2016 LiveOS
    drwxrwxr-x. 2 root root 630784 Dec  5  2016 Packages
    drwxrwxr-x. 2 root root   4096 Dec  5  2016 repodata
    -rw-r--r--. 1 root root   1690 Dec 10  2015 RPM-GPG-KEY-CentOS-7
    -rw-r--r--. 1 root root   1690 Dec 10  2015 RPM-GPG-KEY-CentOS-Testing-7
    -r--r--r--. 1 root root   2883 Dec  5  2016 TRANS.TBL
yum repolist 【检验yum源】
    ...
    repo_local      repo for local
    ...


cd /etc/yum.repos.d/
touch repo_http.repo
vi repo_http.repo
    [repo_http]
    name=repo for http
    baseurl=http://xx.xx.xx.xx/repo/
    enabled=1
    gpgcheck=0

mv CentOS-Base.repo CentOS-Base.repo.bak
mv CentOS-CR.repo CentOS-CR.repo.bak
mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
mv CentOS-fasttrack.repo CentOS-fasttrack.repo.bak
mv CentOS-Media.repo CentOS-Media.repo.bak
mv CentOS-Sources.repo CentOS-Sources.repo.bak
mv CentOS-Vault.repo CentOS-Vault.repo.bak

systemctl start firewalld
systemctl status firewalld
firewall-cmd --permanent --zone=public --add-port=80/tcp
systemctl restart firewalld
    iptables -L -n | grep 已添加的端口
firewall-cmd --state
firewall-cmd --list-all

[验证是否yum生效]
yum repolist

Y yum 仓库管理

yum-config-manageryum 仓库管理命令

yum-config-manager 命令的本质是对 /etc/yum.repos.d/(库数据的储存位置)文件夹下文件的增删查改,推荐使用 yum-config-manager 命令进行改动。

yum-config-manager 命令对资源库进行管理。

  • 查询仓库内容

    yum repolist all # 显示所有资源库

    yum repolist enabled # 显示所有已启动的资源库

    yum repolist disabled # 显示所有被禁用的资源库

搭配grep使用,例如:

# yum repolist all | grep php

  • 添加 repository

    $ yum-config-manager --add-repo repository_url

  • 切换库中资源 : 禁用 + 启用

    yum-config-manager --disable itemName

    yum-config-manager --enable itemName

或者直接编辑 /etc/yum.repos.d/ 下的对应资源库文件

enabled=0 # 禁用
enabled=1 # 启用

如果同时启用了多个版本,安装时会自动选择新版本

  • 删除仓库

/etc/yum.repos.d/ 下手动删除对应 .repo 文件即可。但要注意,这会使得该库中所有信息被删除。

X 参考文献