automatisierte source.list erweiterung

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Adryan
Beiträge: 17
Registriert: 17.11.2010 19:00:30

automatisierte source.list erweiterung

Beitrag von Adryan » 06.12.2010 11:29:04

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?

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

Re: automatisierte source.list erweiterung

Beitrag von hikaru » 06.12.2010 11:34:21

Code: Alles auswählen

echo DEINE ZEILE >> /etc/apt/sources.list
Wenn du nett bist prüfst du vorher ob die Zeile schon existiert.

Adryan
Beiträge: 17
Registriert: 17.11.2010 19:00:30

Re: automatisierte source.list erweiterung

Beitrag von Adryan » 06.12.2010 11:59:58

Hey cool, danke für deine schnelle Antwort

eine Frage hab ich:

Code: Alles auswählen

echo DEINE ZEILE >> /etc/apt/sources.list
"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
´

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 :D

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

Re: automatisierte source.list erweiterung

Beitrag von hikaru » 06.12.2010 12:29:32

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
Genau.
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 :D
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:

Code: Alles auswählen

grep -c 'DEINE ZEILE' /etc/apt/sources.list
In ein bash-Script verpackt könnte das so aussehen:

Code: Alles auswählen

if [ `grep -c 'DEINE ZEILE'` == 0 ]
then
  echo DEINE ZEILE >> /etc/apt/sources.list
fi

Adryan
Beiträge: 17
Registriert: 17.11.2010 19:00:30

Re: automatisierte source.list erweiterung

Beitrag von Adryan » 06.12.2010 12:45:55

hey hab tausend dank das ist ja geil.

und das scheint zu klappen :D

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
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:

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
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?

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

Re: automatisierte source.list erweiterung

Beitrag von hikaru » 06.12.2010 13:15:20

Adryan hat geschrieben:Was, wenn der Wer ==1 zurück kommt?
Dann wird die Zeile nicht hinzugefügt.
Adryan hat geschrieben: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
erreichen möchte ich, ist die Zeile vorhanden, dass er sie ausklammert.
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:

Code: Alles auswählen

grep -ce '^DEINE ZEILE' /etc/apt/sources.list
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?
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:Vielleicht in dem ich den Urbefehl, den eintrag in die sources.list wieder rückgängig mache?
Zeilen Löschen geht mit sed:

Code: Alles auswählen

sed -i '/DEINE ZEILE/d' /etc/apt/sources.list
Hierbei werden auch eventuelle auskommentierte Zeilen gelöscht.

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 ]
Der Dateiname muss noch angegeben werden:

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.

Adryan
Beiträge: 17
Registriert: 17.11.2010 19:00:30

Re: automatisierte source.list erweiterung

Beitrag von Adryan » 06.12.2010 13:19:23

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.

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

Re: automatisierte source.list erweiterung

Beitrag von hikaru » 06.12.2010 13:32:12

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:
Adryan hat geschrieben:echo "sources.list bearbeiten"
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 "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."
Adryan hat geschrieben:echo " Sun-Java wurde installiert"
Woher weißt du das alles?

Adryan
Beiträge: 17
Registriert: 17.11.2010 19:00:30

Re: automatisierte source.list erweiterung

Beitrag von Adryan » 06.12.2010 13:35:34

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.

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

Re: automatisierte source.list erweiterung

Beitrag von hikaru » 06.12.2010 13:40:27

Adryan hat geschrieben:die echo's sind für mich zum prüfen wie oder wo ein fehler auftaucht damit ich sehe was passiert.
Ok.
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:
Adryan hat geschrieben: echo " Sun-Java wurde installiert"
clear
Da hast du von dem echo nicht viel.

Adryan
Beiträge: 17
Registriert: 17.11.2010 19:00:30

Re: automatisierte source.list erweiterung

Beitrag von Adryan » 06.12.2010 13:59:01

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.

Benutzeravatar
shoening
Beiträge: 914
Registriert: 28.01.2005 21:05:59
Lizenz eigener Beiträge: MIT Lizenz

Re: automatisierte source.list erweiterung

Beitrag von shoening » 06.12.2010 16:01:51

Hi,

anstelle die

Code: Alles auswählen

/etc/apt/sources.list
zu manipulieren, kann man auch ergaenzungen im Verzeichnis

Code: Alles auswählen

/etc/apt/source.list.d/
unterbringen - siehe Ausschnitt aus der Manpage (man 5 sources.list):
SOURCES.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.
Ciao
Stefan
Bürokratie kann man nur durch ihre Anwendung bekämpfen.

Adryan
Beiträge: 17
Registriert: 17.11.2010 19:00:30

Re: automatisierte source.list erweiterung

Beitrag von Adryan » 07.12.2010 09:56:43

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.

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

Re: automatisierte source.list erweiterung

Beitrag von hikaru » 07.12.2010 10:00:32

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.

Antworten