mirror of https://github.com/lework/script
lework
5 years ago
1 changed files with 211 additions and 0 deletions
@ -0,0 +1,211 @@
@@ -0,0 +1,211 @@
|
||||
#!/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} ${package_name} |
||||
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 ${package_name} |
||||
$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 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}" |
||||
package_name="${2}" |
||||
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 |
Loading…
Reference in new issue