" title="Написать письмо">Написать письмо
Донаты на карту ВТБ:
2200 4002 2461 6363

Статистика

Пользователи : 1
Статьи : 2154
Просмотры материалов : 8066726
 
Самоконтроль Astra Linux SE v.1.4 (20.03.2025). Печать E-mail
2025 - Март
20.03.2025 14:47
Save & Share
Несмотря на то, что 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 )
 
 

Последние новости


©2008-2025. All Rights Reserved. Разработчик - " title="Сергей Белов">Сергей Белов. Материалы сайта предоставляются по принципу "как есть". Автор не несет никакой ответственности и не гарантирует отсутствие неправильных сведений и ошибок. Вся ответственность за использование материалов лежит полностью на читателях. Размещение материалов данного сайта на иных сайтах запрещено без указания активной ссылки на данный сайт-первоисточник (ГК РФ: ст.1259 п.1 + ст.1274 п.1-3).

Много статей не имеет срока устаревания. Есть смысл смотреть и 2011, и даже 2008 год. Политика сайта: написать статью, а потом обновлять ее много лет.
Рекламодателям! Перестаньте спамить мне на почту с предложениями о размещении рекламы на этом сайте. Я никогда спамером/рекламщиком не был и не буду!
Top.Mail.Ru