一、实验背景
CentOS上服务搭建,服务器能联网,一切好说,根据相关文档,添加指定的yum仓库源安装就是了。
问题是,很多时候,生产环境的服务器并不能联网,甚至登录相关服务器还要各种跳板机,最多你能拖个CentOS官方镜像去搭建本地yum源,解决相关软件安装的依赖。
那么,如果你要安装服务的目标服务器操作系统是最小化安装,需要安装的软件官方iso镜像文件中有没有,怎么办?
二、实验思路
如果需要安装的软件如 zabbix、MySQL、nginx等软件官方iso镜像文件中并没有或者说没有我们想要的指定的较新版本,我们需要做的是找一台联网的虚拟机(和安装服务的目标服务器操作系版本一致),用相关命令将其主包及其依赖一次性下载,用于内网服务器搭建本地yum,实现离线安装。
那么问题来了:我们怎么添加zabbix、MySQL、nginx等软件官方的官方yum源,下载其指定版本的主包及其依赖?
一般套路是去官方仓库,下载安装其 release rpm包,就会相应的添加仓库文件和软件包校验文件。
三、实验环境
操作系统: CentOS7.5 Minimal
开发机(联网): 192.168.1.101
四、安装主包及依赖包下载工具
# 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仓库
添加epel官方yum源
EPEL是企业版 Linux 附加软件包的简称,EPEL是一个由Fedora特别兴趣小组创建、维护并管理的,针对 红帽企业版 Linux(RHEL)及其衍生发行版(比如 CentOS、Scientific Linux、Oracle Enterprise Linux)的一个高质量附加软件包项目。
# yum -y install epel-release
# rpm -ql epel-release
# cat /etc/yum.repos.d/epel.repo
添加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
注:实际上,默认是拉最新包,只要仓库中有相关包,你可以指定需要下载的主包的版本,如 repotrack nginx-1.14.2 -p /root/rpmDeps/ 当然,前提是你要按套路出牌,别写错了指定版本的格式!
添加zabbix官方仓库
https://repo.zabbix.com/zabbix/4.3/rhel/7/x86_64
# rpm -ivh https://repo.zabbix.com/zabbix/4.3/rhel/7/x86_64/zabbix-release-4.3-1.el7.noarch.rpm
# rpm -ql zabbix-release
# cat /etc/yum.repos.d/zabbix.repo
# yum list available --disablerepo="*" --enablerepo="zabbix"
添加MySQL社区版官方仓库
https://repo.mysql.com
https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en
# rpm -ivh https://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm
# rpm -ql mysql57-community-release
# ll /etc/yum.repos.d/mysql-community*
# cat /etc/yum.repos.d/mysql-community.repo
# yum list available --disablerepo="*" --enablerepo="mysql57-community"
添加ceph官方仓库
国外官方仓库:
https://docs.ceph.com/docs/master/install/get-packages
阿里云镜像站:
https://mirrors.aliyun.com/ceph
https://download.ceph.com/rpm-luminous/el7/x86_64
# vim /etc/yum.repos.d/ceph.repo
##############################################################
[ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64
enabled=1
gpgcheck=0
##############################################################
# yum list available --disablerepo="*" --enablerepo="ceph"
# yum list available --disablerepo="*" --enablerepo="ceph" | grep ceph
上面只列了 epel、nginx、zabbix、mysql-community、ceph的官方仓库的添加方法,其他软件仓库添加方式类似,触类旁通,举一反三!
# ll /etc/yum.repos.d/
六、下载主包及依赖包
yum-utils是管理repository及扩展包的工具,包含一系列yum工具,本实验中我们用到其中的 repotrack,直接下载指定的包,包括所有依赖一块完成,实乃解决软件依赖之利器!
# yum -y install yum-utils
# yum info yum-utils
# repotrack --help
# repotrack X -p /path/to/destDir
# repotrack X* -p /path/to/destDir
注:此命令,会将软件包X和其全部依赖关系包一并下载到某个指定目录,支持通配符
我们用一个小脚本,将项目安装所需要的所有软件包及其依赖一次性下载
# vim downloadDeps.sh
############################################################
#!/bin/bash
yum -y install yum-utils
mkdir -p /root/yum
rpms=(
nginx
keepalived
bind
ntp
ntpdate
libaio
psmisc
net-tools
perl
MySQL-python
mysql-community-common
mysql-community-libs
mysql-community-client
mysql-community-server
mysql-community-libs-compat
ceph
ceph-base
ceph-common
ceph-mon
ceph-mgr
ceph-osd
ceph-mds
ceph-fuse
httpd
php
php-mysql
mod_ssl
zabbix-server-mysql
zabbix-web
zabbix-web-mysql
zabbix-sender
zabbix-get
zabbix-java-gateway
php-gd
php-bcmath
php-mbstring
php-xml
)
for rpm in ${rpms[@]}
do
repotrack $rpm -p /root/yum
done
############################################################
# sh downloadDeps.sh | tee downloadDeps.log
# ll /root/yum
createrepo 命令用于创建yum源(软件仓库),即为存放于本地特定位置的众多rpm包建立索引,描述各包所需依赖信息,并形成元数据。
# yum -y install createrepo
# createrepo -v /root/yum
查看生成的仓库清单文件
# ll /root/yum/repodata/
现在我们可以将下载的主包及其依赖整个打包,拷贝到内网机器搭建本地yum,做离线安装了!
# tar -zcf yum.tar.gz /root/yum
七、在内网机器搭建本地yum
将yum.tar.gz 拷贝到内网离线机器,搭建本地yum
# mkdir /tmp/install
# tar -zxf yum.tar.gz -C /tmp/install
# vim /etc/yum.repos.d/yum.repo
############################################
[YUM]
name=Local Repositry
baseurl=file:///tmp/install/yum
enabled=1
gpgcheck=0
###############################################
# yum clean all
# yum list available --disablerepo="*" --enablerepo="YUM"
# yum -y install X --disablerepo="*" --enablerepo="YUM"
八、参考
【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
【repotrack】repotrack工具的使用
https://rnd-dev.com/download-rpm-and-dependencies-from-yum-repo/
https://www.thegeekdiary.com/downloading-rpm-packages-with-dependencies-yumdownloader-vs-yum-downloadonly-vs-repoquery