离线安装yum rpm工具
一、自动处理依赖关系(安装2.0)
第二个办法(yumdownloader)没有办法处理全部的依赖包关系,因此使用repotrack来下载依赖包,并制作自动的yum源,使用yum处理依赖关系安装。
yum install -y yum-utils # repotrack 工具用来下载yum依赖
mkdir -p /yum/yumRepo/Local
# 下载rpm包及依赖包
repotrack httpd -p /yum/yumRepo/Local
yum install -y createrepo # 使用createrepo 创建私有yum源
# 创建repo索引数据,会生成一个目录repodata
createrepo /yum/yumRepo/Local
# 制作离线包
tar zcf httpd-yum-repo.tgz /yum/yumRepo/Local
上一步执行完得到一个离线包httpd-yum-repo.tgz
,将该文件上传到离线服务器
# 解压文件
tar zxf httpd-yum-repo.tgz -C /
# 制作本地仓库
cat << EOF > /etc/yum.repos.d/CentOS-Local-httpd.repo
[Local-httpd]
name=Local-httpd Yum
baseurl=file:///yum/yumRepo/Local
gpgcheck=0
enabled=1
EOF
# yum重建缓存
yum clean all
yum makecache
# 使用yum安装
yum install -y httpd
参考: 离线部署yum依赖
二、旧方法
yum会自动下载系统所需要的依赖包rpm进行安装,但需要联网,当需要离线安装时,可使用下述方法:
- 在一台联网机器上利用yum工具下载rpm包
# 安装yum包下载工具
yum install yum-utils -y
# 例如我需要安装httpd的安装包
yumdownloader httpd --resolve --destdir=/home/httpd
- 复制/home/httpd内所有文件到离线服务器目录下,使用以下指令进行安装
rpm -ivh --replacefiles *.rpm
问题
- 联网服务器可能有已经安装的依赖,但离线服务器没有这个依赖,但yumdownloader只会下载联网服务器上没有的依赖
解决:
1. 指定一个空目录作为根目录,这样yum下载的时候就不会有任何基础依赖,会下载所有依赖。
但这种办法似乎首先需要给这个installroot设置baserepo,没有深究
sudo yum install \
--installroot=</path/to/tmp_dir> \
--downloadonly --downloaddir <rpm_dir> <package>
2. 使用docker启动一个新centos容器,在容器里下载rpm包,再从容器中将包复制出来。这种办法下载的环境相对干净,所以下载到的基础依赖包只缺失了centos基础的一些依赖,可以满足大部分情况了
# 启动容器并进入
docker run --rm --name centos -it centos:7 bash
## 以下为容器内操作
yum install yum-utils -y
mkdir -p /home/httpd
yumdownloader httpd --resolve --destdir=/home/httpd
然后新开一个命令窗口,不要关闭之前的窗口
# 将容器内下载得到的rpm包复制出来
docker cp centos:/home/httpd ./