离线安装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进行安装,但需要联网,当需要离线安装时,可使用下述方法:

  1. 在一台联网机器上利用yum工具下载rpm包
# 安装yum包下载工具
yum install yum-utils -y

# 例如我需要安装httpd的安装包
yumdownloader httpd  --resolve --destdir=/home/httpd
  1. 复制/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 ./
posted @ 2021-09-10 11:40  小小记录本  阅读(1370)  评论(0编辑  收藏  举报