Красные шапки и локальные репозитории

По тегу "redhat" можно узреть всю мою ненависть к красным шапкам. Там и tuned, и невозможность запустить инсталлятор с небольшим количеством оперативной памяти, и дурную Anaconda, и тупую разбивку по пакетам, и всратый менджер пакетов в принципе, и странные настройки по умолчанию в sysctl, и много-много-много чего ещё. Недавно общий список пополнился ещё рядом идиотизмов.
Озаботился я тут, значит, созданием локального зеркала репозиториев для Rocky Linux. Ибо заказчики требуют собирать софт под эту блевотину. А в свете санкций-уянкций и всех этих рoскoмпoзoрoвских обострений размещенные на популярных CDNах зеркала частенько бывают недоступны. И да, есть ещё один неочевидный нюанс. Те самые CDNы часто анализируют в том числе заголовок User-Agent, с которым к ним пришел клиент. И шаг вправо, шаг влево, — вся твоя автоматизация летит к какой-то там матери. Потому что, например, тот же Ansible при скачивании пакета передает серверу совсем не такой же заголовок "User-Agent" как DNF.
Ладно. Делаем локальное зеркало. Но каким способом? Официальный рекомендуемый расово правильный метод — rsync. Одна беда: он требует ну о-о-о-о-о-очень овердохрена места на дисках и трафика. А как-то отфильтовать "нужное" от "ненужного" нереально. Поэтому есть второй способ: через плагин для самого DNF. Вторая беда: тебе надо как-то запустить на своём сервере этот самый DNF. И никто не обещал что в твоём любимом дистрибутиве он будет в наличии (в Debian-е, к счастью, есть).
Дальше ждет следующая неприятность. В Debian-е для полноценной работы требуется фактически два репозитория: основной и с обновлениями безопасности. Всё остальное прописывается как секции внутри этих репозиториев. То есть по сути, тебе надо вытягивать пакеты всего с двух URL-ов. И если мы берем утилиту debmirror (это набор perl-овых скриптов), то в ней по мере надобности можно указать дополнительные правила вида "не скачивать debug-пакеты, не скачивать dev-пакеты" и так далее.
В красных шапках всё сильно замороченнее. Для минимальной работы требуются аж шесть разных репозиториев: BaseOS, AppStream, Extras, EPEL, Cloud-kernel, Cloud-common. Каждый из них имеет свой собственный отдельный URL и требует отдельной настройки в конфигурации DNF.
Но и это ещё не всё. Если вы не хотите вытягивать весь репозиторий со всеми архивами вглубь веков до 2000-мохнатого года (а очень многие наподобие того же Azul любезно предоставляют всем желающим такую возможность), то вы в принципе можете взять только самые последние версии, но тогда... в дополнение к DNF вам понадобится ещё одна специальная утилита, чтобы построить индекс вашего зеркала после вытягивания. Которая тоже требует определённой настройки.
Но допустим, вы таки продрались сквозь все эти трудности и таки смогли сделать локальное зеркало так, как задумывали. Но расслабляться рано. Это только полпути. Надо ещё перенастроить на него потребителей, то есть ваши "обычные боевые" виртуалки. А это сделать тоже не так просто как хотелось бы. Нельзя просто так взять и поменять пару строчек в "sources.list" как в Debian.
Штука в том, что красные шапки комплектуются пакетами с именем "блаблабла-release". И при обновлении до следующего минорного выпуска эти самые "блаблабла-release" перезатрут настройки вашего DNF. Ладно, ф топку эти "*-release", сносим. Но вот пичалька: пакет "rocky-release" снести нельзя.
"А хули нам, кабанам", — подумал сисадмин, и удалил "rocky-relese" через "rpm -e --nodeps". И... при следующей перезагрузке система тупо не запустилась. Оказывается, в пакете "rocky-release" находится файл "/etc/os-release" (точнее, симлинк, но это уже детали), который оказывается, сцуко, жизненно важен для монтирования корневого раздела, ибо initramfs проверяет его наличие на файловой системе. И если не обнаруживает оного, то вываливается с ошибкой "корневая ФС не найдена". Упс, вот это да! Новейшие японские технологии!
Ладно. Возвращаем взад пресловутый rocky-release. Но что же делать чтобы не затирались настройки DNF? Ответ: ни в коем случае не трогать "оригинальные" файлы в "/etc/yum.repos.d". А только отключить в них все ненужные репозитории "enabled=0", а в нужных закомментировать "mirrorlist=" и прописать локальные "url=". Ну и не пытаться ставить какие-либо ещё "*-release" помимо пресловутого "самого главного" rocky-release.
Фуф.
Как в старом анекдоте: "А всё-таки с яблоками как-то сильно проще было".
Вы всё ещё хотите использовать красные шапки у себя в проде?
|
</> |