一、实验背景
CentOS上服务搭建,服务器能联网,一切好说,根据相关文档,添加指定的yum仓库源安装就是了。
问题是,很多时候,生产环境的服务器并不能联网,甚至登录相关服务器还要各种跳板机,最多你能拖个CentOS官方镜像去搭建本地yum源,解决相关软件安装的依赖。
那么,如果你要安装服务的目标服务器操作系统是最小化安装,需要安装的软件官方镜像文件中有没有,怎么办?
二、实验环境
操作系统: CentOS7.2 Minimal
开发机(联网): 192.168.1.101
测试机(不能联网): 192.168.1.102
三、实验说明
假设有一个web项目,我们需要安装一个高可用的前端,做反向代理,就是 nginx+keepalived组合,我们怎么做离线安装包?
本实验中,我们只讲离线安装包的制作,不涉及具体配置。
我们在能联网的开发机上制作离线安装包,在不能联网的测试机上做离线安装。
目标服务器是什么版本的CentOS操作系统,你就用什么操作系统做开发机!
四、实验操作
在能联网的开发机上:
# yum -y install epel-release
# yum -y install createrepo
# yum -y install yum-utils
上述相关软件包的作用如下:
EPEL是企业版 Linux 附加软件包的简称,EPEL是一个由Fedora特别兴趣小组创建、维护并管理的,针对 红帽企业版 Linux(RHEL)及其衍生发行版(比如 CentOS、Scientific Linux、Oracle Enterprise Linux)的一个高质量附加软件包项目。
createrepo 命令用于创建yum源(软件仓库),即为存放于本地特定位置的众多rpm包建立索引,描述各包所需依赖信息,并形成元数据。
yum-utils是管理repository及扩展包的工具,包含一系列yum工具,本实验中我们用到其中的 repotrack,直接下载指定的包,包括所有依赖一块完成,实乃解决软件依赖之利器!
# yum list available --disablerepo="*" --enablerepo="epel" | grep keepalived
# yum list available --disablerepo="*" --enablerepo="epel" | grep nginx
可以看到,自带的yum联网仓库和epel源中,提供的keepalived和nginx版本,现在我们需要更新一点nginx版本,怎么办?
添加官方yum源,如果你要装类似开源软件,套路类似,一般都有官方提供的yum源,如zabbix,MySQL社区版等。
配置nginx官方yum源:
官方网址:http://nginx.org/en/linux_packages.html#stable
# vim /etc/yum.repos.d/nginx.repo
################################################
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1
###################################################
# rpm --import http://nginx.org/keys/nginx_signing.key
# yum list available --disablerepo="*" --enablerepo="nginx" | grep nginx
创建nginx和keepalived包目录
# mkdir /root/rpmDeps
下载keepalived主包及其依赖
# repotrack keepalived -p /root/rpmDeps/
下载nginx主包及其依赖
# repotrack nginx -p /root/rpmDeps/
注:实际上,默认是拉最新包,只要仓库中有相关包,你可以指定需要下载的主包的版本,如 repotrack nginx-1.14.2 -p /root/rpmDeps/ 当然,前提是你要按套路出牌,别写错了指定版本的格式!
如果我有很多包及其依赖要一次性下载,怎么办?
聪明如你肯定想到了,写一个小脚本做循环:
# vim rpmDownload.sh
################################
#!/bin/bash
for rpm in "nginx keepalived"
do
repotrack $rpm -p /root/rpmDeps
done
################################
# bash rpmDownload.sh | tee rpmDownload.log
查看一下下载的相关主包:
# ll /root/rpmDeps/
# ll /root/rpmDeps/ | grep nginx
# ll /root/rpmDeps/ | grep keepalived
创建仓库清单文件
# createrepo -v /root/rpmDeps/
将下载的rpm包打包
# tar -zcf rpmDeps.tar.gz rpmDeps/
五、在实验机上做离线安装
将离线安装包 rpmDeps.tar.gz 上传到不能联网的测试机器上
# tar -zxf rpmDeps.tar.gz
搭建本地yum仓库
# mkdir /etc/yum.repos.d/backup
# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
# rm -rf /tmp/localrepo
# mkdir -p /tmp/localrepo
# cp -rf ./rpmDeps/* /tmp/localrepo
####################################################
# cat > /etc/yum.repos.d/localrepo.repo << EOF
[localrepo]
name=Local Repository
baseurl=file:///tmp/localrepo
gpgcheck=0
enabled=1
EOF
###################################################
# yum clean all
yum -y install nginx keepalived --disablerepo="*" --enablerepo="localrepo"
# rm -rf /tmp/localrepo
# rm -rf /etc/yum.repos.d/localrepo.repo
#mv /etc/yum.repos.d/backup/*.repo /etc/yum.repos.d
#rm -rf /etc/yum.repos.d/backup
当然,你可以上述操作写成脚本:
# vim build_localrepo.sh
###########################################################
#!/bin/bash
parent_path=$( cd "$(dirname "${BASH_SOURCE}")" ; pwd -P )
cd "$parent_path"
# build local repositry
mkdir /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
rm -rf /tmp/localrepo
mkdir -p /tmp/localrepo
cp -rf ./rpmDeps/* /tmp/localrepo
cat > /etc/yum.repos.d/localrepo.repo << EOF
[localrepo]
name=Local Repository
baseurl=file:///tmp/localrepo
gpgcheck=0
enabled=1
EOF
yum clean all
# install rpm from local repo
yum -y install nginx keepalived --disablerepo="*" --enablerepo="localrepo"
# clean local repositry
rm -rf /tmp/localrepo
rm -rf /etc/yum.repos.d/localrepo.repo
mv /etc/yum.repos.d/backup/*.repo /etc/yum.repos.d
rm -rf /etc/yum.repos.d/backup
############################################################
# sh -x build_localrepo.sh
大功告成,如有疑惑,请详看下面列出的参考链接,现在如果你想离线安装其他软件,再也不用懵逼了!
六、参考
【yum】解决离线安装依赖包的方法
https://www.jianshu.com/p/6f4f9a80a726
【createrepo】createrepo生成仓库元数据,搭建本地yum源
https://www.jianshu.com/p/5cb5af152e75
【yum】yum install --help
https://www.jianshu.com/p/713979e2f9bc
【yum源】CentOS7安装第三方源
https://www.jianshu.com/p/63fdf9875633
【yum】在CentOS7.x中使用yum安装软件的指定版本
https://www.jianshu.com/p/ca3ddf69ca4e
【Nginx】CentOS7 上yum 安装nginx的最新版
https://www.jianshu.com/p/ebe4489dae66
【nginx】nginx最新稳定版的安装
https://www.jianshu.com/p/c2f579c44055