debuild falhou em dh_install com cp: não pode stat 'debian / tmp // caminho / para / install / bin /': Nenhum arquivo ou diretório

3

Estou criando um pacote binário para uso local lendo link sessão de bate-papo. Eu segui os passos mencionados na lista.

My environment:
ubuntu 12.04
Project: MakeFile based C++ project which contains several sub directories and creating several shared libraries.

Abaixo estão os passos seguidos.

  1. crie uma chave gpg usando gpg --gen-key
  2. crie diretórios necessários para o empacotamento (pasta para pacote com nome-versão, subpasta debian) e execute dh_make --createorig no console. Esta etapa gerou os arquivos necessários para o empacotamento dentro da pasta debian
  3. edite os arquivos necessários na pasta ./debian

lista de arquivos na pasta ./debian

source //folder
compat
rules
copyright
changelog
control
install

Abaixo estão os conteúdos de arquivos importantes.

controle $ cat

Source: cscore
Section: misc
Priority: extra
Maintainer: dwft78 <[email protected]>
Build-Depends: debhelper (>= 8.0.0), autotools-dev
Standards-Version: 3.9.2
Homepage: <insert the upstream URL, if relevant>

Package: cscore
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: CoreScanner
CoreScanner for Ubuntu-12.04

$ cat install

/opt/installation-dir/bin/

é onde os arquivos binários devem ser instalados.

cat changelog

cscore (1.0-1) precise; urgency=low

  * Initial release (Closes: #nnnn)  <nnnn is the bug number of your ITP>

 -- name <[email protected]>  Wed, 28 May 2014 14:16:29 +0530

regras do $ cat

#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

%:
    dh $@ 

finalmente eu corro o comando debuild , mas tenho um erro abaixo.

find /home/dwft78/project/cscore/cscore-1.0/lib -name "libcs*" -type f -exec cp -f {} /home/dwft78/project/cscore/cscore-1.0/debian/cscore/opt/motorola-scanner//bin \;
find /home/dwft78/project/cscore/cscore-1.0/lib -name "libcs*" -type l -exec cp -Rf {} /home/dwft78/project/cscore/cscore-1.0/debian/cscore/opt/motorola-scanner//bin \;
make[1]: Leaving directory '/home/dwft78/project/cscore/cscore-1.0'
   dh_install
cp: cannot stat 'debian/tmp//opt/motorola-scanner/bin/': No such file or directory
dh_install: cp -a debian/tmp//opt/motorola-scanner/bin/ debian/cscore///opt/motorola-scanner/ returned exit code 1
make: *** [binary] Error 2
dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2

na verdade, não há uma pasta criada chamada tmp dentro da pasta debian . debhelper notou o status da execução do comando debuild que continuou até o nível dh_install. arquivos de saída também criados com exceção do conjunto de arquivos acima.

$ cat cscore.debhelper.log

dh_auto_configure
dh_auto_build
dh_auto_test
dh_prep
dh_installdirs
dh_auto_install

Por favor, alguém ajude a seguir em frente. -Obrigado.

    
por Dig The Code 28.05.2014 / 14:34

2 respostas

3

Como diz a página man do dh_install , o objetivo de dh_install e os arquivos que ele lê são normalmente usados para uma das duas finalidades:

  • Especifique quais arquivos vão para vários pacotes binários a partir de uma única fonte; ou
  • Instalar arquivos não manipulados pelo sistema de compilação de pacotes ou mover arquivos para diretórios diferentes

Se você tiver um sistema de compilação que já possa criar e instalar todos os arquivos necessários para o pacote binário nos diretórios corretos, e estiver construindo apenas um pacote binário a partir da sua origem, não precisará de debian/install arquivo em tudo.

Você mencionou que está trabalhando com um projeto Makefile -based. Contanto que ele suporte metas padrão como make all e make install e respeite a variável $DESTDIR para instalação, não há necessidade de debian/install .

De fato, na saída postada, você pode ver algumas linhas começando com find em execução imediatamente antes de dh_install . Eu suponho que é o make install destino do seu projeto em execução, e parece-me que já está instalando arquivos no caminho correto, ou seja, debian/cscore/opt/motorola-scanner/bin . Então, acho que sua compilação pode funcionar sem um debian/install .

    
por Mike Miller 04.06.2014 / 00:12
0

Ok, eu entendo o problema.

Caso A

O dh_auto_install colocará os pacotes em debian/<project-name> se houver apenas um pacote.

Caso B

No entanto, eles serão colocados em debian/tmp se você tiver vários pacotes (por exemplo, vários arquivos blah.install e várias declarações de pacote no arquivo control .)

Veja as informações aqui:

link

De alguma forma, dh_install apenas pega arquivos se eles estiverem abaixo de debian/tmp e falhar completamente se você tivesse apenas um pacote. Portanto, executar dh_install provavelmente não é obrigatório ... mas se você usar pdebuilder-dist , ele será executado por padrão.

Solução

Existe uma substituição do dh_install , o que cria o problema:

override_dh_install:
    @echo "skip dh_install"
    
por Alexis Wilke 23.12.2015 / 09:20