Ubuntu 离线安装的常见操作
**说明:**很多情况下,生产环境都是离线环境,然而开发环境都是互联网的环境,因此部署的过程中需要构建离线安装包;
1. 下载但是不安装
# 例如使用 apt 下载 wireshark 安装包
sudo apt download wireshark
# 下载多条的时候直接使用 空格 分割即可
sudo apt download vim sshpass
会下载安装包到当前的目录下面;
问题引出:在联网的环境中通常下载的时候不仅仅会安装当前的安装包,而且还会安装对应的依赖项;
2. 下载所有的依赖项
查询包的直接依赖项
# 查询包的直接依赖
sudo apt-cache depends vim
查询所有的依赖项
# 命令可以递归地列出软件包及其所有依赖项。这对于了解软件包的完整依赖关系非常有用。
sudo apt-cache depends --recurse
# 查看wireshark 的所有依赖
sudo apt-cache depends --recurse wireshark
使用上述的命令会查询大量的依赖包,也包含建议安装的包,和增强的包。继续为命令添加上更多的参数,进行精准的查询;
如果你想在使用 apt-cache 命令时忽略建议、建议的依赖项、冲突、中断、替代、增强和预先依赖项,可以通过添加对应的选项来实现。
以下是对应选项的说明:
--no-recommends
:忽略建议的依赖项。--no-suggests
:忽略建议的软件包。--no-conflicts
:忽略冲突。--no-breaks
:忽略中断。--no-replaces
:忽略替代。--no-enhances
:忽略增强。--no-pre-depends
:忽略预先依赖项。
# 查找依赖包, 并且忽略冲突等信息
sudo apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends wireshark
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tSSCXdnQ-1690775935036)(assets/image-20230731105524993.png)]
此时查询到的输出基本上符合我们的要求,只要我们去除依赖: licxxx
即可,此时使用grep
命令进行过滤;
grep -v "^ " # 命令用于在文本中过滤掉以空格开头的行。这对于从结果中排除空行或空格行非常有用。
进行命令的编写
# 获取到所有的依赖包
sudo apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends wireshark |grep -v "^ "
此时将下载命令和查询依赖命令结合即可下载所有的依赖包,第一个为我们要直接下载的包;
sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends 包名 |grep -v "^ ")
# 下载过程中如果出现无法定位软件包的位置,则需要更换源,更换方法百度即可
3. 数据包的安装
# 切换到下载安装包的目录
dpkg -i *.deb
# 权限不足的时候, 加上 sudo
sudo dpkg -i *.deb
4. shell脚本的编写
将上述下载的命令,进行整合,因为安装只有一条命令,且是在生产环境中使用无需进行 shell 脚本的整合
#!/bin/bash
#$1 pkg
get_all_depends()
{
apt-cache depends --no-pre-depends --no-suggests --no-recommends \
--no-conflicts --no-breaks --no-enhances\
--no-replaces --recurse $1 | awk '{print $2}'| tr -d '<>' | sort --unique
}
for pkg in $*
do
all_depends=$(get_all_depends $pkg)
echo -e "所有依赖共计"$(echo $all_depends | wc -w)"个"
echo $all_depends
i=0
for depend in $all_depends
do
i=$((i+1))
echo -e "\033[1;32m正在下载第$i个依赖:"$depend "\033[0m"
apt-get download $depend
done
done
脚本运行
bash 脚本名称.sh 包名
5. Python 第三方包下载但不安装
前提:已经导出了 requirement.txt
pip freeze > requirement.txt # 导出所有的安装包,已经包含了依赖以及版本
pip download -d \home\packs -r requirement.txt
# -r requirement.txt 可以替换成为单个包名
此处下载的是一些whl
文件;
将下载的文件打包后放到生产环境的服务器中,执行如下的命令;
pip install --no-index --find-links=PIPDIR -r requirements.txt
# --find-links就是存放安装文件的目录
# -r是指按照requirements.txt这个文件去安装文件目录中找需要的安装包
继续努力,终成大器!