zapret/install_easy.sh

195 lines
3.9 KiB
Bash
Executable File

#!/bin/sh
# automated script for easy installing zapret on systemd based system
# all required tools must be already present or system must use apt as package manager
# if its not apt or yum based system then manually install ipset, curl
exists()
{
which $1 >/dev/null 2>/dev/null
}
whichq()
{
which $1 2>/dev/null
}
[ $(id -u) -ne "0" ] && {
echo root is required
exists sudo && exec sudo $0
exists su && exec su -c $0
echo su or sudo not found
exit 2
}
SCRIPT=$(readlink -f $0)
EXEDIR=$(dirname $SCRIPT)
ZAPRET_BASE=/opt/zapret
INIT_SCRIPT_SRC=$EXEDIR/init.d/debian/zapret
INIT_SCRIPT=/etc/init.d/zapret
GET_IPLIST=$EXEDIR/ipset/get_antizapret.sh
GET_IPLIST_PREFIX=$EXEDIR/ipset/get_
SYSTEMD_SYSV_GENERATOR=/lib/systemd/system-generators/systemd-sysv-generator
exitp()
{
echo
echo press enter to continue
read A
exit $1
}
echo \* checking system ...
SYSTEMCTL=$(whichq systemctl)
[ -x "$SYSTEMCTL" ] || {
echo not systemd based system
exitp 5
}
[ -x "$SYSTEMD_SYSV_GENERATOR" ] || {
echo systemd is present but it does not support sysvinit compatibility
echo $SYSTEMD_SYSV_GENERATOR is required
exitp 5
}
echo \* checking location ...
[ "$EXEDIR" != "$ZAPRET_BASE" ] && {
echo easy install is supported only from default location : $ZAPRET_BASE
echo currenlty its run from $EXEDIR
echo -n "do you want the installer to copy it for you (Y/N) ? "
read A
if [ "$A" = "Y" ] || [ "$A" = "y" ]; then
if [ -d "$ZAPRET_BASE" ]; then
echo installer found existing $ZAPRET_BASE
echo -n "do you want to delete all files there and copy this version (Y/N) ? "
read A
if [ "$A" = "Y" ] || [ "$A" = "y" ]; then
rm -r "$ZAPRET_BASE"
else
echo refused to overwrite $ZAPRET_BASE. exiting
exitp 3
fi
fi
cp -R $EXEDIR $ZAPRET_BASE
echo relaunching itself from $ZAPRET_BASE
exec $ZAPRET_BASE/$(basename $0)
else
echo copying aborted. exiting
exitp 3
fi
}
echo running from $EXEDIR
echo \* checking prerequisites ...
if exists ipset && exists curl ; then
echo everything is present
else
echo \* installing prerequisites ...
APTGET=$(whichq apt-get)
YUM=$(whichq yum)
PACMAN=$(whichq pacman)
if [ -x "$APTGET" ] ; then
"$APTGET" update
"$APTGET" install -y --no-install-recommends ipset curl dnsutils || {
echo could not install prerequisites
exitp 6
}
elif [ -x "$YUM" ] ; then
"$YUM" -y install curl ipset daemonize || {
echo could not install prerequisites
exitp 6
}
elif [ -x "$PACMAN" ] ; then
"$PACMAN" -Syy
"$PACMAN" --noconfirm -S ipset curl || {
echo could not install prerequisites
exitp 6
}
else
echo supported package manager not found
echo you must manually install : ipset curl
exitp 5
fi
fi
echo \* installing binaries ...
"$EXEDIR/install_bin.sh"
echo \* installing init script ...
"$SYSTEMCTL" stop zapret 2>/dev/null
script_mode=Y
[ -f "$INIT_SCRIPT" ] &&
{
cmp -s $INIT_SCRIPT $INIT_SCRIPT_SRC ||
{
echo $INIT_SCRIPT already exists and differs from $INIT_SCRIPT_SRC
echo Y = overwrite with new version
echo N = exit
echo L = leave current version and continue
read script_mode
case "${script_mode}" in
Y|y|L|l)
;;
*)
echo aborted
exitp 3
;;
esac
}
}
if [ "$script_mode" = "Y" ] || [ "$script_mode" = "y" ]; then
echo -n "copying : "
cp -vf $INIT_SCRIPT_SRC $INIT_SCRIPT
fi
echo \* registering init script ...
"$SYSTEMCTL" enable zapret || {
echo could not register $INIT_SCRIPT with systemd
exitp 20
}
echo \* downloading blocked ip list ...
"$GET_IPLIST" || {
echo could not download ip list
exitp 25
}
echo \* adding crontab entry ...
CRONTMP=/tmp/cron.tmp
crontab -l >$CRONTMP
if grep -q "$GET_IPLIST_PREFIX" $CRONTMP; then
echo some entries already exist in crontab. check if this is corrent :
grep "$GET_IPLIST_PREFIX" $CRONTMP
else
echo "0 12 * * */2 $GET_IPLIST" >>$CRONTMP
crontab $CRONTMP
fi
rm -f $CRONTMP
echo \* starting zapret service ...
systemctl start zapret || {
echo could not start zapret service
exitp 30
}
exitp 0