54 KiB
Описание
Программа postinstall предназначен для автоматизации различных задач по настройке и конфигурации системы после установки. Он предоставляет интерфейс для управления настройками сети, обновлениями системы, установкой программного обеспечения, настройкой SSH, изменением доменного имени и многими другими функциями.
Основные директории и файлы
postinstall/: Главная директория проекта.__init__.py: Инициализирует пакетpostinstall.logger.py: Определяет функции для ведения логов.__main__.py: Главный исполняемый скрипт, запускающий основные функции проекта.root.py: Сценарий для управления правами суперпользователя.option/: Поддиректория, содержащая скрипты для различных опций настройки и установки.
postinstall/init.py
Этот скрипт представляет собой основную точку входа для выполнения конфигурационных задач системы. Он использует библиотеку dialog для взаимодействия с пользователем через текстовые диалоговые окна и выполняет различные конфигурационные задачи, такие как обновление системы, настройка сети, добавление пользователей, установка пакетов и другие. Скрипт включает в себя функции для чтения и изменения системных конфигураций и резервного копирования.
Импортируемые модули и функции
os,subprocess,sys,signal: Стандартные модули Python для работы с операционной системой, выполнения команд и обработки сигналов.Dialogизdialog: Для создания текстовых диалоговых окон.check_rootизpostinstall.root: Проверка прав суперпользователя.- Модули из
postinstall.option:network: Настройка сетевых параметров.update: Обновление системы.add_user: Добавление пользователя.install_packages: Установка программ.ssh: Настройка SSH.hostname: Изменение имени хоста.shell: Выбор оболочки.database: Настройка базы данных.docker: Настройка Docker.
json: Для работы с JSON-данными.loggerизpostinstall.logger: Для ведения логов.
Константы
SSH_CONFIG_PATH: Путь к конфигурационному файлу SSH.HOSTNAME_FILE: Путь к файлу с именем хоста.AUTOSTART_FILE: Путь к файлу автозапуска.BACKUPS_FILE: Путь к файлу резервных копий.UFW_OPENSSH_CONFIG_PATH: Путь к конфигурации UFW для OpenSSH.
Классы и методы
MenuScreen
- Методы:
__init__(self): Инициализация меню, получение текущих значений конфигурации (SSH порт, имя хоста, автозапуск и т.д.).show_menu(self): Отображение главного меню и обработка выбора пользователя.set_temp_network(self, settings): Установка временных сетевых настроек.check_auto_start(self): Проверка состояния автозапуска.set_auto_start(self, enable: bool): Включение или отключение автозапуска.update_ssh_port(self, new_port): Обновление порта SSH.update_hostname(self, new_hostname): Обновление имени хоста.update_autostart(self, new_state): Обновление состояния автозапуска.
Функции
choose(option, menu)
- Описание: Обработка выбранной пользователем опции из меню.
- Аргументы:
option: Выбранная опция меню.menu: Объект классаMenuScreen.
- Возвращаемое значение:
False, если произошла ошибка или требуется завершение работы.
signal_handler(sig, frame)
- Описание: Обработчик сигналов для корректного завершения работы приложения.
- Аргументы:
sig: Сигнал.frame: Контекст сигнала.
main()
- Описание: Основная функция, которая запускает приложение, обрабатывает сигналы и отображает меню.
Примечания
- Скрипт требует прав суперпользователя для выполнения некоторых команд.
- Перед сохранением изменений в системных файлах скрипт делает резервные копии, что позволяет восстановить предыдущие состояния конфигураций при необходимости.
postinstall/logger.py
Модуль logger.py предназначен для настройки и управления логированием в приложении. Он обеспечивает запись логов в файл и добавление информации о текущем пользователе в каждый лог-запись.
Импортируемые модули
logging: Стандартный модуль для ведения логов в Python.getpass: Модуль для получения имени текущего пользователя.
Функции
setup_logger()
Настраивает логирование для приложения.
Возвращаемое значение:
logging.Logger- Настроенный экземпляр логирования.
Подробности:
-
Создание логов:
logger = logging.getLogger()- Устанавливается уровень логирования на
INFO.
-
Настройка формата:
- Формат лог-сообщений:
%(asctime)s - User: %(user)s - %(message)s%(asctime)s- Время записи.%(user)s- Имя пользователя, делавшего запись.%(message)s- Сообщение лога.
- Формат лог-сообщений:
-
Создание и настройка обработчика файла:
file_handler = logging.FileHandler("/var/log/postinstall.log")- Обработчик записывает логи в файл
/var/log/postinstall.log. - Форматтер применяет формат к записям.
-
Создание и применение фильтра:
UserFilter- Класс фильтра, добавляющий имя пользователя к каждой записи лога.- Фильтр используется для добавления пользовательской информации к записям.
-
Добавление обработчика и фильтра к логам:
- Обработчик и фильтр добавляются к логам.
Примечание:
- Файл журнала будет создан в
/var/log/.
Переменные
logger
- Настроенный экземпляр логгера, возвращаемый функцией
setup_logger().
postinstall/root.py
Модуль root.py предназначен для проверки, что скрипт запущен с правами суперпользователя (root). Это важно для обеспечения выполнения программы. Postinstall работает только с правами суперпользователя для обеспечения успешной работы всех модулей и функций.
Импортируемые модули
os: Модуль для взаимодействия с операционной системой.sys: Модуль для работы с параметрами и функциями интерпретатора Python.
Функции
check_root()
Проверяет, что скрипт запущен от имени суперпользователя.
Возвращаемое значение:
- Нет (в случае успеха) - Если скрипт запущен с правами суперпользователя, функция просто завершает выполнение без ошибок.
sys.exit(1)- Если скрипт не запущен с правами суперпользователя, функция завершает выполнение скрипта с кодом ошибки1.
Подробности:
-
Получение идентификатора пользователя:
os.geteuid()- Возвращает идентификатор эффективного пользователя текущего процесса.
-
Проверка прав:
- Если идентификатор эффективного пользователя не равен
0(что соответствует root), выводится сообщение об ошибке:"Запустите скрипт с правами суперпользователя". - Скрипт завершается с кодом ошибки
1с помощьюsys.exit(1).
- Если идентификатор эффективного пользователя не равен
option/add_user.py
Скрипт add_user.py предназначен для добавления нового пользователя в систему Linux через текстовый интерфейс. Также предоставляет возможность скрывать или показывать вводимый пароль и проверяет, существует ли уже пользователь в системе.
Импортируемые модули
subprocess: Для выполнения команд в командной строке и взаимодействия с процессами.dialog.Dialog: Для создания текстовых диалогов.pwd: Для проверки существования пользователя в системе.postinstall.logger: Для ведения логов, импортирован какlogger.
Функции
get_password_with_toggle(d, title)
Функция для ввода пароля с возможностью переключения видимости пароля (показ/скрытие).
Параметры:
d(Dialog): ОбъектDialog, используемый для создания диалоговых окон.title(str): Заголовок диалогового окна.
Процесс:
- Функция отображает диалоговое окно для ввода пароля с возможностью переключения между скрытым и открытым отображением пароля.
- Пользователь может нажать кнопку "Показать пароль" или "Скрыть пароль" для изменения состояния видимости пароля.
- Если пользователь нажимает "Отмена", функция возвращает
None. - Возвращает введённый пароль, если пользователь подтверждает ввод.
add_user()
Основная функция для добавления нового пользователя в систему.
Процесс:
-
Создание формы для ввода данных:
- Поля формы включают имя пользователя, полное имя, мобильный телефон, городской телефон и кабинет.
- После ввода данных в форму, проверяется, существует ли уже пользователь с таким именем.
-
Проверка существования пользователя:
- Используется модуль
pwdдля проверки существования пользователя. - Если пользователь уже существует, выводится сообщение об ошибке.
- Используется модуль
-
Запрос пароля:
- Используется
get_password_with_toggleдля ввода пароля с возможностью его показать/скрыть. - Пароль также проверяется на совпадение с подтверждением пароля.
- Используется
-
Запрос прав администратора:
- Диалоговое окно спрашивает, нужно ли сделать пользователя администратором.
-
Создание пользователя:
- Выполняется команда
useraddдля создания пользователя с указанными параметрами. - Устанавливается пароль для нового пользователя с помощью команды
passwd. - Если пользователь назначается администратором, добавляется в группу
sudo.
- Выполняется команда
-
Логирование и сообщение:
- Записывается информация о созданном пользователе в журнал.
- Отображается сообщение об успешном добавлении пользователя или об ошибке.
run_add_user()
Функция-обёртка для вызова функции add_user.
Запуск скрипта
При запуске скрипта напрямую (if __name__ == "__main__":), вызывается функция run_add_user, которая в свою очередь вызывает add_user.
Обработка ошибок
subprocess.CalledProcessError: Ловит ошибки выполнения команд в командной строке и записывает их в журнал.- Сообщения об ошибках также отображаются в диалоговом окне для пользователя.
option/autostart.py
Скрипт autostart.py отвечает за управление настройками автозапуска при следующем запуске системы. Скрипт использует файл в файловой системе для хранения состояния автозапуска.
Импортируемые модули
os: Для работы с файловой системой (проверка наличия файлов, создание и удаление файлов).dialog.Dialog: Для создания текстовых диалогов.postinstall.logger: Для ведения логов, импортирован какlogger.
Константы
AUTOSTART_FILE: Путь к файлу, который указывает на состояние автозапуска. Если файл существует, автозапуск отключен. Если файл отсутствует, автозапуск включен.
Классы и методы
Класс AutoStartScreen
Методы
-
__init__()Конструктор класса
AutoStartScreen. Инициализирует объектDialogдля создания текстовых диалогов. -
check_auto_start() -> boolПроверяет текущее состояние автозапуска. Возвращает
True, если автозапуск включен (файлAUTOSTART_FILEотсутствует), иFalse, если автозапуск отключен (файл присутствует). -
set_auto_start(enable: bool) -> NoneИзменяет состояние автозапуска в зависимости от значения
enable.- Если
enableравноTrue: Удаляет файлAUTOSTART_FILE, если он существует. Это включает автозапуск. - Если
enableравноFalse: Создаёт файлAUTOSTART_FILE, чтобы отключить автозапуск. В файл записывается комментарий.
В случае ошибок при удалении или создании файла записываются сообщения об ошибках в журнал.
- Если
-
show_screen()Отображает диалоговое окно для выбора действия по настройке автозапуска. Используется
checklistдля отображения опций и состояния текущего автозапуска.- Если пользователь выбирает опцию "Автозапуск при следующем запуске", состояние автозапуска изменяется в соответствии с выбором.
- После применения изменений отображается сообщение об успешном сохранении изменений.
- Если пользователь отменяет изменения, в журнал записывается информация об отмене.
Функция main()
Создаёт экземпляр AutoStartScreen и вызывает метод show_screen() для отображения диалогового окна с настройками автозапуска.
Запуск скрипта
При запуске скрипта напрямую (if __name__ == "__main__":), вызывается функция main, которая инициирует работу с настройками автозапуска.
option/install_packages.py
Скрипт install_packages.py предназначен для установки пакетов на систему Linux. Он предоставляет пользователю интерфейс для выбора базы данных и установки связанных с ней пакетов, а также возможности установки Webmin и дополнительных компонентов.
Импортируемые модули
subprocess: Для выполнения команд оболочки и обработки их вывода.dialog.Dialog: Для создания текстовых диалогов.
Функции
main()
Основная функция, которая управляет процессом установки:
- Создаёт объект
Dialogдля создания текстовых диалогов. - Отображает диалоговое окно для выбора базы данных (PostgreSQL или MariaDB).
- Если пользователь выбирает PostgreSQL или MariaDB, вызываются соответствующие функции для установки пакетов.
- Независимо от выбранной базы данных, предлагается установка Webmin.
- Если пользователь соглашается на установку Webmin, вызывается функция
install_webmin.
is_installed(package_name)
Проверяет, установлен ли пакет с именем package_name:
- Выполняет команду
dpkg-query -W -f=${Status} package_nameдля получения статуса пакета. - Если вывод команды содержит строку
'install ok installed', возвращаетTrue. - В случае ошибки возвращает
False.
run_command_with_log(dialog, command, title)
Запускает команду и выводит лог её выполнения в диалоговое окно:
- Создаёт процесс для выполнения команды с помощью
subprocess.Popen. - Читает стандартный вывод и стандартный ошибки процесса, собирая их в список
log_output. - Отображает результат в диалоговом окне с заголовком
title. - Возвращает
True, если команда выполнена успешно, иначеFalse.
install_package(dialog, package_name)
Устанавливает указанный пакет с выводом лога:
- Отображает сообщение о начале установки пакета.
- Обновляет список пакетов с помощью команды
apt-get update. - Устанавливает пакет с помощью
apt-get install -y package_name. - Отображает сообщение об успешной установке или ошибке.
install_postgresql(dialog)
Устанавливает PostgreSQL и связанный пакет Harlequin:
- Проверяет и устанавливает пакеты
postgresql-16,python3-harlequin, иpython3-harlequin-postgres, если они не установлены.
install_mariadb(dialog)
Устанавливает MariaDB:
- Проверяет и устанавливает пакеты
mariadb-serverиpython3-harlequin, если они не установлены.
install_webmin(dialog)
Устанавливает Webmin и связанные пакеты:
- Проверяет, установлен ли Webmin. Если нет, выполняет установку:
- Устанавливает Webmin и дополнительные пакеты (
postgresql-server-dev-16иcpanminus). - Разрешает порт
10000/tcpвufw(брандмауэр). - Устанавливает Perl-модули
DBIиDBD::Pgчерезcpanm. - Перезагружает Webmin.
- Устанавливает Webmin и дополнительные пакеты (
- Отображает сообщения о каждом шаге процесса установки.
Запуск скрипта
При запуске скрипта напрямую (if __name__ == "__main__":), вызывается функция main, которая инициирует процесс установки пакетов.
option/docker.py
Скрипт docker_config.py управляет установкой и удалением Docker и Portainer. Логирование выполняется через модуль logger из postinstall.logger.
Импортируемые модули
subprocess: Для выполнения команд оболочки и обработки их вывода.os: Для работы с файловой системой.re: Для работы с регулярными выражениями.shlex: Для безопасного разбора команд.abc,abstractmethod: Для создания абстрактных базовых классов и методов.Optional,List,Callable: Для аннотаций типов.Dialog: Для создания текстовых диалогов.logger: Для логирования.
Константы
REGISTRY_URL: URL Docker registry.REGISTRY_LOGIN: Логин для Docker registry.REGISTRY_PASSWORD: Пароль для Docker registry.DOCKER_COMPOSE_FILE_PATH: Путь к файлуdocker-compose.yml.
Классы и их методы
CommandExecutor
- Методы:
run_command(command: str, shell: bool = False, input_data: Optional[str] = None, ignore_errors: List[int] = []) -> subprocess.CompletedProcess: Выполняет команду и возвращает результат выполнения. Обрабатывает ошибки и логирует их.
SystemChecker
- Методы:
is_command_installed(command: str) -> bool: Проверяет, установлен ли командный инструмент.
ProgressGauge
- Методы:
__init__(self, dialog: Dialog, title: str, total_steps: int): Инициализирует объект с диалогом и настройками для отображения индикатора выполнения.update(self, step: int, message: str): Обновляет индикатор выполнения.__enter__(self): Запускает индикатор выполнения.__exit__(self, exc_type, exc_val, exc_tb): Останавливает индикатор выполнения.
DockerManager
- Методы:
install(progress_callback: Callable[[int, str], None]): Устанавливает Docker и Docker Compose.uninstall(progress_callback: Callable[[int, str], None]): Удаляет Docker и Docker Compose.login_to_registry(): Выполняет вход в Docker registry.
UFWManager
- Методы:
add_rule(port: str): Добавляет правило для открытия порта в UFW.remove_rule(port: str): Удаляет правило для порта в UFW.
PortainerManager
- Методы:
install(port: str, password: str, ip: str, progress_callback: Callable[[int, str], None]): Устанавливает Portainer с указанными параметрами.uninstall(progress_callback: Callable[[int, str], None]): Удаляет Portainer._generate_password_hash(password: str) -> str: Генерирует хеш пароля для Portainer._create_docker_compose_file(port: str, password_hash: str, ip: str): Создаёт файлdocker-compose.ymlдля Portainer.
InputValidator
- Методы:
validate(value: str, pattern: str) -> bool: Проверяет значение на соответствие регулярному выражению.
UIElement
- Методы:
__init__(self, dialog: Dialog): Инициализирует элемент пользовательского интерфейса.show(self): Абстрактный метод для отображения UI элемента.
Menu
- Методы:
show(self): Отображает меню для выбора действия (установка или удаление Docker).
YesNoUI
- Методы:
show(self, text: str): Отображает диалоговое окно с вопросом и возвращает ответ пользователя.
PasswordInput
- Методы:
show(self): Отображает диалоговое окно для ввода пароля и возвращает его, если пароль соответствует требованиям.
PortInput
- Методы:
show(self): Отображает диалоговое окно для ввода порта и возвращает его, если порт корректен.
IPInput
- Методы:
show(self): Отображает диалоговое окно для ввода IP-адреса и возвращает его, если IP корректен.
DockerConfigUI
- Методы:
__init__(self): Инициализирует UI для конфигурации Docker.run(self): Запускает основной цикл работы UI._handle_docker(self): Обрабатывает установку или удаление Docker.handle_portainer(self): Обрабатывает установку или удаление Portainer._install_portainer(self): Устанавливает Portainer с запросом необходимых данных у пользователя.
Запуск скрипта
При запуске скрипта напрямую вызывается функция run, которая создаёт объект DockerConfigUI и запускает его метод run, инициируя процесс конфигурации Docker и Portainer.
option/hostname.py
Скрипт change_hostname.py предназначен для изменения доменного имени (hostname) системы. Скрипт читает текущее доменное имя, позволяет пользователю ввести новое доменное имя, проверяет его валидность и применяет изменения.
Импортируемые модули
subprocess: Для выполнения команд оболочки.Dialog: Для создания текстовых диалогов.os: Для работы с файловой системой.
Константы
HOSTNAME_FILE: Путь к файлу, содержащему текущее доменное имя.HOSTS_FILE: Путь к файлуhosts, где также может быть указано доменное имя.
Функции и их назначения
get_current_hostname()
- Описание: Читает текущее доменное имя из файла
/etc/hostname. - Возвращаемое значение: Возвращает текущее доменное имя или
"localhost"в случае ошибки.
change_hostname()
- Описание: Отображает диалоговые окна для ввода нового доменного имени. Проверяет, совпадает ли новое имя с текущим, и если нет, проверяет его валидность. Запрашивает подтверждение изменения.
- Возвращаемое значение: Возвращает новое доменное имя, если изменения подтверждены, или
None, если изменения отменены или имя недопустимо.
is_valid_hostname(hostname)
- Описание: Проверяет, соответствует ли введённое доменное имя требованиям.
- Параметры:
hostname: Проверяемое доменное имя.
- Возвращаемое значение: Возвращает
True, если имя допустимо, иFalseв противном случае.
apply_hostname_change(new_hostname)
- Описание: Применяет изменение доменного имени, обновляя файлы
/etc/hostnameи/etc/hosts. - Параметры:
new_hostname: Новое доменное имя.
- Возвращаемое значение: Возвращает
True, если изменения применены успешно, иFalseв случае ошибки.
run_change_hostname()
- Описание: Вызывает функцию
change_hostnameи возвращает результат её выполнения. - Возвращаемое значение: Возвращает результат выполнения
change_hostname.
Основной блок выполнения
- При запуске скрипта напрямую вызывается функция
run_change_hostname(), которая запускает процесс изменения доменного имени. - Если новое доменное имя получено и изменения подтверждены, оно будет выведено на экран. В противном случае будет выведено сообщение об отмене изменения.
Логирование и ошибки
- Ошибки при чтении файлов или выполнении команд оболочки обрабатываются и выводятся пользователю через диалоговые окна.
- Успешное изменение доменного имени или отмена изменений также сообщаются пользователю через диалоговые окна.
option/network.py
Скрипт network.py предназначен для настройки сетевых интерфейсов в системе. Скрипт позволяет пользователю выбирать сетевой интерфейс и конфигурировать его для работы с DHCP, статическим IP или CIDR. После настройки, скрипт применяет изменения и обновляет конфигурационные файлы.
Импортируемые модули
subprocess: Для выполнения команд оболочки.ipaddress: Для работы с IP-адресами и сетями.Dialog: Для создания текстовых диалогов.
Класс NetworkConfig
Метод __init__(self)
- Описание: Инициализирует объект
NetworkConfig. Создает объектDialogи пустой словарь для хранения временных сетевых настроек.
Метод select_interface(self)
- Описание:
- Получает список доступных сетевых интерфейсов.
- Позволяет пользователю выбрать интерфейс из списка.
- Показывает текущие настройки выбранного интерфейса.
- Возвращаемое значение: Имя выбранного интерфейса или
None, если интерфейс не выбран.
Метод get_network_interfaces()
- Описание: Получает список доступных сетевых интерфейсов.
- Возвращаемое значение: Список имен интерфейсов или пустой список в случае ошибки.
Метод show_current_settings(self, interface)
- Описание:
- Получает текущие настройки для указанного интерфейса.
- Показывает информацию о типе настройки (DHCP или Static) и текущем IP-адресе.
- Возвращаемое значение: Нет.
Метод configure_dhcp(self, interface)
- Описание:
- Позволяет пользователю ввести настройки для DHCP (опционально DNS).
- Сохраняет настройки в временный словарь.
- Возвращаемое значение: Нет.
Метод configure_static(self, interface)
- Описание:
- Позволяет пользователю ввести настройки для статического IP (IP-адрес, маска подсети, шлюз и опционально DNS).
- Сохраняет настройки в временный словарь.
- Возвращаемое значение: Нет.
Метод configure_cidr(self, interface)
- Описание:
- Позволяет пользователю ввести CIDR, шлюз и опционально DNS.
- Распознает IP-адрес и маску из CIDR и сохраняет настройки в временный словарь.
- Возвращаемое значение: Нет.
Метод run(self)
- Описание:
- Позволяет пользователю выбрать интерфейс и действия для его настройки.
- Запускает соответствующие методы для настройки (DHCP, статический IP, CIDR).
- Возвращает словарь временных сетевых настроек.
- Возвращаемое значение: Словарь временных сетевых настроек.
Метод save_and_apply_network_settings(self)
- Описание:
- Сохраняет и применяет временные сетевые настройки.
- Обновляет файл конфигурации интерфейсов и файл DNS.
- Перезапускает сетевую службу.
- Возвращаемое значение:
Trueпри успешном применении настроек иFalseв случае ошибки.
Метод save_dhcp(self, interface, settings)
- Описание: Сохраняет настройки DHCP для указанного интерфейса в конфигурационный файл.
- Возвращаемое значение: Нет.
Метод save_static(self, interface, settings)
- Описание: Сохраняет статические настройки IP для указанного интерфейса в конфигурационный файл.
- Возвращаемое значение: Нет.
Метод update_interface_config(self, interface, interface_config)
- Описание: Обновляет конфигурационный файл
/etc/network/interfacesс учетом новых настроек интерфейса. - Возвращаемое значение: Нет.
Метод update_resolv_conf(self, dns)
- Описание: Обновляет файл
/etc/resolv.confс новым DNS-сервером. - Возвращаемое значение: Нет.
Основной блок выполнения
- При запуске скрипта напрямую создается объект
NetworkConfigи вызывается методrun(), который запускает процесс настройки сетевых интерфейсов.
Примечания
- Скрипт требует прав суперпользователя для внесения изменений в конфигурационные файлы и перезапуска сетевой службы.
- Для корректной работы необходимо наличие утилиты
dialogи доступа к командамipиsystemctl. - При использовании CIDR, маска подсети автоматически рассчитывается на основе IP-адреса и CIDR.
option/shell.py
Скрипт shell.py предназначен для изменения командной оболочки для пользователей системы. Скрипт позволяет выбирать между установкой zsh (или другой оболочки) и изменением оболочки для всех пользователей системы или для конкретных пользователей.
Импортируемые модули
subprocess: Для выполнения команд оболочки.Dialog: Для создания текстовых диалогов.pwd: Для получения информации о пользователях.os: Для проверки существования файлов и путей.loggerизpostinstall.logger: Для ведения логов.
Функции
Функция get_users()
- Описание: Получает список пользователей системы с UID >= 1000 и добавляет "root" в список, если его нет.
- Возвращаемое значение: Список имен пользователей.
Функция install_zsh()
- Описание:
- Обновляет список пакетов.
- Устанавливает
zsh.
- Возвращаемое значение:
Trueпри успешной установке иFalseв случае ошибки.
Функция change_shell()
- Описание: Основная функция для изменения оболочки.
- Создает объект
Dialog. - Получает список пользователей с помощью
get_users(). - Позволяет пользователю выбрать способ изменения оболочки (для всех пользователей или для конкретных).
- Позволяет выбрать новую оболочку (bash или zsh).
- Если выбран
zshи он не установлен, вызываетinstall_zsh()для его установки. - Применяет изменения: изменяет оболочку для всех или выбранных пользователей с помощью команды
chsh.
- Создает объект
- Возвращаемое значение: Нет.
Функция run_change_shell()
- Описание: Запускает функцию
change_shell(). - Возвращаемое значение: Нет.
Основной блок выполнения
- При запуске скрипта напрямую вызывается функция
run_change_shell(), которая запускает процесс изменения оболочки.
Примечания
- Установка
zshпроисходит только если выбранная оболочкаzshне установлена на системе. - Логи об ошибках и успешных действиях сохраняются с помощью объекта
logger.
option/ssh.py
Скрипт ssh.py предназначен для управления конфигурацией SSH-сервиса на системе. Он позволяет:
- Управлять состоянием службы SSH (запуск, остановка).
- Изменять порт SSH.
- Изменять метод аутентификации SSH.
Константы
SSH_CONFIG_PATH: Путь к конфигурационному файлу SSH (/etc/ssh/sshd_config).SSH_AUTH_CONFIG_PATH: Путь к файлу конфигурации аутентификации SSH (/etc/ssh/sshd_config.d/auth.conf).UFW_OPENSSH_CONFIG_PATH: Путь к файлу конфигурации UFW для OpenSSH (/etc/ufw/applications.d/openssh-server).
Класс SSHConfig
Методы
__init__(self)
- Описание: Инициализация класса. Создает объект
Dialogи получает текущие настройки порта и метода аутентификации SSH. - Возвращаемое значение: Нет.
get_sshd_status(self)
- Описание: Получает статус службы SSH.
- Возвращаемое значение: Строка, представляющая статус службы (
active,inactive, илиunknown).
toggle_sshd_service(self, action)
- Описание: Запускает или останавливает службу SSH в зависимости от переданного действия (
startилиstop). - Возвращаемое значение: Нет.
get_current_ssh_port(self)
- Описание: Получает текущий порт SSH из конфигурационного файла.
- Возвращаемое значение: Текущий порт SSH (или "22", если порт не найден).
change_ssh_port(self)
- Описание: Позволяет пользователю ввести новый порт SSH и подтверждает изменение.
- Возвращаемое значение: Нет.
get_current_auth_method(self)
- Описание: Получает текущий метод аутентификации SSH из конфигурационного файла.
- Возвращаемое значение: Строка, представляющая метод аутентификации (
"По ключу и паролю","Только по ключу", или"Только по паролю").
change_auth_method(self)
- Описание: Позволяет пользователю выбрать метод аутентификации SSH.
- Возвращаемое значение: Нет.
apply_changes(self)
- Описание: Применяет изменения порта и/или метода аутентификации, если они были сделаны.
- Возвращаемое значение: Нет.
main_menu(self)
- Описание: Основное меню, которое позволяет пользователю выбрать действие: включение/выключение службы SSH, изменение порта SSH, изменение метода аутентификации.
- Возвращаемое значение:
True, если были внесены изменения, иначеFalse.
Функция run_ssh_config()
- Описание: Создает экземпляр
SSHConfig, запускает основное меню и возвращает объект конфигурации и флаг, указывающий на наличие изменений. - Возвращаемое значение: Кортеж
(SSHConfig, changes_made).
Основной блок выполнения
- При запуске скрипта напрямую вызывается функция
run_ssh_config(). Она запускает основной процесс управления конфигурацией SSH и применяет изменения, если они были внесены.
Примечания
- Используются команды
sedиufwдля обновления конфигураций, а также перезапуск службы SSH для применения изменений. - Логи об ошибках и успешных действиях сохраняются с помощью модуля
logging.
option/update.py
Скрипт update.py предназначен для обновления системы. Он выполняет обновление списка пакетов и обновление установленных пакетов до последних доступных версий.
Функции
run_update()
-
Описание: Выполняет обновление системы. Запрашивает подтверждение у пользователя, выполняет команды обновления через
apt, и отображает процесс обновления с помощью индикатораgaugeбиблиотекиdialog. -
Шаги выполнения:
- Запрос подтверждения: Появляется диалоговое окно с запросом на подтверждение обновления системы. Если пользователь не подтверждает, функция завершает выполнение.
- Инициализация индикатора прогресса: Запускается индикатор прогресса с начальным значением 0%.
- Выполнение команд обновления:
- Выполняются команды
apt updateиapt upgrade -yс обновлением индикатора прогресса в зависимости от выполнения команд. - Вывод команд отображается в диалоговом окне.
- Если команда завершается с ошибкой, возникает исключение
subprocess.CalledProcessError, и выводится сообщение об ошибке.
- Выполняются команды
- Обработка ошибок:
- Если происходит ошибка при выполнении команды, логируется ошибка, и отображается сообщение об ошибке.
- Если возникает неожиданная ошибка, также логируется и отображается соответствующее сообщение.
- Завершение обновления: Обновление системы завершено, отображается сообщение об успешном завершении.
Основной блок выполнения
- При запуске скрипта напрямую вызывается функция
run_update().
option/database.py
Скрипт database.py предназначен для установки и настройки баз данных PostgreSQL и MariaDB, а также для установки Webmin и необходимых дополнительных пакетов.
Основные функции
-
Выбор базы данных для установки:
- Пользователь может выбрать установку PostgreSQL или MariaDB через диалоговое окно.
-
Установка PostgreSQL:
- Проверка и установка PostgreSQL и сопутствующих пакетов, включая
python3-harlequinиpython3-harlequin-postgres.
- Проверка и установка PostgreSQL и сопутствующих пакетов, включая
-
Установка MariaDB:
- Проверка и установка MariaDB и
python3-harlequin.
- Проверка и установка MariaDB и
-
Установка Webmin:
- Проверка и установка Webmin, разрешение порта 10000/tcp в ufw, установка модулей DBI и DBD::Pg через
cpanminus, и перезагрузка Webmin.
- Проверка и установка Webmin, разрешение порта 10000/tcp в ufw, установка модулей DBI и DBD::Pg через
Основные функции и методы
main()
Основная функция, которая запускает диалоговый интерфейс для выбора базы данных и выполнения соответствующих установок.
is_installed(package_name: str) -> bool
Проверяет, установлен ли указанный пакет.
Параметры:
package_name: Название пакета для проверки.
Возвращает:
True, если пакет установлен, иначеFalse.
run_command_with_log(dialog: Dialog, command: list[str], title: str) -> bool
Запускает указанную команду и отображает лог выполнения в диалоговом окне.
Параметры:
dialog: Экземпляр диалогового окна для отображения логов.command: Список команд и параметров для выполнения.title: Заголовок диалогового окна.
Возвращает:
True, если команда выполнена успешно, иначеFalse.
install_package(dialog: Dialog, package_name: str)
Устанавливает указанный пакет и отображает статус установки в диалоговом окне.
Параметры:
dialog: Экземпляр диалогового окна.package_name: Название пакета для установки.
install_postgresql(dialog: Dialog)
Устанавливает PostgreSQL и сопутствующие пакеты.
Параметры:
dialog: Экземпляр диалогового окна.
install_mariadb(dialog: Dialog)
Устанавливает MariaDB и python3-harlequin.
Параметры:
dialog: Экземпляр диалогового окна.
install_webmin(dialog: Dialog)
Устанавливает Webmin и выполняет дополнительные настройки, такие как разрешение порта в ufw, установка модулей через cpanminus, и перезагрузка Webmin.
Параметры:
dialog: Экземпляр диалогового окна.