A instalação de um pacote em um local alternativo usando 'dpkg' sem privilégios de root falha com erros de permissão

1

A linha de comando que estou usando é

dpkg --force-not-root --root  /some/other/location -i the_package.deb

mas recebo um erro

dpkg: could not open log '/var/log/dpkg.log': Permission denied

Eu esperava que o log fosse escrito para

/some/other/location/var/log/dpkg.log

Com o rpm você pode gerar um banco de dados alternativo, mas não consigo ver como fazer isso com o dpkg. Para chegar ao estado acima, adicionei manualmente (talvez não a abordagem mais sábia) o seguinte.

mkdir -p /some/other/location/var/lib/dpkg/updates
mkdir -p /some/other/location/var/lib/dpkg/triggers
mkdir -p /some/other/location/var/lib/dpkg/info
touch /some/other/location/var/lib/dpkg/status
touch /some/other/location/var/lib/dpkg/available

Se eu tentar executar como root, o que eu prefiro não fazer neste caso

sudo dpkg --force-not-root --root  /some/other/location -i the_package.deb

ele vai além e instala o deb na minha localização alternativa, mas falha com

dpkg (subprocess): unable to execute installed post-installation script (/var/lib/dpkg/info/the_package.postinst): No such file or directory

mas este arquivo foi escrito pelo comando dpkg acima para

/some/other/location/var/lib/dpkg/info/the_package.postinst

Meu raciocínio para não usar o banco de dados dpkg de máquinas é que essa é uma instalação de software de aplicativos para uma unidade de rede que está disponível para vários usuários. Talvez apenas extrair o conteúdo do pacote e instalar manualmente seja a melhor abordagem. O pacote de software específico não possui nenhuma dependência externa listada.

Versão do programa de gerenciamento de pacotes Debian 'dpkg' 1.18.2 (amd64)

    
por user993269 01.03.2016 / 00:27

1 resposta

1

Use --log=filename para alterar o local de registro.

Se você estiver usando --root=/foo , precisará configurar /foo como uma raiz válida. Por exemplo, sudo chroot /foo /bin/sh funciona.

O "Nenhum arquivo ou diretório" indica que o script the_package.postinst requer algo que não esteja no chroot (provavelmente /bin/sh e uma carga de outras coisas). Isso é executado dentro do chroot, então você não vê /foo no caminho.

Você pode usar --no-triggers para impedir que os acionadores sejam executados. No entanto, você deve ver agora o que isso está se tornando. dpkg é muito inclinado a pensar que você deseja executar o pacote na máquina em que está instalando e o sistema de arquivos raiz está em / .

"[J] uando extrair o conteúdo do pacote e instalá-lo manualmente será uma abordagem melhor." Sim - parece que você está instalando em um servidor de arquivos que não é destinado a executá-lo.

Editar: Embora isso resolva estritamente seu problema, o método "moderno" para distribuir software é usar software de orquestração (por exemplo, chef) para instalar os pacotes diretamente nos clientes, em vez de compartilhar software por meio de um servidor de arquivos. Discos são baratos.

    
por 01.03.2016 / 01:44

Tags