SMF : Service Management Facility
Contents
1 Introduction
Les SMF sont listés par catégories :
- application
- device
- legacy
- milestone
- network
- platform
- site
- system
Exemple :
svc:/system/filesystem/root:default
- Le prefix svc indique que c'est un service géré par SMF
- La catégorie du service est "system"
- Le service lui même est un filesystem
- L'instance du service est la racine du file system
- Le mot "default" identifie le premier, dans ce cas seulement, c'est une instance du service
Un autre exemple :
lrc:/etc/rc3_d/S90samba
- Le nom "lrc" indique que le service en cours n'est pas géré par SMF
- Le pathname "/etc/rc3_d" se réfère au dossier "/etc/rc3.d" ou le script est utilisé pour etre géré
- Le nom du script est S90samba
Pour lister les noms et les états des services :
Voici la liste des différents états possibles :
Etat | Description |
---|---|
online | The service instance is enabled and has successfully started. |
offline | The service instance is enabled, but the service is not yet running or available to run. |
disabled | The service instance is not enabled and is not running. |
legacy_run | The legacy service is not managed by SMF, but the service can be observed. This state is only used by legacy services. |
uninitialized | This state is the initial state for all services before their configuration has been read. |
maintenance | The service instance has encountered an error that must be resolved by the administrator. |
degraded | The service instance is enabled, but is running at a limited capacity. |
2 Gestion des Runlevels et Milstones
Voici les différents types de service :
- single-user
- multi-user
- multi-user-server
- network
- name-services
- sysconfig
- devices
Voici la relation entre le milstone et les services :
Voilà un exemple de relation entre les dépendances :
Pour déterminer les milstones en cours :
svcs |
$ svcs |
Voici les états que le milestone peut prendre :
- none
- single-user
- multi-user
- multi-user-server
- all
Pour choisir sur quel milestone vous voulez démarrez :
ok> boot -m milestone=single-user |
Rappel : svc.startd est un démon.
La base de donnée listant tous ces services se trouve ici :
/etc/svc/repository.db
Cette base de donnée est gérée par le service svc.configd.
Si il y a une erreur à ce niveau, votre machine ne bootera pas. Pour réparer ceci, mettez vous en mode single user et exécutez cette commande :
/lib/svc/bin/restore_repository |
Voici une liste des milestones et runlevels :
Run Level | Milestone | Description |
---|---|---|
0 | System is running the PROM monitor. | |
s or S | single-user | Solaris OS single-user mode with critical file systems mounted and accessible. |
1 | The system is running in a single-user administrative state with access to all available file systems. | |
2 | multi-user | The system is supporting multiuser operations. Multiple users can access the system. All system daemons are running except for the Network File System (NFS) server and some other network resource server related daemons. |
3 | multi-user-server | The system is supporting multiuser operations and has NFS resource sharing and other network resource servers available. |
4 | This level is currently not implemented. | |
5 | A transitional run level in which the Solaris OS is shut down and the system is powered off. | |
6 | A transitional run level in which the Solaris OS is shut down and the system reboots to the default run level. |
Pour savoir dans quel runlevel vous vous trouvez, utilisez cette commande :
who |
who -r |
Toujours au niveau des Runlevels, vous pouvez trouver dans /etc/ ou /sbin les différents runlevels :
- rc0
- rc1
- rc2
- rc3
- rc4
- rc5
- rc6
- rcS
Lorsque vous regardez dans un de ces dossiers, vous pouvez voir les processus de boot et de stop. Pour les distinguer :
- K pour Kill
- S pour Start
Pour connaitre le processus en cours par rapport au démon :
$ ls -i S90samba 4715 samba |
3 Le boot
Si vous avez tout bien suivit, vous devirez comprendre que l'ordre de boot ressemble à cela :
- Phase de boot PROM
- Phase de progamme de boot
- Phase d'initialization du kernel
- Phase d'init
- Phase de svc.startd
Durant la phase de boot, le kernel lit son fichier de configuration "/etc/system", puis charge les modules. Il utilise la commande "ufsboot" pour charger les fichiers.
Ensuite il charge le démon /etc/init.
Voici ce que l'on peut trouver dans le fichier /etc/system :
- moddir
Recherche les éventuels modules à charger
- root device and root file system configuration
Par défaut : rootfs:ufs
Ceci est pour le Système de fichier racine. Ex :
rootdev:/sbus@1,f8000000/esp@0,800000/sd@3,0:a
- exclude
Ne va pas charger les modules listés. Ex :
exclude: sys/shmsys
- forceload
Oblige à charger certains modules. Ex :
forceload: drv/vx
- set
Change les paramètres du kernel pour modifier des opérations système. Ex :
set maxusers=40
Faites une copie du fichier /etc/system avant de sauvegarder les modifications. Si le fichier est erroné, vous ne pourrez pas booter. Si vous avez un problème avec le fichier modifié, voici la solution pour réparer :
4 Inittab
Chaque ligne de ce fichier ressemblent à ceci :
id:rstate:action:process
Voilà les champs :
Champs | Descriptions |
---|---|
id | Two character identifier for the entry |
rstate | Run levels to which this entry applies |
action | Defines how the process listed should be run For a description of the action keywords see man inittab |
process | Defines the command to execute |
Par défaut, voici ce que l'on trouve dans le fichier inittab :
Dans les actions possibles, nous avons :
- sysinit
Executes the process before the init process tries to access the console (for example, the console login prompt). The init process waits for completion of the process before it continues to read the inittab file.
- powerfail
Executes the process only if the init process receives a power fail signal.
Le démon svc.startd est le remplacant d'init. Pour voir la configuration actuelle :
/var/svc/manifest |
Si vous souhaitez voir les fichiers milestones pour les éditer :
single-user.xml multi-user.xml multi-user-server.xml network.xml name-services.xml sysconfig.xml /sbin/rc2 /lib/svc/method/fs-local
5 SVCS
Voici la commande pour monitorer les services SMF :
Pour vérifier l'état d'un service :
svcs |
$ svcs svc:/system/console-login:default STATE STIME FMRI online 14:38:27 svc:/system/console-login:default |
Pour voir les dépendances d'un service :
svcs |
svcs -d svc:/system/filesystem/local:default STATE STIME FMRI online 14:38:15 svc:/system/filesystem/minimal:default online 14:38:26 svc:/milestone/single-user:default |
Ceci montre ce dont un service à besoin (dépendances) :
On peut voir ici les autres services qui dépendent de /system/filesystem/local :
5.1 svcadm
Cette commande sert à changer l'état d'un service :
ps |
$ ps -ef |
svcs |
$ svcs cron STATE STIME FMRI online 14:38:30 svc:/system/cron:default |
svcadm |
$ svcadm -v disable system/cron:default system/cron:default disabled. |
svcs |
svcs cron STATE STIME FMRI disabled 20:35:25 svc:/system/cron:default |
ps |
ps -ef |
svcadm |
$ svcadm -v enable system/cron:default system/cron:default enabled. |
svcs |
$ svcs cron STATE STIME FMRI online 20:35:59 svc:/system/cron:default |
ps |
$ ps -ef |
Pour désactiver le service cron :
svcadm |
svcadm -v disable -t system/cron:default svc:/system/cron:default temporarily disabled. |
6 Gestion d'un service non SMF
init.d est là :
svcs |
$ svcs |
ps |
$ ps -ef |
ls /etc/init.d/volmgt /etc/init.d/volmgt /etc/init.d/volmgt stop |
$ ps -ef |
$ /etc/init.d/volmgt start volume management starting. |
$ ps -ef |
svcs |
svcs |
7 Créer un service géré par SMF
Cette procédure peut être un peu complexe pour les personnes non initiés. Voici l'ordre chronologique à suivre :
- Determiner quels milestones et run levels ce service doit être disponible et la commande appropriée pour démarrer et arréter le service.
- Establire chaque relations entre les dépendances, le service et les autres services.
- Créer un script dans /lib/svc/method pour démarrer le process si nécessaire.
- créer un fichier .xml dans le sous dossier approprié.
- Faire une copie du "Service Repository Database".
- Intégrer ce script dans SMF en utilisant l'utilitaire svccfg.
Créer le fichier /lib/svc/method/newservice :
Mettons les droits :
chmod |
chmod 744 /lib/svc/method/newservice |
Puis créez le fichier /var/svc/manifest/site/newservice.xml :
cd /var/svc/manifest/milestone cp multi-user.xml /var/tmp vi multi-user.xml |
Voici un exemple du contenu :
Le nouveau service doit être importer dans SMF :
svccfg |
svccfg import /var/svc/manifest/site/newservice.xml |
A présent, il doit être visible :
svcs |
$ svcs newservice STATE STIME FMRI online 8:43:45 svc:/site/newservice:default |
Il doit être également possible de manipuler le service en utilisant :
svcadm |
$ svcadm -v disable site/newservice site/newservice disabled. |
svcs |
$ svcs newservice STATE STIME FMRI disabled 9:11:38 svc:/site/newservice:default |
svcadm |
svcadm -v enable site/newservice site/newservice enabled. |
svcs |
svcs newservice STATE STIME FMRI online 9:11:54 svc:/site/newservice:default |
On peut voir que le milestone multiuser pour notre nouveau service est nécessaire pour en finir :
8 Créer un service non géré par SMF
- Tout d'abord, nous allons créer notre script dans l'init.d :
vi /etc/init.d/filename |
Voir plus haut pour le contenu, puis :
chmod 744 /etc/init.d/filename chgrp sys /etc/init.d/filename |
- Nous allons maintenant créer les bons liens (le faire pour chaque runlevels voulu) :
cd /etc/init.d ln filename /etc/rc#.d/S##filename ln filename /etc/rc#.d/K##filename |
- Vérifions :
ls -li /etc/init.d/filename ls -li /etc/rc#.d/S##filename ls -li /etc/rc#.d/K##filename |
- Maintenant testons :
/etc/init.d/filename start |
9 Définir le temps de boot des milestones
Voici un exemple :
svcadm |
svcadm -v milestone -d multi-user-server:default |
Ainsi que les options dispo :
- all
- none
- svc:/milestone/single-user:default
- svc:/milestone/multi-user:default
- svc:/milestone/multi-user-server:default
Pensez également à faire une copie de la base de donnée des milestones :
pstop svc.startd pkill svc.configd cp /etc/svc/repository.db /etc/svc/safe_repository.db cp /lib/svc/seed/global.db /etc/svc/repository.db init 0 ok boot -m verbose |
10 Faq
10.1 svc.configd: smf(5) database integrity check of : /etc/svc/repository.db
Je me suis tapé un message pareil après un reboot, merci UFS. Le message en entier était :
svc.configd: smf(5) database integrity check of: /etc/svc/repository.db failed. The database might be damaged or a media error might have prevented it from being verified. Additional information useful to your service provider is in: /etc/svc/volatile/db_errors The system will not be able to boot until you have restored a working database. svc.startd(1M) will provide a sulogin(1M) prompt for recovery purposes. The command: /lib/svc/bin/restore_repository can be run to restore a backup version of your repository. See http://sun.com/msg/SMF-8000-MY for more information.
Pour résoudre ce problème, il faut :
- Rebooter en mode failsafe (grub)
- Corriger tous les problèmes de fragmentation du filesystem (wizzard)
- Monter en lecture et écriture dans le /a votre partition root (wizzard)
- Chrooter la partition /a :
chroot |
chroot /a /a/bin/bash |
- Lancer la commande /lib/svc/bin/restore_repository et lui dire de réparer le /boot :
The following backups of /etc/svc/repository.db exists, from oldest to newest: ... list of backups ... The backups are named based on their type and the time when they were taken. Backups beginning with "boot" are made before the first change is made to the repository after system boot. Backups beginning with "manifest_import" are made after svc:/system/manifest-import:default finishes its processing. The time of backup is given in YYYYMMDD_HHMMSS format. Please enter one of: 1) boot, for the most recent post-boot backup 2) manifest_import, for the most recent manifest_import backup. 3) a specific backup repository from the above list 4) -seed-, the initial starting repository. (All customizations will be lost.) 5) -quit-, to cancel. Enter response [boot]:
Il n'y a qu'a faire entrée ici. Et valider en tapant yes :
After confirmation, the following steps will be taken: svc.startd(1M) and svc.configd(1M) will be quiesced, if running. /etc/svc/repository.db -- renamed --> /etc/svc/repository.db_old_YYYYMMDD_HHMMSS /etc/svc/volatile/db_errors -- copied --> /etc/svc/repository.db_old_YYYYMMDD_HHMMSS_errors repository_to_restore -- copied --> /etc/svc/repository.db and the system will be rebooted with reboot(1M). Proceed [yes/no]? yes
11 Ressources
Solaris Features: Service Management Facility
Using Service Management Facility (SMF)