Criando o pacote debian para instalar em um caminho com espaços

1

Eu tenho um aplicativo Qt que quero implantar como um pacote deb. Eu tenho lido tantas fontes, todas ligeiramente diferentes - mais do que eu fiz depois disso for-ubuntu-software-center / "> Como: preparar uma aplicação para submissão ao Ubuntu Software Center

Eu devo criar uma estrutura de pastas em /usr/share/My Company's Folder/ (os espaços e caracteres especiais no caminho são um requisito infeliz; os nomes em maiúsculas também ... o programa foi portado a partir do Windows).

/usr/share/My Company's Folder/MainProject/content

Eu criei um pacote ... e ele parece funcionar, instala no local correto e, surpreendentemente, o programa até funciona depois disso.

O problema: não consigo usar espaço em nomes de caminho . Eu criei um arquivo "install" como mostrado no link acima. Ele faz o que é esperado - mas eu recebo um erro se estou tentando colocar itens em /usr/share/My Company's Folder/ - eu só consegui fazê-lo funcionar usando /usr/share/MyCompanyFolder/ (sem espaços ou caracteres especiais ".

Configuração:

~/working_directory
  mainproject-1.0
     mainproject_1
        content
  mainproject-1.0.tar.gz

Dentro de mainproject-1.0 eu corri

dh_make --copyright gpl -f ../mainproject-1.0.tar.gz 

selecione s, pressione enter ... Então eu modifiquei os arquivos na pasta debian criada.

Também criou um arquivo "install" na pasta debian:

mainproject_1/* /usr/share/My Company's Folder/MainProject

Ran

dpkg-buildpackage -rfakeroot [email protected]

Funciona, cria instalador, o instalador funciona ...

Mas não consigo criar um caminho de pasta com espaços, que é o que realmente preciso.

Nota:

Tentei sem sucesso

"/usr/share/My\ Company\'s\ Folder/"
"/usr/share/My Company's Folder/"
/usr/share/My\ Company\'s\ Folder/
/usr/share/My0Company's0Folder/
/usr/share/My?Company's?Folder/

Depois de muita pesquisa, encontrei esta informação

you can't install files with space with dh_install (= debian/*install files)
you have to rename/install them explicitly in debian/rules with install, mv or cp
e.g. with dh tiny rules:

override_dh_install
     dh_install
     install -m 644 "fi le" "debian/tmp/usr/share/fi_le"

Então eu tentei adicionar o arquivo debian / rules (mostrando números de linha)

12 %:
13  dh $@ 
14
15 override_dh_install:
16  dh_install
17  install -m 644 "debian/mainproject/usr/share/MyCompanyFolder" "debian/mainproject/usr/share/My Company's Folder"

erro mais recente - com este comando:

make[1]: Entering directory '/home/me/working_directory/mainproject-1.0'
dh_install
install -m 644 "My Company's Folder" "debian/mainproject/usr/share/MyCompanyFolder"
install: cannot stat 'My Company's Folder': No such file or directory
make[1]: *** [override_dh_install] Error 1
make[1]: Leaving directory '/home/me/working_directory/mainproject-1.0'
make: *** [binary] Error 2
dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2

Como alternativa, tentei

12 %:
13  dh $@ 
14
15 override_dh_install:
16  dh_install
17  mv -r "debian/mainproject/usr/share/MyCompanyFolder" "debian/mainproject/usr/share/My Company's Folder"

E como resultado, a estrutura de pastas dentro do Debian parece correta, mas recebi erros sobre pastas inválidas ...

objdump: 'debian/mainproject/usr/share/My': No such file
objdump: 'Company's': No such file
.....

mkdir, em seguida, cp deve ter o mesmo resultado que mv, mas infelizmente eles continuam colocando uma pasta dentro da outra ... * é visto como um nome real ...

Parece mesmo que não estou chegando a lugar nenhum.

Atualização: a resposta à minha pergunta é, use o comando mv em um arquivo postinstall.

    
por Thalia 01.10.2014 / 22:51

3 respostas

0

Seu último exemplo não tinha o argumento -p no mkdir, então o diretório não foi criado no caminho especificado. O resto deveria ter funcionado.   Você terá problemas contínuos com nomes que contenham caracteres especiais, como aspas, mas se o requisito for instalar em tal nome, sua abordagem para simplesmente instalar em um diretório normal e, em seguida, renomeá-lo no final é uma boa. Você evita todo o absurdo com a cotação exigida em seu script e deixa o uso final lidar com isso. Quando os usuários finais choram alto o suficiente, talvez algo razoável aconteça como não ter que usar esses nomes em um sistema Linux, onde eles causarão problemas.

    
por ubfan1 01.10.2014 / 23:21
1

É um truque

There is directories layout:
mytest-0.1/debian/changelog
             /compat
             /control
             /install
             /rules
mytest-0.1/usr/share/my company/file_a
                               /file_b
                               /file_c'

Modifique o arquivo install da seguinte forma

usr/share/           /usr/

Em seguida, empacota seu pacote deb

$mytest-0.1>dpkg-buildpackage -rfakeroot -uc -us -tc

Desejo que possa ajudar você

    
por user1395066 14.09.2015 / 16:06
1

Bem, sua abordagem final para usar o postinstall é uma boa maneira de fazer isso. Mas a razão, para o fracasso de sua primeira tentativa, é que o patch dentro do script de instalação do Debian (que é debian / rules debian / install também provavelmente outra coisa) é baseado no pacote Debian, não no caminho que você está pensando no seu computador.  É o caminho comparado com a pasta do pacote inteiro. É por isso que ele vai te dar a saída que "nenhum tal arquivo"

Desculpe pelo meu pobre Inglês, eu gostaria de ter o seu problema e expliquei bem.

Se eu fosse você, eu procuraria os mantenedores do Debian que eu conhecia por ajuda, ou veria outros pacotes empacotados por outros. (Você pode obter facilmente as fontes da maioria dos pacotes em seu terminal)

    
por Z-Y00 30.01.2018 / 14:48