linux环境一键下载离线安装包及其依赖


在linux环境下载离线安装包,经常会存在安装依赖的问题,为了方便解决下载依赖的问题,通过shell脚本,根据设置的依赖深度,全部自动下载。

** 该脚本适用于Ubuntu、UOS等Debian系使用apt依赖管理工具的linux操作系统。

** Centos等Redhat系使用yum或者dnf依赖管理工具的系统,处理逻辑和此一致。

 1 #!/bin/bash
 2 # Date:2022-04-13 
 3 # Author: Create by cooper_73
 4 
 5 echo -e "`date` \nReadly to download all of $1's packages \n\
 6 \$1 is target Software name; \n\
 7 \$2 indicates the depth of the dependency level. e.g.:123...;\n\
 8 \$3 is the package architecture. e.g.:amd64、arm64..."
 9 
10 sleep 1
11 getDepends()
12 {
13   pkg_list=`apt-cache  depends $1|grep -E "依赖|建议|推荐"|grep -v "<\|>"`
14   pkg_download=`apt-cache  depends $1|grep -E "依赖|建议|推荐"|grep -v "<\|>"|awk -F: '{print $2}'|tr '\n' '@'|sed "s/\@/:$2/g"`
15 }
16 
17 pkgDownload()
18 {
19 echo -e "\nBegin to download...\n"
20 if [ -d "./packages/" ];then
21         cd packages && rm -rf * && apt download $dl_pkgs
22 else
23         mkdir packages && cd packages && apt download $dl_pkgs
24 fi
25 ls -t ../packages | tr ' ' '\n'
26 echo -e "\n!!! Download Complete !!!\n"
27 }
28 
29 
30 lah=`sudo dpkg --print-architecture`
31 ah=$3
32 lv=$2
33 if [ ! $ah ];then
34         ah=$lah
35 fi
36 if [ ! $lv ];then 
37         lv=0
38 fi
39 pkgs="$1:$ah"
40 i=0
41 echo -e "\nArchitecture:$ah"
42 sudo dpkg --add-architecture $ah
43 echo  -e "Search all of depends about $1 with lever $lv :\n"
44 while [ $i -lt $lv ];
45 do
46         let i++
47         all_list="$pkgs"
48         all_pkgs="$pkgs"
49         for p in $pkgs
50         do
51                 getDepends $p $ah
52                 all_list="$all_list $pkg_list"
53                 all_pkgs="$all_pkgs $pkg_download"
54         done
55         pkgs=$all_pkgs
56 done
57 echo $all_list
58 dl_pkgs=`echo "$pkgs $all_pkgs"|tr ' ' '\n'|sort -ru|tr '\n' ' '`
59 echo $dl_pkgs
60 pkgDownload
61 
62 if [ "$ah" != "$lah" ];then
63         echo "delete architecture $ah"
64         sudo dpkg --remove-architecture $ah
65 fi