linux部署_[转]linux环境一键下载离线安装包及其依赖

蛋蛋 2022年10月01日 33 0

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

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

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

#!/bin/bash
# Date:2022-04-13
# Author: Create by cooper_73

echo -e "`date` \nReadly to download all of $1's packages \n\
\$1 is target Software name; \n\
\$2 indicates the depth of the dependency level. e.g.:1、2、3...;\n\
\$3 is the package architecture. e.g.:amd64、arm64..."

sleep 1
getDepends()
{
  pkg_list=`apt-cache  depends $1|grep -E "依赖|建议|推荐"|grep -v "<\|>"`
  pkg_download=`apt-cache  depends $1|grep -E "依赖|建议|推荐"|grep -v "<\|>"|awk -F: '{print $2}'|tr '\n' '@'|sed "s/\@/:$2/g"`
}

pkgDownload()
{
echo -e "\nBegin to download...\n"
if [ -d "./packages/" ];then
        chmod 777 packages && cd packages && rm -rf * && apt-get download $dl_pkgs > /dev/null
else
        mkdir packages && chmod 777 packages && cd packages && apt-get download $dl_pkgs > /dev/null
fi
ls -t ../packages | tr ' ' '\n'
echo -e "\n!!! Download Complete !!!\n"
}


lah=`sudo dpkg --print-architecture`
ah=$3
lv=$2
if [ ! $ah ];then
        ah=$lah
fi
if [ ! $lv ];then
        lv=0
fi
pkgs="$1:$ah"
i=0
echo -e "\nArchitecture:$ah"

if [ $ah != $lah ];then
    sudo dpkg --add-architecture $ah
    echo -e "\nUpdate repo for architecture $ah...\n"
    sudo apt-get update > /dev/null
fi

echo  -e "Search all of depends about $1 with lever $lv :\n"
while [ $i -lt $lv ];
do
        let i++
        all_list="$pkgs"
        all_pkgs="$pkgs"
        for p in $pkgs
        do
                getDepends $p $ah
                all_list="$all_list $pkg_list"
                all_pkgs="$all_pkgs $pkg_download"
        done
        pkgs=$all_pkgs
done

echo $all_list
dl_pkgs=`echo "$pkgs $all_pkgs"|tr ' ' '\n'|sort -ru|tr '\n' ' '`
echo $dl_pkgs
pkgDownload

if [ "$ah" != "$lah" ];then
        echo "Delete forgin-architecture:$ah"
        sudo dpkg --remove-architecture $ah
    sudo apt-get update >/dev/null
fi

转自:https://www.cnblogs.com/cooper-73/p/16139180.html

根据上面脚本,改写成兼容CentOS的脚本:

#!/bin/bash
# Date:2022-04-13
# Author: Create by cooper_73
# Modify:melodyding by 2022-09-30

echo -e "`date` \nReadly to download all of $1's packages \n\
\$1 is target Software name; \n\
\$2 indicates the depth of the dependency level. e.g.:1、2、3...;\n"

sleep 1

down_dir=/root/packages

if [ $1x == ""x ];then
	echo "Error: Please enter parameters."
	exit 1
fi

getDepends()
{
  pkg_list=`yum repoquery --deplist $1 2>/dev/null | awk '/provider: /{print $2}' | sed 's/-[0-9].*//g' | sort -u | xargs`
  pkg_download=`yum repoquery --deplist $1 2>/dev/null | awk '/provider: /{print $2}' | sed 's/-[0-9].*//g' | sort -u | xargs`
}

pkgDownload()
{
echo -e "\nBegin to download...\n"
cd $down_dir
yum install -y --downloadonly --downloaddir=$down_dir $dl_pkgs
ls -t $down_dir | tr ' ' '\n'
echo -e "\n!!! Download Complete !!!\n"
}

checkEnv()
{
if [ `yum --version | wc -l` == 0 ];then
	yum install -y yum yum-utils 2>/dev/null
else
	[ `yumdownloader --version 2>/dev/null | wc -l` == 0 ] && yum install -y yum-utils
fi

if [ -d $down_dir ];then
        chmod 777 $down_dir
else
        mkdir $down_dir && chmod 777 $down_dir
fi

}

#the package architecture.
lah=`uname -i`
ah=$3
lv=$2
if [ ! $ah ];then
        ah=$lah
fi
if [ ! $lv ];then
        lv=0
fi
pkgs="$1"
i=0
echo -e "\nArchitecture:$ah"

#if [ $ah != $lah ];then
#    sudo dpkg --add-architecture $ah
#    echo -e "\nUpdate repo for architecture $ah...\n"
#    sudo apt-get update > /dev/null
#fi

echo  -e "Search all of depends about $1 with lever $lv :\n"
while [ $i -lt $lv ];
do
        let i++
        all_list="$pkgs"
        all_pkgs="$pkgs"
        for p in $pkgs
        do
                getDepends $p $ah
                all_list="$all_list $pkg_list"
                all_pkgs="$all_pkgs $pkg_download"
        done
        pkgs=$all_pkgs
done

checkEnv
echo $all_list
dl_pkgs=`echo "$pkgs $all_pkgs"|tr ' ' '\n'|sort -ru|tr '\n' ' '`
echo $dl_pkgs
pkgDownload

#if [ "$ah" != "$lah" ];then
#        echo "Delete forgin-architecture:$ah"
#        sudo dpkg --remove-architecture $ah
#    sudo apt-get update >/dev/null
#fi
Last Updated: 2022/10/08 23:40:11
[Debian]记一次useradd踩坑史 [Debian]默认shell