Superuser

Autor Thema: Problem mit erstellen einer SVC Startdatei (xml)  (Gelesen 3956 mal)

Offline avalox

  • Sobl Junior
  • **
  • Beiträge: 59
Problem mit erstellen einer SVC Startdatei (xml)
« am: 03. Juni 2008, 15:22:23 »
Hi,

ich habe auf unserer sun (sun fire V210 sparc mit solaris 10) ossec installiert und würde das gerne per svc automatisch starten lassen.

habe mich da ein bisschen eingelesen und eine xml datei erstellt welche so aussieht:

---

<service_bundle type='manifest' name='ossec'>
  <service name='application/ossec'
           type='service'
           version='1'>

    <create_default_instance enabled='false' />

    <single_instance />
    <!-- Wait for all local filesystems to be mounted.  -->
    <dependency name='filesystem-local'
                grouping='require_all'
                restart_on='none'
                type='service'>
        <service_fmri value='svc:/system/filesystem/local:default'/>
    </dependency>
    <exec_method type='method'
                 name='start'
                 exec='/var/ossec/bin/ossec-control start'
                 timeout_seconds='10'>
        <method_context>
            <method_credential user='root' group='root'
                     privileges='basic' />
        </method_context>
    </exec_method>

    <exec_method type='method'
                 name='stop'
                 exec='/var/ossec/bin/ossec-control stop'
                 timeout_seconds='10' />

    <property_group name='ossec' type='framework'>
<!--
<propval name='duration' type='astring' value='transient' />
-->
 </property_group>

    <template>
        <common_name>
            <loctext xml:lang='C'>
               ossec
            </loctext>
        </common_name>
        <documentation>
            <manpage title='stclient' section='1M' />
        </documentation>
</template>
  </service>
</service_bundle>

----

das importieren klappt problemlos, doch der dienst bleibt im modus

maintenance    15:16:46 svc:/application/ossec:default

das log sagt folgendes:

[ Jun  3 15:16:46 Enabled. ]
[ Jun  3 15:16:46 Executing start method sta("/var/ossec/bin/ossec-control start") ]
[ Jun  3 15:16:46 Method "start" exited with status 1 ]

im log von ossec sieht man nicht, dass überhaupt versucht wurde es zu starten

wenn ich /var/ossec/bin/ossec-control start per hand ausführe klappt es problemlos.

Jemand eine Idee?

Danke und Gruß
Sebastian


sonnenblen.de - Das unabhängige Sun User Forum

Problem mit erstellen einer SVC Startdatei (xml)
« am: 03. Juni 2008, 15:22:23 »

Offline avalox

  • Sobl Junior
  • **
  • Beiträge: 59
Re: Problem mit erstellen einer SVC Startdatei (xml)
« Antwort #1 am: 04. Juni 2008, 11:59:19 »
keiner hat eine Idee? Für mich sieht alles richtig aus und der Befehl ist auch ok. trotzdem tut sich nichts

Offline Drusus

  • Sobl Master
  • ****
  • Beiträge: 424
  • Intentionally left blank
Re: Problem mit erstellen einer SVC Startdatei (xml)
« Antwort #2 am: 04. Juni 2008, 13:10:44 »
Moin,

ich kenne ossec nicht, von daher ist es etwas schwierig hier zu helfen. Ein paar Anmerkungen, die vielleicht trotzdem helfen koennten:

1) Im Logfile sieht man, dass "/var/ossec/bin/ossec-control start" zum Start aufgerufen wird. Ist dein manueller/erfolgreicher Test denn wirklich der identische Aufruf (d.h. mit dem Argument "start")? Machst du deinen manuellen Test nach einem "su - root"?
2) Im Logfile sieht man, dass das Script mit dem Return-Wert 1 beendet wird. Das ist kein gueltiger SMF Return Wert, daher:
    a) Hast du in der Start-Methode am Anfang ein ". /lib/svc/share/smf_include.sh" und am Schluss ein "exit $SMF_EXIT_OK" drin? Siehe "man smf_method"
    b) Der Return-Wert koennte auch gleich vom Start-Versuch kommen (errno 1 == EPERM). Ist das Script auf einer lokalen Disk (nicht NFS etc.) und die dort gestarteten Befehle ebenfalls? Das gleiche betrifft nicht nur das Script selber sondern auch die fort verwendeten Interpreter oder Befehle.
3) Im Manifest deklarierst du "duration" als "transient", d.h. der Service wird aufgerufen, macht irgendwas und beendet sich dann (d.h. keine Daemons bleiben ueber etc). Ist das bei ossec wirklich der Fall (d.h. nur Konfigbefehle etc. aber kein laufender Daemon oder andere langlebiege Prozesse)? Diese Einstellung stammt daher, dass du strosreg.xml als vorlage kopiert hast ;-)

Wenn ossec auf weitere nicht-lokale Filesysteme, auf Netzwerk oder auf Nameservices angewiesen ist, so musst du diese Dependencies noch hinzufuegen.

Tschau,
  Drusus.

Offline avalox

  • Sobl Junior
  • **
  • Beiträge: 59
Re: Problem mit erstellen einer SVC Startdatei (xml)
« Antwort #3 am: 04. Juni 2008, 13:59:38 »
Hi und danke

1. ja, das ist der komplette Aufruf "/var/ossec/bin/ossec-control start". Ich mache das, nachdem ist von einem anderen user aus zu root geworden bin (su -)

2. das habe ich nichts gesetzt. die manpage existiert bei mir leider nicht. Könntest du mir sagen wo ich das genau setzen muss?
 das script (so wie alles andere liegt auf der lokalen platte

3. mittlerweile habe ich das rausgeschmissen. es war aber auch vorher per <!-- und --> deaktiviert.

hab das xml noch mal neu gemacht. es sieht jetzt so aus:

---

<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">

<service_bundle type='manifest' name='ossec'>

<service
        name='application/ossec'
        type='service'
        version='1'>

        <create_default_instance enabled='false' />

        <dependency name='net-loopback' grouping='require_any'
                        restart_on='none' type='service'>
                <service_fmri value='svc:/network/loopback' />
        </dependency>

        <dependency name='net-service' grouping='require_all'
                        restart_on='none' type='service'>
                <service_fmri value='svc:/network/service'/>
        </dependency>

        <dependency name='net-physical' grouping='require_all'
                        restart_on='none' type='service'>
                <service_fmri value='svc:/network/physical' />
        </dependency>

        <dependency name='filesystem-local' grouping='require_all'
                        restart_on='none' type='service'>
                <service_fmri value='svc:/system/filesystem/local' />
        </dependency>


        <exec_method
                type='method'
                name='start'
                exec='/var/ossec/bin/ossec-control start'
                timeout_seconds='10'>
                <method_context>
                        <method_credential user='root' group='root' />
                </method_context>
        </exec_method>

        <exec_method
                type='method'
                name='stop'
                exec='/var/ossec/bin/ossec-control stop'
                timeout_seconds='10'>
        </exec_method>

       <stability value='Stable' />

        <template>
                <common_name>
                        <loctext xml:lang='C'> ossec agent </loctext>
                </common_name>
                <description>
                        <loctext xml:lang='C'>
                                ossec
</loctext>
                </description>
        </template>
</service>

</service_bundle>


---

gruß Sebastian

Offline Drusus

  • Sobl Master
  • ****
  • Beiträge: 424
  • Intentionally left blank
Re: Problem mit erstellen einer SVC Startdatei (xml)
« Antwort #4 am: 04. Juni 2008, 17:32:16 »
Moin,

zu 1): ok - dann sollte es ja eigentlich auch nicht mehr an falschen Permissions etc. scheitern
zu 2): Die Manpage liegt in /usr/share/man/man5/smf_method.5 und solte mit "man -s5 smf_method" anzeigbar sein. Falls du lokal keine Manpages installiert hast, so findest du diese auch in der Solaris 10 Abteilung von http://docs.sun.com/
zu 3): oops - da hatte ich die Kommentare zuvor uebersehen, sorry.

Das neue Manifest hat ja ein Huegel mehr Abhaengigkeiten. Wenn auch das nicht geht, dann muesste man nun mal wirklich auf dem System selber weiter debuggen. Ich glaube das wird ueber Artikel im Forum schwierig (es sei denn jemand findet sich, der ossec kennt und dann bei sich selber testen kann).

Tschau,
  Drusus.

Offline avalox

  • Sobl Junior
  • **
  • Beiträge: 59
Re: Problem mit erstellen einer SVC Startdatei (xml)
« Antwort #5 am: 04. Juni 2008, 18:50:16 »
ok, gefunden.

es sieht besser aus, aber noch nicht perfekt.

jetzt sieht mein xml so aus:

---

<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">

<service_bundle type='manifest' name='ossec'>

<service
        name='application/ossec'
        type='service'
        version='1'>


        <dependency name='filesystem-local' grouping='require_all'
                        restart_on='none' type='service'>
                <service_fmri value='svc:/system/filesystem/local' />
        </dependency>


        <exec_method
                type='method'
                name='start'
                exec='/var/svc/manifest/application/method.sh %m'
                timeout_seconds='10'>
                <method_context>
                        <method_credential user='root' group='root' />
                </method_context>
        </exec_method>

<exec_method
                type='method'
                name='stop'
                exec='/var/svc/manifest/application/method.sh %m'
                timeout_seconds='10'>
                <method_context>
                        <method_credential user='root' group='root' />
                </method_context>
        </exec_method>

       <stability value='Stable' />
        <template>
                <common_name>
                        <loctext xml:lang='C'> ossec agent </loctext>
                </common_name>
                <description>
                        <loctext xml:lang='C'>
                                ossec
                        </loctext>
                </description>
        </template>
</service>

</service_bundle>


---

method.sh sieht so aus:

#!/sbin/sh
#
. /lib/svc/share/smf_include.sh

case "$1" in
'start')
        /var/ossec/bin/ossec-control start
        sleep 2
        ;;

'stop')
        /var/ossec/bin/ossec-control stop
        sleep 2
        ;;
*)
        echo "Usage: $0 { start | stop }"
        exit 1
        ;;
esac
exit $SMF_EXIT_OK


jetzt erscheint ossec als offline und er wirft folgende meldung im log als schleife:


[ Jun  4 18:49:36 Stopping because all processes in service exited. ]
[ Jun  4 18:49:36 Method property group 'stop' is not present. ]
[ Jun  4 18:49:36 Executing start method ("/var/svc/manifest/application/method.sh start") ]
[ Jun  4 18:49:38 Method "start" exited with status 0 ]
[ Jun  4 18:49:38 Stopping because all processes in service exited. ]
[ Jun  4 18:49:38 Method property group 'stop' is not present. ]
[ Jun  4 18:49:38 Executing start method ("/var/svc/manifest/application/method.sh start") ]
[ Jun  4 18:49:40 Method "start" exited with status 0 ]
[ Jun  4 18:49:40 Stopping because all processes in service exited. ]
[ Jun  4 18:49:40 Method property group 'stop' is not present. ]
[ Jun  4 18:49:40 Executing start method ("/var/svc/manifest/application/method.sh start") ]

geht also leider immer noch nicht.

was mach ich nur falsch?

claus

  • Gast
Re: Problem mit erstellen einer SVC Startdatei (xml)
« Antwort #6 am: 04. Juni 2008, 23:44:40 »
Hallo,

so was in der Art (Endlosschleife) hatte ich kürzlich mal, mit etwas ganz anderem zwar, ich schaus mir morgen in der Mittagspause mal an, vielleicht kann ich ja helfen.

Claus

Offline Drusus

  • Sobl Master
  • ****
  • Beiträge: 424
  • Intentionally left blank
Re: Problem mit erstellen einer SVC Startdatei (xml)
« Antwort #7 am: 05. Juni 2008, 09:54:51 »
Moin,

die Meldung erhaelst du weil es keinen laufenden Daemon gibt. Wie gesagt: ohne Kenntnis von ossec kann ich da nicht weiterhelfen.

Sollte der Service tatsaechlich keinen dauerhaft laufenden Daemon starten, dann musst du noch folgenden Teil in die XML-Datei einbauen:

    <property_group name='startd' type='framework'>
        <propval name='duration' type='astring' value='transient' />
    </property_group>

Ohne diesen Teil geht er davon aus, dass die Beendigung alelr Prozesse ein Fehler ist und versucht den Service neu zu starten.

Tschau,
  Drusus.

Offline avalox

  • Sobl Junior
  • **
  • Beiträge: 59
Re: Problem mit erstellen einer SVC Startdatei (xml)
« Antwort #8 am: 05. Juni 2008, 12:09:15 »
ossec ist ein HIDS.

Es ist schon ein Daemon und sollte nicht nur starten und sich beenden. Es soll starten und dann laufen (insgesamt werden mit ossec-control start sogar 4 oder 5 Daemons gestartet).

Ich weiss nur nicht, wie ich ihm sagen soll, dass es ein Daemon ist und nicht sofort wieder beendet werden soll?!

Gruß und danke

Offline avalox

  • Sobl Junior
  • **
  • Beiträge: 59
Re: Problem mit erstellen einer SVC Startdatei (xml)
« Antwort #9 am: 05. Juni 2008, 17:22:41 »
hab die lösung im web gefunden.

das ganze muss so aussehen

---

<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">

<service_bundle type='manifest' name='ossec'>

<service
        name='site/ossec'
        type='service'
        version='1'>

        <single_instance />

        <dependency name='fs-local'
                grouping='require_all'
                restart_on='none'
                type='service'>
                <service_fmri
                        value='svc:/system/filesystem/local' />
        </dependency>

        <dependency name='fs-autofs'
                grouping='optional_all'
                restart_on='none'
                type='service'>
                <service_fmri value='svc:/system/filesystem/autofs' />
        </dependency>

        <dependency name='net-loopback'
                grouping='require_all'
                restart_on='none'
                type='service'>
                <service_fmri value='svc:/network/loopback' />
        </dependency>

        <dependency name='net-physical'
                grouping='require_all'
                restart_on='none'
                type='service'>
                <service_fmri value='svc:/network/physical' />
        </dependency>

        <dependency name='cryptosvc'
                grouping='require_all'
                restart_on='none'
                type='service'>
                <service_fmri value='svc:/system/cryptosvc' />
        </dependency>

        <dependency name='utmp'
                grouping='require_all'
                restart_on='none'
                type='service'>
                <service_fmri value='svc:/system/utmp' />
        </dependency>

        <dependency name='main-file'
                grouping='require_all'
                restart_on='restart'
                type='path'>
      <service_fmri value='file://localhost/var/ossec/etc/ossec.conf' />
        </dependency>

        <dependent
                name='ossec_multi-user-server'
                grouping='optional_all'
                restart_on='none'>
                        <service_fmri
                            value='svc:/milestone/multi-user-server' />
        </dependent>

        <property_group name='startd'
                type='framework'>
                <!-- sub-process core dumps shouldn't restart session -->
                <propval name='ignore_error'
                    type='astring' value='core,signal' />
        </property_group>

        <!--
         ossec-execd
        -->
        <instance name='execd' enabled='true' >
                <exec_method
                        type='method'
                        name='start'
                        exec='/var/ossec/bin/ossec-execd'
                        timeout_seconds='60'/>

                <exec_method
                        type='method'
                        name='stop'
                        exec=':kill'
                        timeout_seconds='60' />
        </instance>

        <!--
         ossec-agentd
        -->
        <instance name='agentd' enabled='true' >
                <exec_method
                        type='method'
                        name='start'
                        exec='/var/ossec/bin/ossec-agentd'
                        timeout_seconds='60'/>

                <exec_method
                        type='method'
                        name='stop'
                        exec=':kill'
                        timeout_seconds='60' />
        </instance>

        <!--
         ossec-logcollector
        -->
        <instance name='logcollector' enabled='true' >
                <exec_method
                        type='method'
         name='start'
                        exec='/var/ossec/bin/ossec-logcollector'
                        timeout_seconds='60'/>

                <exec_method
                        type='method'
                        name='stop'
                        exec=':kill'
                        timeout_seconds='60' />
        </instance>

        <!--
         ossec-syscheckd
        -->
        <instance name='syscheckd' enabled='true' >
                <exec_method
                        type='method'
                        name='start'
                        exec='/var/ossec/bin/ossec-syscheckd'
                        timeout_seconds='60'/>

                <exec_method
                        type='method'
                        name='stop'
                        exec=':kill'
                        timeout_seconds='60' />
           </instance>

        <stability value='Unstable' />

        <template>
                <common_name>
                        <loctext xml:lang='C'>
                        OSSEC server
                        </loctext>
                </common_name>
                <documentation>
                        <doc_link name='ossec.net'
                                uri='http://www.ossec.net/en/manual.html' />
                </documentation>
        </template>

</service>

</service_bundle>


---


ein paar weitere Abhängigkeiten und er ruft nicht das ossec-control auf, sondern die daemons einzeln. Da hätte ich auch mal drauf kommen können :)

danke für eure Hilfe

sonnenblen.de - Das unabhängige Sun User Forum

Re: Problem mit erstellen einer SVC Startdatei (xml)
« Antwort #9 am: 05. Juni 2008, 17:22:41 »