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.
344 lines
8.9 KiB
344 lines
8.9 KiB
#!/bin/bash |
|
# |
|
# Author: lework |
|
# Desc: Set the proxy address of the software source. |
|
# Date: 2020/03/10 |
|
|
|
|
|
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 |
|
###################################################################################################### |
|
|
|
OS=`cat /etc/*-release | grep '^ID=' | \ |
|
sed 's/^ID=["]*\([a-zA-Z]*\).*$/\1/' | \ |
|
tr '[:upper:]' '[:lower:]'` |
|
|
|
|
|
PIP_PROXY="https://pypi.tuna.tsinghua.edu.cn/simple" |
|
GEM_PROXY="https://gems.ruby-china.com/" |
|
NODEJS_PROXY="https://registry.npm.taobao.org" |
|
GO_PROXY="https://mirrors.aliyun.com/goproxy/" |
|
DOCKER_CE_PROXY="mirrors.ustc.edu.cn" |
|
DOCKER_HUB_PROXY="http://hub-mirror.c.163.com" |
|
DOCKER_HTTP_PROXY="" |
|
DOCKER_HTTPS_PROXY="" |
|
CONTAINERD_HTTP_PROXY="" |
|
CONTAINERD_HTTPS_PROXY="" |
|
CENTOS_PROXY="mirrors.ustc.edu.cn" |
|
DEBAIN_PROXY="mirrors.ustc.edu.cn" |
|
DEBAIN_ARCHIVE_PROXY="http://mirrors.163.com/debian-archive" |
|
UBUNTU_PROXY="mirrors.tuna.tsinghua.edu.cn" |
|
ALPINE_PROXY="mirrors.aliyun.com" |
|
KUBERNETES_PROXY="https://mirrors.aliyun.com" |
|
|
|
|
|
###################################################################################################### |
|
# function |
|
###################################################################################################### |
|
|
|
_get_proxy() { |
|
echo "SoftWare: ${FUNCNAME[1]}" >&2 |
|
local proxy=${1:-${2:-}} |
|
while [ -z ${proxy} ]; do |
|
read -p "Input ${3:-}Proxy: " proxy |
|
done |
|
echo -e "Set: ${proxy}\n" >&2 |
|
echo "${proxy}" |
|
} |
|
|
|
|
|
centos() { |
|
local _proxy=$(_get_proxy ${1:-} $CENTOS_PROXY) |
|
|
|
sed -e 's!^#baseurl=!baseurl=!g' \ |
|
-e 's!^mirrorlist=!#mirrorlist=!g' \ |
|
-e "s!mirror.centos.org!${_proxy}!g" \ |
|
-i /etc/yum.repos.d/CentOS-*.repo |
|
|
|
yum install -y epel-release |
|
sed -e 's!^mirrorlist=!#mirrorlist=!g' \ |
|
-e 's!^#baseurl=!baseurl=!g' \ |
|
-e 's!^metalink!#metalink!g' \ |
|
-e "s!//download\.fedoraproject\.org/pub!//${_proxy}!g" \ |
|
-i /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo |
|
} |
|
|
|
debian() { |
|
local _proxy=$(_get_proxy ${1:-} $DEBAIN_PROXY) |
|
sudo sed -i "s/deb.debian.org/${_proxy}/g" /etc/apt/sources.list |
|
sudo apt-get update |
|
} |
|
|
|
debiani_archive() { |
|
local _proxy=$(_get_proxy ${1:-} $DEBAIN_ARCHIVE_PROXY) |
|
[ -f "/etc/apt/sources.list" ] && cp -f /etc/apt/sources.list{,-bak} |
|
cat << EOF > /etc/apt/sources.list |
|
deb ${_proxy}/debian/ wheezy main non-free contrib |
|
deb ${_proxy}/debian/ wheezy-backports main non-free contrib |
|
deb-src ${_proxy}/debian/ wheezy main non-free contrib |
|
deb-src ${_proxy}/debian/ wheezy-backports main non-free contrib |
|
deb ${_proxy}/debian-security/ wheezy/updates main non-free contrib |
|
deb-src ${_proxy}/debian-security/ wheezy/updates main non-free contrib |
|
EOF |
|
|
|
sudo apt-get -o Acquire::Check-Valid-Until=false update |
|
} |
|
|
|
ubuntu() { |
|
local _proxy=$(_get_proxy ${1:-} $UBUNTU_PROXY) |
|
sudo sed -i "s/archive.ubuntu.com/${_proxy}/g" /etc/apt/sources.list |
|
sudo apt-get update |
|
} |
|
|
|
alpine() { |
|
local _proxy=$(_get_proxy ${1:-} $ALPINE_PROXY) |
|
sed -i "s/dl-cdn.alpinelinux.org/${_proxy}/g" /etc/apk/repositories |
|
} |
|
|
|
easy_install() { |
|
local _proxy=$(_get_proxy ${1:-} $PIP_PROXY) |
|
|
|
cat <<EOF > ~/.pydistutils.cfg |
|
[easy_install] |
|
index-url = ${_proxy} |
|
EOF |
|
|
|
} |
|
|
|
pip() { |
|
local _proxy=$(_get_proxy ${1:-} $PIP_PROXY) |
|
|
|
local d=~/.pip |
|
[ ! -d "${d}" ] && mkdir "${d}" |
|
|
|
cat << EOF > ${d}/pip.conf |
|
[global] |
|
index-url = ${_proxy} |
|
EOF |
|
|
|
easy_install ${_proxy} |
|
} |
|
|
|
ruby() { |
|
local _proxy=$(_get_proxy ${1:-} $GEM_PROXY) |
|
gem sources --add ${_proxy} --remove https://rubygems.org/ |
|
} |
|
|
|
npm() { |
|
local _proxy=$(_get_proxy ${1:-} $NODEJS_PROXY) |
|
env npm config set registry ${_proxy} |
|
} |
|
|
|
yarn() { |
|
local _proxy=$(_get_proxy ${1:-} $NODEJS_PROXY) |
|
env yarn config set registry ${_proxy} |
|
} |
|
|
|
go() { |
|
local _proxy=$(_get_proxy ${1:-} $GO_PROXY) |
|
export GO111MODULE=on |
|
export GOPROXY=${_proxy} |
|
|
|
cat << EOF >> /etc/profile |
|
export GO111MODULE=on |
|
export GOPROXY=${_proxy} |
|
EOF |
|
} |
|
|
|
docker-ce() { |
|
local _proxy=$(_get_proxy ${1:-} $DOCKER_CE_PROXY) |
|
|
|
case "$OS" in |
|
centos) |
|
curl -s -o /etc/yum.repos.d/docker-ce.repo https://${_proxy}/docker-ce/linux/centos/docker-ce.repo |
|
sed -i "s#download.docker.com#${_proxy}/docker-ce#g" /etc/yum.repos.d/docker-ce.repo |
|
yum makecache |
|
;; |
|
debian) |
|
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - |
|
sudo add-apt-repository \ |
|
"deb [arch=amd64] http://${_proxy}/docker-ce/linux/debian \ |
|
$(lsb_release -cs) stable" |
|
sudo apt-get update |
|
;; |
|
ubuntu) |
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - |
|
sudo add-apt-repository \ |
|
"deb [arch=amd64] https://${_proxy}/docker-ce/linux/ubuntu \ |
|
$(lsb_release -cs) stable" |
|
sudo apt-get update |
|
;; |
|
*) |
|
echo "不支持${OS}系统" |
|
;; |
|
esac |
|
} |
|
|
|
|
|
kubernetes() { |
|
local _proxy=$(_get_proxy ${1:-} $KUBERNETES_PROXY) |
|
|
|
case "$OS" in |
|
centos) |
|
cat <<EOF > /etc/yum.repos.d/kubernetes.repo |
|
[kubernetes] |
|
name=Kubernetes |
|
baseurl=${_proxy}/kubernetes/yum/repos/kubernetes-el7-x86_64/ |
|
enabled=1 |
|
gpgcheck=1 |
|
repo_gpgcheck=1 |
|
gpgkey=${_proxy}/kubernetes/yum/doc/yum-key.gpg ${_proxy}/kubernetes/yum/doc/rpm-package-key.gpg |
|
EOF |
|
;; |
|
debian) |
|
apt-get update && apt-get install -y apt-transport-https |
|
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - |
|
cat << EOF >/etc/apt/sources.list.d/kubernetes.list |
|
deb ${_proxy}/kubernetes/apt/ kubernetes-xenial main |
|
EOF |
|
apt-get update |
|
;; |
|
*) |
|
echo "不支持${OS}系统" |
|
;; |
|
esac |
|
} |
|
|
|
|
|
docker-hub() { |
|
local _proxy=$(_get_proxy ${1:-} $DOCKER_HUB_PROXY) |
|
local d=/etc/docker |
|
[ ! -d "${d}" ] && mkdir ${d} |
|
[ -f "${d}/daemon.json" ] && cp -f ${d}/daemon.json{,-bak} |
|
cat > ${d}/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": [ |
|
"${_proxy}" |
|
] |
|
} |
|
EOF |
|
systemctl restart docker |
|
} |
|
|
|
docker-http() { |
|
local _http_proxy=$(_get_proxy ${1:-''} ${DOCKER_HTTP_PROXY:-''} "http ") |
|
local _https_proxy=$(_get_proxy ${1:-''} ${DOCKER_HTTPS_PROXY:-''} "https ") |
|
|
|
local d=/etc/systemd/system/docker.service.d |
|
[ ! -d "${d}" ] && mkdir ${d} |
|
|
|
cat << EOF > ${d}/http-proxy.conf |
|
[Service] |
|
Environment="HTTP_PROXY=${_http_proxy}" |
|
Environment="HTTPS_PROXY=${_https_proxy}" |
|
EOF |
|
|
|
systemctl daemon-reload |
|
systemctl restart docker |
|
} |
|
|
|
containerd-hub() { |
|
local _proxy=$(_get_proxy ${1:-} $DOCKER_HUB_PROXY) |
|
# containerd config default > /etc/containerd/config.toml |
|
sed -i "s#https://registry-1.docker.io#${_proxy}#g" /etc/containerd/config.toml |
|
} |
|
|
|
containerd-http() { |
|
local _http_proxy=$(_get_proxy ${1:-''} ${CONTAINERD_HTTP_PROXY:-''} "http ") |
|
local _https_proxy=$(_get_proxy ${1:-''} ${CONTAINERD_HTTPS_PROXY:-''} "https ") |
|
local d=/etc/systemd/system/containerd.service.d |
|
[ ! -d "${d}" ] && mkdir ${d} |
|
|
|
cat << EOF > ${d}/http-proxy.conf |
|
[Service] |
|
Environment="HTTP_PROXY=${_http_proxy}" |
|
Environment="HTTPS_PROXY=${_https_proxy}" |
|
EOF |
|
|
|
systemctl daemon-reload |
|
systemctl restart containerd |
|
} |
|
|
|
podman() { |
|
local _proxy=$(_get_proxy ${1:-} $DOCKER_HUB_PROXY) |
|
local d=/etc/containers |
|
[ ! -d "${d}" ] && mkdir ${d} |
|
[ -f "${d}/registries.conf" ] && cp -f ${d}/registries.conf{,.bak} |
|
cat << EOF > ${d}/registries.conf |
|
unqualified-search-registries = ["docker.io","quay.io"] |
|
|
|
[[registry]] |
|
prefix = "docker.io" |
|
location = "${_proxy}" |
|
EOF |
|
} |
|
|
|
_help() { |
|
cat <<EOM |
|
|
|
Set the proxy address of the software source. |
|
|
|
Usage: |
|
$(basename $0) [[-p|--proxy] software] | [-l] | [-h] |
|
-p,--proxy Specify proxy node url |
|
-l,--list Supported software list |
|
-h,--help View help |
|
|
|
Example: |
|
$(basename $0) pip |
|
$(basename $0) -p http://mirrors.aliyun.com/pypi/simple pip |
|
$(basename $0) docker-hub |
|
EOM |
|
exit 1 |
|
|
|
} |
|
|
|
_list() { |
|
echo -e "\nSupported software list:\n" |
|
echo $FUNCS | sed 's/ /\n/g' |
|
} |
|
|
|
###################################################################################################### |
|
# main |
|
###################################################################################################### |
|
proxy="" |
|
|
|
FUNCS=$(declare -F | cut -d ' ' -f3 | sort | grep -v -E '^_.*') |
|
|
|
[ "$#" == "0" ] && _help |
|
|
|
|
|
while [ "${1:-}" != "" ]; do |
|
case ${1} in |
|
-p | --proxy ) shift |
|
proxy=${1} |
|
;; |
|
$([[ "${FUNCS[@]}" =~ "${1}" ]] && echo "*")) ${1} ${proxy}; exit |
|
;; |
|
-l | --list ) _list |
|
;; |
|
-h | --help ) _help |
|
;; |
|
* ) _help |
|
esac |
|
shift |
|
done
|
|
|