629

Ubuntu软件包及其依赖包下载脚本

前言

Ubuntu离线环境部署软件时,会需要很多依赖环境,然而内网环境没有网络,无法在线安装。所以用此脚本在有网络环境的电脑上,先将软件包下载完,再拷贝到目标主机上进行安装。

使用脚本

首先,需要赋予脚本执行权限

chmod 755 down.sh

下载软件包

./down.sh <软件包名称>

例如下载:make

./down.sh make

脚本全文

将安装脚本内容拷贝,并创建脚本文件,例如:down.sh

#!/bin/bash

# 已检查依赖的软件包
checked=()

# 定义下载软件包及其依赖函数
DownPKG(){
  if [ "$#" -eq 0 ]; then
      exit 1
  fi
  pkgName=$1
  # 将软件包加入已检查列表
  if ! printf '%s\n' "${checked[@]}" |grep -q -F "$pkgName"; then
      checked+=("$pkgName")
  fi
  # 查询依赖 Depends|Recommends|Suggests|依赖|推荐|建议
  echo "正在查询软件包(${pkgName})的依赖"
  for row in $(apt-cache depends $pkgName | grep -E 'Depends|依赖'); do
    # 获取每行中的依赖字符串
    text=$(echo $row | cut -d ":" -f 2 | sed -e s/'<'/''/ -e s/'>'/''/)
    if [[ "$text" == "$pkgName" ]]; then
      continue
    fi
    if [ -n "$text" ]; then
        # 以字符串创建数组
        list=($text)
        # 查询并下载依赖的依赖
        for name in ${list[@]}; do
          # 忽略已检查依赖的软件包,避免循环依赖
          if printf '%s\n' "${checked[@]}" |grep -q -F "$name"; then
              continue
          fi
          echo "正在下载依赖:${name}"
          apt-get download $name 2>>errors.txt
          DownPKG $name
        done
    fi
  done
}

if [ "$#" -eq 0  ]; then
    echo "请填写需要下载的软件包名称"
    exit 1
fi

# 创建下载目录,用于存放所有下载的包
mkdir $1 && cd $1

echo "正在下载软件包: $1"
apt-get download $1 2>>errors.txt
DownPKG $1
文章作者:DOTATONG
发布日期:2024-05-28
# shell

评论

暂无

添加新评论