Files
zapret.installer-Snowy-Fluffy/files/install.sh

271 lines
11 KiB
Bash
Raw Normal View History

2025-07-09 17:26:47 +03:00
#!/bin/bash
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 | \
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
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
#
#}
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
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]* )
$TPUT_E
2025-07-09 17:26:47 +03:00
exit 1
;;
* )
reboot
;;
esac
else
manage_service restart
configure_zapret_conf
fi
}
update_zapret() {
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
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)"
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
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 "не удалось автоматически скопировать хостлист"
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
rm -f /opt/zapret-ver
2025-07-09 17:26:47 +03:00
echo "Удаляю zapret..."
sleep 3
echo "Запрет удален"
$TPUT_E
exit
2025-07-09 17:26:47 +03:00
;;
* )
main_menu
;;
esac
2025-07-14 14:56:36 +03:00
}