OPSI INSTALL FAQ AUF DEBIAN SQUEEZE
OPSI INSTALL FAQ AUF DEBIAN SQUEEZE (Stand 17.10.2012) [ © Oliver Schuetz aka OppTupacShakur | http://OPPServer.net | http://unix.oppserver.net ]
Hier unsere Server/Client Beispiele dieser Anleitung:
OPSI Server, Debian Squeeze 6.0x, IP 192.168.0.1, Hostname opsi.oppserver.net opsi Client Test (VirtualBox), MAC Adresse 08:00:27:48:d9:74, IP 192.168.0.200, Hostname opsi-test, Beschreibung opsi virtualbox test Client 1, MAC Adresse 00:50:fc:6b:9a:e3, IP 192.168.0.2, Hostname rechner001, Beschreibung Windows XP Pro x86 001 Client 2, MAC Adresse 00:17:31:65:6c:2d, IP 192.168.0.3, Hostname rechner002, Beschreibung Windows 7 Pro x86 001 Client 3, MAC Adresse 00:18:f3:b0:04:9f, IP 192.168.0.4, Hostname rechner003, Beschreibung Windows 7 Pro x64 001 Router, IP 192.168.0.253, Hostname router (Bei den Clients keine Hostnames laenger als 15 Zeichen nutzen, da dies zu einem Fehler bei der Installation fuehrt)
Als erstes als User root einloggen:
sudo -s oder nur su
Pakete die nach der Grundinstallation mit Desktopumgebung (de)installiert werden sollten/muessen:
aptitude purge network-manager network-manager-gnome aptitude install sudo gcc g++ make zip bzip2 unzip psmisc libc6 libc6-dev unrar linux-headers-`uname -r` subversion subversion-tools cvs mercurial ssh openssl wget lsof host python-mechanize p7zip-full cabextract openbsd-inetd samba samba-common smbclient smbfs samba-doc mysql-server
Pruefen Sie den Eintrag fuer den opsi-server in der Datei /etc/hosts oder aber die Ausgabe von
getent hosts $(hostname -f)
Das Ergebnis sollte beispielsweise so aussehen:
192.168.0.1 opsi.oppserver.net opsi
Sieht das Ergebnis nicht so aus (enthaelt z.B. 127.0.0.1 oder localhost) dann muessen Sie Ihre /etc/hosts oder Namensaufloesung zunaechst korrigieren.
echo "deb http://download.opensuse.org/repositories/home:/uibmz:/opsi:/opsi40/Debian_6.0 ./" > /etc/apt/sources.list.d/opsi.sources.list
wget http://download.opensuse.org/repositories/home:/uibmz:/opsi:/opsi40/Debian_6.0/Release.key -O - | apt-key add -
aptitude update aptitude safe-upgrade aptitude remove tftpd update-inetd --remove tftpd aptitude install opsi-atftpd opsi-depotserver opsi-configed
Da die OPSI Services nicht automatisch mitstarten, obwohl sie in den jeweiligen runleveln sind, habe ich folgendes in der /etc/rc.local vor dem exit 0 hinzugefuegt:
/etc/init.d/opsiconfd restart /etc/init.d/opsipxeconfd restart
Bei der Installation des Tftpd werden Sie evtl. nach dem Tftp-Basisverzeichnis gefragt. Beantworten Sie diese Frage mit /tftpboot. Die Fragen nach Multicast Support koennen Sie mit Ja beantworten.
Bei der Installation des Paketes opsiconfd werden Sie nach Angaben zur Erstellung eines SSL-Zertifikates gefragt.
Bei der Installation des opsi-servers werden Sie gefragt, ob die dhcpd.conf und die smb.conf gepatcht werden darf. Beantworten Sie die Fragen mit Ja.
Nun legen wir ein neues Passwort fuer den User pcpatch fest:
passwd pcpatch smbpasswd -a pcpatch opsi-admin -d task setPcpatchPassword
Falls noch kein USER angelegt wurde, wird er jetzt erstellt, sonst weiter bei Gruppenmitgliedschaft eingerichten:
useradd -m -s /bin/bash USER
Wir vergeben nun Passwoerter fuer Unix:
passwd USER
Gruppenmitgliedschaft eingerichten:
adduser root opsiadmin adduser USER opsiadmin
Wir vergeben nun Passwoerter fuer Samba:
smbpasswd -a USER
Alle User, die Produkte packen (opsi-makeproductfile), installieren (opsi-package-manager) oder Konfigurationsdateien manuell bearbeiten wollen, muessen zusaetzlich in der Gruppe pcpatch sein:
adduser USER pcpatch
root darf dies alles ohnehin und muss daher nicht explizit in die Gruppe aufgenommen werden.
Holen Sie sich die aktuellen notwendigen opsi-Pakete im opsi-Paketformat.
Die Pakete finden Sie unter http://download.uib.de/opsi4.0/products/
Nach dem Download muessen Sie die Pakete auf dem Server mit dem Befehl opsi-package-manager -i <paketname>.opsi installiert werden.
Sie koennen das interaktiv fuer jedes einzelne Paket tun. Wir empfehlen Ihnen dies automatisiert zu tun. Hierzu gibt es das Werkzeug opsi-product-updater, welches wie in /etc/opsi/opsi-product-updater.conf konfiguriert, automatisch die aktuellen Pakete vom opsi Repository holt und auf dem Server installiert.
Z.B.:
[wol] active = true [repository_uib] dirs = opsi4.0/products/localboot, opsi4.0/products/netboot, opsi4.0/testing autoInstall = true autoSetup = true
Danach einfach folgenden Befehl ausfuehren und die Pakete werden installiert:
opsi-product-updater -i -vv
Sollte der opsi-product-updater Befehl scheitern, so muss evtl. ein Proxy in der Konfigurationsdatei eingetragen werden unter
[repository_uib] proxy =
Wenn Sie das opsi Managementinterface opsi-configed direkt auf dem Server ausfuehren moechten, so benoetigen Sie eine Java Laufzeitumgebung. Die Laufzeitumgebung von Sun/Oracle ist die am besten getestete. Allerdings ist diese unter Linux nur noch eingeschraenkt zu beziehen. Als Alternative bietet sich das OpenJDK an. Meinen Erfahrungen nach funktioniert hier zumindest der Start ueber Webstart und als Applikation.
aptitude install sun-java6-jdk sun-java6-plugin python-simplejson
Kontrollieren Sie, ob Java in der benoetigten Version installiert ist, indem Sie in einem Terminal
java -version
aufrufen. Sollte hier nicht mindestens Java Version 1.6.0 angezeigt werden, so muessen Sie dies in einem Terminalfenster mit
update-alternatives anpassen: update-alternatives --config java
Auswahl Pfad Prioritaet Status ------------------------------------------------------------ 0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 Auto-Modus 1 /usr/bin/gij-4.4 1044 manueller Modus 2 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 manueller Modus * 3 /usr/lib/jvm/java-6-sun/jre/bin/java 63 manueller Modus
Druecken Sie die Eingabetaste, um die aktuelle Wahl[*] beizubehalten, oder geben Sie die Auswahlnummer ein: 3
Um (wie empfohlen) das mysql-Backend verwenden zu koennen (z.B. fuer die Inventarisierung), so muss dieses nun mit dem Befehl
opsi-setup --configure-mysql
initialisiert werden. In der Datei /etc/opsi/backendManager/dispatch.conf muss das Backend noch hinzugefuegt werden:
backend_.* : file, opsipxeconfd host_.* : file, opsipxeconfd productOnClient_.* : file, opsipxeconfd configState_.* : file, opsipxeconfd .* : file
aendern in
backend_.* : file, mysql, opsipxeconfd host_.* : file, opsipxeconfd productOnClient_.* : file, opsipxeconfd configState_.* : file, opsipxeconfd license.* : mysql softwareLicense.* : mysql audit.* : mysql .* : file
opsi-setup --init-current-config opsi-setup --set-rights /etc/init.d/opsiconfd restart /etc/init.d/opsipxeconfd restart
Ignorieren Sie Warnungen wegen einer nicht gefundenen /etc/opsi/modules. Wer welche Methoden verwenden darf, ist in der Datei /etc/opsi/backendManager/acl.conf festgelegt.
Einspielen / ueberpruefen der Freischaltdatei
Auch wenn opsi Opensource ist, so gibt es einige Zusatz-Komponenten, die im Rahmen eines Kofinanzierungsprojektes erstellt wurden und evtl. noch nicht Opensource bzw. noch nicht kostenlos sind. Sobald die Entwicklungskosten eingenommen sind, werden auch diese Module Opensource bzw. kostenlos sein. Um bis dahin die Verwendung dieser Module den zahlenden Kunden und zu Evaluierungszwecken zu gestatten, gibt es die Freischaltdatei /etc/opsi/modules, welche durch eine elektronische Signatur vor unautorisierter Veraenderung geschuetzt ist. Ist diese Datei nicht vorhanden, so funktionieren nur die freien Module von opsi.
Um zu Evaluierungszwecken eine zeitlich befristet gueltige Freischaltdatei zu erhalten, wenden Sie sich an info@uib.de.
Im Rahmen einer Beteiligung an den entsprechenden Kofinanzierungsprojekten erhalten Sie eine unbefristet gueltige Freischaltdatei. Diese koennen Sie mit root-Rechten nach /etc/opsi kopieren.
Fuehren Sie danach den folgenden Befehl aus:
opsi-setup --set-rights /etc/opsi
Kontrollieren Sie die Freischaltung mit einer der folgenden Methoden: Im opsi-configed koennen Sie sich ueber den Menuepunkt Hilfe/opsi-Module den Status Ihrer Freischaltung anzeigen lassen. Mit der Methode backend_info koennen Sie mit opsi-admin ueberpruefen, welche Module freigeschaltet sind. (Hinweis: Geben Sie die weder die Datei noch die Ausgabe dieses Befehls oeffentlich weiter, zumindest nicht ohne die Signatur zu loeschen).
opsi-admin -d method backend_info
Und nun wird DHCPd eingerichtet, als erstes sichern wir uns die default Konfigurations Datei:
mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.orig
Folgendes in /etc/dhcp/dhcpd.conf ersetzen/hinzufuegen:
ddns-update-style none; option domain-name "oppserver.net"; option domain-name-servers 192.168.0.253, 8.8.8.8; default-lease-time 600; max-lease-time 7200; log-facility local7; use-host-decl-names on; subnet 192.168.0.0 netmask 255.255.255.0 { option routers 192.168.0.253; option broadcast-address 192.168.0.255; group { next-server 192.168.0.1; filename "linux/pxelinux.0"; } }
Jetzt die richtigen Rechte setzen, da OPSI sonst nicht in diese Datei schreiben darf:
chown opsiconfd:opsiadmin /etc/dhcp/dhcpd.conf chmod 664 /etc/dhcp/dhcpd.conf
Danach einmal den DHCPd restarten:
/etc/init.d/isc-dhcp-server restart
Nun muessen wir den DHCPd in die /etc/opsi/backendManager/dispatch.conf einfuegen/ersetzen:
backend_.* : file, mysql, opsipxeconfd, dhcpd host_.* : file, opsipxeconfd, dhcpd
Nach Anpassung der Backendkonfiguration muss die Konfiguration initialisiert und der opsiconfd neu gestartet werden:
opsi-setup --init-current-config opsi-setup --set-rights /etc/init.d/opsiconfd restart /etc/init.d/opsipxeconfd restart
Start der Management-Oberflaeche (opsi-configed)
Opsi bietet mit dem opsi-configed ein komfortables Management Interface.
Sie koennen es auf mehrere Weisen starten:
Wenn Sie in einem Browser (irgendwo im Netz) die Adresse https://192.168.0.1:4447/configed eingeben, erscheint eine Webseite mit als Applet eingebettetem opsi-configed. Damit es funktioniert, muessen Sie auf dem aufrufenden Rechner eine (Sun) Java-Version >= 1.6 installiert haben.
Alternativ koennen Sie auf der graphischen Oberflaeche Ihres opsi-servers mit Klick auf die rechte Taste das Kontextmenue oeffnen und „opsi config editor“ auswaehlen.
Der Konfigurationseditor ist auch Bestandteil der opsi-adminutils, die im Rahmen der opsi-Anwendung lokal auf Clients installiert werden koennen.
Installation eines neuen Windows Rechners ueber opsi (OS-Installation) (Windows 7 x86 als Beispiel)
Anlegen eines neuen opsi-Clients ueber die Management Oberflaeche:
Als Client-Rechner eignen sich reale oder virtuelle Rechner mit mindestens 512 MB RAM, die ueber eine Netzwerkkarte mit Netzwerkboot-Unterstuetzung verfuegen: D.h., sie unterstuetzen das PXE-Protokoll zum Laden von Boot-Systemen via Netzwerk. Der Netzwerkboot ist ggf. im Bios-Menue zu aktivieren bzw. an die erste Stelle der Bootoptionen zu ruecken.
Fuer einen ersten Tests empfehlen wir eine VMware-Appliance, die einen „nicht installierten Rechner“ abbildet und im VMware-Player laufen kann. Diese koennen Sie z.B. bei download.uib.de herunterladen (http://download.uib.de/vmware_pxeclient.zip).
Diese virtuelle Hardware wird auf eher von den Standardtreibern von Windows unterstuetzt, wenn Sie spaeter eine Testinstallation von Windows durchfuehren. Zur Installation von Windows auf neueren realen Rechnern muessen Sie sehr wahrscheinlich vorab zusaetzliche Treiber integrieren.
Den Client koennen Sie jetzt mit dem opsi-configed beim opsi-server registrieren. Waehlen Sie den Menue-Punkt OpsiClient / Neuen opsi-Client erstellen und geben Sie ein:
• IP-Namen,
• (Internet-) Domain (falls abweichend von der Vorgabe),
• Beschreibung (fakultativ),
• IP-Nummer (nur zwingend, sofern der opsi-server DHCP-Server ist),
• MAC-Adresse der Netzwerkkarte des Clients (zwingend, sofern der opsi-server DHCP-Server ist; andernfalls dringend empfohlen).
Nach Eingabeabschluss wird der Client dem opsi-server bekanntgemacht und gleichzeitig in der DHCP-Konfiguration als PXE-Client angelegt.
Ein Client kann auch auf der Kommandozeile per opsi-admin erzeugt werden:
opsi-admin -d method host_createOpsiClient <client-id> [opsiHostKey] [description] [notes] [hardwareAddress] [ipAddress] [inventoryNumber] [oneTimePassword] [created] [lastSeen]
z.B.:
opsi-admin -d method host_createOpsiClient rechner001 "Windows XP Pro x86 001" "" 00:50:fc:6b:9a:e3 192.168.0.2
Die Liste der eingerichteten opsi-Clients kann jederzeit im opsi-configed Modus „Client-Konfiguration“ unter dem Reiter Client-Auswahl eingesehen werden.
Hardware-Inventarisierung mit dem netboot-Produkt hwinvent:
Sofern Sie bereits einen Client eingerichtet haben und das Produkt hwinvent installiert ist, koennen Sie bereits etwas Nuetzliches mit opsi tun:
Waehlen Sie im opsi-configed, Modus Client-Konfiguration, unter dem Reiter Client-Auswahl den betreffenden Client aus. Wenn noch nicht geschehen, aktualisieren Sie den Datenbestand des opsi-configed mittels Datei/Daten neu laden bzw. Anklicken des entsprechenden Icons. Wechseln Sie zum Reiter Netboot-Produkte, gehen Sie in das Feld "Anstehende Aktion" des Produkts "hwinvent" und waehlen Sie in der dort angebotenen Liste die Aktion "setup".
Der Haken in der Icon-Menueleiste sollte seine Farbe auf Rot wechseln. Wenn Sie ihn anklicken, werden die neuen Einstellungen zum opsi-server uebermittelt und die Farbe des Hakens wechselt im Anschluss wieder zu gruen.
Booten Sie dann den Client. Er sollte jetzt per PXE ueber das Netz ein Linux-Image ziehen, das die Hardware des PCs scannt und dann den Rechner rebootet (wenn der Rechner nicht ansonsten schon eingerichtet war, kommt im Anschluss korrekterweise die Meldung, dass auf der Platte kein Betriebssystem installiert ist).
Das Ergebnis des Hardware-Scans hat der PC zum opsi-server uebermittelt. Es ist unter dem Reiter "Hardware-Informationen" zu besichtigen.
Erstellen eines PE fuer Win7 (x86)
"%ProgramFiles%\Windows AIK\Tools\PETools\copype.cmd" x86 C:\winpe "%ProgramFiles%\Windows AIK\Tools\x86\imagex.exe" /mountrw "C:\winpe\winpe.wim" 1 "C:\winpe\mount" echo c:\opsi\startnet.cmd > "C:\winpe\mount\Windows\System32\startnet.cmd" "%ProgramFiles%\Windows AIK\Tools\x86\imagex.exe" /commit /unmount "C:\winpe\mount" move "C:\winpe\winpe.wim" "C:\winpe\ISO\sources\boot.wim"
Den Inhalt des Verzeichnis C:\winpe\ISO nach /opt/pcbin/install/win7/winpe kopieren. Rechte anpassen:
opsi-setup --set-rights /opt/pcbin/install/win7/winpe
Fuer die folgenden Schritte wird ein Arbeitsplatzrechner mit installiertem WAIK (Windows Automated Installation Kit) unter Windows 7 64-Bit benoetigt.
Erstellen eines PE fuer Win7 (x64)
"%ProgramFiles%\Windows AIK\Tools\PETools\copype.cmd" amd64 C:\winpe "%ProgramFiles%\Windows AIK\Tools\amd64\imagex.exe" /mountrw "C:\winpe\winpe.wim" 1 "C:\winpe\mount" echo c:\opsi\startnet.cmd > "C:\winpe\mount\Windows\System32\startnet.cmd" "%ProgramFiles%\Windows AIK\Tools\amd64\imagex.exe" /commit /unmount "C:\winpe\mount" move "C:\winpe\winpe.wim" "C:\winpe\ISO\sources\boot.wim"
Den Inhalt des Verzeichnis C:\winpe\ISO nach /opt/pcbin/install/win7-x64/winpe kopieren. Rechte anpassen:
opsi-setup --set-rights /opt/pcbin/install/win7-x64/winpe
Treiber-Integration
Die Treiber-Integration verlaeuft analog zu dem Verfahren anderer Windows Versionen: Die Treiber werden unter
/opt/pcbin/install/win7/drivers/drivers bzw. /opt/pcbin/install/win7-x64/drivers/drivers abgelegt. Danach wird das Script create_driver_links.py aufgerufen.
cd /opt/pcbin/install/win7 python create_driver_links.py
oder
cd /opt/pcbin/install/win7-x64 python create_driver_links.py
Bereitstellung der Installationsmedien
Kopieren der Installations-DVD nach
/opt/pcbin/install/win7/installfiles bzw. /opt/pcbin/install/win7-x64/installfiles und passen Sie Rechte/Eigentuemer an:
opsi-setup --set-rights /opt/pcbin/install/win7/installfiles
bzw.
opsi-setup --set-rights /opt/pcbin/install/win7-x64/installfiles
Anpassungen der Installation, z.B. Proxy oder Administrator Passwort oder Display Aufloesung, kann man unter /opt/pcbin/install/win7/custom/unattend.xml bzw. /opt/pcbin/install/win7-x64/custom/unattend.xml vornehmen, z.B.:
<AdministratorPassword> <PlainText>true</PlainText> <Value>P@ssw0rd</Value> </AdministratorPassword> ... <AutoLogon> <Enabled>true</Enabled> <LogonCount>1</LogonCount> <Username>Administrator</Username> <Password> <PlainText>true</PlainText> <Value>P@ssw0rd</Value> </Password> </AutoLogon> ... <Display> <ColorDepth>32</ColorDepth> <DPI>96</DPI> <HorizontalResolution>1024</HorizontalResolution> <RefreshRate>75</RefreshRate> <VerticalResolution>768</VerticalResolution> </Display>
Danach die Rechte richtig setzen:
opsi-setup --set-rights /opt/pcbin/install/win7/custom
bzw.
opsi-setup --set-rights /opt/pcbin/install/win7-x64/custom
Installation eines neuen Windows Rechners ueber opsi (OS-Installation) (Windows XP x86)
Kopieren Sie den Inhalt des i386 Verzeichnis einer Installations-CD fuer Microsoft WinXP Professional in das Verzeichnis /opt/pcbin/install/winxppro/i386 auf dem opsi-server. Sorgen Sie anschliessend noch dafuer, dass das Verzeichnis i386 die richtigen Rechte fuer den Zugriff durch den Installationsprozess hat:
opsi-setup --set-rights /opt/pcbin/install/winxppro/i386
Statt vom opsi-server aus unter Linux koennen Sie die Dateien auch ueber das Windows-Netzwerk kopieren. Dafuer muessen Sie sich mit der Freigabe opt_pcbin auf dem opsi-server als Benutzer pcpatch verbinden. Das entsprechende Verzeichnis befindet sich auf der Freigabe in install\winxppro.
Anpassungen der Installation, z.B. Proxy oder Administrator Passwort, kann man unter /opt/pcbin/install/winxppro/custom/unattend.txt vornehmen.
Z.B.:
[GuiUnattended] AdminPassword = P@ssw0rd
Danach die Rechte richtig setzen:
opsi-setup --set-rights /opt/pcbin/install/winxppro/custom
Ueber die Management-Oberflaeche unter Netboot-Produkte kann man auch den Aktivation Key fuer die einzelnen Windows Versionen pro Client hinterlegen oder man setzt diesen Global fuer ein Betriebssystem:
Fuer Windows 7 32bit:
opsi-admin -d method setProductProperty win7 "productkey" "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx" opsi.oppserver.net
Fuer Windows 7 64bit:
opsi-admin -d method setProductProperty win7-x64 "productkey" "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx" opsi.oppserver.net
Fuer Windows XP Pro 32bit:
opsi-admin -d method setProductProperty winxppro "productkey" "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx" opsi.oppserver.net
Des Weiteren kann man mit Hilfe von opsi-admin auch weitere Einstellungen wie z.B. orgname, fullname und auch die Windows 7 Version (imagename) vornehmen:
Fuer Windows 7 32bit:
opsi-admin -d method setProductProperty win7 "orgname" "Stadt Herne" opsi.oppserver.net opsi-admin -d method setProductProperty win7 "fullname" "StadtHerne" opsi.oppserver.net opsi-admin -d method setProductProperty win7 "imagename" "Windows 7 PROFESSIONAL" opsi.oppserver.net
Fuer Windows 7 64bit:
opsi-admin -d method setProductProperty win7-x64 "orgname" "Stadt Herne" opsi.oppserver.net opsi-admin -d method setProductProperty win7-x64 "fullname" "StadtHerne" opsi.oppserver.net opsi-admin -d method setProductProperty win7-x64 "imagename" "Windows 7 PROFESSIONAL" opsi.oppserver.net
Fuer Windows XP:
opsi-admin -d method setProductProperty winxppro "orgname" "Stadt Herne" opsi.oppserver.net opsi-admin -d method setProductProperty winxppro "fullname" "StadtHerne" opsi.oppserver.net
Falls man es nicht will das beim Neuinstallieren der Netbootprodukte nachgefragt werden soll ob man dies auch wirklich moechte, kann man folgendes setzen: Fuer Windows 7 32bit:
opsi-admin -d method setProductProperty win7 "askbeforeinst" "False" opsi.oppserver.net
Fuer Windows 7 64bit:
opsi-admin -d method setProductProperty win7-x64 "askbeforeinst" "False" opsi.oppserver.net
Fuer Windows XP:
opsi-admin -d method setProductProperty winxppro "askbeforeinst" "False" opsi.oppserver.net
Diese Werte kann man sich auch wie folgt anzeigen lassen: Fuer Windows 7 32bit:
opsi-admin -d method getProductProperties_hash win7 opsi.oppserver.net
Fuer Windows 7 64bit:
opsi-admin -d method getProductProperties_hash win7-x64 opsi.oppserver.net
Fuer Windows XP:
opsi-admin -d method getProductProperties_hash winxppro opsi.oppserver.net
Um einen Benutzer der Installation hinzuzufuegen, gehen wir wie folgt vor:
Fuer Windows 7 32bit:
In /opt/pcbin/install/win7/custom/unattend.xml in der Section <LocalAccounts> folgendes hinzufuegen:
<LocalAccount wcm:action="add"> <Password> <PlainText>true</PlainText> <Value>starten</Value> </Password> <Description>Schulleiter</Description> <Group>Administrators</Group> <Name>Schulleiter</Name> <DisplayName>Schulleiter</DisplayName> </LocalAccount> <LocalAccount wcm:action="add"> <Password> <PlainText>true</PlainText> <Value>starten</Value> </Password> <Description>Lehrer</Description> <Group>Powerusers</Group> <Name>Lehrer</Name> <DisplayName>Lehrer</DisplayName> </LocalAccount> <LocalAccount wcm:action="add"> <Password> <PlainText>true</PlainText> <Value></Value> </Password> <Description>Schueler</Description> <Group>Users</Group> <Name>Schueler</Name> <DisplayName>Schueler</DisplayName> </LocalAccount>
Danach die Rechte richtig setzen:
opsi-setup --set-rights /opt/pcbin/install/win7/custom
Fuer Windows 7 32bit: In /opt/pcbin/install/win7-x64/custom/unattend.xml in der Section <LocalAccounts> folgendes hinzufuegen:
<LocalAccount wcm:action="add"> <Password> <PlainText>true</PlainText> <Value>starten</Value> </Password> <Description>Schulleiter</Description> <Group>Administrators</Group> <Name>Schulleiter</Name> <DisplayName>Schulleiter</DisplayName> </LocalAccount> <LocalAccount wcm:action="add"> <Password> <PlainText>true</PlainText> <Value>starten</Value> </Password> <Description>Lehrer</Description> <Group>Powerusers</Group> <Name>Lehrer</Name> <DisplayName>Lehrer</DisplayName> </LocalAccount> <LocalAccount wcm:action="add"> <Password> <PlainText>true</PlainText> <Value></Value> </Password> <Description>Schueler</Description> <Group>Users</Group> <Name>Schueler</Name> <DisplayName>Schueler</DisplayName> </LocalAccount>
Danach die Rechte richtig setzen:
opsi-setup --set-rights /opt/pcbin/install/win7-x64/custom
Fuer Windows XP funktioniert dies ein wenig anders: /opt/pcbin/install/winxppro/custom/\$oem\$/cmdlines.txt mit folgendem Inhalt anlegen:
[COMMANDS] "useraccounts.cmd"
/opt/pcbin/install/winxppro/custom/\$oem\$/useraccounts.cmd mit folgendem Inhalt anlegen:
net user Schulleiter starten /add net localgroup Administratoren Schulleiter /add net user Lehrer starten /add net localgroup Administratoren Lehrer /add net user Schueler /add net accounts /maxpwage:unlimited REGEDIT /S autologon.reg EXIT
Danach die Rechte richtig setzen:
opsi-setup --set-rights /opt/pcbin/install/winxppro/custom/\$oem\$
Moechte man unter Windows XP eine automatische Aktivierung, muss man in /opt/pcbin/install/winxppro/custom/unattend.txt den AutoActivate Wert von No in Yes aendern:
AutoActivate = Yes
Danach die Rechte richtig setzen:
opsi-setup --set-rights /opt/pcbin/install/winxppro/custom
Fuer die Display Aufloesung muss man den folgenden Wert in /opt/pcbin/install/winxppro/custom/unattend.txt aendern:
[Display] ConfigureAtLogon = 1 BitsPerPel = 32 XResolution = 1024 YResolution = 768 VRefresh = 75 ;flags = 0 AutoConfirm = 1
Danach die Rechte richtig setzen:
opsi-setup --set-rights /opt/pcbin/install/winxppro/custom
Will man unter Windows XP kein klassisches Menue/Theme, muss man folgendes in /opt/pcbin/install/winxppro/custom/unattend.txt aendern:
[Shell] DefaultStartPanelOff = No DefaultThemesOff = No
Danach die Rechte richtig setzen:
opsi-setup --set-rights /opt/pcbin/install/winxppro/custom
Nun zur Erstellung der Softwarepakete, die nachher auf den Client Rechner installiert werden sollen.
Vorlagen fuer die install.ins und uninstall.ins habe ich mir hier https://forum.opsi.org/wiki/userspace:script_templates gesorgt und angepasst.
Als Beispiel nun einmal fuer Firefox:
cd /home/opsiproducts opsi-newprod
Hier geben wir nun einige Daten zu dem Produkt an.
Bitte Produkt-Typ auswaehlen localboot -> OK
Produkt-ID firefox Produkt-Name Firefox Beschreibung Firefox Webbrowser Hinweis Firefox Produkt-Version 16.0.1 Paket-Version 1 Lizenzpflichtig False Prioritaet 0 -> OK
Setup-Skript install.ins Uninstall-Skript uninstall.ins Update-Skript Always-Skript Once-Skript Custom-Skript Benutzer-Anmeldungs-Skript -> OK
Wollen Sie eine Produkt-Abhaengigkeit definieren? Nein
Wollen Sie eine Produkt-Eigenschaft definieren? Nein
Informationen zum Betreuer Name des Betreuers Oliver Schuetz E-Mail des Betreuers admin@oppserver.net -> OK
Fertig Das Paket-Quellverzeichnis '/home/opsiproducts/firefox' wurde erzeugt.
Jetzt erstellen wir die benoetigten "Install" und "Uninstall"-files, die Anweisungen enthalten, wie das Paket nachher installiert werden soll. Die Ordnerstruktur sollte dann wie folgt aussehen:
root@opsi:/firefox/# -rwxr-xr-x 1 root pcpatch 2584 4. Jun 20:48 delsub.ins drwxr-xr-x 2 root pcpatch 4096 27. Sep 12:59 files -rwxr-xr-x 1 root pcpatch 40074 4. Jun 20:48 icon.bmp -rwxr-xr-x 1 root pcpatch 4477 27. Sep 12:56 install.ins -rwxr-xr-x 1 root pcpatch 2017 4. Jun 20:48 uninstall.ins root@opsi:/firefox/files/# -rw-r--r-- 1 root root 17653976 27. Sep 10:36 Firefox Setup 16.0.1.exe
Die Datei install.ins sieht wie folgt aus:
[Initial] ; Script angepasst von Oliver Schuetz LogLevel=2 ; Log Errors in Logfile but don't abort: ExitOnError=false ; Show syntax errors in the script: ScriptErrorMessages=on ; Dont trace step by step through the script: TraceMode=off ; let started programs run in front of the winst window StayOnTop=false [Aktionen] DefVar $ProductId$ DefVar $InstallDir$ DefVar $NewExe$ DefVar $PRODUCTPATH$ DefStringList $profiles$ DefVar $akt_profile_ini$ DefVar $rel_prefs_path$ DefVar $akt_prefs_path$ DefVar $TEMP$ DefVar $OS$ DefVar $UninstallCommand$ DefVar $MozInstallDir$ DefVar $MozVersion$ DefVar $MozInstallPathRegKey$ DefVar $PROXY_HOSTNAME_OR_IP$ DefVar $PROXY_PORT$ DefVar $NOPROXY_HOSTS$ DefVar $PREF_FILE$ DefStringList $languageInfo$ DefVar $language$ DefVar $AppData$ DefVar $SilentSwitch$ DefVar $ExitCode$ DefVar $FIREFOXVER$ ; ---------------------------------------------------------------------- Set $TEMP$ = EnvVar("TEMP") Set $PRODUCTPATH$="%ProgramFilesDir%\Mozilla Firefox" Set $MozInstallDir$ = $PRODUCTPATH$ set $InstallDir$=$PRODUCTPATH$ set $NewExe$= $PRODUCTPATH$+"\" set $ProductId$ = "firefox" set $OS$ = GetNTVersion set $FIREFOXVER$ = "Firefox Setup 16.0.1.exe" set $SilentSwitch$ = "-ms" ; ---------------------------------------------------------------------- ; Haben wir genug Speicherplatz? if not(HasMinimumSpace ("%SYSTEMDRIVE%", "30 MB")) LogError "Nicht genuegend Platz auf C: . 30 MB auf C: fuer Firefox erforderlich." isFatalError comment "Bearbeitung beenden und Produktschalter auf failed setzen" else comment "Zeige Produkt Bild" ShowBitmap /3 "%scriptpath%\icon.bmp" "Firefox" if FileExists("%ScriptPath%\delsub.ins") comment "start delsub.ins" sub "%ScriptPath%\delsub.ins" endif comment "Meldung waehrend der Installation:" Message "Installiere Firefox..." comment "Stoppe alle laufenden Firefox" killtask "firefox.exe" comment "pruefe nach depotshare" if not (FileExists("%SCRIPTPATH%")) DosInAnIcon_TryToReconnect endif comment "Starte Setup Programm" Files_copy_local Winbatch_firefox sub_check_exitcode comment "Stope alle laufenden Firefox" killtask "firefox.exe" if not(FileExists($NewExe$)) logError "Fatal: Nach der Installation "+$NewExe$+" nicht gefunden" isFatalError endif comment "loesche temporaere Dateien" Files_del endif [Files_copy_local] copy -x "%SCRIPTPATH%\files\$FIREFOXVER$" c:\tmp copy -s "%scriptpath%\firefox-profile\*" "$InstallDir$\defaults\profile\." [Files_del] delete -f "c:\tmp\$FIREFOXVER$" [Winbatch_firefox] ; see http://wiki.mozilla.org/Installer:Command_Line_Arguments "c:\tmp\$FIREFOXVER$" $SilentSwitch$ [dosbatch_profiledir] @echo off dir "%ProfileDir%" /b [DosInAnIcon_TryToReconnect] net use set TIMEOUT= :TRY if exist "%SCRIPTPATH%\." goto READY %ScriptDrive% set TIMEOUT=%TIMEOUT%1 if %TIMEOUT% == 1111111111111111 goto READY sleep 1 net use goto TRY :READY [PatchTextFile_profile_proxy_file] Set_Netscape_User_Pref ("network.proxy.type", 2) Set_Netscape_User_Pref ("network.proxy.autoconfig_url", "file:///$PROXY_HOSTNAME_OR_IP$") [sub_check_exitcode] comment "test for installation success via exit code" set $ExitCode$ = getLastExitCode ; informations to exit codes see ; http://msdn.microsoft.com/en-us/library/aa372835(VS.85).aspx ; http://msdn.microsoft.com/en-us/library/aa368542.aspx if ($ExitCode$ = "0") comment "looks good: setup program gives exitcode zero" else comment "Setup program gives a exitcode unequal zero: "+$ExitCode$ if ($ExitCode$ = "1605") comment "ERROR_UNKNOWN_PRODUCT 1605 This action is only valid for products that are currently installed." comment "Uninstall of a not installed product failed - no problem" else if ($ExitCode$ = "1641") comment "looks good: setup program gives exitcode 1641" comment "ERROR_SUCCESS_REBOOT_INITIATED 1641 The installer has initiated a restart. This message is indicative of a success." else if ($ExitCode$ = "3010") comment "looks good: setup program gives exitcode 3010" comment "ERROR_SUCCESS_REBOOT_REQUIRED 3010 A restart is required to complete the install. This message is indicative of a success." else logError "Fatal: Setup program gives an unknown exitcode unequal zero: "+$ExitCode$ isFatalError endif endif endif endif
Die Datei uninstall.ins sieht wie folgt aus:
[Initial] ; Script angepasst von Oliver Schuetz Message=Deinstalliere Firefox ... LogLevel=2 ExitOnError=false ScriptErrorMessages=on TraceMode=off [Actions] requiredWinstVersion >= "4.10.8.6" DefVar $UninstallProgram32$ DefVar $MsiId64$ DefVar $UninstallProgram64$ DefVar $LogDir$ DefVar $ExitCode$ DefVar $ProductId$ DefVar $MozInstallDir$ DefVar $MozInstallDir64$ DefVar $LicenseRequired$ DefVar $LicensePool$ DefVar $INST_SystemType$ DefVar $INST_architecture$ DefVar $UninstallCommand$ Set $INST_SystemType$ = GetSystemType set $INST_architecture$ = GetProductProperty("install_architecture","system specific") Set $LogDir$ = "%SystemDrive%\tmp" ; ---------------------------------------------------------------- ; - Please edit the following values - ; ---------------------------------------------------------------- Set $ProductId$ = "firefox" Set $MozInstallDir$ = "%ProgramFilesDir%\Mozilla Firefox" Set $LicenseRequired$ = "false" Set $LicensePool$ = "p_" + $ProductId$ ; ---------------------------------------------------------------- comment "Zeige Produkt Bild" ShowBitmap "%ScriptPath%\" + "icon.bmp" $ProductId$ Message "Deinstalliere " + $ProductId$ + " ..." if FileExists("%ScriptPath%\delsub.ins") comment "Start uninstall sub section" Sub "%ScriptPath%\delsub.ins" endif if $LicenseRequired$ = "true" comment "Licensing required, free license used" Sub_free_license endif [Sub_free_license] comment "License management is enabled and will be used" comment "Trying to free license used for the product" DefVar $result$ Set $result$ = FreeLicense($LicensePool$) ; If there is an assignment of a license pool to the product, it is possible to use ; Set $result$ = FreeLicense("", $ProductId$) ; ; If there is an assignment of a license pool to a windows software id, it is possible to use ; DefVar $WindowsSoftwareId$ ; $WindowsSoftwareId$ = "..." ; set $result$ = FreeLicense("", "", $WindowsSoftwareId$)
Die Datei delsub.ins sieht wie folgt aus:
;************************************************************ ; ;delsub.ins ; ;************************************************************ ; Message at install time: Message "Deinstalliere "+$ProductId$+" ..." ; kill a running firefox killtask "firefox.exe" ; if firefox uninstall program exists then start it if FileExists(""+$MozInstallDir$+"\uninstall\helper.exe") set $UninstallCommand$ = ""+$MozInstallDir$+"\uninstall\helper.exe" set $UninstallCommand$ = '"'+$UninstallCommand$+'" /S' WinBatch_start_FirefoxUninstall /WaitSeconds 20 sub_check_exitcode endif ; delete registry entry to the current installed version Registry_delete_current_version ; delete files of current version if not ($MozInstallDir$ = "") Files_copy_deinstall endif [WinBatch_start_FirefoxUninstall] $UninstallCommand$ ;%SCRIPTPATH%\sleep 5 [Files_copy_deinstall] delete -sf "$MozInstallDir$\" [Registry_delete_current_version] OpenKey [HKEY_LOCAL_MACHINE\Software\Mozilla\Mozilla Firefox] set "CurrentVersion" = "" [sub_check_exitcode] comment "test for installation success via exit code" set $ExitCode$ = getLastExitCode ; informations to exit codes see ; http://msdn.microsoft.com/en-us/library/aa372835(VS.85).aspx ; http://msdn.microsoft.com/en-us/library/aa368542.aspx if ($ExitCode$ = "0") comment "looks good: setup program gives exitcode zero" else comment "Setup program gives a exitcode unequal zero: "+$ExitCode$ if ($ExitCode$ = "1605") comment "ERROR_UNKNOWN_PRODUCT 1605 This action is only valid for products that are currently installed." comment "Uninstall of a not installed product failed - no problem" else if ($ExitCode$ = "1641") comment "looks good: setup program gives exitcode 1641" comment "ERROR_SUCCESS_REBOOT_INITIATED 1641 The installer has initiated a restart. This message is indicative of a success." else if ($ExitCode$ = "3010") comment "looks good: setup program gives exitcode 3010" comment "ERROR_SUCCESS_REBOOT_REQUIRED 3010 A restart is required to complete the install. This message is indicative of a success." else logError "Fatal: Setup program gives an unknown exitcode unequal zero: "+$ExitCode$ isFatalError endif endif endif endif
Die Datei icon.bmp enthaelt das Logo/Icon des Installers.
Nun laden wir die zuvor erstellten Files nach /home/opsiproducts/firefox/CLIENT_DATA auf den Server.
Die Ordnerstruktur sollte dann wie folgt aussehen:
/home/opsiproducts/firefox drwxr-s--- 3 root pcpatch 4096 27. Sep 12:59 CLIENT_DATA drwxr-s--- 2 root pcpatch 4096 27. Sep 12:58 OPSI drwxr-s--- 2 root pcpatch 4096 27. Sep 12:58 SERVER_DATA /home/opsiproducts/firefox/CLIENT_DATA -rwxr-xr-x 1 root pcpatch 2584 4. Jun 20:48 delsub.ins drwxr-xr-x 2 root pcpatch 4096 27. Sep 12:59 files -rwxr-xr-x 1 root pcpatch 40074 4. Jun 20:48 icon.bmp -rwxr-xr-x 1 root pcpatch 4477 27. Sep 12:56 install.ins -rwxr-xr-x 1 root pcpatch 2017 4. Jun 20:48 uninstall.ins /home/opsiproducts/firefox/CLIENT_DATA/files -rw-r--r-- 1 root root 17653976 27. Sep 10:36 Firefox Setup 16.0.1.exe
Jetzt koennen wir das OPSI Paket erstellen lassen:
cd /home/opsiproducts/firefox opsi-makeproductfile
Als letztes installieren wir das erzeugte Paket:
opsi-package-manager -i /home/opsiproducts/firefox/firefox_16.0.1-1.opsi
Falls man schon eine fruehere Version auf den Clients installiert hatte, kann man diese nun automatisch beim Installieren des neuen Paketes auf setup oder update setzen:
opsi-package-manager -iS /home/opsiproducts/firefox/firefox_16.0.1-1.opsi opsi-package-manager -iU /home/opsiproducts/firefox/firefox_16.0.1-1.opsi
Jetzt einmal die Management-Oberflaeche (opsi-configed) neu laden und schon sollte unter Produktkonfiguration das Firefox Paket auftauchen. Nun den Client/die Clients auswaehlen und Firefox auf setup stellen, dann einmal auf den roten Haken (Speichern der Konfiguration) klicken, schon sollte beim naechsten booten Firefox installiert werden.
KioskMode aktivieren und konfigurieren:
In der Management-Oberflaeche (opsi-configed) wechseln wir in die Server-Konfiguration. Hier stellen wir software-on-demand.active auf true, software-on-demand.product-group-ids lassen wir auf software-on-demand stehen und software-on-demand.show-details stellen wir auf true.
Jetzt wechseln wir in die Client-Konfiguration und dort nach Produktkonfiguration. Hier klicken wir auf Einblenden und geben der neuen Gruppe einen Namen und zwar software-on-demand, so wie es auch in software-on-demand.product-group-ids steht und als Beschreibung z.B. Software auf Anfrage. Jetzt waehlen wir mit Steuerungstaste (strg) die Pakete aus die ins SofwareOnDemand einfliessen sollen aus und klicken danach auf speichern.
Jetzt muessen wir auf den vorhandenen Clients nur die neue Version von opsi-client-agent installieren (auf neuen Clients geschieht dies automatisch) und schon erscheint im Client unter Start>Programme>opsi.org der Eintrag software-on-demand, womit sich Programme einfach installieren, deinstallieren und neu installieren lassen.