/
arch_linux
/
pkg_manager
Обзор
Документация
Войти
/
arch_linux
/
pkg_manager
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
pkg_manager.sh
794 строки
32 KB
БАЛИЦКИЙ АЛЕКСАНДР НИКОЛАЕВИЧ
upload files
02 янв 2026, 12:11
02 янв 2026, 12:11
399e650
Код
Авторство
О чём код?
#!/bin/bash # ============================================================================= # 👽ALIIPRO👽 - Менеджер пакетов для Arch Linux # Версия: 1.1 # ============================================================================= PKG_LIST_FILE="aliipro_packages.list" TEMP_DIR="/tmp/aliipro_pkg" LOG_FILE="aliipro_pkg.log" OS_DETECT_FILE="/tmp/aliipro_os_detect" # Цвета для вывода RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # ============================================================================= # ФУНКЦИИ ОПРЕДЕЛЕНИЯ ОС И ПАКЕТНОГО МЕНЕДЖЕРА # ============================================================================= detect_os_and_pkg_manager() { log_message "INFO" "Определение операционной системы..." # Сначала пробуем определить по /etc/os-release if [[ -f /etc/os-release ]]; then source /etc/os-release OS_NAME="$NAME" OS_ID="$ID" log_message "INFO" "Обнаружена ОС: $OS_NAME (ID: $OS_ID)" fi # Определяем пакетный менеджер if command -v pacman &> /dev/null; then PKG_MANAGER="pacman" OS_TYPE="arch" log_message "INFO" "Обнаружен менеджер пакетов: pacman (Arch Linux)" elif command -v apt-get &> /dev/null; then PKG_MANAGER="apt-get" OS_TYPE="debian" log_message "INFO" "Обнаружен менеджер пакетов: apt-get (Debian/Ubuntu)" elif command -v yum &> /dev/null; then PKG_MANAGER="yum" OS_TYPE="rhel" log_message "INFO" "Обнаружен менеджер пакетов: yum (RHEL/CentOS)" elif command -v dnf &> /dev/null; then PKG_MANAGER="dnf" OS_TYPE="fedora" log_message "INFO" "Обнаружен менеджер пакетов: dnf (Fedora)" else log_message "ERROR" "Не удалось определить пакетный менеджер" PKG_MANAGER="unknown" OS_TYPE="unknown" fi # Сохраняем информацию в файл echo "OS_TYPE=$OS_TYPE" > "$OS_DETECT_FILE" echo "PKG_MANAGER=$PKG_MANAGER" >> "$OS_DETECT_FILE" echo "OS_NAME=$OS_NAME" >> "$OS_DETECT_FILE" return 0 } # ============================================================================= # ФУНКЦИИ ЛОГИРОВАНИЯ # ============================================================================= log_message() { local level=$1 local message=$2 local timestamp=$(date '+%Y-%m-%d %H:%M:%S') case $level in "INFO") echo -e "${GREEN}[INFO]${NC} $message" ;; "WARN") echo -e "${YELLOW}[WARN]${NC} $message" ;; "ERROR") echo -e "${RED}[ERROR]${NC} $message" ;; esac echo "[$timestamp] [$level] $message" >> "$LOG_FILE" } # ============================================================================= # ФУНКЦИЯ 1: Автоматическое сканирование и создание чистого списка пакетов # ============================================================================= scan_and_create_pkg_list() { log_message "INFO" "Запуск сканирования установленных пакетов..." # Определяем ОС и менеджер пакетов detect_os_and_pkg_manager # Создаем временную директорию mkdir -p "$TEMP_DIR" # Сканируем установленные пакеты в зависимости от менеджера case $PKG_MANAGER in "pacman") log_message "INFO" "Использую pacman для сканирования пакетов..." # pacman -Qq выводит все установленные пакеты без версий pacman -Qq > "$TEMP_DIR/all_packages.tmp" 2>/dev/null local count=$(wc -l < "$TEMP_DIR/all_packages.tmp" 2>/dev/null || echo "0") log_message "INFO" "Найдено пакетов (pacman): $count" # Также можно получить явно установленные пакеты pacman -Qqe > "$TEMP_DIR/explicit_packages.tmp" 2>/dev/null local explicit_count=$(wc -l < "$TEMP_DIR/explicit_packages.tmp" 2>/dev/null || echo "0") log_message "INFO" "Явно установленных пакетов: $explicit_count" ;; "apt-get") log_message "INFO" "Использую dpkg для сканирования пакетов..." dpkg --get-selections | awk '{print $1}' > "$TEMP_DIR/all_packages.tmp" local count=$(wc -l < "$TEMP_DIR/all_packages.tmp") log_message "INFO" "Найдено пакетов (dpkg): $count" ;; "yum"|"dnf") log_message "INFO" "Использую rpm для сканирования пакетов..." rpm -qa --queryformat '%{NAME}\n' > "$TEMP_DIR/all_packages.tmp" local count=$(wc -l < "$TEMP_DIR/all_packages.tmp") log_message "INFO" "Найдено пакетов (rpm): $count" ;; *) log_message "ERROR" "Не найден поддерживаемый менеджер пакетов" echo -e "${RED}Поддерживаемые системы:${NC}" echo " • Arch Linux (pacman)" echo " • Debian/Ubuntu (apt-get)" echo " • RHEL/CentOS (yum)" echo " • Fedora (dnf)" return 1 ;; esac # Проверяем, создался ли файл if [[ ! -f "$TEMP_DIR/all_packages.tmp" ]] || [[ ! -s "$TEMP_DIR/all_packages.tmp" ]]; then log_message "ERROR" "Не удалось получить список пакетов" echo -e "${RED}✗${NC} Не удалось получить список пакетов" # Пробуем альтернативный метод для Arch Linux if [[ "$PKG_MANAGER" == "pacman" ]]; then log_message "INFO" "Пробую альтернативный метод для pacman..." pacman -Q | awk '{print $1}' > "$TEMP_DIR/all_packages.tmp" 2>/dev/null if [[ -s "$TEMP_DIR/all_packages.tmp" ]]; then log_message "INFO" "Альтернативный метод сработал" fi fi if [[ ! -s "$TEMP_DIR/all_packages.tmp" ]]; then return 1 fi fi # Очистка списка (удаление дубликатов, сортировка) sort -u "$TEMP_DIR/all_packages.tmp" > "$PKG_LIST_FILE" # Подсчет итогов local count=$(wc -l < "$PKG_LIST_FILE" 2>/dev/null || echo "0") log_message "INFO" "Создан чистый список пакетов: $PKG_LIST_FILE" log_message "INFO" "Количество уникальных пакетов: $count" # Дополнительная информация для Arch Linux if [[ "$PKG_MANAGER" == "pacman" ]] && [[ -f "$TEMP_DIR/explicit_packages.tmp" ]]; then sort -u "$TEMP_DIR/explicit_packages.tmp" > "aliipro_packages_explicit.list" local explicit_count=$(wc -l < "aliipro_packages_explicit.list" 2>/dev/null || echo "0") log_message "INFO" "Создан список явно установленных пакетов: aliipro_packages_explicit.list ($explicit_count пакетов)" fi echo -e "${GREEN}✓${NC} Сканирование завершено. Создан файл: $PKG_LIST_FILE" echo -e "${BLUE}Информация:${NC}" echo " • Система: $OS_NAME" echo " • Менеджер пакетов: $PKG_MANAGER" echo " • Пакетов в списке: $count" return 0 } # ============================================================================= # ФУНКЦИЯ 2: Сканирование корней директории скрипта на наличие списков пакетов # ============================================================================= scan_for_pkg_lists() { log_message "INFO" "Сканирование директории на наличие списков пакетов..." local found_lists=() local current_dir=$(pwd) # Ищем файлы с расширениями .list, .txt, содержащие 'packages' или 'pkg' for file in "$current_dir"/*.list "$current_dir"/*.txt "$current_dir"/*.lst; do if [[ -f "$file" ]]; then local filename=$(basename "$file") if [[ "$filename" == *"package"* ]] || [[ "$filename" == *"pkg"* ]] || [[ "$filename" == *"install"* ]] || [[ "$filename" == *"dpkg"* ]] || [[ "$filename" == *"rpm"* ]] || [[ "$filename" == *"pacman"* ]] || [[ "$filename" == *"arch"* ]]; then found_lists+=("$file") fi fi done # Проверяем стандартные имена файлов (включая специфичные для Arch) local standard_names=( "packages.list" "pkg.list" "install.list" "requirements.txt" "pkglist.txt" "pacman-list.txt" "arch-packages.txt" "aliipro_packages.list" "aliipro_packages_explicit.list" ) for name in "${standard_names[@]}"; do if [[ -f "$current_dir/$name" ]]; then found_lists+=("$current_dir/$name") fi done # Выводим результаты if [[ ${#found_lists[@]} -eq 0 ]]; then log_message "WARN" "Списки пакетов не найдены в текущей директории" echo -e "${YELLOW}⚠${NC} Списки пакетов не найдены" return 1 else log_message "INFO" "Найдено списков пакетов: ${#found_lists[@]}" echo -e "${GREEN}✓${NC} Найдены следующие списки пакетов:" for i in "${!found_lists[@]}"; do local size=$(du -h "${found_lists[$i]}" 2>/dev/null | cut -f1 || echo "?") local lines=$(wc -l < "${found_lists[$i]}" 2>/dev/null || echo "0") echo " [$((i+1))] ${found_lists[$i]} (${lines} пакетов, ${size})" done # Запоминаем найденные списки для использования printf '%s\n' "${found_lists[@]}" > "$TEMP_DIR/found_lists.tmp" return 0 fi } # ============================================================================= # ФУНКЦИЯ 3: Интерактивное меню с радио-кнопками # ============================================================================= show_interactive_menu() { clear echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} 👽ALIIPRO👽 - МЕНЮ УПРАВЛЕНИЯ ПАКЕТАМИ ${NC}" echo -e "${BLUE}========================================${NC}" echo "" # Проверяем наличие списка пакетов if [[ ! -f "$PKG_LIST_FILE" ]]; then echo -e "${YELLOW}Файл списка пакетов не найден. Сначала выполните сканирование.${NC}" echo "" read -p "Выполнить сканирование сейчас? (y/N): " scan_now if [[ "$scan_now" =~ ^[Yy]$ ]]; then scan_and_create_pkg_list fi if [[ ! -f "$PKG_LIST_FILE" ]]; then read -p "Нажмите Enter для возврата в меню..." return fi fi # Читаем список пакетов local packages=() local selected=() # Берем пакеты для меню mapfile -t packages < <(cat "$PKG_LIST_FILE" 2>/dev/null | head -50) # Увеличил до 50 if [[ ${#packages[@]} -eq 0 ]]; then echo -e "${RED}Список пакетов пуст!${NC}" read -p "Нажмите Enter для возврата в меню..." return fi # Инициализируем массив выбранных for ((i=0; i<${#packages[@]}; i++)); do selected[$i]=0 done # Переменные для управления меню local current=0 local total=${#packages[@]} while true; do clear echo -e "${BLUE}Выберите пакеты (SPACE - выбрать, ENTER - подтвердить, Q - выход):${NC}" echo "" echo -e "${YELLOW}Показано ${total} из $(wc -l < "$PKG_LIST_FILE" 2>/dev/null || echo "0") пакетов${NC}" echo "" for i in "${!packages[@]}"; do if [[ $i -eq $current ]]; then echo -en "${GREEN}▶${NC} " else echo -en " " fi if [[ ${selected[$i]} -eq 1 ]]; then echo -en "[${GREEN}✓${NC}] ${packages[$i]}" else echo -en "[ ] ${packages[$i]}" fi echo "" done echo "" local selected_count=0 for sel in "${selected[@]}"; do [[ $sel -eq 1 ]] && ((selected_count++)) done echo -e "${YELLOW}Выбрано: ${selected_count} пакетов${NC}" echo -e "${YELLOW}Управление: ↑/↓ - навигация, SPACE - выбрать, ENTER - установить, D - удалить, Q - выход${NC}" # Чтение клавиш read -rsn1 key case $key in $'\x1b') # Стрелки read -rsn2 -t 0.1 arrow case $arrow in '[A') ((current--)) ;; '[B') ((current++)) ;; esac # Проверка границ if [[ $current -lt 0 ]]; then current=0; fi if [[ $current -ge $total ]]; then current=$((total-1)); fi ;; " ") # Пробел - выбор if [[ ${selected[$current]} -eq 1 ]]; then selected[$current]=0 else selected[$current]=1 fi ;; "") # Enter - установка выбранных install_selected_packages "${packages[@]}" "${selected[@]}" break ;; "d"|"D") # Удаление выбранных remove_selected_packages "${packages[@]}" "${selected[@]}" break ;; "q"|"Q") # Выход echo -e "${YELLOW}Выход из меню${NC}" return ;; esac done } # ============================================================================= # Функция установки выбранных пакетов # ============================================================================= install_selected_packages() { local packages=("${@:1:$#/2}") local selected=("${@:$((($#/2)+1))}") local to_install=() for i in "${!selected[@]}"; do if [[ ${selected[$i]} -eq 1 ]]; then to_install+=("${packages[$i]}") fi done if [[ ${#to_install[@]} -eq 0 ]]; then echo -e "${YELLOW}Не выбрано ни одного пакета для установки${NC}" read -p "Нажмите Enter для продолжения..." return fi echo -e "${GREEN}Установка выбранных пакетов:${NC}" printf ' %s\n' "${to_install[@]}" echo "" # Определяем менеджер пакетов detect_os_and_pkg_manager case $PKG_MANAGER in "pacman") echo "Использую pacman для установки..." echo "Команда: sudo pacman -S --noconfirm --needed ${to_install[@]}" echo "" read -p "Подтвердить установку? (y/N): " confirm if [[ "$confirm" =~ ^[Yy]$ ]]; then sudo pacman -S --noconfirm --needed "${to_install[@]}" local result=$? else echo "Установка отменена" return 1 fi ;; "apt-get") echo "Использую apt-get для установки..." sudo apt-get update sudo apt-get install -y "${to_install[@]}" local result=$? ;; "yum") echo "Использую yum для установки..." sudo yum install -y "${to_install[@]}" local result=$? ;; "dnf") echo "Использую dnf для установки..." sudo dnf install -y "${to_install[@]}" local result=$? ;; *) echo -e "${RED}Не найден поддерживаемый менеджер пакетов${NC}" return 1 ;; esac if [[ $result -eq 0 ]]; then log_message "INFO" "Установлено пакетов: ${#to_install[@]}" echo -e "${GREEN}✓${NC} Установка завершена успешно!" else log_message "ERROR" "Ошибка при установке пакетов" echo -e "${RED}✗${NC} Ошибка при установке" fi read -p "Нажмите Enter для продолжения..." return $result } # ============================================================================= # Функция удаления выбранных пакетов # ============================================================================= remove_selected_packages() { local packages=("${@:1:$#/2}") local selected=("${@:$((($#/2)+1))}") local to_remove=() for i in "${!selected[@]}"; do if [[ ${selected[$i]} -eq 1 ]]; then to_remove+=("${packages[$i]}") fi done if [[ ${#to_remove[@]} -eq 0 ]]; then echo -e "${YELLOW}Не выбрано ни одного пакета для удаления${NC}" read -p "Нажмите Enter для продолжения..." return fi echo -e "${RED}Удаление выбранных пакетов:${NC}" printf ' %s\n' "${to_remove[@]}" echo "" # Запрос подтверждения read -p "Вы уверены, что хотите удалить эти пакеты? (y/N): " confirm if [[ ! "$confirm" =~ ^[Yy]$ ]]; then echo "Удаление отменено" read -p "Нажмите Enter для продолжения..." return fi # Определяем менеджер пакетов detect_os_and_pkg_manager case $PKG_MANAGER in "pacman") echo "Использую pacman для удаления..." # Для pacman также можно удалить зависимости echo "Опции удаления:" echo " 1. Удалить только выбранные пакеты" echo " 2. Удалить с ненужными зависимостями (pacman -Rs)" read -p "Выберите опцию (1/2): " remove_option if [[ "$remove_option" == "2" ]]; then sudo pacman -Rs --noconfirm "${to_remove[@]}" else sudo pacman -R --noconfirm "${to_remove[@]}" fi local result=$? ;; "apt-get") echo "Использую apt-get для удаления..." sudo apt-get remove -y "${to_remove[@]}" local result=$? ;; "yum") echo "Использую yum для удаления..." sudo yum remove -y "${to_remove[@]}" local result=$? ;; "dnf") echo "Использую dnf для удаления..." sudo dnf remove -y "${to_remove[@]}" local result=$? ;; *) echo -e "${RED}Не найден поддерживаемый менеджер пакетов${NC}" return 1 ;; esac if [[ $result -eq 0 ]]; then log_message "INFO" "Удалено пакетов: ${#to_remove[@]}" echo -e "${GREEN}✓${NC} Удаление завершено успешно!" else log_message "ERROR" "Ошибка при удалении пакетов" echo -e "${RED}✗${NC} Ошибка при удалении" fi read -p "Нажмите Enter для продолжения..." return $result } # ============================================================================= # ФУНКЦИЯ 4: Массовая установка пакетов из списков с зависимостями # ============================================================================= bulk_install_from_lists() { log_message "INFO" "Запуск массовой установки из списков..." # Сканируем списки в текущей директории scan_for_pkg_lists if [[ ! -f "$TEMP_DIR/found_lists.tmp" ]]; then log_message "ERROR" "Нет списков для установки" echo -e "${RED}Списки пакетов не найдены${NC}" read -p "Нажмите Enter для продолжения..." return 1 fi # Читаем найденные списки local lists=() mapfile -t lists < "$TEMP_DIR/found_lists.tmp" 2>/dev/null if [[ ${#lists[@]} -eq 0 ]]; then echo -e "${RED}Нет доступных списков${NC}" return 1 fi # Предлагаем выбрать список echo -e "${GREEN}Выберите список для установки:${NC}" for i in "${!lists[@]}"; do echo " [$((i+1))] ${lists[$i]}" done echo " [A] Установить из всех списков" echo " [C] Отмена" read -p "Ваш выбор (1-${#lists[@]}, A, C): " choice local selected_lists=() case $choice in [Aa]) selected_lists=("${lists[@]}") echo "Установка из ВСЕХ списков..." ;; [Cc]) echo "Отмена" return 0 ;; *) if [[ $choice -ge 1 ]] && [[ $choice -le ${#lists[@]} ]]; then selected_lists=("${lists[$((choice-1))]}") echo "Установка из списка: ${selected_lists[0]}" else echo "Неверный выбор" return 1 fi ;; esac # Собираем все пакеты из выбранных списков local all_packages=() for list in "${selected_lists[@]}"; do if [[ -f "$list" ]]; then log_message "INFO" "Чтение списка: $list" while IFS= read -r pkg || [[ -n "$pkg" ]]; do # Пропускаем комментарии и пустые строки [[ -z "$pkg" ]] && continue [[ "$pkg" =~ ^#.* ]] && continue [[ "$pkg" =~ ^//.* ]] && continue # Удаляем лишние пробелы pkg=$(echo "$pkg" | xargs) all_packages+=("$pkg") done < "$list" fi done if [[ ${#all_packages[@]} -eq 0 ]]; then log_message "ERROR" "Не найдено пакетов для установки" echo -e "${RED}Не найдено пакетов в выбранных списках${NC}" read -p "Нажмите Enter для продолжения..." return 1 fi # Удаляем дубликаты local unique_packages=($(printf "%s\n" "${all_packages[@]}" | sort -u)) echo -e "${GREEN}Найдено уникальных пакетов: ${#unique_packages[@]}${NC}" echo "Первые 10 пакетов:" printf ' %s\n' "${unique_packages[@]:0:10}" if [[ ${#unique_packages[@]} -gt 10 ]]; then echo " ... и еще $(( ${#unique_packages[@]} - 10 ))" fi # Запрос подтверждения echo "" read -p "Продолжить установку? (y/N): " confirm if [[ ! "$confirm" =~ ^[Yy]$ ]]; then echo "Установка отменена" return 0 fi # УСТАНОВКА С ЗАВИСИМОСТЯМИ log_message "INFO" "Начало установки ${#unique_packages[@]} пакетов" # Определяем менеджер пакетов detect_os_and_pkg_manager case $PKG_MANAGER in "pacman") echo "Использую pacman для установки с зависимостями..." echo "Команда: sudo pacman -S --noconfirm --needed ${unique_packages[@]}" echo "" # Проверяем доступность пакетов в репозиториях echo "Проверка доступности пакетов..." for pkg in "${unique_packages[@]:0:5}"; do # Проверяем только первые 5 if pacman -Ss "^${pkg}$" &>/dev/null; then echo " ✓ $pkg доступен" else echo " ⚠ $pkg не найден в репозиториях" fi done echo "" read -p "Начать установку? (y/N): " final_confirm if [[ "$final_confirm" =~ ^[Yy]$ ]]; then sudo pacman -S --noconfirm --needed "${unique_packages[@]}" local result=$? else echo "Установка отменена" return 1 fi ;; "apt-get") echo "Использую apt-get для установки с зависимостями..." sudo apt-get update sudo apt-get install -y "${unique_packages[@]}" local result=$? ;; "yum") echo "Использую yum для установки с зависимостями..." sudo yum install -y "${unique_packages[@]}" local result=$? ;; "dnf") echo "Использую dnf для установки с зависимостями..." sudo dnf install -y "${unique_packages[@]}" local result=$? ;; *) log_message "ERROR" "Не найден поддерживаемый менеджер пакетов" echo -e "${RED}Не поддерживаемая система${NC}" return 1 ;; esac if [[ $result -eq 0 ]]; then log_message "INFO" "Массовая установка завершена успешно" echo -e "${GREEN}✓${NC} Установка завершена успешно!" else log_message "ERROR" "Массовая установка завершилась с ошибкой" echo -e "${RED}✗${NC} Установка завершилась с ошибкой" echo "Код ошибки: $result" fi read -p "Нажмите Enter для продолжения..." return $result } # ============================================================================= # ГЛАВНОЕ МЕНЮ # ============================================================================= main_menu() { # Определяем ОС при запуске detect_os_and_pkg_manager while true; do clear echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} 👽ALIIPRO👽 - МЕНЕДЖЕР ПАКЕТОВ ${NC}" echo -e "${BLUE}========================================${NC}" echo "" echo -e "${YELLOW}Информация о системе:${NC}" echo " • ОС: $OS_NAME" echo " • Менеджер пакетов: $PKG_MANAGER" echo " • Текущий список: $PKG_LIST_FILE" echo "" echo -e "${GREEN}1.${NC} Сканировать и создать чистый список пакетов" echo -e "${GREEN}2.${NC} Поиск списков пакетов в директории" echo -e "${GREEN}3.${NC} Интерактивное меню установки/удаления" echo -e "${GREEN}4.${NC} Массовая установка из списков с зависимостями" echo -e "${GREEN}5.${NC} Показать лог операций" echo -e "${GREEN}6.${NC} Очистить временные файлы" echo -e "${GREEN}7.${NC} Проверить систему" echo -e "${RED}0.${NC} Выход" echo "" read -p "Выберите действие (0-7): " choice case $choice in 1) scan_and_create_pkg_list read -p "Нажмите Enter для продолжения..." ;; 2) scan_for_pkg_lists read -p "Нажмите Enter для продолжения..." ;; 3) show_interactive_menu ;; 4) bulk_install_from_lists ;; 5) echo -e "${BLUE}=== ПОСЛЕДНИЕ ЗАПИСИ ЛОГА ===${NC}" if [[ -f "$LOG_FILE" ]]; then tail -30 "$LOG_FILE" echo "" echo -e "${YELLOW}Полный лог: $LOG_FILE${NC}" else echo "Лог файл не найден" fi read -p "Нажмите Enter для продолжения..." ;; 6) rm -rf "$TEMP_DIR" 2>/dev/null rm -f "$OS_DETECT_FILE" 2>/dev/null echo "Временные файлы очищены" read -p "Нажмите Enter для продолжения..." ;; 7) echo -e "${BLUE}=== ПРОВЕРКА СИСТЕМЫ ===${NC}" detect_os_and_pkg_manager echo "• ОС: $OS_NAME" echo "• ID: $OS_ID" echo "• Менеджер пакетов: $PKG_MANAGER" echo "• Пользователь: $(whoami)" echo "• Директория: $(pwd)" echo "" # Проверяем наличие менеджера пакетов if command -v "$PKG_MANAGER" &> /dev/null; then echo -e "${GREEN}✓ $PKG_MANAGER доступен${NC}" else echo -e "${RED}✗ $PKG_MANAGER не найден${NC}" fi read -p "Нажмите Enter для продолжения..." ;; 0) echo "Выход..." exit 0 ;; *) echo "Неверный выбор" sleep 1 ;; esac done } # ============================================================================= # ИНИЦИАЛИЗАЦИЯ И ЗАПУСК # ============================================================================= # Создаем лог-файл touch "$LOG_FILE" 2>/dev/null || { echo "Не удалось создать лог-файл" LOG_FILE="/tmp/aliipro_pkg.log" touch "$LOG_FILE" } # Проверяем права администратора if [[ $EUID -eq 0 ]]; then echo -e "${RED}Внимание: Скрипт запущен от root. Будьте осторожны!${NC}" sleep 2 fi # Приветствие echo -e "${BLUE}👽ALIIPRO👽 - Менеджер пакетов v1.1${NC}" echo "Оптимизирован для Arch Linux и других дистрибутивов" echo "" # Запуск главного меню main_menu