mirror of https://github.com/lework/script
lework
5 years ago
2 changed files with 392 additions and 0 deletions
@ -0,0 +1,48 @@
@@ -0,0 +1,48 @@
|
||||
#--- json_escape_string() - Format a string value according to JSON syntax (no unicode for now) --- |
||||
function json_escape_string() { |
||||
sed -E '$!N; s/(["\\\/])/\\\1/g; s/\'$'\b''/\\b/g; s/\n/\\n/g; s/\'$'\t''/\\t/g; s/\'$'\f''/\\f/g; s/\'$'\r''/\\r/g' <<<"$*" | tr -d '\n' |
||||
} |
||||
|
||||
#--- json_unescape_string() - Convert a JSON string (without quotes) to native bash format --- |
||||
function json_unescape_string() { |
||||
sed -E 's/\\"/"/g; s#\\/#/#g; s/\\b/'$'\b''/; s/\\n/\'$'\n''/g; s/\\t/\'$'\t''/g; s/\\f/\'$'\f''/g; s/\\r/\'$'\r''/g; s/\\\\/\\/g' <<<"$*" |
||||
} |
||||
|
||||
#--- json_array() - Format a JSON array --- |
||||
function json_array() { |
||||
local sep='' |
||||
echo -n "[" |
||||
#--- Print each argument as a JSON element --- |
||||
for value in "$@"; do |
||||
#--- Quote value --- |
||||
echo -n "$sep\"`json_escape_string "$value"`\"" |
||||
#--- Add a seperator for subsequent elements --- |
||||
sep=', ' |
||||
done |
||||
#--- Close JSON reponse --- |
||||
echo "]" |
||||
} |
||||
|
||||
#--- json_dict() - Format a JSON dictionary --- |
||||
function json_dict() { |
||||
local var |
||||
local sep='' |
||||
echo -n "{" |
||||
#--- Print each argument as a JSON element --- |
||||
for var in "$@"; do |
||||
#--- var=value : String value supplied inline, escape string for JSON --- |
||||
if [[ "$var" =~ ^([^=]*)=(.*)$ ]]; then |
||||
echo -n "$sep\"${BASH_REMATCH[1]}\": \"`json_escape_string "${BASH_REMATCH[2]}"`\"" |
||||
#--- var:value : Raw JSON value supplied inline, don't escape --- |
||||
elif [[ "$var" =~ ^([^:]*):(.*)$ ]]; then |
||||
echo -n "$sep\"${BASH_REMATCH[1]}\": ${BASH_REMATCH[2]}" |
||||
#--- var : String value is to be obtained from bash environment variables --- |
||||
else |
||||
echo -n "$sep\"$var\": \"`json_escape_string "${!var}"`\"" |
||||
fi |
||||
#--- Add a seperator for subsequent elements --- |
||||
sep=', ' |
||||
done |
||||
#--- Close JSON reponse --- |
||||
echo "}" |
||||
} |
@ -0,0 +1,344 @@
@@ -0,0 +1,344 @@
|
||||
#!/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) |
||||
cp /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} |
||||
cp ${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} |
||||
cp ${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 |
Loading…
Reference in new issue