Skip to content

Commit

Permalink
install_easy: openrc support
Browse files Browse the repository at this point in the history
  • Loading branch information
bol-van committed Nov 12, 2021
1 parent 02343af commit 7c85d8c
Show file tree
Hide file tree
Showing 5 changed files with 155 additions and 46 deletions.
4 changes: 4 additions & 0 deletions docs/changes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -198,3 +198,7 @@ v40

init scripts : IFACE_LAN, IFACE_WAN now accept multiple interfaces
init scripts : openwrt uses now OPENWRT_LAN parameter to override incoming interfaces for tpws

v41

install_easy : openrc support
2 changes: 1 addition & 1 deletion docs/readme.eng.txt
Original file line number Diff line number Diff line change
Expand Up @@ -629,7 +629,7 @@ And you can start or stop the demons separately from the firewall:
Simple install to desktop linux system
--------------------------------------

Simple install works on most modern linux distributions with systemd, OpenWRT and MacOS.
Simple install works on most modern linux distributions with systemd or openrc, OpenWRT and MacOS.
Run install_easy.sh and answer its questions.

Simple install to openwrt
Expand Down
8 changes: 5 additions & 3 deletions docs/readme.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
zapret v.40
zapret v.41

English
-------
Expand Down Expand Up @@ -1037,14 +1037,16 @@ stop : rc-service zapret stop
-----------------

install_easy.sh автоматизирует описанные выше ручные варианты процедур установки.
Он поддерживает OpenWRT, linux системы на базе systemd и MacOS.
Он поддерживает OpenWRT, linux системы на базе systemd или openrc и MacOS.

Для более гибкой настройки перед запуском инсталятора следует выполнить раздел "Выбор параметров".

Если система на базе systemd, но используется не поддерживаемый инсталятором менеджер пакетов
Если система запуска поддерживается, но используется не поддерживаемый инсталятором менеджер пакетов
или названия пакетов не соответствуют прописанным в инсталятор, пакеты нужно установить вручную.
Требуется : ipset curl

Для совсем обрезанных дистрибутивов (alpine) требуется отдельно установить iptables и ip6tables.

В комплекте идут статические бинарики для большинства архитектур. Какой-то из них подойдет
с вероятностью 99%. Но если у вас экзотическая система, инсталятор попробует собрать бинарики сам
через make. Для этого нужны gcc, make и необходимые -dev пакеты. Можно форсировать режим
Expand Down
123 changes: 98 additions & 25 deletions install_easy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -161,8 +161,11 @@ check_system()
SYSTEM=systemd
elif [ -f "/etc/openwrt_release" ] && exists opkg && exists uci ; then
SYSTEM=openwrt
elif exists /sbin/openrc-run || exists /usr/sbin/openrc-run ; then
SYSTEM=openrc
else
echo system is not either systemd based or openwrt. check readme.txt for manual setup info.
echo system is not either systemd, openrc or openwrt based
echo check readme.txt for manual setup info.
exitp 5
fi
elif [ "$UNAME" = "Darwin" ]; then
Expand Down Expand Up @@ -625,8 +628,16 @@ check_prerequisites_linux()
{
echo \* checking prerequisites

if exists iptables && exists ip6tables ; then
echo iptables present
else
# looks like it's a limited system. will not guess how to install base tools
echo '! iptables/ip6tables NOT present. you must install them manually.'
exitp 5
fi

if exists ipset && exists curl ; then
echo everything is present
echo ipset and curl are present
else
echo \* installing prerequisites

Expand All @@ -635,6 +646,7 @@ check_prerequisites_linux()
PACMAN=$(whichq pacman)
ZYPPER=$(whichq zypper)
EOPKG=$(whichq eopkg)
APK=$(whichq apk)
if [ -x "$APTGET" ] ; then
"$APTGET" update
"$APTGET" install -y --no-install-recommends ipset curl dnsutils || {
Expand Down Expand Up @@ -662,6 +674,11 @@ check_prerequisites_linux()
echo could not install prerequisites
exitp 6
}
elif [ -x "$APK" ] ; then
"$APK" add ipset curl || {
echo could not install prerequisites
exitp 6
}
else
echo supported package manager not found
echo you must manually install : ipset curl
Expand Down Expand Up @@ -895,6 +912,82 @@ install_systemd()



install_sysv_init()
{
# $1 - "0"=disable
echo \* installing init script

[ -x "$INIT_SCRIPT" ] && {
"$INIT_SCRIPT" stop
"$INIT_SCRIPT" disable
}
ln -fs "$INIT_SCRIPT_SRC" "$INIT_SCRIPT"
[ "$1" != "0" ] && "$INIT_SCRIPT" enable
}

install_openrc_init()
{
# $1 - "0"=disable
echo \* installing init script

[ -x "$INIT_SCRIPT" ] && {
"$INIT_SCRIPT" stop
rc-update del zapret
}
ln -fs "$INIT_SCRIPT_SRC" "$INIT_SCRIPT"
[ "$1" != "0" ] && rc-update add zapret
}

service_start_sysv()
{
echo \* starting zapret service

"$INIT_SCRIPT" start || {
echo could not start zapret service
exitp 30
}
}

service_stop_sysv()
{
[ -x "$INIT_SCRIPT" ] && {
echo \* stopping zapret service
"$INIT_SCRIPT" stop
}
}

_install_sysv()
{
# $1 - install init script
INIT_SCRIPT_SRC="$EXEDIR/init.d/sysv/zapret"

check_bins
require_root
check_location copy_all
check_prerequisites_linux
service_stop_sysv
install_binaries
check_dns
select_ipv6
ask_config
$1
download_list
crontab_del_quiet
# desktop system. more likely up at daytime
crontab_add 10 22
service_start_sysv
}

install_sysv()
{
_install_sysv install_sysv_init
}

install_openrc()
{
_install_sysv install_openrc_init
}


check_kmod()
{
Expand Down Expand Up @@ -1134,29 +1227,6 @@ deoffload_openwrt_firewall()

}

install_sysv_init()
{
# $1 - "0"=disable
echo \* installing init script

[ -x "$INIT_SCRIPT" ] && {
"$INIT_SCRIPT" stop
"$INIT_SCRIPT" disable
}
ln -fs "$INIT_SCRIPT_SRC" "$INIT_SCRIPT"
[ "$1" != "0" ] && "$INIT_SCRIPT" enable
}

service_start_sysv()
{
echo \* starting zapret service

"$INIT_SCRIPT" start || {
echo could not start zapret service
exitp 30
}
}



install_openwrt()
Expand Down Expand Up @@ -1275,6 +1345,9 @@ case $SYSTEM in
systemd)
install_systemd
;;
openrc)
install_openrc
;;
openwrt)
install_openwrt
;;
Expand Down
64 changes: 47 additions & 17 deletions uninstall_easy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,12 @@ EXEDIR="$(cd "$EXEDIR"; pwd)"
IPSET_DIR="$EXEDIR/ipset"

GET_LIST_PREFIX=/ipset/get_
SYSTEMD_SYSTEM_DIR=/lib/systemd/system
[ -d "$SYSTEMD_SYSTEM_DIR" ] || SYSTEMD_SYSTEM_DIR=/usr/lib/systemd/system

SYSTEMD_DIR=/lib/systemd
[ -d "$SYSTEMD_DIR" ] || SYSTEMD_DIR=/usr/lib/systemd
[ -d "$SYSTEMD_DIR" ] && SYSTEMD_SYSTEM_DIR="$SYSTEMD_DIR/system"

INIT_SCRIPT=/etc/init.d/zapret

exists()
{
Expand Down Expand Up @@ -48,16 +52,22 @@ check_system()

local UNAME=$(uname)
if [ "$UNAME" = "Linux" ]; then
if [ -x "$SYSTEMCTL" ] ; then
# some distros include systemctl without systemd
if [ -d "$SYSTEMD_DIR" ] && [ -x "$SYSTEMD_DIR/systemd" ] && [ -x "$SYSTEMCTL" ]; then
SYSTEM=systemd
elif [ -f "/etc/openwrt_release" ] && exists opkg && exists uci ; then
SYSTEM=openwrt
elif exists /sbin/openrc-run || exists /usr/sbin/openrc-run ; then
SYSTEM=openrc
else
echo system is not either systemd based or openwrt. check readme.txt for manual setup info.
echo system is not either systemd, openrc or openwrt based
echo check readme.txt for manual setup info.
exitp 5
fi
elif [ "$UNAME" = "Darwin" ]; then
SYSTEM=macos
# MacOS echo from /bin/sh does not support -n
ECHON=printf
else
echo easy installer only supports Linux and MacOS. check readme.txt for supported systems and manual setup info.
exitp 5
Expand Down Expand Up @@ -117,15 +127,43 @@ timer_remove_systemd()

remove_systemd()
{
INIT_SCRIPT=/etc/init.d/zapret

service_stop_systemd
service_remove_systemd
timer_remove_systemd
crontab_del
}


service_remove_sysv()
{
echo \* removing zapret service

[ -x "$INIT_SCRIPT" ] && {
"$INIT_SCRIPT" disable
"$INIT_SCRIPT" stop
}
rm -f "$INIT_SCRIPT"
}

service_remove_openrc()
{
echo \* removing zapret service

[ -x "$INIT_SCRIPT" ] && {
rc-update del zapret
"$INIT_SCRIPT" stop
}
rm -f "$INIT_SCRIPT"
}


remove_openrc()
{
OPENWRT_FW_INCLUDE=/etc/firewall.zapret

service_remove_openrc
crontab_del
}



Expand Down Expand Up @@ -188,20 +226,9 @@ remove_openwrt_iface_hook()
}


service_remove_sysv()
{
echo \* removing zapret service

[ -x "$INIT_SCRIPT" ] && {
"$INIT_SCRIPT" disable
"$INIT_SCRIPT" stop
}
rm -f "$INIT_SCRIPT"
}

remove_openwrt()
{
INIT_SCRIPT=/etc/init.d/zapret
OPENWRT_FW_INCLUDE=/etc/firewall.zapret

remove_openwrt_firewall
Expand Down Expand Up @@ -247,6 +274,9 @@ case $SYSTEM in
systemd)
remove_systemd
;;
openrc)
remove_openrc
;;
openwrt)
remove_openwrt
;;
Expand Down

0 comments on commit 7c85d8c

Please sign in to comment.