Opsi (Open PC Server Integration) est un outil de gestion de clients Windows basé sur un serveur Linux et sous licence AGPLv3 (hors code des modules cofinancés), version modifiée et orientée serveurs de la licence GPLv3. Son code source est la propriété de la société uib gmgh et son représentant en France/Belgique est la société Opensides.
Ses fonctionnalités principales sont :
- Installation automatisée via PXE de systèmes d’exploitation clients Windows par le biais d’une image
- Distribution automatique des logiciels via une connexion agent/serveur
- Intégration automatique des drivers en se basant sur l’ID de ceux-ci
- Inventaires matériels et logiciels
- Dépôts logiciels multiples et décentralisés
Objectif
Dans cet article, nous installerons un client Opsi Windows 10 64 bits présentant les caractéristiques suivantes :
- Nom court : opsiclt10-01
- FQDN : opsiclt10-01.opensharing.priv
- Adresse IP : 192.168.1.202
- Adresse MAC : 08:00:27:00:F3:97
Plusieurs scénarios seront envisagés :
- Scénario 1 : installation assistée d’un nouveau client en PXE; configuration réseau obtenue via PXE, images de boot et de l’OS obtenus via TFTP
- Scénario 2 : installation assistée d’un nouveau client en bootant à partir de l’ISO de l’image de boot stockée sur un support externe; configuration réseau obtenue via PXE et image de l’OS obtenue via TFTP
- Scénario 3 : installation automatisée d’un nouveau client en PXE à partir de l’interface de gestion Opsi Configed; images de boot et de l’OS obtenus via TFTP
- Scénario 4 : réinstallation automatisée d’un client en PXE à partir de l’interface de gestion Opsi Configed; images de boot et de l’OS obtenus via TFTP
- Scénario 5 : intégration d’un client existant; installation locale de l’agent Opsi directement sur l’hôte via le script service_setup.cmd
- Scénario 6 : intégration d’un client existant; installation distante de l’agent Opsi depuis le serveur Opsi via le script opsi-deploy-client-agent
Déroulement commun aux scénarios 1 à 4 :
- Récupération des paramètres réseau auprès du serveur DHCP via PXE
- Inventaire matériel et des drivers requis
- Chargement en local des fichiers du dossier winpe relatif à la distribution Windows 10 64 bits
- Chargement en local des fichiers stockés dans /var/lib/opsi/depot/opsi-client-agent/ (ici 999 fichiers et 178 dossiers)
- Chargement en local des fichiers des drivers identifiés
- Chargement en local de l’image Windows 10 via TFTP
- Installation de l’agent opsi et redémarrage
- Installation éventuelle de paquets programmés
Déroulement commun aux scénarios 5 et 6 :
- Chargement en local des fichiers stockés dans /var/lib/opsi/depot/opsi-client-agent/ (ici 999 fichiers et 178 dossiers)
- Installation de l’agent opsi et redémarrage
- Installation éventuelle de paquets programmés
Pré-requis
Ajout d’une réservation pour notre client sur les serveurs DHCP master et DHCP :
group { use-host-decl-names true; host opsiclt10-01 { hardware ethernet 08:00:27:00:F3:97; fixed-address 192.168.1.202; } }
include "/etc/bind/tsig.key"; authoritative; ddns-update-style standard; update-static-leases off; ignore client-updates; default-lease-time 1800; max-lease-time 1800; log-facility local7; db-time-format local; failover peer "opensharing-failover" { primary; address 192.168.1.11; port 647; peer address 192.168.1.12; peer port 647; max-response-delay 30; max-unacked-updates 3; load balance max seconds 3; mclt 480; split 128; } subnet 192.168.1.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; option routers 192.168.1.1; ddns-domainname "opensharing.priv"; ddns-rev-domainname "in-addr.arpa"; option domain-name "opensharing.priv"; option domain-name-servers dns1.opensharing.priv, dns2.opensharing.priv; set vendor-string = option vendor-class-identifier; pool { failover peer "opensharing-failover"; range 192.168.1.100 192.168.1.199; allow unknown-clients; } group { use-host-decl-names true; host opsiclt7-01 { hardware ethernet 00:50:56:32:66:32; fixed-address 192.168.1.201; } host opsiclt10-01 { hardware ethernet 08:00:27:00:F3:97; fixed-address 192.168.1.202; } } } zone opensharing.priv { primary 192.168.1.11; key "tsig-key"; } zone 1.168.192.in-addr.arpa. { primary 192.168.1.11; key "tsig-key"; }
include "/etc/bind/tsig.key"; authoritative; ddns-update-style standard; update-static-leases off; ignore client-updates; default-lease-time 1800; max-lease-time 1800; log-facility local7; db-time-format local; failover peer "opensharing-failover" { secondary; address 192.168.1.12; port 647; peer address 192.168.1.11; peer port 647; max-response-delay 30; max-unacked-updates 3; load balance max seconds 3; } subnet 192.168.1.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; option routers 192.168.1.1; ddns-domainname "opensharing.priv"; ddns-rev-domainname "in-addr.arpa"; option domain-name "opensharing.priv"; option domain-name-servers dns1.opensharing.priv, dns2.opensharing.priv; set vendor-string = option vendor-class-identifier; pool { failover peer "opensharing-failover"; range 192.168.1.100 192.168.1.199; allow unknown-clients; } group { use-host-decl-names true; host opsiclt7-01 { hardware ethernet 00:50:56:32:66:32; fixed-address 192.168.1.201; } host opsiclt10-01 { hardware ethernet 08:00:27:00:F3:97; fixed-address 192.168.1.202; } } } zone opensharing.priv { primary 192.168.1.11; key "tsig-key"; } zone 1.168.192.in-addr.arpa. { primary 192.168.1.11; key "tsig-key"; }
Ajout d’un enregistrement de type A sur le serveur DNS master (répliqué automatiquement sur le DNS slave) :
# nsupdate -k /etc/bind/tsig.key
> update add opsiclt10-01.opensharing.priv 86400 a 192.168.1.202
> send
> update add 202.1.168.192.in-addr.arpa 86400 ptr opsiclt10-01.opensharing.priv
> send
Vérification de la résolution de noms directe et inversée :
# host opsiclt10-01 opsiclt10-01.opensharing.priv has address 192.168.1.202 # host 192.168.1.202 202.1.168.192.in-addr.arpa domain name pointer opsiclt10-01.opensharing.priv.
Réalisation
Voir l’article Opsi – Installation d’un client Windows 7 car la procédure est strictement identique, mis à part le fait que le produit Netboot à installer est Win10 (pour Windows 10 32 bits) ou Win10-x64 (pour Windows 10 64 bits).

Après la fin de l’installation, le nouveau client opsiclt10-01 apparait bien sur l’interface de gestion Opsi Configed et son fichier de backend /var/lib/opsi/config/clients/opsiclt10-01.opensharing.priv.ini a été généré :
Toutefois, on a pu constater plusieurs correctifs à apporter par la suite :
- L’image miniroot.bz2 est en allemand
- Le clavier de l’OS Windows 7 est en allemand
- Il est demandé à l’utilisateur de saisir la clef d’activation Windows au cours de l’installation de l’OS
- L’agent Opsi est également en allemand
Pour cela, voir l’article Opsi – Pour aller plus loin.
Rmq :
Au cours de cette installation, l’agent Opsi ou Opsi-Winst ne s’est pas installé correctement, peut-être du fait que, par défaut, l’autologin de l’administrateur est actif sur Windows 10. De plus, son mot de passe n’est pas défini. Ce problème a été corrigé en désactivant l’autologin, en définissant un mot de passe pour le compte Administrateur, en réinitialisant les produits Localboot, et en programmant (par un setup) une installation de opsi-client-agent pour le prochain redémarrage du client.
Aller plus loin