2023-12-05 21:49:43 +09:00
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=admincsm,password=yacsmQAZ,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=admincsm,password=yacsmQAZ,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 " \n deb 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 " \n deb 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 " \n deb 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 " \n deb 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 " \n deb 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 " \n deb [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__ " :
2023-11-24 17:20:44 +09:00
main ( )