Самоконтроль Astra Linux SE v.1.4 (20.03.2025). |
![]() |
2025 - Март | |||
20.03.2025 14:47 | |||
Несмотря на то, что Astra Linux Special Edition v.1.4 - кусок забагованного говна: на нём до сих пор реализуются достаточно серьезные вещи, включая военную тематику: из-за наличия СЗИ и сертификации ФСТЭК. Прибывшему стажёру была поставлена задача сроком на 2 года: написать ПО, подготавливающее ОС к установке Специального ПО. Стажёр задачу провалил с глубоким треском: сделано 0.5 из 12 модулей (ядро которого является полностью моим) за ~87% времени- без нормального тестирования (на реальном железе полезли баги - на этом было решено закончить этот цирк). Но можно показать парадигму модуля: проводить самоконтроль ОС - перед началом работ по её изменению под прикладные задачи.
- функция по работе с консолью: QStringList qslProcess_Run(const QString qsProcess, const bool bBig_Delay, const QStringList *qslPostRun_Inputs). Описывалась ранее; - самописный MessageBox с возможностью задерживать окно и выполнять кнопки по умолчанию самостоятельно: int iMessageBox(QString qsTitle_Message, QString qsMain_Message, int iIcon, int iMode, int iDefault_Button, int iTime, QString qsUnique_Button_Text). Лежит в полезных исходниках; - заплатка для исправления обновления QProgressBar: void vProgressBar(QProgressBar *qProgressBar, const int iValue). Состоящая из 2 строк: qProgressBar->setValue(iValue); QApplication::processEvents(); - в приложениях на Qt, в этой ОС, есть проблема отображения русских букв - решается добавлением в int main(int argc, char *argv[]). QTextCodec* codec = QTextCodec::codecForName("UTF8"); QTextCodec::setCodecForTr(codec); QTextCodec::setCodecForCStrings(codec); QTextCodec::setCodecForLocale(codec); Внешний вид модуля (многие вещи не работают, просто написаны текстом и подкрашены цветами rgb(175, 0, 0) и rgb(0, 175, 0)). Виртуальная машина: замечена разница в поведении виртуальной машины и реального ПК. Для работы одного из модулей СПО требуется в реалке 8ГБ RAM - но виртуалке минимумом становится 11ГБ: в СПО при 8ГБ перестаёт работать команда ping. Или проверка разрешения монитора прекрасно работает в виртуалке - но в реалке идут ошибки. Или в виртуалке всегда нет ядер (только сумма потоков процессора, считающихся за "ядро"), когда в реалке могут быть совершенно разные процессоры в этом плане. Чтобы проверить, на виртуальной ли машине запущена программа: обратиться к xrandr, проверить наличие "Virtual" в информации по монитору. xrandr возвращает 3 параметра для каждого разрешения - предполагаемая команда смены разрешения: "xrandr --output " + разрешение_параметр_0 + " --mode " + режим_параметр_2". Оценка количества мониторов и их разрешений: xrandr. При 1 мониторе искать вхождение " connected ". При 2 будет " connected primary " для первого монитора и " connected " для второго. xrandr также возвращает список разрешений. И тут важны системные требования к СПО (минимальное разрешение) и вариации реальных мониторов у системного блока: 1/2, включён/выключен, клон/расширение, одинаковые/разные текущие разрешения, имеется ли в списке одинаковое разрешение под системные требования. Версия ядра Linux: "uname -r". Текущая учётная запись: qslProcess_Run("who").first().split(" ").at(0). Проверка доступности root: - "sudo cat /etc/shadow"; - поиск в результате учётки "root"; - проверка в результате: .split(":").at(1) != "*") && (.split(":").at(1) != "!"; - бесценный стажёрский комментарий о баганутости Astra 1.4: "//По логике это сообщение никогда не должно возникнуть, но кто эту астру знает?..". Разблокировка root: просто выставить для неё пароль. QStringList qslArguments; qslArguments.append("12345678"); qslArguments.append("12345678");//2 раза, да. qDebug() << qslProcess_Run("sudo passwd root", false, &qslArguments); Частота процессора, количество ядер и потоков: "lscpu". Свободная RAM, свободный SWAP: "free", вхождения "Mem:" и "Swap:". Именно свободные: СПО требуется 40ГБ оперативной памяти в любом виде - и не ГБ меньше. Свободное место на разделах: "df". Наличие оптического привода (в системе называется вида Disk_Drive - дичь полная: должно быть Optical_Drive): - "sudo dmesg"; - вхождение "dvd-ram cd/rw" - не совсем говорит о читаемости DVD и возможности записи CD: DVD-RW будет отображаться так же. Но цель - достигается: CD пишет - системное требование СПО, DVD - необходим разработчику. Интерфейс сетевой карты: - "netstat -i"; - вхождение не "" и не "lo"; - "sudo cat /sys/class/net/" + вхождение + "/speed". Тестирование потоков: последовательно запустить while (true) в разных потоках - убедиться, что правильный процент реального процессора загружается. Фактически, это тестирование не только потоков, но и работы многопоточности в ОС и виртуалке, - а также, сколько потоков-ядер выделено виртуалке: вдруг 6 вместо 8. Проверка драйвера сетевой карты: в данной ОС не все сетевые карты работают - нужно точно быть уверенным, что драйвер установился. Настройки сети: в конкретном СПО определяются самостоятельно - в данном случае, проверка IP; а может потребоваться и проверка доменного имени. Проверка сетевого тракта, соединение с клиентом/сервером: ping. Самыми мелкими пакетами: выявить процент потерь. Самыми крупными пакетами (по памяти, максимум 64КБ): сотней проверить предварительную скорость, далее рассчитать количество стократное предварительной скорости - и 100с тестировать. Выбор при установке ОС: речь о меню "Выбор программного обеспечения" при установке ОС. Если системный администратор бухал в чёрную - он мог галки неправильно поставить - по установленным пакетам конкретной галки (и отсутствие нужных, и присутствие ненужных). Наличие сторонних приложений: экспериментальное составление списка запущенных системных процессов, регистрируемых самописным кодом на протяжение суток в настроенной ОС с СПО. Всё, что не входит в список, - считается вредоносным и должно быть показано уведомлением. Во время работы настройщика ОС, он должен сверяться с этим списком постоянно - равно как и отслеживать объём свободной RAM и занимаемого места на диске. Иначе после настройки ОС для установки СПО может тупо места не хватить. Для предполагаемого второго модуля, анализатора-установщика пакетов, были сделаны подготовительные работы: - сбор в одну папку всех необходимых для установки и работы СПО пакетов. Заранее известные пакеты выбирались в Менеджере пакетов Synaptic, он подхватывал все зависимые пакеты, выбиралась опция только загрузки пакетов - и весь этот ворох deb-файлов сохранялся в каком-то глубоком месте (поиском легко находится); - установка части пакетов из сделанного репозитория: код на питоне. import os FileDir = os.path.dirname(os.path.abspath(__file__)) os.system('sudo dpkg --no-act -i ' + FileDir + '/Packages/General/*.deb') os.system('sudo dpkg --no-act -i ' + FileDir + '/Packages/Client/*.deb') |
|||
Обновлено ( 22.03.2025 18:48 ) |