Первоначально он был опубликован в 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", это интересный вопрос, но ответ не обязательно является решением моей проблемы.