57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
import subprocess
|
|
from dialog import Dialog
|
|
from postinstall.logger import logger
|
|
|
|
logging = logger
|
|
|
|
|
|
def run_update():
|
|
d = Dialog(dialog="dialog")
|
|
|
|
code = d.yesno("Вы действительно хотите обновить систему?", width=50)
|
|
if code != d.OK:
|
|
return
|
|
|
|
commands = [["apt", "update"], ["apt", "upgrade", "-y"]]
|
|
|
|
d.gauge_start("Обновление системы", percent=0)
|
|
|
|
try:
|
|
for i, command in enumerate(commands):
|
|
d.gauge_update(i * 50, f"Выполняется: {' '.join(command)}")
|
|
|
|
process = subprocess.Popen(
|
|
["sudo"] + command,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
universal_newlines=True,
|
|
)
|
|
|
|
while True:
|
|
line = process.stdout.readline()
|
|
if not line:
|
|
break
|
|
d.gauge_update(i * 50 + (50 if i == 1 else 25), line.strip())
|
|
|
|
process.wait()
|
|
|
|
if process.returncode != 0:
|
|
error = process.stderr.read()
|
|
raise subprocess.CalledProcessError(process.returncode, command, error)
|
|
|
|
d.gauge_update(100, "Обновление системы завершено успешно")
|
|
d.gauge_stop()
|
|
except subprocess.CalledProcessError as e:
|
|
logging.error(f"Ошибка при обновлении системы: {e}")
|
|
d.gauge_stop()
|
|
d.msgbox(f"Ошибка при обновлении системы: {e}")
|
|
except Exception as e:
|
|
logging.error(f"Неожиданная ошибка при обновлении системы: {e}")
|
|
d.gauge_stop()
|
|
d.msgbox(f"Неожиданная ошибка при обновлении системы: {e}")
|
|
|
|
d.msgbox("Обновление системы завершено", width=50)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
run_update()
|