Sous Solaris 10, les services réseau gérés par inetd ne sont plus déclarés dans le fichier /etc/inetd.conf, mais s'appuient sur le framework SMF (Service Management Facility). Voyons rapidement comment observer et manipuler ces services, et comment en déclarer un nouveau.

Gestion des services existants

Observation des services

L'observation se fait avec la commande inetadm, utilisée sans arguments :
# inetadm ENABLED STATE FMRI enabled online svc:/application/x11/xfs:default enabled online svc:/application/font/stfsloader:default enabled offline svc:/application/print/rfc1179:default enabled online svc:/network/rpc/gss:default enabled online svc:/network/rpc/cde-calendar-manager:default enabled online svc:/network/rpc/cde-ttdbserver:tcp […] disabled disabled svc:/network/talk:default enabled online svc:/network/stdiscover:default enabled online svc:/network/stlisten:default enabled online svc:/network/rpc-100235_1/rpc_ticotsord:default

Activation ou désactivation d'un service

Nous allons activer et désactiver le service chargen, en mode dgram (ce mode n'a en soi aucune importance, il s'agit juste d'une des deux options disponibles, l'autre étant le mode stream. Vérifions d'abord que notre service est bien arrêté :
# inetadm | grep "chargen" disabled disabled svc:/network/chargen:dgram disabled disabled svc:/network/chargen:stream
Activons-le avec la commande inetadm -e :
# inetadm -e svc:/network/chargen:dgram # inetadm | grep "chargen" enabled online svc:/network/chargen:dgram disabled disabled svc:/network/chargen:stream
Désactivons-le maintenant avec inetadm -d :
# inetadm -d svc:/network/chargen:dgram # inetadm | grep "chargen" disabled disabled svc:/network/chargen:dgram disabled disabled svc:/network/chargen:stream
Et voilà, difficile de faire plus simple!

Création de nouveau services

Le manifest

Les services SMF sont décrits par des structures appelées manifests. Ces manifests sont stockés dans un repository, /etc/svc/repository.db (qui est en fait une base Berkeley DB). En outre, pour les services livrés avec Solaris 10, une version XML de chaque manifest est mise à disposition dans /var/svc/manifest. Voici le contenu du manifest pour chargen :
# more chargen.xml








        
            
        

        
            
            
            
        

        
            
                    
                        
                    
            

            
            

            
            

            
                
                
                
            
        

        
            
                    
                        
                    
            

            
            

            
                
                
                
            
        

        

        



Etapes de la création d'un service

Pour créer un nouveau service réseau, il faut :
  • créer un nouveau manifest
  • importer ce manifest dans le repository
Création du manifest

Pour créer son propre manifest, le plus simple est de copier un fichier XML existant et de l'éditer manuellement. Comme c'est un peu laborieux, je ne rentrerai pas dans les détails ici, nous allons voir une méthode beaucoup plus simple dans un instant.

Import dans le repository

Pour importer le manifest nouvellement créé, on utilise la commande suivante :

# svccfg import /chemin/vers/mon/fichier/manifest.xml

La version simplifiée : inetconv

Pour faciliter la migration depuis l'ancien système, Sun propose inetconv, un outil qui crée automagiquement un manifest à partir d'une entrée auf format inetd.conf. Créons donc un fichier tftp.inet, contenant la ligne suivante :
tftp dgram udp wait root /usr/sbin/in.tftpd in.tftpd -s /tftpboot
Nous n'avons pour l'instant aucun service tftp :
# inetadm | grep -i tftp #
Appelons maintenant inetconv :
# inetconv -i ./tftp.inet tftp -> /var/svc/manifest/network/tftp-udp.xml Importing tftp-udp.xml ...Done
Et hop, nous voilà dotés d'un service tftp actif :
# inetadm | grep -i tftp enabled online svc:/network/tftp/udp:default
Et, cerise sur le gâteau, l'outil nous a même laissé le manifest xml. On peut donc copier ce manifest sur d'autres machines, et l'importer directement, sans passer par la phase inetconv.