[erledigt]Paketierung:ausrollen v. Datei/Verzeichnisstruktur

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
chu-i
Beiträge: 157
Registriert: 10.11.2005 23:29:01
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Berlin

[erledigt]Paketierung:ausrollen v. Datei/Verzeichnisstruktur

Beitrag von chu-i » 12.11.2009 12:13:08

Hi@all,

ich möchte ein simples Paket bauen das einfach nur Verzeichnisse und Dateien anlegt, so wie es beim auspacken eines tarball ebenfalls passieren würde.
Hierzu bin ich nach diversen Anleitungen vorgegangen. Das Ergebnis ist ein Paket das keine meiner Daten enthält sondern nur die Standardeinträge.

Code: Alles auswählen

> dpkg-deb --content pakename_0.0.1_i386.deb

dpkg-buildpackage: binary only upload (no source included)
drwxr-xr-x root/root         0 2009-11-12 11:50 ./
drwxr-xr-x root/root         0 2009-11-12 11:50 ./usr/
drwxr-xr-x root/root         0 2009-11-12 11:50 ./usr/share/
drwxr-xr-x root/root         0 2009-11-12 11:50 ./usr/share/doc/
drwxr-xr-x root/root         0 2009-11-12 11:50 ./usr/share/doc/konfiguration/
-rw-r--r-- root/root       141 2009-11-11 15:19 ./usr/share/doc/konfiguration/changelog.gz
-rw-r--r-- root/root      1597 2009-11-11 15:19 ./usr/share/doc/konfiguration/copyright
In der rules habe ich die drei Einträge mit $(MAKE) in der Zeile auskommentiert.
In die anderen Dateien bis auf die compat habe ich Infoeinträge (Name, eMail usw.) eingetragen

Meine Verzeichnisstruktur sieht so aus:

Code: Alles auswählen

paketname_0.0.1 --- |
                    |--- debian ---|
                                   | --- control
                                   | --- changelog
                                   | --- copyright
                                   | --- compat
                                   | --- rules
                                   | --- TESTVERZ --- |
                                                      | ---- TESTDATEI.TXT
Meine Daten habe ich schon in Verzeichnisse mit dem Paketnamen (mit&ohne Versionsnr.) gelegt, getart, Ebene hoch und wieder runter verschoben.
Ergebnis bleibt immer gleich, die data.tar.gz ist nur mit den Standardverzeichnissen gefüllt.

Ich baue das Paket ohne Fehlermeldungen im paketname_0.0.1 Verzeichnis mit dem Befehl

Code: Alles auswählen

dpkg-buildpackage -uc -us -b
Was mache ich falsch?

[EDIT]
Hi@all,

leider muss ich das Thema nochmal öffnen da die Lösung für mich dann doch nicht so ideal ist wie gedacht.

Wie erwähnt möchte ich eine ganze Verzeichnishierarchie mit diversen Unterverzeichnissen und Dateien per Paket ausrollen.
dh_installdirs erzeugt leider nur Verzeichnisse. Ich müsste also die gesamte Verzeichnisstruktur abziehen und per dh_installdirs erzeugen und zusätzlich noch alle Dateien wieder kopieren sowie die Rechte richtig setzten.

Gibt es keinen eleganteren Weg um eine "tar Datei"/ "Verzeichnisstruktur mit Dateien" auf einem System auszurollen?
[/EDIT]
Zuletzt geändert von chu-i am 22.03.2012 12:27:58, insgesamt 5-mal geändert.
Thx & cya Chu-i

„Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren.“
Benjamin Franklin (1706-1790†)

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: Paketierung: dpkg-buildpackage data.tar.gz ohne meine Daten

Beitrag von ThorstenS » 12.11.2009 14:36:09

du machst nichts falsch, sondern nur zu wenig ;-)

In der rules fehlt dir z.B.
dh_installdirs mit der passenden $PAKETNAME.dirs im debian-Ordner und entspr. copy bzw. install Aufrufe, damit die Dateien, die du ins Paket stecken willst, nach $(CURDIR)/debian/$PAKETNAME/jetzt/der/Pfad/und/Dateiname kopiert werden.

Ich empfehle dir mal in ein bestehendes source-Paket zu schauen:

Code: Alles auswählen

cd /usr/local/src/
apt-get source udev
cd udev*/debian
less rules
hth
/thorsten
P.S.
aptitude install tree und dann tree $FOLDER - das erzeugt das bessere ASCII-art :)

Benutzeravatar
chu-i
Beiträge: 157
Registriert: 10.11.2005 23:29:01
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Berlin

Re: Paketierung: dpkg-buildpackage data.tar.gz ohne meine Daten

Beitrag von chu-i » 16.11.2009 14:44:24

Ahh, man debhelper ... :)
Danke für die Hilfe!

PS: tree habe ich mir gleich mal gezogen. Ist wirklich viel hübscher. ;)

[EDIT]
Hi@all,

leider muss ich das Thema nochmal öffnen da die Lösung für mich dann doch nicht so ideal ist wie gedacht.

Wie erwähnt möchte ich eine ganze Verzeichnishierarchie mit diversen Unterverzeichnissen und Dateien per Paket ausrollen.
dh_installdirs erzeugt leider nur Verzeichnisse. Ich müsste also die gesamte Verzeichnisstruktur abziehen und per dh_installdirs erzeugen und zusätzlich noch alle Dateien wieder kopieren sowie die Rechte richtig setzten.

Gibt es keinen eleganteren Weg um eine "tar Datei"/ "Verzeichnisstruktur mit Dateien" auf einem System auszurollen?
[/EDIT]
Thx & cya Chu-i

„Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren.“
Benjamin Franklin (1706-1790†)

Benutzeravatar
chu-i
Beiträge: 157
Registriert: 10.11.2005 23:29:01
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Berlin

Re: Paketierung: dpkg-buildpackage data.tar.gz ohne meine Daten

Beitrag von chu-i » 25.11.2009 11:26:36

Nun habe ich jede einzelne Datei ohne führenden / in debian/<pakename>.install geschrieben.
Zusätzlich habe ich alle Dateien und Verzeichnisse (also die gesamte Baumstruktur) in debian/tmp gelegt.
Dann habe ich folgendes ausgeführt und einen Fehler erhalten.

Code: Alles auswählen

dpkg-buildpackage -uc -us -b
dpkg-buildpackage: set CFLAGS to default value: -g -O2
dpkg-buildpackage: set CPPFLAGS to default value: 
dpkg-buildpackage: set LDFLAGS to default value: -Wl,-Bsymbolic-functions
dpkg-buildpackage: set FFLAGS to default value: -g -O2
dpkg-buildpackage: set CXXFLAGS to default value: -g -O2
dpkg-buildpackage: source package konfiguration
dpkg-buildpackage: source version 0.0.2
dpkg-buildpackage: source changed by anonymous <anonym@himmel.de>
dpkg-buildpackage: host architecture i386
 debian/rules clean
dh_testdir
dh_testroot
rm -f build-stamp configure-stamp
# Add here commands to clean up after the build process.
dh_clean 
 debian/rules build
dh_testdir
# Add here commands to configure the package.
touch configure-stamp
dh_testdir
# Add here commands to compile the package.
#docbook-to-man debian/test.sgml > test.1
touch build-stamp
 debian/rules binary
dh_testdir
dh_testroot
dh_prep  
dh_installdirs
# Add here commands to install the package into debian/test.
dh_testdir
dh_testroot
dh_installchangelogs 
dh_installdocs
dh_installexamples
dh_install
cp: cannot stat `debian/tmp/sbin/skript.sh': No such file or directory
dh_install: command returned error code 256
make: *** [binary-arch] Error 1
dpkg-buildpackage: failure: debian/rules binary gave error exit status 2
Die Datei liegt vor dem ausführen von dpkg-buildpackage -uc -us -b am geforderten Ort (debian/tmp/sbin/skript.sh)
Inwieweit die rules das Verzeichnis löscht und deshalb es nicht findet kann ich schwer überprüfen.
Nach dem erfolglosen Durchlauf ist das Verzeichnis debian/tmp jedenfalls weg. :(
In der rules habe ich dh_install auskommentiert und alle drei ${MAKE} Einträge einkommentiert.

Habt ihr einen Tipp was ich falsch mache?
Thx & cya Chu-i

„Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren.“
Benjamin Franklin (1706-1790†)

Benutzeravatar
chu-i
Beiträge: 157
Registriert: 10.11.2005 23:29:01
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Berlin

Re: Paketierung: dh_install: command returned error code 256

Beitrag von chu-i » 26.11.2009 14:48:19

Mit einigem rum probieren und der manpage habe ich mein Problem gelöst. Falls es keinen eleganteren Weg gibt (das Schweigem im Walde suggeriert das ja), finde ich den Aufwand für das Ergebnis unpraktisch.

Also kurz meine Lösung:
debian/rules auf Änderungen gekürzt

Code: Alles auswählen

...

#	$(MAKE)

...

#	$(MAKE) clean

...

#	$(MAKE) DESTDIR=$(CURDIR)/debian/test install

...

binary-arch: install
	dh_testdir
	dh_testroot
#	dh_installchangelogs 
#	dh_installdocs
#	dh_installexamples
	dh_install --sourcedir=debian/<paketname>.dirs
#	dh_installmenu
#	dh_installdebconf
#	dh_installlogrotate
#	dh_installemacsen
#	dh_installpam
#	dh_installmime
#	dh_python
#	dh_installinit
#	dh_installcron
#	dh_installinfo
#	dh_installman
	dh_link firefox-3.5 /usr/bin/firefox
#	dh_strip
	dh_compress
	dh_fixperms
#	dh_perl
#	dh_makeshlibs
#	dh_installdeb
#	dh_shlibdeps
	dh_gencontrol
	dh_md5sums
	dh_builddeb
Angelegt habe ich unterhalb <paketname-version>/debian/ die Datei <paketname.install> und das Verzeichnis <paketname.dirs>.
dh_install schaut per default in die Datei <paketname.install> und erwartet dort eine Liste aller Dateien ohne führenden / aus dem Verzeichnis <paketname.dirs>.
Dieses Verzeichnis übergebe ich per Option (siehe Code oben) --sourcedir=debian/<paketname>.dirs an dh_install
Falls du jetzt noch Symbolische Links innerhalb deiner Verzeichnisstruktur hast, solltest du diese an dh_link übergeben (Syntax wie beim Befehl ln -s ...).

Alles in allem finde ich den Aufwand zu groß nur um eine Verzeichnisstruktur zu paketieren. Hinzu kommt noch ein bisschen Shellscripting um den Vorgang halbwegs komfortable und portable zu gestalten. :(
Thx & cya Chu-i

„Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren.“
Benjamin Franklin (1706-1790†)

chrisbra
Beiträge: 122
Registriert: 19.10.2005 09:36:09
Wohnort: Sachsen-Anhalt
Kontaktdaten:

Re: Paketierung: dh_install: command returned error code 256

Beitrag von chrisbra » 26.11.2009 20:48:31

chu-i hat geschrieben: Alles in allem finde ich den Aufwand zu groß nur um eine Verzeichnisstruktur zu paketieren. Hinzu kommt noch ein bisschen Shellscripting um den Vorgang halbwegs komfortable und portable zu gestalten. :(
Schau Dir mal epm an. Ist eine recht lässige Art Pakete zu erstellen. Ich hab das mal hier dokumentiert.
Meine Whishlist
:wq!

Benutzeravatar
chu-i
Beiträge: 157
Registriert: 10.11.2005 23:29:01
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Berlin

Re: ERLEDIGT Paketierung:ausrollen von Datei/Verzeichnisstruktur

Beitrag von chu-i » 11.01.2010 14:50:37

:D Das werde ich bei Gelegenheit mal testen.
Aktuell habe ich mir gezwungenermaßen freiwillig ein eigenes Skript gebaut.
Ließt sich aber gut.
Thx & cya Chu-i

„Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren.“
Benjamin Franklin (1706-1790†)

jhr-online
Beiträge: 2186
Registriert: 18.09.2005 15:52:02
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: ERLEDIGT Paketierung:ausrollen von Datei/Verzeichnisstruktur

Beitrag von jhr-online » 11.01.2010 15:58:02

Wenn das Paket für lenny oder später ist, nimmt dir debhelper 7 auch einiges ab. Ein debian/rules muss gerade bei so simplen Paketen nicht größer sein als drei Zeilen:

Code: Alles auswählen

#!/usr/bin/make -f

%:
        dh $@
Der Rest lässt sich recht simpel regeln. Wenn du nur ein (Binär-)Paket baust, einfach alle Dateien (oder Verzeichnisse), die du haben willst in debian/install lassen (mit Zielverzeichnis):

Code: Alles auswählen

datei1 usr/bin
verzeichnis2 usr/share/foo
Desktop: Intel Core2Quad Q8300 2.5GHz, 256GB SSD + 1 TB HDD, 8 GB RAM, Debian Sid, Kernel 3.13

fbartels
Beiträge: 326
Registriert: 20.08.2009 10:06:56
Kontaktdaten:

Re: ERLEDIGT Paketierung:ausrollen von Datei/Verzeichnisstruktur

Beitrag von fbartels » 12.01.2010 17:00:02

Wenn ich es richtig verstanden habe, dann willst du einfach nur eine gegebene Ordnerstruktur (mit Dateien) in eine .deb schieben, oder?

Wie wäre es denn mit folgender Lösung?
du legst eine control Datei an (kannst du wahrscheinlich von deinen alten versuchen kopieren)
~/paket/DEBIAN/control
dann kopierst du in ~/paket/ die Verzeichnisse die du anlegen willst, also ~/paket/usr/share/doc/konfiguration/changelog.gz etc
und baust schlussendlich mit dpbk-deb ein Paket daraus

Code: Alles auswählen

dpkg-deb -b ~paket/ build/
So mache ich das bei einem Paket, bei dem ich eine *.msi Datei in einem Verzeichnis aktualisiere.

Gruß Felix

Antworten