dpkg somente UNPACKS e não INSTALL, por quê?

0

Estou tentando usar o dpkg -b para criar um pacote. A estrutura de diretórios do pacote se parece com:

ubuntu@ip-10-241-62-56:~/USB_RnD_DEB/BACKUP/usblinux1.1$ tree
.
├── DEBIAN
│   └── control
└── usr
    ├── bin
    │   └── usblinux-runner.sh
    └── share
        └── usblinux
               |-->installer.sh
               |--> LOTS AND LOTS OF FILES

O usblinux-runner.sh consiste em um pequeno script de shell que contém:

#!/bin/bash
echo "Installing the USB REDIRECTOR as Client !"
echo "-----------------------------------------"
sudo apt-get update
sudo apt-get install build-essential
sudo /usr/share/usblinux/./installer.sh install-client

Agora isso fica lotado no

ubuntu@ip-10-241-62-56:~/USB_RnD_DEB/BACKUP$ sudo dpkg -b usblinux1.1/
dpkg-deb: building package 'usblinux' in 'usblinux1.1.deb'.
ubuntu@ip-10-241-62-56:~/USB_RnD_DEB/BACKUP$ ls
usblinux1.1  usblinux1.1.deb

Agora isso funciona perfeitamente e quando eu instalo o pacote, ele apenas descompacta e coloca o usblinux-runner.sh em /usr/bin & usblinux em /usr/bin/share

NÃO INSTALA ou EXECUTE o arquivo usblinux-runner.sh. Eu simplesmente UNCACK e não EXECUTA o shell script também não vejo nenhum OUTPUT no console:

sudo dpkg -i usblinux1.1.deb 
Selecting previously unselected package usblinux.
(Reading database ... 82106 files and directories currently installed.)
Preparing to unpack usblinux1.1.deb ...
Unpacking usblinux (1.1) ...
Setting up usblinux (1.1) ...

Alguém pode me ajudar a descobrir o que está errado?

    
por Nishant Singh 18.10.2016 / 11:27

1 resposta

4

Isso é normal, a instalação de um pacote não executa nenhum de seus binários por padrão (caso contrário, imagine que seria divertido instalar o e2fsprogs e assim por diante!).

Se você quiser que o script usblinux-runner.sh seja executado automaticamente após a instalação do pacote, será necessário adicionar um postinst script , que executará usblinux-runner.sh . Há uma ressalva: não é possível instalar outros pacotes a partir de um script do mantenedor, portanto, é necessário remover as linhas apt-get . Mas tudo bem, porque a maneira correta de declarar uma dependência (seu pacote depende de build-essential ) é declará-la na entrada Depends: do arquivo de controle. Dado tudo isso, você pode também ter sua execução do script postinst

/usr/share/usblinux/installer.sh install-client

Você não precisa de sudo aqui, os scripts do mantenedor são executados como root de qualquer maneira.

    
por 18.10.2016 / 11:48