Samstag, 26. Mai 2012, 04:35

Du bist nicht angemeldet.



Shinx

ist zu Gast bei Freunden.

  • »Shinx« ist der Autor dieses Themas

Beiträge: 16

Architektur: 32-bit

  • Private Nachricht senden

1

Dienstag, 10. April 2007, 20:09

Skript zur automatischen Installation von Programmen

Hallo!

Angenommen man muss ubuntu auf mehreren Rechnern installieren und dabei immer die gleichen Programme zusätzlich installieren bzw. so Sachen wie die sources.list erweitern usw.
Kann man da nicht ein Skript schreiben, dass die ganzen Terminal-Eingaben für einen erledigt?
Wie sieht so ein Skript aus und welche Skriptsprache ist sinnvoll?

Gruß

Shinx

ezazazel

The Supporter

Beiträge: 719

Ubuntu: 11.10

Kernel: 3.0.0-14-generic

Architektur: 32-bit

  • Private Nachricht senden

2

Dienstag, 10. April 2007, 20:21

würde ein shell script bauen; ist schnell und einfach erledigt. eigentlich brauchst du keine verzweigungen, also genügt es die Befehle nacheinander durch das script aufrufen zu lassen. Wichtig: starte es als sudo, sonnst wirst du wenig Freude haben.

Also:

Quellcode

1
2
3
4
5
#! /bin/bash
echo "deb soundso" >> /etc/apt/sources.list &&
apt-get update &&
apt-get install paketvonsoundso
echo "Script durchgelaufen"

und so weiter und so fort...
Hier noch ein kleiner Tipp

Zitat

Befehl1 && Befehl2 ....Befehl2 wird nur ausgeführt, wenn Befehl1 erfolgreich war
Befehl1 || Befehl2 ....Befehl2 wird nur ausgeführt, wenn Befehl1 nicht erfolgreich war

Alternativ kannst du es aber auch mittels Monodevelop und C# machen :D
in Main() weist du dann so etwas in der Art zu

Quellcode

1
2
3
4
string ipaddress = this.comboboxServerIP.ActiveText;
string mountpoint = this.entryMountPoint.Text;
string command = "gksu mount " + ipaddress + ":/home/share " + mountpoint;
System.Diagnostics.Process.Start(command + "2 >" + errormsg);

Das kannst du dann mit graphischen Spielereien ausschmücken.
Natürlich kannst du auch die Befehle über ein File einlesen, das geht über den StreamReader.

Also Möglichkeiten sind derer viele...
Si non confectus, non reficiat (If it's not broken, don't fix it)
Shuttle XPC SD39P2; Intel Core2Duo 6420; Samsung T166 SATA II 3,5" 500GB; Gainward Bliss 8600GT PCX SilentFx, Cinergy T USB XS hybrid && MSI Wind Nettop && Toshiba Portege M700 && Acer Aspire One

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »ezazazel« (10. April 2007, 20:42)


Shinx

ist zu Gast bei Freunden.

  • »Shinx« ist der Autor dieses Themas

Beiträge: 16

Architektur: 32-bit

  • Private Nachricht senden

3

Dienstag, 10. April 2007, 20:56

Also beim shell-script komme ich noch einigermaßen mit, aber bei dem danach... keine ahnung was du meinst ^^

Neue Fragen von mir:

Wie legt man die Datei für ein solches script an? (endung?)
Wie führe ich die Datei dann aus?
Kann ich auch eine Datei aus dem Internet laden und dann installieren? z.b. einen Treiber?
Gibts irgendwo ein HowTo für Shell-Scripts oder eine Befehlssammlung oder sonst irgendwelche nützlichen Seiten für meine Bedürfnisse? Vielleicht auch nicht nur für dieses eine Script, dass ich mir vorgenommen habe.

ezazazel

The Supporter

Beiträge: 719

Ubuntu: 11.10

Kernel: 3.0.0-14-generic

Architektur: 32-bit

  • Private Nachricht senden

4

Dienstag, 10. April 2007, 21:04

1. Endung ist egal, wir arbeiten ja nicht mit Windows

Quellcode

1
touch myinstallscript
//legt nur eine neue Datei an
oder

Quellcode

1
gedit myinstallscript
Editor
oder

Quellcode

1
nano myinstallscript
Editor
oder

Quellcode

1
vim myinstallscript
Editor für "gute" Leute

2.

Quellcode

1
 sudo sh ./myinstallscript

vorausgesetzt die Datei ist dort wo du bist also demselben Verzeichnis

3.
Probiers mal mit dem Befehl

Quellcode

1
wget


4.Wer suchet der findet
http://www.google.com/search?hl=de&q=bas…&btnG=Suche&lr=
Si non confectus, non reficiat (If it's not broken, don't fix it)
Shuttle XPC SD39P2; Intel Core2Duo 6420; Samsung T166 SATA II 3,5" 500GB; Gainward Bliss 8600GT PCX SilentFx, Cinergy T USB XS hybrid && MSI Wind Nettop && Toshiba Portege M700 && Acer Aspire One

Kopfgeldjaeger

ist zu Gast bei Freunden.

Beiträge: 44

Kernel: 2.6.22 / .25

Architektur: 32-bit

  • Private Nachricht senden

5

Dienstag, 10. April 2007, 21:06

Zitat

Original von Shinx
Also beim shell-script komme ich noch einigermaßen mit, aber bei dem danach... keine ahnung was du meinst ^^

Neue Fragen von mir:

Wie legt man die Datei für ein solches script an? (endung?)
Wie führe ich die Datei dann aus?
Kann ich auch eine Datei aus dem Internet laden und dann installieren? z.b. einen Treiber?
Gibts irgendwo ein HowTo für Shell-Scripts oder eine Befehlssammlung oder sonst irgendwelche nützlichen Seiten für meine Bedürfnisse? Vielleicht auch nicht nur für dieses eine Script, dass ich mir vorgenommen habe.

Als Endung kannst du entweder .sh nehmen, .keinendung, .wasweißich oder einfach weglassen
Dateien runterladen kannst du mit wget[ wget "http://eine.seite.tld/down/l/oad/driba.bin ]
Das Skript kannste mit sh skript.keinendung starten, oder mit "chmod +x skript" ausführbar machen und dann ./skript ... Eigentlich is das gar nicht so schwer ;)
Ich bin zwar nicht so der Fan der Syntax von Bashskripten, aber manchmal sind sie halt schon praktisch..

edit: 2l8

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Kopfgeldjaeger« (10. April 2007, 21:06)


Easyy-S

Boardgrafiker

Beiträge: 2 987

Ubuntu: 12.04

Kernel: generic

Desktop: GNOME Shell

Architektur: 64-bit

Danksagungen: 3 / 1

  • Private Nachricht senden

6

Mittwoch, 11. April 2007, 06:32

RE: Skript zur automatischen Installation von Programmen

Zitat

Original von Shinx
Angenommen man muss ubuntu auf mehreren Rechnern installieren und dabei immer die gleichen Programme zusätzlich installieren bzw. so Sachen wie die sources.list erweitern usw.


Genau das machen basslord und ich gerade. Im thread zu Automatix2 haben wir bereits unseren Feisty-Optimizer erwähnt.
Der erfüllt genau diese Anforderungen und hat sogar ein GUI :D
Easyy-S

Mein pubkey

Dein eigener UbuntuFreunde-Avatar: hier - Dein UbuntuFreunde-Banner: hier

Shinx

ist zu Gast bei Freunden.

  • »Shinx« ist der Autor dieses Themas

Beiträge: 16

Architektur: 32-bit

  • Private Nachricht senden

7

Mittwoch, 11. April 2007, 16:58

Das finde ich gut, das ihr sowas macht. Nur möchte ich sowas auch selber machen, da ihr z.B. bestimmt nicht die Installation meiner Wlan-Treiber mit einbaut ...

Außerdem möchte ich sowas selber machen, weil ich mich in solchen Sachen ein bisschen üben möchte, damit ich dann später mal auch etwas mehr kann, als nur die Programme anderer zu nutzen...

ezazazel

The Supporter

Beiträge: 719

Ubuntu: 11.10

Kernel: 3.0.0-14-generic

Architektur: 32-bit

  • Private Nachricht senden

8

Mittwoch, 11. April 2007, 17:23

Selber machen ist (fast) immer besser. Hast du genug Infos? Wenn ja, dann Thread auf gelöst setzen und dich u.U auch für die schnelle und ausgezeichnete Hilfe bedanken ;)
Si non confectus, non reficiat (If it's not broken, don't fix it)
Shuttle XPC SD39P2; Intel Core2Duo 6420; Samsung T166 SATA II 3,5" 500GB; Gainward Bliss 8600GT PCX SilentFx, Cinergy T USB XS hybrid && MSI Wind Nettop && Toshiba Portege M700 && Acer Aspire One

Shinx

ist zu Gast bei Freunden.

  • »Shinx« ist der Autor dieses Themas

Beiträge: 16

Architektur: 32-bit

  • Private Nachricht senden

9

Mittwoch, 11. April 2007, 17:30

Ich bedanke mich jetzt zwar schonmal für die schnelle, ausgezeichnete Hilfe ;) aber genug Infos habe ich noch nicht.

Wie kann ich mit diesem script eine Text-Datei ändern, ohne dass ich selber etwas reinschreiben muss?

Und ich kann auch keine Seite finden, die Kommandos wie wget auflistet. Aus sowas könnte man vielleicht auch ersehen, welche möglichkeiten man noch hat.

ezazazel

The Supporter

Beiträge: 719

Ubuntu: 11.10

Kernel: 3.0.0-14-generic

Architektur: 32-bit

  • Private Nachricht senden

10

Mittwoch, 11. April 2007, 17:37

1.

Quellcode

1
echo "deb soundso" >> /etc/apt/sources.list &&

Fügt etwas ans Ende der Datei hinzu
2.

Quellcode

1
wget http://www.kaiserjaeger.at/index.htm

Lädt die Datei index.htm in das Verzeichnis herunter
Und dann wäre da noch

Quellcode

1
wget --help
Si non confectus, non reficiat (If it's not broken, don't fix it)
Shuttle XPC SD39P2; Intel Core2Duo 6420; Samsung T166 SATA II 3,5" 500GB; Gainward Bliss 8600GT PCX SilentFx, Cinergy T USB XS hybrid && MSI Wind Nettop && Toshiba Portege M700 && Acer Aspire One

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »ezazazel« (11. April 2007, 17:39)


Shinx

ist zu Gast bei Freunden.

  • »Shinx« ist der Autor dieses Themas

Beiträge: 16

Architektur: 32-bit

  • Private Nachricht senden

11

Mittwoch, 11. April 2007, 17:48

Was ist, wenn ich nicht etwas an das Ende einer Datei anhängen möchte, sondern an das Ende jeder Zeile, in der etwas steht z.B. "universe multiverse" in sources.list?

ezazazel

The Supporter

Beiträge: 719

Ubuntu: 11.10

Kernel: 3.0.0-14-generic

Architektur: 32-bit

  • Private Nachricht senden

12

Mittwoch, 11. April 2007, 18:04

Quellcode

1
2
3
4
5
6
7
#!/bin/bash
dist=feisty
if  grep -q "http://ubuntu.inode.at/feisty ${dist} main" /etc/apt/sources.list
then
...
else
...

Damit kannst du abfragen ob eine Zeile so aussieht.

oder du machst es wie oben beschrieben mit den && und || Operatoren.

Es gibt auf script ebene da noch genug Möglichkeiten, ich würde da aber schon auf eine andere Programmiersprache wechseln, da ich auf der Shell nicht ganz so firm bin

Ich würde es so machen (in C#):
Mit StreamReader in ein Array einlesen, splitten und jede Zeile nach dem gesuchten string durchsuchen. Die Strings wieder dem Array zuweisen und in die Datei zurückschreiben.
StreamReader beenden und mit Process.Start einen externen Prozess aufrufen.
Klingt jetzt vielleicht etwas kompliziert, ist es aber schlussendlich gar nicht.
Si non confectus, non reficiat (If it's not broken, don't fix it)
Shuttle XPC SD39P2; Intel Core2Duo 6420; Samsung T166 SATA II 3,5" 500GB; Gainward Bliss 8600GT PCX SilentFx, Cinergy T USB XS hybrid && MSI Wind Nettop && Toshiba Portege M700 && Acer Aspire One

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »ezazazel« (11. April 2007, 18:09)


Shinx

ist zu Gast bei Freunden.

  • »Shinx« ist der Autor dieses Themas

Beiträge: 16

Architektur: 32-bit

  • Private Nachricht senden

13

Mittwoch, 11. April 2007, 18:33

Das ist einfach gesagt. Ich kenne mich nicht gut mit Programmiersprachen aus. Ich hab zwar schon bei vielen "Hello World" geschrieben und sowas, aber ich weiß nicht genug, um zu verstehen, wie man jetzt ein C-Programm mit StreamReader und Process.Start schreibt.

Es würde mir zwar stark helfen, wenn du mir ein Script mal in Bash und mal in C# schreiben könntest, indem es darum geht dieses Sources.list Problem zu behandeln und ein Quellcode aus dem Internet zu laden und zu installieren.


Aber wenn du dafür keine Zeit oder keine Lust hast, kann ich das verstehen und ich mach mich anderweitig schlau darüber.

ezazazel

The Supporter

Beiträge: 719

Ubuntu: 11.10

Kernel: 3.0.0-14-generic

Architektur: 32-bit

  • Private Nachricht senden

14

Mittwoch, 11. April 2007, 19:08

Beizeiten vielleicht. Mal schauen...
Si non confectus, non reficiat (If it's not broken, don't fix it)
Shuttle XPC SD39P2; Intel Core2Duo 6420; Samsung T166 SATA II 3,5" 500GB; Gainward Bliss 8600GT PCX SilentFx, Cinergy T USB XS hybrid && MSI Wind Nettop && Toshiba Portege M700 && Acer Aspire One

Shinx

ist zu Gast bei Freunden.

  • »Shinx« ist der Autor dieses Themas

Beiträge: 16

Architektur: 32-bit

  • Private Nachricht senden

15

Mittwoch, 11. April 2007, 19:17

OK ^^

Ich hab hier ein paar nützliche Sachen gefunden:
http://linuxseiten.kg-it.de/index.php?index=bash_Lektion_1
http://www.kg-it.de/linuxseiten/index.php?index=bash_befehle

Wie sieht es bei sowas eigentlich mit Perl aus? Kann man damit soetwas auch leicht schreiben?

ezazazel

The Supporter

Beiträge: 719

Ubuntu: 11.10

Kernel: 3.0.0-14-generic

Architektur: 32-bit

  • Private Nachricht senden

16

Mittwoch, 11. April 2007, 20:19

Also hier ein vereinfachtes Beispiel wie so etwas aussehen könnte.
Programm ist in C# realisiert und mit Monodevelop kompiliert.
Im Anhang sind die Sourcen als auch im Ordner Debug die ausführbare Datei. Muss mit

Quellcode

1
sudo ./SourcesChanger.exe

gestartet werden. Benötigt Mono, aber kein Wine...

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// project created on 11.04.2007 at 19:17
// Coded as sample for ubuntufreun.de
// by ezazazel

//Manipulation der sources.list und update/upgrade
//Verwendbar unter der GNU Lizenz
 
using System;
using System.IO;
using System.Diagnostics;

namespace SourcesChanger
{
	class MainClass
	{
		public static string pathofsourcelist = "/etc/apt/sources.list";
		
		public static void Main(string[] args)
		{
			#region Backup sources.list
			if (!File.Exists(pathofsourcelist + ".old"))
			{
				Process.Start("sudo cp " + pathofsourcelist + " " + pathofsourcelist + ".old");
			}
			else
			{
				Process.Start("sudo mv " + pathofsourcelist +".old" + " " + pathofsourcelist + ".old." + DateTime.Now.ToShortDateString()).WaitForExit();
				Process.Start("sudo cp " + pathofsourcelist + " " + pathofsourcelist + ".old").WaitForExit();
			}
			Console.WriteLine("sources.list backuped");
			#endregion
			
			//Einlesen der sources.list, verändern und abspeichern der veränderten Datei
			WriteNewSourceList(ReadSourceList());
			
			//Ausführen von Konsolenbefehlen
			ConsoleCommands();
		}
		
		//Einlesen der Sources List
		public static string ReadSourceList()
		{	
			#region StreamReader			
			StreamReader reader = new StreamReader(pathofsourcelist);
			string[] content = reader.ReadToEnd().Split('\n');
			reader.Close();
			#endregion
			
			string output = "";
			int i = 0;
				
			#region StringManipulation	
			foreach (string tmpString in content)
			{
				if (tmpString.IndexOf("universe") > 0 & tmpString.StartsWith("# deb"))
				{
					i++;
					output += tmpString.Replace("#", "") + "\n";
					Console.WriteLine("Changed line: " + tmpString);
				}
				else
				{
					output += tmpString + "\n";
				}
			}
			Console.WriteLine("sources.list rewritten, had to change " + i + " lines");
			#endregion
			
			return output;
		}

		//Schreiben der veränderten Sources List		
		public static void WriteNewSourceList(string newSourceList)
		{
			#region StreamWriter 
			StreamWriter writer = new StreamWriter(pathofsourcelist);
			writer.Write(newSourceList);
			writer.Close();
			#endregion
		}
		
		//Ausführen der Befehle auf der Console
		public static void ConsoleCommands()
		{
			#region Commandlines
			string[] cmdupdate = new string[2]; //Anpassen
			cmdupdate[0]= "sudo apt-get update";
			cmdupdate[1] = "sudo apt-get upgrade";
			///cmdupdate[2] = "machwasmitmir";
			#endregion 
			
			//Jeder Befehl wird nun nacheinander ausgeführt
			foreach (string tempString in cmdupdate)
			{
				Process.Start(tempString).WaitForExit();
			}
			
			Console.WriteLine("Programm successfully finished. Press any key...");
		}
	}
}
»ezazazel« hat folgende Datei angehängt:
Si non confectus, non reficiat (If it's not broken, don't fix it)
Shuttle XPC SD39P2; Intel Core2Duo 6420; Samsung T166 SATA II 3,5" 500GB; Gainward Bliss 8600GT PCX SilentFx, Cinergy T USB XS hybrid && MSI Wind Nettop && Toshiba Portege M700 && Acer Aspire One

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »ezazazel« (12. April 2007, 15:26)


Shinx

ist zu Gast bei Freunden.

  • »Shinx« ist der Autor dieses Themas

Beiträge: 16

Architektur: 32-bit

  • Private Nachricht senden

17

Donnerstag, 12. April 2007, 16:55

Super !!! DANKESCHÖN!