mirror of
https://github.com/bol-van/zapret.git
synced 2025-04-19 21:42:59 +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"
|
TPWS_OPT_HTTPS="--split-pos=3"
|
||||||
|
|
||||||
Параметр GETLIST указывает инсталятору install_easy.sh какой скрипт дергать
|
Параметр 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 :
|
Создать ссылку на service unit в systemd :
|
||||||
ln -fs /opt/zapret/init.d/systemd/zapret.service /lib/systemd/system
|
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 :
|
Принять изменения в systemd :
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
|
|
||||||
Включить автозапуск службы :
|
Включить автозапуск службы :
|
||||||
systemctl enable zapret
|
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*
|
systemctl enable zapret-list-update.timer
|
||||||
По желанию прописать в /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 start zapret
|
systemctl start zapret
|
||||||
@ -315,14 +319,16 @@ TPWS_OPT_HTTPS="--split-pos=3"
|
|||||||
Попробуйте снять дамп в wireshark или "tcpdump -vvv -X host <ip>", посмотрите действительно ли первый
|
Попробуйте снять дамп в wireshark или "tcpdump -vvv -X host <ip>", посмотрите действительно ли первый
|
||||||
сегмент TCP уходит коротким и меняется ли регистр "Host:".
|
сегмент TCP уходит коротким и меняется ли регистр "Host:".
|
||||||
|
|
||||||
Шпаргалка по управлению службой :
|
Шпаргалка по управлению службой и таймером :
|
||||||
|
|
||||||
enable auto start : systemctl enable zapret
|
enable auto start : systemctl enable zapret
|
||||||
disable auto start : systemctl disable zapret
|
disable auto start : systemctl disable zapret
|
||||||
start : sytemctl start zapret
|
start : sytemctl start zapret
|
||||||
stop : systemctl stop zapret
|
stop : systemctl stop zapret
|
||||||
status, output messages : systemctl status zapret
|
status, output messages : systemctl status zapret
|
||||||
|
timer info : systemctl list-timer
|
||||||
delete service : systemctl disable zapret ; rm /lib/systemd/system/zapret.service
|
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
|
Centos 7+, Fedora
|
||||||
-----------------
|
-----------------
|
||||||
@ -345,18 +351,20 @@ OpenSUSE
|
|||||||
|
|
||||||
Далее все аналогично debian, кроме расположения systemd.
|
Далее все аналогично debian, кроме расположения systemd.
|
||||||
В opensuse он находится не в /lib/systemd, а в /usr/lib/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.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
|
Arch linux
|
||||||
----------
|
----------
|
||||||
|
|
||||||
Построен на базе systemd. По умолчанию отсутствует cron.
|
Построен на базе systemd.
|
||||||
|
|
||||||
Установить пакеты :
|
Установить пакеты :
|
||||||
pacman -Syy
|
pacman -Syy
|
||||||
pacman --noconfirm -S ipset curl cronie
|
pacman --noconfirm -S ipset curl
|
||||||
|
|
||||||
Далее все аналогично debian.
|
Далее все аналогично debian.
|
||||||
|
|
||||||
@ -372,12 +380,29 @@ git и curl по умолчанию могут присутствовать, ips
|
|||||||
|
|
||||||
emerge ipset
|
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
|
ln -fs /opt/zapret/init.d/sysv/zapret /etc/init.d
|
||||||
rc-update add zapret
|
rc-update add zapret
|
||||||
|
|
||||||
Далее все как в debian, исключая все, касаемое systemd.
|
Запустить службу :
|
||||||
|
|
||||||
|
rc-service zapret start
|
||||||
|
|
||||||
Шпаргалка по управлению службой :
|
Шпаргалка по управлению службой :
|
||||||
|
|
||||||
@ -416,7 +441,7 @@ stop : rc-service zapret stop
|
|||||||
|
|
||||||
Если система на базе systemd, но используется не поддерживаемый инсталятором менеджер пакетов
|
Если система на базе systemd, но используется не поддерживаемый инсталятором менеджер пакетов
|
||||||
или названия пакетов не соответствуют прописанным в инсталятор, пакеты нужно установить вручную.
|
или названия пакетов не соответствуют прописанным в инсталятор, пакеты нужно установить вручную.
|
||||||
Требуется : ipset curl cron
|
Требуется : ipset curl
|
||||||
|
|
||||||
Фаерволлы
|
Фаерволлы
|
||||||
---------
|
---------
|
||||||
@ -508,7 +533,7 @@ ipset можно выкинуть, если не будем пользовать
|
|||||||
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены.
|
По желанию прописать в /opt/zapret/ipset/zapret-hosts-user.txt свои домены.
|
||||||
Выполнить скрипт обновления листа :
|
Выполнить скрипт обновления листа :
|
||||||
/opt/zapret/ipset/get_config.sh
|
/opt/zapret/ipset/get_config.sh
|
||||||
Зашедулить задание обновления листа :
|
Зашедулить обновление листа :
|
||||||
crontab -e
|
crontab -e
|
||||||
Создать строчку "0 12 */2 * * /opt/zapret/ipset/get_config.sh"
|
Создать строчку "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
|
exitp 3
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
local B=$(dirname "$ZAPRET_BASE")
|
||||||
|
[ -d "$B" ] || mkdir -p "$B"
|
||||||
$1 "$EXEDIR" "$ZAPRET_BASE"
|
$1 "$EXEDIR" "$ZAPRET_BASE"
|
||||||
echo relaunching itself from $ZAPRET_BASE
|
echo relaunching itself from $ZAPRET_BASE
|
||||||
exec $ZAPRET_BASE/$(basename $0)
|
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()
|
check_prerequisites_linux()
|
||||||
{
|
{
|
||||||
echo \* checking prerequisites
|
echo \* checking prerequisites
|
||||||
|
|
||||||
# arch linux can miss cron
|
if exists ipset && exists curl ; then
|
||||||
if exists ipset && exists curl && exists crontab ; then
|
|
||||||
echo everything is present
|
echo everything is present
|
||||||
else
|
else
|
||||||
echo \* installing prerequisites
|
echo \* installing prerequisites
|
||||||
@ -274,25 +254,31 @@ check_prerequisites_linux()
|
|||||||
YUM=$(whichq yum)
|
YUM=$(whichq yum)
|
||||||
PACMAN=$(whichq pacman)
|
PACMAN=$(whichq pacman)
|
||||||
ZYPPER=$(whichq zypper)
|
ZYPPER=$(whichq zypper)
|
||||||
|
EOPKG=$(whichq eopkg)
|
||||||
if [ -x "$APTGET" ] ; then
|
if [ -x "$APTGET" ] ; then
|
||||||
"$APTGET" update
|
"$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
|
echo could not install prerequisites
|
||||||
exitp 6
|
exitp 6
|
||||||
}
|
}
|
||||||
elif [ -x "$YUM" ] ; then
|
elif [ -x "$YUM" ] ; then
|
||||||
"$YUM" -y install curl ipset cronie || {
|
"$YUM" -y install curl ipset || {
|
||||||
echo could not install prerequisites
|
echo could not install prerequisites
|
||||||
exitp 6
|
exitp 6
|
||||||
}
|
}
|
||||||
elif [ -x "$PACMAN" ] ; then
|
elif [ -x "$PACMAN" ] ; then
|
||||||
"$PACMAN" -Syy
|
"$PACMAN" -Syy
|
||||||
"$PACMAN" --noconfirm -S ipset curl cronie || {
|
"$PACMAN" --noconfirm -S ipset curl || {
|
||||||
echo could not install prerequisites
|
echo could not install prerequisites
|
||||||
exitp 6
|
exitp 6
|
||||||
}
|
}
|
||||||
elif [ -x "$ZYPPER" ] ; then
|
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
|
echo could not install prerequisites
|
||||||
exitp 6
|
exitp 6
|
||||||
}
|
}
|
||||||
@ -331,12 +317,31 @@ service_start_systemd()
|
|||||||
{
|
{
|
||||||
echo \* starting zapret service
|
echo \* starting zapret service
|
||||||
|
|
||||||
systemctl start zapret || {
|
"$SYSTEMCTL" start zapret || {
|
||||||
echo could not start zapret service
|
echo could not start zapret service
|
||||||
exitp 30
|
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()
|
download_list()
|
||||||
{
|
{
|
||||||
[ -x "$GET_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()
|
install_systemd()
|
||||||
{
|
{
|
||||||
INIT_SCRIPT_SRC=$EXEDIR/init.d/sysv/zapret
|
INIT_SCRIPT_SRC=$EXEDIR/init.d/sysv/zapret
|
||||||
@ -364,15 +405,16 @@ install_systemd()
|
|||||||
ask_config
|
ask_config
|
||||||
service_install_systemd
|
service_install_systemd
|
||||||
download_list
|
download_list
|
||||||
# desktop system : likely it will be up at daytime
|
# in case its left from old version of zapret
|
||||||
crontab_add 9 21
|
crontab_del_quiet
|
||||||
|
# now we use systemd timers
|
||||||
|
timer_install_systemd
|
||||||
service_start_systemd
|
service_start_systemd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
check_kmod()
|
check_kmod()
|
||||||
{
|
{
|
||||||
[ -f "/lib/modules/$(uname -r)/$1.ko" ]
|
[ -f "/lib/modules/$(uname -r)/$1.ko" ]
|
||||||
|
@ -7,4 +7,4 @@ EXEDIR=$(dirname "$SCRIPT")
|
|||||||
. "$EXEDIR/../config"
|
. "$EXEDIR/../config"
|
||||||
|
|
||||||
[ -z "$GETLIST" ] && exit 0
|
[ -z "$GETLIST" ] && exit 0
|
||||||
[ -x "$EXEDIR/$GETLIST" ] && "$EXEDIR/$GETLIST"
|
[ -x "$EXEDIR/$GETLIST" ] && exec "$EXEDIR/$GETLIST"
|
||||||
|
@ -60,6 +60,8 @@ check_system()
|
|||||||
|
|
||||||
crontab_del()
|
crontab_del()
|
||||||
{
|
{
|
||||||
|
exists crontab || return
|
||||||
|
|
||||||
echo \* removing crontab entry
|
echo \* removing crontab entry
|
||||||
|
|
||||||
CRONTMP=/tmp/cron.tmp
|
CRONTMP=/tmp/cron.tmp
|
||||||
@ -92,6 +94,18 @@ service_remove_systemd()
|
|||||||
"$SYSTEMCTL" daemon-reload
|
"$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()
|
remove_systemd()
|
||||||
{
|
{
|
||||||
@ -100,6 +114,7 @@ remove_systemd()
|
|||||||
|
|
||||||
service_stop_systemd
|
service_stop_systemd
|
||||||
service_remove_systemd
|
service_remove_systemd
|
||||||
|
timer_remove_systemd
|
||||||
crontab_del
|
crontab_del
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user