Исправен синтаксис:

удалены иконки INFO и REBOOT
Добавлены остановки для предотвращения
  автоматического закрытия терминала при вызове
  через другой скрипт
	modified:   admin_helper.txt
	modified:   custom_update_lsp.sh
	deleted:    custom_update_lsp.txt
	modified:   custom_update_sns.sh
	deleted:    puppet_connect.bin
This commit is contained in:
2026-08-28 12:29:56 +03:00
parent 2ad2848f66
commit 24aca7600e
5 changed files with 99 additions and 524 deletions
+1
View File
@@ -4,3 +4,4 @@
Поддерживаемые предприятия: Поддерживаемые предприятия:
Гринатом (МСК) Гринатом (МСК)
Гринатом (НН) Гринатом (НН)
ГК Росатом
+49 -44
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# ============================================== # ==============================================
# Скрипт поэтапного обновления Astra Linux # 🔄 Скрипт поэтапного обновления Astra Linux
# ============================================== # ==============================================
# Цвета # Цвета
RED='\033[0;31m' RED='\033[0;31m'
@@ -31,7 +31,7 @@ init_marker() {
# Если файла нет - создаем со статусом 5 # Если файла нет - создаем со статусом 5
if [[ ! -f "$MARKER_FILE" ]]; then if [[ ! -f "$MARKER_FILE" ]]; then
echo "5" > "$MARKER_FILE" echo "5" > "$MARKER_FILE"
echo -e "${BLUE} Создан маркер-файл: ${MARKER_FILE}${RESET}" echo -e "${BLUE} Создан маркер-файл: ${MARKER_FILE}${RESET}"
fi fi
} }
@@ -45,11 +45,12 @@ get_status() {
set_status() { set_status() {
echo "$1" > "$MARKER_FILE" echo "$1" > "$MARKER_FILE"
echo -e "${BLUE} Статус обновления: ${BOLD}$1${RESET}" echo -e "${BLUE} Статус обновления: ${BOLD}$1${RESET}"
} }
show_status_info() { show_status_info() {
local status=$(get_status) local
status=$(get_status)
echo -e "\n${BOLD}${CYAN}━━━ Статус обновления ━━━${RESET}" echo -e "\n${BOLD}${CYAN}━━━ Статус обновления ━━━${RESET}"
case $status in case $status in
1072) 1072)
@@ -86,8 +87,8 @@ check_root() {
if [[ $EUID -ne 0 ]]; then if [[ $EUID -ne 0 ]]; then
echo -e "${RED}${ERROR} Ошибка: нужны права root!${RESET}" echo -e "${RED}${ERROR} Ошибка: нужны права root!${RESET}"
echo -e "${YELLOW}Используйте: sudo $0${RESET}\n" echo -e "${YELLOW} Используйте: sudo $0${RESET}\n"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
else else
echo -e "${GREEN}${CHECK} Права root: OK${RESET}" echo -e "${GREEN}${CHECK} Права root: OK${RESET}"
@@ -105,7 +106,7 @@ get_current_version() {
else else
echo -e "${RED}${ERROR} Файл версии не найден: $VERSION_FILE${RESET}" echo -e "${RED}${ERROR} Файл версии не найден: $VERSION_FILE${RESET}"
CURRENT_VERSION="unknown" CURRENT_VERSION="unknown"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
fi fi
} }
@@ -115,7 +116,8 @@ get_current_version() {
# ============================================== # ==============================================
check_status_and_version() { check_status_and_version() {
local status=$(get_status) local status
status=$(get_status)
echo "" echo ""
@@ -126,7 +128,7 @@ check_status_and_version() {
# Если статус 0 - всё хорошо, выходим # Если статус 0 - всё хорошо, выходим
if [[ "$status" == "1072" ]]; then if [[ "$status" == "1072" ]]; then
echo -e "${GREEN}${CHECK} Все этапы завершены${RESET}\n" echo -e "${GREEN}${CHECK} Все этапы завершены${RESET}\n"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 0 exit 0
fi fi
@@ -194,6 +196,7 @@ ask_update() {
esac esac
echo "" echo ""
# shellcheck disable=SC2086
read -p "$(echo -e ${YELLOW}${message} [y/N]: ${RESET})" -n 1 -r read -p "$(echo -e ${YELLOW}${message} [y/N]: ${RESET})" -n 1 -r
echo "" echo ""
@@ -202,7 +205,7 @@ ask_update() {
return 0 return 0
else else
echo -e "\n${YELLOW}${WARN} Обновление отменено пользователем${RESET}\n" echo -e "\n${YELLOW}${WARN} Обновление отменено пользователем${RESET}\n"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 0 exit 0
fi fi
} }
@@ -216,18 +219,18 @@ stage1_update_system() {
mgmt_server=$(awk -F' *= *' '/^ *server *=/{print $2}' /etc/puppetlabs/puppet/puppet.conf) mgmt_server=$(awk -F' *= *' '/^ *server *=/{print $2}' /etc/puppetlabs/puppet/puppet.conf)
if [[ -z "$mgmt_server" ]]; then if [[ -z "$mgmt_server" ]]; then
echo -e "${RED}${ERROR} Не удалось получить адрес сервера управления из $puppet_conf${RESET}" echo -e "${RED}${ERROR} Не удалось получить адрес сервера управления из puppet_conf ${RESET}"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
fi fi
echo -e "${GREEN}${CHECK} Сервер управления: ${BOLD}${CYAN}$mgmt_server${RESET}" echo -e "${GREEN}${CHECK} Сервер управления: ${BOLD}${CYAN}$mgmt_server${RESET}"
echo -e "\n${BLUE Остановка и отключение службы Puppet...${RESET}" echo -e "\n${BLUE} Остановка и отключение службы Puppet...${RESET}"
systemctl stop puppet.service 2>/dev/null systemctl stop puppet.service 2>/dev/null
systemctl disable puppet.service 2>/dev/null systemctl disable puppet.service 2>/dev/null
sleep 5 sleep 5
echo -e "\n${BLUE} Настройка репозиториев Astra...${RESET}" echo -e "\n${BLUE} Настройка репозиториев Astra...${RESET}"
repo_file="/etc/apt/sources.list" repo_file="/etc/apt/sources.list"
cat > "$repo_file" << EOF cat > "$repo_file" << EOF
# Astra Linux 1.7.10 репозитории # Astra Linux 1.7.10 репозитории
@@ -240,19 +243,20 @@ deb http://${mgmt_server}/astra/1.7.10/repository-extended/ 1.7_x86-64 contrib m
deb [trusted=yes] http://${mgmt_server}/astra/1.7/custom/ 1.7_x86-64 contrib main non-free deb [trusted=yes] http://${mgmt_server}/astra/1.7/custom/ 1.7_x86-64 contrib main non-free
EOF EOF
# shellcheck disable=SC2181
if [[ $? -eq 0 ]]; then if [[ $? -eq 0 ]]; then
echo -e "${GREEN}${CHECK} Репозитории настроены: $repo_file${RESET}" echo -e "${GREEN}${CHECK} Репозитории настроены: $repo_file${RESET}"
else else
echo -e "${RED}${ERROR} Ошибка настройки репозиториев${RESET}" echo -e "${RED}${ERROR} Ошибка настройки репозиториев${RESET}"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
fi fi
echo -e "\n${BLUE} Очистка старых репозиториев...${RESET}" echo -e "\n${BLUE} Очистка старых репозиториев...${RESET}"
if ls /etc/apt/sources.list.d/*.list 2>/dev/null 1>/dev/null; then if ls /etc/apt/sources.list.d/*.list 2>/dev/null 1>/dev/null; then
echo -e "${YELLOW}${WARN} Найдены файлы в /etc/apt/sources.list.d/${RESET}" echo -e "${YELLOW}${WARN} Найдены файлы в /etc/apt/sources.list.d/${RESET}"
echo -e "${BLUE} Файлы для удаления:${RESET}" echo -e "${BLUE} Файлы для удаления:${RESET}"
ls -la /etc/apt/sources.list.d/*.list 2>/dev/null || echo " (нет .list файлов)" ls -la /etc/apt/sources.list.d/*.list 2>/dev/null || echo " (нет .list файлов)"
rm -f /etc/apt/sources.list.d/*.list 2>/dev/null rm -f /etc/apt/sources.list.d/*.list 2>/dev/null
echo -e "${GREEN}${CHECK} Все .list файлы удалены${RESET}" echo -e "${GREEN}${CHECK} Все .list файлы удалены${RESET}"
@@ -260,24 +264,24 @@ EOF
echo -e "${GREEN}${CHECK} Папка /etc/apt/sources.list.d/ пуста${RESET}" echo -e "${GREEN}${CHECK} Папка /etc/apt/sources.list.d/ пуста${RESET}"
fi fi
echo -e "\n${BLUE} Обновление списка пакетов...${RESET}" echo -e "\n${BLUE} Обновление списка пакетов...${RESET}"
apt update apt update
sleep 3 sleep 3
echo -e "\n${BLUE} Загрузка пакетов...${RESET}" echo -e "\n${BLUE} Загрузка пакетов...${RESET}"
apt dist-upgrade --download-only -y apt dist-upgrade --download-only -y
echo -e "\n${BLUE} Подготовка системы к обновлению...${RESET}" echo -e "\n${BLUE} Подготовка системы к обновлению...${RESET}"
dpkg -s gk-kvm >/dev/null 2>&1 && { apt update && apt install --only-upgrade gk-kvm; } || true dpkg -s gk-kvm >/dev/null 2>&1 && { apt update && apt install --only-upgrade gk-kvm; } || true
dpkg -s secretnet >/dev/null 2>&1 && { sudo dpkg -P secretnet; } || true dpkg -s secretnet >/dev/null 2>&1 && { sudo dpkg -P secretnet; } || true
dpkg -s sns >/dev/null 2>&1 && { sudo dpkg -P sns; } || true dpkg -s sns >/dev/null 2>&1 && { sudo dpkg -P sns; } || true
dpkg -s gk-kvm >/dev/null 2>&1 && { tarm_unlock; } || true dpkg -s gk-kvm >/dev/null 2>&1 && { tarm_unlock; } || true
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
echo -e "${BLUE} Выполняется обновление...${RESET}" echo -e "${BLUE} Выполняется обновление...${RESET}"
/usr/sbin/astra-update -A -r -T -K || { /usr/sbin/astra-update -A -r -T -K || {
echo -e "${RED}${ERROR} Ошибка обновления пакетов${RESET}" echo -e "${RED}${ERROR} Ошибка обновления пакетов${RESET}"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
} }
@@ -292,7 +296,7 @@ EOF
else else
echo -e "${RED}${ERROR} Версия системы: $NEW_VERSION (ожидалось $TARGET_VERSION)${RESET}" echo -e "${RED}${ERROR} Версия системы: $NEW_VERSION (ожидалось $TARGET_VERSION)${RESET}"
echo -e "${RED}${ERROR} Обновление прошло с ошибкой!${RESET}" echo -e "${RED}${ERROR} Обновление прошло с ошибкой!${RESET}"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
fi fi
fi fi
@@ -301,8 +305,8 @@ EOF
set_status 1 set_status 1
echo -e "\n${GREEN}${CHECK} ${BOLD}1 этап завершен! Система обновлена до $TARGET_VERSION${RESET}" echo -e "\n${GREEN}${CHECK} ${BOLD}1 этап завершен! Система обновлена до $TARGET_VERSION${RESET}"
echo -e "${YELLOW} Требуется перезагрузка для продолжения${RESET}" echo -e "${YELLOW} Требуется перезагрузка для продолжения${RESET}"
echo -e "${YELLOW} После перезагрузки запустите скрипт снова ${RESET}\n" echo -e "${YELLOW} После перезагрузки запустите скрипт снова ${RESET}\n"
ask_reboot ask_reboot
} }
@@ -313,8 +317,8 @@ EOF
stage2_install_security() { stage2_install_security() {
mgmt_server=$(awk -F' *= *' '/^ *server *=/{print $2}' /etc/puppetlabs/puppet/puppet.conf) mgmt_server=$(awk -F' *= *' '/^ *server *=/{print $2}' /etc/puppetlabs/puppet/puppet.conf)
if [[ -z "$mgmt_server" ]]; then if [[ -z "$mgmt_server" ]]; then
echo -e "${RED}${ERROR} Не удалось получить адрес сервера управления из $puppet_conf${RESET}" echo -e "${RED}${ERROR} Не удалось получить адрес сервера управления из puppet_conf ${RESET}"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
fi fi
echo -e "${BOLD}${BLUE}━━━ ЭТАП 2: Установка Secret Net ━━━${RESET}\n" echo -e "${BOLD}${BLUE}━━━ ЭТАП 2: Установка Secret Net ━━━${RESET}\n"
@@ -324,23 +328,23 @@ stage2_install_security() {
if [[ "$CURRENT_VER" != "$TARGET_VERSION" ]]; then if [[ "$CURRENT_VER" != "$TARGET_VERSION" ]]; then
echo -e "${RED}${ERROR} Система не обновлена до $TARGET_VERSION (текущая: $CURRENT_VER)${RESET}" echo -e "${RED}${ERROR} Система не обновлена до $TARGET_VERSION (текущая: $CURRENT_VER)${RESET}"
echo -e "${RED}${ERROR} Сначала выполните 1 этап обновления${RESET}" echo -e "${RED}${ERROR} Сначала выполните 1 этап обновления${RESET}"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
fi fi
fi fi
echo -e "${BLUE} Установка SecretNet...${RESET}" echo -e "${BLUE} Установка SecretNet...${RESET}"
cd /tmp/ # shellcheck disable=SC2086
wget http://$mgmt_server/SN/secretnet_1.12-4844.astra1.7_amd64.deb wget --output-file=/tmp/secretnet_1.12-4844.astra1.7_amd64.deb http://$mgmt_server/SN/secretnet_1.12-4844.astra1.7_amd64.deb
apt install -y /tmp/secretnet_1.12-4844.astra1.7_amd64.deb apt install -y /tmp/secretnet_1.12-4844.astra1.7_amd64.deb
echo -e "${BLUE} Установка SecretNet выполнена${RESET}" echo -e "${BLUE} Установка SecretNet выполнена${RESET}"
# Устанавливаем статус 2 # Устанавливаем статус 2
set_status 2 set_status 2
echo -e "\n${GREEN}${CHECK} ${BOLD}2 этап завершен! Secretnet установлен${RESET}" echo -e "\n${GREEN}${CHECK} ${BOLD}2 этап завершен! Secretnet установлен${RESET}"
echo -e "${YELLOW} Требуется перезагрузка для продолжения${RESET}" echo -e "${YELLOW} Требуется перезагрузка для продолжения${RESET}"
echo -e "${YELLOW} После перезагрузки запустите скрипт снова ${RESET}\n" echo -e "${YELLOW} После перезагрузки запустите скрипт снова ${RESET}\n"
ask_reboot ask_reboot
} }
@@ -351,19 +355,19 @@ stage2_install_security() {
stage3_clean_and_fix() { stage3_clean_and_fix() {
echo -e "${BOLD}${BLUE}━━━ ЭТАП 3: Чистка системы и исправление багов ━━━${RESET}\n" echo -e "${BOLD}${BLUE}━━━ ЭТАП 3: Чистка системы и исправление багов ━━━${RESET}\n"
echo -e "${BLUE} Запуск puppet...${RESET}" echo -e "${BLUE} Запуск puppet...${RESET}"
/opt/puppetlabs/bin/puppet agent -t; /opt/puppetlabs/bin/puppet agent -t;
/opt/puppetlabs/bin/puppet agent -t; /opt/puppetlabs/bin/puppet agent -t;
echo -e "${BLUE} Финальное обновление пакетов...${RESET}" echo -e "${BLUE} Финальное обновление пакетов...${RESET}"
/usr/sbin/astra-update -A -r -T /usr/sbin/astra-update -A -r -T
echo -e "${BLUE} Исправление печати kerberos...${RESET}" echo -e "${BLUE} Исправление печати kerberos...${RESET}"
rm /usr/lib/cups/backend/smb rm /usr/lib/cups/backend/smb
ln -s /usr/libexec/samba/smbspool_krb5_wrapper /usr/lib/cups/backend/smb ln -s /usr/libexec/samba/smbspool_krb5_wrapper /usr/lib/cups/backend/smb
chmod 700 /usr/lib/cups/backend/smb chmod 700 /usr/lib/cups/backend/smb
echo -e "${BLUE} Очистка старых ядер...${RESET}" echo -e "${BLUE} Очистка старых ядер...${RESET}"
base_kernel=$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/") base_kernel=$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")
kernels_to_remove=$(dpkg -l 'linux-*' | sed -n '/^ii/p' | \ kernels_to_remove=$(dpkg -l 'linux-*' | sed -n '/^ii/p' | \
@@ -373,16 +377,16 @@ stage3_clean_and_fix() {
head -n -1) head -n -1)
if [ -n "$kernels_to_remove" ]; then if [ -n "$kernels_to_remove" ]; then
apt purge -y $kernels_to_remove apt purge -y "$kernels_to_remove"
fi fi
echo -e "${BLUE} Очистка пакетов...${RESET}" echo -e "${BLUE} Очистка пакетов...${RESET}"
apt clean apt clean
apt autoclean apt autoclean
apt autopurge -y apt autopurge -y
aptitude purge ~c -y aptitude purge ~c -y
echo -e "${BLUE} Запуск puppet и возвращение в автозапуск...${RESET}" echo -e "${BLUE} Запуск puppet и возвращение в автозапуск...${RESET}"
systemctl enable puppet --now systemctl enable puppet --now
echo -e "${GREEN}${CHECK} Чистка и исправление завершены${RESET}\n" echo -e "${GREEN}${CHECK} Чистка и исправление завершены${RESET}\n"
@@ -408,15 +412,16 @@ stage3_clean_and_fix() {
# ============================================== # ==============================================
ask_reboot() { ask_reboot() {
# shellcheck disable=SC2086
read -p "$(echo -e ${YELLOW}Перезагрузить сейчас? [y/N]: ${RESET})" -n 1 -r read -p "$(echo -e ${YELLOW}Перезагрузить сейчас? [y/N]: ${RESET})" -n 1 -r
echo "" echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then if [[ $REPLY =~ ^[Yy]$ ]]; then
echo -e "${BLUE} Перезагрузка...${RESET}" echo -e "${BLUE} Перезагрузка...${RESET}"
reboot reboot
else else
echo -e "${YELLOW}${WARN} Перезагрузка отложена${RESET}" echo -e "${YELLOW}${WARN} Перезагрузка отложена${RESET}"
echo -e "${YELLOW}${WARN} Не забудьте перезагрузить систему вручную!${RESET}" echo -e "${YELLOW}${WARN} Не забудьте перезагрузить систему вручную!${RESET}"
echo -e "${YELLOW} Для продолжения обновления запустите: sudo $0${RESET}" echo -e "${YELLOW} Для продолжения обновления запустите: sudo $0${RESET}"
fi fi
} }
@@ -437,7 +442,7 @@ main() {
3) stage3_clean_and_fix ;; 3) stage3_clean_and_fix ;;
*) *)
echo -e "${RED}${ERROR} Неизвестный этап: $STAGE${RESET}" echo -e "${RED}${ERROR} Неизвестный этап: $STAGE${RESET}"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
;; ;;
esac esac
-436
View File
@@ -1,436 +0,0 @@
#!/usr/bin/env bash
# ==============================================
# Скрипт поэтапного обновления Astra Linux
# ==============================================
# Цвета
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
BOLD='\033[1m'
RESET='\033[0m'
# Иконки
CHECK="✅"
ERROR="❌"
WARN="⚠️"
INFO="️"
ARROW="➜"
ROCKET="🚀"
# Путь к маркер-файлу
MARKER_FILE="/opt/config/custom_update_status.info"
VERSION_FILE="/etc/astra/build_version"
TARGET_VERSION="1.7.10.72"
# ==============================================
# Функции работы с маркер-файлом
# ==============================================
init_marker() {
mkdir -p "$(dirname "$MARKER_FILE")" 2>/dev/null
# Если файла нет - создаем со статусом 5
if [[ ! -f "$MARKER_FILE" ]]; then
echo "5" > "$MARKER_FILE"
echo -e "${BLUE}${INFO} Создан маркер-файл: ${MARKER_FILE}${RESET}"
fi
}
get_status() {
if [[ -f "$MARKER_FILE" ]]; then
cat "$MARKER_FILE" | tr -d ' \t\n\r'
else
echo "5"
fi
}
set_status() {
echo "$1" > "$MARKER_FILE"
echo -e "${BLUE}${INFO} Статус обновления: ${BOLD}$1${RESET}"
}
show_status_info() {
local status=$(get_status)
echo -e "\n${BOLD}${CYAN}━━━ Статус обновления ━━━${RESET}"
case $status in
1072)
echo -e "${GREEN}${CHECK} Система актуальна (версия $CURRENT_VERSION)${RESET}"
echo -e "${GREEN}${CHECK} Обновление не требуется${RESET}"
;;
1)
echo -e "${YELLOW}${WARN} Статус: ${BOLD}1 этап завершен${RESET}"
echo -e "${YELLOW}${WARN} Требуется продолжить обновление (2 этап)${RESET}"
;;
2)
echo -e "${YELLOW}${WARN} Статус: ${BOLD}2 этап завершен${RESET}"
echo -e "${YELLOW}${WARN} Требуется продолжить обновление (3 этап)${RESET}"
;;
5)
echo -e "${GREEN}${CHECK} Система (версия $CURRENT_VERSION)${RESET}"
echo -e "${GREEN}${CHECK} Обновление не утилитой не выполнялось${RESET}"
;;
*)
echo -e "${RED}${ERROR} Неизвестный статус: $status${RESET}"
;;
esac
echo ""
}
# ==============================================
# Шаг 1: Проверяем права root
# ==============================================
check_root() {
echo -e "\n${BOLD}${BLUE}════════════════════════════════════════${RESET}"
echo -e "${BOLD}${CYAN} ПОЭТАПНОЕ ОБНОВЛЕНИЕ ASTRA LINUX${RESET}"
echo -e "${BOLD}${BLUE}════════════════════════════════════════${RESET}\n"
if [[ $EUID -ne 0 ]]; then
echo -e "${RED}${ERROR} Ошибка: нужны права root!${RESET}"
echo -e "${YELLOW}${INFO} Используйте: sudo $0${RESET}\n"
exit 1
else
echo -e "${GREEN}${CHECK} Права root: OK${RESET}"
fi
}
# ==============================================
# Шаг 2: Читаем версию
# ==============================================
get_current_version() {
if [[ -f "$VERSION_FILE" ]]; then
CURRENT_VERSION=$(cat "$VERSION_FILE" | tr -d ' \t\n\r')
echo -e "${GREEN}${CHECK} Текущая версия: ${BOLD}${CYAN}$CURRENT_VERSION${RESET}"
else
echo -e "${RED}${ERROR} Файл версии не найден: $VERSION_FILE${RESET}"
CURRENT_VERSION="unknown"
exit 1
fi
}
# ==============================================
# Шаг 3: Проверяем статус и версию
# ==============================================
check_status_and_version() {
local status=$(get_status)
echo ""
# Если система уже обновлена до целевой версии
if [[ "$CURRENT_VERSION" == "$TARGET_VERSION" ]]; then
echo -e "${GREEN}${CHECK} ${BOLD}Система обновлена до версии $TARGET_VERSION${RESET}"
# Если статус 0 - всё хорошо, выходим
if [[ "$status" == "1072" ]]; then
echo -e "${GREEN}${CHECK} Все этапы завершены${RESET}\n"
exit 0
fi
# Если статус 1 - система обновлена, но защита не установлена
if [[ "$status" == "1" ]]; then
echo -e "${YELLOW}${WARN} Система обновлена, но защита не установлена${RESET}"
echo -e "${CYAN}${ARROW} Продолжаем со 2 этапа${RESET}"
STAGE=2
return
fi
# Если статус 2 - защита установлена, нужна чистка
if [[ "$status" == "2" ]]; then
echo -e "${YELLOW}${WARN} Защита установлена, требуется чистка${RESET}"
echo -e "${CYAN}${ARROW} Продолжаем с 3 этапа${RESET}"
STAGE=3
return
fi
fi
# Если версия ниже целевой
echo -e "${YELLOW}${WARN} Текущая версия ($CURRENT_VERSION) ниже целевой ($TARGET_VERSION)${RESET}"
show_status_info
# Определяем этап на основе статуса
case $status in
5)
echo -e "${CYAN}${ARROW} Начинаем обновление с 1 этапа${RESET}"
STAGE=1
;;
1)
echo -e "${CYAN}${ARROW} Продолжаем со 2 этапа (установка защиты)${RESET}"
STAGE=2
;;
2)
echo -e "${CYAN}${ARROW} Продолжаем с 3 этапа (чистка и исправление)${RESET}"
STAGE=3
;;
*)
echo -e "${RED}${ERROR} Неизвестный статус, сбрасываем на 5${RESET}"
set_status 5
STAGE=1
;;
esac
echo ""
}
# ==============================================
# Шаг 4: Запрос на обновление
# ==============================================
ask_update() {
local message=""
case $STAGE in
1)
message="Начать обновление системы до версии $TARGET_VERSION (1 этап)? После завершения потребуется перезагрузка"
;;
2)
message="Установить корпоративную систему защиты (2 этап)? После завершения потребуется перезагрузка"
;;
3)
message="Выполнить чистку системы и исправление багов (3 этап)?"
;;
esac
echo ""
read -p "$(echo -e ${YELLOW}${message} [y/N]: ${RESET})" -n 1 -r
echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo -e "\n${GREEN}${ROCKET} Запускаем этап $STAGE...${RESET}\n"
return 0
else
echo -e "\n${YELLOW}${WARN} Обновление отменено пользователем${RESET}\n"
exit 0
fi
}
# ==============================================
# ЭТАП 1: Обновление системы до 1.7.10
# ==============================================
stage1_update_system() {
echo -e "${BOLD}${BLUE}━━━ ЭТАП 1: Обновление системы до $TARGET_VERSION ━━━${RESET}\n"
mgmt_server=$(awk -F' *= *' '/^ *server *=/{print $2}' /etc/puppetlabs/puppet/puppet.conf)
if [[ -z "$mgmt_server" ]]; then
echo -e "${RED}${ERROR} Не удалось получить адрес сервера управления из $puppet_conf${RESET}"
exit 1
fi
echo -e "${GREEN}${CHECK} Сервер управления: ${BOLD}${CYAN}$mgmt_server${RESET}"
echo -e "\n${BLUE}${INFO} Остановка и отключение службы Puppet...${RESET}"
systemctl stop puppet.service 2>/dev/null
systemctl disable puppet.service 2>/dev/null
sleep 5
echo -e "\n${BLUE}${INFO} Настройка репозиториев Astra...${RESET}"
repo_file="/etc/apt/sources.list"
cat > "$repo_file" << EOF
# Astra Linux 1.7.10 репозитории
# Сервер управления: ${mgmt_server}
# Сгенерировано: $(date)
deb http://${mgmt_server}/astra/1.7.10/repository-base/ 1.7_x86-64 contrib main non-free
deb http://${mgmt_server}/astra/1.7.10/repository-update/ 1.7_x86-64 contrib main non-free
deb http://${mgmt_server}/astra/1.7.10/repository-extended/ 1.7_x86-64 contrib main non-free
deb [trusted=yes] http://${mgmt_server}/astra/1.7/custom/ 1.7_x86-64 contrib main non-free
EOF
if [[ $? -eq 0 ]]; then
echo -e "${GREEN}${CHECK} Репозитории настроены: $repo_file${RESET}"
else
echo -e "${RED}${ERROR} Ошибка настройки репозиториев${RESET}"
exit 1
fi
echo -e "\n${BLUE}${INFO} Очистка старых репозиториев...${RESET}"
if ls /etc/apt/sources.list.d/*.list 2>/dev/null 1>/dev/null; then
echo -e "${YELLOW}${WARN} Найдены файлы в /etc/apt/sources.list.d/${RESET}"
echo -e "${BLUE}${INFO} Файлы для удаления:${RESET}"
ls -la /etc/apt/sources.list.d/*.list 2>/dev/null || echo " (нет .list файлов)"
rm -f /etc/apt/sources.list.d/*.list 2>/dev/null
echo -e "${GREEN}${CHECK} Все .list файлы удалены${RESET}"
else
echo -e "${GREEN}${CHECK} Папка /etc/apt/sources.list.d/ пуста${RESET}"
fi
echo -e "\n${BLUE}${INFO} Обновление списка пакетов...${RESET}"
apt update
sleep 3
echo -e "\n${BLUE}${INFO} Загрузка пакетов...${RESET}"
apt dist-upgrade --download-only -y
echo -e "\n${BLUE}${INFO} Подготовка системы к обновлению...${RESET}"
dpkg -s gk-kvm >/dev/null 2>&1 && { apt update && apt install --only-upgrade gk-kvm; } || true
dpkg -s secretnet >/dev/null 2>&1 && { sudo dpkg -P secretnet; } || true
dpkg -s sns >/dev/null 2>&1 && { sudo dpkg -P sns; } || true
dpkg -s gk-kvm >/dev/null 2>&1 && { tarm_unlock; } || true
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
echo -e "${BLUE}${INFO} Выполняется обновление...${RESET}"
/usr/sbin/astra-update -A -r -T -K || {
echo -e "${RED}${ERROR} Ошибка обновления пакетов${RESET}"
exit 1
}
/usr/bin/apt -o Dpkg::Options::='--force-confold' install -y gk-eosdo xrdp astra-version --reinstall
dpkg -s gk-kvm >/dev/null 2>&1 && { /usr/bin/apt -o Dpkg::Options::='--force-confold' install -y gk-kvm --reinstall; } || true
dpkg -s gk-kvm >/dev/null 2>&1 && { tarm_lock; } || true
if [[ -f "$VERSION_FILE" ]]; then
NEW_VERSION=$(cat "$VERSION_FILE" | tr -d ' \t\n\r')
if [[ "$NEW_VERSION" == "$TARGET_VERSION" ]]; then
echo -e "${GREEN}${CHECK} ${BOLD}Система успешно обновлена до $TARGET_VERSION${RESET}"
else
echo -e "${RED}${ERROR} Версия системы: $NEW_VERSION (ожидалось $TARGET_VERSION)${RESET}"
echo -e "${RED}${ERROR} Обновление прошло с ошибкой!${RESET}"
exit 1
fi
fi
# Устанавливаем статус 1
set_status 1
echo -e "\n${GREEN}${CHECK} ${BOLD}1 этап завершен! Система обновлена до $TARGET_VERSION${RESET}"
echo -e "${YELLOW}${REBOOT} Требуется перезагрузка для продолжения${RESET}"
echo -e "${YELLOW}${INFO} После перезагрузки запустите скрипт снова ${RESET}\n"
ask_reboot
}
# ==============================================
# ЭТАП 2: Установка корпоративной системы защиты
# ==============================================
stage2_install_security() {
mgmt_server=$(awk -F' *= *' '/^ *server *=/{print $2}' /etc/puppetlabs/puppet/puppet.conf)
if [[ -z "$mgmt_server" ]]; then
echo -e "${RED}${ERROR} Не удалось получить адрес сервера управления из $puppet_conf${RESET}"
exit 1
fi
echo -e "${BOLD}${BLUE}━━━ ЭТАП 2: Установка Secret Net ━━━${RESET}\n"
if [[ -f "$VERSION_FILE" ]]; then
CURRENT_VER=$(cat "$VERSION_FILE" | tr -d ' \t\n\r')
if [[ "$CURRENT_VER" != "$TARGET_VERSION" ]]; then
echo -e "${RED}${ERROR} Система не обновлена до $TARGET_VERSION (текущая: $CURRENT_VER)${RESET}"
echo -e "${RED}${ERROR} Сначала выполните 1 этап обновления${RESET}"
exit 1
fi
fi
echo -e "${BLUE}${INFO} Установка SecretNet...${RESET}"
cd /tmp/
wget http://$mgmt_server/SN/secretnet_1.12-4844.astra1.7_amd64.deb
apt install -y /tmp/secretnet_1.12-4844.astra1.7_amd64.deb
echo -e "${BLUE}${INFO} Установка SecretNet выполнена${RESET}"
# Устанавливаем статус 2
set_status 2
echo -e "\n${GREEN}${CHECK} ${BOLD}2 этап завершен! Secretnet установлен${RESET}"
echo -e "${YELLOW}${REBOOT} Требуется перезагрузка для продолжения${RESET}"
echo -e "${YELLOW}${INFO} После перезагрузки запустите скрипт снова ${RESET}\n"
ask_reboot
}
# ==============================================
# ЭТАП 3: Чистка системы и исправление багов
# ==============================================
stage3_clean_and_fix() {
echo -e "${BOLD}${BLUE}━━━ ЭТАП 3: Чистка системы и исправление багов ━━━${RESET}\n"
echo -e "${BLUE}${INFO} Запуск puppet...${RESET}"
/opt/puppetlabs/bin/puppet agent -t;
/opt/puppetlabs/bin/puppet agent -t;
echo -e "${BLUE}${INFO} Финальное обновление пакетов...${RESET}"
/usr/sbin/astra-update -A -r -T
echo -e "${BLUE}${INFO} Исправление печати kerberos...${RESET}"
rm /usr/lib/cups/backend/smb
ln -s /usr/libexec/samba/smbspool_krb5_wrapper /usr/lib/cups/backend/smb
chmod 700 /usr/lib/cups/backend/smb
echo -e "${BLUE}${INFO} Очистка старых ядер...${RESET}"
base_kernel=$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")
kernels_to_remove=$(dpkg -l 'linux-*' | sed -n '/^ii/p' | \
sed "/$base_kernel/d" | \
sed 's/^[^ ]* [^ ]* \([^ ]*\).*/\1/' | \
sed -n '/[0-9]/p' | \
head -n -1)
if [ -n "$kernels_to_remove" ]; then
apt purge -y $kernels_to_remove
fi
echo -e "${BLUE}${INFO} Очистка пакетов...${RESET}"
apt clean
apt autoclean
apt autopurge -y
aptitude purge ~c -y
echo -e "${BLUE}${INFO} Запуск puppet и возвращение в автозапуск...${RESET}"
systemctl enable puppet --now
echo -e "${GREEN}${CHECK} Чистка и исправление завершены${RESET}\n"
set_status 1072
echo -e "\n${BOLD}${GREEN}════════════════════════════════════════${RESET}"
echo -e "${BOLD}${GREEN} ✅ ОБНОВЛЕНИЕ УСПЕШНО ЗАВЕРШЕНО!${RESET}"
echo -e "${BOLD}${GREEN}════════════════════════════════════════${RESET}"
echo -e "${GREEN}${CHECK} Система: ${BOLD}$TARGET_VERSION${RESET}"
echo -e "${GREEN}${SHIELD} Защита: ${BOLD}установлена${RESET}"
echo -e "${GREEN}${CLEAN} Чистка: ${BOLD}выполнена${RESET}"
echo -e "${BOLD}${GREEN}════════════════════════════════════════${RESET}\n"
if [[ -f /var/run/reboot-required ]]; then
echo -e "${YELLOW}${WARN} Рекомендуется перезагрузить систему${RESET}"
ask_reboot
fi
}
# ==============================================
# Запрос перезагрузки
# ==============================================
ask_reboot() {
read -p "$(echo -e ${YELLOW}Перезагрузить сейчас? [y/N]: ${RESET})" -n 1 -r
echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo -e "${BLUE}${INFO} Перезагрузка...${RESET}"
reboot
else
echo -e "${YELLOW}${WARN} Перезагрузка отложена${RESET}"
echo -e "${YELLOW}${WARN} Не забудьте перезагрузить систему вручную!${RESET}"
echo -e "${YELLOW}${INFO} Для продолжения обновления запустите: sudo $0${RESET}"
fi
}
# ==============================================
# MAIN
# ==============================================
main() {
check_root
init_marker
get_current_version
check_status_and_version
ask_update
case $STAGE in
1) stage1_update_system ;;
2) stage2_install_security ;;
3) stage3_clean_and_fix ;;
*)
echo -e "${RED}${ERROR} Неизвестный этап: $STAGE${RESET}"
exit 1
;;
esac
}
main "$@"
+49 -44
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# ============================================== # ==============================================
# Скрипт поэтапного обновления Astra Linux # 🔄 Скрипт поэтапного обновления Astra Linux
# ============================================== # ==============================================
# Цвета # Цвета
RED='\033[0;31m' RED='\033[0;31m'
@@ -31,7 +31,7 @@ init_marker() {
# Если файла нет - создаем со статусом 5 # Если файла нет - создаем со статусом 5
if [[ ! -f "$MARKER_FILE" ]]; then if [[ ! -f "$MARKER_FILE" ]]; then
echo "5" > "$MARKER_FILE" echo "5" > "$MARKER_FILE"
echo -e "${BLUE} Создан маркер-файл: ${MARKER_FILE}${RESET}" echo -e "${BLUE} Создан маркер-файл: ${MARKER_FILE}${RESET}"
fi fi
} }
@@ -45,11 +45,12 @@ get_status() {
set_status() { set_status() {
echo "$1" > "$MARKER_FILE" echo "$1" > "$MARKER_FILE"
echo -e "${BLUE} Статус обновления: ${BOLD}$1${RESET}" echo -e "${BLUE} Статус обновления: ${BOLD}$1${RESET}"
} }
show_status_info() { show_status_info() {
local status=$(get_status) local
status=$(get_status)
echo -e "\n${BOLD}${CYAN}━━━ Статус обновления ━━━${RESET}" echo -e "\n${BOLD}${CYAN}━━━ Статус обновления ━━━${RESET}"
case $status in case $status in
1072) 1072)
@@ -86,8 +87,8 @@ check_root() {
if [[ $EUID -ne 0 ]]; then if [[ $EUID -ne 0 ]]; then
echo -e "${RED}${ERROR} Ошибка: нужны права root!${RESET}" echo -e "${RED}${ERROR} Ошибка: нужны права root!${RESET}"
echo -e "${YELLOW}Используйте: sudo $0${RESET}\n" echo -e "${YELLOW} Используйте: sudo $0${RESET}\n"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
else else
echo -e "${GREEN}${CHECK} Права root: OK${RESET}" echo -e "${GREEN}${CHECK} Права root: OK${RESET}"
@@ -105,7 +106,7 @@ get_current_version() {
else else
echo -e "${RED}${ERROR} Файл версии не найден: $VERSION_FILE${RESET}" echo -e "${RED}${ERROR} Файл версии не найден: $VERSION_FILE${RESET}"
CURRENT_VERSION="unknown" CURRENT_VERSION="unknown"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
fi fi
} }
@@ -115,7 +116,8 @@ get_current_version() {
# ============================================== # ==============================================
check_status_and_version() { check_status_and_version() {
local status=$(get_status) local status
status=$(get_status)
echo "" echo ""
@@ -126,7 +128,7 @@ check_status_and_version() {
# Если статус 0 - всё хорошо, выходим # Если статус 0 - всё хорошо, выходим
if [[ "$status" == "1072" ]]; then if [[ "$status" == "1072" ]]; then
echo -e "${GREEN}${CHECK} Все этапы завершены${RESET}\n" echo -e "${GREEN}${CHECK} Все этапы завершены${RESET}\n"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 0 exit 0
fi fi
@@ -194,6 +196,7 @@ ask_update() {
esac esac
echo "" echo ""
# shellcheck disable=SC2086
read -p "$(echo -e ${YELLOW}${message} [y/N]: ${RESET})" -n 1 -r read -p "$(echo -e ${YELLOW}${message} [y/N]: ${RESET})" -n 1 -r
echo "" echo ""
@@ -202,7 +205,7 @@ ask_update() {
return 0 return 0
else else
echo -e "\n${YELLOW}${WARN} Обновление отменено пользователем${RESET}\n" echo -e "\n${YELLOW}${WARN} Обновление отменено пользователем${RESET}\n"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 0 exit 0
fi fi
} }
@@ -216,18 +219,18 @@ stage1_update_system() {
mgmt_server=$(awk -F' *= *' '/^ *server *=/{print $2}' /etc/puppetlabs/puppet/puppet.conf) mgmt_server=$(awk -F' *= *' '/^ *server *=/{print $2}' /etc/puppetlabs/puppet/puppet.conf)
if [[ -z "$mgmt_server" ]]; then if [[ -z "$mgmt_server" ]]; then
echo -e "${RED}${ERROR} Не удалось получить адрес сервера управления из $puppet_conf${RESET}" echo -e "${RED}${ERROR} Не удалось получить адрес сервера управления из puppet_conf ${RESET}"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
fi fi
echo -e "${GREEN}${CHECK} Сервер управления: ${BOLD}${CYAN}$mgmt_server${RESET}" echo -e "${GREEN}${CHECK} Сервер управления: ${BOLD}${CYAN}$mgmt_server${RESET}"
echo -e "\n${BLUE Остановка и отключение службы Puppet...${RESET}" echo -e "\n${BLUE} Остановка и отключение службы Puppet...${RESET}"
systemctl stop puppet.service 2>/dev/null systemctl stop puppet.service 2>/dev/null
systemctl disable puppet.service 2>/dev/null systemctl disable puppet.service 2>/dev/null
sleep 5 sleep 5
echo -e "\n${BLUE} Настройка репозиториев Astra...${RESET}" echo -e "\n${BLUE} Настройка репозиториев Astra...${RESET}"
repo_file="/etc/apt/sources.list" repo_file="/etc/apt/sources.list"
cat > "$repo_file" << EOF cat > "$repo_file" << EOF
# Astra Linux 1.7.10 репозитории # Astra Linux 1.7.10 репозитории
@@ -240,19 +243,20 @@ deb http://${mgmt_server}/astra/1.7.10/repository-extended/ 1.7_x86-64 contrib m
deb [trusted=yes] http://${mgmt_server}/astra/1.7/custom/ 1.7_x86-64 contrib main non-free deb [trusted=yes] http://${mgmt_server}/astra/1.7/custom/ 1.7_x86-64 contrib main non-free
EOF EOF
# shellcheck disable=SC2181
if [[ $? -eq 0 ]]; then if [[ $? -eq 0 ]]; then
echo -e "${GREEN}${CHECK} Репозитории настроены: $repo_file${RESET}" echo -e "${GREEN}${CHECK} Репозитории настроены: $repo_file${RESET}"
else else
echo -e "${RED}${ERROR} Ошибка настройки репозиториев${RESET}" echo -e "${RED}${ERROR} Ошибка настройки репозиториев${RESET}"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
fi fi
echo -e "\n${BLUE} Очистка старых репозиториев...${RESET}" echo -e "\n${BLUE} Очистка старых репозиториев...${RESET}"
if ls /etc/apt/sources.list.d/*.list 2>/dev/null 1>/dev/null; then if ls /etc/apt/sources.list.d/*.list 2>/dev/null 1>/dev/null; then
echo -e "${YELLOW}${WARN} Найдены файлы в /etc/apt/sources.list.d/${RESET}" echo -e "${YELLOW}${WARN} Найдены файлы в /etc/apt/sources.list.d/${RESET}"
echo -e "${BLUE} Файлы для удаления:${RESET}" echo -e "${BLUE} Файлы для удаления:${RESET}"
ls -la /etc/apt/sources.list.d/*.list 2>/dev/null || echo " (нет .list файлов)" ls -la /etc/apt/sources.list.d/*.list 2>/dev/null || echo " (нет .list файлов)"
rm -f /etc/apt/sources.list.d/*.list 2>/dev/null rm -f /etc/apt/sources.list.d/*.list 2>/dev/null
echo -e "${GREEN}${CHECK} Все .list файлы удалены${RESET}" echo -e "${GREEN}${CHECK} Все .list файлы удалены${RESET}"
@@ -260,24 +264,24 @@ EOF
echo -e "${GREEN}${CHECK} Папка /etc/apt/sources.list.d/ пуста${RESET}" echo -e "${GREEN}${CHECK} Папка /etc/apt/sources.list.d/ пуста${RESET}"
fi fi
echo -e "\n${BLUE} Обновление списка пакетов...${RESET}" echo -e "\n${BLUE} Обновление списка пакетов...${RESET}"
apt update apt update
sleep 3 sleep 3
echo -e "\n${BLUE} Загрузка пакетов...${RESET}" echo -e "\n${BLUE} Загрузка пакетов...${RESET}"
apt dist-upgrade --download-only -y apt dist-upgrade --download-only -y
echo -e "\n${BLUE} Подготовка системы к обновлению...${RESET}" echo -e "\n${BLUE} Подготовка системы к обновлению...${RESET}"
dpkg -s gk-kvm >/dev/null 2>&1 && { apt update && apt install --only-upgrade gk-kvm; } || true dpkg -s gk-kvm >/dev/null 2>&1 && { apt update && apt install --only-upgrade gk-kvm; } || true
dpkg -s secretnet >/dev/null 2>&1 && { sudo dpkg -P secretnet; } || true dpkg -s secretnet >/dev/null 2>&1 && { sudo dpkg -P secretnet; } || true
dpkg -s sns >/dev/null 2>&1 && { sudo dpkg -P sns; } || true dpkg -s sns >/dev/null 2>&1 && { sudo dpkg -P sns; } || true
dpkg -s gk-kvm >/dev/null 2>&1 && { tarm_unlock; } || true dpkg -s gk-kvm >/dev/null 2>&1 && { tarm_unlock; } || true
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
echo -e "${BLUE} Выполняется обновление...${RESET}" echo -e "${BLUE} Выполняется обновление...${RESET}"
/usr/sbin/astra-update -A -r -T -K || { /usr/sbin/astra-update -A -r -T -K || {
echo -e "${RED}${ERROR} Ошибка обновления пакетов${RESET}" echo -e "${RED}${ERROR} Ошибка обновления пакетов${RESET}"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
} }
@@ -292,7 +296,7 @@ EOF
else else
echo -e "${RED}${ERROR} Версия системы: $NEW_VERSION (ожидалось $TARGET_VERSION)${RESET}" echo -e "${RED}${ERROR} Версия системы: $NEW_VERSION (ожидалось $TARGET_VERSION)${RESET}"
echo -e "${RED}${ERROR} Обновление прошло с ошибкой!${RESET}" echo -e "${RED}${ERROR} Обновление прошло с ошибкой!${RESET}"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
fi fi
fi fi
@@ -301,8 +305,8 @@ EOF
set_status 1 set_status 1
echo -e "\n${GREEN}${CHECK} ${BOLD}1 этап завершен! Система обновлена до $TARGET_VERSION${RESET}" echo -e "\n${GREEN}${CHECK} ${BOLD}1 этап завершен! Система обновлена до $TARGET_VERSION${RESET}"
echo -e "${YELLOW} Требуется перезагрузка для продолжения${RESET}" echo -e "${YELLOW} Требуется перезагрузка для продолжения${RESET}"
echo -e "${YELLOW} После перезагрузки запустите скрипт снова ${RESET}\n" echo -e "${YELLOW} После перезагрузки запустите скрипт снова ${RESET}\n"
ask_reboot ask_reboot
} }
@@ -313,8 +317,8 @@ EOF
stage2_install_security() { stage2_install_security() {
mgmt_server=$(awk -F' *= *' '/^ *server *=/{print $2}' /etc/puppetlabs/puppet/puppet.conf) mgmt_server=$(awk -F' *= *' '/^ *server *=/{print $2}' /etc/puppetlabs/puppet/puppet.conf)
if [[ -z "$mgmt_server" ]]; then if [[ -z "$mgmt_server" ]]; then
echo -e "${RED}${ERROR} Не удалось получить адрес сервера управления из $puppet_conf${RESET}" echo -e "${RED}${ERROR} Не удалось получить адрес сервера управления из puppet_conf ${RESET}"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
fi fi
echo -e "${BOLD}${BLUE}━━━ ЭТАП 2: Установка Secret Net ━━━${RESET}\n" echo -e "${BOLD}${BLUE}━━━ ЭТАП 2: Установка Secret Net ━━━${RESET}\n"
@@ -324,23 +328,23 @@ stage2_install_security() {
if [[ "$CURRENT_VER" != "$TARGET_VERSION" ]]; then if [[ "$CURRENT_VER" != "$TARGET_VERSION" ]]; then
echo -e "${RED}${ERROR} Система не обновлена до $TARGET_VERSION (текущая: $CURRENT_VER)${RESET}" echo -e "${RED}${ERROR} Система не обновлена до $TARGET_VERSION (текущая: $CURRENT_VER)${RESET}"
echo -e "${RED}${ERROR} Сначала выполните 1 этап обновления${RESET}" echo -e "${RED}${ERROR} Сначала выполните 1 этап обновления${RESET}"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
fi fi
fi fi
echo -e "${BLUE} Установка SecretNet...${RESET}" echo -e "${BLUE} Установка SecretNet...${RESET}"
cd /tmp/ # shellcheck disable=SC2086
wget http://$mgmt_server/SN/sns_8.2-2426.astra1.7_amd64.deb wget --output-file=/tmp/sns_8.2-2426.astra1.7_amd64.deb http://$mgmt_server/SN/sns_8.2-2426.astra1.7_amd64.deb
apt install -y /tmp/sns_8.2-2426.astra1.7_amd64.deb apt install -y /tmp/sns_8.2-2426.astra1.7_amd64.deb
echo -e "${BLUE} Установка SecretNet выполнена${RESET}" echo -e "${BLUE} Установка SecretNet выполнена${RESET}"
# Устанавливаем статус 2 # Устанавливаем статус 2
set_status 2 set_status 2
echo -e "\n${GREEN}${CHECK} ${BOLD}2 этап завершен! Secretnet установлен${RESET}" echo -e "\n${GREEN}${CHECK} ${BOLD}2 этап завершен! Secretnet установлен${RESET}"
echo -e "${YELLOW} Требуется перезагрузка для продолжения${RESET}" echo -e "${YELLOW} Требуется перезагрузка для продолжения${RESET}"
echo -e "${YELLOW} После перезагрузки запустите скрипт снова ${RESET}\n" echo -e "${YELLOW} После перезагрузки запустите скрипт снова ${RESET}\n"
ask_reboot ask_reboot
} }
@@ -351,19 +355,19 @@ stage2_install_security() {
stage3_clean_and_fix() { stage3_clean_and_fix() {
echo -e "${BOLD}${BLUE}━━━ ЭТАП 3: Чистка системы и исправление багов ━━━${RESET}\n" echo -e "${BOLD}${BLUE}━━━ ЭТАП 3: Чистка системы и исправление багов ━━━${RESET}\n"
echo -e "${BLUE} Запуск puppet...${RESET}" echo -e "${BLUE} Запуск puppet...${RESET}"
/opt/puppetlabs/bin/puppet agent -t; /opt/puppetlabs/bin/puppet agent -t;
/opt/puppetlabs/bin/puppet agent -t; /opt/puppetlabs/bin/puppet agent -t;
echo -e "${BLUE} Финальное обновление пакетов...${RESET}" echo -e "${BLUE} Финальное обновление пакетов...${RESET}"
/usr/sbin/astra-update -A -r -T /usr/sbin/astra-update -A -r -T
echo -e "${BLUE} Исправление печати kerberos...${RESET}" echo -e "${BLUE} Исправление печати kerberos...${RESET}"
rm /usr/lib/cups/backend/smb rm /usr/lib/cups/backend/smb
ln -s /usr/libexec/samba/smbspool_krb5_wrapper /usr/lib/cups/backend/smb ln -s /usr/libexec/samba/smbspool_krb5_wrapper /usr/lib/cups/backend/smb
chmod 700 /usr/lib/cups/backend/smb chmod 700 /usr/lib/cups/backend/smb
echo -e "${BLUE} Очистка старых ядер...${RESET}" echo -e "${BLUE} Очистка старых ядер...${RESET}"
base_kernel=$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/") base_kernel=$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")
kernels_to_remove=$(dpkg -l 'linux-*' | sed -n '/^ii/p' | \ kernels_to_remove=$(dpkg -l 'linux-*' | sed -n '/^ii/p' | \
@@ -373,16 +377,16 @@ stage3_clean_and_fix() {
head -n -1) head -n -1)
if [ -n "$kernels_to_remove" ]; then if [ -n "$kernels_to_remove" ]; then
apt purge -y $kernels_to_remove apt purge -y "$kernels_to_remove"
fi fi
echo -e "${BLUE} Очистка пакетов...${RESET}" echo -e "${BLUE} Очистка пакетов...${RESET}"
apt clean apt clean
apt autoclean apt autoclean
apt autopurge -y apt autopurge -y
aptitude purge ~c -y aptitude purge ~c -y
echo -e "${BLUE} Запуск puppet и возвращение в автозапуск...${RESET}" echo -e "${BLUE} Запуск puppet и возвращение в автозапуск...${RESET}"
systemctl enable puppet --now systemctl enable puppet --now
echo -e "${GREEN}${CHECK} Чистка и исправление завершены${RESET}\n" echo -e "${GREEN}${CHECK} Чистка и исправление завершены${RESET}\n"
@@ -408,15 +412,16 @@ stage3_clean_and_fix() {
# ============================================== # ==============================================
ask_reboot() { ask_reboot() {
# shellcheck disable=SC2086
read -p "$(echo -e ${YELLOW}Перезагрузить сейчас? [y/N]: ${RESET})" -n 1 -r read -p "$(echo -e ${YELLOW}Перезагрузить сейчас? [y/N]: ${RESET})" -n 1 -r
echo "" echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then if [[ $REPLY =~ ^[Yy]$ ]]; then
echo -e "${BLUE} Перезагрузка...${RESET}" echo -e "${BLUE} Перезагрузка...${RESET}"
reboot reboot
else else
echo -e "${YELLOW}${WARN} Перезагрузка отложена${RESET}" echo -e "${YELLOW}${WARN} Перезагрузка отложена${RESET}"
echo -e "${YELLOW}${WARN} Не забудьте перезагрузить систему вручную!${RESET}" echo -e "${YELLOW}${WARN} Не забудьте перезагрузить систему вручную!${RESET}"
echo -e "${YELLOW} Для продолжения обновления запустите: sudo $0${RESET}" echo -e "${YELLOW} Для продолжения обновления запустите: sudo $0${RESET}"
fi fi
} }
@@ -437,7 +442,7 @@ main() {
3) stage3_clean_and_fix ;; 3) stage3_clean_and_fix ;;
*) *)
echo -e "${RED}${ERROR} Неизвестный этап: $STAGE${RESET}" echo -e "${RED}${ERROR} Неизвестный этап: $STAGE${RESET}"
read -p "Нажмите Enter для завершения..." read -r -p "Нажмите Enter для завершения"
exit 1 exit 1
;; ;;
esac esac
Binary file not shown.