Paket ohne Abhängigkeitsprüfung erstellen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
debbeginner
Beiträge: 6
Registriert: 15.01.2020 08:09:11

Paket ohne Abhängigkeitsprüfung erstellen

Beitrag von debbeginner » 20.01.2020 15:18:30

Hallo,

der erste Bau meines Pakets hat schon funktioniert. Jetzt habe ich meine Änderungen im Code eingespielt, committed und wollte das Ganze testweise ohne Überprüfung auf Abhängigkeiten mit dpkg-buildpackage -d bauen. Leider erhalte ich trotz dem Flag -d folgenden Fehler :

Code: Alles auswählen

dpkg-shlibdeps: Fehler: keine Abhängigkeitsinformationen für /usr/lib/libcgpio.so.0 (verwendet von debian/nut-server/lib/nut/myupsdriver) gefunden
(auf Deutsch : Er konnte meinen Treiber (myupsdriver.c) nicht bauen, weil das Shared Object (libcgpio.so.0) nicht als Abhängigkeit angegeben wurde.
Warum schlägt der Build-Prozess dennoch fehl, obwohl ich ihm mit -d mitgeteilt habe, dass er die Abhängigkeiten ignorieren soll ?

Vielen Dank und viele Grüße !

JTH
Moderator
Beiträge: 3077
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Paket ohne Abhängigkeitsprüfung erstellen

Beitrag von JTH » 20.01.2020 18:12:06

debbeginner hat geschrieben: ↑ zum Beitrag ↑
20.01.2020 15:18:30
Warum schlägt der Build-Prozess dennoch fehl, obwohl ich ihm mit -d mitgeteilt habe, dass er die Abhängigkeiten ignorieren soll ?
dpkg-buildpackge stellt normalerweise sicher, dass alle Buildabhängigkeiten, die per Build-Depends in debian/control gelistet sind, erfüllt sind. Mit -d oder --no-check-builddeps tut es das nicht.

Je nach dem, wie du dein Paket baust, wird dpkg-shlibdeps (meist indirekt durch dh_shlibdeps) aufgerufen. dpkg-shlibdeps sucht für alle gebauten Binaries oder shared Libraries, in welchem Paket aus dem Debian-Repository die jeweils verlinkten shared Libraries enthalten sind – man muss sie damit in debian/control nicht von Hand als Depends auflisten. Das scheitert bei dir, libcgpio.so gibts nicht im Debian-Repo. Du kannst dh_shlibdeps sagen, dass myupsdriver ignoriert werden soll (man dh_shlibdeps und man debhelper), oder von Hand angeben, wo die libcgpio.so (man dpkg-shlibdeps) drinsteckt.
Manchmal bekannt als Just (another) Terminal Hacker.

KP97
Beiträge: 3701
Registriert: 01.02.2013 15:07:36

Re: Paket ohne Abhängigkeitsprüfung erstellen

Beitrag von KP97 » 20.01.2020 20:20:21

Was ist denn aus Deinem ersten Beitrag geworden
viewtopic.php?f=34&t=176108
Ist das der gleiche Ablauf, und falls ja, warum hast Du einen neuen Beitrag erstellt? Das macht die Sache nicht übersichtlicher.
@JTH hat es schon sehr gut erklärt, zusätzlich noch einen Hinweis:
Mit dem Befehl dpkg-buildpackage kann man Pakete in ein Repo laden, den nutzen auch die offiziellen Maintainer.
Du willst doch nur ein einziges Paket für Deinen Rechner zuhause bauen, oder irre ich mich da?
Schau Dir das Paket checkinstall an, das ist wesentlich unkomplizierter und baut ebenfalls ein .deb.

debbeginner
Beiträge: 6
Registriert: 15.01.2020 08:09:11

Re: Paket ohne Abhängigkeitsprüfung erstellen

Beitrag von debbeginner » 21.01.2020 06:31:27

Hallo,

zunächst einmal : Vielen Dank für eure Beiträge ! Mein erster Paketbau hat funktioniert und zwar hab ich mir das Originalpaket runtergeladen, entpackt und dann erst mit "

Code: Alles auswählen

dpkg-source -x
" entpackt und mit "

Code: Alles auswählen

dpkg-buildpackage -us -uc"
neu gebaut (als "Babystep").
st das der gleiche Ablauf, und falls ja, warum hast Du einen neuen Beitrag erstellt? Das macht die Sache nicht übersichtlicher.
Ja, ist derselbe Ablauf und selbes Thema. Sorry, kommt nicht wieder vor.
Du willst doch nur ein einziges Paket für Deinen Rechner zuhause bauen, oder irre ich mich da?
Im ersten Step stimmt das. Wenn alles korrekt funktioniert, wird es an den Maintainer gehen.
oder von Hand angeben, wo die libcgpio.so (man dpkg-shlibdeps) drinsteckt.
. Genau das möchte ich, nur weiß ich dazu den Befehl nicht, da ich ja, für den Paketbau,

Code: Alles auswählen

dpkg-buildpackage
und nicht

Code: Alles auswählen

dpkg-shlibs
brauche, oder ?

Mit welchem Befehl kann ich das Verzeichnis, in dem die Shared Lib liegt angeben und das Paket somit bauen ?

Vielen Dank !

debbeginner
Beiträge: 6
Registriert: 15.01.2020 08:09:11

Re: Paket ohne Abhängigkeitsprüfung erstellen

Beitrag von debbeginner » 09.04.2020 07:43:16

dpkg-buildpackge stellt normalerweise sicher, dass alle Buildabhängigkeiten, die per Build-Depends in debian/control gelistet sind, erfüllt sind. Mit -d oder --no-check-builddeps tut es das nicht.

Je nach dem, wie du dein Paket baust, wird dpkg-shlibdeps (meist indirekt durch dh_shlibdeps) aufgerufen. dpkg-shlibdeps sucht für alle gebauten Binaries oder shared Libraries, in welchem Paket aus dem Debian-Repository die jeweils verlinkten shared Libraries enthalten sind – man muss sie damit in debian/control nicht von Hand als Depends auflisten. Das scheitert bei dir, libcgpio.so gibts nicht im Debian-Repo. Du kannst dh_shlibdeps sagen, dass myupsdriver ignoriert werden soll (man dh_shlibdeps und man debhelper), oder von Hand angeben, wo die libcgpio.so (man dpkg-shlibdeps) drinsteckt.
Nach oben
Das hat mir sehr geholfen ! Leider finde ich in der debian/rules keinen Eintrag mit dh_shlibdeps.
Kann ich den Eintrag "dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info" einfach am Ende der rules mit hinzufügen ?

Vielen Dank !

P.S. : Unten die rules :

Code: Alles auswählen

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk
include /usr/share/cdbs/1/class/python-module.mk

include /usr/share/cdbs/1/rules/autoreconf.mk
# We cannot call autoreconf -f -i as it updates INSTALL which is used for doc
# generation
DEB_DH_AUTORECONF_ARGS = --as-needed

DEB_HOST_ARCH_OS := $(shell dpkg-architecture -qDEB_HOST_ARCH_OS 2>/dev/null)

# List any files which are not installed
include /usr/share/cdbs/1/rules/utils.mk
common-binary-post-install-arch:: list-missing

DEB_BUILD_MAINT_OPTIONS=hardening=+all
DEB_LDFLAGS_MAINT_APPEND=-Wl,-z,defs -Wl,-O1 -Wl,--as-needed
include /usr/share/dpkg/buildflags.mk

DEB_CONFIGURE_PREFIX      :=
DEB_CONFIGURE_SYSCONFDIR  := /etc/nut
DEB_CONFIGURE_INCLUDEDIR  := /usr/include
DEB_CONFIGURE_MANDIR      := /usr/share/man
DEB_CONFIGURE_EXTRA_FLAGS := --libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH) \
	                     --with-ssl --with-nss \
	                     --with-cgi \
	                     --with-dev \
	                     --enable-static \
	                     --with-statepath=/var/run/nut \
	                     --with-altpidpath=/var/run/nut \
	                     --with-drvpath=/lib/nut \
	                     --with-cgipath=/usr/lib/cgi-bin/nut \
	                     --with-htmlpath=/usr/share/nut/www \
	                     --with-pidpath=/var/run/nut \
	                     --datadir=/usr/share/nut \
	                     --with-pkgconfig-dir=/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig \
	                     --with-user=nut --with-group=nut

ifeq (linux,$(DEB_HOST_ARCH_OS))
  DEB_CONFIGURE_EXTRA_FLAGS+=--with-udev-dir=/lib/udev --with-systemdsystemunitdir=/lib/systemd/system
endif

# only build documentation if asciidoc is installed
ifneq ($(shell which asciidoc),)
  DEB_CONFIGURE_EXTRA_FLAGS+=--with-doc=html-chunked,pdf
endif

common-install-arch::
	# install the bash completion script
	mkdir -p $(CURDIR)/debian/tmp/usr/share/bash-completion/completions/
	cp $(CURDIR)/scripts/misc/nut.bash_completion \
		$(CURDIR)/debian/tmp/usr/share/bash-completion/completions/nut

	# install the avahi service file
	mkdir -p $(CURDIR)/debian/tmp/etc/avahi/services
	cp $(CURDIR)/scripts/avahi/nut.service \
		$(CURDIR)/debian/tmp/etc/avahi/services

	# install Augeas lenses
	mkdir -p $(CURDIR)/debian/tmp/usr/share/augeas/lenses/dist/tests
	cp $(CURDIR)/scripts/augeas/*.aug \
		$(CURDIR)/debian/tmp/usr/share/augeas/lenses/dist/
	cp $(CURDIR)/scripts/augeas/tests/test_nut.aug \
		$(CURDIR)/debian/tmp/usr/share/augeas/lenses/dist/tests/

	# install the default configuration
	for f in $(CURDIR)/debian/tmp/etc/nut/*; do           \
		nf=`basename $${f} | sed 's/\(.*\).sample/\1/'`;  \
		mv $${f} $(CURDIR)/debian/tmp/etc/nut/$${nf};  \
	done

	# Move -dev file to /usr
	mv $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/libupsclient.a \
		$(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libupsclient.a
	rm -f $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/libupsclient.so
	ln -s /lib/$(DEB_HOST_MULTIARCH)/libupsclient.so.4 \
		$(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libupsclient.so
	mv $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/libnutclient.a \
		$(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libnutclient.a
	rm -f $(CURDIR)/debian/tmp/lib/$(DEB_HOST_MULTIARCH)/libnutclient.so
	ln -s /lib/$(DEB_HOST_MULTIARCH)/libnutclient.so.0 \
		$(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libnutclient.so

	# Move daemons and install wrappers
	mv $(CURDIR)/debian/tmp/sbin/upsmon $(CURDIR)/debian/tmp/lib/nut/upsmon
	mv $(CURDIR)/debian/tmp/sbin/upsd $(CURDIR)/debian/tmp/lib/nut/upsd
	install -m 0755 debian/local/upsmon $(CURDIR)/debian/tmp/sbin/upsmon
	install -m 0755 debian/local/upsd $(CURDIR)/debian/tmp/sbin/upsd

	# Install systemd files only on systems where it's supported
ifeq (linux,$(DEB_HOST_ARCH_OS))
	install -m 644 -D $(CURDIR)/debian/tmp/lib/systemd/system/nut-monitor.service \
		$(CURDIR)/debian/nut-client/lib/systemd/system/nut-monitor.service
	install -D $(CURDIR)/debian/tmp/lib/systemd/system-shutdown/nutshutdown \
		$(CURDIR)/debian/nut-server/lib/systemd/system-shutdown/nutshutdown
	install -m 644 -D $(CURDIR)/debian/tmp/lib/systemd/system/nut-driver.service \
		$(CURDIR)/debian/nut-server/lib/systemd/system/nut-driver.service
	install -m 644 -D $(CURDIR)/debian/tmp/lib/systemd/system/nut-server.service \
		$(CURDIR)/debian/nut-server/lib/systemd/system/nut-server.service

	# Add a symlink to mask the LSB initscript
	ln -s nut-monitor.service $(CURDIR)/debian/nut-client/lib/systemd/system/nut-client.service
	ln -s /dev/null $(CURDIR)/debian/nut-client/lib/systemd/system/ups-monitor.service

	# Install tmpfiles config file to create /run/nut directory
	install -m 644 -D $(CURDIR)/debian/nut-client.tmpfiles \
		$(CURDIR)/debian/nut-client/usr/lib/tmpfiles.d/nut-client.conf
	install -m 644 -D $(CURDIR)/debian/nut-server.tmpfiles \
		$(CURDIR)/debian/nut-server/usr/lib/tmpfiles.d/nut-server.conf
endif

	# install apport hooks
	install -D -m 644 debian/source_nut.py $(CURDIR)/debian/tmp/usr/share/apport/package-hooks/source_nut-server.py
	install -D -m 644 debian/source_nut.py $(CURDIR)/debian/tmp/usr/share/apport/package-hooks/source_nut-client.py


common-install-indep::
	#install documentation
	mkdir -p $(CURDIR)/debian/tmp/usr/share/doc/nut-doc/pdf
	mkdir -p $(CURDIR)/debian/tmp/usr/share/doc/nut-doc/html
	cp $(CURDIR)/docs/*.pdf $(CURDIR)/debian/tmp/usr/share/doc/nut-doc/pdf
	cp $(CURDIR)/docs/FAQ.html $(CURDIR)/debian/tmp/usr/share/doc/nut-doc/html

	for f in $(CURDIR)/docs/*.chunked/; do \
		nf=`basename $${f} | sed 's/\(.*\)\.chunked/\1/'`; \
		cp -a $${f} $(CURDIR)/debian/tmp/usr/share/doc/nut-doc/html/$${nf}/; \
	done

	# install apport hooks
	install -D -m 644 debian/source_nut.py $(CURDIR)/debian/tmp/usr/share/apport/package-hooks/source_nut.py


binary-install/nut-monitor::
	dh_python2 -pnut-monitor

DEB_DH_INSTALLINIT_ARGS_nut-server := --init-script=nut-server --restart-after-upgrade --error-handler=handle_start_failure
DEB_DH_INSTALLINIT_ARGS_nut-client := --init-script=nut-client --restart-after-upgrade --error-handler=handle_start_failure
DEB_DH_SYSTEMD_START_ARGS_nut-server := --restart-after-upgrade
DEB_DH_SYSTEMD_START_ARGS_nut-client := --restart-after-upgrade
DEB_DH_COMPRESS_ARGS_nut-doc := -X.pdf

ifeq (linux,$(DEB_HOST_ARCH_OS))
# for Debian
  DEB_DH_GENCONTROL_ARGS := -- -Vudev="udev (>= 0.124-1)"
# for Ubuntu
# DEB_DH_GENCONTROL_ARGS := -- -Vudev="udev (>= 136-1)"
endif

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Paket ohne Abhängigkeitsprüfung erstellen

Beitrag von eggy » 09.04.2020 10:51:51

wenn man die automatischen rulesfiles nimmt, kann man einfach in der rules das da ergänzen:

Code: Alles auswählen

override_dh_shlibdeps:
    dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info

Antworten