@cdmonkey
2019-03-13T01:25:33.000000Z
字数 9036
阅读 1667
网络服务
软件源服务支持“HTTP、FTP、NFS”等方法,这里用http服务器的方法作为演示。搭建软件源服务器涉及到客户端与服务端。

所有要发行的软件包都放在服务器端以提供别人来下载,软件包根据内核的版本号,处理器的版本号分别编译发布。服务器端只要能提供简单的下载就可以了。服务器端有一个最重要的工作就是整理出每个软件包的基本信息,包括所对应的版本号、conf 文件、binary 信息以及很关键的依赖信息。在服务器端上提供了“createrepo”工具,用于把软件包的基本概要信息做成一张“清单”,这张清单就是描述每个软件包的 spec 文件中信息。
首先需要将光盘中的软件包拷贝到指定的本地目录中(该目录将作为 YUM 源的软件包目录)。当然也可以通过将光盘挂载后创建软链接的方式,这样可以节省存储空间。
#挂载光盘镜像并拷贝软件包:[root@Node-A1 ~]# mount -o loop /dev/cdrom /mnt/cdrom/[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/
创建源:
[root@Node-A1 ~]# yum install -y createrepo----------------------### Use createrepo to create meta data:#需要在软件包子目录的上一级目录下执行该指令。因为这是一个数据包创建索引的过程,所以有点慢。[root@Node-A1 ~]# createrepo /data/yum/CentOS6.6Spawning worker 0 with 4184 pkgsWorkers FinishedGathering worker resultsSaving Primary metadataSaving file lists metadataSaving other metadataGenerating sqlite DBsSqlite DBs complete# repodata:[root@Node-A1 ~]# ll /data/yum/CentOS6.6/repodata/total 17912-rw-r--r-- 1 root root 4101249 2015-07-29 17:28 032a18a1cb3dfc9ebf53...fb3ce-filelists.xml.gz-rw-r--r-- 1 root root 2157872 2015-07-29 17:28 978b28ec13ead8ca719f...4c801-other.xml.gz-rw-r--r-- 1 root root 1958670 2015-07-29 17:28 b84e1e25be9a376ddccf...1bf3a-primary.xml.gz-rw-r--r-- 1 root root 1959677 2015-07-29 17:28 e41db39696f6282ab526...354da-other.sqlite.bz2-rw-r--r-- 1 root root 3585635 2015-07-29 17:29 eb84ff93f4e7aba1b197...81a24-primary.sqlite.bz2-rw-r--r-- 1 root root 4562243 2015-07-29 17:28 f007e705b7fcba0c3218...30f40-filelists.sqlite.bz2-rw-r--r-- 1 root root 3018 2015-07-29 17:29 repomd.xml
注意:repodata目录里面包含了一个以.xml结尾的文件,这个文件是索引文件,包含了软件包的一些信息,比如依赖关系这些的。通过它用“yum”安装才能在自动解决,而其工作原理并不复杂,每一个软件的头(header)里面都会纪录该软件的依赖关系,那么如果可以将该头的内容纪录下来并且进行分析,可以知道每个软件在安装之前需要额外安装哪些基础软件。也就是说,在服务器上面先以分析工具将所有的软件包档案进行分析,然后将该分析纪录下来,只要在进行安装或升级时先查询该纪录的文件,就可以知道所有相关联的软件。
# Install Web Server:[root@Node-A1 ~]# yum install -y httpd[root@Node-A1 ~]# vim /etc/httpd/conf/httpd.conf#配置文件的结尾处添加如下的内容:Alias /CentOS6.6 "/data/yum/CentOS6.6"<Directory "/data/yum/CentOS6.6">AllowOverride NoneOptions IndexesOrder allow,denyAllow from all</Directory>#完成后后重启服务即可:[root@Node-A1 ~]# /etc/init.d/httpd restart
客户端如果需要安装某个软件时,先下载服务器上面记录的依赖性关系文件,通过对服务器端下载的纪录数据进行分析,然后取得所有相关的软件,一次全部下载后进行安装。
客户端通过“yum”进行软件包安装时,只会读取yum.repos.d目录下面的.repo文件,所以需要对其进行修改。首先要备份配置文件:
[root@Node-A2 ~]# cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
然后需要修改配置文件,将下载源指向我们搭建的服务器。
[root@Node-A2 ~]# vim /etc/yum.repos.d/CentOS-Base.repo-----------------------[base] #方括号里面写仓库标识(reposiyory ID),名称可以随便取,但必须唯一。name=CentOS-$releasever - Base #该行设定yum的名称,同样可以随便取,但也必须唯一。baseurl=http://172.16.1.21/CentOS6.6/ #指定可以通过本机使用http或者ftpgpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6[updates]name=CentOS-$releasever - Updatesbaseurl=http://172.16.1.21/CentOS6.6/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6[addons]name=CentOS-$releasever - Addonsbaseurl=http://172.16.1.21/CentOS6.6/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6#additional packages that may be useful[extras]name=CentOS-$releasever - Extrasbaseurl=http://172.16.1.21/CentOS6.6/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6#additional packages that extend functionality of existing packages
客户端安装软件包的过程解析:
[root@hadoop21 ~]# yum install lrzszLoaded plugins: fastestmirror, security #加载插件Setting up Install Process #设置安装进程Loading mirror speeds from cached hostfile #读取本地的缓存文件...Resolving Dependencies #解析软件包的依赖关系。--> Running transaction check---> Package lrzsz.x86_64 0:0.12.20-27.1.el6 will be installed--> Finished Dependency ResolutionDependencies Resolved=================================================================================================Package Arch Version Repository Size=================================================================================================Installing:lrzsz x86_64 0.12.20-27.1.el6 addons 71 kTransaction Summary=================================================================================================Install 1 Package(s)Total download size: 71 kInstalled size: 159 kIs this ok [y/N]:
客户端会定期去更新服务器上的软件包“清单”,然后把清单下载保存到自己本地的缓存里面,而每次调用“yum”安装软件包的时候都会去这个缓存目录下去找清单,根据里面的软件包描述从而来确定安装包的名字、版本号以及所需要的依赖包等,然后再去服务器下载对应的软件包进行安装。
报错的解决方法:
Warning: RPMDB altered outside of yum.#解决方法:删除安装的历史记录[root@Node-A2 ~]# rm -rf /var/lib/yum/history/*.sqlite
如果要安装一个软件,而基于关盘的源无法满足需求时,要怎样解决呢?最先想到的是将需要的“rpm”软件包上传到光盘源的软件包目录中,这样不就可以安装了吗?但事实是,没有这么简单。
#首先要上传相应的软件包。#接下来需要将以前生成的元数据清空:[root@Node-A1 ~]# cd /data/yum/CentOS6.6/repodata/[root@Node-A1 repodata]# mv * /tmp#重新构建软件源同时生成新的元数据:[root@Node-A1 ~]# createrepo /data/yum/CentOS6.6Spawning worker 0 with 4185 pkgsWorkers FinishedGathering worker resultsSaving Primary metadataSaving file lists metadataSaving other metadataGenerating sqlite DBsSqlite DBs complete
服务端完成上述操作后,在客户端还需要清除本地缓存,最后就可以正常安装了。
[root@Node-A2 ~]# yum clean all[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”协议将外部的软件源同步到企业内部的服务器上。
[root@T9-YUM ~]# yum install -y httpd
创建镜像文件存放目录(这里创建三个文件夹,分别存放官方标准源、第三方的rpmforge源和epel源):
[root@yum-server ~]# mkdir /var/www/html/centos[root@yum-server ~]# mkdir /var/www/html/repoforge[root@yum-server ~]# mkdir /var/www/html/epel
确定以上三个软件源上游源的同步镜像地址(上游源必须要支持“rsync”协议,否则不能进行同步):
CentOS:rsync://mirrors.ustc.edu.cn/centos/
rpmforge:rsync://mirrors.ispros.com.bd/repoforge/
epel:rsync://mirrors.ustc.edu.cn/epel/
首次同步时间比较漫长(而且非常容易发生中断)。首次同步完成后我们就可以通过定时任务进行定期的同步。
rsync -avrtH --delete --bwlimit=2048 --exclude "isos" rsync://mirrors.kernel.org/centos/6/ /var/www/html/centos/6.7
rsync -avrtH --delete --bwlimit=2048 rsync://rsync.mirrors.ustc.edu.cn/epel/6/ /var/www/html/epel/6/
创建以上三个源的同步脚本,并且设定脚本自动执行:
[root@yum-server ~]# mkdir crontab[root@yum-server ~]# vim /root/crontab/yum_rsync.sh#!/bin/shCENTOS=mirrors.ustc.edu.cn/centosREPO=mirrors.ispros.com.bd/repoforgeEPEL=mirrors.ustc.edu.cn/epelPATH=/var/www/html/usr/bin/rsync -avrt rsync://${CENTOS}/ --exclude-from=${PATH}/ex_centos.list ${PATH}/centos//usr/bin/rsync -avrt rsync://${REPO}/ --exclude-from=${PATH}/ex_repoforge.list ${PATH}/repoforge//usr/bin/rsync -avrt rsync://${EPEL}/ --exclude-from=${PATH}/ex_epel.list ${PATH}/epel/----------------[root@yum-server ~]# chmod +x /root/crontab/yum_rsync.sh
备注:运行此脚本前,先要创建好同步目录及不需要同步的目录列表文件。
[root@yum-server ~]# cd /var/www/html/[root@yum-server html]# touch ex_centos.list ex_repoforge.list ex_epel.list
把不需要同步的目录写到上面对应的文件中,每行一个目录,如下所示:
[root@yum-server ~]# vim /var/www/html/ex_centos.list22.133.1...
添加脚本定时执行任务:
[root@yum-server ~]# crontab -e#Rync the source0 1 * * * /bin/sh /root/crontab/yum_rsync.sh >/dev/null 2>&1
根据不同版本创建三个源的“repo”文件:
[base]name=CentOS-$releasever - Base - huanqiu.combaseurl=http://192.168.21.188/centos/$releasever/os/$basearch/gpgcheck=1gpgkey=http://192.168.21.188/centos/RPM-GPG-KEY-CentOS-6[updates]name=CentOS-$releasever - Updates - huanqiu.combaseurl=http://192.168.21.188/centos/$releasever/updates/$basearch/gpgcheck=1gpgkey=http://192.168.21.188/centos/RPM-GPG-KEY-CentOS-6[extras]name=CentOS-$releasever - Extras - huanqiu.combaseurl=http://192.168.21.188/centos/$releasever/extras/$basearch/gpgcheck=1gpgkey=http://192.168.21.188/centos/RPM-GPG-KEY-CentOS-6
[epel]name=Extra Packages for Enterprise Linux 6 - $basearchbaseurl=http://192.168.21.188/epel/6/$basearchfailovermethod=priorityenabled=1gpgcheck=1gpgkey =http://192.168.21.188/epel/RPM-GPG-KEY-EPEL-6[epel-debuginfo]name=Extra Packages for Enterprise Linux 6 - $basearch - Debugbaseurl=http://192.168.21.188/epel/6/$basearch/debugfailovermethod=priorityenabled=0gpgcheck=1gpgkey =http://192.168.21.188/epel/RPM-GPG-KEY-EPEL-6[epel-source]name=Extra Packages for Enterprise Linux 6 - $basearch - Sourcebaseurl=http://192.168.21.188/epel/6/SRPMSfailovermethod=priorityenabled=0gpgcheck=1gpgkey =http://192.168.21.188/epel/RPM-GPG-KEY-EPEL-6
[rpmforge]name = RHEL $releasever - RPMforge.net - dagbaseurl = http://192.168.21.188/repoforge/redhat/el6/en/$basearch/rpmforgeenabled = 1protect = 0gpgcheck = 1gpgkey=http://192.168.21.188/repoforge/RPM-GPG-KEY-rpmforge[rpmforge-extras]name = RHEL $releasever - RPMforge.net - extrasbaseurl = http://192.168.21.188/repoforge/redhat/el6/en/$basearch/extrasenabled = 0protect = 0gpgcheck = 1gpgkey=http://192.168.21.188/repoforge/RPM-GPG-KEY-rpmforge[rpmforge-testing]name = RHEL $releasever - RPMforge.net - testingbaseurl = http://192.168.21.188/repoforge/redhat/el6/en/$basearch/testingenabled = 0protect = 0gpgcheck = 1gpgkey=http://192.168.21.188/repoforge/RPM-GPG-KEY-rpmforge
yum clean allyum makecacheyum repolist
http://club.topsage.com/thread-776225-1-1.html
[root@yum-server ~]# cd /var/www/html/[root@yum-server html]# mkdir -pv centos7/7.3
同步
rsync -avrtH --delete --bwlimit=2048 --exclude "isos" rsync://mirrors.kernel.org/centos/7/ /var/www/html/centos7/7.3