macOS

    Xserve: gestion du LOM par ligne de commande

    categories:

    • archive tags:
    • cli
    • lom
    • xserve

    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:

    • archive tags:
    • AppleRemoteDesktop
    • macadmin
    • liste
    • plist

    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.

    AARD_UNIX

    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 qui se ferme à la fin de la plist avec .

    De la même façon en descendant dans la hiérarchie le menu « MON DOSSIER TOTO » est délimité par la balise  à l’intérieur de laquelle on trouve la balise  qui contiens les balises qui servent à délimiter à leur tour les submenus  « MON SCRIPT DE LA MORT QUI TUE » et « MON PETIT SCRIPT »

    En descendant encore nous trouvons les balises nécessaires à expliciter la ligne de commande ou le script.

    Si le script s’articule en plusieurs lignes il suffit de répéter les balises  sur autant de lignes que necessaire.

    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:

    UnixCommandTask.plist

    De suite, en forme d’annexe, quelque script « grand classique » pour votre collection:

    • Le script pour « binder » les machines clientes à un serveur OpenDirectory
    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

    • 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
    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

    • La ligne de commande pour changer le mot de passe d’un utilisateur locale sur la(e) machine(s)
    dscl . -passwd /Users/<strong>TON_USER</strong> <strong>TONNOUVEAUPASSWORD</strong>
    

    En gras les variables à renseigner avec vos informations

    • script pour changer la configuration IP du port principale d’une machine
    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 »