2025-07-09 17:26:47 +03:00
#!/bin/bash
2025-08-23 18:20:19 +03:00
remote_latest_version( ) {
2025-08-24 17:09:59 +03:00
rver = $( timeout 10s curl -s https://api.github.com/repos/bol-van/zapret/releases/latest | \
2025-08-23 18:20:19 +03:00
grep "tag_name" | \
cut -d '"' -f 4 | \
sed 's/^v//' )
}
get_latest_version( ) {
if [ -z " $rver " ] ; then
2025-08-27 01:43:05 +03:00
rver = $( timeout 10s curl -s -I https://github.com/bol-van/zapret/releases/latest | grep -i "location:" | cut -d' ' -f2 | tr -d '\r' | grep -o "tag/v[0-9.]\+" | cut -d'/' -f2 | sed 's/^v//' )
if [ -z " $rver " ] ; then
2025-09-05 22:37:58 +03:00
#error_exit "не удалось определить последнюю версию запрета. Проверьте соединение с сетью."
echo "Неизвестно"
2025-08-27 01:43:05 +03:00
else
echo " $rver "
fi
2025-08-23 18:20:19 +03:00
else
echo " $rver "
fi
}
2025-08-24 17:09:59 +03:00
#zapret_update_check()
#{
# if cmp -s <(get_latest_version) /opt/zapret-ver; then
# echo -e "0"
# else
# echo -e "1"
# fi
#
#}
2025-08-23 18:20:19 +03:00
download_zapret( )
{
rm -rf /opt/zapret
rm -rf /opt/zapret-v$( get_latest_version)
TEMP_DIR_BIN = $( mktemp -d)
if [ SYSTEM = openwrt ] ; then
if ! curl -L -o " $TEMP_DIR_BIN /latest.tar.gz " $( curl -s https://api.github.com/repos/bol-van/zapret/releases/latest | grep "browser_download_url.*openwrt.*tar.gz" | head -n 1 | cut -d '"' -f 4) ; then
rm -rf $TEMP_DIR_BIN
error_exit "Н е удалось получить релиз запрета."
fi
if ! tar -xzf $TEMP_DIR_BIN /latest.tar.gz -C /opt/ --strip-components= 1; then
rm -rf $TEMP_DIR_BIN /opt/zapret-v$( get_latest_version)
error_exit "Н е удалось разархивировать архив с релизом запрета."
fi
else
curl -s https://api.github.com/repos/bol-van/zapret/releases/latest | grep "browser_download_url.*tar.gz" | grep -v "openwrt" | head -n 1 | cut -d '"' -f 4 | xargs -I { } curl -L -o " $TEMP_DIR_BIN /latest.tar.gz " "{}" || error_exit "не могу получить релиз запрета"
if ! tar -xzf $TEMP_DIR_BIN /latest.tar.gz -C /opt/; then
rm -rf $TEMP_DIR_BIN /opt/zapret-v$( get_latest_version)
error_exit "Н е удалось разархивировать архив с релизом запрета."
fi
fi
mv /opt/zapret-v$( get_latest_version) /opt/zapret
get_latest_version > /opt/zapret-ver
echo "Клонирую репозиторий конфигураций..."
git clone https://github.com/Snowy-Fluffy/zapret.cfgs /opt/zapret/zapret.cfgs
echo "Клонирование успешно завершено."
}
2025-07-09 17:26:47 +03:00
install_dependencies( ) {
kernel = " $( uname -s) "
if [ " $kernel " = "Linux" ] ; then
. /etc/os-release
declare -A command_by_ID = (
2025-07-14 14:56:36 +03:00
[ "arch" ] = "pacman -S --noconfirm --needed ipset "
[ "artix" ] = "pacman -S --noconfirm --needed ipset "
[ "cachyos" ] = "pacman -S --noconfirm --needed ipset "
[ "endeavouros" ] = "pacman -S --noconfirm --needed ipset "
[ "manjaro" ] = "pacman -S --noconfirm --needed ipset "
2025-07-09 17:26:47 +03:00
[ "debian" ] = "apt-get install -y iptables ipset "
[ "fedora" ] = "dnf install -y iptables ipset"
[ "ubuntu" ] = "apt-get install -y iptables ipset"
[ "mint" ] = "apt-get install -y iptables ipset"
[ "centos" ] = "yum install -y ipset iptables"
[ "void" ] = "xbps-install -y iptables ipset"
[ "gentoo" ] = "emerge net-firewall/iptables net-firewall/ipset"
[ "opensuse" ] = "zypper install -y iptables ipset"
[ "openwrt" ] = "opkg install iptables ipset"
[ "altlinux" ] = "apt-get install -y iptables ipset"
[ "almalinux" ] = "dnf install -y iptables ipset"
[ "rocky" ] = "dnf install -y iptables ipset"
[ "alpine" ] = "apk add iptables ipset"
)
if [ [ -v command_by_ID[ $ID ] ] ] ; then
eval " ${ command_by_ID [ $ID ] } "
else
for like in $ID_LIKE ; do
if [ [ -n " ${ command_by_ID [ $like ] } " ] ] ; then
eval " ${ command_by_ID [ $like ] } "
break
fi
done
fi
elif [ " $kernel " = "Darwin" ] ; then
error_exit "macOS не поддерживается на данный момент."
else
echo " Неизвестная О С : ${ kernel } . Установите iptables и ipset самостоятельно. " bash -c 'read -p "Нажмите Enter для продолжения..."'
fi
}
install_zapret( ) {
install_dependencies
if [ [ $dir_exists = = true ] ] ; then
read -p "Н а вашем компьютере был найден запрет (/opt/zapret). Для продолжения е г о необходимо удалить. Вы действительно хотите удалить запрет (/opt/zapret) и продолжить? (y/N): " answer
case " $answer " in
[ Yy] * )
if [ [ -f /opt/zapret/uninstall_easy.sh ] ] ; then
cd /opt/zapret
sed -i '238s/ask_yes_no N/ask_yes_no Y/' /opt/zapret/common/installer.sh
yes "" | ./uninstall_easy.sh
sed -i '238s/ask_yes_no Y/ask_yes_no N/' /opt/zapret/common/installer.sh
fi
rm -rf /opt/zapret
echo "Удаляю zapret..."
cd /
sleep 3
; ;
* )
main_menu
; ;
esac
fi
2025-08-23 18:20:19 +03:00
download_zapret
2025-07-09 17:26:47 +03:00
cd /opt/zapret
sed -i '238s/ask_yes_no N/ask_yes_no Y/' /opt/zapret/common/installer.sh
yes "" | ./install_easy.sh
sed -i '238s/ask_yes_no Y/ask_yes_no N/' /opt/zapret/common/installer.sh
rm -f /bin/zapret
rm -f /opt/zapret/config
cp -r /opt/zapret/zapret.cfgs/configurations/general /opt/zapret/config || error_exit "не удалось автоматически скопировать конфиг"
rm -f /opt/zapret/ipset/zapret-hosts-user.txt
cp -r /opt/zapret/zapret.cfgs/lists/list-basic.txt /opt/zapret/ipset/zapret-hosts-user.txt || error_exit "не удалось автоматически скопировать хостлист"
cp -r /opt/zapret/zapret.cfgs/lists/ipset-discord.txt /opt/zapret/ipset/ipset-discord.txt || error_exit "не удалось автоматически скопировать ипсет"
2025-07-20 01:55:26 +03:00
ln -s /opt/zapret.installer/zapret-control.sh /bin/zapret || error_exit "не удалось создать символическую ссылку"
2025-07-09 17:26:47 +03:00
if [ [ INIT_SYSTEM = systemd ] ] ; then
systemctl daemon-reload
fi
if [ [ INIT_SYSTEM = runit ] ] ; then
read -p "Для окончания установки необходимо перезапустить ваше устройство. Перезапустить е г о сейчас? (Y/n): " answer
case " $answer " in
[ Yy] * )
reboot
; ;
[ Nn] * )
2025-10-11 23:24:47 +03:00
$TPUT_E
2025-07-09 17:26:47 +03:00
exit 1
; ;
* )
reboot
; ;
esac
else
manage_service restart
configure_zapret_conf
fi
}
update_zapret( ) {
2025-08-23 18:20:19 +03:00
LIST_EXISTS = 0
CONF_EXISTS = 0
TEMP_DIR_CONF = $( mktemp -d)
if [ [ -f /opt/zapret/config ] ] ; then
cp -r /opt/zapret/config $TEMP_DIR_CONF /config
CONF_EXISTS = 1
2025-07-09 17:26:47 +03:00
fi
2025-08-23 18:20:19 +03:00
if [ [ -f /opt/zapret/ipset/zapret-hosts-user.txt ] ] ; then
cp -r /opt/zapret/ipset/zapret-hosts-user.txt $TEMP_DIR_CONF /zapret-hosts-user.txt
LIST_EXISTS = 1
fi
2025-08-24 17:09:59 +03:00
#if [ $(zapret_update_check) = 0 ]; then
# echo "Актуальная версия уже установлена: нечего обновлять."
# bash -c 'read -p "Нажмите Enter для продолжения..."'
download_zapret || error_exit "не удалось обновить запрет"
echo -e " Запрет обновлен до версии $( cat /opt/zapret-ver) "
2025-08-23 18:20:19 +03:00
cd /opt/zapret
sed -i '238s/ask_yes_no N/ask_yes_no Y/' /opt/zapret/common/installer.sh
yes "" | ./install_easy.sh
sed -i '238s/ask_yes_no Y/ask_yes_no N/' /opt/zapret/common/installer.sh
2025-07-09 17:26:47 +03:00
if [ [ -d /opt/zapret/zapret.cfgs ] ] ; then
cd /opt/zapret/zapret.cfgs && git fetch origin main; git reset --hard origin/main
fi
if [ [ -d /opt/zapret.installer/ ] ] ; then
cd /opt/zapret.installer/ && git fetch origin main; git reset --hard origin/main
rm -f /bin/zapret
ln -s /opt/zapret.installer/zapret-control.sh /bin/zapret || error_exit "не удалось создать символическую ссылку"
fi
2025-08-23 18:20:19 +03:00
if [ CONF_EXISTS = 1 ] ; then
rm -f /opt/zapret/config
mv $TEMP_DIR_CONF /config /opt/zapret/config
fi
if [ LIST_EXISTS = 1 ] ; then
rm -f /opt/zapret/ipset/zapret-hosts-user.txt
mv $TEMP_DIR_CONF /zapret-hosts-user.txt /opt/zapret/ipset/zapret-hosts-user.txt
fi
rm -rf $TEMP_DIR_CONF
rm -rf $TEMP_DIR_BIN
2025-08-23 18:54:27 +03:00
rm -f /opt/zapret/config
cp -r /opt/zapret/zapret.cfgs/configurations/general /opt/zapret/config || error_exit "не удалось автоматически скопировать конфиг"
rm -f /opt/zapret/ipset/zapret-hosts-user.txt
cp -r /opt/zapret/zapret.cfgs/lists/list-basic.txt /opt/zapret/ipset/zapret-hosts-user.txt || error_exit "не удалось автоматически скопировать хостлист"
2025-08-23 18:20:19 +03:00
cp -r /opt/zapret/zapret.cfgs/lists/ipset-discord.txt /opt/zapret/ipset/ipset-discord.txt || error_exit "не удалось автоматически скопировать ипсет"
2025-08-23 18:54:27 +03:00
configure_zapret_conf
2025-07-09 17:26:47 +03:00
manage_service restart
bash -c 'read -p "Нажмите Enter для продолжения..."'
exec " $0 " " $@ "
}
update_script( ) {
if [ [ -d /opt/zapret/zapret.cfgs ] ] ; then
cd /opt/zapret/zapret.cfgs && git fetch origin main; git reset --hard origin/main
fi
if [ [ -d /opt/zapret.installer/ ] ] ; then
cd /opt/zapret.installer/ && git fetch origin main; git reset --hard origin/main
fi
rm -f /bin/zapret
ln -s /opt/zapret.installer/zapret-control.sh /bin/zapret || error_exit "не удалось создать символическую ссылку"
bash -c 'read -p "Нажмите Enter для продолжения..."'
exec " $0 " " $@ "
}
update_installed_script( ) {
if [ [ -d /opt/zapret/zapret.cfgs ] ] ; then
cd /opt/zapret/zapret.cfgs && git fetch origin main; git reset --hard origin/main
fi
if [ [ -d /opt/zapret.installer/ ] ] ; then
cd /opt/zapret.installer/ && git fetch origin main; git reset --hard origin/main
rm -f /bin/zapret
ln -s /opt/zapret.installer/zapret-control.sh /bin/zapret || error_exit "не удалось создать символическую ссылку"
manage_service restart
fi
bash -c 'read -p "Нажмите Enter для продолжения..."'
exec " $0 " " $@ "
}
uninstall_zapret( ) {
read -p "Вы действительно хотите удалить запрет? (y/N): " answer
case " $answer " in
[ Yy] * )
if [ [ -f /opt/zapret/uninstall_easy.sh ] ] ; then
cd /opt/zapret
yes "" | ./uninstall_easy.sh
fi
rm -rf /opt/zapret
rm -rf /opt/zapret.installer/
rm -r /bin/zapret
2025-08-23 18:20:19 +03:00
rm -f /opt/zapret-ver
2025-07-09 17:26:47 +03:00
echo "Удаляю zapret..."
sleep 3
2025-08-23 18:20:19 +03:00
echo "Запрет удален"
2025-10-11 23:24:47 +03:00
$TPUT_E
2025-08-23 18:20:19 +03:00
exit
2025-07-09 17:26:47 +03:00
; ;
* )
main_menu
; ;
esac
2025-07-14 14:56:36 +03:00
}