Last active 1752636128

Proxmox VE Post-Install Configuration Script

proxmox-setup.sh Raw
1#!/bin/bash
2
3# Proxmox VE Post-Install Configuration Script
4# Автор: Федя Серафиев и Proxmox Helper Scripts
5# Версия: 1.0
6
7# Цветови променливи
8RD=$(echo "\033[01;31m")
9YW=$(echo "\033[33m")
10GN=$(echo "\033[1;92m")
11BL=$(echo "\033[36m")
12CL=$(echo "\033[m")
13BFR="\\r\\033[K"
14HOLD="-"
15CM="${GN}${CL}"
16CROSS="${RD}${CL}"
17
18# Функции за съобщения
19msg_info() {
20 local msg="$1"
21 echo -ne " ${HOLD} ${YW}${msg}..."
22}
23
24msg_ok() {
25 local msg="$1"
26 echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
27}
28
29msg_error() {
30 local msg="$1"
31 echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
32}
33
34# Хедър информация
35header_info() {
36 clear
37 cat <<"EOF"
38 ____ _ ____________
39 / __ \_________ _ ______ ___ ____ | | / / ____/
40 / /_/ / ___/ __ \| |/_/ __ `__ \/ __ \ | | / / __/
41 / ____/ / / /_/ /> </ / / / / / /_/ / | |/ / /___
42/_/ /_/ \____/_/|_/_/ /_/ /_/\____/ |___/_____/
43
44 ____ __ ____ __ ____
45 / __ \____ _____/ /_ / _/___ _____/ /_____ _/ / /
46 / /_/ / __ \/ ___/ __/ / // __ \/ ___/ __/ __ `/ / /
47 / ____/ /_/ (__ ) /_ _/ // / / (__ ) /_/ /_/ / / /
48/_/ \____/____/\__/ /___/_/ /_/____/\__/\__,_/_/_/
49
50 Конфигурационен скрипт за Proxmox VE
51 Версия 1.0
52EOF
53 echo -e "${BL}════════════════════════════════════════════════════════════${CL}"
54 echo -e "${GN}Добре дошли в помощника за конфигуриране на Proxmox VE!${CL}"
55 echo -e "${BL}════════════════════════════════════════════════════════════${CL}"
56 echo
57}
58
59# Проверка за root права
60check_root() {
61 if [[ $EUID -ne 0 ]]; then
62 msg_error "Този скрипт трябва да бъде стартиран като root потребител"
63 exit 1
64 fi
65}
66
67# Проверка за Proxmox VE
68check_proxmox() {
69 if [[ ! -f /etc/pve/local/pve-ssl.pem ]]; then
70 msg_error "Proxmox VE не е открит в тази система"
71 exit 1
72 fi
73}
74
75# Функция за изключване на напомнянето за абонамент
76disable_subscription_nag() {
77 if [[ ! -f /etc/apt/apt.conf.d/no-nag-script ]]; then
78 CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "НАПОМНЯНЕ ЗА АБОНАМЕНТ" --menu "Това ще изключи съобщението, което ви напомня да закупите абонамент всеки път, когато влезете в уеб интерфейса.\n \nИзключване на напомнянето за абонамент?" 14 58 2 \
79 "yes" " " \
80 "no" " " 3>&2 2>&1 1>&3)
81 case $CHOICE in
82 yes)
83 whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Поддръжка на абонаменти" "Подкрепата на екипа за разработка на софтуера е от съществено значение. Проверете официалния уебсайт за Поддръжка на абонаменти за цени. Без тяхната посветена работа нямаше да имаме този изключителен софтуер." 10 58
84 msg_info "Изключване на напомнянето за абонамент"
85 echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxlib\.js$'; if [ \$? -eq 1 ]; then { echo 'Премахване на напомнянето от интерфейса...'; sed -i '/.*data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script
86 apt --reinstall install proxmox-widget-toolkit &>/dev/null
87 msg_ok "Напомнянето за абонамент е изключено (Изтрийте кеша на браузъра)"
88 ;;
89 no)
90 msg_error "Избрахте 'не' за изключване на напомнянето"
91 ;;
92 esac
93 else
94 msg_ok "Напомнянето за абонамент вече е изключено"
95 fi
96}
97
98# Функция за корекция на източниците
99fix_sources() {
100 CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "КОРЕКЦИЯ НА ИЗТОЧНИЦИТЕ" --menu "Това ще коригира източниците на Proxmox VE за правилна работа.\n \nКорекция на източниците на Proxmox VE?" 14 58 2 \
101 "yes" " " \
102 "no" " " 3>&2 2>&1 1>&3)
103 case $CHOICE in
104 yes)
105 msg_info "Коригиране на източниците на Proxmox VE"
106 cat <<EOF >/etc/apt/sources.list
107deb http://deb.debian.org/debian bookworm main contrib
108deb http://deb.debian.org/debian bookworm-updates main contrib
109deb http://security.debian.org/debian-security bookworm-security main contrib
110EOF
111 echo 'APT::Get::Update::SourceListWarnings::NonFreeFirmware "false";' >/etc/apt/apt.conf.d/no-bookworm-firmware.conf
112 msg_ok "Източниците на Proxmox VE са коригирани"
113 ;;
114 no)
115 msg_error "Избрахте 'не' за корекция на източниците"
116 ;;
117 esac
118}
119
120# Функция за изключване на enterprise хранилище
121disable_enterprise_repo() {
122 CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PVE-ENTERPRISE" --menu "Хранилището 'pve-enterprise' е достъпно само за потребители, закупили абонамент за Proxmox VE.\n \nИзключване на 'pve-enterprise' хранилище?" 14 58 2 \
123 "yes" " " \
124 "no" " " 3>&2 2>&1 1>&3)
125 case $CHOICE in
126 yes)
127 msg_info "Изключване на 'pve-enterprise' хранилище"
128 cat <<EOF >/etc/apt/sources.list.d/pve-enterprise.list
129# deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise
130EOF
131 msg_ok "'pve-enterprise' хранилището е изключено"
132 ;;
133 no)
134 msg_error "Избрахте 'не' за изключване на хранилището"
135 ;;
136 esac
137}
138
139# Функция за активиране на no-subscription хранилище
140enable_no_subscription_repo() {
141 CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PVE-NO-SUBSCRIPTION" --menu "Хранилището 'pve-no-subscription' предоставя достъп до всички компоненти с отворен код на Proxmox VE.\n \nАктивиране на 'pve-no-subscription' хранилище?" 14 58 2 \
142 "yes" " " \
143 "no" " " 3>&2 2>&1 1>&3)
144 case $CHOICE in
145 yes)
146 msg_info "Активиране на 'pve-no-subscription' хранилище"
147 cat <<EOF >/etc/apt/sources.list.d/pve-install-repo.list
148deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
149EOF
150 msg_ok "'pve-no-subscription' хранилището е активирано"
151 ;;
152 no)
153 msg_error "Избрахте 'не' за активиране на хранилището"
154 ;;
155 esac
156}
157
158# Функция за обновяване на системата
159update_system() {
160 CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "ОБНОВЯВАНЕ НА СИСТЕМАТА" --menu "Това ще обнови всички пакети в системата.\n \nОбновяване на системата?" 14 58 2 \
161 "yes" " " \
162 "no" " " 3>&2 2>&1 1>&3)
163 case $CHOICE in
164 yes)
165 msg_info "Обновяване на списъка с пакети"
166 apt update &>/dev/null
167 msg_ok "Списъкът с пакети е обновен"
168
169 msg_info "Обновяване на системата"
170 apt full-upgrade -y &>/dev/null
171 msg_ok "Системата е обновена"
172
173 msg_info "Почистване на ненужни пакети"
174 apt autoremove -y &>/dev/null
175 apt autoclean &>/dev/null
176 msg_ok "Ненужните пакети са премахнати"
177 ;;
178 no)
179 msg_error "Избрахте 'не' за обновяване на системата"
180 ;;
181 esac
182}
183
184# Функция за конфигуриране на firewall
185configure_firewall() {
186 CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "FIREWALL КОНФИГУРАЦИЯ" --menu "Активиране на основна firewall конфигурация?\n \nТова ще активира основни firewall правила за защита." 14 58 2 \
187 "yes" " " \
188 "no" " " 3>&2 2>&1 1>&3)
189 case $CHOICE in
190 yes)
191 msg_info "Конфигуриране на firewall"
192 # Активиране на firewall в Proxmox
193 pvesh set /cluster/firewall/options --enable 1 &>/dev/null
194 msg_ok "Firewall е активиран"
195 ;;
196 no)
197 msg_error "Избрахте 'не' за активиране на firewall"
198 ;;
199 esac
200}
201
202# Функция за показване на системна информация
203show_system_info() {
204 clear
205 header_info
206 echo -e "${BL}════════════════════════════════════════════════════════════${CL}"
207 echo -e "${GN} СИСТЕМНА ИНФОРМАЦИЯ ${CL}"
208 echo -e "${BL}════════════════════════════════════════════════════════════${CL}"
209 echo
210 echo -e "${YW}Proxmox VE версия:${CL} $(pveversion | head -1)"
211 echo -e "${YW}Операционна система:${CL} $(lsb_release -d | cut -f2)"
212 echo -e "${YW}Kernel версия:${CL} $(uname -r)"
213 echo -e "${YW}Архитектура:${CL} $(uname -m)"
214 echo -e "${YW}Възходящо време:${CL} $(uptime -p)"
215 echo -e "${YW}Натоварване:${CL} $(uptime | awk -F'load average:' '{print $2}')"
216 echo -e "${YW}Памет:${CL} $(free -h | grep '^Mem:' | awk '{print $3"/"$2}')"
217 echo -e "${YW}Дисково пространство:${CL} $(df -h / | tail -1 | awk '{print $3"/"$2" ("$5" използвано)"}')"
218 echo
219 echo -e "${BL}════════════════════════════════════════════════════════════${CL}"
220 echo
221 read -p "Натиснете Enter за връщане в главното меню..."
222}
223
224# Главно меню
225main_menu() {
226 while true; do
227 header_info
228 CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "ГЛАВНО МЕНЮ" --menu "Изберете опция:" 20 70 10 \
229 "1" "Изключване на напомнянето за абонамент" \
230 "2" "Корекция на източниците" \
231 "3" "Изключване на enterprise хранилище" \
232 "4" "Активиране на no-subscription хранилище" \
233 "5" "Обновяване на системата" \
234 "6" "Конфигуриране на firewall" \
235 "7" "Показване на системна информация" \
236 "8" "Изпълнение на всички конфигурации" \
237 "9" "Изход" 3>&2 2>&1 1>&3)
238
239 case $CHOICE in
240 1)
241 disable_subscription_nag
242 ;;
243 2)
244 fix_sources
245 ;;
246 3)
247 disable_enterprise_repo
248 ;;
249 4)
250 enable_no_subscription_repo
251 ;;
252 5)
253 update_system
254 ;;
255 6)
256 configure_firewall
257 ;;
258 7)
259 show_system_info
260 ;;
261 8)
262 echo -e "${GN}Изпълнение на всички конфигурации...${CL}"
263 echo
264 disable_subscription_nag
265 fix_sources
266 disable_enterprise_repo
267 enable_no_subscription_repo
268 update_system
269 configure_firewall
270 echo
271 echo -e "${GN}Всички конфигурации са завършени!${CL}"
272 echo -e "${YW}Препоръчва се рестартиране на системата.${CL}"
273 echo
274 read -p "Натиснете Enter за връщане в главното меню..."
275 ;;
276 9)
277 echo -e "${GN}Благодарим ви за използването на Proxmox VE Helper Scripts!${CL}"
278 exit 0
279 ;;
280 *)
281 msg_error "Невалидна опция"
282 ;;
283 esac
284
285 echo
286 read -p "Натиснете Enter за връщане в главното меню..."
287 done
288}
289
290# Основна функция
291main() {
292 check_root
293 check_proxmox
294
295 # Проверка за whiptail
296 if ! command -v whiptail &> /dev/null; then
297 msg_info "Инсталиране на whiptail"
298 apt update &>/dev/null
299 apt install -y whiptail &>/dev/null
300 msg_ok "whiptail е инсталиран"
301 fi
302
303 main_menu
304}
305
306# Стартиране на скрипта
307main "$@"