Isso foi postado originalmente em stackoverflow ( link ) mas provavelmente pertence aqui ao invés
Eu tenho um pacote que anteriormente só direcionava distros baseadas em RPM para as quais agora estou construindo pacotes .deb para distribuições baseadas em Debian.
O objetivo é simular uma instalação de teste a partir do espaço do usuário isolado do sistema em que você está construindo. Pode ser multiusuário e você não deseja exigir acesso root apenas para criar o software. Muitos dos nossos testes simulam a estrutura do diretório de instalação. Esta é a próxima etapa para simular uma instalação real usando pacotes construídos.
Para os pacotes RPM, consegui criar instalações de teste usando:
WSDIR=/where/I/want/my/tests/to/run
rpmdb --initdb --dbpath "$WSDIR"/rpmdb
rpm --relocate /opt="$WSDIR"/opt --dbpath $WSDIR/rpmdb -i <package>.rpm
O equivalente no mundo Debian é algo como:
dpkg --force-not-root --admindir=$WSDIR/dpkg --root=$WSDIR/install --install "$DEB"
No entanto, estou preso ao equivalente ao rpmdb --initdb
step.
Note que posso descompactar o arquivo usando:
dpkg-deb -x "$DEB" $WSDIR/install
Mas eu preferiria estar mais perto de como um pacote real é instalado.
Também não acho que isso vai executar preinstall
e postinstall
scripts.
Questões semelhantes sugeriram usar deboostrap
para criar um ambiente chroot
, mas isso cria uma nova instalação completa. Além de ser um exagero, é muito lento para um teste automatizado. Eu pretendo usar isso para testes rápidos do pacote de instalação antes de testes adicionais em ambientes de teste reais.
Meus experimentos até agora:
(cd $WSDIR/dpkg && mkdir alternatives info parts triggers updates)
cp /var/lib/dpkg/status $WSDIR/dpkg/status
tem, na melhor das hipóteses, resultado em:
dpkg: error: unable to access dpkg status area: No such file or directory
que não indica claramente o que está errado.
Então, como você cria um diretório admin do dpkg?
Atualização 24/11/2017
Eu tentei copiar usando o diretório dpkg de um ambiente criado por cowdancer (que usa deboostrap sob o capô) ou copiando o real do / var / lib / dpkg, mas eu ainda recebo a mesma mensagem de erro, então talvez o erro (e / ou a opção --admindir) não signifique exatamente o que eu acho que significa.
Observe que:
sudo dpkg --force-not-root --root=$WSDIR/install --admindir=/var/lib/dpkg --install "$DEB"
funciona. Então, é algo a ver com o diretório admind.
Eu também renomei a questão como "Como você cria um diretório admin do dpkg" é uma questão interessante, mas a resposta não é necessariamente a solução para o meu problema.