Создаю и проверяю пакет обновлений для Chimbalix — CUP-2481

Системы обновлений нужны для исправления ошибок и проблем в уже выпущенном софте. Однако в последнее время обновлениями повсеместно злоупотребляют.
13 декабря 2025, суббота 07:20
Hard-Workshop для раздела Блоги

Сейчас никого не удивить бесконечным потоком обновлений на компьютерах и смартфонах. Порой всё настолько плохо, что обновления устанавливаются против воли пользователя. В особо ужасных случаях система даже не уведомляет пользователя о том, что устанавливаются обновления (например, сервис unattended-upgrades Ubuntu).

Принудительный характер обновлений не только раздражает людей, но и буквально несёт опасность для операционной системы. Мало того, могут подсунуть что угодно без ведома и разрешения пользователя, так ещё это прямой путь к разнообразным поломкам, если во время установки произойдёт нештатная ситуация. Например, отключилось электричество в процессе скрытной установки обновлений. И такое вполне может привести к тому, что даже терминал невозможно будет запустить. Именно потому я презираю дистрибутивы вроде Ubuntu, способные принудительно устанавливать обновления, не информируя пользователя.

Автоматические обновления — это практические первое, что было отключено и убрано подальше в первых версиях дистрибутива Chimbalix. Одно дело — состоятельные операционные системы, над которыми работали профессионалы своего дела, например, Windows XP или Windows 7. Обновления доступны как в полностью управляемом Центре Обновлений, так и в виде автономных установочных пакетов, пригодных для использования на компьютерах без доступа к интернету.

Пользователь сам решает, устанавливать обновления автоматически или вручную, в том числе автономными установочными файлами.

   

Но в случае Linux, да и любых подобных операционных систем, ситуация кардинально меняется. Ведь основаны они на репозиториях со всеми вытекающими проблемами. Взяв первый попавшийся под руку Линукс под названием Xubuntu, мы сталкиваемся с фактом, что спустя 5 минут после получения доступа к интернету система что-то скачала из сети и что-то с этим сделала. Система чистая, ничего не настраивалось особо после установки. Что было загружено и сделано без разрешения и ведома пользователя?

                       

Так же в ловушку можно попасть, просто ковыряясь в настройках линуксоидной операционной системы. Случайный клик по кнопке Software Updater — и без разрешения пользователя будут обновлены списки репозиториев с пакетами. В этом практически все Линуксы. Мнение пользователя не спрашивают перед тем, как выполнять довольно серьёзные операции, но при этом обвиняют именно пользователей во всех проблемах с Линуксами и линуксоидным софтом.

           

Особенно злоупотребляют обновлениями производители разнообразного оборудования, вводящие искусственные ограничения с новыми версиями прошивки и запрет на возможность отката BIOS до предыдущей версии.

Особенно отличился Asus зловредными обновлениями для материнской платы M2N68-AM SE2. Данная системная плата когда-то была у меня лично, и я очень негодовал по тому факту, что Asus предоставила последний BIOS 1801, в описании которого была указана ложь. Ведь Asus не сказали ни слова про искусственное ограничение функциональности и введённый запрет на возможность прошивки предыдущей полнофункциональной версии BIOS 1409.

В реальности я получил только урезанный функционал по управлению вентилятором охлаждения процессора и запрет на смену версии BIOS. Вентилятор больше не управлялся никак и всегда сильно шумел, буквально издеваясь надо мной, пользователем компьютера. И с этой проблемой, похоже, я не один столкнулся. А теперь представьте, если бы у производителя была возможность принудительно устанавливать такие зловредные обновления без ведома и разрешения пользователя? Наверняка к этому стремятся уже давно.

Такой подход к меня, пользователя, крайне раздражает, а несостоятельных разработчиков поощряет злоупотреблять системой, делая софт кривым и ущербным. Зачем выпускать качественный и доработанный софт, когда можно просто выкидывать что есть, а потом уже исправлять косяки, набрасывая всё новые и новые обновления, бесконечно кривые и недоработанные? Да и про зловредные выпуски забывать не следует.

Хотя в дистрибутиве Chimbalix и отключены обновления по умолчанию, но каждый раз выпускать новую версию дистрибутива по любому чиху — тоже вариант плохой. А значит, нужно разработать собственную систему, ненавязчивую и контролируемую пользователем. Буду ли я делать свою систему обновлений на основе репозиториев? Однозначно нет! Ещё одного свинарника не хватало в пакетном менеджере!

Я не люблю танцевать с бубном, а также хочу сам управлять тем, что устанавливаю, а не полагаться на красивые обещания сомнительных разработчиков. Если обновление — мусор, значит, у него будет плохая репутация, и пользователи просто обойдут стороной.

Потому было решено разработать автономные и универсальные установочные пакеты для Chimbalix, насколько это возможно. В качестве примера был взят Installer-SH.

И нет, я не буду переделывать Installer-SH для установки системных файлов. Хотя это возможно, но смысла не имеет, так как ISH разработан с упором на установку программ в стандартный каталог PortSoft, а при установке системных обновлений нужно иметь полный доступ ко всему.

В итоге было решено разработать всё с нуля. Первым делом исправил и скомпилировал Xfwm4, собрав в Deb пакет. Была там проблема флуда сообщениями в файл xsession-errors, появившаяся после обновления Xfce. Так же собрал набор пакетов для обновления вечно кривой Mesa3D, ибо версия Mesa, с которой был собран Chimbalix 24.8, оказалась очень проблемной. Проблемная версия Mesa, к слову, и есть следствие ущербного подхода к обновлениям в Линуксах, когда разработчики просто выкидывают сырой хлам в репозитории, а о проблемах думают потом. И так по кругу.

Так же внёс правки в файл environment, чтобы никакая гадость из линуксоидных пакетных менеджеров не влезала впереди системной Java, установленной в /opt/java.

Так было дано начало для Chimbalix Update Package 2481 (CUP-2481).

Так как пакет является первым экспериментальным, я особо не забочусь о красоте. Сейчас важнее всего сформировать основу, которую буду развивать. Прямо как Installer-SH в своё время начинался.

           

Так же был разработан специальный файл с именем обновления, который включает информацию. Такие файлы будут храниться в каталоге /etc/chimbalix/updates, и это позволит разработчикам софта определять, какие обновления были установлены в системе пользователя.

Хотя функции для вывода информации ещё не полностью определены, как и набор переменных, хранящих информацию об обновлении. Но оно может так и остаться, если докажет свою состоятельность на практике.

Давайте проведём предварительный тест пакета в реальных условиях. Начинаем с неподходящего Chimbalix 24.2. И тут никаких проблем. Пакет просто ничего не сделал. Да, пакет у меня получился универсальным и поддерживает разные версии дистрибутива, но устанавливает только то, что подходит.

В дистрибутиве Chimbalix 24.5 обновление установилось частично. Правда, я забыл обновить архив с файлами и установилась старая версия одного файла. Как некоторые могли заметить, устанавливаю всё прямо с CD привода, то есть из места, где нет возможности записывать что-либо.

           

В дистрибутиве Chimbalix 24.8 всё установилось полностью.

                       

Сама концепция показала себя отлично. Просто перенёс пакет на нужный ПК и установил. Это уже можно выпустить и дать пользователям. Ведь задачу выполняет! Что ещё надо? Скажет типичный линуксоидный разработчик.

Но такой ущербный пакет обновлений я не стану выпускать. Там нет даже проверки целостности архива перед установкой. Да и сообщения должны меняться в зависимости от результатов. Пользователь должен просто запустить и комфортно установить без лишних проблем, а не танцевать с бубном, как принято в Линуксах.

Разумеется, лишать возможности потанцевать с бубном я никого не буду. Хотите руками? Распаковывайте архив с файлами и раскидывайте по нужным местам! Это тоже рабочий вариант, но многие не осилят такое линуксоидство. Потому и создаю специализированный установочный пакет. Буквально делаю то, что в Линуксах не осилили за 30 с лишним лет «развития». По крайней мере, я не видел ничего подобного.

Вот установочный пакет и переработан. Правда, у меня не было особо времени заниматься этим делом, но сойдёт для начала.

           

Проверяем вариант, когда пользователь не может предоставить root права для установки. И тут всё отработало, как положено.

                       

Основной процесс установки так же прошёл без проблем.

                                   

Теперь нарочно повредим архив с файлами. Функция базовой проверки целостности данных не позволила продолжить установку.

           

Осталось проверить CUP-2481 в сторонних дистрибутивах Linux. В дистрибутиве Xubuntu 24.04 дисководы не работают как положено, потому невозможно проверить установочный пакет в данном кривом Линуксе. В дистрибутиве Manjaro 24 установочный пакет нормально запустился, но предупреждает пользователя, чтобы тот отказался от установки. Впрочем, даже если пользователь и попытается установить, несмотря на предупреждения, скорее всего, ничего не выйдет, так как помимо проверки имени дистрибутива, есть и проверка версии.

                                   

Немного ещё поправил оформление. Вроде бы пакет готов для выпуска, разве нет? Вообще, есть одна потенциальная проблема. Что, если пользователь установит какое-то будущее обновление, которое будет перекрывать старое? Я ведь не могу заглянуть в будущее, чтобы при выпуске текущего пакета предусмотреть будущие.

Однако я могу заложить основу для обратной совместимости, чтобы старый пакет мог определить, уместен ли он вообще в системе или какой-то другой пакет уже заменил его. Пусть это будет примитивно и просто, а так же потребует грамотной подготовки, но оно должно работать.

Идея состоит в том, чтобы произвольные пакеты обновлений могли вносить конкретные имена в конкретный файл. Это позволит произвольному пакету просмотреть данный файл и сверить список со своим именем. Хотя функция сверки имён пока ещё не показана, но функция добавления работает, и она не добавляет дважды одно и то же имя.

Это даёт возможность внести в список блокировки конкретные имена обновлений, работающих по моей системе. Установочный пакет будет предупреждать пользователя о том, что данное обновление не следует устанавливать, так как оно уже внесено в список заблокированных другим пакетом.

           

Но чего-то ещё не хватает. Точно! Нужно проверить уже установленные обновления! Теперь установочный пакет проверяет файлы в каталоге /etc/chimbalix/updates и если находит совпадение, то предупреждает пользователя о том, что данное обновление уже установлено.

Осталось проработать тихий режим установки.

Теперь обновление может быть установлено в тихом режиме. Ну, или почти в тихом. Всё же некоторую минимальную информацию оно выводит.

           

Были добавлены проверки имени операционной системы, списка блокировки, установленных обновлений, повреждений архива, отсутствия root прав, ошибок работы с временным каталогом.

Осталось немного подчесать мелочи и можно выпускать творение.

https://github.com/Shedou/Chimbalix/releases/tag/CUP-2481

Конечно, исправлений получилось весьма мало за длительный период разработки, ввиду нехватки свободного времени. Но для начала сойдёт. Самое главное, что пользователь теперь сам решает, устанавливать обновление или нет. Причём данный пакет пригоден для установки на компьютерах без доступа к интернету, на что обычно Линуксы не способны.

Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.