Installation von Debian Packages
Installation von Debian Packages
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
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
Re: Installation von Debian Packages
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.
- 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
Warum dann nicht einfach das repo durch eine Datei /etc/apt/sources.list.d/xxx.list den Paketquellen hinzufügen?Generic1 hat geschrieben:Diese Debian- Packages werden dann aus einem Repository heruntergeladen und installiert.
Nicht zwangsläufig, du kannst ja auch verschiedene Funktionen in einzelne Dateien auslagern und diese mit source in die Hauptdatei einlesen.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.
Re: Installation von Debian Packages
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: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.
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.Generic1 hat geschrieben:Bei einem Rollback sollen die alten installierten Packete wieder hergestellt werden.
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.
Re: Installation von Debian Packages
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.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 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
- 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
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.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.
Re: Installation von Debian Packages
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:Ich installiere übrigends nur eigenen Debian- Packages und keine offiziellen.
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.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.
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?
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: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.
Ein C-Programm mit ein paar system-calls kann natürlich das gleiche wie ein Shellscript.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.
Re: Installation von Debian Packages
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
<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
Re: Installation von Debian Packages
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?: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>
Code: Alles auswählen
<root>
<deb>MyDeb1.deb MyDeb2.deb MyDeb3.deb</deb>
</root>
(ziemlich dreckiges) Beispiel:Generic1 hat geschrieben:daraus will ich eben die 3 Debs mittels ShellScript- Boardmitteln herausbekommen.
Code: Alles auswählen
egrep -o '[^>]+\.deb' DATEI
Und was ist die Quelle deiner Pakete? Liegen die auf irgendeinem Server oder schon auf deiner Festplatte? Kennst du die URL bzw. den Pfad?Generic1 hat geschrieben:Ich hab übriegends nur eigene Debian- Packages, welche ich installieren will, keine offiziellen.
Falls nicht, stehen diese Informationen mit in der XML-Datei?
Re: Installation von Debian Packages
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!!
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!!
Re: Installation von Debian Packages
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
Hätte vielleicht noch jemand einen Vorschlag, wie ich das am Besten machen kann?
lg
Generic1
-
- Beiträge: 1213
- Registriert: 09.11.2007 13:25:57
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Installation von Debian Packages
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...
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.
Re: Installation von Debian Packages
Bis hierher würde ich es genauso machen.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).
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.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
-
- Beiträge: 1213
- Registriert: 09.11.2007 13:25:57
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Installation von Debian Packages
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.)
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.)
Re: Installation von Debian Packages
Besten Dank!!
-
- Beiträge: 1213
- Registriert: 09.11.2007 13:25:57
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Installation von Debian Packages
Hier mal wie man eine solche Liste pflegen könnte.hikaru hat geschrieben: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.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
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