[gelöst]Paketierung mit dh7 - wie rekursiv Dateien aufnehmen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

[gelöst]Paketierung mit dh7 - wie rekursiv Dateien aufnehmen

Beitrag von ThorstenS » 20.07.2011 07:08:24

Hi Leute,
ich bin gerade dabei unsere Debianpakete aufzuräumen und stelle dabei auf dh7 um. Eine debian/rules, die wie folgt ausschaut, find ich klasse
debian/rules

Code: Alles auswählen

#!/usr/bin/make -f
%:
	dh $@
Um nun meine Dateien an Ort und Stelle zu bekommen, kann ich die debian/$PAKETNAME.dirs und debian/$PAKETNAME.install benutzen und dort meine Dateien/Ordner aufführen. Soweit so gut.

Jetzt möchte ich aber nicht bei jeder neuen Datei/Ordner die eben erwähnten dirs/install Dateien anfassen, sondern dh sagen, dass es den obersten Ordner nimmt und komplett zum Ziel XY kopiert.

Meine bisherige Lösung (z.B. für webmin Pakete) schaut seit Jahren so aus:

debian/rules

Code: Alles auswählen

install: build
  dh_testdir
  dh_testroot
  dh_clean -k
  dh_installdirs usr/share/webmin/$PAKETNAME
  dest=`pwd`/debian/$PAKETNAME/usr/share/webmin/$PAKETNAME ; \
  cp -a *.cgi module.info `find * -type d -prune ! -name debian -print` $$dest
  find $(CURDIR)/debian/$PAKETNAME/ -type d -iname .svn -print0 | xargs -0 rm -fr
  
  #set permissions (too paranoid?)
  find debian/$PAKETNAME -type f -print0 | xargs -0 chmod 644
  find debian/$PAKETNAME -type f \( -name '*.pl' -o -name '*.cgi' \) -exec grep -q '#!/usr/bin/perl' {} \; -print0 | xargs -0 chmod 755
Sollte ich für dh_install ein override angeben und wieder die find-Lösung nutzen - oder gibt es eine elegantere Lösung?
Zuletzt geändert von ThorstenS am 20.07.2011 08:44:58, insgesamt 1-mal geändert.

lemak
Beiträge: 1213
Registriert: 09.11.2007 13:25:57
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Paketierung mit dh7 - wie rekursiv Dateien aufnehmen

Beitrag von lemak » 20.07.2011 08:36:45

Hallo,

du kannst auch sowas in der install-Datei angeben:

$ cat ./pgk.install
etc/* /etc/pkg

Das kopiert das komplette Verz. Ggf. kann auch der Wildcard weg (Also: Verz. können angeben werden). Ist es das was du meinst? Die Quell-Pfade sind relativ vom aktuellen Verz.

Ein override_dh_install target ist IMO nur nötig falls Du den Aufruf von dh_install abpassen willst. Also die commandline-optionen entsprechend setzen/anpassen musst. Was nicht nötig sein sollte.
//Edit: Du kannst so natürlich das ganze auch selbst implementieren.

//Edit: Soweit ich das in Erinnerung habe sind das im Grunde install(1) Aufrufe. Also arg viel mit Filtern ist da nicht...

MfG i
Zuletzt geändert von lemak am 20.07.2011 09:57:50, insgesamt 2-mal geändert.

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

Re: Paketierung mit dh7 - wie rekursiv Dateien aufnehmen

Beitrag von ThorstenS » 20.07.2011 08:44:35

Danke Steffen, daran hab ich gar nicht gedacht *patsch*
Es bleibt aber evtl. noch ein (bisher nicht erwähntes) Problemchen, dass ich die .svn Verzeichnisse natürlich nicht im Paket haben möchte.
Dafür _müßte_ svn-buildpackage aber automatisch sorgen.

Ich denke mit deiner Lösung kann ich leben.

thx! =)

lemak
Beiträge: 1213
Registriert: 09.11.2007 13:25:57
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Paketierung mit dh7 - wie rekursiv Dateien aufnehmen

Beitrag von lemak » 20.07.2011 08:59:29

ThorstenS hat geschrieben:Dafür _müßte_ svn-buildpackage aber automatisch sorgen.
Wenn nicht so etwas in der Art:

Code: Alles auswählen

override_dh_install:
   dh_install
   find debian/$PAKETNAME -type d -name ".svn" -delete

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

Re: [gelöst]Paketierung mit dh7 - wie rekursiv Dateien aufne

Beitrag von ThorstenS » 20.07.2011 09:27:03

Danke dir, eine schöne Lösung.
An so einen Einsatzzweck dachte ich, als ich oben das mit dem override angesprochen habe,

Zwischenzeitlich habe ich mir auch noch ein Script gehackt, welches (initial) die dirs und install anlegt. Evtl. hilfts ja jemandem:

Code: Alles auswählen

#!/bin/bash

while getopts ":p:h" opt; do
  case $opt in
    p)
      #vom übergebenen Prefix den führenden slash abschneiden, der wird in der $PACKAGENAME.install nicht gebraucht
      PREFIX=${OPTARG##/}
      ;;
    h)
      echo -e "Dieses Script befüllt die Dateien debian/PAKETNAME.{dirs,install} \
mit Inhalt.\nEs kennt den Schalter -p für einen Installationsprefix, 
falls du nicht die komplette Ordnerhirachie nachgebildet hast." >&2
      exit 0
      ;;
    :)
      echo "Die Option: -$OPTARG erwartet einen Prefix Pfad mit abschliessendem /" >&2
      exit 1
      ;;
    \?)
      echo "Die Option -$OPTARG kenne ich nicht -sry." >&2
      exit 1
      ;;
  esac
done

# Falls kein Prefix übergeben wurde, initialisieren wir die Variable wenigstens
PREFIX=${PREFIX:-}

# stehen wir im richtigen Pfad?
if [ ! -e ./debian/control ]; then
  echo "Ich sehe kein debian Verzeichnis. Ist das wirklich ein Paketordner hier?"
  exit 1
fi

# funktioniert nur bei Source-Paketen, die lediglich ein binary Paket ausspucken:
PACKAGENAME=$(egrep ^Source debian/control | cut -d\  -f2)

# Jetzt die $PACKAGENAME.dirs anlegen/überschreiben:
find * -name .svn -prune -o -name debian -prune -o -type d -print | sed -e "s#^./##" > ./debian/$PACKAGENAME.dirs

# Jetzt die $PACKAGENAME.install anlegen/überschreiben:
find  -name .svn -prune -o -name debian -prune -o -type f -print | sed -e "s#^./\(.*\)#\1 $PREFIX\1#;s,[^/]*$,," > ./debian/$PACKAGENAME.install
echo "Die beiden Dateien ./debian/$PACKAGENAME.dirs und ./debian/$PACKAGENAME.install sind angelegt."

Antworten