您的位置:首页 > 其它

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

2017-12-13 22:54 225 查看

利用线上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.repo
remi-safe.repo
等被添加到本地



我们来看看
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


注意:配置文件里面的
baseurl
file://
开始,后面的跟本地路径,这个路径必须和存放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包,解决好依赖性,放在自己的本地源,从而实现和线上源一样的功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: