Старый postinstall
This commit is contained in:
commit
4337a3f94e
349 changed files with 21945 additions and 0 deletions
|
|
@ -0,0 +1,134 @@
|
|||
import subprocess
|
||||
from dialog import Dialog
|
||||
|
||||
|
||||
def main():
|
||||
dialog = Dialog(dialog="dialog")
|
||||
|
||||
# Диалоговое окно с выбором базы данных
|
||||
code, choice = dialog.menu("Выберите базу данных для установки:",
|
||||
choices=[("PostgreSQL", "Установить PostgreSQL"),
|
||||
("MariaDB", "Установить MariaDB")])
|
||||
|
||||
if code == dialog.OK:
|
||||
dialog.msgbox(f"Вы выбрали: {choice}", title="Выбор подтверждён")
|
||||
if choice == "PostgreSQL":
|
||||
install_postgresql(dialog)
|
||||
elif choice == "MariaDB":
|
||||
install_mariadb(dialog)
|
||||
|
||||
# Независимо от выбранной базы данных, предложить установку Webmin
|
||||
if dialog.yesno("Установить Webmin?", yes_label="Да", no_label="Нет") == dialog.OK:
|
||||
install_webmin(dialog)
|
||||
else:
|
||||
dialog.msgbox("Выбор базы данных отменён", title="Отмена")
|
||||
|
||||
|
||||
def is_installed(package_name):
|
||||
"""Проверяет, установлен ли пакет"""
|
||||
try:
|
||||
result = subprocess.run(
|
||||
['dpkg-query', '-W', '-f=${Status}', package_name],
|
||||
check=True, capture_output=True, text=True
|
||||
)
|
||||
return 'install ok installed' in result.stdout
|
||||
except subprocess.CalledProcessError:
|
||||
return False
|
||||
|
||||
|
||||
def run_command_with_log(dialog, command, title):
|
||||
"""Запуск команды с выводом лога в диалоговое окно"""
|
||||
process = subprocess.Popen(
|
||||
command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
|
||||
)
|
||||
|
||||
log_output = []
|
||||
for line in iter(process.stdout.readline, ''):
|
||||
log_output.append(line.strip())
|
||||
|
||||
stderr_output = process.stderr.read().strip()
|
||||
if stderr_output:
|
||||
log_output.append(stderr_output)
|
||||
|
||||
process.stdout.close()
|
||||
process.stderr.close()
|
||||
process.wait()
|
||||
|
||||
dialog.msgbox("\n".join(log_output), title=title, height=20, width=60)
|
||||
return process.returncode == 0
|
||||
|
||||
|
||||
def install_package(dialog, package_name):
|
||||
"""Устанавливает указанный пакет с выводом лога"""
|
||||
dialog.infobox(f"Начало установки {package_name}...")
|
||||
|
||||
if not run_command_with_log(dialog, ['apt-get', 'update'], "Обновление пакетов"):
|
||||
dialog.msgbox(f"Ошибка при обновлении пакетов для {package_name}.")
|
||||
return
|
||||
|
||||
if not run_command_with_log(dialog, ['apt-get', 'install', '-y', package_name], f"Установка {package_name}"):
|
||||
dialog.msgbox(f"Ошибка при установке {package_name}.")
|
||||
return
|
||||
|
||||
dialog.msgbox(f"{package_name} успешно установлен.")
|
||||
|
||||
|
||||
def install_postgresql(dialog):
|
||||
"""Установка PostgreSQL и Harlequin"""
|
||||
if not is_installed('postgresql-16'):
|
||||
install_package(dialog, 'postgresql-16')
|
||||
else:
|
||||
dialog.msgbox("PostgreSQL уже установлен.")
|
||||
|
||||
if not is_installed('python3-harlequin'):
|
||||
install_package(dialog, 'python3-harlequin')
|
||||
else:
|
||||
dialog.msgbox("python3-harlequin уже установлен.")
|
||||
|
||||
if not is_installed('python3-harlequin-postgres'):
|
||||
install_package(dialog, 'python3-harlequin-postgres')
|
||||
else:
|
||||
dialog.msgbox("python3-harlequin-postgres уже установлен.")
|
||||
|
||||
|
||||
def install_mariadb(dialog):
|
||||
"""Установка MariaDB"""
|
||||
if not is_installed('mariadb-server'):
|
||||
install_package(dialog, 'mariadb-server')
|
||||
else:
|
||||
dialog.msgbox("MariaDB уже установлена.")
|
||||
|
||||
if not is_installed('python3-harlequin'):
|
||||
install_package(dialog, 'python3-harlequin')
|
||||
else:
|
||||
dialog.msgbox("python3-harlequin уже установлен.")
|
||||
|
||||
|
||||
def install_webmin(dialog):
|
||||
"""Установка Webmin и дополнительных пакетов"""
|
||||
if not is_installed('webmin'):
|
||||
install_package(dialog, 'webmin')
|
||||
|
||||
# Установка cpanminus
|
||||
install_package(dialog, 'postgresql-server-dev-16')
|
||||
install_package(dialog, 'cpanminus')
|
||||
|
||||
# Разрешение порта 10000/tcp в ufw
|
||||
if run_command_with_log(dialog, ['sudo', 'ufw', 'allow', '10000/tcp'], "Настройка Firewall"):
|
||||
dialog.msgbox("Порт 10000/tcp разрешен в ufw.")
|
||||
|
||||
# Установка модулей DBI и DBD::Pg через cpanminus
|
||||
if run_command_with_log(dialog, ['cpanm', '--quit', 'DBI'], "Установка модуля DBI"):
|
||||
dialog.msgbox("Модуль DBI успешно установлен.")
|
||||
if run_command_with_log(dialog, ['cpanm', '--quit', 'DBD::Pg'], "Установка модуля DBD::Pg"):
|
||||
dialog.msgbox("Модуль DBD::Pg успешно установлен.")
|
||||
|
||||
# Перезагрузка Webmin
|
||||
if run_command_with_log(dialog, ['systemctl', 'reload', 'webmin'], "Перезагрузка Webmin"):
|
||||
dialog.msgbox("Webmin успешно перезагружен.")
|
||||
else:
|
||||
dialog.msgbox("Webmin уже установлен.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue