it-swarm.com.de

debuild schlug bei dh_install mit cp fehl: kann nicht statieren `debian / tmp // pfad / zu / install / bin / ': Keine solche Datei oder kein solches Verzeichnis

Ich erstelle ein Binärpaket für die lokale Verwendung durch Lesen von http://chat.stackexchange.com/transcript/message/1313226#1313226 Chat-Sitzung. Ich habe die in der Liste genannten Schritte befolgt.

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

Nachfolgend sind die folgenden Schritte aufgeführt.

  1. erstellen Sie einen GPG-Schlüssel mit gpg --gen-key
  2. erstellen Sie die notwendigen Verzeichnisse für das Paket (Ordner für Paket mit Name-Version, Debian-Unterordner) und führen Sie dh_make --createorig in der Konsole aus. Dieser Schritt erzeugte die erforderlichen Dateien für das Packen im debian Ordner
  3. bearbeiten Sie die erforderlichen Dateien im Ordner ./debian

liste der Dateien im Ordner ./debian

source //folder
compat
rules
copyright
changelog
control
install

Nachfolgend finden Sie den Inhalt wichtiger Dateien.

$ cat control

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 installieren

/opt/installation-dir/bin/

hier sollten die Binärdateien installiert werden.

katze 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

$ cat Regeln

#!/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 [email protected] 

schließlich führe ich den Befehl debuild aus, aber es wird ein Fehler angezeigt.

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

es wurde kein Ordner namens tmp im debian -Ordner erstellt. debhelper hat den Status der Ausführung des debuild-Befehls notiert, der bis zur dh_install-Ebene fortgesetzt wurde. Ausgabedateien, die mit Ausnahme der oben genannten Dateigruppe erstellt wurden.

$ cat cscore.debhelper.log

dh_auto_configure
dh_auto_build
dh_auto_test
dh_prep
dh_installdirs
dh_auto_install

Bitte hilft jemand weiter. -Vielen Dank.

3
Dig The Code

Wie die Manpage für dh_install sagt, werden der Zweck von dh_install und die gelesenen Dateien normalerweise für einen von zwei Zwecken verwendet:

  • Geben Sie an, welche Dateien aus einer einzigen Quelle in mehrere Binärpakete aufgenommen werden sollen. oder
  • Installieren Sie Dateien, die nicht vom Paketerstellungssystem verarbeitet werden, oder verschieben Sie Dateien in andere Verzeichnisse

Wenn Sie ein Build-System haben, das bereits alle für das Binärpaket erforderlichen Dateien in den richtigen Verzeichnissen erstellen und installieren kann und Sie nur ein Binärpaket aus Ihrer Quelle erstellen, benötigen Sie keine debian/install -Datei überhaupt.

Sie haben erwähnt, dass Sie mit einem Makefile -basierten Projekt arbeiten. Solange es Standardziele wie make all und make install unterstützt und die $DESTDIR -Variable für die Installation berücksichtigt, ist überhaupt kein debian/install erforderlich.

Tatsächlich sehen Sie in der von Ihnen geposteten Ausgabe einige Zeilen, die mit find beginnen und unmittelbar vor dh_install ausgeführt werden. Ich gehe davon aus, dass das make install -Ziel Ihres Projekts ausgeführt wird, und es sieht für mich so aus, als würde es bereits Dateien im richtigen Pfad installieren, nämlich debian/cscore/opt/Motorola-scanner/bin. Also denke ich, dass Ihr Build ohne einen debian/install funktionieren könnte.

3
Mike Miller

Okay, ich verstehe das Problem.

Fall A

Die dh_auto_install platziert die Pakete unter debian/<project-name>, wenn es nur ein Paket gibt.

Fall B

Sie werden jedoch unter debian/tmp abgelegt, wenn Sie mehrere Pakete haben (d. H. Mehrere blah.install -Dateien und mehrere Paketdeklarationen in der control -Datei.)

Siehe Info hier:

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

Irgendwie nimmt dh_install nur Dateien auf, die sich unter debian/tmp befinden, und schlägt vollständig fehl, wenn Sie nur ein Paket hatten. Das Ausführen von dh_install ist wahrscheinlich nicht erforderlich. Wenn Sie jedoch pdebuilder-dist verwenden, wird es standardmäßig ausgeführt.

Lösung

Es gibt eine Überschreibung von dh_install, die das Problem verursacht:

override_dh_install:
    @echo "skip dh_install"
0
Alexis Wilke