Linux离线环境下安装软件(Ubuntu系统)
- 先在联网环境下把安装包及其依赖包下载下来,
- 运行脚本之前需要
apt-rdepends
命令,没有的话需要提前安装sudo apt install apt-rdepends
。下面是下载脚本:
#!/bin/bash
# 检查是否提供了软件包名称作为第一个参数
if [ -z "$1" ]; then
echo "Usage: $0 <package-name>"
exit 1
fi
# 从命令行参数获取软件包名称
PACKAGE_NAME="$1"
# 定义其他变量
PACKAGE_DIR="${PACKAGE_NAME}-packages"
DEPENDENCIES_FILE="${PACKAGE_NAME}-dependencies.txt"
# 创建目录并设置权限
sudo mkdir "$PACKAGE_DIR"
sudo chmod 777 "$PACKAGE_DIR"
# 创建依赖文件并设置权限
sudo touch "$DEPENDENCIES_FILE"
sudo chmod 666 "$DEPENDENCIES_FILE"
# 生成依赖列表
sudo apt-rdepends "$PACKAGE_NAME" | grep -v "^ " | awk '{print $NF}' | sort -u > "$DEPENDENCIES_FILE"
# 从依赖文件中删除 "debconf-2.0" 文本
sudo sed -i '/debconf-2.0/d' "$DEPENDENCIES_FILE"
sudo sed -i '/cron-daemon/d' "$DEPENDENCIES_FILE"
# 下载依赖包
cd "$PACKAGE_DIR"
sudo apt-get download $(cat "../$DEPENDENCIES_FILE")
#安装依赖包 sudo dpkg -i 包名.deb
脚本会自动检索软件的依赖包并输出到xxx-dependencies.txt文件中,之后脚本会读取.txt文件,然后通过apt命令下载到xxx-packages目录中
- 上面的脚本会把依赖的所有软件包都下载下来,其中包括系统中已经存在的包,可以使用下面脚本,把重复的删除
#!/bin/bash
if [ -z "$1" ]; then
echo "Usage: $0 directory"
exit 1
fi
PKG_DIR=$1
if [ ! -d "$PKG_DIR" ]; then
echo "$PKG_DIR is not a directory"
exit 1
fi
for pkg in $PKG_DIR/*.deb; do
pkg_name=$(basename $pkg | cut -d'_' -f1)
dpkg -s $pkg_name > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "$pkg 已安装. 删除..."
rm $pkg
fi
done