LINUX.ORG.RU
ФорумAdmin

pbuilder inside podman: tar: Cannot open: Too many levels of symbolic links

 , , , ,


0

2

Уже несколько дней пытаюсь разобраться с непонятными рэндомными ошибками pbuilder-а. Чатгпт и поиск не помогает, эксперименты не срабатывают, поэтому спрашиваю здесь.

Ситуация следующая. Есть podman имадж c дебианом, в который предустановлен pbuilder c созданным базовым chroot-ом base.tgz. По замыслу, я создаю из имаджа контейнер и в нем запускаю fakeroot pbuilder execute --save-after-exec ./some-script-that-installs-stuff.sh.

На моем десктопном федора-хосте все работает и pbuilder (внутри podman-а c дебианом) устанавливает что надо, затем перезаписывает base.tgz. А вот на VPS не хочет и завершается ошибкой на этапе сохранения в base.tgz. Ошибки на при каждом прогоне команды выше могут быть разные, например:

tar: ./etc/rc2.d/S01postgresql: Cannot open: Too many levels of symbolic links

или

tar: ./usr/share/postgresql-common: Read error at byte 0, while reading 2048 bytes: Is a directory

или обе вместе и еще несколько похожих на эти две, но с другими директориями.

Проверял на VPS с убунтой (amd64, arm64) и федорой (amd64). Пробовал увеличить память на VPS (создал с 16Гб вместо изначальных 4-х). Пробовал указать разные storage engines для podman-а. Ничего не работает. Работает почему-то только у меня на десктопе. Десктоп может быть отличается тем, что у меня btrfs, вместо ext4… Но это кажется эзотерикой.

У кого-нибудь будут мысли, в чем может быть дело?



Последнее исправление: qount_25 (всего исправлений: 4)
Ответ на: комментарий от firkax

Ну вообще для сборки пакетов докер/podman - правильный инструмент. Например у меня федора, что ж я буду ставить целиком тяжелую VM? Меня больше напрягяает pbuilder, это какой-то треш честно говоря.

qount_25
() автор топика
Последнее исправление: qount_25 (всего исправлений: 1)
Ответ на: комментарий от qount_25

Нет, неправильный. Используй debootstrap + chroot.

Зачем нужен pbuilder не знаю. Судя по твоей команде fakeroot pbuilder execute --save-after-exec ./some-script-that-installs-stuff.sh это какой-то аналог ненужного checkinstall-а. Ни для чего кроме черновых тестовых сборок такие авто-опакечиватели всего подряд не годятся.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Даже если б я хотел - к сожалению, у меня нет выбора. Поставили задачу. Пилится система сборки пакетов, которая обязана использовать подман и обязана использовать pbuilder. Pbuilder я бы с большим удовольствием выкинул бы сам. Но задача стоит юзать его.

qount_25
() автор топика
Последнее исправление: qount_25 (всего исправлений: 2)

Проверял на VPS с убунтой

Меня смущает термин vps. Сейчас это почти синоним к vds, но раньше это чаще всего был контейнер внутри host os (lxc, openvz, какие-нибудь jail и т.п.), а не полноценная ВМ

Т.е. на одном хосте под управлением одного общего ядра крутились несколько vps, и сам понимаешь, что помимо индивидуальных лимитов у них были и общие. Т.е. то же число соединенией или открытых файлов могла забрать соседняя vps’ка. Что вполне даст твои проблемы

Убедись, что у тебя полноценная ВМ с отдельным ядром

router ★★★★★
()
Ответ на: комментарий от router

Да, я об этом тоже подумал. Попробовал разные. Все на хецнере. Сначала взял самую дешевую, потом взял еще одну с 16Gb памяти и 8 cores. Как бы должно хватить, по идее. Нет?

qount_25
() автор топика
Ответ на: комментарий от ya-betmen

Я с вами полностью согласен. Просто стоят такие требования к задаче: pbuilder внутри подмана. Если бы можно было, я просто руками собрал .deb пакет и все. Но, к сожалению, в данном случае задача сформулирована иначе и там есть свои специфичные причины почему.

qount_25
() автор топика
Ответ на: комментарий от gagarin0

Тут еще вопрос на чем ее поднимать? На KVM/Qemu или VB? Или на чем-то еще. И потом, даже если я воспроизведу этот баг на виртуалке – я не очень вижу пока что как это приблизит меня к пониманию его природы.

qount_25
() автор топика
Ответ на: комментарий от Obezyan

Да, скорее всего XEN. Но тут еще штука в том, что это должно бы работать на чем угодно. Нельзя в требованиях к этой софтине писать «работает только на следующих VPS-провайдерах».

qount_25
() автор топика
Ответ на: комментарий от qount_25

Тогда проверь что у тебя в системе, в чруте и что куда монтируется начиная с ./etc/rc2. Такая ошибка словно у тебя оно в циклические ссылки уперлось при распаковке.

В смысле я бы прошёл эту часть скрипта руками просто чтобы оттрейсить проблему.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от qount_25

Нельзя в требованиях к этой софтине писать «работает только на следующих VPS-провайдерах».

Так XEN это «ненастоящая виртуализация» укажите в требованиях KVM, это нормально, куча софта, даже игровые сервера не работают с XEN, но работают с KVM.

Obezyan
()
Ответ на: комментарий от ya-betmen

Только не при распакове, а при ЗАпаковке. Ошибка происходит именно в момент пересохранения base.tgz после того, как он был успешно распкован и система в нем обновлена всякими новыми пакетами, которые скрипт в нее установил.

qount_25
() автор топика
Ответ на: комментарий от qount_25

kvm

И потом, даже если я воспроизведу этот баг на виртуалке

А что если не воспроизведете?

не очень вижу пока что как это приблизит меня к пониманию его природы.

эзотерикой

я советую вам поднять ваше тестовое окружение, потому что нужно будет сравнивать версиию ядра и пакетов, переменные окружения и интересные sysctl переменные

gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 1)
Ответ на: комментарий от gagarin0

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

qount_25
() автор топика
Ответ на: комментарий от qount_25

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

не огорчайтесь раньше времени и все таки поднимите у себя локальное окружения и воспроизведите проблему

gagarin0
()
Ответ на: комментарий от ya-betmen

Основная проблема в том, что чтобы заменить tar, надо патчить pbuilder, т.к. tar прочно вшит в него. А это нежелательно с точки зрения требований к разработке этого софта.

qount_25
() автор топика
Ответ на: комментарий от qount_25

Просто стоят такие требования к задаче: pbuilder внутри подмана

Твоему заказчику шашечки или ехать? Если первое - хотя бы повышенная оплата за этот мазохизм есть, или что тебя мотивирует этим заниматься? Или это вообще учебное задание для экзамена?

firkax ★★★★★
()
Ответ на: комментарий от firkax

Job’s a job. У заказчика есть свои соображения. Я могу с ними быть несогласен, но факт в том, что заказчик – оч хороший программист сам. И у меня нет желания спорить, есть желание заделиверить.

qount_25
() автор топика
Ответ на: комментарий от ya-betmen

Нет, pbuilder написан на Питоне, я посмотрел и там просто обычный вызов tar. Но так как билд пакета через pbuilder подразумевает разворачивание chroot каждый раз, а перед билдом пакета нужно еще провести апдей chroot-а – то там несколько мест, где все это происходит и еще нужно не облажаться делая этот патч. И все-таки требование стоит по возможности обойтись без ковыряния кода pbuilder-а.

qount_25
() автор топика
Последнее исправление: qount_25 (всего исправлений: 2)

АПДЕЙТ: воспроизвел баг локально на установленной в KVM Fedora Server. Что делать дальше? Разница только в кол-ве байт в ошибке - пишет Read error at byte 0, while reading 34 bytes: is a directory.

qount_25
() автор топика
Последнее исправление: qount_25 (всего исправлений: 1)
Ответ на: комментарий от qount_25

Это вариант.

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

ya-betmen ★★★★★
()
Ответ на: комментарий от qount_25

Лучше пусть скрипт тебе и параметры запуска tar выводит и переменные окружения. Ну и сам tar пытается вызвать через exec. Будет больше понимания что и где пытается произойти.

zimniy
()

Сделал воркэраунд: написал скрипт faketar, который просто копирует файлы и чуть чуть пропатичил pbuilder, чтобы он его использовал. Первопричина бага так и неизвестна. Пока не уверен, нужно ли ее искать.

qount_25
() автор топика