install-soft-on-Astra-linux/install-ce.py

296 lines
18 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import subprocess, os
import sys, time
#from colorama import Fore, Style
#вывод на экран меню работы программы
def display_menu():
ml_text = """
\n
************** МЕНЮ: **************************
0. Инициализация свежей системы и ее обновление.
1. Установить SNAP и SNAP-STORE (стараемся не использовать)
2. Установить FLATPAK и его родное GUI.
3. Установка базового набора пакетов (сеть).
4. Установка Крипто-ПРО и сопуствующих дополнений.
5. Прописка в профиль пользователя сетевых папок (смертным)
6. Прописка в профиль пользователя сетевых папок (избранным)
C. Выполнение произвольной команды bash/sh с отображением вывода.
Q. Завершение работы программы
"""
print(ml_text)
#запуск любой консольной bash команды из скрипта Python
def execute_command(command):
result = subprocess.run(command, shell=True, check=True, stdout=subprocess.PIPE, universal_newlines=True)
return result.stdout
#имитация живого ввода текста при выводе его на печать
def live_print(text):
for text_symbol in text:
#Fore.GREEN
sys.stdout.write(text_symbol)
sys.stdout.flush()
time.sleep(0.03) # Задержка между символами
print() # Переход на новую строку после завершения печати
#Style.RESET_ALL
#подключение в папку рута, папки ArmInstall
def mount_ArmInstall():
if os.path.exists('~/ArmInstall'):
live_print("Тэкс... папка ArmInstall у нас есть... \n")
#примонтировать в нее сетевую шару smb://nas/distributiv/ArmAstraInstall/base
live_print("Примонтируем в нее сетевую заначку... \n")
execute_command('mount -t cifs //192.168.2.4/distributiv/ArmAstraInstall ~/ArmInstall -o username=DomainAdmin,password=PasswordAdmin,domain=YACSM,iocharset=utf8,file_mode=0777,dir_mode=0777,vers=1.0 --verbose')
live_print("Готово. \n")
else:
live_print("О! Да у нас тут самое начало пути... \n")
live_print("Создадим папку ArmInstall в папке Бати. \n")
#создаем в папке рута папку ArmInstall
os.mkdir('~/ArmInstall')
live_print("Готово. \n")
live_print("Теперь примонтируем в нее сетевую заначку с пакетами. \n")
# монтируем в нее сетевую шару с пакетами
execute_command('mount -t cifs //192.168.2.4/distributiv/ArmAstraInstall ~/ArmInstall -o username=DomainAdmin,password=PasswordAdmin,domain=YACSM,iocharset=utf8,file_mode=0777,dir_mode=0777,vers=1.0 --verbose')
live_print("Готов и этот шаг. \n")
#отключение папки ArmInstall
def umount_ArmInstall():
if os.path.exists('~/ArmInstall'):
execute_command('umount ~/ArmInstall')
execute_command('rm -r ~/ArmInstall')
#обновление системы до последнего актуального состояния
def update_system():
#очищаем файл репозиториев
os.system('> /etc/apt/sources.list')
#вносим в файл репозиториев только то, что нам нужно
os.system('echo -e "\n# Заблокировать cd и разблокировать остальные, а так же дописать:" > /etc/apt/sources.list')
os.system('echo -e "\n# Astra Linux repository description https://wiki.astralinux.ru/x/0oLiC" > /etc/apt/sources.list')
os.system('echo -e "\n "> /etc/apt/sources.list')
os.system('echo -e "\n#deb cdrom:[OS Astra Linux 1.7.1 1.7_x86-64 DVD ]/ 1.7_x86-64 contrib main non-free" > /etc/apt/sources.list')
os.system('echo -e "\n# Основной репозиторий" > /etc/apt/sources.list')
os.system('echo -e "\ndeb http://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main/ 1.7_x86-64 main contrib non-free " > /etc/apt/sources.list')
os.system('echo -e "\n "> /etc/apt/sources.list')
os.system('echo -e "\n# Оперативные обновления основного репозитория" > /etc/apt/sources.list')
os.system('echo -e "\ndeb http://download.astralinux.ru/astra/stable/1.7_x86-64/repository-update/ 1.7_x86-64 main contrib non-free" > /etc/apt/sources.list')
os.system('echo -e "\n " > /etc/apt/sources.list')
os.system('echo -e "\n# Базовый репозиторий" > /etc/apt/sources.list')
os.system('echo -e "\ndeb http://download.astralinux.ru/astra/stable/1.7_x86-64/repository-base/ 1.7_x86-64 main contrib non-free" > /etc/apt/sources.list')
os.system('echo -e "\n " > /etc/apt/sources.list')
os.system('echo -e "\n# Расширенный репозиторий" > /etc/apt/sources.list')
os.system('echo -e "\ndeb http://download.astralinux.ru/astra/stable/1.7_x86-64/repository-extended/ 1.7_x86-64 main contrib non-free" > /etc/apt/sources.list')
os.system('echo -e "\n " > /etc/apt/sources.list')
os.system('echo -e "\n# Расширенный репозиторий (компонент astra-ce) - используется при необходимости в установке дополнительного ПО, которое не прошло сертификацию!" > /etc/apt/sources.list')
os.system('echo -e "\ndeb http://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-extended/ 1.7_x86-64 astra-ce" > /etc/apt/sources.list')
#execute_command('> /etc/apt/sources.list')
os.system('apt-get install -y apt-transport-https ca-certificates && apt-get update && apt-get dist-upgrade && apt-get full-upgrade && astra-update -r -A')
#обновим и установим пакет libc6*
os.system('apt-get -t install -y libc6')
#Установим свежие драйвера под интеловские чипы
os.system('apt-get install -y intel-microcode')
live_print("Система обновлена. Сейчас делаем перезагрузку для применения результатов. \n")
live_print("После перезагрузки запустите скрипт заново и продолжите установку. \n")
os.system('reboot')
#Установка SNAP в Астра линукс
def install_snap():
#добавим в список дистрибутивов новый дебиановкий репозиторий
execute_command('echo -e "\ndeb [trusted=yes] https://mirror.yandex.ru/debian/ buster main contrib non-free" >> /etc/apt/sources.list')
execute_command('gpg --keyserver keyserver.ubuntu.com --recv-key 648ACFD622F3D138')
execute_command('gpg -a --export 648ACFD622F3D138 | sudo apt-key add - ')
execute_command('gpg --keyserver keyserver.ubuntu.com --recv-key 0E98404D386FA1D9')
execute_command('gpg -a --export 0E98404D386FA1D9 | sudo apt-key add - ')
execute_command('gpg --keyserver keyserver.ubuntu.com --recv-key DCC9EFBF77E11517')
execute_command('gpg -a --export DCC9EFBF77E11517 | sudo apt-key add - ')
#обновим списки пакетов
execute_command('apt update')
#теперь установим snap
execute_command('apt install snapd')
execute_command('sudo ln -s /var/lib/snapd/snap /snap')
execute_command('systemctl enable --now snapd')
#обновим core у обвязки snap
execute_command('snap refresh core')
execute_command('snap install core')
execute_command('snap install core snapd')
#следом установим snap-store
execute_command('snap install snap-store')
#установка FLATPAK в Астра линукс
def install_flatpak():
#установка flatpak в систему
execute_command('apt install -y flatpack')
#добавляем в систему репозиторий пакетов flatpak
execute_command('flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo')
execute_command('apt install -y plasma-discover-backend-flatpak')
#установка базового набора ПО для работы пользователей
def install_base_pack_soft():
print(" \n \n")
ml_text = """
Сейчас начнется установка базового набора пакетов.
Во время установки пакетов, настоятельно рекомендую отложить какие-либо действия на данном ПК.
Так же рекомендую НЕ производить никаких манипуляций в консоли Linux.
Как писали на экранах классики длинных установок: Откиньтесь на спинку кресла и наслаждайтесь любимым напитком,
пока мы делаем вашу жизнь лугче и лучше.
ПРОСЬБА: Дождаться завершения установки и вывода начального меню программы. \n
"""
live_print(ml_text)
#примонтируем папку с пакетами установки
mount_ArmInstall()
if os.path.exists('~/ArmInstall/base'):
# проверить установлены ли уже пакеты из списке и если нет, то ...
# установить набор пакетов который находится в этой папке
live_print("Ну что же, начинаем проверку системы и установку пакетов.... \n")
#MyChat
if execute_command('dpkg -l | grep mychatclient').strip() != None:
# вернулось пустое значение, значит ставим пакет
live_print("Устанавливаем MyChat... \n")
execute_command('dpkg -i ~/ArmInstall/base/mychatclient-8.14.deb')
live_print("MyChat установлен. \n")
else:
live_print("Пакет MyChat уже установлен, пропускаем... \n")
#OnlyOffice-desktopeditors
if execute_command('dpkg -l | grep OnlyOffice-desktopeditors').strip() != None:
# вернулось пустое значение, значит ставим пакет
live_print("Устанавливаем OnlyOffice... \n")
execute_command('dpkg -i ~/ArmInstall/base/onlyoffice-desktopeditors-amd64.deb')
live_print("OnlyOffice установлен. \n")
else:
live_print("Пакет OnlyOffice уже установлен, пропускаем... \n")
#RealVNCServer-5.0.4-amd64.deb
if execute_command('dpkg -l | grep realvnc-vnc-server').strip() != None:
# вернулось пустое значение, значит ставим пакет
live_print("Устанавливаем RealVNC Server... \n")
execute_command('dpkg -i ~/ArmInstall/base/RealVNCServer-5.0.4-amd64.deb')
execute_command('vnclicense -add B6BNH-A4ASK-VCEQC-6Z49E-PCT6A')
live_print("RealVNC Server установлен. \n")
execute_command('dpkg -i ~/ArmInstall/base/RealVNCViewer-5.0.4-amd64.deb')
else:
live_print("Пакет RealVNC Server уже установлен, пропускаем... \n")
#yandex-browser-corp
if execute_command('dpkg -l | grep yandex-browser-stable').strip() != None:
# вернулось пустое значение, значит ставим пакет
live_print("Устанавливаем Яндекс.Браузер... \n")
execute_command('dpkg -i ~/ArmInstall/base/yandex-browser-corp.deb')
live_print("Яндекс.Браузер установлен. \n")
else:
live_print("Пакет Яндекс.Браузер уже установлен, пропускаем... \n")
#1C-Thin-client
if execute_command('dpkg -l | grep 1c-enterprise-8.3.22.2106-thin-client').strip() != None:
# вернулось пустое значение, значит ставим пакет
live_print("Устанавливаем тонкого клиента 1С... \n")
execute_command('dpkg -i ~/ArmInstall/base/1c-thinclient-8.3.22.2106-amd64.deb')
live_print("Тонкий клиент 1С установлен. \n")
else:
live_print("Пакет тонкого клиента 1С уже установлен, пропускаем.... \n")
# теперь добавим чат и vncserver в автозагрузку
if os.path.exists('/home/admincsm/.config/autostart/mychatclient.desktop') == False :
live_print("Копируем ярлыки автозапуска чата и vnc в автозагрузку.... \n")
execute_command('cp -rT /root/ArmInstall/autostart /home/admincsm/.config/autostart/')
live_print("Автозагрузка прописана. \n")
else:
live_print("В автозагрузку добавлять ничего не надо. Все уже на месте. \n")
umount_ArmInstall()
#установка Крипто-ПРО 5 версии.
def install_cryptopro():
live_print("Приступаем к установке Крипто-ПРО 5.0 \n")
mount_ArmInstall()
execute_command('cd ~/ArmInstall/CryptoPro/cryptopro5-unpacked-amd64')
execute_command('./install_gui.sh')
live_print("Крипто-ПРО 5.0 установили. \n")
live_print("Теперь приступим к установке Cades-Plugin для работы в браузере. \n")
execute_command('cd ~/ArmInstall/CryptoPro/cades-plugin-amd64')
execute_command('dpkg -i cprocsp-pki-cades-64_2.0.14892-1_amd64.deb')
execute_command('dpkg -i cprocsp-pki-plugin-64_2.0.14892-1_amd64.deb')
live_print("Cades-Plugin для работы в браузере установлен. \n")
live_print("Теперь не забудь прописать лицензию в КриптоПРО 5 и перезагрузить ПК. \n")
umount_ArmInstall()
#
def main():
while True:
live_print("Привет! Добро пожаловать в программу упрощения жизни начинающего Linux админа. \n \n")
#если запущено не из под рута - шлем в лес!
if int(execute_command('id -u').strip()) != 0:
#print(execute_command('id -u'))
ml_text = """
Дружочек, для работы с этой программой тебе требуются права ROOT, которых сейчас у тебя нет.
Программа будет завершена, а тебе настоятельно советую или подтянуть знания,
или убрать свои кривые рученки и обратиться к тем, кому запускать программу можно. \n
"""
live_print(ml_text)
time.sleep(0.15)
live_print("А теперь все исчезнет, как по волшебству.... (ШУТКА!)")
live_print("Пока. \n \n")
break
#показываем меню выбора
display_menu()
choice = input("Выберите нужное действие (от 0.. до 4.. или Q и т.д.): \n")
if choice == "0":
update_system()
elif choice == "1":
#установим snap
install_snap()
elif choice == "2":
#установим flatpak
install_flatpak()
elif choice == "3":
#установка базового пакета софта
install_base_pack_soft()
elif choice == "4":
#устанавливаем Крипто-ПРО
install_cryptopro()
elif choice == "5":
print("Тут будет большая функция для прописки в fstab папок монтирования для простых пользователей.")
elif choice == "6":
print("Тут будет большая функция для прописки в fstab папок монтирования для избранных пользователей.")
elif choice == "C":
userCommand = input("Введите консольную команду bash/sh с нужными параметрами: \n")
result_execut_command = execute_command(userCommand)
print(result_execut_command)
elif choice == "Q":
print("До свидания!")
break
else:
print("Пожалуйста, выберите правильный пункт меню.")
if __name__ == "__main__":
main()