在RHEL
及Centos
系列linux
发行版中,Yum
是我们安装软件包最为常用的工具,相较于单独安装单个软件包的rpm
工具,Yum
能够自动获取各个软件包之间的依赖关系并且能够一并下载安装,非常的简单方便。但是Yum
工具非常依赖Yum
工具获取软件包的目录,通常是在线的各大镜像站点,我们称之为Yum仓库
。
但有时在工作中,我们可能很难实时接触到互联网,或者从流量成本考虑,反复从互联网下载软件包花费大而且占用带宽,此时,构建本地Yum仓库
会是个不错的选择。本文将介绍如何构建本地Yum仓库
,并通过Ningx
搭建的Http
服务分发出去。
Yum
工具需要依靠Repo文件得到Yum仓库
的基本信息,例如仓库路径,仓库标志。我们首先需要根据在线的镜像站点创建一个Repo文件,而且只能在指定的路径/etc/yum.repos.d/
下创建,否则Yum
将无法识别该文件。
[root@node1 ~]#cd /etc/yum.repos.d
[root@node1 yum.repos.d]#ls
repobackup selfbuild.repo
[root@node1 yum.repos.d]#touch test.repo
[root@node1 yum.repos.d]#ls
repobackup selfbuild.repo test.repo
以在线Mariadb
仓库为例:
[root@node1 yum.repos.d]#cat test.repo
[Mariadb]
name= Mariadb Local Repository
baseurl= https://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos/7/x86_64/
gpgcheck= 0
enabled= 1
[root@node1 yum.repos.d]#yum repolist all
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id repo name status
CDRom cdrom enabled: 9,363
EPEL epel-aliyun enabled: 12,131
Mariadb Mariadb Local Repository enabled: 14
repolist: 21,508
这样mariadb
的在线仓库就能够投入使用了,但这不是我们的目的,我们需要通过这个在线仓库获取仓库内的所有软件包。
在构建本地Yum仓库
时需要用到两个工具reposync
和createrepo
,分别来自yum-utils
包和createrepo
包。reposync
用于同步远程Yum仓库
至本地路径,createrepo
用于生成安装包元数据信息。直接使用现有的在线EPEL源安装即可
[root@node1 yum.repos.d]#yum -y install yum-utils createrepo
[root@node1 yum.repos.d]#reposync --help
Usage:
Reposync is used to synchronize a remote yum repository to a local
directory using yum to retrieve the packages.
/usr/bin/reposync [options]
…… ……
[root@node1 yum.repos.d]#createrepo --help
Usage: genpkgmetadata.py [options]
…… ……
在本地创建一个目录专门用于存放软件包构建Yum仓库
,然后使用reposync
同步在线仓库的软件包至本地。reposync
的使用格式为reposync -g -m -r REPO-ID -p PATH
,REPO-ID
为需要同步的Yum仓库
的标志,PATH
为本地目录。
[root@node1 yum.repos.d]#mkdir /app/repository
[root@node1 yum.repos.d]#cd /app/repository
[root@node1 repository]#reposync -g -m -r Mariadb -p /app/repository
(1/18): MariaDB-10.2.11-centos7-x86_64-aws-key-management.rpm | 1.2 MB 00:00:01
(2/18): MariaDB-10.2.11-centos7-x86_64-backup.rpm | 39 MB 00:00:10
(3/18): MariaDB-10.2.11-centos7-x86_64-common.rpm | 154 kB 00:00:00
(4/18): MariaDB-10.2.11-centos7-x86_64-compat.rpm | 2.8 MB 00:00:00
(5/18): MariaDB-10.2.11-centos7-x86_64-connect-engine.rpm | 2.5 MB 00:00:00
(6/18): MariaDB-10.2.11-centos7-x86_64-cracklib-password-check.rpm | 16 kB 00:00:00
(7/18): MariaDB-10.2.11-centos7-x86_64-devel.rpm | 6.6 MB 00:00:02
(8/18): MariaDB-10.2.11-centos7-x86_64-client.rpm | 48 MB 00:00:14
(9/18): MariaDB-10.2.11-centos7-x86_64-gssapi-server.rpm | 46 kB 00:00:01
(10/18): MariaDB-10.2.11-centos7-x86_64-oqgraph-engine.rpm | 604 kB 00:00:00
(11/18): MariaDB-10.2.11-centos7-x86_64-rocksdb-engine.rpm | 69 MB 00:00:21
(12/18): MariaDB-10.2.11-centos7-x86_64-shared.rpm | 393 kB 00:00:01
(13/18): MariaDB-10.2.11-centos7-x86_64-server.rpm | 110 MB 00:00:33
(14/18): MariaDB-10.2.11-centos7-x86_64-tokudb-engine.rpm | 5.4 MB 00:00:07
(15/18): MariaDB-10.2.11-centos7-x86_64-test.rpm | 92 MB 00:00:22
(16/18): galera-25.3.22-1.rhel7.el7.centos.x86_64.rpm | 8.0 MB 00:00:04
(17/18): jemalloc-devel-3.6.0-1.el7.x86_64.rpm | 22 kB 00:00:00
(18/18): jemalloc-3.6.0-1.el7.x86_64.rpm | 104 kB 00:00:00
软件包下载完成:
[root@node1 repository]#ls
Mariadb
[root@node1 repository]#ls Mariadb/rpms/
galera-25.3.22-1.rhel7.el7.centos.x86_64.rpm
jemalloc-3.6.0-1.el7.x86_64.rpm
jemalloc-devel-3.6.0-1.el7.x86_64.rpm
MariaDB-10.2.11-centos7-x86_64-aws-key-management.rpm
MariaDB-10.2.11-centos7-x86_64-backup.rpm
MariaDB-10.2.11-centos7-x86_64-client.rpm
MariaDB-10.2.11-centos7-x86_64-common.rpm
MariaDB-10.2.11-centos7-x86_64-compat.rpm
MariaDB-10.2.11-centos7-x86_64-connect-engine.rpm
MariaDB-10.2.11-centos7-x86_64-cracklib-password-check.rpm
MariaDB-10.2.11-centos7-x86_64-devel.rpm
MariaDB-10.2.11-centos7-x86_64-gssapi-server.rpm
MariaDB-10.2.11-centos7-x86_64-oqgraph-engine.rpm
MariaDB-10.2.11-centos7-x86_64-rocksdb-engine.rpm
MariaDB-10.2.11-centos7-x86_64-server.rpm
MariaDB-10.2.11-centos7-x86_64-shared.rpm
MariaDB-10.2.11-centos7-x86_64-test.rpm
MariaDB-10.2.11-centos7-x86_64-tokudb-engine.rpm
前面我们提到,已下载到本地的软件包需要使用createrepo
工具创建元数据目录,命令格式为createrepo PATH
,要注意PATH
为下载的软件包所在的目录。
[root@node1 repository]#
[root@node1 repository]#cd Mariadb/rpms/
[root@node1 rpms]#createrepo /app/repository/Mariadb/rpms/
Spawning worker 0 with 5 pkgs
Spawning worker 1 with 5 pkgs
Spawning worker 2 with 4 pkgs
Spawning worker 3 with 4 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
本地的Yum仓库
创建好后需要修改Repo文件指向该目录,否则mariadb还是会指向在线站点。
[root@node1 rpms]#cat /etc/yum.repos.d/test.repo
[Mariadb]
name= Mariadb Local Repository
# baseurl= https://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos/7/x86_64/
baseurl= file:///app/repository/Mariadb/rpms/
gpgcheck= 0
enabled= 1
[root@node1 rpms]#yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: CDRom EPEL Mariadb
Cleaning up everything
[root@node1 rpms]#
[root@node1 rpms]#
[root@node1 rpms]#yum repolist all
Loaded plugins: fastestmirror, langpacks
CDRom | 3.6 kB 00:00:00
EPEL | 4.7 kB 00:00:00
Mariadb | 2.9 kB 00:00:00
(1/6): CDRom/group_gz | 155 kB 00:00:00
(2/6): CDRom/primary_db | 5.6 MB 00:00:00
(3/6): EPEL/group_gz | 266 kB 00:00:00
(4/6): Mariadb/primary_db | 21 kB 00:00:00
(5/6): EPEL/updateinfo | 858 kB 00:00:00
(6/6): EPEL/primary_db | 6.1 MB 00:00:00
Determining fastest mirrors
repo id repo name status
CDRom cdrom enabled: 9,363
EPEL epel-aliyun enabled: 12,131
Mariadb Mariadb Local Repository enabled: 18
repolist: 21,512
[root@node1 rpms]#yum list all Mariadb-server*
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Available Packages
MariaDB-server.x86_64 10.2.11-1.el7.centos Mariadb
mariadb-server.x86_64 1:5.5.52-1.el7 CDRom
至此,MariaDB
的本地Yum仓库
搭建完毕。
MariaDB
的本地Yum仓库
搭建完成,我们还应该为Yum
仓库搭建Http
环境对以方便Yum
仓库通过Web对外提供服务。此处,我们选用Nginx
提供Http
服务。
[root@node1 rpms]#yum -y install nginx
…… ……
[root@node1 rpms]#cd /etc/nginx/conf.d/
在/etc/nginx/conf.d
路径下创建配置文件yum.conf
:
[root@node1 conf.d]#cat yum.conf
server {
listen 80 default_server;
root /usr/share/nginx/html;
location /yum {
alias /app/repository;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
重启服务:
[root@node1 conf.d]#systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@node1 conf.d]#systemctl start nginx.service
[root@node1 conf.d]#systemctl status nginx.service
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2017-12-10 16:10:20 CST; 4min 39s ago
Main PID: 41957 (nginx)
…… ……
[root@node1 conf.d]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:111 *:*
LISTEN 0 128 *:80 *:*
LISTEN 0 32 *:21 *:*
LISTEN 0 10 192.168.122.1:53 *:*
LISTEN 0 10 172.18.42.20:53 *:*
端口监听正常,这样访问http://IP/yum
就能获取Yum仓库
列表了。