Como você cria uma instalação falsa de um pacote debian para uso em testes?

1

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.

    
por Bruce Adams 23.11.2017 / 13:56

1 resposta

0

Graças a Guillem Jover agora tenho uma solução - veja link

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

Parece que --force-not-root não é suficiente. fakeroot é obrigatório. ldconfig e start-stop-daemon devem estar no caminho. O arquivo de log precisa ser realocado do padrão /var/log/dpkg.log A ordem dos argumentos também é significativa. Se usado --root deve ser antes de --instdir e --admindir

    
por 06.12.2017 / 19:57

Tags