由于本人是linux小白,所以安装过程遇到一些命令,不明白就会查询记录下来。写了1~6步。您可以直接看7,8,9步。
1. deb是什么
deb是debian linus的安装格式,跟red hat的rpm非常相似,最基本的安装命令是:dpkg -i file.deb
dpkg 是Debian Package的简写,是为Debian 专门开发的套件管理系统,方便软件的安装、更新及移除。所有源自Debian的Linux发行版都使用dpkg,例如Ubuntu、Knoppix 等。
2. sudo tee是什么
通过 sudo tee 命令实现
Tee 命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的 stdin。简单的说就是把数据重定向到给定文件和屏幕上(下图来自互联网):
下面的命令中通过 sudo tee 把 ls 命令的输出写入文件:
$ sudo ls -al /root | sudo tee /root/test.txt > /dev/null
其中的 > /dev/null 阻止 tee 把内容输出到终端:
3. curl是啥
curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。
它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。
不带有任何参数时,curl 就是发出 GET 请求。
$ curl https://www.example.com
-L
参数会让 HTTP 请求跟随服务器的重定向。curl 默认不跟随重定向。
$ curl -L -d 'tweet=hi' https://api.twitter.com/tweet
上面命令向www.example.com
发出 GET 请求,服务器返回的内容会在命令行输出。
4. sudo apt-key add -
apt-key命令用于管理Debian Linux系统中的软件包密钥。每个发布的deb包,都是通过密钥认证的,apt-key用来管理密钥。
apt-key list #列出已保存在系统中key。
apt-key add keyname #把下载的key添加到本地trusted数据库中。
apt-key del keyname #从本地trusted数据库删除key。
apt-key update #更新本地trusted数据库,删除过期没用的key。
5. sudo apt update
apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器。
apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
apt 命令执行需要超级管理员权限(root)。
列出所有可更新的软件清单命令:sudo apt update
6. 基本概念
- OCI -> CRI / CNI
- buildah 镜像构建
- skopeo 镜像管理
- podman 容器管理
7. ubuntu离线安装podman --- 先来下载deb及其依赖并打包。
基本上参考的https://blog.csdn.net/michaelwoshi/article/details/94185132 和https://podman.io/getting-started/installation
https://podman.io/getting-started/installation 官网
. /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/testing/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:testing.list
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/testing/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
sudo apt-get update -qq
sudo apt-get -qq -y install podman
这里不要自作主张的修改${VERSION_ID}为20.04!!! 就完全按照官网给的上面的命令执行就行。这里要注意,不要执行最后一条sudo apt-get -qq -y install podman命令,因为我不想直接在线安装。我是先通过前四条命令,联网把 Podman debian package repository添加到 apt里。
执行完echo, sudo tee那条,你会发现/etc/apt/sources.list.d下多了一个文件“devel:kubic:libcontainers:testing.list”,该文件指向podman的在线repository,就是那个链接https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/testing/xUbuntu_${VERSION_ID}, 在线安装的时候,linux会读取该文件去找repository,安装podman的包以及其依赖。但是离线安装的时候,如果你也是和我一样安装在同一台虚拟机(我是先联网下载打包,然后离线安装下载好的包。成功后,再去别的虚拟机安装下载好的包),那么你在准备离线安装前,一定要把这个文件“devel:kubic:libcontainers:testing.list” 先remove掉,否则它又会想联网安装。报错找不到包。
执行完curl | sudo apt-key add -以及sudo apt-get update,注意这里我把-qq去掉了,我们不需要联网安装,所以去掉-qq。 至此已经把podman package repository更新到了apt里。
然后
然后列出添加的podman源中软件包
ll /var/lib/apt/lists/*kubic*
然后执行 apt-cache madison podman 或者 apt-cache policy podman 来 将列出所有来源的版本
然后找到podman依赖的包:找到依赖的包用apt-cache depends podman来获取
虽然用这个命令可以找到少量依赖包,但是没法download,会报错。
还是得用https://blog.csdn.net/michaelwoshi/article/details/94185132 提到的命令。
所以接下来是 sudo mkdir -p /root/podmanDeps
然后su切换到root账户下
然后cd root
然后cd podmanDeps
然后执行 apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances podman=3.0.0~0.rc1 | grep -v i386| grep "^\w" | sort -u)
然后ll 查看podmanDeps下是否有了已经下载的依赖包
然后执行dpkg-scanpackages . | gzip -9c > Packages.gz 结果报错需要按照dpkg-dev
然后我又执行了apt install dpkg-dev
然后又执行了dpkg-scanpackages . | gzip -9c > Packages.gz,然后执行ll查看一下是否生成了Packages.gz
然后回到root目录,然后执行压缩命令tar -zcf podmanDeps.tar.gz podmanDeps,把目录podmanDeps下所有文件整个打包。然后执行ll查看下是否压缩成功
以上已经完成安装包及依赖的打包。下面将尝试把自己机器断网,然后安装该包到虚拟机
8. ubuntu离线安装podman --- 断网,离线安装刚才的包。
现在开始断网。然后在同一台虚拟机ubuntu上离线安装上面打好的podman包。
先切换到root目录下,看到打好的包podmanDeps.tar.gz, 然后把包解压到/tmp下,注意:不能解压在/root 目录下,否则会报没有读取权限!
然后去看/tmp下是否有了这个包
然后执行cp /etc/apt/sources.list /etc/apt/sources.list.bak 去备份 /etc/apt/sources.list
然后执行echo > /etc/apt/sources.list ,我看执行这个是要清空现有的 /etc/apt/sources.list
然后执行vi /etc/apt/sources.list 添加如下语句
#########################################
deb [trusted=yes] file:///tmp/podmanDeps/ ./
#########################################
然后执行apt-get clean all
然后执行apt-get update,执行完这条命令,报错如下:
我发现它居然还想联网去下载,我猜想是我没删除/etc/apt/sources.list.d的文件“devel:kubic:libcontainers:testing.list”,所以默认它还是去读了这个文件,尝试联网方式更新。所以我就remove了该文件。重新执行apt-get clean all, 以及apt-get update,这次成功了。看到下面的图片,说明你也成功了
然后开始安装,执行命令apt -y install podman
安装完成,执行 podman --version 检查是否安装成功
9. 清理工作
执行 cp /etc/apt/sources.list.bak /etc/apt/sources.list ,还原仓库文件
执行 rm -rf /etc/apt/sources.list.bak ,删除临时备份文件
执行rm -rf /tmp/podmanDeps, 删除临时安装包。 记住/root目录下你还有一份压缩包呢。
恭喜恭喜,你完成了离线安装podman!!