# start-stop-daemon mit chroot ?

## 3PO

Hallo Zusammen,

ich habe folgendes Problem:

Ich habe 2 chroot-Umgebungen,

```
/var/test/chroot0

/var/test/chroot1
```

in diesen wiederum sind 2 Daemonen zu starten.

Ich habe mir ein Script gebastelt, dass die beiden Daemoen via start.local aufruft.

```
#!/bin/sh

chroot /var/test/chroot0 /var/test/foo

chroot /var/test/chroot1 /var/test/foo
```

Mir währe es aber lieber, dieses mit dem start-stop-daemon zu machen.

Ich habe nun gelesen, dass es beim start-stop-daemon einen Parameter --chroot gibt, - leider aber ist die man Page nicht wirklich hilfreich.

So, nun aber die Fragen:

Ist es möglich mit dem start-stop-daemon 2 Dämonen in 2 verschiedenen chroot-Umgebungen aufzurufen, und falls ja, wie müssten denn die Einträge aussehen?

----------

## Max Steel

Ich würde folgendes vermuten:

start-stop-daemon --start --make-pidfile --chroot /var/test/chroot0 --exec /var/test/foodaemon

Da:

man start-stop-daemon

```
-r, --chroot path

        chroot to this directory before starting the daemon. All other paths, such

        as the path to the daemon, chdir and pidfile, should be relative to the

        chroot.
```

wenn du named und dhcpd mit dem USE-Flag chroot mergst, kannst du dir den Befehl aus den entsprechenden /etc/init.d/ nochmal genauer anschauen  :Wink: 

Edith:

Oder wars eine Variable in der entsprechenden /etc/conf.d/    :Question:   :Embarassed: 

Edith2:

Zum Stoppen natürlich dementsprechend statt --start eben --stop.

----------

## 3PO

Danke erstmal für den Tipp.

Das Starten geht so, aber stoppen lassen sie die Daemonen so leider nicht.  :Sad: 

```

NAME="foo"

DAEMON="foo.x86"

PATH="/var/test"

start() {

   

   test -x $DAEMON || exit 0

      ebegin "Starting $NAME"

   

    start-stop-daemon --start --chroot $PATH/chroot0 --exec $PATH/$DAEMON

    start-stop-daemon --start --chroot $PATH/chroot1 --exec $PATH/$DAEMON

   

   eend $? "Failed to start $NAME"

}

stop() {

   

   ebegin "Stopping $NAME"

   

   start-stop-daemon --stop --retry $DAEMON

   eend $? "Failed to stop $NAME"
```

----------

## mv

Schuß ins Blaue: "$PATH/$DAEMON" statt nur $DAEMON.

Außerdem soltest Du vermutlich auch beim Stoppen den -r-Parameter angeben, da ja so Dinge wie pidfile im chroot liegen.

Außerdem: Legt Dein Daemon tatsächlich selbst das pidfile an? Ansonsten solltest Du das auch noch durch Parameter (beim Starten und Stoppen) erledigen.

----------

## 3PO

So, ich habe es jetzt mal wie folgt abgeändert:

```

NAME="foo"

DAEMON="foo.x86"

PATH="/var/test"

start() {

   

   test -x $DAEMON || exit 0

      ebegin "Starting $NAME"

   

       start-stop-daemon --start --chroot $PATH/chroot0 --exec $PATH/$DAEMON --make-pidfile --pidfile /var/run/$NAME.pid

       start-stop-daemon --start --chroot $PATH/chroot1 --exec $PATH/$DAEMON --make-pidfile --pidfile /var/run/$NAME.pid

   

   eend $? "Failed to start $NAME"

}

stop() {

   

   ebegin "Stopping $NAME"

   

                start-stop-daemon --stop --chroot $PATH/chroot0 $PATH/$DAEMON --pidfile /var/run/$NAME.pid

                start-stop-daemon --stop --chroot $PATH/chroot1 $PATH/$DAEMON --pidfile /var/run/$NAME.pid

   eend $? "Failed to stop $NAME"
```

Leider ist es nur so, dass das Starten geht, das Stoppen jedoch nicht.

/etc/init.d/foo start -->  foo startet mit z.: Pid 555 und 557

/etc/init.d/foo stop --> foo stopppt nicht, sondern startet 2 weitere Male. -->  Pid 555. 557, 886, 889

Sonderbar, oder??Last edited by 3PO on Sat Jan 24, 2009 7:28 pm; edited 2 times in total

----------

## mv

 *3PO wrote:*   

> start-stop-daemon --stop --chroot $PATH/chroot0 $PATH/$DAEMON --pidfile /var/run/$NAME.pid

 

Möglicherweise wird chroot bei --stop ignoriert. Wie ist es mit

```
start-stop-daemon --stop --pidfile $PATH/chroot0/var/run/$NAME.pid
```

----------

## 3PO

```
start-stop-daemon --stop --pidfile $PATH/chroot0/var/run/$NAME.pid
```

Das funktioniert leider auch nicht.  :Sad: 

Damit passiert das selbe, wie oben schon genannt.

Mir ist übrigens aufgefallen, dass keine pid-files angelegt werden, obwohl beie Daemonen gestartet weden.

----------

## mv

 *3PO wrote:*   

> Mir ist übrigens aufgefallen, dass keine pid-files angelegt werden

 

Dann ist das der Grund für die Probleme. Wenn das der daemon nicht selbs tut, muss das start-stop-daemon mit tun (Option -m).

----------

## 3PO

 *mv wrote:*   

> Dann ist das der Grund für die Probleme. Wenn das der daemon nicht selbs tut, muss das start-stop-daemon mit tun (Option -m).

 

Habe ich doch gemacht.

 -m  =  --make-pidfile (laut man Page)

```
.....

start-stop-daemon --start --chroot $PATH/chroot0 --exec $PATH/$DAEMON --make-pidfile --pidfile /var/run/$NAME.pid 

.....
```

Oder stimmt die Syntax so nicht?

----------

## mv

Das hatte ich überlesen   :Embarassed: 

Wenn kein pid-File erzeugt wird (also innerhalb der chroot), ist das wohl ein Bug von start-stop-daemon. Benutzt Du openrc?

----------

## 3PO

 *mv wrote:*   

> 
> 
> [...] Benutzt Du openrc?

 

Nein.

Sollte ich da benutzen, bzw. würde das mein Problem lösen?

----------

## mv

 *3PO wrote:*   

> Sollte ich da benutzen, bzw. würde das mein Problem lösen?

 

Zumindest hat openrc eine neue Implementation von start-stop-daemon. Ob diese den Bug nicht hat, weiß ich nicht, aber falls man einen Bug fixen muss, ist es besser, man tut das bei der neuesten Version.

----------

## 3PO

Ich habe mich mal hier über OpenRC informiert, leider muss ja so einige umkonfiguriert werden, bis alles wieder wie gewohnt läuft, oder?

----------

## Max Steel

Das neue openrc kann die Einstellungen recht effektiv übernehmen, zumindest wegen den Runlevels, was du unbedingt machen solltest wären /etc/conf.d/ und /etc/rc.conf zu überprüfen (etc-update und alles manuell nachschauen was geändert wurde).

----------

## 3PO

Das ist aber ganz schön aufwändig.

Das muss ich mir noch schwer überlegen, ob ich das machen will, denn ich habe einige Zeit gebraucht, bis ich die Configs so hatte, wie ich sie haben wollte.

Das währe mehr als ärgelich, wenn das alles nochmal machen müsste....

----------

