基于Nginx本地Yum仓库的搭建

基于Nginx本地Yum仓库的搭建

RHELCentos系列linux发行版中,Yum是我们安装软件包最为常用的工具,相较于单独安装单个软件包的rpm工具,Yum能够自动获取各个软件包之间的依赖关系并且能够一并下载安装,非常的简单方便。但是Yum工具非常依赖Yum工具获取软件包的目录,通常是在线的各大镜像站点,我们称之为Yum仓库
但有时在工作中,我们可能很难实时接触到互联网,或者从流量成本考虑,反复从互联网下载软件包花费大而且占用带宽,此时,构建本地Yum仓库会是个不错的选择。本文将介绍如何构建本地Yum仓库,并通过Ningx搭建的Http服务分发出去。

基于在线镜像站点创建Repo文件

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仓库时需要用到两个工具reposynccreaterepo,分别来自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

重建本地仓库的Repo文件

本地的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仓库搭建完毕。

为Yum仓库搭建Web服务

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仓库列表了。

你可能感兴趣的:(linux,运维)