web-dev-qa-db-fra.com

debuild a échoué à dh_install avec cp: impossible de stat `debian / tmp // chemin / vers / install / bin / ': aucun fichier ni répertoire de ce type

Je crée un paquet binaire pour une utilisation locale en lisant http://chat.stackexchange.com/transcript/message/1313226#1313226 session de discussion en ligne. J'ai suivi les étapes mentionnées dans la liste.

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

Voici les étapes suivies.

  1. créer une clé gpg en utilisant gpg --gen-key
  2. créez les répertoires nécessaires au packaging (dossier du paquet avec nom-version, sous-dossier debian) et exécutez dh_make --createorig dans la console. Cette étape a généré les fichiers requis pour l’emballage dans le dossier de Debian .
  3. éditer les fichiers nécessaires dans le dossier ./debian

liste des fichiers dans le dossier ./debian

source //folder
compat
rules
copyright
changelog
control
install

Vous trouverez ci-dessous le contenu des fichiers importants.

$ contrôle de chat

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/

c'est ici que les fichiers binaires doivent être installés.

changelog de chat

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

règles du chat

#!/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 $@ 

enfin, je lance la commande debuild mais j'ai l'erreur ci-dessous.

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

en fait, aucun dossier n'a été créé appelé tmp dans le dossier de Debian . debhelper a noté le statut de l'exécution de la commande debuild qui s'est poursuivie jusqu'au niveau de dh_install. les fichiers de sortie sont également créés, à l’exception du jeu de fichiers ci-dessus.

$ cat cscore.debhelper.log

dh_auto_configure
dh_auto_build
dh_auto_test
dh_prep
dh_installdirs
dh_auto_install

S'il vous plaît, aidez quelqu'un pour aller de l'avant. -Merci.

3
Dig The Code

Comme l'indique la page de manuel de dh_install , l'objectif de dh_install et les fichiers qu'il lit sont généralement utilisés à l'une des deux fins suivantes:

  • Spécifiez les fichiers contenus dans plusieurs packages binaires à partir d'une source unique; ou
  • Installer des fichiers non gérés par le système de construction du paquet ou déplacer des fichiers dans des répertoires différents

Si votre système de construction peut déjà créer et installer tous les fichiers nécessaires au package binaire dans les répertoires appropriés et que vous ne créez qu'un package binaire à partir de votre source, vous n'avez pas besoin d'un fichier debian/install. du tout.

Vous avez mentionné que vous travaillez avec un projet basé sur Makefile. Tant qu'il prend en charge des cibles standard telles que make all et make install et qu'il respecte la variable $DESTDIR lors de l'installation, il n'est pas nécessaire d'utiliser debian/install.

En fait, dans le résultat que vous avez posté, vous pouvez voir quelques lignes commençant par find s'exécutant immédiatement avant dh_install. Je suppose que la cible make install de votre projet est en cours d'exécution, et il me semble que les fichiers sont déjà installés dans le chemin correct, à savoir debian/cscore/opt/Motorola-scanner/bin. Donc, je pense que votre build pourrait fonctionner sans debian/install.

3
Mike Miller

Ok, je comprends le problème.

Cas A

Dh_auto_install placera les paquets sous debian/<project-name> s'il n'y a qu'un seul paquet.

Cas B

Cependant, il les placera sous debian/tmp si vous avez plusieurs packages (c'est-à-dire plusieurs fichiers blah.install et plusieurs déclarations de package dans le fichier control.)

Voir les informations ici:

http://manpages.ubuntu.com/manpages/trusty/en/man1/dh_auto_install.1.html

D'une manière ou d'une autre, dh_install ne récupère les fichiers que s'ils sont sous debian/tmp et échoue complètement si vous n'avez qu'un seul paquet. Donc, exécuter dh_install n'est probablement pas nécessaire ... mais si vous utilisez pdebuilder-dist, il est exécuté par défaut.

Solution

Il y a un remplacement du dh_install, ce qui crée le problème:

override_dh_install:
    @echo "skip dh_install"
0
Alexis Wilke