Files
zapret.installer-Snowy-Fluffy/files/install.sh
Snowy-Fluffy a39f0f6c7e fix
2025-08-23 17:00:58 +03:00

251 lines
10 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
remote_latest_version() {
rver=$(timeout 5s 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
echo "неизвестно"
else
echo "$rver"
fi
}
zapret_update_check()
{
if cmp -s <(get_latest_version) /opt/zapret-ver; then
echo -e "0"
else
echo -e "1"
fi
}
download_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
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
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 "Клонирование успешно завершено."
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
}
install_dependencies() {
kernel="$(uname -s)"
if [ "$kernel" = "Linux" ]; then
. /etc/os-release
declare -A command_by_ID=(
["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 "
["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
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 "не удалось автоматически скопировать ипсет"
ln -s /opt/zapret.installer/zapret-control.sh /bin/zapret || error_exit "не удалось создать символическую ссылку"
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
exit 1
;;
* )
reboot
;;
esac
else
manage_service restart
configure_zapret_conf
fi
}
update_zapret() {
if [ $(zapret_update_check) = 0 ]; then
echo "Актуальная версия уже установлена: нечего обновлять."
bash -c 'read -p "Нажмите Enter для продолжения..."'
else
download_zapret || error_exit "не удалось обновить запрет"
echo -e "Запрет обновлен до версии $(cat /opt/zapret-ver)"
fi
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
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
echo "Удаляю zapret..."
sleep 3
;;
* )
main_menu
;;
esac
}