opsi version 4.0.2 (Partie 2) Notes de version - Index of

Transcription

opsi version 4.0.2 (Partie 2) Notes de version - Index of
opsi version 4.0.2 (Partie 2) Notes de version
Revision: 16.10.2012
OpenSides sprl
Rue des Palais 44, bte 33
1030 Brussels
Tel.:+32 2 880 97 40
www.opensides.be
[email protected]
opsi version 4.0.2 (Partie 2) Notes de version
i
Table des matières
1 Droit d’auteur
1
2 Vue d’ensemble des nouvelles fonctionnalités
2
3 Remarques sur l’installation
4
4 Outil: L’interface de gestion opsi-configed
5
4.1
Sélection des clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 Les extensions à l’intégration des pilotes
5.1
5
7
Intégration simplifiée des pilotes lors de l’installation automatique de Windows . . . . . . . . . . . . .
7
5.1.1
Packages de pilotes génériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
5.1.2
Pilotes préférés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
5.1.3
Les pilotes qui seront attribuées manuellement aux ordinateurs . . . . . . . . . . . . . . . . . .
8
5.1.4
Les pilotes qui seront automatiquement attribués à des ordinateurs à l’aide des champs
<vendeur> / <Modèle> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
5.1.5
Structure du répertoire des pilotes et des fichiers des pilotes: . . . . . . . . . . . . . . . . . . .
8
5.1.6
Traitement des différents niveaux d’intégration des pilotes . . . . . . . . . . . . . . . . . . . . .
9
5.1.7
Ajout d’un Pilote et Vérification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
6 Inventaire
13
6.1
Inventaire Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
6.2
Inventaire des logiciels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
7 Les modifications apportées au nouveau opsi-linux-bootimage
17
8 Les modifications apportées à opsiconfd
18
9 Authentification opsi PAM
19
10 /etc/opsi/opsi.conf
20
11 Trouver des Switches Silent ou Unattended
21
11.1 Script pour les installations dans le contexte d’un administrateur local . . . . . . . . . . . . . . . . . .
22
ii
opsi version 4.0.2 (Partie 2) Notes de version
12 opsi-winst 4.11.3
23
12.1 Début et Options de ligne de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
12.2 Constantes globales de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
12.2.1 opsi-winst Chemin et Répertoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
12.3 Sections primaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
12.3.1 Réaction aux erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
12.3.2 Afficher le mode fenêtre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
12.3.3 Les commandes Include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
12.3.3.1 Les commandes Include: Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
12.3.3.2 Les commandes Include: Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
12.3.4 Manipulation de chaîne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
12.3.5 Autres Fonctions sur les chaînes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
12.3.6 Les expressions booléennes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
12.3.7 Les listes de chaînes du Registre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
12.3.8 Les listes de chaînes provenant des Propriétés du produit . . . . . . . . . . . . . . . . . . . . .
33
12.3.9 Autres Listes de chaînes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
12.3.10 Garder une trace des installations qui ont échoué . . . . . . . . . . . . . . . . . . . . . . . . . .
34
12.3.11 Commandes pour contrôler la journalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
12.4 Sections Secondaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
12.4.1 Sections Patch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
12.4.1.1 Paramètre d’Appel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
12.4.2 Sections ExecWith . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
12.4.3 Sections WinBatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
12.4.3.1 Paramètre d’Appel (Modificateur) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
12.5 Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
13 Miscellanées
39
13.1 Changelogs: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
13.1.1 Changelog opsi-configed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
13.1.2 Changelog opsi-winst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
13.1.3 Changelog hwaudit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
13.1.4 Changelog swaudit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
13.1.5 Changelog jedit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
13.1.6 Changelog opsi-adminutils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
13.1.7 Changelog opsi-template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
13.1.8 Changelog opsi-template-with-admin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
13.1.9 Changelog opsi-client-agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
13.1.10 Changelog windows Netboot Products . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
13.1.11 Changelog python-opsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
iii
opsi version 4.0.2 (Partie 2) Notes de version
13.1.12 Changelog opsipxeconfd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
13.1.13 Changelog opsiconfd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
13.1.14 Changelog opsi-utils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
13.1.15 Changelog opsi-linux-bootimage
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
13.1.16 Changelog opsi-depotserver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
13.1.17 Changelog opsi4ucs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
13.1.18 Changelog opsi-atftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
opsi version 4.0.2 (Partie 2) Notes de version
Chapitre 1
Droit d’auteur
Le droit d’auteur de ce manuel est détenu par uib gmbh à Mainz, Allemagne.
Le droit d’auteur de la traduction francaise est détenu par OpenSides à Bruxelles, Belgique.
Ce manuel est publié sous licence creative commons
Attribution - ShareAlike (by-sa).
Vous trouverez ici la description allemande:
http://creativecommons.org/licenses/by-sa/3.0/de/
La licence allemande:
http://creativecommons.org/licenses/by-sa/3.0/de/legalcode
La description anglaise:
http://creativecommons.org/licenses/by-sa/3.0/
La licence anglaise:
http://creativecommons.org/licenses/by-sa/3.0/legalcode
La description française:
http://creativecommons.org/licenses/by-sa/3.0/deed.fr
Le logiciel OPSI est dans la plupart de ces pièces open source.
Seulement les nouvelles pièces qui sont encore sous le cofinancement ne sont pas open source.
voir:
http://www.opsi.org/fr/projets-de-co-financement
Tout le reste du code source est publié sous licence GPLv3:
La licence GPLv3:
http://www.gnu.org/licenses/gpl.html
Le nom opsi est une marque déposée de uib gmbh.
Le logo de opsi est détenue par uib gmbh et peut être utilisé uniquement avec l’autorisation explicite.
1 / 49
opsi version 4.0.2 (Partie 2) Notes de version
2 / 49
Chapitre 2
Vue d’ensemble des nouvelles fonctionnalités
La deuxième partie de la release opsi 4.0.2 est riche en nouvelles fonctionnalités et améliorations. Voici un aperçu:
– opsi 4.0.2 fonctionne avec les distributions Linux suivantes:
– Ubuntu 12.04
– Redhat 6
– CentOS 6
– UCS 3.0 (avec digitec-opsi-listener)
– OpenSuse 12.1
– OpenSuse 12.2
– Une nouvelle opsi-VM préconfiguré basée sur Ubuntu 12.04 avec le connecteur opsi-Nagios préconfiguré.
Les instructions d’installation pour toutes les distributions Linux prises en charge et la VM peuvent être trouvées dans
le guide opsi-getting-started.
– opsi-configed
– Une nouvelle fonctions de recherche sur le client avec des fonctionnalités très avancées
Voir ci-dessous pour plus d’informations
– Les recherches peuvent être stockés et exécutés plusieurs fois
– Arborescence des répertoires dans TreeView
Sous Directory, un arbre hiérarchique peut être créé pour la gestion des clients. Contrairement à groups, chaque
client doit être exactement à un endroit dans Directory.
– La description du groupe sera affiché comme une bulle d’aide.
– Les différences entre les valeurs par défaut des clients et la valeur des propriétés spécifiques de l’hôte,pour un
produit, sont affichés en gras.
– Si la version d’un client diffère de celle sur le serveur, l’information de version est affiché en couleur.
– Nom du produit est désormais une colonne supplémentaire dans les onglets Configuration produit et Produits
Netboot, et il est configurable.
– Appuyant sur Ré-initialiser les produits locaux dans le menu contextuel de l’onglet Client, vous supprimerez toutes
les informations sur les produits installés sur ce client.
– Les valeurs de la colonne Rapport peuvent être remis à zéro dans les onglets Configuration produit et Produits
Netboot.
Par exemple, la colonne Rapport peut être réinitialisé manuellement après que le statut de failed a été signalée.
– Les demandes de connexion et les demandes des séances d’information sont décalés dans les discussions, de sorte
que des connexions "suspendu" sont évités dans opsi-configed.
– Il y a une case à cocher dans la fenêtre de connexion au service Web qui établit les communications avec le format
compressé gzip.
opsi version 4.0.2 (Partie 2) Notes de version
3 / 49
– Inventaire matériel
– Dell Express Code est maintenant déterminée pour les ordinateurs Dell.
– L’inventaire matériel peut être étendue en appelant des méthodes spéciales. Voir la description ci-dessous.
– Intégration pilote
Les packages de pilotes sont automatiquement assignés à des ordinateurs basés sur le modèle de données du vendeur
et de l’inventaire du matériel. Voir les descriptions ci-dessous.
– Il y a un fichier de configuration dans /etc/opsi/opsi.conf, qui contrôle l’accès Samba 4.
– Produits Netboot Windows
– Correctif de sécurité pour la version WinPE
– Adapté pour l’intégration avancé des pilotes
– Détecteur de configuration opsi
– opsi-winst:
Il existe une variété d’extensions, qui sont décrites ci-dessous.
opsi version 4.0.2 (Partie 2) Notes de version
4 / 49
Chapitre 3
Remarques sur l’installation
Les produits qui sont publiés dans le cadre du présent communiqué sont dépendants les uns des autres. Vous ne devriez
pas essayer d’installer une seule pièce sans les autres parties.
Aucune procédure spéciale n’est requise lors de l’installation. L’installation se déroule durant les mises à jour du
serveur et des produits opsi.
Le serveur doit être mis à jour avant les produits opsi.
cd /home/opsiproducts
mkdir opsi402-2
cd opsi402-2
wget -r -l1 -nc -nd -A "*.opsi" http://download.uib.de/opsi4.0/testing/opsi402-2/products/
opsi-package-manager -i *.opsi
Si la commande wget échoue, http_proxy devrait probablement être mis à http_proxy=http://192.168.1.5:8080/
Si vous avez un dépôts multiples, vous devez mettre à niveau le serveur avant la mise à niveau des dépôts.
opsi version 4.0.2 (Partie 2) Notes de version
5 / 49
Chapitre 4
Outil: L’interface de gestion opsi-configed
4.1
Sélection des clients
La liste des clients peut avoir un ou plusieurs clients. Cela permet le traitement de plusieurs clients en même temps.
La liste des clients qui sont affichés dans l’onglet Selection des clients peut être limitée en utilisant l’icône entonnoir
ou le menu déroulant Sélection / Montrer seulement les clients sélectionnés.
La fonction enregistrer les clients sélectionnés en tant que groupe a été abandonnée. Vous pouvez utiliser la souris et
ajoutez les clients sélectionnés à un groupe existant en les faisant glisser dans un groupe existant qui est affiché dans
l’arborescence.
Dans la boîte de dialogue de sélection des clients (via le menu «Sélection / Préciser la recherche») les clients peuvent
être sélectionnés en utilisant une variété de critères basés sur leurs configurations.
Figure 4.1 – opsi-configed: dialogue de sélection
Par exemple, il est possible de rechercher des produits opsi installés ainsi que des logiciels tels que trouvés par l’audit
logiciel d’OPSI (swaudit). Vous pouvez ainsi rechercher les PC satisfaisant certaines conditions matérielles. Les critères
opsi version 4.0.2 (Partie 2) Notes de version
6 / 49
peuvent être combinés par des opérateurs logiques and ou or et aussi être négatif. Les chaînes de recherche peuvent
être donnés sous forme de chaînes fixes combinés avec des astérisques * en tant que symboles génériques.
Les définitions de recherche peuvent être enregistrés, puis de nouveau utilisé par le menu Sélection / Utilisez définition
de recherche sauvegardée.
Figure 4.2 – opsi-configed: Recherches sauvegardées
Il est également possible d’exécuter une recherche enregistrée à partir de la ligne de commande lorsque l’éditeur de
opsi-configed est lancé. En incluant le drapeau "-qs" et le nom de la recherche enregistrée, l’éditeur de configuration
démarre avec les résultats de la recherche sauvegardée. Si le nom est omis, une liste de recherches disponibles seront
affichés.
opsi version 4.0.2 (Partie 2) Notes de version
7 / 49
Chapitre 5
Les extensions à l’intégration des pilotes
Le chapitre sur l’intégration des pilotes dans opsi-getting-started-manuel a été révisée. Plus spécifiquement, le chapitre
décrit les nouvelles fonctions de Les pilotes qui seront automatiquement attribués aux ordinateurs étant donné les les
champs d’inventaire <vendeur> / <modèle>.
5.1
Intégration simplifiée des pilotes lors de l’installation automatique de
Windows
Si un groupe d’ordinateurs ont des pilotes qui ne font pas partie de l’installation par défaut de Windows, il est
préférable de mettre ces ordinateurs dans un pool et d’intégrer leurs pilotes au cours de l’installation.
Opsi prend en charge l’intégration automatique des pilotes dans l’installation, et simplifie donc le déploiement des
pilotes. Dans ce cas, les pilotes doivent simplement être placé dans le répertoire approprié. Lorsque le script d’installation est appelé il cherche à travers ces répertoires et crée un catalogue. L’image de démarrage utilise automatiquement
ce catalogue pour intégrer les bons pilotes. Opsi prend en charge l’installation automatique des pilotes standard, USB,
HD audio, et contrôleur de disque.
Pour qu’un pilote soit immédiatement installé avec Windows, vous devez placer les pilotes sur le serveur dans un
format spécifique. Les pilotes doivent être placés dans le répertoire des pilotes, avec le format *.inf , où le nom du
fichier décrit le pilote pour le programme d’installation de Windows. Les pilotes dans le format setup.exe ou *.zip ne
sont pas utilisés ici. Si vous avez un ordinateur qui a déjà installé les pilotes, alors vous pouvez extraire les pilotes
appropriés à l’aide du programme double driver (http://www.boozet.org/dd.htm).
Il y a plusieurs niveaux d’intégration des pilotes:
– Packages de pilotes générales
– Pilotes préférés qui appartiennent à votre matériel, mais ne sont pas affectés à des ordinateurs spécifiques
– Les pilotes qui seront affectées manuellement à des ordinateurs
– Les pilotes qui seront automatiquement attribués aux ordinateurs utilisant les champs <vendeur> / <Modèle>
Ci-dessous, un exposé détaillé sur la façon d’inclure chacun de ces pilotes
5.1.1
Packages de pilotes génériques
Lorsque la configuration matérielle est très hétérogène, alors il peut être judicieux de travailler avec les packages de
pilotes génériques.
Les pilotes génériques peuvent être placés sous ./drivers/drivers.
Vous pouvez trouver par exemple les paquets de pilotes génériques ici http://driverpacks.net/ .
Téléchargez le package du pilote approprié dans un répertoire temporaire, puis décompressez le package du pilote en
utilisant le script opsi extract_driver_pack.py comme suit:
opsi version 4.0.2 (Partie 2) Notes de version
8 / 49
./extract_driver_pack.py <path to the temporary directory with the compressed driverpacks>
Cela vas décompresser et enregistrer les pilotes dans le répertoire ./drivers/drivers/.
Il peut arriver que les pilotes trouvés par opsi à cet endroit ne fonctionnent pas nécessairement avec votre matériel.
Pour les pilotes qui se trouvent dans ./drivers/drivers/, le pilote sera identifié à l’aide du matériel correspondant
PCI IDs (par exemple USB- ou HD_Audio-ID) dans le fichier de description, puis intégré dans l’installation de
Windows en fonction des besoins.
5.1.2
Pilotes préférés
Dans le cas que vous avez à supporter du matériel spécial, et vous pouvez trouver les pilotes supplémentaires auprès
des fabricants, utilisez la procédure suivante pour les inclure dans l’installation.
Placez les pilotes supplémentaires dans leur propre répertoire sous:
./drivers/drivers/preferred.
(le nom et la profondeur de la structure du répertoire n’est pas important). Les pilotes qui se trouvent dans le
répertoire ./drivers/drivers/preferred seront intégrés dans l’installation de Windows, en supposant que opsi
trouve une correspondance convenable pour le matériel basé sur le PCI IDs (ex.. USB or HD_Audo-ID) dans le fichier
de description.
Des problèmes peuvent survenir lorsque le même PCI IDs des pilotes se trouve dans preferred. Dans ce cas, un
mappage direct des pilotes des périphériques est nécessaire.
5.1.3
Les pilotes qui seront attribuées manuellement aux ordinateurs
Lors de l’installation des pilotes supplémentaires sur la base du PCI-IDs ou USB-IDs, ils doivent être installés dans le
répertoire ./drivers/drivers/additional (le nom et la profondeur de la structure du répertoire n’est pas important).
Vous pouvez mapper un ou plusieurs pilotes pour le client à l’aide de la propriété du produit additional_drivers et d’une
liste de répertoires du pilote sous ./drivers/drivers/additional. Les répertoires spécifiés par additional_drivers
sont recherchés de façon récursive jusqu’à ce que tous les pilotes sont trouvés. Cette méthode peut être utilisée pour
créer un répertoire spécifique basé sur le type de client (ex. dell-optiplex-815).
Quand un pilote est trouvé dans le répertoire des pilotes qui est spécifié par additional_drivers et correspond également
à l’identifiant PCI, d’autres pilotes dans drivers/preferred ou drivers/ ne seront pas utilisés. Par conséquent les
pilotes dans additional_drivers ajoutent des fonctionnalités qui n’auraient pas été trouvé avec les pilotes normaux. En
outre, les pilotes qui sont manuellement lié à un client à l’aide de additional_drivers ont priorité sur les autres pilotes
(additional_drivers peut être considéré comme super-preferred).
5.1.4
Les pilotes qui seront automatiquement attribués à des ordinateurs à l’aide des champs
<vendeur> / <Modèle>
Les mécanismes décrits précédemment qui mappent directement les pilotes des périphériques est automatisé depuis la
version 4.0.2 Release 2 de opsi. Opsi recherchera dans le répertoire ./drivers/drivers/additional/byAudit un nom
de répertoire qui correspond au champ Vendor qui a été donnée dans l’inventaire du matériel. Ce répertoire Vendor
recherchera un répertoire Model qui correspond à ce qu’on voit dans l’inventaire matériel. Si ce répertoire est trouvé,
alors il sera attribué manuellement à la propriété du produit additional_drivers.
Le nom du répertoire byAudit est sensible à la casse. Les noms de répertoires pour Vendor et Model ne sont pas
sensibles à la casse (Dell et dELL sont traités de la même manière).
5.1.5
Structure du répertoire des pilotes et des fichiers des pilotes:
/opt/
!-pcbin/
!-install/
!-winxppro/
!-drivers
opsi version 4.0.2 (Partie 2) Notes de version
|-classes/
|-hdaudioids/
|-pciids/
|-pci.ids
|-usbids/
|-usb.ids
|-vendors/
!-drivers
|-additional/
|-byAudit/
|-<vendor>
|-<model>
|-buildin/
|-preferred/
|-exclude/
!-mydriverpacks/
5.1.6
9 / 49
(Liens vers des classes de pilotes de périphériques)
(Liens vers des pilotes HD-Audio)
(Liens vers des pilotes PCI-ID)
(base de données PCI)
(Liens vers des pilotes USB-ID)
(base de données USB)
(Liens vers les pilotes du fabricant)
(place pour les packages de pilotes génériques)
(pilotes assignées manuellement)
Pilotes spécifiques au modèle que
seront affectés par
l’inventaire du matériel
(données pour la version i386)
(pilotes certifiés)
(pilotes exclus)
(packages de pilotes d’exemple)
Traitement des différents niveaux d’intégration des pilotes
La priorité est donnée aux pilotes qui sont trouvés en utilisant la propriété additional_drivers ou à l’aide des données
d’inventaire dans ./drivers/drivers/additional/byAudit. Les tests seront effectués lors de l’intégration du pilote
pour déterminer quels pilotes sont déjà installés sur quelles périphériques matériels. Quand un pilote est introuvable
pour un périphérique, la méthode suivante sera utilisée pour rechercher les pilotes.
Pour les appareils qui ont des pilotes qui n’ont pas été énumérés dans additional_drivers, opsi va rechercher, et intégrer,
un pilote approprié basé sur le PCI ID (ex. USB-, HD_Audio-ID).
Intégration des pilotes signifie ce qui suit:
– Le pilote sera copié sur le disque dur local dans c:\drv\<num>.
– L’installation de Windows recherche le sous-répertoire du pilote dans c:\drv\ , où le nom du sous-répertoire sera
lu à partir du fichier unattended à la racine du sous-répertoire unattend.
5.1.7
Ajout d’un Pilote et Vérification
Après tout changement dans le répertoire ./drivers/drivers , appelez la commande suivante à partir du répertoire
racine des produits Netboot afin de définir les permissions:
opsi-setup --set-rights ./drivers
Ensuite, appelez le script ./create_driver_links.py. Le script recherche à travers les sous-répertoires ./drivers/drivers et génère une liste de liens en utilisant le PCI-IDs, USB-IDs, HD-Audio-IDs qui permet au matériel de connaître
les pilotes. Le script va utiliser les pilotes dans les répertoires préférés.
Le script setup.py examine le matériel des ordinateurs installés et identifie les pilotes nécessaires. Ceux-ci seront
copiés sur le disque et le fichier Unattended.txt sera corrigé. Le script create_driver_links.py examine les produits
NT5 une à la fois dans l’arbre i386 et extrait les fichiers. inf des pilotes nécessaires dans windows_builtin. Si vous
apportez une modification à l’arborescence du répertoire i386 (ex. après l’installation d’un Service Pack), supprimez
ce répertoire et lancez à nouveau create_driver_links.py. Les pilotes reconnus pour les produits NT6, sont trouvés
dans WinPE à windows_builtin.
Avec la commande suivante, on peut voir l’inventaire matériel pour un client:
./show_drivers.py <clientname>
Lorsque cette commande est appelée, il vous montrera une sélection des pilotes qui seront choisis pour l’installation
Bootimage via PCI-IDs, USB-IDs, HD-Audio-IDs, et additional_drivers (ou byAudit), et le matériel qui n’a toujours
pas de pilote.
Utilisez le résultat de show_drivers.py pour vérifier et voir quels pilotes doivent être installés.
opsi version 4.0.2 (Partie 2) Notes de version
10 / 49
Il se pourrait que les fabricants incluent des pilotes différents pour différents systèmes d’exploitation (ex. Vista ou
Win7) ou différentes configurations (ex. SATA ou SATA RAID). Le script create_driver_links.py ne peut pas faire
cette distinction. Si vous pensez que le mauvais pilote a été installé, déplacez le pilote dans le répertoire drivers/exclude
et appelez à nouveau create_driver_links.py. Les pilotes dans le répertoire drivers/exclude ne sont pas utilisés au
cours de l’intégration.
Exemple de sortie d’un appel show_drivers.py:
./show_drivers.py pcdummy
PCI-Devices
[(Standardsystemgeräte), PCI Standard-PCI-zu-PCI-Brücke]
No driver - device directory /opt/pcbin/install/winxppro/drivers/pciids/1022/9602 not found
[ATI Technologies Inc., Rage Fury Pro (Microsoft Corporation)]
Using build-in windows driver
[(Standard-IDE-ATA/ATAPI-Controller), Standard-Zweikanal-PCI-IDE-Controller]
/opt/pcbin/install/winxppro/drivers/drivers/D/M/N/123
[Realtek Semiconductor Corp., Realtek RTL8168C(P)/8111C(P) PCI-E Gigabit Ethernet NIC]
/opt/pcbin/install/winxppro/drivers/drivers/preferred/realtek_gigabit_net_8111_8168b
[IEEE 1394 OHCI-konformer Hostcontroller-Hersteller, OHCI-konformer IEEE 1394-Hostcontroller]
No driver - device directory ’/opt/pcbin/install/winxppro/drivers/pciids/197B/2380’ not found
[Advanced Micro Devices, Inc., AMD AHCI Compatible RAID Controller]
/opt/pcbin/install/winxppro/drivers/drivers/preferred/ati_raid_sb7xx
[(Standard-USB-Hostcontroller), Standard OpenHCD USB-Hostcontroller]
No driver - device directory ’/opt/pcbin/install/winxppro/drivers/pciids/1002/4397’ not found
[ATI Technologies Inc, ATI SMBus]
/opt/pcbin/install/winxppro/drivers/drivers/preferred/ati_smbus
USB-Devices
[(Standard-USB-Hostcontroller), USB-Verbundgerät]
/opt/pcbin/install/winxppro/drivers/drivers/preferred/brother_844x_pGerb
[Microsoft, USB-Druckerunterstützung]
/opt/pcbin/install/winxppro/drivers/drivers/preferred/brother_844x_pGerb
Additional drivers
[ati_hdaudio_azalia]
/opt/pcbin/install/winxppro/drivers/drivers/additional/ati_hdaudio_azalia
Exemple avec additional_drivers:
./show_drivers.py e5800
Manually selected drivers (additional)
[hp_e5800]
[/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/hp_e5800/sp52852/Vista64/HDXHPAI3.inf]
[/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/hp_e5800/sp52852/Vista64/HDX861A.inf]
[/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/hp_e5800/sp52852/Vista64/HDXHPAI1.inf]
[/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/hp_e5800/sp52852/Vista64/HDXCPC.inf]
[/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/hp_e5800/sp52852/Vista64/HDXHPAI2.inf]
[/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/hp_e5800/sp50134/autorun.inf]
[/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/hp_e5800/sp50134/ibxHDMI/IntcDAud.inf]
[/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/hp_e5800/sp50134/HDMI/IntcHdmi.inf]
[/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/hp_e5800/sp50134/Graphics/kit24890.inf]
[/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/hp_e5800/sp50134/IIPS/Impcd.inf]
[/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/hp_e5800/sp54284/Realtek 64bit/hp64win7\
.inf]
PCI-Devices
[8086:27C8] Intel : Intel(R) N10/ICH7 Family USB Universal Host Controller - 27C8
/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/preferred/R293337/WIN7
[8086:27DA] Intel : Intel(R) N10/ICH7 Family SMBus Controller - 27DA
/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/preferred/R293337/WIN7
[8086:27C9] Intel : Intel(R) N10/ICH7 Family USB Universal Host Controller - 27C9
/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/preferred/R293337/WIN7
[8086:27DF] Intel : Intel(R) ICH7 Family Ultra ATA Storage Controllers - 27DF
/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/preferred/R293337/WIN7
[8086:27CA] Intel : Intel(R) N10/ICH7 Family USB Universal Host Controller - 27CA
/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/preferred/R293337/WIN7
[8086:2E30] Intel : Intel(R) 4 Series Chipset Processor to I/O Controller - 2E30
11 / 49
opsi version 4.0.2 (Partie 2) Notes de version
/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/not_preferred/x64/C/Intel/1
[8086:27CB] Intel : Intel(R) N10/ICH7 Family USB Universal Host Controller - 27CB
/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/preferred/R293337/WIN7
[8086:2E32] Intel Corporation : Intel(R) G41 Express Chipset
Manually selected [hp_e5800] /opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/hp_e5800/\
sp50134/Graphics
[8086:27CC] Intel : Intel(R) N10/ICH7 Family USB2 Enhanced Host Controller - 27CC
/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/preferred/R293337/WIN7
[8086:244E] Intel : Intel(R) 82801 PCI-Brücke - 244E
Using build-in windows driver
This driver will not be integrated, because same device already integrated in: ’/opt/pcbin/install/win7-x64-\
professional-msdn/drivers/drivers/not_preferred/x64/C/Intel/1/dmi_pci.inf’
[8086:27D0] Intel : Intel(R) N10/ICH7 Family PCI Express Root Port - 27D0
/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/preferred/R293337/WIN7
[8086:27B8] Intel : Intel(R) ICH7 Family LPC Interface Controller - 27B8
/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/preferred/R293337/WIN7
[8086:27D2] Intel : Intel(R) N10/ICH7 Family PCI Express Root Port - 27D2
/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/preferred/R293337/WIN7
[8086:27C0] Intel : Intel(R) N10/ICH7 Family Serial ATA Storage Controller - 27C0
/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/preferred/R293337/WIN7
[8086:27D8] Microsoft : High Definition Audio-Controller
No driver - device directory ’/opt/pcbin/install/win7-x64-professional-msdn/drivers/pciids/8086/27D8’ not found
[10EC:8136] Realtek : Realtek RTL8102E/RTL8103E-Familie-PCI-E-Fast-Ethernet-NIC (NDIS 6.20)
Manually selected [hp_e5800] /opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/hp_e5800/\
sp54284/Realtek 64bit
USB-Devices
[0461:0010]
No driver
[0461:4D20]
No driver
[058F:6366]
No driver
[0461:0010]
No driver
(Standardsystemgeräte) : USB-Eingabegerät
- vendor directory ’/opt/pcbin/install/win7-x64-professional-msdn/drivers/usbids/0461’
(Standardsystemgeräte) : USB-Eingabegerät
- vendor directory ’/opt/pcbin/install/win7-x64-professional-msdn/drivers/usbids/0461’
Kompatibles USB-Speichergerät : USB-Massenspeichergerät
- vendor directory ’/opt/pcbin/install/win7-x64-professional-msdn/drivers/usbids/058F’
(Standard-USB-Hostcontroller) : USB-Verbundgerät
- vendor directory ’/opt/pcbin/install/win7-x64-professional-msdn/drivers/usbids/0461’
not found
not found
not found
not found
HD-Audio-Devices
[10EC:0662] Realtek High Definition Audio
Manually selected [hp_e5800] /opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/hp_e5800/\
sp52852/Vista64
Exemple avec byAudit:
./show_drivers.py pctry5detlef
Manually selected drivers (additional)
[/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/byAudit/nvidia/awrdacpi]
[/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/byAudit/nvidia/awrdacpi/pctry5detlef/\
Display/Radeon X300-X550-X1050 Series Secondary (Microsoft Corporation - WDDM)/atiilhag.inf]
[/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/byAudit/nvidia/awrdacpi/pctry5detlef/\
Display/Radeon X300-X550-X1050 Series (Microsoft Corporation - WDDM)/atiilhag.inf]
[/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/byAudit/nvidia/awrdacpi/pctry5detlef/\
MEDIA/Realtek AC’97 Audio/oem21.inf]
PCI-Devices
[1002:5B70] ATI Technologies Inc. : Radeon X300/X550/X1050 Series Secondary (Microsoft Corporation - WDDM)
Manually selected [/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/byAudit/nvidia/\
awrdacpi] /opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/byAudit/nvidia/awrdacpi/\
pctry5detlef/Display/Radeon X300-X550-X1050 Series Secondary (Microsoft Corporation - WDDM)
Multiple selected [/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/byAudit/nvidia/\
awrdacpi] /opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/byAudit/nvidia/awrdacpi/\
pctry5detlef/Display/Radeon X300-X550-X1050 Series (Microsoft Corporation - WDDM)
[10DE:0053] (Standard-IDE-ATA/ATAPI-Controller) : Standard-Zweikanal-PCI-IDE-Controller
No driver - device directory ’/opt/pcbin/install/win7-x64-professional-msdn/drivers/pciids/10DE/0053’ not found
[10DE:005D] (Standardsystemgeräte) : PCI Standard-PCI-zu-PCI-Brücke
No driver - device directory ’/opt/pcbin/install/win7-x64-professional-msdn/drivers/pciids/10DE/005D’ not found
[1022:1100] AMD : AMD HyperTransport(tm)-Konfiguration
Using build-in windows driver
[10DE:0054] (Standard-IDE-ATA/ATAPI-Controller) : Standard-Zweikanal-PCI-IDE-Controller
opsi version 4.0.2 (Partie 2) Notes de version
12 / 49
/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/preferred/evb_potsdam_fsc__esprimo_p625/\
FTS_NVIDIASATAAHCIDRIVERVISTA64V103042MCP78__1026963/NVIDIA_SATA_AHCI_DRIVER_Vista64_V10.3.0.42_MCP78 (textmode \
capable)
[1022:1101] AMD : AMD-Adresszuordnungskonfiguration
Using build-in windows driver
[10DE:0055] (Standard-IDE-ATA/ATAPI-Controller) : Standard-Zweikanal-PCI-IDE-Controller
/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/preferred/evb_potsdam_fsc__esprimo_p625/\
FTS_NVIDIASATAAHCIDRIVERVISTA64V103042MCP78__1026963/NVIDIA_SATA_AHCI_DRIVER_Vista64_V10.3.0.42_MCP78 (textmode \
capable)
[1022:1102] AMD : AMD DRAM und HyperTransport(tm)-Nachverfolgungsmoduskonfiguration
Using build-in windows driver
[10DE:0057] NVIDIA : NVIDIA nForce-Netzwerkcontroller
Using build-in windows driver
[1022:1103] AMD : Sonstige AMD-Konfiguration
Using build-in windows driver
[10DE:0059] Realtek : Realtek AC’97 Audio
Manually selected [/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/byAudit/nvidia/\
awrdacpi] /opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/byAudit/nvidia/awrdacpi/\
pctry5detlef/MEDIA/Realtek AC’97 Audio
[10DE:005E] NVIDIA : NVIDIA nForce4 HyperTransport-Brücke
/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/preferred/ga-ma78-pcbon4/chipset_win7-64/SMBUS
[104C:8025] Texas Instruments : OHCI-konformer Texas Instruments 1394-Hostcontroller
No driver - device directory ’/opt/pcbin/install/win7-x64-professional-msdn/drivers/pciids/104C/8025’ not found
[10DE:005A] (Standard-USB-Hostcontroller) : Standard OpenHCD USB-Hostcontroller
No driver - device directory ’/opt/pcbin/install/win7-x64-professional-msdn/drivers/pciids/10DE/005A’ not found
[10DE:0050] (Standardsystemgeräte) : PCI Standard-ISA-Brücke
No driver - device directory ’/opt/pcbin/install/win7-x64-professional-msdn/drivers/pciids/10DE/0050’ not found
[10DE:005B] (Standard-USB-Hostcontroller) : Standard PCI-zu-USB erweiterter Hostcontroller
No driver - device directory ’/opt/pcbin/install/win7-x64-professional-msdn/drivers/pciids/10DE/005B’ not found
[1002:5B60] ATI Technologies Inc. : Radeon X300/X550/X1050 Series (Microsoft Corporation - WDDM)
Manually selected [/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/byAudit/nvidia/\
awrdacpi] /opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/byAudit/nvidia/awrdacpi/\
pctry5detlef/Display/Radeon X300-X550-X1050 Series Secondary (Microsoft Corporation - WDDM)
Multiple selected [/opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/byAudit/nvidia/\
awrdacpi] /opt/pcbin/install/win7-x64-professional-msdn/drivers/drivers/additional/byAudit/nvidia/awrdacpi/\
pctry5detlef/Display/Radeon X300-X550-X1050 Series (Microsoft Corporation - WDDM)
[10DE:0052] NVIDIA : NVIDIA nForce PCI-Systemverwaltung
Using build-in windows driver
[10DE:005C] (Standardsystemgeräte) : PCI Standard-PCI-zu-PCI-Brücke
No driver - device directory ’/opt/pcbin/install/win7-x64-professional-msdn/drivers/pciids/10DE/005C’ not found
USB-Devices
[1241:1111] (Standardsystemgeräte) : USB-Eingabegerät
No driver - vendor directory ’/opt/pcbin/install/win7-x64-professional-msdn/drivers/usbids/1241’ not found
HD-Audio-Devices
No devices installed
TIPS
– Les noms de répertoires NDIS1 sont pilotes Vista ; NDIS2 sont pilotes Win7
– Certains pilote de puces contiennent des fichiers de description, sans pour autant fournir des pilotes. Un exemple
serait cougar.inf de Intel. Si un tel Pseudo-Driver était placé dans additional_drivers (ou byAudit), les
autres pilotes peuvent être exclus. Il est préférable de déplacer ces répertoires au sous répertoire preferred.
– Les pilotes SATA et SATA-RAID se référer au même PCI ID. Le pilote SATA-RAID ne peut pas fonctionner
avec un système à disque unique.
– Vérifiez la sortie de ./show_drivers attentivement !
opsi version 4.0.2 (Partie 2) Notes de version
13 / 49
Chapitre 6
Inventaire
L’inventaire peut être ordonnée avec les produits Localboot hwaudit et swaudit ou avec le produit Netboot hwinvent.
6.1
Inventaire Hardware
L’inventaire matériel est contrôlé par un fichier de configuration opsi. Cela signifie que les informations sur lesquelles
les données seront compilées ne sont pas enchâssé dans les produits correspondants hwaudit et hwinvent. En fait, les
produits seront contrôlées par un fichier de configuration. Le fichier de configuration sera appelée et interprété avec
chaque envoi du service Web. Simultanément, le fichier de configuration détermine la structure de la base de données,
de sorte qu’un changement de ce fichier de configuration modifiera le schéma de base de données.
Le fichier de configuration est /etc/opsi/hwaudit/opsihwaudit.conf.
Tous le objets inventoriés sont définis et décrits dans ce fichier, comme la façon dont ces objets et leurs données
sont instanciées (sous Linux et Windows). Ce fichier va également définir la structure de donnée associée. Pour être
plus précis, ce fichier de configuration contient les définitions d’héritage orienté objet. La raison à cela est le fait
que beaucoup d’objets contiennent des identiques champs de données (ex. comme Nom et Vendeur). Les informations
générales seront définies dans des classes de base virtual du matériel. Le objets d’inventaire réels sont alors des classes
structural du matériel, lorsque de nombreuses propriétés pourraient éventuellement être héritée de la substitution des
classes de base virtual.
L’exemple suivant peut être instructif:
Dans un premier temps le fichier de configuration définit une virtual Class appelé "BASIC_INFO". Celle-ci définit les
propriétés (Values):
– "name"
– "description"
Vient ensuite la virtual Class appelé "HARDWARE_DEVICE", qui hérite de tous les paramètres supplémentaires de
"BASIC_INFO", et inclut les éléments suivants:
– "vendor"
– "model"
– "serialNumber"
Suivant suit le premier objet qui se trouve dans l’inventaire, qui est la première structural Class appelé "COMPUTER_SYSTEM", qui hérite de l’ensemble des paramètres supplémentaires de "HARDWARE_DEVICE", elle est
définie (et écrase les propriétés) comme:
– "name"
– "systemType"
– "totalPhysicalMemory"
La définition de la classe comprendra une description de différents paramètres et leur Values:
opsi version 4.0.2 (Partie 2) Notes de version
14 / 49
– Définition de la classe:
– "Type"
est "STRUCTURAL" ou "VIRTUAL"
– "Super"
cette classe dont elle va être héritée.
– "Opsi"
donne la nom de la classe, qui sera utilisé par la suite dans opsi comme un nom d’affichage.
De plus, la définition de classe permet de définir la manière dont les données seront compilées. Ces informations
peuvent également être trouvés dans la définition de Values.
– Pour l’inventaire sous Linux:
– "Linux": "[<commande>]<paramètre>"
Exécute la commande <commande> sur la ligne de commande, avec l’argument <paramètre>.
– "Python": "<code python avec espace réservé>"
Exécute le code Python dont la sortie sera placé dans l’espace réservé qui est comprise entre les signes "#" (voir
l’exemple ci-dessous).
– Pour l’inventaire sous Windows:
– "WMI": "<wmi select statement>"
WMI s’exécute lorsqu’il est appelé
– "Cmd": "<Objet texte Python avec espace réservé>"
Dans ce cas, c’est le chemin relatif au programme exécutable Python, dont la sortie sera placé dans l’espace
réservé.
– "Registry": "[<clé de registre>] <nom de la valeur>"
La valeur de <nom de la valeur> sera lu à partir de la base de registre, et donne le nom de la clé <clé de registre>.
Le registre doit être lu d’une manière spécifique à l’architecture. Cela signifie que le secteur 64 bits seront lus sur
un système 64 bits.
– Définition de la valeur:
– "Type": "<MySQL Database type>"
<MySQL Database type> donne le type de base de données MySQL qui sera appliqué à cette valeur (ex. une
chaîne Python sera "<MySQL Datenbase type>"="varchar(200)").
– "Scope": "<portée>"
Le champ <portée> sera utilisé de la manière suivante:
"g" signifie: Cet attribut est le même dans tous les liens de ces types.
"i" signifie: Cet attribut peut avoir différents types de valeurs avec ces liens.
– "Opsi": "<id>"
"<id>" est le nom interne des champs. Cela peut être trouvé dans le fichier situé dans /etc/opsi/hwaudit/
locales .
– "WMI": "<id ou commande>"
<id ou commande> est soit le nom d’une commande WMI qui affiche la valeur ou une seule commande WMI.
Si la commande WMI est donnée dans la définition de classe (ex. "select * from Win32_ComputerSystem") , les
résultats sont attribués aux variables "WMI" dans la définition de la classe "Values" . S’il n’y a pas de commande
WMI, les variables "WMI" dans la section "Values" sont des commandes WMI (voir l’exemple ci-dessous).
– "Linux": "<id>"
Cela fait partie de la définition de classe, <id> est le nom de la valeur affichée lorsque la commande Linux est
donnée.
– "Condition": "<condition>"
<condition> est une condition qui doit être remplie, avec laquelle les Value seront déterminés. Ainsi, par exemple
si la <condition> est définie comme "vendor=[dD]ell*", ensuite les valeurs de "vendor" doivent contenir Dell ou
dell.
Voici un exemple de la classe "COMPUTER_SYSTEM":
opsi version 4.0.2 (Partie 2) Notes de version
15 / 49
{
"Class": {
"Type":
"STRUCTURAL",
"Super": [ "HARDWARE_DEVICE" ],
"Opsi":
"COMPUTER_SYSTEM",
"WMI":
"select * from Win32_ComputerSystem",
"Linux": "[lshw]system"
},
"Values": [
{
"Type":
"varchar(100)",
"Scope": "i",
"Opsi":
"name",
"WMI":
"Name",
"Linux": "id"
},
{
"Type":
"varchar(50)",
"Scope": "i",
"Opsi":
"systemType",
"WMI":
"SystemType",
"Linux": "configuration/chassis"
},
{
"Type":
"bigint",
"Scope": "i",
"Opsi":
"totalPhysicalMemory",
"WMI":
"TotalPhysicalMemory",
"Linux": "core/memory/size",
"Unit":
"Byte"
},
{
"Type":
"varchar(50)",
"Scope": "i",
"Opsi":
"dellexpresscode",
"Condition": "vendor=[dD]ell*",
"Cmd": "#dellexpresscode\dellexpresscode.exe#.split(’=’)[1]",
"Python": "str(int(#{’COMPUTER_SYSTEM’:’serialNumber’,’CHASSIS’:’serialNumber’}#,36))"
}
]
},
En ce qui concerne les commandes "WMI", la définition de classe contient "select * from Win32_ComputerSystem".
Cette commande est exécutée par WMI, qui comporte des colonnes de sortie "Name", "SystemType", et "TotalPhysicalMemory". Ces valeurs sont ensuite affectés aux valeurs de opsi "name", "systemType", et "totalPhysicalMemory".
Particulièrement intéressant est ici la dernière valeur "dellexpresscode":
Ceci est vraiment utile quand l’IT s’interroge sur un ordinateur Dell, sur son état.
Le programme en ligne de commande dellexpresscode.exe a été conçu pour Windows, et indique à hwaudit.exe
que les dellexpresscode est fourni dans le répertoire dellexpresscode\. Les éléments entre # sont des espaces réservés
pour la sortie. Ainsi, la déclaration "dellexpresscode\dellexpresscode.exe" exécute dellexpresscode.exe, et produit
une sortie sous la forme : dellexpresscode=123456789. La valeur qui sera utilisé est l’une après la séparation sur
l’espace réservé =, ce qui est fait en Python en utilisant la méthode split () comme tel .split(’=’)[1] . Sous Linux,
on trouvera une valeur pour serialNumber pour les éléments (COMPUTER_SYSTEM ou CHASSIS), qui est ensuite
utilisé pour attribuer les codes Dell Express. L’appel int(,36) convertit la sortie nombre entier en base-36.
Les noms opsi des valeurs seront convertis en utilisant les fichiers trouvés dans /etc/opsi/hwaudit/locales/*. Le
fichier /etc/opsi/hwaudit/locales/en_US peut contenir des traductions telles que:
COMPUTER_SYSTEM = Computer
COMPUTER_SYSTEM. systemType = Type
Le nom de la classe COMPUTER_SYSTEM sera traduit en "Computer". L’attribut Opsi "systemType" de la classe
COMPUTER_SYSTEM sera traduit en "Type" pour l’anglais. Si l’on regarde dans le fichier /etc/opsi/hwaudit/loc
opsi version 4.0.2 (Partie 2) Notes de version
16 / 49
ales/de_DE, on verrait que l’attribut "COMPUTER_SYSTEM.systemType" sera traduit en "Typ" pour l’allemand.
Enfin, une autre suggestion: Lorsqu’un nouveau champ est créé, il doit être placé dans ces fichiers, même si ne traduit
pas explicitement le terme. Ceci évite tous les messages de "Warning".
6.2
Inventaire des logiciels
L’inventaire logiciel se fait avec le produit Localboot swaudit. Dans ce cas, les informations seront hérités de la
désinstallation du Registre, et des informations supplémentaires seront obtenues à partir des correctifs et des clés de
licence.
Le code source de ces paquets peut être trouvé ici:
https://svn.opsi.org/listing.php?repname=swaudit
https://svn.opsi.org/listing.php?repname=hwaudit
opsi version 4.0.2 (Partie 2) Notes de version
17 / 49
Chapitre 7
Les modifications apportées au nouveau opsilinux-bootimage
opsi-linux-bootimage (version 20120728-1) fonctionne en interne avec dhclient au lieu de pump pour la demande initiale
dhcp.
Le programme pump a été utilisé dans la version précédente parce que dhclient ne traite pas le drapeau next-server.
Ce drapeau a été utilisé par opsi pour définir l’adresse du opsiserver. Il n’est pas possible de configurer le programme
pump, et il donne un "hardreset" sur la carte réseau pour actualiser l’adresse ip du client. Cela provoque de nombreux
problèmes dans différentes infrastructures de réseau. Pour cette raison, nous avons décidé d’utiliser dhclient au lieu de
pump.
Cette modification provoque le problème que opsi-clientbootcd demande le opsi-server même si vous choisissez
"avec DHCP" sur le menu démarrer.
opsi version 4.0.2 (Partie 2) Notes de version
18 / 49
Chapitre 8
Les modifications apportées à opsiconfd
Le service web opsi sera construit comme "noarch". Pour certaines distributions basées rpm il a été construit pour une
architecture spécifque. Mais ce n’est plus nécessaire, parce qu’il n’y a pas de binaires dans ce package.
Cela pourrait produire des problèmes pour certaines distributions lorsque vous essayez de mettre à jour ces paquets. Si
vous obtenez une erreur comme: "opsiconfd-4.0.2.3-1.1.i386.rpm couldn’t be found" , alors vous devez réinstaller
le paquet opsiconfd manuellement à partir du repository.
Les scripts d’initialisation ont été modifiés ainsi. Le niveaux d’exécution 4 ne sera pas utilisé sur des distributions
basées rpm.
opsi version 4.0.2 (Partie 2) Notes de version
19 / 49
Chapitre 9
Authentification opsi PAM
opsi utilise certains modules PAM pour authentifier l’utilisateur. Avec cette nouvelle version, opsi utilise différents
modules pour certaines distributions. La liste suivante vous donnera un bref aperçu sur les modules qui sont utilisés:
Par défaut
common-auth
SLES
sshd
CentOS et RedHat
system-auth
RedHat 6
password-auth
Vous pouvez voir dans la liste ci-dessus, lequel différentes modules PAM sont utilisés. Cependant, il pourrait être le
cas que un autre module PAM est nécessaire, en fonction de la configuration locale. Le code source peut être modifié
pour tenir compte de ces modifications. Pour plus de souplesse, sans changer le code source, il est possible avec cette
version de créer un fichier nommé: opsi-auth dans le répertoire /etc/pam.d/. Si ce fichier existe, opsi va utiliser cette
configuration automatiquement au lieu de les modules listés ci-dessus.
L’exemple suivant vous montrera la nouvelle fonctionnalité: Si vous exécutez un système debian/ubuntu et vous obtenez
un erreur d’authentification PAM, même si vous pouvez vous connecter avec les mêmes informations d’identification via
ssh sur le serveur, alors vous pouvez créer le fichier: /etc/pam.d/opsi-auth avec le contenu suivant:
@include sshd
Après le redémarrage de opsiconfd, opsi utilisera automatiquement le module sshd-PAM pour l’authentification des
utilisateurs.
opsi version 4.0.2 (Partie 2) Notes de version
20 / 49
Chapitre 10
/etc/opsi/opsi.conf
depuis la version 4.0.2-2
Configurations générales opsi.
Exemple:
[groups]
fileadmingroup = pcpatch
Contexte: L’installation classique avec l’utilisateur: pcpatch avec le groupe principal: pcpatch ne fonctionne pas avec
Samba 4. Samba 4 a des restrictions fondamentales sur Active-Directory, de sorte que les groupes avec le même nom
que l’utilisateur (comme c’est courant dans Unix/Linux) ne sont plus autorisés. Pour cette raison, un nouveau fichier
de configuration a été mis en place: /etc/opsi/opsi.conf, qui permettra de contrôler la façon dont les groupes auront
accès à Samba-Access. Par exemple, UCS 3 va utiliser ce fichier pour renommer le groupe pcpatch vers opsifileadmins.
Cela signifie que l’utilisateur qui appartient au groupe pcpatch sous UCS 3, doit maintenant appartenir au groupe
opsifileadmins. Cette particularité est seulement pour UCS 3 et n’est pas le même pour d’autres distributions (pour
autant qu’ils utilisent Samba 4, ou ont installé Samba 4).
opsi version 4.0.2 (Partie 2) Notes de version
21 / 49
Chapitre 11
Trouver des Switches Silent ou Unattended
Dans le mode „Unattended" ou „silent", les arguments de ligne de commande sont appelées pendant l’installation noninteractive, et ces arguments de ligne de commande peuvent être trouvés dans le programme d’installation d’origine.
Le problème est alors de trouver les arguments appropriés de ligne de commande du programme d’installation d’origine.
Identifier le fabricant du programme d’installation: La plupart des programmes d’installation sont construits en
utilisant Inno, NSIS, Installshield ou Wise. Chacun de ces frameworks possède son propre interrupteur. Les méthode
suivante peut être utilisée pour déterminer le framework et les autres informations nécessaires: Les chaînes d’entrée
peut être déterminée en utilisant le programme de ligne de commande strings étant donné le programme d’installation
setup.exe, et le nom du framework peut être trouvé en utilisant grep ou findstr.
La même méthode est utilisée dans opsi-setup-detector. Voir l’exemple ci-dessous:
Figure 11.1 – opsi setup detector
Ce programme GUI peut être appelé depuis le menu contextuel de Windows Explorer.
opsi version 4.0.2 (Partie 2) Notes de version
22 / 49
Figure 11.2 – opsi setup detector in Windows Explore context menu
opsi setup detector fait partie du paquet opsi-adminutils. Le programme peut être téléchargé comme une application
autonome à partir de:
http://download.uib.de/opsi4.0/helper/opsisetupdetector.exe
11.1
Script pour les installations dans le contexte d’un administrateur local
Le produit opsi-template-with-admin a été complètement révisé:
– Le programme externe psgetsid.exe est désormais plus nécessaire.
– Dans le script maître, il y a seulement trois variables à modifier qui sont indiquées avec Please edit the following
values.
– Le script local dispose désormais d’un accès complet au serveur opsi. Cela signifie que des fonctions telles que
GetProductProperty ou OpsiServiceCall ou l’accès à la gestion des licences fonctionnent comme d’habitude.
– Également la fonction isFatalError fonctionne désormais comment vous vous y attendez.
– Le verrouillage du clavier et de la souris et du LogLevel sont désormais contrôlé par une propriété du produit.
– Le produit nécessite opsi-winst >= 4.11.3.3
opsi version 4.0.2 (Partie 2) Notes de version
23 / 49
Chapitre 12
opsi-winst 4.11.3
12.1
Début et Options de ligne de commande
Depuis la version 4.11.3, le programme opsi-winst contient un manifeste avec la déclaration:
<requestedExecutionLevel level="highestAvailable" />. Cela signifie que si opsi-winst est appelée sur un OS
NT6 par un administrateur, il fonctionnera comme un processus élevé. Si opsi-winst est appelée avec des privilèges
d’utilisateur normaux, il sera exécuté avec les privilèges de cet utilisateur.
12.2
Constantes globales de texte
12.2.1
opsi-winst Chemin et Répertoire
%opsiScriptHelperPath%
Correspond à: %ProgramFiles32Dir%\opsi.org\opsiScriptHelper
Chemin dans lequel le programme d’aide, les bibliothèques, et les éléments nécessaires à l’exécution du script peuvent
être installés.
Depuis 4.11.3.2
12.3
Sections primaires
12.3.1
Réaction aux erreurs
– FatalOnSyntaxError = <valeur booléenne>
– true = (par défaut) Si une erreur de syntaxe se produit, l’exécution du script sera interrompu et le résultat du
script sera mis à failed. En outre, le message Syntax Error sera transmis au serveur opsi.
– false = Si une erreur de syntaxe se produit, l’exécution du script ne sera pas interrompu et le résultat du script
sera mis à success.
Dans les deux cas ci-dessus, l’erreur de syntaxe sera enregistré comme Critical.
Dans les deux cas ci-dessus, le compteur d’erreurs sera augmenté de 1.
Depuis 4.11.3.2
Dans les anciennes versions il n’y avait pas la journalisation des erreurs de syntaxe, aucune augmentation de compteur
d’erreur, et le résultat était toujours mis à success.
opsi version 4.0.2 (Partie 2) Notes de version
12.3.2
24 / 49
Afficher le mode fenêtre
Pour changer les modes de la façon dont la fenêtre de opsi-winst est affiché, utilisez ces commandes:
– NormalizeWinst
configure la fenêtre de opsi-winst au mode normal
– IconizeWinst
configure la fenêtre de opsi-winst au mode minimisés
– RestoreWinst
configure la fenêtre de opsi-winst au mode maximisée
12.3.3
Les commandes Include
Attention
L’utilisation des commandes include peut conduire à la confusion du code.
Utilisez avec prudence si vous êtes un débutant.
12.3.3.1
Les commandes Include: Syntaxe
Les commandes include_* peuvent être utilisés pour ajouter des fichiers de script externes au script en cours d’exécution pendant l’exécution. La commande include_* peut inclure des fichiers de script externes, soit en insert (après
la ligne en cours) ou comme un ajout (après la dernière ligne). Les commandes include peuvent être utilisés n’importe
où dans une section primaire. Les fichiers de script externes peuvent contenir leurs propres commandes include.
Les commandes include sont disponibles depuis la version 4.11.3
– include_insert <nom du fichier>
insère <nom du fichier> après la ligne courante dans le script en cours d’exécution. Ainsi, la première ligne du
fichier inclus est la ligne suivante qui sera exécutée par opsi-winst.
– include_append <nom du fichier>
ajoute le contenu de <nom du fichier> à l’exécution du script. Ce type d’insertion est normalement utilisée pour
inclure des sections d’une bibliothèque.
Dans les deux cas <nom du fichier> est:
– Un chemin d’accès complet à un fichier existant.
– Un fichier existant dans %ScriptPath%
– Un fichier dans %opsiScriptHelperPath%\lib
Est équivalent à: %ProgramFiles32Dir%\opsi.org\opsiScriptHelper\lib
– Un fichier existant dans %WinstDir%\lib
Les tests pour l’emplacement de <nom du fichier> sont effectuées dans l’ordre ci-dessus. opsi-winst utilise le premier
fichier qu’il trouve qui a un nom correspondant.
Exemple:
Quand nous exécutons un script qui contient les commandes suivantes:
[Actions]
include_append "section_Files_del_tmp_dummy.opsiinc"
include_insert "include-test1.opsiinc"
Le fichier include-test1.opsiinc est exécuté en premier. Le contenu du fichier inclus include-test1.opsiinc est:
opsi version 4.0.2 (Partie 2) Notes de version
25 / 49
DefVar $inctestvar$
set $inctestvar$ = "inctest"
Files_del_tmp_dummy
include_append "section_Files_copy_inctest.opsiinc"
Files_copy_inctest
if fileExists("c:\opsi.org\tmp\dummy.txt")
comment "passed"
else
comment "failed"
set $TestResult$ = "not o.k."
LogWarning "include test failed"
endif
if fileExists("%scriptpath%\test-files\dummy.txt")
comment "passed"
else
comment "failed"
set $TestResult$ = "not o.k."
LogWarning "include test failed"
endif
Files_del_tmp_dummy
Le contenu du fichier inclus section_Files_copy_inctest.opsiinc est:
[Files_copy_inctest]
copy "%scriptpath%\test-files\dummy.txt" "c:\opsi.org\tmp"
Depuis, l’appel à Files_del_tmp_dummy se passe dans include-test1.opsiinc sans que section_Files_del_
tmp_dummy.opsiinc soit référencé à l’intérieur de include-test1.opsiinc, nous devons appeler include_append
"section_Files_del_tmp_dummy.opsiinc" au tout début de notre script. Autrement, opsi-winst relèvera que
Files_del_tmp_dummy n’est pas définie.
Le contenu du fichier inclus section_Files_del_tmp_dummy.opsiinc est:
[Files_del_tmp_dummy]
del -f "c:\opsi.org\tmp\dummyt.txt"
12.3.3.2
Les commandes Include: Library
Les suivants fichiers include sont livrés avec la version 4.11.3, et sont situés dans %WinstDir%\lib:
insert_check_exit_code.opsiinc:
; opsi include file
DefVar $ExitCode$
include_append "section_sub_check_exitcode.opsiinc"
insert_get_licensekey.opsiinc:
; opsi include file
DefVar $LicenseRequired$
DefVar $LicenseKey$
DefVar $LicensePool$
opsi version 4.0.2 (Partie 2) Notes de version
26 / 49
include_append "section_sub_get_licensekey.opsiinc"
section_sub_check_exit_code.opsiinc:
;opsi include file
[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."
ExitWindows /Reboot
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."
ExitWindows /Reboot
else
logError "Fatal: Setup program gives an unknown exitcode unequal
zero: " + $ExitCode$
isFatalError "Exit Code: "+ $ExitCode$
endif
endif
endif
endif
section_sub_get_licensekey.opsiinc:
; opsi include file
[Sub_get_licensekey]
if opsiLicenseManagementEnabled
comment "License management is enabled and will be used"
comment "Trying to get a license key"
Set $LicenseKey$ = demandLicenseKey ($LicensePool$)
; If there is an assignment of exactly one license pool to the product the following call
is possible:
; Set $LicenseKey$ = demandLicenseKey ("", $ProductId$)
;
; If there is an assignment of a license pool to a windows software id, it is possible to
use:
opsi version 4.0.2 (Partie 2) Notes de version
27 / 49
; DefVar $WindowsSoftwareId$
; $WindowsSoftwareId$ = "..."
; Set $LicenseKey$ = demandLicenseKey ("", "", $WindowsSoftwareId$)
DefVar $ServiceErrorClass$
set $ServiceErrorClass$ = getLastServiceErrorClass
comment "Error class: " + $ServiceErrorClass$
if $ServiceErrorClass$ = "None"
comment "Everything fine, we got the license key ’" + $LicenseKey$ + "’"
else
if $ServiceErrorClass$ = "LicenseConfigurationError"
LogError "Fatal: license configuration must be corrected"
LogError getLastServiceErrorMessage
isFatalError $ServiceErrorClass$
else
if $ServiceErrorClass$ = "LicenseMissingError"
LogError "Fatal: required license is not supplied"
isFatalError $ServiceErrorClass$
endif
endif
endif
else
LogError "Fatal: license required, but license management not enabled"
isFatalError "No Licensemanagement"
endif
12.3.4
Manipulation de chaîne
– contains(<chaîne>, <sous-chaîne>)
Une fonction booléenne qui retourne true si <chaîne> contient <sous-chaîne>. Cette fonction est sensible à la casse.
Disponible depuis 4.11.3
Exemple:
set $ConstTest$ = "1xy451Xy451XY45"
set $CompValue$ ="xy"
if contains($ConstTest$, $CompValue$)
comment "passed"
else
set $TestResult$ = "not o.k."
LogWarning "failed"
endif
set $CompValue$ ="xY"
if not(contains($ConstTest$, $CompValue$))
comment "passed"
else
set $TestResult$ = "not o.k."
LogWarning "failed"
endif
– stringReplace(<chaîne>, <ancien motif>, <nouveau motif>)
retourne une chaîne, qui présente toutes les occurrences de <ancien motif> remplacées par <nouveau motif> de la
chaîne d’entrée <chaîne>.
Disponible depuis 4.11.3
Exemple:
opsi version 4.0.2 (Partie 2) Notes de version
28 / 49
set $ConstTest$ = "123451234512345"
set $CompValue$ = stringReplace("1xy451Xy451XY45","xy","23")
if ($ConstTest$ = $CompValue$)
comment "passed"
else
set $TestResult$ = "not o.k."
LogWarning "failed"
endif
– strLength(<chaîne>)
Retourne le nombre de caractères dans <chaîne>
Disponible depuis 4.11.3
Exemple:
set $tmp$ = "123456789"
set $ConstTest$ = "9"
set $CompValue$ = strLength($tmp$)
if $ConstTest$ = $CompValue$
comment "passed"
else
set $TestResult$ = "not o.k."
LogWarning "failed"
endif
set $tmp$ = ""
set $ConstTest$ = "0"
set $CompValue$ = strLength($tmp$)
if $ConstTest$ = $CompValue$
comment "passed"
else
set $TestResult$ = "not o.k."
LogWarning "failed"
endif
– strPos(<chaîne>, <sous-chaîne>)
retourne la position de la première <sous-chaîne> dans <chaîne>. Si <sous-chaîne> n’est pas trouvé, alors "0" est
la valeur de retour. La fonction est sensible à la casse.
Disponible depuis 4.11.3
Exemple:
set $tmp$ = "1xY451Xy451xy45"
set $ConstTest$ = "7"
set $CompValue$ = strPos($tmp$,"Xy")
if $ConstTest$ = $CompValue$
comment "passed"
else
set $TestResult$ = "not o.k."
LogWarning "failed"
endif
set $tmp$ = lower("1xY451Xy451xy45")
set $ConstTest$ = "2"
set $CompValue$ = strPos($tmp$,lower("xy"))
if $ConstTest$ = $CompValue$
comment "passed"
else
set $TestResult$ = "not o.k."
opsi version 4.0.2 (Partie 2) Notes de version
29 / 49
LogWarning "failed"
endif
– strPart(<chaîne>, <la position de départ>, <nombre de caractères>)
retourne la partie de <chaîne> commençant par <la position de départ> et inclue les suivants <nombre de caractères>. Si il y a moins de <nombre de caractères> après <la position de départ>, la chaîne retournée sera le reste
des caractères après <la position de départ>.
Le comptage des caractères commence par 1.
Disponible depuis 4.11.3
Exemple:
set $tmp$ = "123456789"
set $ConstTest$ = "34"
set $CompValue$ = strPart($tmp$,"3","2")
if $ConstTest$ = $CompValue$
comment "passed"
else
set $TestResult$ = "not o.k."
LogWarning "failed"
endif
set $tmp$ = "123456789"
set $ConstTest$ = "56789"
set $CompValue$ = strPart($tmp$, strPos($tmp$,"56"),strLength($tmp$))
if $ConstTest$ = $CompValue$
comment "passed"
else
set $TestResult$ = "not o.k."
LogWarning "failed"
endif
– unquote(<chaîne>,<chaîne quote>)
retourne la version sans guillemets de la <chaîne>, si <chaîne> est cité avec <chaîne quote>
Un seul caractère (le premier caractère) de <chaîne quote> est acceptée comme un délimiteur. Les espaces en début
sont ignorés.
Disponible depuis 4.11.2.1
set $ConstTest$ = "b"
set $CompValue$ = unquote("’b’", "’")
comment "compare values"
if ($ConstTest$ = $CompValue$)
comment "passed"
else
set $TestResult$ = "not o.k."
LogWarning "failed"
endif
comment "double quote"
set $ConstTest$ = "b"
set $CompValue$ = unquote(’"b"’, ’"’)
comment "compare values"
if ($ConstTest$ = $CompValue$)
comment "passed"
else
set $TestResult$ = "not o.k."
LogWarning "failed"
endif
comment "quote string will be trimmed and then only the first char is used"
opsi version 4.0.2 (Partie 2) Notes de version
30 / 49
comment "note: brackets are different chars"
set $ConstTest$ = "b]"
set $CompValue$ = unquote("[b]", " [{ ")
comment "compare values"
if ($ConstTest$ = $CompValue$)
comment "passed"
else
set $TestResult$ = "not o.k."
LogWarning "failed"
endif
comment "not usable to remove brackets"
set $ConstTest$ = "b]"
set $CompValue$ = unquote("[b]", "[")
set $CompValue$ = unquote($CompValue$,"]")
set $CompValue$ = unquote("[b]", "]")
set $CompValue$ = unquote($CompValue$,"[")
set $CompValue$ = unquote(unquote("[b]", "["),"]")
comment "compare values"
if ($ConstTest$ = $CompValue$)
comment "passed"
else
set $TestResult$ = "not o.k."
LogWarning "failed"
endif
comment "if string not quoted it will be come back without changes"
set $ConstTest$ = "b"
set $CompValue$ = unquote("b", "’")
comment "compare values"
if ($ConstTest$ = $CompValue$)
comment "passed"
else
set $TestResult$ = "not o.k."
LogWarning "failed"
endif
12.3.5
Autres Fonctions sur les chaînes
– getDiffTimeSec
retourne une chaîne avec le nombre entier de secondes écoulées depuis le dernier appel de marktime.
Disponible depuis 4.11.3.1
– SidToName(<sid connu>)
retourne une chaîne avec le nom localisé du groupe avec le <sid connu>. Par exemple, si <sid connu> est égal à
S-1-5-32-544 alors SidToName retourne Administrators.
Disponible depuis 4.11.3.1
– GetMyIpByTarget(<adresse ip cible>)
retourne une liste des adresses IP, qui tentent de rejoindre le système d’exploitation à <adresse ip cible>. Cette
fonction retourne une valeur qui est plus sûr que la constante %IPAddress%.
Disponible depuis 4.11.3.1
Example:
set $CompValue$ = getMyIpByTarget("%opsiServer%")
– GetIpByName(<ip addr / ip name>)
renvoie les adresses IP des ordinateurs avec le <ip addr / ip name>
Disponible depuis 4.11.3.2
opsi version 4.0.2 (Partie 2) Notes de version
31 / 49
set $ConstTest$ = "%IPAddress%"
set $string1$ = "%IPAddress%"
set $CompValue$ = getIpByName($string1$)
if ($ConstTest$ = $CompValue$)
comment "passed"
else
set $TestResult$ = "not o.k."
LogWarning "failed"
endif
set $CompValue$ = getIpByName("%HostID%")
if ($ConstTest$ = $CompValue$)
comment "passed"
else
set $TestResult$ = "not o.k."
LogWarning "failed"
endif
set $CompValue$ = getIpByName("%PCName%")
if ($ConstTest$ = $CompValue$)
comment "passed"
else
set $TestResult$ = "not o.k."
LogWarning "failed"
endif
– getLastExitCode
renvoie une chaîne qui contient les valeur du code de sortie du dernier processus appelé par une section WinBatch
/ DosBatch / ExecWith.
Lorsque vous utilisez une section DosBatch ou ExecWith, vous obtiendrez normalement le code de sortie de l’interprète qui a été appelé. Pour obtenir le code de sortie du script, vous devez le définir explicitement.
Exemple:
DosInAnIcon_exit1
set $ConstTest$ = "1"
set $CompValue$ = getLastExitCode
if ($ConstTest$ = $CompValue$)
comment "DosBatch / DosInAnIcon exitcode passed"
else
set $TestResult$ = "not o.k."
LogWarning "DosBatch / DosInAnIcon exitcode failed"
endif
[DosInAnIcon_exit1]
rem create an errolevel= 1
VERIFY OTHER 2> NUL
echo %ERRORLEVEL%
exit %ERRORLEVEL%
12.3.6
Les expressions booléennes
– runningAsAdmin
retourne true si le script en cours d’exécution a été exécuté avec des privilèges d’administrateur.
Disponible depuis 4.11.1.1
opsi version 4.0.2 (Partie 2) Notes de version
32 / 49
– isLoginScript
retourne true si le script en cours d’exécution a été appelé comme userLoginScript utilisant l’extension opsi User
Profile Management.
Disponible depuis 4.11.2.1
– contains(<chaîne>, <sous-chaîne>)
Fonction booléenne qui retourne true si <chaîne> contient <sous-chaîne>. Cette fonction est sensible à la casse.
Disponible depuis 4.11.3
– isNumber(<chaîne>)
Fonction booléenne qui retourne true si <chaîne> représente un nombre entier.
Disponible depuis 4.11.3
12.3.7
Les listes de chaînes du Registre
– getRegistryKeyList32(<clé de registre>)
Retourne une liste de chaînes avec les noms de toutes les clés à l’intérieur de <clé de registre>.
32 Bit mode (avec redirection). Disponible depuis 4.11.3
– getRegistryKeyList64(<clé de registre>)
Retourne une liste de chaînes avec les noms de toutes les clés à l’intérieur de <clé de registre>.
64 Bit mode (sans redirection). Disponible depuis 4.11.3
– getRegistryKeyListSysnative(<clé de registre>)
Retourne une liste de chaînes avec les noms de toutes les clés à l’intérieur de <clé de registre>.
Mode (redirection) dépend de l’architecture du système d’exploitation. Disponible depuis 4.11.3
– getRegistryVarList32(<clé de registre>)
Retourne une liste de chaînes avec le noms de toutes les entrées de valeur associée à la clé <clé de registre>.
32 Bit mode (avec redirection). Disponible depuis 4.11.3
– getRegistryVarList64(<clé de registre>)
Retourne une liste de chaînes avec le noms de toutes les entrées de valeur associée à la clé <clé de registre>.
64 Bit mode (sans redirection). Disponible depuis 4.11.3
– getRegistryVarListSysnative(<clé de registre>)
Retourne une liste de chaînes avec le noms de toutes les entrées de valeur associée à la clé <clé de registre>.
Mode (redirection) dépend de l’architecture du système d’exploitation. Disponible depuis 4.11.3
– getRegistryVarMap32(<clé de registre>)
Fournit une carte de toutes les paires nom=valeur dans la clé de registre donnée <clé de registre>.
32 Bit Mode (avec redirection). Disponible depuis 4.11.3
– getRegistryVarMap64(<clé de registre>)
Fournit une carte de toutes les paires nom=valeur dans la clé de registre donnée <clé de registre>.
64 Bit Mode (avec redirection). Disponible depuis 4.11.3
– getRegistryVarMapSysnative(<clé de registre>)
Fournit une carte de toutes les paires nom=valeur dans la clé de registre donnée <clé de registre>.
Mode (redirection) dépend de l’architecture du système d’exploitation. Disponible depuis 4.11.3
Exemple:
Dans un premier temps, nous avons créer des entrées dans la base de registre avec l’exemple de code suivant:
Registry_createkeys /32Bit
[Registry_createkeys]
openkey [HKEY_LOCAL_MACHINE\SOFTWARE\opsi.org\opsi-winst-test]
set "var1" = "value1"
set "var2" = REG_SZ:"value2"
set "var3" = REG_EXPAND_SZ:"value3"
set "var4" = REG_DWORD:444
set "var5" = REG_BINARY:05 05 05 0F 10
opsi version 4.0.2 (Partie 2) Notes de version
33 / 49
set "var6" = REG_MULTI_SZ:"value6|value7|de"
openkey [HKEY_LOCAL_MACHINE\SOFTWARE\opsi.org\opsi-winst-test\key1]
openkey [HKEY_LOCAL_MACHINE\SOFTWARE\opsi.org\opsi-winst-test\key2]
openkey [HKEY_LOCAL_MACHINE\SOFTWARE\opsi.org\opsi-winst-test\key3]
openkey [HKEY_LOCAL_MACHINE\SOFTWARE\opsi.org\opsi-winst-test\key4]
Compte tenu des entrées de registre dans l’exemple ci-dessus, et le code ci-dessous:
set $list$ = getRegistryVarList32("hklm\software\opsi.org\opsi-winst-test")
nous verrons les valeurs suivantes dans le journal:
S e t $ l i s t $ = G e t R e g i s t r y V a r L i s t 3 2 ( " hklm\ s o f t w a r e \ o p s i . o r g \ o p s i −winst−t e s t " )
R e g i s t r y s t a r t e d with r e d i r e c t i o n ( 3 2 B i t )
r e t r i e v i n g s t r i n g s from G e t R e g i s t r y V a r L i s t 3 2 [ s w i t c h t o l o g l e v e l 7 f o r debugging ]
( string
0 ) var1
( string
1 ) var2
( string
2 ) var3
( string
3 ) var4
( string
4 ) var5
( string
5 ) var6
Ensuite, nous appelons:
set $list$ = getRegistryVarMap32("hklm\software\opsi.org\opsi-winst-test")
Le journal suivant:
S e t $ l i s t $ = GetRegistryVarMap32 ( " hklm\ s o f t w a r e \ o p s i . o r g \ o p s i −winst−t e s t " )
r e t r i e v i n g s t r i n g s from GetRegistryVarMap32 [ s w i t c h t o l o g l e v e l 7 f o r debugging ]
( string
0 ) var1=v a l u e 1
( string
1 ) var2=v a l u e 2
( string
2 ) var3=v a l u e 3
( string
3 ) var4 =444
( string
4 ) var5 =05 05 05 0F 10
( string
5 ) var6=v a l u e 6
Compte tenu des entrées de registre dans l’exemple ci-dessus, et le code ci-dessous:
set $list$ = getRegistryKeyList32("hklm\software\opsi.org\opsi-winst-test")
nous aurons les clés suivantes dans le journal:
S e t $ l i s t $ = G e t R e g i s t r y K e y L i s t 3 2 ( " hklm\ s o f t w a r e \ o p s i . o r g \ o p s i −winst−t e s t " )
R e g i s t r y s t a r t e d with r e d i r e c t i o n ( 3 2 B i t )
r e t r i e v i n g s t r i n g s from G e t R e g i s t r y K e y L i s t 3 2 [ s w i t c h t o l o g l e v e l 7 f o r debugging ]
( string
1 ) key1
( string
2 ) key2
( string
3 ) key3
( string
4 ) key4
12.3.8
Les listes de chaînes provenant des Propriétés du produit
– getProductPropertyList(<nom de la propriété>,<valeur par défaut>)
retourne une liste de chaînes de valeurs qui sont désignés par la propriété des produits à valeurs multiples <nom
de la propriété>. S’il n’y a pas de connexion au serveur opsi, la liste de chaînes qui en résulte contient uniquement
opsi version 4.0.2 (Partie 2) Notes de version
34 / 49
<valeur par défaut>.
Si vous appelez la fonction GetProductProperty avec une propriété à valeurs multiples, vous obtiendrez les valeurs
sélectionnées dans un format de chaîne séparée par des virgules. Cela conduira à des problèmes si les valeurs
retournées contiennent des caractères séparés par des virgules qui ne sont pas destinés à être analysés.
Disponible depuis 4.11.3
Example:
;Property "dummymulti" has the values: ("ab", "cd", "ef", "g,h")
set $list$ = GetProductPropertyList ("dummymulti","True")
if not ("" = takeFirstStringContaining($list$,"g,h"))
comment "GetProductPropertyList passed"
else
set $TestResult$ = "not o.k."
LogWarning "GetProductPropertyList failed"
endif
set $ConstTest$ = "ab,cd,ef,g,h"
set $CompValue$ = GetProductProperty ("dummymulti","True")
if ($ConstTest$ = $CompValue$)
comment "GetProductProperty passed"
else
set $TestResult$ = "not o.k."
LogWarning "GetProductProperty failed"
endif
12.3.9
Autres Listes de chaînes
– getProfilesDirList
Fournit une liste de chemins d’accès aux profils locaux.
Les profils qui contiennent les mots suivants ne seront pas considérés:
– localservice
– networkservice
– systemprofile
Le profil de l’utilisateurs par défaut est inclus dans le liste.
All User ou Public ne sont pas inclus dans le liste.
Exemple:
set $list1$ = getProfilesDirList
en résulte le journal suivant:
Set $ l i s t 1 $ = g e t P r o f i l e s D i r L i s t
R e g i s t r y s t a r t e d with r e d i r e c t i o n ( 3 2 B i t )
r e t r i e v i n g s t r i n g s from g e t P r o f i l e s D i r L i s t [ s w i t c h t o l o g l e v e l 7 f o r debugging ]
( string
0 )C: \ U s e r s \ A d m i n i s t r a t o r
( string
1 )C: \ U s e r s \ D e f a u l t
12.3.10
Garder une trace des installations qui ont échoué
Si une installation de produit échoue, cela devrait être signalé au serveur.
opsi version 4.0.2 (Partie 2) Notes de version
35 / 49
En raison du fait qu’il n’existe pas de méthode automatique qui détecte un échec de l’installation, le test pour une
installation qui a échoué doit être fait à l’aide des commandes de script.
Pour indiquer dans un script opsi-winst que l’installation a échoué, nous devons appeler la déclaration:
isFatalError
Si cette déclaration est appelé, opsi-winst arrête l’exécution normale du script et définit le résultat du produit à failed
(sinon il est success).
Disponible depuis 4.11.3.2 il y a une nouvelle variante de cette commande:
– isFatalError <chaîne>
dans ce cas, une chaîne avec un court message d’erreur est transmise en tant que actionProgress au serveur opsi et
est affiché dans opsi-configed.
12.3.11
Commandes pour contrôler la journalisation
– includelog <nom du fichier> <taille de la queue> //since 4.11.2.1
Inclut le fichier <nom du fichier> en tant que fichier journal, où les dernières lignes <taille de la queue> du journal
complet sont écrites dans ce fichier log. Si vous lancez un autre programme qui produit un fichier journal, vous
pourriez voir que d’autres fichiers journal du programme dans le script opsi-winst journalisent à l’aide de cette
commande.
Disponible depuis 4.11.3.2, une <taille de la queue> négative peut être proposée, qui va alors inclure les premières
lignes <taille de la queue> à partir de la partie supérieure du fichier journal (dit mode Head).
Exemple:
includelog "%Scriptpath%\test-files\10lines.txt" "5"
12.4
Sections Secondaires
12.4.1
Sections Patch
12.4.1.1
Paramètre d’Appel
Les nom du fichier à patcher est passé en paramètre.
Il y a des modificateurs facultatifs:
– /AllNTUserProfiles
Si une section patch est appelé avec ce modificateur, tous les sous-répertoires de %UserProfileDir% seront patchés,
ce qui signifie que ce patch est effectué pour tous les profils d’utilisateurs.
Lorsqu’un Patches est appelée dans une section [ProfileActions], le modificateur /AllNTUserProfiles est implicite. En mode logscript, %UserProfileDir% sera interprété comme %CurrentProfileDir%.
(Disponible depuis 4.11.3.2)
12.4.2
Sections ExecWith
Si vous appelez une section ExecWith avec l’interprète powershell, le contenu de la section est stocké dans un fichier
temporaire avec l’extension .ps1.
opsi version 4.0.2 (Partie 2) Notes de version
12.4.3
Sections WinBatch
12.4.3.1
Paramètre d’Appel (Modificateur)
36 / 49
– /WaitSeconds [nombre de secondes]
Si un appel inclut le paramètre /WaitSeconds [nombre de secondes], alors opsi-winst attend [nombre de secondes]
avant de procéder. Dans la configuration par défaut, nous attendons que tous les programmes en cours d’exécution
vont finir. Si nous combinons le paramètre /WaitSeconds avec l’option /LetThemGo, opsi-winst continue le traitement
après que le temps d’attente est terminé.
– /WaitForProcessEnding <nom du programme>
Attend que le processus appelé <nom du programme> se termine.
Doit être combinée avec /TimeOutSeconds.
Explication:
Lors du démarrage d’un processus externe à partir d’un appel WinBatch, opsi-winst attend que le processus actuel
soit fini avant d’exécuter la commande suivante dans le script.
Figure 12.1 – Traitement séquentiel d’un script qui attend la fin d’un programme
Il y a quelques programmes externes qui commencent un autre processus puis se terminent sans attendre la fin de leur
processus enfant. Du point de vue de opsi-winst, le processus est terminé et la commande suivante peut être démarré.
opsi version 4.0.2 (Partie 2) Notes de version
37 / 49
Figure 12.2 – Fin du processus, tandis que le processus enfant est toujours en cours
Si vous exécutez un programme de désinstallation et un programme d’installation successivement et le programme de
désinstallation fonctionne avec un tel processus enfant, vous pouvez avoir des processus en cours d’exécution en conflit
parce que la désinstallation et l’installation sont en cours d’exécution au même moment.
Figure 12.3 – Chevauchement d’un processus enfant et d’un processus parent
L’utilisation du modificateur /WaitForProcessEnding permet d’éviter une telle situation.
– /TimeOutSeconds <secondes>
Un paramètre de temporisation. Après avoir attendu le nombre de <secondes>, opsi-winst mettra fin au processus.
Depuis la version 4.11.3, /TimeOutSeconds peut être utilisé sans une condition d’attente (ex. /
opsi version 4.0.2 (Partie 2) Notes de version
38 / 49
WaitForProcessEnding) mais pas en combinaison avec /WaitSeconds.
Exemple:
Winbatch_uninstall /WaitForProcessEnding "uninstall.exe" /TimeOutSeconds 20
[Winbatch_uninstall]
"%ScriptPath%\uninstall_starter.exe"
– /RunElevated
Commence un processus qui a un jeton de sécurité avec des privilèges élevés. Ce modificateur est soumis aux
restrictions suivantes:
– Pour NT5 cela ne change rien.
– Un processus commencé avec ce modificateur n’a pas accès au réseau. Donc, vous devriez copier un programme
dans un répertoire temporaire local, mais ne pas le démarrer à partir d’un partage réseau.
– Vous pouvez voir des problèmes lors de l’utilisation de l’interface graphique. Par conséquent des véritables installations silencieuses sont le meilleur choix dans ce cas.
– Fonctionne uniquement dans le cadre de opsi-winst.
– getLastExitCode
Retourne une chaîne qui contient la valeur du code de sortie du processus qui a été le dernier appelé par une section
WinBatch / DosBatch / ExecWith.
Lorsque vous utilisez une section DosBatch ou ExecWith, vous obtiendrez normalement le code de sortie de l’interpréteur qui a été appelé. Pour obtenir le code de sortie de votre script, vous devez le définir explicitement.
12.5
Miscellaneous
– wisynth: TuibInstScript.doInfo: remplissage optimal pour LabelInfo
– nom du produit installé représenté dans le bloc d’informations initiale. correction du bug #367
– wisynth: executeWith: utilise l’extension .ps1 si l’interpréteur = powershell, correction du bug #382
– les fichiers de journalisation ne sont pas verrouillées pour la lecture (revenir à l’ancienne méthode) alors que opsiwinst est en cours fixes: https://forum.opsi.org/viewtopic.php?f=7&t=3655
– winbatch: tests pour déterminer si une extension de fichier est exécutable ou com, et n’est pas sensible à la casse.
fixes: https://forum.opsi.org/viewtopic.php?f=7&t=3592#p18127
– Winbatch: Le paramètre de /timeoutseconds peut-être maintenant une variable. correction du bug #352
39 / 49
opsi version 4.0.2 (Partie 2) Notes de version
Chapitre 13
Miscellanées
13.1
Changelogs:
13.1.1
Changelog opsi-configed
opsi-configed (4.0.2.5.8-1) stable; urgency=low
– fixed: host groups were not reloaded on reload request
-- Rupert Roeder <r . roeder@uib . de >
Mon , 15 Oct 2012 12:00:00 +0200
opsi-configed (4.0.2.5.6-1) stable; urgency=low
– fixed: problem when server property is missing
– fixed: a new client must not have the name of the opsi server (or depots)
-- Rupert Roeder <r . roeder@uib . de >
Wed , 26 Sep 2012 12:00:00 +0200
opsi-configed (4.0.2.5.5-1) stable; urgency=low
– fixed: some problem when changing between not synchronized depots
-- Rupert Roeder <r . roeder@uib . de >
Fri , 07 Sep 2012 18:00:00 +0200
opsi-configed (4.0.2.4-1) stable urgency=low
– updated FR language file
– eliminated NPEs for not authenticated users
— Rupert Roeder <[email protected]> Thu, 16 Aug 2012 11:38:32 +0200
opsi-configed (4.0.2.2-1) testing; urgency=low
– new button indication of existing product property entries
– new client action resetLocalProducts
— Rupert Roeder <[email protected]> Thu, 16 Jul 2012 11:38:32 +0200
opsi-configed (4.0.2.1-1) testing; urgency=low
– calls to hostControl_reachable and hostControl_getActiveSessions are made threaded to avoid blocking of the
configed if there are problems
– improvements in gui of client search dialogs
– added support of description field for a saved search
– added support of description field for tree groups
– new button indication of existing product property entries
opsi version 4.0.2 (Partie 2) Notes de version
40 / 49
– new client action resetLocalProducts
— Rupert Roeder <[email protected]> Thu, 20 Jun 2012 14:38:32 +0200
opsi-configed (4.0.2.0-1) testing; urgency=low
– implementation of DIRECTORY extension of treeview
– coloring of product versioninfo which are not equal to the server version
– report column can now be edited (by transforming the values to values of ActionResult, ActionProgress, LastState
– product properties and host configs are marked by bold font when not being identical with the default values
– an additional product column showing the (full) product names can be used
– if a opsi client is created there now is a check for existing host names which will not be reused without confirmation
– new sorting of depots, tooltip added for depots
— Rupert Roeder <[email protected]> Thu, 14 Jun 2012 14:38:32 +0200
opsi-configed (4.0.1.27-1) testing; urgency=low
– improved window handling of client selection dialog
— Rupert Roeder <[email protected]> Thu, 03 May 2012 14:38:32 +0200
opsi-configed (4.0.1.26-1) testing; urgency=low
– bugfix: product properties are reloaded for each selected client if a product was selected
— Rupert Roeder <[email protected]> Thu, 26 Apr 2012 14:38:32 +0200
opsi-configed (4.0.1.25-1) testing; urgency=low
– improvement: Added a new client selection dialog
— Felix Rohrbach <[email protected]> Wed, 21 Mar 2012 14:38:32 +0200
13.1.2
Changelog opsi-winst
opsi-winst (4.11.3.3) stable; urgency=low * new command setActionProgress <string> * commandline parameter /productid <string> This parameter forces the winst to try to start a service connection using the local opsiclientd.conf.
This will be used in the opsi-template-with-admin to run the local script in opsi context * Versioninfo: try to find
informations also on other than the stored codepage * wisynth: doRegistryAllNTUserDats: use getProfilesDirList *
widatamodul: retrieveJSONObject: JSON Bench Log entry for every service call * wimain: saveVersionToProfile/readVersionFromProfile : if there is no access to Appdata, we use the profile directory for the .opsi.org\userLoginScripts.ini *
wilog: PartOpenForReading: fix for timing problem Floatingpoint Underflow — Detlef Oertel <[email protected]> Thu,
13 Sep 2012:15:00:00 +0200
opsi-winst (4.11.3.2) stable; urgency=low
– new command FatalOnSyntaxError (default= true)
– every script syntax error is logged
– every script syntax error increases the errorcounter
– if FatalOnSyntaxError then every script syntax error is a fatal error and Syntax Error is set as actionProgress
– now isFatalError accepts a string which is stored to the server as actionprogress and showed in the opsi-configed
– includeLogFile now works in head mode if you give a negative number as line count
– changed in TLogInfo.includelogtail
– new stringlist function: getProfilesDirList: All existing Profiles dirs except: localservice,networkservice,systemprofile
– Patches sections may now called with %userprofiledir% as part of the file name and /AllNTuserProfiles so it will
run on all profiles. If running in Machine mode, the /AllNTuserProfiles is implizit in the [ProfileActions]. If running
in LoginScript mode, the %userprofiledir% is the %CurrentProfileDir%.
– new stringfunction: GetIpByName(<ip addr / ip name>) : string
– Files sections changed: wisynth: doFileActions: Modifier /AllNtUserProfiles and /AllNtUserSendto now based on
getProfilesDirList
opsi version 4.0.2 (Partie 2) Notes de version
41 / 49
– new stringlist commands to retrieve maps from the registry:
– getRegistryVarMap32(<regkey>)
– getRegistryVarMap64(<regkey>)
– getRegistryVarMapSysnative(<regkey>)
– winbatch: (Startprocess*) catching exceptions if execute bit is missing on samba4 shares
— Detlef Oertel <[email protected]> Mon, 30 Jul 2012:15:00:00 +0200
opsi-winst (4.11.3.1) stable; urgency=low
– winbatch: /timeoutseconds now allowed without /waitforprocessending (not with /waitsec)
– Winbatch: The parameter to /timeoutseconds may now be a variable fixes #352
– winbatch /RunElevated
– patchhosts sections: 64 bit compatibility, fixes #327
– manifest added: <requestedExecutionLevel level="highestAvailable" />:
http://www.lazarus.freepascal.org/index.php?topic=14976.0
http://lazarus.freepascal.org/index.php/topic,11659.msg69861.html
http://msdn.microsoft.com/en-us/library/bb756929.aspx
– new stringfunction: getDiffTimeSec (Time in seconds since last marktime)
– name of installing product shown in inital info block. fixes #367
– Exitcode of DosBatch, Execwith is now logged and can be retrieved by getLastExitcode
– be aware: this is the exitcode of the called program so use something like: exit %ERRORLEVEL% , fixes #161
– on userLoginScript: retry if there no user could be detected
– wisynth: TuibInstScript.doInfo: optimal fill for LabelInfo
– wisynth: executeWith: use extension .ps1 if interpreter = powershell, fixes #382
– new function: NormalizeWinst (set normal window state), fixes #346
– old function IconizeWinst (set minimized window state), fixes #346
– old function RestoreWinst (set maximized window state), fixes #346
– new stringfunction: stringReplace(string, oldPattern,newPattern) : string ;
this function replaces all occurrences of one substring with another in a string
it works not case sensitive , fixes #328
– new stringfunction: GetMyIpByTarget(<target ip addr>) : string
– new boolean function: contains(<str>, <substr>) : boolean ; case sensitive, fixes #365
– old boolean function: isNumber(<str>) : boolean
– new stringlist function: getProductPropertyList(<propname>,<default value>)
– wispecfolder: fix using winapi call GetDefaultUserProfileDirectory for %DefaultUserProfileDir%
– wispecfolder: fix using winapi call GetAllUsersProfileDirectory for %CommonProfileDir%
– new stringfunction SidToName(<well known sid>) : gives localized name of the sid
– wisynt: try-except in doRegistryHackRegeditFormat
– logfiles now again not locked against reading while opsi-winst is running
fixes: https://forum.opsi.org/viewtopic.php?f=7&t=3655
– new commands: include_insert "<file name>" : Replaces the command with a empty line and then inserts the
content of "<file name>" after this line include_append "<file name>" : Replaces the command with a empty line
and then appends the the content of "<file name>" to the end of the script
– <file name> is either:
– a complete valid Path
– The name of a file in %WinstDir%\lib
– The name of a file in %ScriptPath%
opsi version 4.0.2 (Partie 2) Notes de version
42 / 49
– should be placed after requiredWinstVersion
– new stringlist commands to retrieve lists from the registry:
– getRegistryKeyList32(<regkey>)
– getRegistryKeyList64(<regkey>)
– getRegistryKeyListSysnative(<regkey>)
– getRegistryVarList32(<regkey>)
– getRegistryVarList64(<regkey>)
– getRegistryVarListSysnative(<regkey>)
– new stringfunction strLength(<string>)
– new stringfunction strPos(<string>, <substr>)
– new stringfunction strPart(<string>, <start pos>, <number of chars>)
– winbatch: test if extension of exitsting file is exe or com now not case sensitive. fixes: https://forum.opsi.org/viewtopic.php?f=7&t=3592#p18127
— Detlef Oertel <[email protected]> Tue, 11 Jan 2012:15:00:00 +0200
opsi-winst (4.11.2.12) stable; urgency=low
– fix for getproductmap widatamodul: TOpsi4Data.initProduct: reset FProductOnClient_aktobject with nil
— Detlef Oertel <[email protected]> Tue, 31 Jul 2012:15:00:00 +0200
opsi-winst (4.11.2.11) stable; urgency=low
– wispecfolder: fix for the fix using winapi call GetProfilesDirectory for %profiledir%
— Detlef Oertel <[email protected]> Tue, 3 Jun 2012:15:00:00 +0200
opsi-winst (4.11.2.10) stable; urgency=low
– wispecfolder: fix using winapi call GetProfilesDirectory for %profiledir%
— Detlef Oertel <[email protected]> Tue, 2 Jun 2012:15:00:00 +0200
13.1.3
Changelog hwaudit
hwaudit (4.0.5-1) stable; urgency=low
– added dell-expresscode to computer_system
– added productProperty loglevel log-file
– changeDirectory added (package requires now winst: 4.11.2.6)
– new temp-Directory C:\opsi.org\tmp instead of old C:\tmp
— Erol Ueluekmen <[email protected]> 31 Jul 2012
hwaudit (4.0.4-3) stable; urgency=low
– get timeout from property
– Ticketid 2012021510000025
— Bardo Wolf <[email protected]> 23 Feb 2012
hwaudit (4.0.4-3) stable; urgency=low
– get timeout from property
– Ticketid 2012021510000025
— Bardo Wolf <[email protected]> 23 Feb 2012
hwaudit (4.0.4-2) stable; urgency=low
– get timeout from property
– Ticketid 2012021510000025
— Bardo Wolf <[email protected]> 23 Feb 2012
opsi version 4.0.2 (Partie 2) Notes de version
13.1.4
43 / 49
Changelog swaudit
swaudit (4.0.2-1) stable; urgency=low
– code cleanup
– remove all opsi 3 stuff
– use opsi-winst 4.11.3 methods
– extended search off by default (no data at NT6)
– replace delete by del
– replace c:\tmp by c:\opsi.org\tmp
— detlef oertel <[email protected]> Fri, 10 Aug 2012 15:00:00 +0100
swaudit (4.0-15) testing; urgency=low
– new property: readfromfile to switch off audit and use the filebuffer files instead ONLY DEBUG - do not use if you
are not sure what you doing! (Do not make a audit but read values from c:\tmp and send them)
— detlef oertel <[email protected]> Fri, 11 May 2012 15:00:00 +0100
swaudit (4.0-14) testing; urgency=low
– workaround for bug#354 (set version to ” if zero) deleted because it is fixed
— detlef oertel <[email protected]> Tue, 26 Apr 2012 16:00:00 +0100
swaudit (4.0-13) testing; urgency=low
– set version to ” if zero - workaround for bug#354
— detlef oertel <[email protected]> Tue, 15 Mar 2012 16:00:00 +0100
swaudit (4.0-12) testing; urgency=low
– new property: usekeyfinder to switch off keyfinder call
— detlef oertel <[email protected]> Tue, 29 Nov 2011 16:00:00 +0100
13.1.5
Changelog jedit
jedit_4.5.2-2 stable; urgency=low
– opsi-winst.xml for version 4.11.3.2
— detlef oertel <[email protected]> Tue, 31 Jul 2012 16:01:53 +0200
jedit_4.5.2-1 stable; urgency=low
– update to version 4.5.2
– opsi-winst.xml for version 4.11.3.1
– opsi-winst.xml for ins,.opsiscript,*opsiinc
— detlef oertel <[email protected]> Thu, 12 Jul 2012 16:01:53 +0200
jedit_4.5.1-1 stable; urgency=low
– update to version 4.5.1
– property gui_language description: jedit localization values: ["auto", "de", "en", "fr"] default: ["en"]
— bardo wolf <[email protected]> 12 Jun 2012
opsi version 4.0.2 (Partie 2) Notes de version
13.1.6
Changelog opsi-adminutils
opsi-adminutils (4.0.2.1-1) stable; urgency=low
– replace ussf by opsi-setup-detector
– update auf InstEd-1.5.15.26.msi
– winscp 4.3.9
— detlef oertel <[email protected]> 06 Aug 2012
opsi-adminutils (4.0.1.24-1) stable; urgency=low
– try to fix [ 2012031610000012 ] opsi-adminutils webstart funktioniert nicht.
– postinst check if newer configed.jar swingx.jar on server
– winscp 4.3.7
– property javaweb installer or local configed
– swingx.jar
– configed.jar 4.0.1.24
– language selection
– replace %ProgramfilesDir% by %Programfiles32Dir%
— Bardo Wolf <[email protected]> 16 Mar 2012
opsi-adminutils (4.0.1.12-4) stable; urgency=low
– corrected linkfolder for opsi-configed
— Rupert Röder <[email protected]> 07 Mar 2012
opsi-adminutils (4.0.1.12-3) stable; urgency=low
– putty 0.62
– winscp 4.3.5
— Susanne Ehlers <[email protected]> 13 Dec 2011
opsi-adminutils (4.0.1.12-2) stable; urgency=low
– JXv3.1 replaced by jxplorer-3.2.2-windows-installer.exe
— Bardo Wolf <[email protected]> 17 Oct 2011
13.1.7
Changelog opsi-template
opsi-template (4.0.2-2) stable; urgency=low
– requiredWinstVersion >= "4.11.3.2"
– Set $LogDir$ = "%SystemDrive%\opsi.org\tmp"
– new: *_short32.opsiscript scripts with includes
– winbatch_install: changed inno-setup example: default without answer file
– winbatch_uninstall: changed NSIS example: /WaitForProcessEnding "Au_.exe"
— detlef oertel <[email protected]> Fri, 03 Aug 2012 16:01:53 +0200
opsi-template (4.0.2-1) stable; urgency=low
– requiredWinstVersion >= "4.11.2.6"
– added ChangeDirectory "%SCRIPTPATH%"
– changed delete to del (in delsub)
– changed at msi to ALLUSERS=1
— detlef oertel <[email protected]> Mon, 02 Jun 2012 16:01:53 +0200
44 / 49
opsi version 4.0.2 (Partie 2) Notes de version
13.1.8
45 / 49
Changelog opsi-template-with-admin
opsi-template-with-admin (4.0.2-2) stable; urgency=low
– requires opsi-winst >= 4.11.3.3
– uses /productid switch at opsi-winst call
– code cleanup (use of synative instead of 64bit)
– property debug: switches loglevel and lock keyboard
– code cleanup
— detlef oertel <[email protected]> Thu, 19 Sep 2012 15:01:53 +0200
opsi-template-with-admin (4.0.2-1) stable; urgency=low
– requires opsi-winst >= 4.11.3
– using SidToName instead of psgetsid.exe
– priority set to -20
– first reboot is commented (;ExitWindows /ImmediateReboot). Uncomment it if you have problems with the autologon
— detlef oertel <[email protected]> Wed, 04 Jul 2012 15:01:53 +0200
13.1.9
Changelog opsi-client-agent
opsi-client-agent (4.0.2.1-2) stable; urgency=low
– no interactive message on copy error if $INST_SubModus$="CREATE_CLIENT"
– opsi-winst 4.11.3.2
– use of GetMyIpByTarget()
– use of GetIpByName()
– devided Files_redist_cleanup to Files_redist_cleanup_c and Files_redist_cleanup_d
— Detlef Oertel <[email protected]> Mon, 4 Jun 2012 15:00:00 +0100
13.1.10
Changelog windows Netboot Products
windows (4.0.2-1) stable; urgency=low
– Security fix in net mount while winpe works (NT6)
– set alignment for partitions (NT5)
– show_drivers.py modified to show automated including additional driver over inventory
– create_driver_links for handling with fileadmingroup from opsi.conf-file
— uib GmbH <[email protected]> Fr, 29 Jun 2012 15:19:15 +0000
windows (4.0.1-11) stable; urgency=low
– fix in multilanguage control file (time zone)
– fix image names windows server
— uib GmbH <[email protected]> Mon, 2 Apr 2012 15:19:15 +0000
windows (4.0.1-10) stable; urgency=low
– multilanguage control file
– additional locales and keyboard layouts
— uib GmbH <[email protected]> Tue, 24 Jan 2012 14:19:15 +0000
windows (4.0.1-9) stable; urgency=low
– blockAlignment added.
opsi version 4.0.2 (Partie 2) Notes de version
46 / 49
— uib GmbH <[email protected]> Wed, 16 Nov 2011 11:06:24 +0000
windows (4.0.1-8) stable; urgency=low
– descriptions now english
– Added new properties for patching unattend.xml Component Microsoft-Windows-International-Core-WinPE
winpe_uilanguage winpe_uilanguage_fallback winpe_inputlocale
– added new properties to unattend.xml.template
– show_drivers.py
— bardo wolf <[email protected]> Mon, 31 Oct 2011 09:09:50 +0000
windows (4.0.1-7) stable; urgency=low
– unattend.xml patched for postinst-routines like 2008-r2
– show_drivers.py modified to show right list of drivers; now with messages for duplicate drivers.
— uib GmbH <[email protected]> Thu, 22 Sep 2011 14:19:15 +0000
windows (4.0.1-6) stable; urgency=low
– Remove Display settings from unattend.xml.template
— uib GmbH <[email protected]> Thu, 25 Aug 2011 12:25:50 +0000
windows (4.0.1-5) stable; urgency=low
– Call auditHardwareOnHost_setObsolete
— uib GmbH <[email protected]> Tue, 19 Jul 2011 13:17:02 +0000
windows (4.0.1-4) stable; urgency=low
– Modify driver integration
— uib GmbH <[email protected]> Mon, 18 Jul 2011 15:05:10 +0000
13.1.11
Changelog python-opsi
python-opsi (4.0.2.4-1) stable; urgency=low
– fixes method setProductActionRequestWithDependencies after host_createOpsiClient
– added default dhcp string and text options that the values will be set in double-quotes (fixes#403)
– added method userIsReadOnlyUser()
– WindowsDriverIntegration: do not break when no devices found in txtsetup.oem (corrupted txtsetup.oem)
— Erol Ueluekmen <[email protected]> Thu, 27 Sep 2012 10:35:17 +0200
python-opsi (4.0.2.3-1) testing; urgency=low
– Workaround for bootimage: wait if blockfile to partition does not exist.
– Automated additional-driver integration support.
– hostControl-Fix for host_reachable method.
– added opsiFileAdminhandling, added new opsi.conf File.
– dellexpresscode for hwinvent implemented
– licensekey length increased to 1024
— Erol Ueluekmen <[email protected]> Tue, 17 Jul 2012 13:33:13 +0200
python-opsi (4.0.2.2-1) testing; urgency=low
– Workaround for python 2.7 in jsonrpc-backend: compressed data will send as bytearray
– fix for isc-dhcp-server for oneiric and precise
— Erol Ueluekmen <[email protected]> Mon, 11 Jun 2012 13:42:58 +0200
opsi version 4.0.2 (Partie 2) Notes de version
13.1.12
Changelog opsipxeconfd
opsipxeconfd (4.0.2.6-1) stable; urgency=low
– Fix: if always switched to none, don’t create new pipe for client.
— [email protected] <[email protected]> Mon, 08 Oct 2012 14:42:45 +0200
opsipxeconfd (4.0.2.5-1) experimental; urgency=low
– Fix: dont lose append entry from template, if no productProperty set
— Erol Ueluekmen <[email protected]> Tue, 25 Sep 2012 14:48:08 +0200
opsipxeconfd (4.0.2.4-1) experimental; urgency=low
– write pipe again, if product has set always actionRequest for client.
— Erol Ueluekmen <[email protected]> Tue, 18 Sep 2012 18:27:36 +0200
opsipxeconfd (4.0.2.3-1) experimental; urgency=low
– when spaces are in append, does not shuffle productPropertyStates
— Jim Pizagno <[email protected]> Wed, 05 Sep 2012 17:03:22 +0200
opsipxeconfd (4.0.2.2-1) testing; urgency=low
– fixing init.d lsb-header for SUSE based servers. Removing runlevel 4
– fileadmingroup added in /etc/opsi/backends/file.conf
— Erol Ueluekmen <[email protected]> Fri, 22 Jun 2012 16:26:42 +0200
13.1.13
Changelog opsiconfd
opsiconfd (4.0.2.4-1) stable; urgency=low
– added readOnly-State in session and worker
— Erol Ueluekmen <[email protected]> Thu, 04 Oct 2012 11:18:36 +0200
opsiconfd (4.0.2.3-1) testing; urgency=low
– fixing floatdivision in statistics-class
— Erol Ueluekmen <[email protected]> Wed, 18 Jul 2012 17:05:54 +0200
opsiconfd (4.0.2.2-1) testing; urgency=low
– omb: python 2.4 fixing import hashlib
– fixing init.d lsb-header for SUSE based servers. Removing runlevel 4
— Erol Ueluekmen <[email protected]> Fri, 22 Jun 2012 15:06:59 +0200
13.1.14
Changelog opsi-utils
opsi-utils (4.0.2.3-1) stable; urgency=low
– opsi-product-updater: Fix for using more then one repositories with different onlyDownload options.
— Erol Ueluekmen <[email protected]> Thu, 11 Oct 2012 14:13:35 +0200
opsi-utils (4.0.2.2-1) testing; urgency=low
– Added opsiFileAdminGroup handling.
– opsi-product-updater: Timestamps in Mail
— Erol Ueluekmen <[email protected]> Thu, 19 Jul 2012 11:44:37 +0200
47 / 49
opsi version 4.0.2 (Partie 2) Notes de version
13.1.15
Changelog opsi-linux-bootimage
opsi-linux-bootimage (20120728-1) experimental; urgency=low
– kernel 3.5
– python-opsi 4.0.2.3-1
— Erol Ueluekmen <[email protected]> Mon, 16 Jul 2012 16:42:42 +0200
opsi-linux-bootimage (20120119-1) stable; urgency=low
– kernel 3.2.1
– fix french-localisation
– added gptfdisk toolset
– python-opsi 4.0.1.37-1
— Erol Ueluekmen <[email protected]> Thu, 19 Jan 2012 15:01:04 +0100
13.1.16
Changelog opsi-depotserver
opsi-depotserver (4.0.2.3-1) stable; urgency=low
– Config-default-creation by first running --init-current-config fixed
— Erol Ueluekmen <[email protected]> Tue, 18 Sep 2012 17:42:23 +0200
opsi-depotserver (4.0.2.2-1) quantal; urgency=low
– Added opsiFileAdmins handling.
— Erol Ueluekmen <[email protected]> Thu, 19 Jul 2012 11:46:20 +0200
13.1.17
Changelog opsi4ucs
opsi4ucs (4.0.2.3-1) stable; urgency=low
– Join script modified:
– only patch dhcp if it’s installed
– restart and patch samba4 only, if samba4 is installed
– don’t build opsi4ucs-ldap-schema.
— Erol Ueluekmen <[email protected]> Tue, 02 Oct 2012 15:14:44 +0200
opsi4ucs (4.0.2.2-1) experimental; urgency=low
– For handling with new pcpatch-group added opsi.conf.
– UCSOverview-page changed from applet to java-webstart.
– Added new opsi-auth pam module for UCS 3
— Erol Ueluekmen <[email protected]> Thu, 24 Aug 2012 10:17:21 +0200
opsi4ucs (4.0.2.1-1) testing; urgency=low
– Featurepack-Release 4.0.2 for ucs.
– First Release for UCS 3 Support:
– uninvetion-ldap-backend have reached his EOL since ucs3 (default backend: file)
– Fixes 99opsi4ucs.inst-Joinscript
— Erol Ueluekmen <[email protected]> Fri, 29 Jun 2012 10:13:10 +0200
48 / 49
49 / 49
opsi version 4.0.2 (Partie 2) Notes de version
13.1.18
Changelog opsi-atftp
opsi-atftp (0.7.dfsg-2) stable; urgency=low
– fix uncommented entries for tftp-service in inetd.conf
-- Erol Ueluekmen <e . ueluekmen@uib . de >
Fri , 12 Oct 2012 13:25:16 +0200
opsi-atftp (0.7.dfsg-1.9) testing; urgency=low
– Replaces univention-tftp package
-- Erol Ueluekmen <e . ueluekmen@uib . de >
Fri , 10 Aug 2012 11:21:13 +0200
opsi-atftp (0.7.dfsg-1.8) stable; urgency=low
– LSB Header added in init-script
-- Erol Ueluekmen <e . ueluekmen@uib . de >
Tue , 24 Jan 2012 18:01:39 +0100