Старый postinstall
This commit is contained in:
commit
4337a3f94e
349 changed files with 21945 additions and 0 deletions
|
|
@ -0,0 +1,119 @@
|
|||
import subprocess
|
||||
from dialog import Dialog
|
||||
import os
|
||||
from postinstall.logger import logger
|
||||
|
||||
logging = logger
|
||||
|
||||
AVAILABLE_PACKAGES = [
|
||||
"neofetch",
|
||||
"webmin",
|
||||
"usermin",
|
||||
"cups",
|
||||
"wireguard",
|
||||
"wg-cmd",
|
||||
]
|
||||
|
||||
def check_sudo():
|
||||
return os.geteuid() == 0
|
||||
|
||||
def run_command_with_log(dialog, command, message):
|
||||
"""Run a command and log output, showing a message box on success."""
|
||||
try:
|
||||
subprocess.run(command, check=True, capture_output=True, text=True)
|
||||
logging.info(f"{message}: успешно выполнено.")
|
||||
return True
|
||||
except subprocess.CalledProcessError as e:
|
||||
logging.error(f"{message}: ошибка - {e}")
|
||||
dialog.msgbox(f"{message}: ошибка.\n{e}")
|
||||
return False
|
||||
|
||||
def install_packages():
|
||||
d = Dialog(dialog="dialog")
|
||||
|
||||
if not check_sudo():
|
||||
d.msgbox("Для установки пакетов необходимы права суперпользователя.")
|
||||
return
|
||||
|
||||
# Создаем список пакетов для выбора
|
||||
choices = [(package, "", False) for package in AVAILABLE_PACKAGES]
|
||||
|
||||
# Показываем checklist для выбора пакетов
|
||||
code, tags = d.checklist(
|
||||
"Выберите пакеты для установки:", choices=choices, title="Установка программ"
|
||||
)
|
||||
|
||||
if code != d.OK:
|
||||
return
|
||||
|
||||
if not tags:
|
||||
d.msgbox("Вы не выбрали ни одного пакета для установки.")
|
||||
return
|
||||
|
||||
# Подтверждение установки
|
||||
code = d.yesno(
|
||||
f"Вы уверены, что хотите установить следующие пакеты:\n{', '.join(tags)}?"
|
||||
)
|
||||
if code != d.OK:
|
||||
return
|
||||
|
||||
# Создаем gauge для отображения прогресса
|
||||
d.gauge_start("Установка пакетов...", percent=0)
|
||||
|
||||
try:
|
||||
# Обновление списка пакетов
|
||||
d.gauge_update(10, "Обновление списка пакетов...")
|
||||
subprocess.run(["apt", "update"], check=True, capture_output=True)
|
||||
|
||||
logging.info(f"Установка пакетов: {', '.join(tags)}")
|
||||
# Установка выбранных пакетов
|
||||
d.gauge_update(20, f"Установка пакетов: {', '.join(tags)}...")
|
||||
process = subprocess.Popen(
|
||||
["apt", "install", "-y"] + tags,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
universal_newlines=True,
|
||||
)
|
||||
|
||||
# Чтение вывода процесса и обновление gauge
|
||||
for i, line in enumerate(process.stdout):
|
||||
d.gauge_update(20 + (i % 70), line.strip())
|
||||
|
||||
process.wait()
|
||||
|
||||
if process.returncode != 0:
|
||||
error = process.stderr.read()
|
||||
raise subprocess.CalledProcessError(process.returncode, process.args, error)
|
||||
|
||||
# Проверяем, если вебмин был выбран для установки
|
||||
if "webmin" in tags:
|
||||
d.gauge_update(90, "Настройка Webmin...")
|
||||
# Установка cpanminus
|
||||
run_command_with_log(d, ['apt', 'install', '-y', 'cpanminus'], "Установка cpanminus")
|
||||
|
||||
|
||||
# Разрешение порта 10000/tcp в ufw
|
||||
if run_command_with_log(d, ['sudo', 'ufw', 'allow', '10000/tcp'], "Настройка Firewall"):
|
||||
d.msgbox("Порт 10000/tcp разрешен в ufw.")
|
||||
|
||||
|
||||
# Установка модулей DBI и DBD::Pg через cpanminus
|
||||
if run_command_with_log(d, ['cpanm', '--quit', 'DBI'], "Установка модуля DBI"):
|
||||
d.msgbox("Модуль DBI успешно установлен.")
|
||||
if run_command_with_log(d, ['cpanm', '--quit', 'DBD::Pg'], "Установка модуля DBD::Pg"):
|
||||
d.msgbox("Модуль DBD::Pg успешно установлен.")
|
||||
|
||||
# Перезагрузка Webmin
|
||||
if run_command_with_log(d, ['systemctl', 'reload', 'webmin'], "Перезагрузка Webmin"):
|
||||
d.msgbox("Webmin успешно перезагружен.")
|
||||
|
||||
d.gauge_update(100, "Установка завершена успешно!")
|
||||
d.gauge_stop()
|
||||
|
||||
except subprocess.CalledProcessError as e:
|
||||
logging.error(f"Ошибка при установке пакетов: {e}")
|
||||
d.gauge_stop()
|
||||
d.msgbox(f"Ошибка при установке пакетов: {e}")
|
||||
|
||||
def run_install_packages():
|
||||
install_packages()
|
||||
Loading…
Add table
Add a link
Reference in a new issue