一,Background
上次Ubuntu离线安装Podman,今天在RHEL 7上再离线安装下。
http://rpmfind.net/linux/rpm2html/search.php?query=podman&submit=Search+...&system=centos+7&arch= 该网址找不到centos 7版本的离线安装包。只能换思路。
通过cat /etc/os-release 查到我当前离线服务器是Red Hat Enterprise Linux Server 7.3(Maipo)。
我查到对应的centos应该是centos7-1611,版本对比可参考https://blog.csdn.net/LelemamaAnne/article/details/113243337
所以我得在我在线机器通过vmware workstation先装centos7-1611虚拟机,下载打包podman 及其依赖安装包。然后去red hat上离线安装~
二,在线机器安装centos7.3.1611
首先下载centos dvd镜像,可参考以下网址
https://renwole.com/archives/1524 或者http://aiezu.com/baiduyun/centos_7.3_x86_64_iso_baiduyun_download.html
然后按照https://blog.csdn.net/LelemamaAnne/article/details/113367921 来按照centos。
三,centos7.3 在线下载,打包podman,并模拟离线安装
先存储网络安装源
执行下面的命令:
sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_7/devel:kubic:libcontainers:stable.repo
上面的命令把podman的网络安装源添加到yum的repository, 也就是/etc/yum.repo.d 目录下
你可执行cat /etc/yum.repo.d查看
只下载不安装上面的podman网络安装源包
首先安装插件yum-plugin-downloadonly, 执行命令yum install yum-plugin-downloadonly
命令格式:
yum install --downloadonly --downloaddir=软件包位置[可选] 软件包名(可加上版本号,指定版本)
软件包保存位置:
默认保存到/var/cache/yum/ 下的软件相应的repo的源的目录的packages目录下
通过 –downloaddir 来指定位置,软件包和依赖的软件将被下载到此目录
yum install --downloadonly --downloaddir=/root/mypackages/ podman
创建下载目录
mkdir -p /root/podmanDeps
cd /root/podmanDeps
执行下载保存不安装命令:
yum install --downloadonly --downloaddir=/root/podmanDeps/ podman
上面命令的意思时只下载podman相关的安装包,下载到/root/podmanDeps
看到下面界面说明下载成功
可以执行ls命令查看下
可执行podman --version查看下,确实是只下载没有安装。
通过tar命令压缩podmanDeps下所有文件
先退回到root目录下,然后执行命令tar vzcf podmanDeps.tar.gz podmanDeps
就可以把podmanDeps文件夹下所有文件打包成文件podmanDeps.tar.gz
tar czvf 压缩文件名称.tar.gz 文件或者目录名称 c是打包;z是gzip格式压缩;v是显示打包过程;f是显示打包名字
下面ls一下看看是否生成了
centos离线安装podman
上面的步骤已经下载好了podman的安装包,下面我要断网,看看可否离线环境下安装刚刚的安装包。我是要保证我的机器可以断网安装(小白鼠),然后copy 安装包到离线的服务器去安装。
在root目录下,把压缩包解压到/tmp下 ,执行命令tar -zxvf podmanDeps.tar.gz -C /tmp,然后去/tmp下查看
安装
下面在/tmp/podmanDeps路径下进行离线安装podman
执行安装命令:rpm -Uvh *.rpm --nodeps --force
1.--nodeps就是安装时不检查依赖关系,比如你这个rpm需要A,但是你没装A,这样你的包就装不上,用了--nodeps你就能装上了。
2.--force就是强制安装,比如你装过这个rpm的版本1,如果你想装这个rpm的版本2,就需要用--force强制安装。
然后执行podman --version查看是否安装成功
清理工作
执行rm -rf /tmp/podmanDeps, 删除临时安装包。 记住/root目录下你还有一份压缩包呢。
恭喜恭喜,你完成了离线安装podman!!
现在copy安装包到离线服务器,安装吧~
四,Red Hat Enterprise Linux Server 7.3 离线安装podman
前面centos上已经成功离线安装,现在把centos上的podman安装包先下载到宿主机windows10,然后导入red hat服务器
centos通过MobaXterm的SFTP 下载压缩包。
首先copy文件到个人用户的Documents目录下
然后打开moba事先建立好的ssh session,可参考https://blog.csdn.net/LelemamaAnne/article/details/112509033
然后右键tar.gz文件,可download到本地。
然后上传到虚拟机
压缩包上传到Red Hat服务器之后,首先创建新用户anne,因为不想用root直接安装。
useradd -d /home/anne -m anne
此命令创建了一个用户anne,其中-d和-m选项用来为登录名anne产生一个主目录 /home/anne(/home为默认的用户主目录所在的父目录)
然后执行passwd给anne用户设置登陆密码
passwd anne 按照提示设置密码
通过anne登录red hat 服务器,我不想用root来安装podman。
anne登录之后,我就找到之前通过root账户复制到/home/anne/annefiles/下的podmanDeps.tar.gz
然后执行tar -zxvf podmanDeps.tar.gz ,把podmanDeps.tar.gz解压到当前文件夹
然后cd podmanDeps进入刚解压缩出来的podmanDeps文件夹下
然后执行rpm -Uvh *.rpm --nodeps --force,结果报错了
error: can't create transaction lock on /var/lib/rpm/.rpm.lock(Permission denied)
以下是个人见解,非官网解答:
查了下需要su切换到root用户,然后又想到我在centos上和Ubuntu上离线安装的时候都是su进入root用户,才安装成功的。而且podman官网 上centos和Ubuntu部分都是sudo执行安装命令的。
所以我认为anne这个用户至少得有sudo权限,才能安装podman。
podman虽然说不需要像docker一样需要root权限,但是安装的时候应该是至少需要sudo权限,因为要涉及修改一些系统文件。但是安装成功之后,普通用户可以随便使用,不需要像docker一样,需要sudo。
实验证明,我的猜测是对的,我给anne加了sudo权限,顺利安装成功!如何加sudo权限,请参考https://blog.csdn.net/LelemamaAnne/article/details/113624097