Files
zapret.installer-Snowy-Fluffy/files/install.sh
2025-10-11 23:24:47 +03:00

271 lines
11 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 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
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
#error_exit "не удалось определить последнюю версию запрета. Проверьте соединение с сетью."
echo "Неизвестно"
else
echo "$rver"
fi
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()
{
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 "Клонирование успешно завершено."
}
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() {
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
#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
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
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 "не удалось автоматически скопировать ипсет"
configure_zapret_conf
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
echo "Удаляю zapret..."
sleep 3
echo "Запрет удален"
$TPUT_E
exit
;;
* )
main_menu
;;
esac
}