Não é possível executar o script do meu próprio pacote

6

Eu criei um pacote simples usando este guia , mas eu não pode executar o script dentro dele.

Existe uma pasta chamada mypack , que inclui /usr/bin/myscript.sh com algum comando nela (digamos que apenas ecoa uma mensagem como "Hello World"), e uma pasta chamada DEBIAN com um arquivo control com este texto dentro:

Package: mypack
Version: 1.0-1
Maintainer: Alex
Architecture: all
Section: misc
Description: echo me

Eu construí e instalei usando dpkg-deb --build mypack ; dpkg -i mypack.deb como o guia diz.

Por fim, quando quis executar o script de script para ver se funciona, não consegui. Eu tentei:

  1. myscript (retorna myscript: command not found )
  2. myscript.sh (retorna bash: /usr/bin/myscript.sh: Permission denied )
  3. sudo myscript.sh (retorna sudo: myscript.sh: command not found )
  4. mypack myscript e mypack myscript.sh (ambos retornam mypack: command not found )

Como posso executá-lo, então, na verdade funciona ou faltam alguns passos importantes, o que não me permite executar o script?

    
por Alex F 11.12.2017 / 18:42

1 resposta

8

Seu script não está definido como executável; assim como um script não instalado pelo empacotamento, você precisa ter certeza de que ele tem o bit executável definido.

Você tem duas opções:

  1. Ao criar o pacote, certifique-se de que seu script tenha o bit executável antes criando o pacote, executando isto em seu diretório de trabalho Antes construindo o pacote:

    chmod +x /path/to/script.sh

OU ...

  1. Use o script postinst do seu pacote para definir a instalação do bit executável após . Adicione um comando ao script .postinst semelhante ao seguinte:

    chmod +x /usr/bin/myscript.sh

Para algumas das minhas coisas, eu uso os dois métodos apenas para ter certeza de que as coisas são executáveis. Isso introduz dores de cabeça às vezes, mas é melhor ter certeza do que não ter certeza. Pelo menos, na minha opinião.

Como o script não pode ser executado como myscript , isso porque myscript e myscript.sh são objetos diferentes .

Se você quiser, faça o seguinte no script .postinst do seu pacote:

ln -s /usr/bin/myscript.sh /usr/bin/myscript

... e, em seguida, supondo que você corrija o problema do bit executável, ele deve 'apenas funcionar' para ambas as versões que você estava tentando, tanto myscript.sh como myscript .

NO ENTANTO a maneira correta de fazer isso é, em vez disso, apenas empacotar o script como myscript e não incluir a extensão do shell. Você deve incluir uma linha shebang no início ( #! ) indicando o intérprete a ser usado. Desde .sh poderia ser qualquer coisa. Em seguida, configure o pacote para instalar apenas myscript . Como o Muru afirmou, você deve evitar criar links no seu postinst, mas cabe a você o que você quer fazer. Existem muitas maneiras diferentes de atingir o seu objetivo, mas não uma orientação muito rigorosa na documentação do empacotamento.

    
por Thomas Ward 11.12.2017 / 18:51