#!/bin/bash # # Author: lework # Desc: Download Packages With Dependencies Locally. # Date: 2020/03/10 trap "echo -e '\n\033[0;31m[Error] stop container.\033[0m'; docker stop package; exit 1" ERR 2 3 set -o errexit # Exit on most errors (see the manual) set -o errtrace # Make sure any error trap is inherited set -o nounset # Disallow expansion of unset variables set -o pipefail # Use last non-zero exit code in a pipeline ###################################################################################################### # environment configuration ###################################################################################################### # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' BLUE='\033[0;36m' PLAIN='\033[0m' ###################################################################################################### # function ###################################################################################################### echo_title() { echo -e "${GREEN}$1${PLAIN}" } check_or_install_docker() { if ! $(command -v docker > /dev/null 2>&1);then [ ! -d "/etc/docker" ] && mkdir -p /etc/docker cat > /etc/docker/daemon.json < /dev/null 2>&1); then echo -e "${RED}Error: curl command not found. You must be install curl command at first.${PLAIN}" exit 1 fi curl -sSL https://get.daocloud.io/docker | bash -s - --mirror AzureChinaCloud fi if ! $(docker version > /dev/null 2>&1); then echo_title "[Check] start dockerd." [ -f /var/run/docker.sock ] && rm -f /var/run/docker.sock dockerd --config-file /etc/docker/daemon.json &> /dev/null & sleep 5 fi } download_package_centos() { docker_repo_mount="-v ${package_repo}:/etc/yum.repos.d/${package_name}.repo" echo_title "[Docker] start container" docker run --rm -tid --name ${docker_name} -v ${package_path}:${package_tmp_path} ${docker_repo_mount:-''} ${docker_image} echo_title "\n[Docker] update repo cache" $docker_exec sed -e 's!^#baseurl=!baseurl=!g' \ -e 's!^mirrorlist=!#mirrorlist=!g' \ -e 's!mirror.centos.org!mirrors.aliyun.com!g' \ -i /etc/yum.repos.d/CentOS-Base.repo $docker_exec yum install -y epel-release >> /dev/null 2>&1 $docker_exec sed -e 's!^mirrorlist=!#mirrorlist=!g' \ -e 's!^#baseurl=!baseurl=!g' \ -e 's!^metalink!#metalink!g' \ -e 's!//download\.fedoraproject\.org/pub!//mirrors.aliyun.com!g' \ -e 's!http://mirrors\.aliyun!https://mirrors.aliyun!g' \ -i /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo $docker_exec yum clean all > /dev/null 2>&1 $docker_exec yum makecache echo_title "\n[Docker] download package" $docker_exec yum install -y --downloadonly --downloaddir=${package_tmp_path} ${packages} echo_title "\n[Docker] stop container" $docker_stop } download_package_debian() { docker_repo_mount="-v ${package_repo}:/etc/apt/sources.list.d/${package_name}.list" echo_title "[Docker] start container" docker run --rm -tid --name ${docker_name} -v ${package_path}:${package_tmp_path} ${docker_repo_mount:-''} ${docker_image} echo_title "\n[Docker] update repo cache" $docker_exec sed -e "s#http://deb.debian.org#http://mirrors.aliyun.com#g" \ -e "s#http://security.debian.org#http://mirrors.aliyun.com#g" \ -e "s#http://security-cdn.debian.org#http://mirrors.aliyun.com#g" \ -i /etc/apt/sources.list $docker_exec apt-get update $docker_exec rm -rf /var/cache/apt/archives/* echo_title "\n[Docker] download package" $docker_exec apt-get install --download-only -y ${packages} $docker_exec find /var/cache/apt/archives/ -name "*.deb" -exec cp {} ${package_tmp_path} \; echo_title "\n[Docker] stop container" $docker_stop } download_package_centos6() { docker_image="centos:6" download_package_centos } download_package_centos7() { docker_image="centos:7" download_package_centos } download_package_centos8() { docker_image="centos:8" download_package_centos } download_package_debian8() { docker_image="debian:8" download_package_debian } download_package_debian9() { docker_image="debian:9" download_package_debian } download_package_debian10() { docker_image="debian:10" download_package_debian } usage_help() { cat <