macOS
- archive tags:
- cli
- lom
- xserve
- archive tags:
- AppleRemoteDesktop
- macadmin
- liste
- plist
- Le script pour « binder » les machines clientes à un serveur OpenDirectory
- L’applescript qui permet de simuler la saisie manuel du login/motdepasse et permettant ainsi l’ouverture d’ une session sur plusieurs ordinateurs à partir de la fenêtre de login
- La ligne de commande pour changer le mot de passe d’un utilisateur locale sur la(e) machine(s)
- script pour changer la configuration IP du port principale d’une machine
Xserve: gestion du LOM par ligne de commande
categories:
S’il y a quelque chose que je regrette du xserve , c’est bien le service LOM (Lights-Out Management).
Ce magnifique (et caractériel) processeur dédié doté de son propre IP, permet d’effectuer des opérations de monitoring et surtout d’allumage et extinction de façon totalement indépendante du OS.
Un outil indispensable si le système ne répond plus et vous n’avez pas d’accès physique au serveur.
Habituellement pour interagir avec ce service, notamment pour définir le mot de passe d’accès ou accéder au monitoring graphique, le logiciel « Côntrole Serveur » est préconisé.
Or avec la pratique on se rends vit compte que pour la partie de gestion d’alimentation, la seule manière vraiment efficace consiste à utiliser la ligne de commande dédiée ipmitool
Je laisse ici, en guise de épitaphe (et surtout à porté de main pour les xserve encore en production) les lignes de commande pour effectuer l’allumage et l’extinction de la machine.
ipmitool -H 10.x.x.10 -U admin -P PASSWORD chassis power off
Pour éteindre le xserve (ou 10.x.x.10 est l’ip du LOM, et PASSWORD le mot de passe LOM )
ipmitool -H 10.x.x.10 -U admin -P PASSWORD chassis power on
Pour démarrer le xserve (ou 10.x.x.10 est l’ip du LOM, et PASSWORD le mot de passe LOM )
Cette ligne de commande n’est plus disponible dans OSX 10.7 et suivants, mais disponible ici ou installable depuis brew/macports.
Si installée par ce biais il est important de spécifier l’option -I lanplus
ipmitool <strong>-I lanplus</strong> -H 10.x.x.10 -U admin -P PASSWORD chassis status
lors de la connexion avec le LOM, sous peine de voir la connexion échouer avec l’erreur:
Authentication type NONE not supported
Error: Unable to establish LAN session
Error sending Chassis Status command
NB L’extinction de la machine effectuée par LOM est équivalente à l’arrêt abrupt provoqué en tirant la prise. (dernier recours)
…Et que le daemon afp CPUphage transformé en zombie unresponsive ne vous hante pas en l’absence du lom. Amen
Extrait de la prière du macadmin
ARD personnaliser la liste de commandes UNIX
categories:
Apple Remote Desktop est un incontournable de la trousse d’outil de tout macadmin.
Son champ d’action ne se limite pas à la prise de côntrole à distance, et s’il fallait citer dans la panoplie des actions possibles la plus puissante, le premier prix reviendrait sans autre à la possibilité de lancer facilement de lignes de commande ou scripts en modalité root sur plusieurs machines immédiatement ou en tâche programmée tout en ayant un retour précis et classifié des résultats obtenus.
Cette option sobrement appelée Unix avec son icône Terminal dans la barre de tâche est fournie avec une collection de scripts de base très pratiques et joliment rangés.
Dans ce même menu il est possible d’ajouter sa propre collection de scripts crées/trouvés amoureusement au fils des années.
Cette sympathique option est limitée à la création d’entrées successives sans possibilité aucune d’organisation hiérarchique si effectuée par interface graphique.
En effet pour parvenir à organiser ses propres scripts de la même façon que les menus par défaut, il faut mettre la main dans un fichier xml ad hoc.
Ce dernier s’appelle UnixCommandTask.plist et se trouve dans la bibliothèque de l’utilisateur dans:
~/Library/Application\ Support/Remote\ Desktop/Presets/UnixCommandTask.plist
La structure du fichier xml est relativement simple: une fois que l’on connaît l’organisation et la hiérarchie de balises nous pouvons l’adapter pour obtenir ce genre de résultat:
Pour y arriver, observons la structure du fichier UnixCommandTask.plist de l’exemple précédent
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>name</key>
<string>MON DOSSIER TOTO</string>
<key>state</key>
<array>
<dict>
<key>name</key>
<string>MON SCRIPT DE LA MORT QUI TUE</string>
<key>state</key>
<dict>
<key>outputMode</key>
<true/>
<key>script</key>
<string>LA LIGNE DE COMMANDE</string>
<key>userSelect</key>
<integer>0</integer>
</dict>
</dict>
<dict>
<key>name</key>
<string>MON PETIT SCRIPT</string>
<key>state</key>
<dict>
<key>outputMode</key>
<true/>
<key>script</key>
<string>LA LIGNE DE COMMANDE 2</string>
<key>userSelect</key>
<integer>0</integer>
</dict>
</dict>
</array>
</dict>
<dict>
<key>name</key>
<string>MON DOSSIER TITI</string>
<key>state</key>
<array>
<dict>
<key>name</key>
<string>MON APPLESCRIPT</string>
<key>state</key>
<dict>
<key>outputMode</key>
<true/>
<key>script</key>
<string>LA LIGNE DE COMMANDE</string>
<key>userSelect</key>
<integer>0</integer>
</dict>
</dict>
<dict>
<key>name</key>
<string>MON SCRIPT PERL</string>
<key>state</key>
<dict>
<key>outputMode</key>
<true/>
<key>script</key>
<string>LA LIGNE DE COMMANDE 2</string>
<key>userSelect</key>
<integer>0</integer>
</dict>
</dict>
</array>
</dict>
</array>
</plist>
La logique est grosso modo la même qui gère la structure du code HTML: les dossiers comme le contenu sont délimités par de balises qui s’imbriquent les unes dans les autres selon la hiérarchie souhaitée.
Si nous ouvrons cette même plist avec un éditeur de texte comme TextWrangler qui range le code de façon à qu’il soit lisible et en mettant en évidence la dépendance entre balises:
Nous constatons que mes deux menus « MON DOSSIER TOTO » et « MON DOSSIER TITI » sont contenus dans la première balise
De la même façon en descendant dans la hiérarchie le menu « MON DOSSIER TOTO » est délimité par la balise
En descendant encore nous trouvons les balises
Si le script s’articule en plusieurs lignes il suffit de répéter les balises
En respectant ce système de « poupées rousses » il est possible d’imbriquer (par copier / coller par ex.) autant de scripts voulus selon la logique souhaitée.
Vous pouvez télécharger la plist modèle ici:
De suite, en forme d’annexe, quelque script « grand classique » pour votre collection:
computername="`scutil --get ComputerName`"
configname=<strong>NOMSERVEUR</strong>
dsconfigldap -f -a <strong>NOMSERVEUR</strong> -u <strong>ADMIN_OD</strong> -p <strong>PASSWORD</strong> -c $computername -n $configname -v
dscl /Search -create / SearchPolicy CSPSearchPath
dscl /Search -append / CSPSearchPath /LDAPv3/NOMSERVEUR
dscl /Search/Contacts -create / SearchPolicy CSPSearchPath
dscl /Search/Contacts -append / CSPSearchPath /LDAPv3/NOMSERVEUR
killall DirectoryService
En gras les variables à renseigner avec vos informations
osascript -e 'tell application "System Events" to keystroke "<strong>LOGIN_UTILISATEUR</strong>"'; \
osascript -e 'tell application "System Events" to keystroke tab'; \
osascript -e 'tell application "System Events" to delay 0.5'; \
osascript -e 'tell application "System Events" to keystroke "<strong>MOTdePASSE</strong>"'; \
osascript -e 'tell application "System Events" to delay 0.5'; \
osascript -e 'tell application "System Events" to keystroke return'
En gras les variables à renseigner avec vos informations
dscl . -passwd /Users/<strong>TON_USER</strong> <strong>TONNOUVEAUPASSWORD</strong>
En gras les variables à renseigner avec vos informations
mainInt=$(networksetup -listnetworkserviceorder | \
awk '/\(1\)/ {$1="";sub("^ ","",$0);print}')
networksetup -setmanual "$mainInt" <strong>192.168.1.x 255.255.255.0 192.168.1.1</strong>
En gras les variables à renseigner avec vos informations
post speciale dédicace David « la tornade »