Aufbau des Script-Systems
1. Verzeichnis
Verzeichnis wo die Scripte abgelegt sind:
./Daten/Cloning-Scripte = Scripte
./Daten/Cloning-Scripte/daten = gesammelte Daten
Da wir hier unter Linux und nicht Windows arbeiten sind diese Verzeichnisse „case-sensitiv“!
2. einzelne Scripte
2.1 scan_analyse-network.sh = ‚main‘-Programm
scan_mac_list_v1.2.1.inc = include von ‚procedures‘
Funktion:
Erzeugt eine Datei in der die MAC-Adressen der PC’s des Netzwerks aufgelistet sind.
Hinzu kommen noch die von einem DHCP bei Cloning vergebenen IP-Adressen und zu guter Letzt noch ein DNS-Namen, wenn er ermittelt werden konnte.
Wenn man will, so kann man diese Datei auch manuell mit einem Editor erzeugen bzw. ergänzen.
Der Schritt 2.1 gehört eigentlich zur Master-Clone Erstellung ( Imaging). Das es für die Erzeugung ‚arp_mac_ip_dns_liste‚ Datei zuständig ist und mit dem Cloning auf jeden PC weitergegeben wird.
2.2 hosts-hostname-v1.0.1.sh = ‚main‘-Programm
Funtktion:
Aktualisiert die ‚/etc/hostname‘ und ‚/etc/hosts‘ Dateien.
Durch die ‚arp_mac_ip_dns_liste‚ Datei hat man die Daten aller PC’s des Netzwerkes zur Verfügung und kann somit durch das Eintrage der gesammelten Informationen in die ‚/etc/hosts‘ ein kleinen „Quasi“ DNS-Server aufbauen. Der Vorteil hierbei ist noch, das das Netzwerk durch DNS-Abfragen nicht belastet wird, da sämtliche Information hierfür lokal in der ‚/etc/hosts‘ eines jeden PC’s schon abgelegt ist.
2.3 build-interfaces.sh = ‚main‘-Programm
Funktion:
Konfiguriert die Datei, die für die Netzwerkfunktionalität zuständig sind. Das ist die Datei ‚/etc/network/interfaces‘.
z.B.:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# Grundeinträge # --------------- auto lo iface lo inet loopback auto enp0s3 iface enp0s3 inet static address 192.168.0.198 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 # Optionale Angaben # ----------------- # gateway wichtig für eine externe Kommunikation gateway 192.168.0.254 # dns-nameserver dns-nameserver 192.168.0.254 # dns-search dns-search intern.lan |
2.4 rc.local + stop-cloning.sh
Damit das ganze auch einmalig beim ersten Bootvorgang ohne eingreifen des Administrator funktioniert muss auch die Datei ‚/etc/rc.local‚ angepasst werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/sh ## # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. /Daten/Cloning-Scripte/hosts-hostname-v1.0.1.sh sleep 4 /Daten/Cloning-Scripte/build-interfaces.sh sleep 4 /Daten/Cloning-Scripte/stop-cloning.sh sleep 2 reboot now exit 0 |
1 2 3 4 5 6 |
#!/bin/bash sed '/Daten/d' -i /etc/rc.local sed '/sleep/d' -i /etc/rc.local sed '/reboot/d' -i /etc/rc.local sed '/etc/d' -i /etc/rd.local |
Funktion:
Das Script ‚stop-cloning.sh‚ entfernt die Einträge:
1 2 3 4 5 6 7 |
Script-System/Daten/Cloning-Scripte/hosts-hostname-v1.0.1.sh sleep 4 /Daten/Cloning-Scripte/build-interfaces.sh sleep 4 /Daten/Cloning-Scripte/stop-cloning.sh sleep 2 reboot now |
in der Datei ‚/etc/rc.local‚.
Quelltext: Script-System
3. Include Dateien
Die ‚include‘ Dateien sind eine elegante und sehr alte Methode immer wiederkehrende und verwendete Programmteile auszulagern. Es kann sich dabei um reinen Progam-Code (Funktionen, Prozeduren) oder Variablen-, Konstanten-Definitionen handeln.
„Dabei gilt es natürlich die entsprechenden Syntax und Grammatik Regeln der jeweiligen Progammier-Sprache in Hinblick auf Verwendung von ‚include‘ zu berücksichtigen. Dabei habe ich kaum eine Programmier-Sprache gefunden in der das nicht Möglich wäre, selbst in HTML5 ist mit kleineren Hürden eine Art ‚include‘ zu konstruieren und zu verwenden! Ich selbst benenne in der Regel daher die Dateien mit dem Extension ‚.inc‘ und erkenne daher immer sofort die Funktion bzw. Bedeutung solcher Dateien.“
3.1 globale_file_name.inc
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 |
# ----------------- # globale_file_name # ----------------- prae_path="/Daten/Cloning-Scripte/" prae_path_1="/Daten/Cloning-Scripte/daten/" protokoll_datei=$prae_path_1"controller-system.log" datei_4=$prae_path_1"ip_live" datei_4_1=$prae_path_1"all_ip_live" datei_5=$prae_path_1"arp_mac_ip_dns_liste" datei_6=$prae_path"interfaces.cloning" datei_6_1="/etc/network/interfaces" ## Systemdatei! datei_7="/etc/hosts" ## Systemdatei! datei_7_1=$prae_path_1"hosts" result_1=$prae_path_1"tmp_1" result_2=$prae_path_1"tmp_2" search_list=$prae_path_1"tmp_3" script1="controller-system_v1.0.sh" script2="menue-2-sub1-v1.0.sh" script_m2_1=$prae_path"scan_analyse-network.sh" script_m2_2=$prae_path"hosts-hostname-v1.0.1.sh" script_m2_3=$prae_path"build-interfaces.sh" |
3.1 globale_variablen_name.inc
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 |
# ----------------- # globale_variablen # ----------------- network="192.168.0.0/24" subnet="192.168.0." start_ip=190 end_ip=255 # ersetzt die DHCP-IP mit zukünftiger Cloning-IP! # definiert die ersten 3. Oktetts der neuen statischen IP, # während das 4.Oktett von der alten (DHCP-vergebenen) IP stammt. new_mac_ip="192.168.200." # ist der hostname, den der Rechner beim Cloning vor dem # 1. Booten erhält, danach gilt der "new_host_name" old_host_name="server-01" # new_host_name="" # setzt sich aus prae_ und post_name zusammen! # Teil des neuen RechnerNames! prae_hostname="workPC-" search_MAC="" # nicht ändern search_IP_Address="" # nicht ändern # beinflussen die /etc/network/interfaces Datei var_gateway="" var_dns_nameserver="" var_dns_search="" wartezeit_position_von_bedeutung=3 # Optionale Variablen zum Test bzw. SpezialAnwendung # 0=false(n), 1=true(j) pc_position_von_bedeutung=0 test=0 # ----------------------------------------------------- # in der Procedure proc_search_MAC_in_list() zu finden # die variable: new_host_name="" # Dort wird new_host_name aus prae_hostname + post_hostname # gebildet! # # prae_hostname="workPC-" # post-Hostname ist das 4. Oktett der IP-Adresse # controller_hostname="controller-workPC-" # |
4. Ablaufplan
Ablaufplanung
Gibt im ganz groben Zügen wieder, wie die Scripte arbeiten.