SMF Das Service Management Facility Detlef Drewanz Ambassador Operating Systems Sun Microsystems GmbH
SMF Service Management Facility Neue Technologie in Solaris 10 Fester Bestandteil - sichert Grundfunktionalitäten Funktionen von SMF > Service Livecycle Management > Service Beschreibung > Service Management > Service Entwicklungsmodell Services administrieren > da ist mehr als nur Prozesse
Agenda Überblick Funktionsweisen Administration Security Fehlersuche Eigene Services erstellen
Agenda Überblick Funktionsweisen Administration Security Fehlersuche Eigene Services erstellen
Warum ein Service Manager? Ein Service ist mehr als ein Prozess Kaum Betriebssystem-Unterstützung für Services > Keine Beziehungen von rc.d-services untereinander und zu inetd-services erkennbar > Abhängigkeiten zwischen Services kaum darstellbar > eine Vielzahl von Konfigurationsdateien > automatische Fehlerbehandlung nur mit Clustersoftware > sequentieller Start der Services beim Boot > Fehlerhafte Services können Boot behindern
Aufgaben von SMF Einheitliches Lifecycle Management von Diensten > Starten aller Dienste in Solaris > Darstellung und Überwachung von Abhängigkeiten zwischen Diensten > Überwachung der Dienste zur Laufzeit > Konsolidierung von Konfigurationsdateien > Erzeugung und Verwaltung eines zentralen Repository mit Eigenschaften von Services Integration der Services in den Boot Prozess Parallelisierung des Bootprozesses
Was ist ein Service? Laufende Applikation, System Daemons Software Status von Geräten Eine Gruppen von Services = Milestone erreichen Definiert durch > Manifest in /var/svc/manifest > Start Methode in /lib/svc/method Charakterisiert durch Service Status > in /etc/svc/repository.db
Agenda Überblick Funktionsweisen Administration Security Fehlersuche Eigene Services
SMF - Architektur Commands Observability/ Management Agent inet-service Delegated Service Service Repository API svc.configd(1m) inetd(1m) Delegated Restarter svc.startd(1m) Process Contract Repository Client init(1m) KERNEL Contracts
Solaris 10 inittab SMF ändert den Solaris Boot Prozess init(1m) started nur noch den Master Restarter weitere Services werden von svc.startd gestarted -bash-2.05b# cat /etc/inittab ap::sysinit:/sbin/autopush -f /etc/iu.ap sp::sysinit:/sbin/soconfig -f /etc/sock2path smf::sysinit:/lib/svc/bin/svc.startd >/dev/msglog 2<>/dev/msglog </dev/console p3:s1234:powerfail:/usr/sbin/shutdown -y -i5 -g0 >/dev/msglog 2<>/dev/msglog
Restarter Master Restarter > svc.startd(1m) Delegated Internet Restarter > inetd(1m) inittab(4) Restarter > init(1m) # ps -ef grep ssh root 395 1 0 11:46:04? 0:00 /usr/lib/ssh/sshd root 883 878 0 15:13:36 pts/6 0:00 grep ssh # kill 395 # ps -ef grep ssh root 886 1 0 15:13:46? 0:00 /usr/lib/ssh/sshd
Repository enthält alle importierten Services, Properties und Zustände von Services /etc/svc/repository.db > snapshots des Repositories > Kopien des Repositories Zugriff über svc.configd(1m) API libscf(3lib)
Design-Prinzip Everything still works SMF ist in Solaris 10 immer aktiv Kompatibilität > Anwendungen funtionieren wie gewohnt > Aufruf /etc/rc.d Skripte gewährleistet > Konfigurationsdateien der Dienste unverändert Überführung von rc-scripten in SMF-Services > einfach und schrittweise realisierbar > Service-Manifest erzeugen > rc*.d Skripte werden zu Service-Methoden
Runlevel und Milestones Runlevel waren Systemzustände Milestones sind Zielpunkte, die erreicht werden Run Level SMF Milestone 0 milestone none S milestone/single-user 2 milestone/multi-user 3 milestone/multi-user-server Wechsel zwischen Milestones mit svcadm milestone milestone/single-user boot in einen Milestone boot -m milestone=multi-user
Manifeste und Profile Service Manifeste (XML) definieren die Services > FMRI als Name des Service > Abhängigkeiten und Eigenschaften > Start-/Stop-/Restart-Methoden > /var/svc/manifest/* Service-Profile gelten für eine Gruppe von Diensten > für einheitliche Service Festlegungen > z.b. nutzbar bei Jumstart Installationen > /var/svc/profile/platform_*.xml Platform-spezifisch > /var/svc/profile/site.xml Site-spezifisch
Manifeste und Profile Beispiel bash # cat /var/svc/manifest/network/ssh.xml <service name='network/ssh' <create_default_instance enabled='false' /> <dependency name='fs-local' <exec_method name='start' exec='/lib/svc/method/sshd start' bash # cat /var/svc/profile/generic_limited_net.xml <service name='network/ssh' version='1' type='service'> <instance name='default' enabled='true'/> </service>
Komponenten eines Service Beispiel ssh Manifest /var/svc/manifest/network/ssh.xml Daemon /usr/lib/ssh/sshd FMRI network/ssh:default svc:/network/ssh:default Start script /lib/svc/method/sshd Log file /var/svc/log/network-ssh:default.log
Agenda Überblick Funktionsweisen Administration Security Fehlersuche Eigene Services erstellen
SMF Kommandos Allgemeine Komandos > svcs(1) Service Status Anzeigen, Diagnose > svcadm(1m) Service Administration > svccfg(1m) Online Modifikation von Service Properties > svcprop(1) Anzeige von Service Properties inetd(1m) - Specifisch > inetadm(1m) Service Administration, Properties ändern > inetconv(1m) Konvertierung von inetd.conf Einträgen
Service Status Anzeige bash # svcs -a STATE legacy_run legacy_run legacy_run disabled disabled disabled online online maintenance STIME FMRI 11:47:58 lrc:/etc/rcs_d/s50sk98sol 11:48:13 lrc:/etc/rc3_d/s76snmpdx 11:48:14 lrc:/etc/rc3_d/s77dmi 11:47:47 svc:/network/nfs/server:default 11:47:47 svc:/network/dhcp-server:default 11:47:47 svc:/application/management/webmin:default 11:48:07 svc:/network/inetd:default 11:48:07 svc:/system/console-login:default 11:48:08 svc:/network/ssh:default
Service Status Anzeige - Details bash # svcs -p ssh STATE STIME FMRI online 11:48:08 svc:/network/ssh:default 11:48:08 301 sshd Prozesse eines Service Abhängig wovon? bash # svcs -d ssh STATE STIME FMRI disabled 11:47:47 svc:/system/filesystem/autofs:default online 11:47:49 svc:/network/loopback:default online 11:47:51 svc:/network/physical:default online 11:47:55 svc:/system/cryptosvc:default online 11:48:01 svc:/system/filesystem/local:default online 11:48:07 svc:/system/utmp:default Erforderlich für wen? bash # svcs -D ssh STATE STIME FMRI online 11:48:14 svc:/milestone/multi-user-server:default
Service Status Anzeige - Gesamtsicht Details und Instanzen bash # svcs -l ssh fmri svc:/network/ssh:default name SSH server enabled true state online next_state none state_time Mon Sep 19 11:48:08 2005 logfile /var/svc/log/network-ssh:default.log restarter svc:/system/svc/restarter:default contract_id 51 dependency require_all/none svc:/system/filesystem/local (online) dependency optional_all/none svc:/system/filesystem/autofs (disabled) dependency require_all/none svc:/network/loopback (online) dependency require_all/none svc:/network/physical (online) dependency require_all/none svc:/system/cryptosvc (online) dependency require_all/none svc:/system/utmp (online) dependency require_all/restart file://localhost/etc/ssh/sshd_config (online)
SMF Statusänderungen STATE STIME FMRI -bash-3.00# svcs ssh online 14:17:44 svc:/network/ssh:default -bash-3.00# svcadm disable ssh -bash-3.00# svcs ssh STATE STIME FMRI disabled 14:20:46 svc:/network/ssh:default -bash-3.00# svcadm enable ssh -bash-3.00# svcs ssh STATE STIME FMRI online 14:21:01 svc:/network/ssh:default Disable Service Enable Service
Anzeige von Properties bash # svcprop general/action_authorization astring solaris.smf.manage.ssh config_data/entities fmri file://localhost/etc/ssh/sshd_config stop/exec astring :kill stop/timeout_seconds count 60 restarter/logfile astring /var/svc/log/network-ssh:default.log restarter/contract count 97 restarter/start_pid count 17449 restarter/start_method_timestamp time 1127135334.822590000
Zeigen und Ändern von Properties bash # svccfg svc:> select ssh svc:/network/ssh> listprop start method start/exec astring "/lib/svc/method/sshd start" start/timeout_seconds count 60 stop method stop/exec astring :kill stop/timeout_seconds count 60 refresh method refresh/exec astring "/lib/svc/method/sshd restart" refresh/timeout_seconds count 60 svc:/network/ssh> editprop /* Properties werden direkt mit $EDITOR verändert */ svc:/network/ssh> exit
Agenda Überblick Funktionsweisen Administration Security Fehlersuche Eigene Services erstellen
SMF Security Starten und Ausführen von Services > mit unterschiedlichen User-ID > mit unterschiedlichen Privilegien > Festlegung im Service Manifest Administration von Services > feine Granularität möglich > Global, per Service, per Service Property Gruppe > Festlegung in /etc/user_attr oder per RBAC > z.b. solaris.smf.manage.ssh
SMF Security Beispiel bash # svcprop finger inetd_start/user astring noaccess bash # svcprop ldap/client start/privileges astring basic,file_dac_write bash # svcprop ssh general/action_authorization astring solaris.smf.manage.ssh
Agenda Überblick Funktionsweisen Administration Security Fehlersuche Eigene Services erstellen
Zuordnung von SMF Services Welcher Service macht was? docs.sun.com - smf Manual Aus man page (Notes Sektion) ermitteln Aus SMF Properties ermitteln > Nach Kommando in Methode suchen > Welcher Service benutzt die Methode > find /lib/svc/method -exec grep "sendmail" {} /dev/null \; -print > svcprop *:* grep exec grep smtp-sendmail > Ergebnis: svc:/network/smtp:sendmail Erfahrung
Anzeige und Analyse von Fehlern bash # svcs ssh STATE STIME FMRI maintenance 14:40:49 svc:/network/ssh:default bash # svcs -x svc:/network/ssh:default (SSH server) State: maintenance since Mon Sep 19 14:40:49 2005 Reason: Start method failed repeatedly, last exited with status 1. See: http://sun.com/msg/smf-8000-ks See: sshd(1m) See: /var/svc/log/network-ssh:default.log Impact: This service is not running. Fehlerstatus anzeigen Logfile bash # tail /var/svc/log/network-ssh:default.log [ Sep 19 14:40:49 Executing start method ("/lib/svc/method/sshd start") ] /lib/svc/method/sshd: /usr/lib/ssh/sshd: not found [ Sep 19 14:40:49 Method "start" exited with status 1 ]
Fehlerkorrektur und Restart bash # ls -l /usr/lib/ssh/sshd* -r-xr-xr-x 1 root bin 319588 Jun 24 03:05 /usr/lib/ssh/sshd.generate-error bash # mv sshd.generate-error sshd bash # svcadm clear ssh bash # svcs ssh STATE STIME FMRI online 15:08:54 svc:/network/ssh:default bash # svcs -p ssh STATE STIME FMRI online 15:08:54 svc:/network/ssh:default 15:08:54 17451 sshd Fehler korrigieren Zustand zurücksetzen
Wiederherstellung Repository siehe auch http://www.sun.com/msg/smf-8000-my System bleibt im single-user milestone > / ist read-only > keymap nicht gesetzt Fehlerursache prüfen > cat /etc/svc/volatile/db_errors Filesysteme remount read-write > ( /lib/svc/method/keymap ) > /lib/svc/method/fs-root > /lib/svc/method/fs-usr Backup Kopie des Repositoty einspielen > /lib/svc/bin/restore_repository
Agenda Überblick Funktionsweisen Administration Security Fehlersuche Eigene Services erstellen
Überblick: Eigene Services Erstellen Quickstart und Developer Dokumentation > http://www.sun.com/bigadmin/content/selfheal/sdev_intro.html Service Lifecycle > Service Manifest erstellen > Service Methode erstellen > Manifest importieren > Test > Packaging Manifest, Methoden, Binaries > Install Service > Konfiguration/Modifikation von Services > Entfernen von Services
Service Manifest XML-Datei enthält die Service Beschreibung > frei wählbarer Name des Service > Abhängigkeiten > Start-/Stop-/Restart-Methoden > Festlegung von Eigenschaften Manifeste unter /var/svc/manifest (Sun) /var/svc/manifest/<directory> (ISVs) /var/svc/manifest/site (lokale Manifeste) Template > /usr/share/lib/xml/dtd/service_bundle.dtd.1 > oder Manifest eines bestehenden Dienstes als Basis
Manifest Beispiel ( /var/svc/manifest/network/ssh.xml ) <service name='network/ssh' <create_default_instance enabled='false' /> <dependency name='fs-local' <service_fmri value='svc:/system/filesystem/local' /> <exec_method name='start' exec='/lib/svc/method/sshd start' <exec_method name='stop' exec=':kill' <property_group name='general' type='framework'> <propval name='action_authorization' type='astring' value='solaris.smf.manage.ssh' />
Service Methode und Manifest Import bash # cat /lib/svc/method/my_service_method. /lib/svc/share/smf_include.sh 'start') /opt/local/my_service/my_service_daemon ;; exit $SMF_EXIT_OK bash # svccfg import /var/svc/manifest/site/my_service_manifest.xml bash # svccfg enable my_service bash # svcs -a grep my_service online 10:57:11 svc:/site/my_service:default
Zusammenfassung SMF - Services Lifecycle Management Einfache und sichere Systemadministration > Vermeidung falscher configs > undo button für den Administrator > disaster recovery durch Snapshots > Administration mit fein granulierten Privilegien self-healing Solaris services > automatisierte Fehlerdiagnose, Meldung und Restart Schaffung einer Abstraktionsschicht für Services > Einheitliches Administrationsmodell (svcadm) > Einheitliches Entwicklermodell (manifest)
SMF Spickzettel Anzeigen: Fehler/Abhängigkeiten svcs (Anzeige) svcs -x (Fehler) svcs -d FMRI (abhängig von) svcs -D FMRI (Erforderlich für) FMRI: Fault Managed Resource Identifier system/cron svc:/system/cron /svc:/system/cron:default Booten: Single User/Debug Boot -m milestone=single boot -m debug Recovery/Daemons/files/directory svc.startd - Master Restarter svc.configd - Repository Daemon /etc/svc/repository.db - Repository /var/svc; /etc/svc; /lib/svc /lib/svc/bin/restore_repository Network Anzeigen/Ändern Properties svcprop system/cron (Properties anzeigen) svccfg (Properties ändern) svccfg import /var/svc/manifest/network/slp.xml!!: Nach Änderungen: svcadm (refresh,restart) inetadm admin/propeties inetconv convert legacy inetd.conf Enable/Disable/Refresh/Clear svcadm enable <FMRI> svcadm disable <FMRI> svcadm clear <FMRI>
Weitere Informationen Sun Product Dokumentation > http://docs.sun.com/ Open Solaris SMF Community > http://www.opensolaris.org/os/community/smf/ Sun BigAdmin SMF Portal > http://www.sun.com/bigadmin/content/selfheal/ Blogs > Stephen Hahn - http://blogs.sun.com/roller/page/sch > Liane Praza - http://blogs.sun.com/lianep/
Vielen Dank Detlef Drewanz Detlef.Drewanz@Sun.COM