mirror of https://github.com/lework/script
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
213 lines
6.0 KiB
213 lines
6.0 KiB
#!/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 <<EOF |
|
{ |
|
"log-driver": "json-file", |
|
"log-opts": { |
|
"max-size": "100m", |
|
"max-file": "3" |
|
}, |
|
"live-restore": true, |
|
"max-concurrent-downloads": 10, |
|
"max-concurrent-uploads": 10, |
|
"storage-driver": "overlay2", |
|
"storage-opts": [ |
|
"overlay2.override_kernel_check=true" |
|
], |
|
"exec-opts": ["native.cgroupdriver=systemd"], |
|
"registry-mirrors": [ |
|
"http://dockerhub.azk8s.cn", |
|
"http://hub-mirror.c.163.com" |
|
] |
|
} |
|
EOF |
|
echo_title "[Check] install docker-ce." |
|
# curl -sSL https://get.docker.com/ | bash -s - --mirror AzureChinaCloud |
|
if ! $(command -v curl > /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 <<EOM |
|
|
|
Download Packages With Dependencies Locally. |
|
|
|
Usage: |
|
$(basename $0) system package [package repo] |
|
|
|
Support system: |
|
$(echo ${support_system[@]}) |
|
|
|
Example: |
|
$(basename $0) centos7 ansible |
|
$(basename $0) centos7 "python36 python36-devel" |
|
$(basename $0) centos7 ceph /root/ceph.repo |
|
EOM |
|
exit 1 |
|
|
|
} |
|
|
|
|
|
###################################################################################################### |
|
# main |
|
###################################################################################################### |
|
|
|
support_system=(centos6 centos7 centos8 debian8 debian9 debian10) |
|
|
|
if [ $# -le 1 ]; then |
|
usage_help |
|
fi |
|
|
|
|
|
system="${1}" |
|
packages="${2}" |
|
package_name="${packages%% *}" |
|
package_repo="${3:-}" |
|
|
|
package_path="$(pwd)/package_${system}_${package_name:-local}" |
|
package_tmp_path="/tmp/package" |
|
|
|
docker_name="package" |
|
docker_exec="docker exec ${docker_name}" |
|
docker_stop="docker stop ${docker_name}" |
|
|
|
check_or_install_docker |
|
|
|
case "${support_system[@]}" in |
|
*"$system"*) |
|
download_package_$system |
|
|
|
echo_title "\n[Local] show file" |
|
echo -e "Path: ${package_path}\n" |
|
ls -al $package_path |
|
exit 0;; |
|
esac |
|
|
|
usage_help
|
|
|