automatisierte source.list erweiterung
automatisierte source.list erweiterung
Hallo an alle,
ich stehe vor einem großen Problem.
Ich selbst und viele Freunde benutzen Debian und sind mehr als zufrieden damit. Wir nutzen für unseren Verbund aus verschiedenen Gründen einen Java Proxy den wir auch beibehalten möchten.
Am Wochenende kam mir die Idee, ein Installationsscript zu erstellen, doch habe ich ein Problem.
Um eine komplette instalklationsroutine erstellen zu können, müßte ich die source.list um einen Eintrag erweitern damit ich Java installieren. Dies würde ich sehr gerne automatisieren.
Vielleicht gehe ich mal etwas ins Detail:
Erstellung eines installscriptes. (install.sh)
install.sh per wget auf den Server holen
bash install sh zum ausführen des Scriptes
Aufgabe der install.sh:
1.) update der source.list
2.) Verzeichniss Struktur erstellen
3.) Paket herunterladen
4.) Paket entpacken
5.) Paket umbennen
6.) Rechte vergabe
Diese 6 Punkte sind soweit auch fertig und funktionieren.
Damit meine install.sh nun aber auch zu einem ende kommt, müßte ich mir Java installieren auf dem Server, dazu müßte ich die source.list anpassen, dies ist auf der shell ja kein Problem mit Nano oder Pico oder Vi
Perfekt wäre es, wenn ich der install.sh sagen könnte, öffne die source.list, füge als letzte Zeile deb xyz hinzu, speichere die source.list
Aber, da ich weder Debian noch Linus gelernt habe, habe ich keine Ahnung wie ich das umsetzen soll.
Kann mir da bitte jemand helfen?
ich stehe vor einem großen Problem.
Ich selbst und viele Freunde benutzen Debian und sind mehr als zufrieden damit. Wir nutzen für unseren Verbund aus verschiedenen Gründen einen Java Proxy den wir auch beibehalten möchten.
Am Wochenende kam mir die Idee, ein Installationsscript zu erstellen, doch habe ich ein Problem.
Um eine komplette instalklationsroutine erstellen zu können, müßte ich die source.list um einen Eintrag erweitern damit ich Java installieren. Dies würde ich sehr gerne automatisieren.
Vielleicht gehe ich mal etwas ins Detail:
Erstellung eines installscriptes. (install.sh)
install.sh per wget auf den Server holen
bash install sh zum ausführen des Scriptes
Aufgabe der install.sh:
1.) update der source.list
2.) Verzeichniss Struktur erstellen
3.) Paket herunterladen
4.) Paket entpacken
5.) Paket umbennen
6.) Rechte vergabe
Diese 6 Punkte sind soweit auch fertig und funktionieren.
Damit meine install.sh nun aber auch zu einem ende kommt, müßte ich mir Java installieren auf dem Server, dazu müßte ich die source.list anpassen, dies ist auf der shell ja kein Problem mit Nano oder Pico oder Vi
Perfekt wäre es, wenn ich der install.sh sagen könnte, öffne die source.list, füge als letzte Zeile deb xyz hinzu, speichere die source.list
Aber, da ich weder Debian noch Linus gelernt habe, habe ich keine Ahnung wie ich das umsetzen soll.
Kann mir da bitte jemand helfen?
Re: automatisierte source.list erweiterung
Code: Alles auswählen
echo DEINE ZEILE >> /etc/apt/sources.list
Re: automatisierte source.list erweiterung
Hey cool, danke für deine schnelle Antwort
eine Frage hab ich:
"DEINE ZEILE" steht hier wohl für zum Beispiel deb xyz
Also wäre das dann so:
´
hab ich das so richtig auf dem schrim?
Eine Frage noch, wie kann ich den Prüfen ob die Zeile bereits in der source.list vorhanden ist? Möchte diese natürlich nicht zu bomben mit einträgen und sicher bin ich nett
eine Frage hab ich:
Code: Alles auswählen
echo DEINE ZEILE >> /etc/apt/sources.list
Also wäre das dann so:
Code: Alles auswählen
echo deb xyz / stable >> /etc/apt/sources.list
hab ich das so richtig auf dem schrim?
Eine Frage noch, wie kann ich den Prüfen ob die Zeile bereits in der source.list vorhanden ist? Möchte diese natürlich nicht zu bomben mit einträgen und sicher bin ich nett
Re: automatisierte source.list erweiterung
Genau.Adryan hat geschrieben:"DEINE ZEILE" steht hier wohl für zum Beispiel deb xyz
Also wäre das dann so:
Code: Alles auswählen
echo deb xyz / stable >> /etc/apt/sources.list
Strings aus einer Datei kannst du mit grep extrahieren. Wenn du nur prüfen willst ob eine Zeile existiert macht sich -c ganz gut. Dabei werden die Trefferzeilen gezählt. Ist der Zähler=0 wurde der String nicht gefunden:Adryan hat geschrieben:Eine Frage noch, wie kann ich den Prüfen ob die Zeile bereits in der source.list vorhanden ist? Möchte diese natürlich nicht zu bomben mit einträgen und sicher bin ich nett
Code: Alles auswählen
grep -c 'DEINE ZEILE' /etc/apt/sources.list
Code: Alles auswählen
if [ `grep -c 'DEINE ZEILE'` == 0 ]
then
echo DEINE ZEILE >> /etc/apt/sources.list
fi
Re: automatisierte source.list erweiterung
hey hab tausend dank das ist ja geil.
und das scheint zu klappen
Eine Frage nun da mir etwas aufgefallen ist.
du benutzt hier if, ok soweit logisch, ist der Paramter ==0 der zurückkommt, setz er nun meine Zeile ein.
Was, wenn der Wer ==1 zurück kommt?
Kann ich dann hingehen und sagen:
erreichen möchte ich, ist die Zeile vorhanden, dass er sie ausklammert.
Hintergrund ist, für Java muss ich eine DEB aus non stable öffnen.
Nun möchte ich jedoch nicht, wenn ein User sein System upgradet, er sich alles mit non stable vollhaut, kann ich das in einer form sicherstellen?
Vielleicht in dem ich den Urbefehl, den eintrag in die sources.list wieder rückgängig mache?
und das scheint zu klappen
Eine Frage nun da mir etwas aufgefallen ist.
Code: Alles auswählen
if [ `grep -c 'DEINE ZEILE'` == 0 ]
then
echo DEINE ZEILE >> /etc/apt/sources.list
fi
Was, wenn der Wer ==1 zurück kommt?
Kann ich dann hingehen und sagen:
Code: Alles auswählen
if [ `grep -c 'DEINE ZEILE'` == 0 ]
then
echo DEINE ZEILE >> /etc/apt/sources.list
if [`grep -c 'DEINE ZEILE'´ ==1]
then
echo #DEINE ZEILE >> /etc/apt/scources.lis
fi
Hintergrund ist, für Java muss ich eine DEB aus non stable öffnen.
Nun möchte ich jedoch nicht, wenn ein User sein System upgradet, er sich alles mit non stable vollhaut, kann ich das in einer form sicherstellen?
Vielleicht in dem ich den Urbefehl, den eintrag in die sources.list wieder rückgängig mache?
Re: automatisierte source.list erweiterung
Dann wird die Zeile nicht hinzugefügt.Adryan hat geschrieben:Was, wenn der Wer ==1 zurück kommt?
Nein, das funktioniert so nicht. In deinem Beispiel würde er beim Vorhandensein von genau einmal DEINE ZEILE #DEINE ZEILE anhängen, die bestehende aber nicht verändern. Wenn wir schon an dem Punkt mit auskommentierten Zeilen sind musst du oben streng genommen sogar prüfen, ob nicht schon ein # vor der Zeile steht, denn in ihrer jetzigen Form würde die auskommentierte Zeile auch erfasst werden. Die Alternative könnte so aussehen:Adryan hat geschrieben:Kann ich dann hingehen und sagen:
erreichen möchte ich, ist die Zeile vorhanden, dass er sie ausklammert.Code: Alles auswählen
if [ `grep -c 'DEINE ZEILE'` == 0 ] then echo DEINE ZEILE >> /etc/apt/sources.list if [`grep -c 'DEINE ZEILE'´ ==1] then echo #DEINE ZEILE >> /etc/apt/scources.lis fi
Code: Alles auswählen
grep -ce '^DEINE ZEILE' /etc/apt/sources.list
Ich kann dir nicht ganz folgen. Was ist "non stable"? Testing? Unstable? Ein Releasename? Kannst du mal bitte die genaue Zeile posten damit wir auch wirklich beide über das selbe reden?Adryan hat geschrieben:Hintergrund ist, für Java muss ich eine DEB aus non stable öffnen.
Nun möchte ich jedoch nicht, wenn ein User sein System upgradet, er sich alles mit non stable vollhaut, kann ich das in einer form sicherstellen?
Zeilen Löschen geht mit sed:Adryan hat geschrieben:Vielleicht in dem ich den Urbefehl, den eintrag in die sources.list wieder rückgängig mache?
Code: Alles auswählen
sed -i '/DEINE ZEILE/d' /etc/apt/sources.list
PS:
man PROGRAMMNAME ist dein Freund und Reguläre Ausdrücke sind auch ganz nützlich.
Edit:
Das kann übrigens nicht funktionieren, da er nicht weiß auf welcher Datei zu arbeiten ist:
Code: Alles auswählen
if [ `grep -c 'DEINE ZEILE'` == 0 ]
Code: Alles auswählen
if [ `grep -c 'DEINE ZEILE' /etc/apt/sources.list` == 0 ]
Zuletzt geändert von hikaru am 06.12.2010 13:20:14, insgesamt 1-mal geändert.
Re: automatisierte source.list erweiterung
Ok ist vielleicht wirklich besser wenn jemand mit mehr Anhnung der Materie sich das mal anschaut, das ist mein derzeitiger Stand des Scriptes, bei der ausführung hänge ich jedoch bereits in den ersten Zeilen
Code: Alles auswählen
wurde entfernt
Zuletzt geändert von Adryan am 06.12.2010 13:59:36, insgesamt 1-mal geändert.
Re: automatisierte source.list erweiterung
Ich vermute du bekommst den Fehler genau dort wo in meinem letzten Beitrag der Edit ansetzt.
Rein technisch sollte dein Script danach funktionieren, aber ich verstehe den Sinn nicht wirklich. Wer Lenny betreibt wird es auch bereits in seiner sources.list haben. Das brauchst du also nicht extra hinzufügen. Und jemand der es nicht drin hat möchte das bestimmt nicht automatisch geändert haben. Ich dachte es geht um das Repository eines Drittanbieters.
Noch ein paar Sachen zur Form:
Die sleep-Anweisungen kannst du dir mMn alle sparen.
Ein paar der Auschriften sind auch etwas unglücklich:
Rein technisch sollte dein Script danach funktionieren, aber ich verstehe den Sinn nicht wirklich. Wer Lenny betreibt wird es auch bereits in seiner sources.list haben. Das brauchst du also nicht extra hinzufügen. Und jemand der es nicht drin hat möchte das bestimmt nicht automatisch geändert haben. Ich dachte es geht um das Repository eines Drittanbieters.
Noch ein paar Sachen zur Form:
Die sleep-Anweisungen kannst du dir mMn alle sparen.
Ein paar der Auschriften sind auch etwas unglücklich:
Warum kommt die Ausschrift außerhalb der if-Abfrage? Die sources.list wird doch im Normalfall gar nicht angefasst. Da irritiert die Auschrift.Adryan hat geschrieben:echo "sources.list bearbeiten"
Adryan hat geschrieben:echo "update erfolgreich"
Adryan hat geschrieben:echo " Unzip erfolgreich installiert"
Adryan hat geschrieben:echo " download erfolgreich"
Adryan hat geschrieben:echo " entpacken fertig"
Adryan hat geschrieben:echo " kopieren erfolgreich."
Woher weißt du das alles?Adryan hat geschrieben:echo " Sun-Java wurde installiert"
Re: automatisierte source.list erweiterung
die echo's sind für mich zum prüfen wie oder wo ein fehler auftaucht damit ich sehe was passiert.
ein tippfehler in Zeile 30 zum bespiel, heisst ja nicht, dass das ganze script falsch ist.
falls aber ein fehler vorhanden ist, dachte ich mir, wüsste ich so, wo ich im script ansetzen muss.
ein tippfehler in Zeile 30 zum bespiel, heisst ja nicht, dass das ganze script falsch ist.
falls aber ein fehler vorhanden ist, dachte ich mir, wüsste ich so, wo ich im script ansetzen muss.
Re: automatisierte source.list erweiterung
Ok.Adryan hat geschrieben:die echo's sind für mich zum prüfen wie oder wo ein fehler auftaucht damit ich sehe was passiert.
Aber wozu die ganzen sleeps? Das Script trödelt sage und schreibe 38 Sekunden nur rum ohne irgendwas zu machen.
Solche Konstrukte sind auch eher wenig sinnvoll:
Da hast du von dem echo nicht viel.Adryan hat geschrieben: echo " Sun-Java wurde installiert"
clear
Re: automatisierte source.list erweiterung
Ja das stimmt allerdingsist mir eben auch aufgefallen.
soweit rennt das script nun auch...
Danke dir für deine Hilfe.
Nun kann ich die echos und spleeps entfernen.
Mir ging es ja nur dadrum, dass ich einen Ansatzpunkt habe, da ich wirklich kein Linux Profi bin.
soweit rennt das script nun auch...
Danke dir für deine Hilfe.
Nun kann ich die echos und spleeps entfernen.
Mir ging es ja nur dadrum, dass ich einen Ansatzpunkt habe, da ich wirklich kein Linux Profi bin.
Re: automatisierte source.list erweiterung
Hi,
anstelle die zu manipulieren, kann man auch ergaenzungen im Verzeichnis
unterbringen - siehe Ausschnitt aus der Manpage (man 5 sources.list):
Stefan
anstelle die
Code: Alles auswählen
/etc/apt/sources.list
Code: Alles auswählen
/etc/apt/source.list.d/
CiaoSOURCES.LIST.D
The /etc/apt/sources.list.d directory provides a way to add sources.list entries in separate files. The
format is the same as for the regular sources.list file. File names need to end with .list and may only
contain letters (a-z and A-Z), digits (0-9), underscore (_), hyphen (-) and period (.) characters. Otherwise
they will be silently ignored.
Stefan
Bürokratie kann man nur durch ihre Anwendung bekämpfen.
Re: automatisierte source.list erweiterung
danke für den HInweis, den Gedanken hatte ich auch schon.
Problem ist, ich weiss nicht immer was der User an seinem System schon gemacht hat
Was wenn es die Datei schon gibt? Ausversehen überschreiben?
der Gedanke ist aber nicht uninteressant.
Problem ist, ich weiss nicht immer was der User an seinem System schon gemacht hat
Was wenn es die Datei schon gibt? Ausversehen überschreiben?
der Gedanke ist aber nicht uninteressant.
Re: automatisierte source.list erweiterung
Du musst die Datei ja nicht überschreiben. Inzwischen weißt du ja wie du Dateien manipulieren und auch ihre Existenz prüfen kannst. Ich würde vorschlagen als nächstes gehst du mal in einen Buchladen und kaufst dir ein Buch über Bash-Scripting.