mirror of
https://github.com/bol-van/zapret.git
synced 2025-04-19 05:22:58 +03:00
systemd: use timers instead of cron
This commit is contained in:
parent
0ed31488dd
commit
a3930e12d9
@ -246,7 +246,8 @@ TPWS_OPT_HTTP="--hostspell=HOST --split-http-req=method"
|
||||
TPWS_OPT_HTTPS="--split-pos=3"
|
||||
|
||||
Параметр GETLIST указывает инсталятору install_easy.sh какой скрипт дергать
|
||||
для обновления списка заблокированных ip или хостов.
Он же вносится в crontab.
|
||||
для обновления списка заблокированных ip или хостов.
|
||||
Он же вызывается через get_config.sh из запланированных заданий (crontab или systemd timer).
|
||||
Поместите сюда название скрипта, который будете использовать для обновления листов.
|
||||
Если не нужно, то параметр следует закомментировать.
|
||||
|
||||
@ -286,20 +287,23 @@ TPWS_OPT_HTTPS="--split-pos=3"
|
||||
Создать ссылку на service unit в systemd :
|
||||
ln -fs /opt/zapret/init.d/systemd/zapret.service /lib/systemd/system
|
||||
|
||||
Удалить старые листы, если они были созданы ранее :
|
||||
rm /opt/zapret/ipset/zapret-ip.txt* /opt/zapret/ipset/zapret-ip-user.txt* /opt/zapret/ipset/zapret-ip-ipban.txt* /opt/zapret/ipset/zapret-ip-user-ipban.txt* /opt/zapret/ipset/zapret-hosts.txt*
|
||||
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены.
|
||||
Выполнить скрипт обновления листа :
|
||||
/opt/zapret/ipset/get_config.sh
|
||||
Настроить таймер systemd для обновления листа :
|
||||
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.service /lib/systemd/system
|
||||
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.timer /lib/systemd/system
|
||||
|
||||
Принять изменения в systemd :
|
||||
systemctl daemon-reload
|
||||
|
||||
Включить автозапуск службы :
|
||||
systemctl enable zapret
|
||||
|
||||
Удалить старые листы, если они были созданы ранее :
|
||||
rm /opt/zapret/ipset/zapret-ip.txt* /opt/zapret/ipset/zapret-ip-user.txt* /opt/zapret/ipset/zapret-ip-ipban.txt* /opt/zapret/ipset/zapret-ip-user-ipban.txt* /opt/zapret/ipset/zapret-hosts.txt*
|
||||
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены.
|
||||
Выполнить скрипт обновления листа :
|
||||
/opt/zapret/ipset/get_config.sh
|
||||
Зашедулить задание обновления листа :
|
||||
crontab -e
|
||||
Создать строчку "0 12 */2 * * /opt/zapret/ipset/get_config.sh"
|
||||
Включить таймер обновления листа :
|
||||
systemctl enable zapret-list-update.timer
|
||||
|
||||
Запустить службу :
|
||||
systemctl start zapret
|
||||
@ -315,14 +319,16 @@ TPWS_OPT_HTTPS="--split-pos=3"
|
||||
Попробуйте снять дамп в wireshark или "tcpdump -vvv -X host <ip>", посмотрите действительно ли первый
|
||||
сегмент TCP уходит коротким и меняется ли регистр "Host:".
|
||||
|
||||
Шпаргалка по управлению службой :
|
||||
Шпаргалка по управлению службой и таймером :
|
||||
|
||||
enable auto start : systemctl enable zapret
|
||||
disable auto start : systemctl disable zapret
|
||||
start : sytemctl start zapret
|
||||
stop : systemctl stop zapret
|
||||
status, output messages : systemctl status zapret
|
||||
timer info : systemctl list-timer
|
||||
delete service : systemctl disable zapret ; rm /lib/systemd/system/zapret.service
|
||||
delete timer : systemctl disable zapret-list-update.timer ; rm /lib/systemd/system/zapret-list-update.*
|
||||
|
||||
Centos 7+, Fedora
|
||||
-----------------
|
||||
@ -345,18 +351,20 @@ OpenSUSE
|
||||
|
||||
Далее все аналогично debian, кроме расположения systemd.
|
||||
В opensuse он находится не в /lib/systemd, а в /usr/lib/systemd.
|
||||
Правильная команда будет :
|
||||
Правильные команды будут :
|
||||
|
||||
ln -fs /opt/zapret/init.d/systemd/zapret.service /usr/lib/systemd/system
|
||||
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.service /usr/lib/systemd/system
|
||||
ln -fs /opt/zapret/init.d/systemd/zapret-list-update.timer /usr/lib/systemd/system
|
||||
|
||||
Arch linux
|
||||
----------
|
||||
|
||||
Построен на базе systemd. По умолчанию отсутствует cron.
|
||||
Построен на базе systemd.
|
||||
|
||||
Установить пакеты :
|
||||
pacman -Syy
|
||||
pacman --noconfirm -S ipset curl cronie
|
||||
pacman --noconfirm -S ipset curl
|
||||
|
||||
Далее все аналогично debian.
|
||||
|
||||
@ -372,12 +380,29 @@ git и curl по умолчанию могут присутствовать, ips
|
||||
|
||||
emerge ipset
|
||||
|
||||
Подключаем init скрипт :
|
||||
Настроить параметры согласно разделу "Выбор параметров".
|
||||
|
||||
Запустить автоинсталятор бинариков. Он сам определит рабочую архитектуру и настроит все бинарики.
|
||||
/opt/zapret/install_bin.sh
|
||||
АЛЬТЕРНАТИВА : зайти в tpws,nfq,ip2net,mdig, в каждом выполнить make. Получите динамические бинарики под вашу ось.
|
||||
|
||||
Удалить старые листы, если они были созданы ранее :
|
||||
rm /opt/zapret/ipset/zapret-ip.txt* /opt/zapret/ipset/zapret-ip-user.txt* /opt/zapret/ipset/zapret-ip-ipban.txt* /opt/zapret/ipset/zapret-ip-user-ipban.txt* /opt/zapret/ipset/zapret-hosts.txt*
|
||||
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены.
|
||||
Выполнить скрипт обновления листа :
|
||||
/opt/zapret/ipset/get_config.sh
|
||||
Зашедулить обновление листа :
|
||||
crontab -e
|
||||
Создать строчку "0 12 */2 * * /opt/zapret/ipset/get_config.sh"
|
||||
|
||||
Подключить init скрипт :
|
||||
|
||||
ln -fs /opt/zapret/init.d/sysv/zapret /etc/init.d
|
||||
rc-update add zapret
|
||||
|
||||
Далее все как в debian, исключая все, касаемое systemd.
|
||||
Запустить службу :
|
||||
|
||||
rc-service zapret start
|
||||
|
||||
Шпаргалка по управлению службой :
|
||||
|
||||
@ -416,7 +441,7 @@ stop : rc-service zapret stop
|
||||
|
||||
Если система на базе systemd, но используется не поддерживаемый инсталятором менеджер пакетов
|
||||
или названия пакетов не соответствуют прописанным в инсталятор, пакеты нужно установить вручную.
|
||||
Требуется : ipset curl cron
|
||||
Требуется : ipset curl
|
||||
|
||||
Фаерволлы
|
||||
---------
|
||||
@ -508,7 +533,7 @@ ipset можно выкинуть, если не будем пользовать
|
||||
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены.
|
||||
Выполнить скрипт обновления листа :
|
||||
/opt/zapret/ipset/get_config.sh
|
||||
Зашедулить задание обновления листа :
|
||||
Зашедулить обновление листа :
|
||||
crontab -e
|
||||
Создать строчку "0 12 */2 * * /opt/zapret/ipset/get_config.sh"
|
||||
|
||||
|
13
init.d/systemd/zapret-list-update.service
Normal file
13
init.d/systemd/zapret-list-update.service
Normal file
@ -0,0 +1,13 @@
|
||||
[Unit]
|
||||
Description=zapret ip/host list update
|
||||
|
||||
[Service]
|
||||
Restart=no
|
||||
IgnoreSIGPIPE=no
|
||||
KillMode=control-group
|
||||
GuessMainPID=no
|
||||
RemainAfterExit=no
|
||||
ExecStart=/opt/zapret/ipset/get_config.sh
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
11
init.d/systemd/zapret-list-update.timer
Normal file
11
init.d/systemd/zapret-list-update.timer
Normal file
@ -0,0 +1,11 @@
|
||||
[Unit]
|
||||
Description=zapret ip/host list update timer
|
||||
|
||||
[Timer]
|
||||
OnCalendar=*-*-* 00:00:00
|
||||
RandomizedDelaySec=86400
|
||||
Persistent=true
|
||||
Unit=zapret-list-update.service
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
104
install_easy.sh
104
install_easy.sh
@ -227,6 +227,8 @@ check_location()
|
||||
exitp 3
|
||||
fi
|
||||
fi
|
||||
local B=$(dirname "$ZAPRET_BASE")
|
||||
[ -d "$B" ] || mkdir -p "$B"
|
||||
$1 "$EXEDIR" "$ZAPRET_BASE"
|
||||
echo relaunching itself from $ZAPRET_BASE
|
||||
exec $ZAPRET_BASE/$(basename $0)
|
||||
@ -239,33 +241,11 @@ check_location()
|
||||
}
|
||||
|
||||
|
||||
crontab_add()
|
||||
{
|
||||
# $1 - hour min
|
||||
# $2 - hour max
|
||||
[ -x "$GET_LIST" ] && {
|
||||
echo \* adding crontab entry
|
||||
|
||||
CRONTMP=/tmp/cron.tmp
|
||||
crontab -l >$CRONTMP
|
||||
if grep -q "$GET_LIST_PREFIX" $CRONTMP; then
|
||||
echo some entries already exist in crontab. check if this is corrent :
|
||||
grep "$GET_LIST_PREFIX" $CRONTMP
|
||||
else
|
||||
echo "$(random 0 59) $(random $1 $2) */2 * * $GET_LIST" >>$CRONTMP
|
||||
crontab $CRONTMP
|
||||
fi
|
||||
|
||||
rm -f $CRONTMP
|
||||
}
|
||||
}
|
||||
|
||||
check_prerequisites_linux()
|
||||
{
|
||||
echo \* checking prerequisites
|
||||
|
||||
# arch linux can miss cron
|
||||
if exists ipset && exists curl && exists crontab ; then
|
||||
if exists ipset && exists curl ; then
|
||||
echo everything is present
|
||||
else
|
||||
echo \* installing prerequisites
|
||||
@ -274,25 +254,31 @@ check_prerequisites_linux()
|
||||
YUM=$(whichq yum)
|
||||
PACMAN=$(whichq pacman)
|
||||
ZYPPER=$(whichq zypper)
|
||||
EOPKG=$(whichq eopkg)
|
||||
if [ -x "$APTGET" ] ; then
|
||||
"$APTGET" update
|
||||
"$APTGET" install -y --no-install-recommends ipset curl dnsutils cron || {
|
||||
"$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 cronie || {
|
||||
"$YUM" -y install curl ipset || {
|
||||
echo could not install prerequisites
|
||||
exitp 6
|
||||
}
|
||||
elif [ -x "$PACMAN" ] ; then
|
||||
"$PACMAN" -Syy
|
||||
"$PACMAN" --noconfirm -S ipset curl cronie || {
|
||||
"$PACMAN" --noconfirm -S ipset curl || {
|
||||
echo could not install prerequisites
|
||||
exitp 6
|
||||
}
|
||||
elif [ -x "$ZYPPER" ] ; then
|
||||
"$ZYPPER" --non-interactive install ipset curl cron || {
|
||||
"$ZYPPER" --non-interactive install ipset curl || {
|
||||
echo could not install prerequisites
|
||||
exitp 6
|
||||
}
|
||||
elif [ -x "$EOPKG" ] ; then
|
||||
"$EOPKG" -y install ipset curl || {
|
||||
echo could not install prerequisites
|
||||
exitp 6
|
||||
}
|
||||
@ -331,12 +317,31 @@ service_start_systemd()
|
||||
{
|
||||
echo \* starting zapret service
|
||||
|
||||
systemctl start zapret || {
|
||||
"$SYSTEMCTL" start zapret || {
|
||||
echo could not start zapret service
|
||||
exitp 30
|
||||
}
|
||||
}
|
||||
|
||||
timer_install_systemd()
|
||||
{
|
||||
echo \* installing zapret-list-update timer
|
||||
|
||||
"$SYSTEMCTL" disable zapret-list-update.timer
|
||||
"$SYSTEMCTL" stop zapret-list-update.timer
|
||||
ln -fs "$EXEDIR/init.d/systemd/zapret-list-update.service" "$SYSTEMD_SYSTEM_DIR"
|
||||
ln -fs "$EXEDIR/init.d/systemd/zapret-list-update.timer" "$SYSTEMD_SYSTEM_DIR"
|
||||
"$SYSTEMCTL" daemon-reload
|
||||
"$SYSTEMCTL" enable zapret-list-update.timer || {
|
||||
echo could not enable zapret-list-update.timer
|
||||
exitp 20
|
||||
}
|
||||
"$SYSTEMCTL" start zapret-list-update.timer || {
|
||||
echo could not start zapret-list-update.timer
|
||||
exitp 30
|
||||
}
|
||||
}
|
||||
|
||||
download_list()
|
||||
{
|
||||
[ -x "$GET_LIST" ] && {
|
||||
@ -353,6 +358,42 @@ download_list()
|
||||
}
|
||||
}
|
||||
|
||||
crontab_del_quiet()
|
||||
{
|
||||
exists crontab || return
|
||||
|
||||
CRONTMP=/tmp/cron.tmp
|
||||
crontab -l >$CRONTMP
|
||||
if grep -q "$GET_IPLIST_PREFIX" $CRONTMP; then
|
||||
grep -v "$GET_IPLIST_PREFIX" $CRONTMP >$CRONTMP.2
|
||||
crontab $CRONTMP.2
|
||||
rm -f $CRONTMP.2
|
||||
fi
|
||||
rm -f $CRONTMP
|
||||
}
|
||||
|
||||
crontab_add()
|
||||
{
|
||||
# $1 - hour min
|
||||
# $2 - hour max
|
||||
[ -x "$GET_LIST" ] && {
|
||||
echo \* adding crontab entry
|
||||
|
||||
CRONTMP=/tmp/cron.tmp
|
||||
crontab -l >$CRONTMP
|
||||
if grep -q "$GET_LIST_PREFIX" $CRONTMP; then
|
||||
echo some entries already exist in crontab. check if this is corrent :
|
||||
grep "$GET_LIST_PREFIX" $CRONTMP
|
||||
else
|
||||
echo "$(random 0 59) $(random $1 $2) */2 * * $GET_LIST" >>$CRONTMP
|
||||
crontab $CRONTMP
|
||||
fi
|
||||
|
||||
rm -f $CRONTMP
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
install_systemd()
|
||||
{
|
||||
INIT_SCRIPT_SRC=$EXEDIR/init.d/sysv/zapret
|
||||
@ -364,15 +405,16 @@ install_systemd()
|
||||
ask_config
|
||||
service_install_systemd
|
||||
download_list
|
||||
# desktop system : likely it will be up at daytime
|
||||
crontab_add 9 21
|
||||
# in case its left from old version of zapret
|
||||
crontab_del_quiet
|
||||
# now we use systemd timers
|
||||
timer_install_systemd
|
||||
service_start_systemd
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
check_kmod()
|
||||
{
|
||||
[ -f "/lib/modules/$(uname -r)/$1.ko" ]
|
||||
|
@ -7,4 +7,4 @@ EXEDIR=$(dirname "$SCRIPT")
|
||||
. "$EXEDIR/../config"
|
||||
|
||||
[ -z "$GETLIST" ] && exit 0
|
||||
[ -x "$EXEDIR/$GETLIST" ] && "$EXEDIR/$GETLIST"
|
||||
[ -x "$EXEDIR/$GETLIST" ] && exec "$EXEDIR/$GETLIST"
|
||||
|
@ -60,6 +60,8 @@ check_system()
|
||||
|
||||
crontab_del()
|
||||
{
|
||||
exists crontab || return
|
||||
|
||||
echo \* removing crontab entry
|
||||
|
||||
CRONTMP=/tmp/cron.tmp
|
||||
@ -92,6 +94,18 @@ service_remove_systemd()
|
||||
"$SYSTEMCTL" daemon-reload
|
||||
}
|
||||
|
||||
timer_remove_systemd()
|
||||
{
|
||||
echo \* removing zapret-list-update timer
|
||||
|
||||
"$SYSTEMCTL" daemon-reload
|
||||
"$SYSTEMCTL" disable zapret-list-update.timer
|
||||
"$SYSTEMCTL" stop zapret-list-update.timer
|
||||
rm -f "$SYSTEMD_SYSTEM_DIR/zapret-list-update.service" "$SYSTEMD_SYSTEM_DIR/zapret-list-update.timer"
|
||||
"$SYSTEMCTL" daemon-reload
|
||||
}
|
||||
|
||||
|
||||
|
||||
remove_systemd()
|
||||
{
|
||||
@ -100,7 +114,8 @@ remove_systemd()
|
||||
|
||||
service_stop_systemd
|
||||
service_remove_systemd
|
||||
crontab_del
|
||||
timer_remove_systemd
|
||||
crontab_del
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user