@cdmonkey
2019-03-13T09:25:33.000000Z
字数 9036
阅读 1508
网络服务
软件源服务支持“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.6
Spawning worker 0 with 4184 pkgs
Workers Finished
Gathering worker results
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite 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 None
Options Indexes
Order allow,deny
Allow 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或者ftp
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[updates]
name=CentOS-$releasever - Updates
baseurl=http://172.16.1.21/CentOS6.6/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[addons]
name=CentOS-$releasever - Addons
baseurl=http://172.16.1.21/CentOS6.6/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=http://172.16.1.21/CentOS6.6/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#additional packages that extend functionality of existing packages
客户端安装软件包的过程解析:
[root@hadoop21 ~]# yum install lrzsz
Loaded 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 Resolution
Dependencies Resolved
=================================================================================================
Package Arch Version Repository Size
=================================================================================================
Installing:
lrzsz x86_64 0.12.20-27.1.el6 addons 71 k
Transaction Summary
=================================================================================================
Install 1 Package(s)
Total download size: 71 k
Installed size: 159 k
Is 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.6
Spawning worker 0 with 4185 pkgs
Workers Finished
Gathering worker results
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite 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/sh
CENTOS=mirrors.ustc.edu.cn/centos
REPO=mirrors.ispros.com.bd/repoforge
EPEL=mirrors.ustc.edu.cn/epel
PATH=/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.list
2
2.1
3
3.1
...
添加脚本定时执行任务:
[root@yum-server ~]# crontab -e
#Rync the source
0 1 * * * /bin/sh /root/crontab/yum_rsync.sh >/dev/null 2>&1
根据不同版本创建三个源的“repo”文件:
[base]
name=CentOS-$releasever - Base - huanqiu.com
baseurl=http://192.168.21.188/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://192.168.21.188/centos/RPM-GPG-KEY-CentOS-6
[updates]
name=CentOS-$releasever - Updates - huanqiu.com
baseurl=http://192.168.21.188/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://192.168.21.188/centos/RPM-GPG-KEY-CentOS-6
[extras]
name=CentOS-$releasever - Extras - huanqiu.com
baseurl=http://192.168.21.188/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://192.168.21.188/centos/RPM-GPG-KEY-CentOS-6
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=http://192.168.21.188/epel/6/$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey =http://192.168.21.188/epel/RPM-GPG-KEY-EPEL-6
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 6 - $basearch - Debug
baseurl=http://192.168.21.188/epel/6/$basearch/debug
failovermethod=priority
enabled=0
gpgcheck=1
gpgkey =http://192.168.21.188/epel/RPM-GPG-KEY-EPEL-6
[epel-source]
name=Extra Packages for Enterprise Linux 6 - $basearch - Source
baseurl=http://192.168.21.188/epel/6/SRPMS
failovermethod=priority
enabled=0
gpgcheck=1
gpgkey =http://192.168.21.188/epel/RPM-GPG-KEY-EPEL-6
[rpmforge]
name = RHEL $releasever - RPMforge.net - dag
baseurl = http://192.168.21.188/repoforge/redhat/el6/en/$basearch/rpmforge
enabled = 1
protect = 0
gpgcheck = 1
gpgkey=http://192.168.21.188/repoforge/RPM-GPG-KEY-rpmforge
[rpmforge-extras]
name = RHEL $releasever - RPMforge.net - extras
baseurl = http://192.168.21.188/repoforge/redhat/el6/en/$basearch/extras
enabled = 0
protect = 0
gpgcheck = 1
gpgkey=http://192.168.21.188/repoforge/RPM-GPG-KEY-rpmforge
[rpmforge-testing]
name = RHEL $releasever - RPMforge.net - testing
baseurl = http://192.168.21.188/repoforge/redhat/el6/en/$basearch/testing
enabled = 0
protect = 0
gpgcheck = 1
gpgkey=http://192.168.21.188/repoforge/RPM-GPG-KEY-rpmforge
yum clean all
yum makecache
yum 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