配置本地yum源

北城余情 提交于 2019-12-04 13:26:25

配置本地系统镜像yum源

挂载系统镜像

# mount -o loop /opt/CentOS-6.6-x86_64-bin-DVD1.iso /mnt
# cd /mnt
# ls
CentOS_BuildTag  EULA  images    Packages                  repodata              RPM-GPG-KEY-CentOS-Debug-6     RPM-GPG-KEY-CentOS-Testing-6
EFI              GPL   isolinux  RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-6  RPM-GPG-KEY-CentOS-Security-6  TRANS.TBL

查看yum源配置文件 ---若机器未联网,可以将默认的其它配置文件移动到其它目录

# vi /etc/yum.repos.d/local-yum.repo

[local-yum]
name=local-yum
baseurl=file:///mnt/Packages/
enabled=1
gpgcheck=0

需要执行命令生成repomd.xml

# createrepo /mnt/Packages/
-bash: createrepo: command not found

说明未安装createrepo 

进入软件包目录,直接手动先安装createrepo

# cd /mnt/Packages/
# rpm -ivh createrepo-0.9.9-22.el6.noarch.rpm

warning: createrepo-0.9.9-22.el6.noarch.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
error: Failed dependencies:

        python-deltarpm is needed by createrepo-0.9.9-22.el6.noarch

发现缺少依赖包,只能手动先安装依赖包

# rpm -ivh python-deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm 

warning: python-deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
error: Failed dependencies:

        deltarpm = 3.5-0.5.20090913git.el6 is needed by python-deltarpm-3.5-0.5.20090913git.el6.x86_64

# rpm -ivh deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm 

warning: deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]

   1:deltarpm               ########################################### [100%] 

# rpm -ivh python-deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm
warning: python-deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
   1:python-deltarpm        ########################################### [100%]
# rpm -ivh createrepo-0.9.9-22.el6.noarch.rpm
warning: createrepo-0.9.9-22.el6.noarch.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
   1:createrepo             ########################################### [100%]

 

createrepo 命令安装完成后,再次执行

# createrepo /mnt/Packages/
Directory /mnt/Packages/ must be writable.

从iso镜像里挂载出来的始终是可读的,更改iso的权限都不行,于是把/mnt/Packages/ copy到/opt/Packages,修改local-yum

[local-yum]
name=local-yum
baseurl=file:///opt/Packages/
enabled=1
gpgcheck=0

重新执行

# createrepo /opt/Packages/

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

终于成功了:

# yum clean all
Loaded plugins: fastestmirror, security
Cleaning repos: local-yum
Cleaning up Everything
Cleaning up list of fastest mirrors
[root@hadoop001 mnt]# yum makecache
Loaded plugins: fastestmirror, security
Determining fastest mirrors
local-yum                                                                                                                                        | 2.9 kB     00:00 ...
local-yum/filelists_db                                                                                                                           | 4.4 MB     00:00 ...
local-yum/primary_db                                                                                                                             | 3.4 MB     00:00 ...
local-yum/other_db                                                                                                                               | 1.9 MB     00:00 ...
Metadata Cache Created

# yum list |wc -l
4203

至此,本地yum源配置成功!


注意:以上方法中的createrepo主要适用于自己将一类软件包制作成本地源,如ceph软件包,openstack软件包等等。

如果将系统镜像iso里面的软件包拷贝出来做成本地yum源可能会出现一些问题:如centos6.6系统中 yum grouplist无法正常列出yum组。

最好的办法,也是最简单的办法是:

系统镜像挂载在哪个目录下,就直接使用那个目录作为镜像源

# df -h
/dev/loop1               4.4G  4.4G     0 100% /var/www/html/Centos6.6/1

[root@client yum.repos.d]# cat local-6.6.repo 
[local_6.6]
name=local_6.6
baseurl=ftp:/var/www/html/Centos6.6/1/
enabled=1
gpgcheck=0

 

配置局域网yum源

有两种方式

方式一:ftp方式

 1、服务器端设置vsftpd服务

# yum install vsftpd

# service vsftpd status

# service vsftpd start

# chkconfig vsftpd on

修改vsftpd 服务被登录之后的默认登陆位置 .

vsftp的匿名用户为 linux系统的ftp 用户.

可以修改/etc/passwd ,将ftp用户的 home目录, 这里我设置成为了根目录 .

# cat /etc/passwd |grep ftp

ftp:x:14:50:FTP User:/:/sbin/nologin

2.修改ftp iptables中的权限.

/etc/sysconfig/iptables-config 中修改模块,多个模块用空格键位隔开

IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"

/etc/sysconfig/iptables 找到

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

这一句, 并在它上方添加下面一句限制局域网权限 .

-A INPUT -m tcp -p tcp -s 192.168.80.0/24 --dport 21 -j ACCEPT

如果不需要开启防火墙,就直接关闭即可 .

3.客户端的yum源设置
 

# vi /etc/yum.repos.d/nagios1.repo

[nagios1]

name=nagios1

baseurl=ftp://192.168.80.131/tmp/Packages/

enabled=1

gpgcheck=0

客户端测试时候可以使用服务器端 yum
 

# yum clean all

# yum list |wc -l

 

方式二:http方式

1、服务器端启动httpd服务

###centos6.x系统中
# yum install httpd
# service httpd start
# chkconfig httpd on
###centos7.x系统中
# systemctl enable httpd
# systemctl start httpd

2、服务端挂载系统镜像

# cd /var/www/html/ 
# mkdir Centos6.6
# cd Centos6.6
# mkdir 1
# mount -o loop /data/iso/CentOS-6.6-x86_64-bin-DVD1.iso 1

打开web页面是可以查看的

http://192.168.8.212/Centos6.6/1

3、客户端yum源配置

# cd /etc/yum.repos.d
# cat local-6.6.repo 
[local_6.6]
name=local_6.6
#baseurl=ftp://192.168.8.212/var/www/html/Centos6.6/1/  注释部分为ftp方式,用来对比
baseurl=http://192.168.8.212/Centos6.6/1/
enabled=1
gpgcheck=0
[root@client yum.repos.d]# yum makecache
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
local_6.6                                                           | 4.0 kB     00:00     
Metadata Cache Created
[root@client yum.repos.d]# yum list |wc -l
6557

备注:

配置文件中的enabled=1参数表示启用该yum源,若不启动将1改为0

yum配置文件参数含义

$ cat /etc/yum.conf
[main]
cachedir=/var/cache/yum     #yum下载的RPM包的缓存目录
keepcache=0         #缓存是否保存,1保存,0不保存。
debuglevel=2         #调试级别(0-10),默认为2(具体调试级别的应用,我也不了解)。
logfile=/var/log/yum.log     #yum的日志文件所在的位置
exactarch=1         #在更新的时候,是否允许更新不同版本的RPM包,比如是否在i386上更新i686的RPM包。
obsoletes=1         #这是一个update的参数,具体请参阅yum(8),简单的说就是相当于upgrade,允许更新陈旧的RPM包。
gpgcheck=1         #是否检查GPG(GNU Private Guard),一种密钥方式签名。
plugins=1         #是否允许使用插件,默认是0不允许,但是我们一般会用yum-fastestmirror这个插件。
installonly_limit=3     #允许保留多少个内核包。
exclude=selinux*     #屏蔽不想更新的RPM包,可用通配符,多个RPM包之间使用空格分离。

备注:

一般想要保留自己下载的rpm包,主要是网络版源中的一类rpm包,可以将/etc/yum.conf中的keepcache=0参数修改为keepcache=1

然后在/var/cache/yum 找到自己需要的rpm包,整合起来就可以做出自己的离线yum源了。

 

将Centos6.6系统的ISO1和ISO2镜像软件包整合到一起

通常我们只使用CentOS-6.6-x86_64-bin-DVD1.iso的软件包,但是偶尔还是会用到DVD2中的软件,同时yum list可以查出,但是直接yum install会报错,而且如果再把DVD2做成yum源也很麻烦,所以为了省事,直接把DVD1和2的软件包整合起来。

具体做法如下:

1、将DVD1挂载出来的所有内容拷贝至文件夹5

# df -h
/dev/loop1               4.4G  4.4G     0 100% /var/www/html/Centos6.6/1

# cd /var/www/html/Centos6.6/
# mkdir 5
# cp -r 1/* 5/
# cd 5
# ls 
CentOS_BuildTag  EFI  EULA  GPL  images  isolinux  Packages  RELEASE-NOTES-en-US.html  repodata  RPM-GPG-KEY-CentOS-6  RPM-GPG-KEY-CentOS-Debug-6  RPM-GPG-KEY-CentOS-Security-6  RPM-GPG-KEY-CentOS-Testing-6  TRANS.TBL

2、将DVD2挂载出来的Packages里面的所有软件包拷贝到5中

注意只要rpm包,其他的都不要,可以先进入执行命令检查一下

# ls |grep -v rpm

拷贝rpm包

# cp -r 2/* 5/Packages/

3、更新repodata

追加文件或者更新rpm包时,需要createrepo -v --update 来更新repodata

# createrepo -v --update 5/Packages/

4、清缓存

# yum clean all
# yum makecache

5、检查

# yum grouplist|wc -l
214
# yum list |wc -l
6563

重点是现在原本在DVD2的rpm包都追加到了DVD1的yum源中了,继续安装文件不会提示只可以list不可以install了。

心得:yum源配置安装软件的基础,配置一个正常的本地yum源,软件安装基本完成了一半。

yum与createrepo相关的内容还有很多,持续学习并更新中……

 

createrepo命令学习

createrepo用以创建yum源(软件仓库),即为存放于本地特定位置的众多rpm包建立索引,描述各包所需依赖信息,并形成元数据。


基本语法:createrepo [option] <directory>


常用参数详解


    -u  --baseurl <url>
        指定Base URL的地址


    -o --outputdir <url>
        指定元数据的输出位置


    -x --excludes <packages>
        指定在形成元数据时需要排除的包


    -i --pkglist <filename>
        指定一个文件,该文件内的包信息将被包含在即将生成的元数据中,格式为每个包信息独占一行,不含通配符、正则,以及范围表达式。


    -n --includepkg
        通过命令行指定要纳入本地库中的包信息,需要提供URL或本地路径。


    -q --quiet
        安静模式执行操作,不输出任何信息。


    -g --groupfile <groupfile>
        指定本地软件仓库的组划分,范例如下:
 	createrepo -g comps.xml /path/to/rpms
        注意:组文件需要和rpm包放置于同一路径下。




    -v --verbose
        输出详细信息。


    -c --cachedir <path>
        指定一个目录,用作存放软件仓库中软件包的校验和信息。当createrepo在未发生明显改变的相同仓库文件上持续多次运行时,指定cachedir会明显提高其性能。


    --update
        如果元数据已经存在,且软件仓库中只有部分软件发生了改变或增减,则可用update参数直接对原有元数据进行升级,效率比重新分析rpm包依赖并生成新的元数据要高很多。


    -p --pretty
        以整洁的格式输出xml文件。


    -d --database

        该选项指定使用SQLite来存储生成的元数据,默认项。

参考链接

http://linux.51yip.com/search/createrepo

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!