Installation von Debian Packages

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Generic1
Beiträge: 78
Registriert: 15.11.2012 13:41:28

Installation von Debian Packages

Beitrag von Generic1 » 15.11.2012 13:51:31

Hallo,

ich möchte auf meinem Debian- Rechner eine Software schreiben, welche zuerst ein XML- File downloaded, in dem URLs zu Debian-Packages stehen. Diese Debian- Packages werden dann aus einem Repository heruntergeladen und installiert.
Bei einem Rollback sollen die alten installierten Packete wieder hergestellt werden.
Meine Frage wäre jetzt, in welcher Technologie würdet ihr das machen, mit ShellScripts, mit C (Linux-Programmierung), ...?
Es kommt noch dazu, dass das Ganze dann auch auf CentOS (mit installiertem dpkg und dpkg-devel) funktionieren soll.

Was mich an sh stört ist, dass das ein ziemlich langes File wird und wenn man das ganze aufteilt, dann werden es mehrere Files, die undurchsichtig über Pipes kommunizieren.
Wenn man das Ganze in C macht, dann hat man ein Binary, dass man installieren kann und Modular aufbauen kann mit einzelnen *.c und *.h- Files. In C ist halt der Aufwand größer und ich weiß auch nicht genau, ob ich aus einem C- Programm *.deb's installieren kann und auch ein Rollback machen kann, wenn etwas schief geht.

Was sagt ihr, wie man das am Saubersten und besten lösen kann.
Besten Dank,
Generic1

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: Installation von Debian Packages

Beitrag von uname » 15.11.2012 14:00:27

Kann das ganze die Paketverwaltung nicht selbst. Z.B. verschiedene Paketquellen und dann sowas wie APT-Pinning. Auch könnte man vielleicht DEB-Metapakete mit Abhängigkeiten bauen. Kenn mich damit aber nicht wirklich aus.

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: Installation von Debian Packages

Beitrag von r900 » 15.11.2012 14:11:47

Generic1 hat geschrieben:Diese Debian- Packages werden dann aus einem Repository heruntergeladen und installiert.
Warum dann nicht einfach das repo durch eine Datei /etc/apt/sources.list.d/xxx.list den Paketquellen hinzufügen?
Generic1 hat geschrieben: Was mich an sh stört ist, dass das ein ziemlich langes File wird und wenn man das ganze aufteilt, dann werden es mehrere Files, die undurchsichtig über Pipes kommunizieren.
Nicht zwangsläufig, du kannst ja auch verschiedene Funktionen in einzelne Dateien auslagern und diese mit source in die Hauptdatei einlesen.

Benutzeravatar
hikaru
Moderator
Beiträge: 13911
Registriert: 09.04.2008 12:48:59

Re: Installation von Debian Packages

Beitrag von hikaru » 15.11.2012 14:37:00

Generic1 hat geschrieben:ich möchte auf meinem Debian- Rechner eine Software schreiben, welche zuerst ein XML- File downloaded, in dem URLs zu Debian-Packages stehen. Diese Debian- Packages werden dann aus einem Repository heruntergeladen und installiert.
Das ist einfach. Statt der XML-Datei erstellst du einfach ein Metapaket das alle deine gewünschten Pakete als Abhängigkeiten hat und installierst das über ein Script. Vorher muss dein Script natürlich noch dein Repository in die sources.list eintragen. Im einfachsten Fall ist das ein Zweizeiler.
Generic1 hat geschrieben:Bei einem Rollback sollen die alten installierten Packete wieder hergestellt werden.
Hier wird es vermutlich haarig. Falls deine Software offizielle Debianpakete durch eigene ersetzt musst du diese Ersetzung natürlich bei der Deinstallation wieder rückgängig machen.
Dabei treten folgende Probleme auf:
Um die offiziellen Pakete bei der Installation durch deine eigenen zu ersetzen müssen deine eigenen Pakete sich entweder als höhere Paketversionen der offiziellen Pakete ausgeben oder mit diesen in Konflikt stehen ("conflicts"), sie aber bereitstellen ("provides").

Wenn sie sich als höhere Versionen ausgeben musst du erstens darauf achten die Versionen so zu wählen dass sie nicht wiederum durch offizielle Updates rausgeschmissen werden und zweitens bei der Deinstallation faktisch ein Downgrade auf die offizielle Version machen was heikel werden kann.

Bei der conflicts-provides-Variante musst du bei der Deinstallation wieder die ursprünglichen Pakete installieren. Das ist eigentlich einfach, denn aus den provides-Daten weißt du ja wie die ursprünglichen Pakete hießen. Allerdings bekommst du unter Umständen Probleme wenn die Deinstallation erst nach einem Releasewechsel passiert und das Originalpaket inzwischen umbenannt wurde (eigentlich sollten hier aber Übergangspakete genug Sicherheit geben). Die eigentliche Arbeit besteht hier aber in der Erfassung welche der ersetzten Pakete automatisch und welche manuell installiert wurden. Diese Information musst du bei der Installation deiner Pakete erfassen, kannst dich bei der Deinstallation aber nicht daruf verlassen, da sich der Status inzwischen geändert haben könnte.
Hier müsstest du prüfen ob sich der Status deiner Ersatzpakete geändert hat.
Es könnte auch sein, dass nach der Installation deiner Software bestimmte ersetzte Pakete gar nicht mehr gebraucht werden die vor der Installation vorhanden waren. In dem Fall musst du dafür sorgen dass du deine Pakete selbst entfernst statt sie zurückzuersetzen oder zumindest als automatisch installiert markierst, so das sie beim nächsten autoremove entfernt werden.

Du musst also deinem Deinstaller rudimentäre Fähigkeiten einer Paketverwaltung beibringen. Das ist alles für sich betrachtet nicht schwierig, könnte aber je nach Komplexität aufwendig werden. Im Grunde sitzt du hier im gleichen Boot wie jeder Fremdquellenanbieter. Und was z.B. passiert wenn man einem System das z.B. viel Debian-Multimedia-Zeug enthält die Fremdquelle entzieht ist hier öfter mal Thema.

Ich würde das ganze vermutlich als Shellscript schreiben.

Generic1
Beiträge: 78
Registriert: 15.11.2012 13:41:28

Re: Installation von Debian Packages

Beitrag von Generic1 » 15.11.2012 15:08:58

hikaru hat geschrieben:
Generic1 hat geschrieben:ich möchte auf meinem Debian- Rechner eine Software schreiben, welche zuerst ein XML- File downloaded, in dem URLs zu Debian-Packages stehen. Diese Debian- Packages werden dann aus einem Repository heruntergeladen und installiert.
Das ist einfach. Statt der XML-Datei erstellst du einfach ein Metapaket das alle deine gewünschten Pakete als Abhängigkeiten hat und installierst das über ein Script. Vorher muss dein Script natürlich noch dein Repository in die sources.list eintragen. Im einfachsten Fall ist das ein Zweizeiler.

Das Problem ist, dass es ein XML- File sein muss, welches über einen WebService abgeholt wird, da kommt eben dann ein XML daher welches geparst wird.
Ich hab eher zu einem C- Programm tendiert, bin jetzt aber nicht sicher, da ihr das mit einem Shellscript machen würdet.

Mir erscheint ein C- Programm übersichtliche, aber ich muss mir die Methoden- Aufteilung mal ansehen von ShellScript.
Ich installiere übrigends nur eigenen Debian- Packages und keine offiziellen.

>> Vorher muss dein Script natürlich noch dein Repository in die sources.list eintragen.
Ist das eingentlich Pflicht, dass ich das so mache, funktionierts sonst nicht,
Ich war nämlich der Meinung dass ich die Debian- Packages mit apt-get ... downloade und dann einfach installiere, ihne sources.list.

Besten Dank!!
lg

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: Installation von Debian Packages

Beitrag von r900 » 15.11.2012 15:22:47

Generic1 hat geschrieben:Ich war nämlich der Meinung dass ich die Debian- Packages mit apt-get ... downloade und dann einfach installiere, ihne sources.list.
Damit apt-get überhaupt Pakete herunterladen kann muss doch ein entsprechender Eintrag in der sources.list stehen. Sonst müsstest du alle Pakete mit wget oder ähnlichem holen.

Benutzeravatar
hikaru
Moderator
Beiträge: 13911
Registriert: 09.04.2008 12:48:59

Re: Installation von Debian Packages

Beitrag von hikaru » 15.11.2012 15:33:12

Generic1 hat geschrieben:Ich installiere übrigends nur eigenen Debian- Packages und keine offiziellen.
Und du must auch keine offiziellen Pakete (z.B. Libs) durch eigene austauschen, d.h. durch deine Software werden in keinem Fall offizielle Debianpakete deinstalliert? Das würde die Sache radikal vereinfachen.
Generic1 hat geschrieben:>> Vorher muss dein Script natürlich noch dein Repository in die sources.list eintragen.
Ist das eingentlich Pflicht, dass ich das so mache, funktionierts sonst nicht,
Ich war nämlich der Meinung dass ich die Debian- Packages mit apt-get ... downloade und dann einfach installiere, ihne sources.list.
Irgendwie musst du ja an die Pakete rankommen. Die kannst du entweder manuell (bzw. mit wget/curl etc.) herunterladen und dann mit dpkg installieren oder du holst sie mit apt(itude) aus einem Repository. Dieses Repository müsste natürlich in der sources.list stehen was bedeutet dass du ein eigenes Repository dort erst eintragen müsstest.
Ich bin mir aber im Moment nicht sicher ob ich dich richtig verstehe. Hast du eigene selbsterstellte Debianpakete die du installieren wilst, oder willst du nur Pakete aus dem offiziellen Repository installieren?
Generic1 hat geschrieben:Das Problem ist, dass es ein XML- File sein muss, welches über einen WebService abgeholt wird, da kommt eben dann ein XML daher welches geparst wird.
Ok, auch das sollte kein Problem sein. Aber da hätte ich gern noch präzisere Informationen was du genau vor hast. Sonst kann ich nur raten.
Generic1 hat geschrieben:Ich hab eher zu einem C- Programm tendiert, bin jetzt aber nicht sicher, da ihr das mit einem Shellscript machen würdet.
Ein C-Programm mit ein paar system-calls kann natürlich das gleiche wie ein Shellscript.

Generic1
Beiträge: 78
Registriert: 15.11.2012 13:41:28

Re: Installation von Debian Packages

Beitrag von Generic1 » 15.11.2012 15:59:57

Ich bekomm z.B. ein XML file das so aussieht:

<root>
<deb>MyDeb1.deb</deb>
<deb>MyDeb2.deb</deb>
<deb>MyDeb3.deb</deb>
</root>

daraus will ich eben die 3 Debs mittels ShellScript- Boardmitteln herausbekommen.
Ich hab übrigends nur eigene Debian- Packages, welche ich installieren will, keine offiziellen.
lg

Benutzeravatar
hikaru
Moderator
Beiträge: 13911
Registriert: 09.04.2008 12:48:59

Re: Installation von Debian Packages

Beitrag von hikaru » 15.11.2012 16:35:44

Generic1 hat geschrieben:Ich bekomm z.B. ein XML file das so aussieht:

<root>
<deb>MyDeb1.deb</deb>
<deb>MyDeb2.deb</deb>
<deb>MyDeb3.deb</deb>
</root>
D.h. du hast auf das Aussehen der Datei keinen Einfluss? Oder könntest du auch dafür sorgen dass die Datei z.B. so aussieht?:

Code: Alles auswählen

<root>
    <deb>MyDeb1.deb MyDeb2.deb MyDeb3.deb</deb>
</root>
Generic1 hat geschrieben:daraus will ich eben die 3 Debs mittels ShellScript- Boardmitteln herausbekommen.
(ziemlich dreckiges) Beispiel:

Code: Alles auswählen

egrep -o '[^>]+\.deb' DATEI
Generic1 hat geschrieben:Ich hab übriegends nur eigene Debian- Packages, welche ich installieren will, keine offiziellen.
Und was ist die Quelle deiner Pakete? Liegen die auf irgendeinem Server oder schon auf deiner Festplatte? Kennst du die URL bzw. den Pfad?
Falls nicht, stehen diese Informationen mit in der XML-Datei?

Generic1
Beiträge: 78
Registriert: 15.11.2012 13:41:28

Re: Installation von Debian Packages

Beitrag von Generic1 » 15.11.2012 16:46:23

Besten Dank erstmal für deine Antworten!!!
Ich hab schon Einfluß auf das Aussehen des XML-Files aber mir wärs am liebsten, wenn es aus der Struktur klar herausgeht, dass es eigene Debs sind.
Es kann nämlich auch sein, dass es so aussieht:

<root>
<deb>http://IP:PORT/MyDeb1.deb</deb>
<deb>http://IP:PORT/MyDeb2.deb</deb>
<deb>http://IP:PORT/MyDeb3.deb</deb>
<config>http://IP:PORT/MeinConfigFile.xml</config>
</root>

d.h. die 3 deb's und das Config- file gehören zusammen.
http://IP:PORT/ zeigt dann auf mein Repository und die 3 deb's möchte ich dann runterladen und installieren.

Mit wget http://ANDEREIP:PORT/OBERESXMLFile.xml lade ich mir mal das obere XML herunter und dann möchte ich dieses XML eben parsen und die deb- URLs in ein Array schreiben und auch die config URLs in ein Array.

Ist das möglich und wie könnte ich das machen, ich hab leider nur basic wissen in ShellScript (ich hoff es wird von tag zu Tag mehr :-))

vielen Dank für die Hilfe!!

Generic1
Beiträge: 78
Registriert: 15.11.2012 13:41:28

Re: Installation von Debian Packages

Beitrag von Generic1 » 16.11.2012 08:52:56

Ist also nicht so leicht da zu machen, mit awk und sed komm ich da nicht so richtig weiter.
Hätte vielleicht noch jemand einen Vorschlag, wie ich das am Besten machen kann?

lg
Generic1

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

Re: Installation von Debian Packages

Beitrag von lemak » 16.11.2012 10:12:17

Mal eine Idee als Alternative.

1. Paktauswahl speichen.
2. Eine plain-text Datei mit den URLs zu den Paketen (eine je Zeile) an wget übergeben und diese in eine Verz. kopieren (cd DIR && wget -i DATEI). Das kann auch geschehen indem zuerst eine Liste aller Listen mit den Debian-Paketen kopiert wird...
3. Die Pakete können dann mit dpkg installiert werden (dpkg -R -i DIR). Hier kann nun statt der einzelnen Pakete ein Verz. angegeben werden, aus dem alle Pakete installiert werden (rekursiv). Ggf. anschließend ein apt-get -f install o.ä. (unter Debian).
4. Paketauswahl wiederherstellen.


1. und 4. könnten so realisiert werden:

1. Kopie der Paketauswahl erstellen: dpkg --get-selections >meine_auswahl
4. Die in 1. erstelle Paketauswahl mit folgenden Befehlen installieren: dpkg --clear-selections && dpkg --set-selections <meine_auswahl Aus der dpkg Handbuchseite: Beachten Sie, dass dies nichts wirklich installiert oder entfernt, sondern lediglich den Auswahlzustand der angeforderten Pakete setzt. Sie werden eine andere Anwendung benötigen, um die angeforderten Pakete tatsächlich herunterzuladen und zu installieren. Führen Sie beispielsweise apt-get dselect-upgrade aus.


PS: Scheint mir aber auch eher eine unkonventionelle Idee zu sein...
Zuletzt geändert von lemak am 16.11.2012 15:22:03, insgesamt 1-mal geändert.

Benutzeravatar
hikaru
Moderator
Beiträge: 13911
Registriert: 09.04.2008 12:48:59

Re: Installation von Debian Packages

Beitrag von hikaru » 16.11.2012 10:32:14

up hat geschrieben:Mal eine Idee als Alternative.

1. Paktauswahl speichen.
2. Eine plain-text Datei mit den URLs zu den Paketen (eine je Zeile) an wget übergeben und diese in eine Verz. kopieren (cd DIR && wget -i DATEI). Das kann auch geschehen indem zuerst eine Liste aller Listen mit den Debian-Paketen kopiert wird...
3. Die Pakete können dann mit dpkg installiert werden (dpkg -R -i DIR). Hier kann nun statt der einzelnen Pakete ein Verz. angegeben werden aus dem alle Pakete installiert werden (rekursiv). Ggf. anschließend ein apt-get -f install o.ä. (unter Debian).
Bis hierher würde ich es genauso machen.
up hat geschrieben:4. Paketauswahl wiederherstellen.


1. und 4. könnten so realisiert werden:

1. Kopie der Paketauswahl erstellen: dpkg --get-selections >meine_auswahl
4. Die in 1. erstelle Paketauswahl mit folgenden Befehlen installieren: dpkg --clear-selections && dpkg --set-selections <meine_auswahl
Hier gibt es aber Probleme wenn zwischen der Installation und Deinstallation der eigenen Software andere Pakete installiert oder deinstalliert wurden. Daher muss man sich bei der Installation der eigenen Pakete merken welche das waren und hinterher auch gezielt diese wieder deinstallieren.

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

Re: Installation von Debian Packages

Beitrag von lemak » 16.11.2012 10:42:00

Stimmt, das ist wircklich nur was fürs Backup und Restore.

Eine Liste pflegen macht es vllt etwas aufwändiger, ist aber ganz bestimmt der richtige Lösungsansatz.

Man könnte sich auch überlegen, wie man diese Pakete markieren kann. Dann könnte man diese bei Bedarf suchen. (Aber so tief stecke ich in der Paketverwaltung auch nicht drin.)

Generic1
Beiträge: 78
Registriert: 15.11.2012 13:41:28

Re: Installation von Debian Packages

Beitrag von Generic1 » 16.11.2012 12:35:45

Besten Dank!!

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

Re: Installation von Debian Packages

Beitrag von lemak » 16.11.2012 12:48:47

Generic1 hat geschrieben:Ist also nicht so leicht da zu machen, mit awk und sed komm ich da nicht so richtig weiter.
Es gibt Programme wie Debianxml2 und Debianxml2rfc, welche XML in ein zeilen-basiertes Format konvertieren können.

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

Re: Installation von Debian Packages

Beitrag von lemak » 16.11.2012 19:40:48

hikaru hat geschrieben:
up hat geschrieben:4. Paketauswahl wiederherstellen.

1. und 4. könnten so realisiert werden:

1. Kopie der Paketauswahl erstellen: dpkg --get-selections >meine_auswahl
4. Die in 1. erstelle Paketauswahl mit folgenden Befehlen installieren: dpkg --clear-selections && dpkg --set-selections <meine_auswahl
Hier gibt es aber Probleme wenn zwischen der Installation und Deinstallation der eigenen Software andere Pakete installiert oder deinstalliert wurden. Daher muss man sich bei der Installation der eigenen Pakete merken welche das waren und hinterher auch gezielt diese wieder deinstallieren.
Hier mal wie man eine solche Liste pflegen könnte.

Code: Alles auswählen

meine_auswahl=/var/local/meine_auswahl
touch $meine_auswahl
find DIR -name "*.deb" -exec dpkg -f "{}" Package \; | cat $meine_auswahl - | uniq > $meine_auswahl
PS: Wenn es unter CentOS kein apt-get oä. gibt, kann man auch mit dpkg -r od. -P Pakete entfernen.

Antworten