PXE-Boot-Installation. Unbeaufsichtigt

Antworten
JCFuchs
Beiträge: 3
Registriert: 24 Jan 2023, 15:41

PXE-Boot-Installation. Unbeaufsichtigt

Beitrag von JCFuchs »

Hallo Forum,

Ich sammle gerade meine ersten Erfahrungen mit Opsi. PXE-Boot mit OS-Verteilung läuft. Es sind mir aber noch zu viele Schritte, die ggf. automatisierbar wären. Ich setze neue/unbekannte Laptops auf, das heisst, sie werden vorher in Opsi nicht als Client angelegt.

Ich Liste mal die Benutzereingriffe auf, welche ich momentan noch durchführe. Vielleicht habt ihr noch ein paar Vorschläge.

1. PC anschalten und LAN-Boot auswählen. (Da kann mir Opsi bestimmt auch nicht weiter helfen)
2. Im Auswahlmenü Opsi-Boot anstelle von HD-Boot auswählen und bestätigen.
3. Menü "Konfiguration unvollständig". Hier Hostname des Clients und IP/Hostname des opsiconfd eingeben und bestätigen. Hier hat mir Mathias schon einen Tipp gegeben (pxelinux.cfg) für opsiconfd.
4. Einmalpasswort oder Opsi-User auswählen und bestätigen.
5. Für den Opsi-User Username und Passwort eingeben und bestätigen.
6. OS für die Installation auswählen und bestätigen. In meinem Fall aktuell Win10-x64.

Die Installation des OS selbst läuft anschließend schon ohne weitere Benutzereingriffe.

Meine Wunschvorstellung, dass ich nur noch den Laptop einschalte, LAN-Boot im Bootmanger auswähle und dann den Hostnamen eingebe.
Ist das möglich?

Schöne Grüße
Jan
Benutzeravatar
ThomasT
uib-Team
Beiträge: 529
Registriert: 26 Jun 2013, 12:26

Re: PXE-Boot-Installation. Unbeaufsichtigt

Beitrag von ThomasT »

Hi Jan,

wenn du den Client zuvor im OPSI anlegst mit der richtigen MAC Adresse und das Netboot Produkt deiner Wahl auf Setup setzt, sollte sich das ganze erledigt haben.
Kein Support per DM!
_________________________
opsi support - https://www.uib.de/
For productive opsi installations we recommend support contracts.
chris_10
Beiträge: 18
Registriert: 08 Dez 2022, 10:58

Re: PXE-Boot-Installation. Unbeaufsichtigt

Beitrag von chris_10 »

Guten Tag Jan,

zum anlegen der Clients im OPSI kann auch ein Shell Script weiter helfen, welches die Clients im OPSI für Dich an legt. Vorraussetzung ist z.B. das die Clients in einer Textdatei in einem definierten Format vor liegen. Da kann bei mehreren Geräten auch ein Handscanner gute Hilfe leisten.

Hier mal ein Beispiel:

Liste.txt

Code: Alles auswählen

A1B2C3D4	AABBCCDDEEFF	192.168.1.10	001
F5G6H7	FFEEDDCCAA	192.168.1.11	002
An erster Stelle steht die Seriennummer, an zweiter Stelle die MAC Adresse ohne Trennzeichen (wird häufig so auf den Kartons angebracht), an dritter Stelle die gewünschte IP Adresse und an letzer eine Inventarnummer.

Mit Hilfe eines Shell Scripts kann man diese Textdatei dann aus lesen und sich Scripts erzeugen lassen welche die entsprechenden Aufgaben erledigen.

client_import.sh

Code: Alles auswählen

#!/bin/bash
## Test if root privileges given
echo "[+]Test if run as root"
if [[ $EUID -ne 0 ]]; then
	echo "[!] This script must be run as root/sudo. Aborting."
	exit 1
else
	echo "[+] Success. Running with root/sudo privileges"
fi

## remove description of previous created clients
if [[ -f ClientRemoveDesc.sh ]]; then
    echo "[+] Running Script: remove Description from previous created clients."
    sh ClientRemoveDesc.sh
fi

## move previous created clients to notebook group
if [[ -f  ClientToGrp_after.sh ]]; then
    echo "[+] Running Script: move previous created Clients from installation to schueler group."
    sh  ClientToGrp_after.sh
fi

## remove old Scripts if exists
echo "[+] Removing previous created Scripts."
if [[ -f ClientCreate.sh ]]; then
    rm ClientCreate.sh
fi
if [[ -f ClientInvNr.sh ]]; then
    rm ClientInvNr.sh
fi
if [[ -f ClientUEFIBoot.sh ]]; then
    rm ClientUEFIBoot.sh
fi
if [[ -f NetbootImage.sh ]]; then
    rm NetbootImage.sh
fi
if [[ -f ActionNetboot.sh ]]; then
    rm ActionNetboot.sh
fi
if [[ -f ActionWINSAT.sh ]]; then
    rm ActionWINSAT.sh
fi
fi
if [[ -f ClientToGrp.sh ]]; then
    rm ClientToGrp.sh
fi
if [[ -f ClientRemoveDesc.sh ]]; then
    rm ClientRemoveDesc.sh
fi
if [[ -f ClientRemoveDesc.sh ]]; then
    rm ClientToGrp_after.sh
fi

## create Scripts
while read SN MAC IP NR; do
    RealMAC=$(echo $MAC | sed "s/.\{2\}/&:/g")
    echo "[+] add new Client to scripts Hostname: $SN.BEISPIEL.LOCAL, MAC: ${RealMAC%?}, Inventory Number: $NR"
    echo "opsi-admin -d method createClient "$SN" "BEISPIEL.LOCAL" "Brand_New" "\"\"" "\"\"" "${RealMAC%?}"" >> ClientCreate.sh
    echo "opsi-admin -d method setHostInventoryNumber "$SN.BEISPIEL.LOCAL" "$NR"" >> ClientInvNr.sh
    echo "opsi-admin -d method configState_create "clientconfig.dhcpd.filename" "$SN.BEISPIEL.LOCAL" "linux/pxelinux.cfg/shimx64.efi.signed"" >> ClientUEFIBoot.sh
    echo "opsi-admin -d method setProductProperty "win10-x64-captured" "imagename" "NOTEBOOK" "$SN.BEISPIEL.LOCAL"" >> NetbootImage.sh
    echo "opsi-admin -d method setProductActionRequest "win10-x64-captured" "$SN.BEISPIEL.LOCAL" "setup"" >> ActionNetboot.sh
    echo "opsi-admin -d method setProductActionRequest "Windows-Leistungsindex" "$SN.BEISPIEL.LOCAL" "setup"" >> ActionWINSAT.sh
    echo "opsi-admin -d method objectToGroup_create "HostGroup" "installation" "$SN.BEISPIEL.LOCAL"" >> ClientToGrp.sh
    echo "opsi-admin -d method objectToGroup_delete "HostGroup" "installation" "$SN.BEISPIEL.LOCAL"" >> ClientToGrp_after.sh
    echo "opsi-admin -d method objectToGroup_create "HostGroup" "notebooks" "$SN.BEISPIEL.LOCAL"" >> ClientToGrp_after.sh
    echo "opsi-admin -d method setHostDescription "$SN.BEISPIEL.LOCAL" "\"\""" >> ClientRemoveDesc.sh
done < $1

## run scripts
echo "[+] Running Script: creating new Clients in Database."
sh ClientCreate.sh
echo "[+] Running Script: editing Inverntory Number of the new Clients in Database."
sh ClientInvNr.sh
echo "[+] Running Script: setting UEFI Boot Option for the new Clients in Database."
sh ClientUEFIBoot.sh
echo "[+] Running Script: setting Netboot Image win10-x64-captured to Image NOTEBOOK for the new Clients in Database."
sh NetbootImage.sh
echo "[+] Running Script: setting Product Action win10-x64-captured to setup for the new Clients in Database."
sh ActionNetboot.sh
echo "[+] Running Script: setting Product Action for WINSAT to setup for the new Clients in Database."
sh ActionWINSAT.sh
echo "[+] Running Script: add new Clients to Installation Group."
sh ClientToGrp.sh
echo "[+] Done. Fire up the new Clients."
Was macht dieses Shell Script:
- zuerst werden die Daten aus der übergebenen Textdatei (Leerzeichen oder TAB separiert!) aus gelesen
- anschließend wird die MAC Adresse vom Format AABBCCDDEEFF auf das Format AA:BB:CC:DD:EE:FF um formatiert
- danach werden die Hilfsscripte erzeugt welche:
  • - zuerst einen neuen Client mit der Seriennummer als Hostnamen und mit der Beschreibung "Brand_New" anlegen
    - diesem die Inventar Nummer zu ordnen
    - UEFI Boot in OPSI setzen
    - in diesem Beispiel das Image NOTEBOOK für das Paket "win10-x64-captured" für den Host aus wählen
    - das Netboot Produkt "win10-x64-captured" für den Host auf setup stellen
    - ein vorhandenes Programmpaket auf setup stellen, in diesem Beispiel das Programm "Windows-Leistungsindex"
    - den neuen Client in die Gruppe Installation ein sortieren
    - nach der Installation die Clients aus der Installationsgruppe in die Gruppe Notebooks verschieben (bei erneutem Aufruf des Scripts)
    - nach der Installation die Beschreibung Brand_New wieder entfernen (bei erneutem Aufruf des Scripts)
    - die alten Hilfsscripte entfernt und neue generiert (bei erneutem Aufruf des Scripts)
Das Script ruft dann die Hilsscripte in der entsprechenden Reihenfolge auf.
Aufgerufen wird das im Termianl via

Code: Alles auswählen

sudo ./client_import.sh Liste.txt
Die Domäne "BEISPIEL.LOCAL" muß selbstredend auf die Gegenbenheiten angepaßt werden.

Damit kann man sich eine Menge Klickarbeit ersparen.
Sollte nur das Netboot Produkt "Win10-x64" gewünscht sein einfach die Zeile >>>echo "opsi-admin -d method setProductActionRequest "win10-x64-captured" "$SN.BEISPIEL.LOCAL" "setup"" >> ActionNetboot.sh <<< entsprechend darauf an passen und die Anteile für das Hilfsscript "NetbootImage.sh" entfernen.

Ich hoffe ich konnte mit dieser Idee ein wenig weiter helfen,
Christian
Antworten