Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
executable file 187 lines (155 sloc) 5.9 KB
#!/bin/sh
updates="https://raw.github.com/chilicuil/learn/master/sh/is/apt-proxy"
_header() {
clear
printf "%b\\n" "\033[1m-------------------------\033[7m Setup apt proxy \033[0m\033[1m----------------------------\033[0m"
printf "%b\\n" "\033[1mUpdates:\033[0m ${updates}"
printf "%b\\n" "\033[1m----------------------------------------------------------------------\033[0m"
}
_whereis() {
[ -z "${1}" ] && return 1
[ -n "${2}" ] && return 1
if ! command -v "${1}" 2>/dev/null; then
return 1
fi
}
_existaptproxy() {
avahi-browse -a -t | grep apt-cacher-ng >/dev/null && return 0
return 1
}
_animcui() {
[ -z "${1}" ] && { printf "%5s\n" ""; return 1; }
if ! printf "%s" "$(pidof "${1}")" | grep "[0-9].*" >/dev/null; then
printf "%5s\n" ""
return 1;
fi
_animcui__animation_state="1"
if [ ! "$(ps -p "$(pidof "${1}")" -o comm= 2>/dev/null)" ]; then
printf "%5s\n" ""
return 1
fi
printf "%5s" ""
while [ "$(ps -p "$(pidof "${1}")" -o comm= 2>/dev/null)" ]; do
printf "%b" "\b\b\b\b\b"
case "${_animcui__animation_state}" in
1) printf "%s" '\o@o\'
_animcui__animation_state="2" ;;
2) printf "%s" '|o@o|'
_animcui__animation_state="3" ;;
3) printf "%s" '/o@o/'
_animcui__animation_state="4" ;;
4) printf "%s" '|o@o|'
_animcui__animation_state="1" ;;
esac
sleep 1
done
printf "%b" "\b\b\b\b\b" && printf "%5s\n" ""
}
_getroot() {
if [ ! X"${LOGNAME}" = X"root" ]; then
printf "%s\\n" "Detecting user ${LOGNAME} (non-root) ..."
printf "%s\\n" "Checking if sudo is available ..."
if command -v "sudo" >/dev/null 2>&1; then
sudo -K
if [ -n "${sudopwd}" ]; then
# password check
_getroot__test="$(printf "%s\\n" "${sudopwd}" | sudo -S ls 2>&1)"
_getroot__status="${?}"
_getroot__not_allowed="$(printf "%s" "${_getroot__test}" | \
grep -i "sudoers")"
if [ -n "${_getroot__not_allowed}" ]; then
printf "%s %s\\n" "You're not allowed to use sudo," \
"get in contact with your local administrator"
exit
fi
if [ X"${_getroot__status}" != X"0" ]; then
sudopwd=""
printf "%s\\n" "Incorrect preseed password"
exit
else
sudocmd="sudo -S"
fi
printf "%s\\n" " - all set ..."
return
fi
i=0 ; while [ "${i}" -lt "3" ]; do
i="$((${i} + 1))"
printf "%s" " - enter sudo password: "
stty -echo
read sudopwd
stty echo
# password check
_getroot__test="$(printf "%s\\n" "${sudopwd}" | sudo -S ls 2>&1)"
_getroot__status="${?}"
_getroot__not_allowed="$(printf "%s" "${_getroot__test}" | \
grep -i "sudoers")"
if [ -n "${_getroot__not_allowed}" ]; then
printf "\\n%s %s\\n" "You're not allowed to use sudo," \
"get in contact with your local administrator"
exit
fi
printf "\\n"
if [ X"${_getroot__status}" != X"0" ]; then
sudopwd=""
else
sudocmd="sudo -S"
break
fi
done
if [ -z "${sudopwd}" ]; then
printf "%s\\n" "Failed authentication"
exit
fi
else
printf "%s %s\\n" "You're not root and sudo isn't available." \
"Please run this script as root!"
exit
fi
fi
}
_cmdsudo() {
[ -z "${1}" ] && return 1
printf "%s \\n" " $ sudo ${*}"
_cmdsudo__output="$(printf "%s\\n" "${sudopwd}" | ${sudocmd} sh -c "eval ${*}" 2>&1)"
_cmdsudo__status="${?}"
if [ X"${_cmdsudo__status}" != X"0" ]; then
printf "> %s:%s\\n" "${*}" "${_cmdsudo__output}"
printf "\\n"
exit "${_cmdsudo__status}"
else
return "${_cmdsudo__status}";
fi
}
_waitforsudo() {
[ -z "${1}" ] && return 1
printf "%s " " $ sudo ${@} ..."
printf "%s\\n" "${sudopwd}" | ${sudocmd} sh -c "eval ${*}" >/dev/null 2>&1 &
sleep 1s
if [ X"${1}" = X"DEBIAN_FRONTEND=noninteractive" ]; then
_animcui "${2}"
else
_animcui "${1}"
fi
}
_header
_getroot
printf "%s\\n" "[+] setting up an apt-get proxy ..."
if ! _whereis avahi-browse >/dev/null; then
_waitforsudo apt-get update
_waitforsudo apt-get install --no-install-recommends -y avahi-utils
fi
if _existaptproxy; then
apt_proxy_server="$(avahi-browse -a -t -r -p | grep apt-cacher-ng | grep = | cut -d";" -f8)"
printf "%s\\n" "[+] exists an apt-get proxy in the network at ${apt_proxy_server}, using it ..."
[ ! -f /usr/share/squid-deb-proxy-client/apt-avahi-discover ] && _waitforsudo apt-get install --no-install-recommends -y squid-deb-proxy-client
else
printf "%s\\n" "[+] no apt-get proxy found, installing one locally ..."
_waitforsudo apt-get install --no-install-recommends -y squid-deb-proxy-client apt-cacher-ng
[ ! -f /etc/avahi/services/apt-cacher-ng.service ] && _waitforsudo wget http://javier.io/mirror/apt-cacher-ng.service -O /etc/avahi/services/apt-cacher-ng.service
if [ -d "${HOME}"/misc/ubuntu/proxy/apt-cacher-ng/ ]; then
printf "%s\\n" "[+] exporting files ..."
_cmdsudo rm -rf /var/cache/apt-cacher-ng
_cmdsudo ln -s "${HOME}"/misc/ubuntu/proxy/apt-cacher-ng/ /var/cache/apt-cacher-ng
fi
fi
printf "%s\\n" "[+] done!, have fun!"