利用线上yum源,制作本地yum源

利用线上yum源,制作本地yum源

对于CentOS系列的操作系统而言,yum是一个必不可少的rpm包管理工具,它的宗旨是自动化的升级,安装/移除rpm包,收集rpm包的相关信息,检查依赖性并自动提示用户解决。 一个yum源又叫做yum仓库,既可以是http或者ftp站点,也可以是在本地。我们今天来讨论下yum源在本地的情况。

问题场景

yum源安装时会有本地源和网络源,我们知道在联网的情况下的问题非常容易解决,而在离线的情况下问题就复制多了。如何在离线的情况下,也依然能够像联网一样方便、放心的使用yum呢?

解决方式

下面提供几种解决方式

  • 把线上yum源全部添加到本地
  • 只下载不安装
  • 使用 yum 缓存

这几种方式的前提都是你需要知道所需rpm包的yum源地址。有些yum源并不是很主流,如果平时多留意常用的yum源,用的时候就能信手拈来。

方法一:把线上yum源全部添加到本地

比如,我以安装PHP7.1为例,我知道remirepo源可以满足我的需求。那我首先添加网络yum源到本地:

wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm && rpm -Uvh remi-release-7.rpm

查看到/etc/yum.repos.d ,可以看到remi-php71.reporemi-safe.repo 等被添加到本地

利用线上yum源,制作本地yum源_第1张图片

我们来看看remi-php71.repo这一个仓库,其关键信息是:

[remi-php71]
name=Remi's PHP 7.1 RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/php71/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/php71/httpsmirror
mirrorlist=http://rpms.remirepo.net/enterprise/7/php71/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

这个remi-php71就是我们安装PHP7.1所需的代码仓库了,下面是其配置项。其中baseurl指定源的镜像服务器地址,mirrorlist指定一个镜像服务器的地址列表。二者的目的都是告诉你从哪里可以找到这个仓库。

接下来,我们就开始来同步到本地,执行:

reposync  -r  remi-php71

reposync 工具需要安装,安装方式如下:

yum install yum-utils

这条命令安装了许多工具,reposync只是我们用到的一条。

reposync 完毕后,将remi-php71里面的所有的rpm包复制到在目录/var/yum/php/7.1下(目录可以自定义,但必须和repo配置文件相同)。

然后我们执行

createrepo ./

createrepo 也需要安装,安装方式如下:

 yum -y install createrepo

另外,我们添加自己的本地源配置文件,新建repo配置文件:

vim /etc/yum.repos.d/php7.1.repo

添加内容

[php7.1]
name=PHP 7.1.11
baseurl=file:///var/yum/php/7.1/
gpgcheck=0
enabled=1

注意:配置文件里面的baseurlfile://开始,后面的跟本地路径,这个路径必须和存放rpm包的地址一致。

做好这一切准备工作之后,我们就可以来正式安装PHP7.1了:

yum --disablerepo=* --enablerepo=php7.1 install php php-fpm  php-mysqlnd  php-mcrypt  php-mysqlnd php-pecl-mysql php-xml php-soap  php-xmlrpc php-simplexml  php-curl 

这个--disablerepo=* --enablerepo=php7.1 表示我们只用到本地的仓库php7.1,没有用到任何线上的yum仓库。但是因为其指向的/var/yum/php/7.1/已经有了和网络上一模一样的资源,即所有的rpm包。因此,通过这种方式安装的效果和从网络源安装的效果一模一样!

这样,你可以将/var/yum/php/7.1/中的rpm包复制到任何你想要安装的一台机器上,遵循同样的命令便可以顺利的装上你想要的软件环境。

当然,这样“全盘复制”也有个缺点,那就是很多网络yum源其实很大很全,包括众多的版本,而更多情况下我们只需要一个版本,因此会因为下载大量多余的rpm包从而造成磁盘浪费。这时候,我们就应该去寻找的网络源就更应该有针对性。

方法二:只下载不安装

这个方式可以定点安装,需要什么rpm就安装什么,将下载rpm包和安装rpm包两个操作分开。这需要yum--downloaddir参数。

RHEL6.4及之前版本,需单独安装 yum -y yum-plugin-downloadonly,RHEL6.4后面的版本就变成自带的了。

我们通过准备操作,已经添加了源remi-safe.repo,可以通过这个源实现安全安装PHP7的各个版本。如果我们想安装PHP7.2,那我们应该执行

yum install  php72 --disablerepo=* --enablerepo=remi-safe

现在我们不想安装了,只想获取php72的所有依赖的rpm,以便于我们在别处,或者在我们想安装的时候再去安装。我们只需要继续添加参数:

yum install php72 
--disablerepo=* 
--enablerepo=remi-safe  
--downloadonly 
--downloaddir=/tmp/rpm/download  

通过yum install -h 可以查看--downloaddir是指定下载rpm的存放路径,可以自定义。我们这里指定/tmp/rpm/download

注意,当有本地源且可以安装php72时,这条命令不会起作用,因此明确是哪个线上源,加上–disablerepo=* –enablerepo=remi-safe 这两个参数,确保rpm包能够顺利下载到本地。

方法三:使用 yum 缓存

默​认​情​况​下​,当​前​版​本​的​ yum 在​成​功​下​载​和​安​装​软​件​包​后​,会​把​下​载​的​文​件​删​掉​。​这​样​可​以​减​少​ yum 占​用​的​磁​盘​空​间​。​你​可​以​打​开​缓​存​,这​样​ yum 将​在​缓​存​目​录​保​留​下​载​到​的​文​件​。

缓​存​带​来​的好处是毋庸置疑的:可以提高yum的性能,可以离线进行yum操作,也可以复制缓存中的rpm包以在离线的时候使用。

默​认​情​况​下​,yum 在​ /var/cache/yum/ 目​录​保​存​临​时​文​件​,每​个​源​都​有​自​己​的​子​目​录​。​源目​录​中​ packages/ 子​目​录​包​含​了​缓​存​的​软​件​包​。​例​如​,目​录​ /var/cache/yum/x86_64/7/remi-safe 包​含​从​ remi-safe 源​下​载​的​软​件​包​。​
要​配​置​ yum 保​留​已​下​载​的​文​件​而​不​是​删​除​,设​置​ /etc/yum.conf 中​的​ keepcache 选​项​为​ 1:

[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1
debuglevel=2
logfile=/var/log/yum.log
....

打​开​缓​存​后​,每​个​ yum 操​作​都​可​能​从​仓​库​下​载​软​件​包​数​据​。​要​保​证​缓​存​包​含​了​软​件​包​数​据​,在​启​用​缓​存​后​运​行​yum ​ list 或​ yum search 来​下​载​软​件​包​数​据​​。

如果启用了缓存,在离线的情况下运行

yum -C install <软件包名>

你还可以将缓存/var/cache/yum/ 整个地复制或者仅仅复制某一个yum源的cache到另一台离线机器上相同的目录,然后执行

yum -C update
yum -C install <软件包名>

结论

以上三种方式的共同的前提是在联网的时候有这么一个合适的yum源,通过一定的方式复制到本地,然后在离线的情况下,或者是别的机器上实现完全一样的操作。通过这种方式增强了yum的功能,客观上也提高了其在不同环境上的适用性。

当然,我们也可以自己制作rpm包,解决好依赖性,放在自己的本地源,从而实现和线上源一样的功能。

你可能感兴趣的:(Linux)