[关闭]
@cdmonkey 2019-03-13T01:25:33.000000Z 字数 9036 阅读 1455

搭建yum源服务器

网络服务


一、发行版光盘源

1. 基本的光盘源

软件源服务支持“HTTP、FTP、NFS”等方法,这里用http服务器的方法作为演示。搭建软件源服务器涉及到客户端与服务端。

此处输入图片的描述

服务器端

所有要发行的软件包都放在服务器端以提供别人来下载,软件包根据内核的版本号,处理器的版本号分别编译发布。服务器端只要能提供简单的下载就可以了。服务器端有一个最重要的工作就是整理出每个软件包的基本信息,包括所对应的版本号、conf 文件、binary 信息以及很关键的依赖信息。在服务器端上提供了“createrepo”工具,用于把软件包的基本概要信息做成一张“清单”,这张清单就是描述每个软件包的 spec 文件中信息。

首先需要将光盘中的软件包拷贝到指定的本地目录中(该目录将作为 YUM 源的软件包目录)。当然也可以通过将光盘挂载后创建软链接的方式,这样可以节省存储空间。

  1. #挂载光盘镜像并拷贝软件包:
  2. [root@Node-A1 ~]# mount -o loop /dev/cdrom /mnt/cdrom/
  3. [root@Node-A1 ~]# cp /mnt/cdrom/Packages/* /data/yum/CentOS6.6/

http://club.topsage.com/thread-776225-1-1.html
http://bbs.linuxtone.org/thread-4439-1-1.html
http://dreamway.blog.51cto.com/1281816/1110874
http://blog.csdn.net/wangxiaoqiang888/article/details/10960709
http://www.liusuping.com/ubuntu-linux/Redhat-linux-local-yum.html
http://www.centoscn.com/image-text/config/2014/0629/3223.html
http://www.linuxidc.com/Linux/2015-02/113570.htm
http://www.firefoxbug.com/index.php/archives/2777/

创建源:

  1. [root@Node-A1 ~]# yum install -y createrepo
  2. ----------------------
  3. ### Use createrepo to create meta data:
  4. #需要在软件包子目录的上一级目录下执行该指令。因为这是一个数据包创建索引的过程,所以有点慢。
  5. [root@Node-A1 ~]# createrepo /data/yum/CentOS6.6
  6. Spawning worker 0 with 4184 pkgs
  7. Workers Finished
  8. Gathering worker results
  9. Saving Primary metadata
  10. Saving file lists metadata
  11. Saving other metadata
  12. Generating sqlite DBs
  13. Sqlite DBs complete
  14. # repodata:
  15. [root@Node-A1 ~]# ll /data/yum/CentOS6.6/repodata/
  16. total 17912
  17. -rw-r--r-- 1 root root 4101249 2015-07-29 17:28 032a18a1cb3dfc9ebf53...fb3ce-filelists.xml.gz
  18. -rw-r--r-- 1 root root 2157872 2015-07-29 17:28 978b28ec13ead8ca719f...4c801-other.xml.gz
  19. -rw-r--r-- 1 root root 1958670 2015-07-29 17:28 b84e1e25be9a376ddccf...1bf3a-primary.xml.gz
  20. -rw-r--r-- 1 root root 1959677 2015-07-29 17:28 e41db39696f6282ab526...354da-other.sqlite.bz2
  21. -rw-r--r-- 1 root root 3585635 2015-07-29 17:29 eb84ff93f4e7aba1b197...81a24-primary.sqlite.bz2
  22. -rw-r--r-- 1 root root 4562243 2015-07-29 17:28 f007e705b7fcba0c3218...30f40-filelists.sqlite.bz2
  23. -rw-r--r-- 1 root root 3018 2015-07-29 17:29 repomd.xml

注意:repodata目录里面包含了一个以.xml结尾的文件,这个文件是索引文件,包含了软件包的一些信息,比如依赖关系这些的。通过它用“yum”安装才能在自动解决,而其工作原理并不复杂,每一个软件的头(header)里面都会纪录该软件的依赖关系,那么如果可以将该头的内容纪录下来并且进行分析,可以知道每个软件在安装之前需要额外安装哪些基础软件。也就是说,在服务器上面先以分析工具将所有的软件包档案进行分析,然后将该分析纪录下来,只要在进行安装或升级时先查询该纪录的文件,就可以知道所有相关联的软件。

Install and config web server

  1. # Install Web Server:
  2. [root@Node-A1 ~]# yum install -y httpd
  3. [root@Node-A1 ~]# vim /etc/httpd/conf/httpd.conf
  4. #配置文件的结尾处添加如下的内容:
  5. Alias /CentOS6.6 "/data/yum/CentOS6.6"
  6. <Directory "/data/yum/CentOS6.6">
  7. AllowOverride None
  8. Options Indexes
  9. Order allow,deny
  10. Allow from all
  11. </Directory>
  12. #完成后后重启服务即可:
  13. [root@Node-A1 ~]# /etc/init.d/httpd restart

客户端

客户端如果需要安装某个软件时,先下载服务器上面记录的依赖性关系文件,通过对服务器端下载的纪录数据进行分析,然后取得所有相关的软件,一次全部下载后进行安装。

客户端通过“yum”进行软件包安装时,只会读取yum.repos.d目录下面的.repo文件,所以需要对其进行修改。首先要备份配置文件:

  1. [root@Node-A2 ~]# cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

然后需要修改配置文件,将下载源指向我们搭建的服务器。

  1. [root@Node-A2 ~]# vim /etc/yum.repos.d/CentOS-Base.repo
  2. -----------------------
  3. [base] #方括号里面写仓库标识(reposiyory ID),名称可以随便取,但必须唯一。
  4. name=CentOS-$releasever - Base #该行设定yum的名称,同样可以随便取,但也必须唯一。
  5. baseurl=http://172.16.1.21/CentOS6.6/ #指定可以通过本机使用http或者ftp
  6. gpgcheck=1
  7. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
  8. [updates]
  9. name=CentOS-$releasever - Updates
  10. baseurl=http://172.16.1.21/CentOS6.6/
  11. gpgcheck=1
  12. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
  13. [addons]
  14. name=CentOS-$releasever - Addons
  15. baseurl=http://172.16.1.21/CentOS6.6/
  16. gpgcheck=1
  17. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
  18. #additional packages that may be useful
  19. [extras]
  20. name=CentOS-$releasever - Extras
  21. baseurl=http://172.16.1.21/CentOS6.6/
  22. gpgcheck=1
  23. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
  24. #additional packages that extend functionality of existing packages

客户端安装软件包的过程解析:

  1. [root@hadoop21 ~]# yum install lrzsz
  2. Loaded plugins: fastestmirror, security #加载插件
  3. Setting up Install Process #设置安装进程
  4. Loading mirror speeds from cached hostfile #读取本地的缓存文件
  5. ...
  6. Resolving Dependencies #解析软件包的依赖关系。
  7. --> Running transaction check
  8. ---> Package lrzsz.x86_64 0:0.12.20-27.1.el6 will be installed
  9. --> Finished Dependency Resolution
  10. Dependencies Resolved
  11. =================================================================================================
  12. Package Arch Version Repository Size
  13. =================================================================================================
  14. Installing:
  15. lrzsz x86_64 0.12.20-27.1.el6 addons 71 k
  16. Transaction Summary
  17. =================================================================================================
  18. Install 1 Package(s)
  19. Total download size: 71 k
  20. Installed size: 159 k
  21. Is this ok [y/N]:

客户端会定期去更新服务器上的软件包“清单”,然后把清单下载保存到自己本地的缓存里面,而每次调用“yum”安装软件包的时候都会去这个缓存目录下去找清单,根据里面的软件包描述从而来确定安装包的名字、版本号以及所需要的依赖包等,然后再去服务器下载对应的软件包进行安装。

报错的解决方法:

  1. Warning: RPMDB altered outside of yum.
  2. #解决方法:删除安装的历史记录
  3. [root@Node-A2 ~]# rm -rf /var/lib/yum/history/*.sqlite

2. 添加软件包

http://dreamway.blog.51cto.com/1281816/1110874

如果要安装一个软件,而基于关盘的源无法满足需求时,要怎样解决呢?最先想到的是将需要的“rpm”软件包上传到光盘源的软件包目录中,这样不就可以安装了吗?但事实是,没有这么简单。

  1. #首先要上传相应的软件包。
  2. #接下来需要将以前生成的元数据清空:
  3. [root@Node-A1 ~]# cd /data/yum/CentOS6.6/repodata/
  4. [root@Node-A1 repodata]# mv * /tmp
  5. #重新构建软件源同时生成新的元数据:
  6. [root@Node-A1 ~]# createrepo /data/yum/CentOS6.6
  7. Spawning worker 0 with 4185 pkgs
  8. Workers Finished
  9. Gathering worker results
  10. Saving Primary metadata
  11. Saving file lists metadata
  12. Saving other metadata
  13. Generating sqlite DBs
  14. Sqlite DBs complete

服务端完成上述操作后,在客户端还需要清除本地缓存,最后就可以正常安装了。

  1. [root@Node-A2 ~]# yum clean all
  2. [root@Node-A2 ~]# yum makecache

二、企业实例

三、官方镜像源

http://www.aiplaypc.com/94.html
http://www.dwhd.org/20150720_191117.html
http://itgeeker.net/centos-7-epel-china-mirror-repository

我们可使用“Rsync”协议将外部的软件源同步到企业内部的服务器上。

1. Install Web Server

  1. [root@T9-YUM ~]# yum install -y httpd

创建镜像文件存放目录(这里创建三个文件夹,分别存放官方标准源、第三方的rpmforge源和epel源):

  1. [root@yum-server ~]# mkdir /var/www/html/centos
  2. [root@yum-server ~]# mkdir /var/www/html/repoforge
  3. [root@yum-server ~]# mkdir /var/www/html/epel

2. Rsync from External Yum source

确定以上三个软件源上游源的同步镜像地址(上游源必须要支持“rsync”协议,否则不能进行同步):

CentOS:rsync://mirrors.ustc.edu.cn/centos/
rpmforge:rsync://mirrors.ispros.com.bd/repoforge/
epel:rsync://mirrors.ustc.edu.cn/epel/

首次同步时间比较漫长(而且非常容易发生中断)。首次同步完成后我们就可以通过定时任务进行定期的同步。

BASE

  1. rsync -avrtH --delete --bwlimit=2048 --exclude "isos" rsync://mirrors.kernel.org/centos/6/ /var/www/html/centos/6.7

EPEL

  1. rsync -avrtH --delete --bwlimit=2048 rsync://rsync.mirrors.ustc.edu.cn/epel/6/ /var/www/html/epel/6/

3. Create Crontab

创建以上三个源的同步脚本,并且设定脚本自动执行:

  1. [root@yum-server ~]# mkdir crontab
  2. [root@yum-server ~]# vim /root/crontab/yum_rsync.sh
  3. #!/bin/sh
  4. CENTOS=mirrors.ustc.edu.cn/centos
  5. REPO=mirrors.ispros.com.bd/repoforge
  6. EPEL=mirrors.ustc.edu.cn/epel
  7. PATH=/var/www/html
  8. /usr/bin/rsync -avrt rsync://${CENTOS}/ --exclude-from=${PATH}/ex_centos.list ${PATH}/centos/
  9. /usr/bin/rsync -avrt rsync://${REPO}/ --exclude-from=${PATH}/ex_repoforge.list ${PATH}/repoforge/
  10. /usr/bin/rsync -avrt rsync://${EPEL}/ --exclude-from=${PATH}/ex_epel.list ${PATH}/epel/
  11. ----------------
  12. [root@yum-server ~]# chmod +x /root/crontab/yum_rsync.sh

备注:运行此脚本前,先要创建好同步目录及不需要同步的目录列表文件。

  1. [root@yum-server ~]# cd /var/www/html/
  2. [root@yum-server html]# touch ex_centos.list ex_repoforge.list ex_epel.list

把不需要同步的目录写到上面对应的文件中,每行一个目录,如下所示:

  1. [root@yum-server ~]# vim /var/www/html/ex_centos.list
  2. 2
  3. 2.1
  4. 3
  5. 3.1
  6. ...

添加脚本定时执行任务:

  1. [root@yum-server ~]# crontab -e
  2. #Rync the source
  3. 0 1 * * * /bin/sh /root/crontab/yum_rsync.sh >/dev/null 2>&1

4. Create Repo File

根据不同版本创建三个源的“repo”文件:

Repo

  1. [base]
  2. name=CentOS-$releasever - Base - huanqiu.com
  3. baseurl=http://192.168.21.188/centos/$releasever/os/$basearch/
  4. gpgcheck=1
  5. gpgkey=http://192.168.21.188/centos/RPM-GPG-KEY-CentOS-6
  6. [updates]
  7. name=CentOS-$releasever - Updates - huanqiu.com
  8. baseurl=http://192.168.21.188/centos/$releasever/updates/$basearch/
  9. gpgcheck=1
  10. gpgkey=http://192.168.21.188/centos/RPM-GPG-KEY-CentOS-6
  11. [extras]
  12. name=CentOS-$releasever - Extras - huanqiu.com
  13. baseurl=http://192.168.21.188/centos/$releasever/extras/$basearch/
  14. gpgcheck=1
  15. gpgkey=http://192.168.21.188/centos/RPM-GPG-KEY-CentOS-6

Epel

  1. [epel]
  2. name=Extra Packages for Enterprise Linux 6 - $basearch
  3. baseurl=http://192.168.21.188/epel/6/$basearch
  4. failovermethod=priority
  5. enabled=1
  6. gpgcheck=1
  7. gpgkey =http://192.168.21.188/epel/RPM-GPG-KEY-EPEL-6
  8. [epel-debuginfo]
  9. name=Extra Packages for Enterprise Linux 6 - $basearch - Debug
  10. baseurl=http://192.168.21.188/epel/6/$basearch/debug
  11. failovermethod=priority
  12. enabled=0
  13. gpgcheck=1
  14. gpgkey =http://192.168.21.188/epel/RPM-GPG-KEY-EPEL-6
  15. [epel-source]
  16. name=Extra Packages for Enterprise Linux 6 - $basearch - Source
  17. baseurl=http://192.168.21.188/epel/6/SRPMS
  18. failovermethod=priority
  19. enabled=0
  20. gpgcheck=1
  21. gpgkey =http://192.168.21.188/epel/RPM-GPG-KEY-EPEL-6

Repoforge

  1. [rpmforge]
  2. name = RHEL $releasever - RPMforge.net - dag
  3. baseurl = http://192.168.21.188/repoforge/redhat/el6/en/$basearch/rpmforge
  4. enabled = 1
  5. protect = 0
  6. gpgcheck = 1
  7. gpgkey=http://192.168.21.188/repoforge/RPM-GPG-KEY-rpmforge
  8. [rpmforge-extras]
  9. name = RHEL $releasever - RPMforge.net - extras
  10. baseurl = http://192.168.21.188/repoforge/redhat/el6/en/$basearch/extras
  11. enabled = 0
  12. protect = 0
  13. gpgcheck = 1
  14. gpgkey=http://192.168.21.188/repoforge/RPM-GPG-KEY-rpmforge
  15. [rpmforge-testing]
  16. name = RHEL $releasever - RPMforge.net - testing
  17. baseurl = http://192.168.21.188/repoforge/redhat/el6/en/$basearch/testing
  18. enabled = 0
  19. protect = 0
  20. gpgcheck = 1
  21. gpgkey=http://192.168.21.188/repoforge/RPM-GPG-KEY-rpmforge
  1. yum clean all
  2. yum makecache
  3. yum repolist

http://club.topsage.com/thread-776225-1-1.html

CentOS 7

  1. [root@yum-server ~]# cd /var/www/html/
  2. [root@yum-server html]# mkdir -pv centos7/7.3

同步

  1. rsync -avrtH --delete --bwlimit=2048 --exclude "isos" rsync://mirrors.kernel.org/centos/7/ /var/www/html/centos7/7.3
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注