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.
dh_make --createorig
dans la console. Cette étape a généré les fichiers requis pour l’emballage dans le dossier de 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.
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:
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
.
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"