Как создать поддельную установку пакета debian для использования в тестировании?

827
Bruce Adams

Первоначально он был опубликован в stackoverflow ( https://stackoverflow.com/questions/47099045/how-do-you-create-a-dpkg-admin-directory ), но, вероятно, относится к этому.

У меня есть пакет, который ранее предназначался только для дистрибутивов на основе RPM, для которых я сейчас создаю пакеты .deb для дистрибутивов на основе Debian.

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

Для пакетов RPM я смог создать тестовые установки, используя:

WSDIR=/where/I/want/my/tests/to/run rpmdb --initdb --dbpath "$WSDIR"/rpmdb rpm --relocate /opt="$WSDIR"/opt --dbpath $WSDIR/rpmdb -i <package>.rpm  

Эквивалент в мире Debian - это что-то вроде:

dpkg --force-not-root --admindir=$WSDIR/dpkg --root=$WSDIR/install --install "$DEB" 

Тем не менее, я застрял над эквивалентом rpmdb --initdbшага.

Обратите внимание, что я могу просто распаковать архив, используя:

dpkg-deb -x "$DEB" $WSDIR/install 

Но я бы предпочел быть ближе к тому, как установлен настоящий пакет. Также я не думаю, что это будет работать preinstallи postinstallсценарии.

Подобные вопросы предложили использовать deboostrapдля создания chrootсреды, но это создает совершенно новую установку. Помимо того, что это излишнее, оно слишком медленное для автоматического теста. Я намерен использовать это для быстрых тестов установочного пакета перед дальнейшим тестированием в реальных тестовых средах.

Мои эксперименты до сих пор:

(cd $WSDIR/dpkg && mkdir alternatives info parts triggers updates) cp /var/lib/dpkg/status $WSDIR/dpkg/status 

в лучшем случае привели к:

dpkg: error: unable to access dpkg status area: No such file or directory 

который не указывает ясно, что не так.

Так как же вы создаете DPKG каталог администратора?


Обновление 24/11/2017

Я попытался скопировать, используя dpkg dir из среды, созданной cowdancer (которая использует deboostrap под капотом), или скопировать реальный из / var / lib / dpkg, но я все еще получаю то же сообщение об ошибке, так что, возможно, ошибка (и / или вариант --admindir) не совсем то, что я думаю.

Обратите внимание, что:

sudo dpkg --force-not-root --root=$WSDIR/install --admindir=/var/lib/dpkg --install "$DEB" 

работает. Так что это как-то связано с admind dir.

Я также повторил вопрос, как «Как создать каталог администратора dpkg», это интересный вопрос, но ответ не обязательно является решением моей проблемы.

1
Обратите внимание, что оригинальный вопрос в настоящее время имеет открытую награду. Bruce Adams 6 лет назад 0
Хм. Может быть, просто используйте `debootstrap` или` cdebootstrap`, чтобы создать chroot с минимальной «реальной» установкой, а затем установить пакет там? Вы можете сделать снимок содержимого целевого каталога после начальной загрузки, а затем сравнить его с результатами установки пробного пакета. Существует специальное решение, [`cowdancer`] (https://wiki.ubuntu.com/CowdancerHowto), которое может значительно ускорить этот процесс," предвосхищая "каталог debootstrapped. kostix 6 лет назад 0
В противном случае вы можете посмотреть на `fakeroot` - стандартные инструменты, используемые для сборки пакета Debian, используют его для« виртуализации »вызова« make install », который они делают, - заставляя его думать, что он был вызван пользователем root и который устанавливает вещи в настоящую файловую систему. каталоги с ограниченным доступом (такие как `/ usr / bin`), в то время как фактически перенаправляются в выделенный каталог, доступный для записи обычному пользователю, выполняющему заклинание` fakeroot`. kostix 6 лет назад 0

1 ответ на вопрос

0
Bruce Adams

Благодаря Guillem Jover у меня теперь есть решение - см. Https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=883700

mkdir fake mkdir fake/install mkdir -p fake/dpkg/info mkdir -p fake/dpkg/updates touch fake/dpkg/status PATH=/sbin:/usr/sbin:$PATH fakeroot dpkg --log=`pwd`/fake/dpkg.log --root=`pwd`/fake --instdir `pwd`/fake/install --admindir=`pwd`/fake/dpkg --install *.deb 

Кажется, этого --force-not-rootнедостаточно. fakerootнеобходимо. ldconfigи start-stop-daemonдолжен быть на пути. Файл журнала должен быть перемещен из значения по умолчанию /var/log/dpkg.log . Порядок аргументов также имеет большое значение. Если используется, --rootдолжен быть до --instdirи--admindir

Похожие вопросы