четверг, 21 января 2016 г.

Sun Storage 2540-M2: SMF для CAM Add-On Storage Manager Agent

Всем хорош CAM для массивов 2540-M2. Несколько вещей в нем раздражают.

Веб-морда массива древняя и не работает ни в одном современном браузере. Только в IE и только не выше 11ки, и только с руганью на безопасность.

Вторая неприятная вещь - агент SMagent, который требуется для in-band management (ну то бишь через FC и CLI,  а не через гуй, удаленно, и по сети), рассчитывался на самые разные версии Солярис и ставится, натурально, через sysvinit.

Нам это, во времена как минимум 10ки, разумеется, не нравится.

Напишем SMF.

Для этого не будем писать управляющий скрипт - он уже написан. Достаточно написать только сервисный манифест:

 <?xml version="1.0"?>  
 <!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">  
 <!--  Manifest-file for CAM Add-On Storage Manager Agent, put this file in  
     /var/svc/manifest/system/smagent.xml  
     and run #svccfg import /var/svc/manifest/system/smagent.xml  
     Yuri Voinov (C) 2016  
 -->  
 <service_bundle type='manifest' name='SMagent'>  
   
 <service  
     name='system/smagent'  
     type='service'  
     version='1'>  
   
     <create_default_instance enabled='false' />  
   
     <single_instance />  
   
     <dependency name='fs-local'  
         grouping='require_all'  
         restart_on='none'  
         type='service'>  
         <service_fmri  
             value='svc:/system/filesystem/local' />  
     </dependency>  
   
     <dependency name="multi-user"  
         grouping="require_all"  
        restart_on="error"  
           type="service">  
       <service_fmri value="svc:/milestone/multi-user-server:default"/>  
     </dependency>  
   
     <exec_method  
         type='method'  
         name='start'  
         exec='/etc/init.d/SMagent %m'  
         timeout_seconds='60' />  
   
     <exec_method  
         type='method'  
         name='stop'  
           exec='/etc/init.d/SMagent %m'  
         timeout_seconds='60' />  
   
     <property_group name='general' type='framework'>  
         <!-- to start stop SMagent -->  
         <propval name='action_authorization' type='astring'  
             value='solaris.smf.manage' />  
     </property_group>  
   
     <stability value='Unstable' />  
   
     <template>  
         <common_name>  
             <loctext xml:lang='C'>  
              Storage Manager Agent  
             </loctext>  
         </common_name>  
     </template>  
   
 </service>  
 </service_bundle>  

и, как сказано в комментарии метода, импортируем в репозиторий SMF:

 svccfg import /var/svc/manifest/system/smagent.xml  

предварительно скопировав манифест по указанному пути.

Осталось остановить агент, отключить lrc, и запустить агент снова посредством SMF:

 # To disable lrc SMagent, run:  
   
 mv /etc/rc2.d/S99SMagent /etc/rc2.d/.S99SMagent  
   
 # then activate SMF. Stop agent first!  
   
 svcadm enable smagent  
   

Наслаждайтесь преимуществами SMF :) Теперь агент можно запускать и останавливать по необходимости, а не держать постоянно запущенным (он на Java написан, вы выбросите на ветер от 200 до 400 мегабайт оперативной памяти хоста).