Init-Skript mit LSB neu sortieren

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
CaptnUnterhose
Beiträge: 36
Registriert: 30.08.2011 11:28:15

Init-Skript mit LSB neu sortieren

Beitrag von CaptnUnterhose » 01.09.2011 14:48:11

Hallo zusammen,

auch wenn das Thema LSB schon mehrfach angesprochen wurde, bitte ich euch mir ne Antwort zu geben.

System: Deb Squeeze

Problem: Ich möchte eigentlich nur, dass das Skript mdadm-raid vor dem Skript open-iscsi beendet wird. Nun war ich so frei, schon mal ne Override-Regel zu schreiben. Doch leider krieg ich es einfach nicht gebacken, dass mdadm-raid vor das besagte Skript gelangt. Hintergrund ist einfach, dass beim Shutdown erst das Raid sauber runtergefahren werden soll, bevor die LUNs vom iSCSI gestoppt werden. Andersherum macht es ja wenig Sinn.

Hier mal die Dependencys:

/etc/init.d/mdadm-raid:

Code: Alles auswählen

### BEGIN INIT INFO
# Provides:          mdadm-raid
# Required-Start:    mountkernfs
# Should-Start:      udev devfsd
# Required-Stop:     mountkernfs
# Should-Stop:       udev devfsd
# Default-Start:     S
# Default-Stop:      0 6
# Short-Description: MD array assembly
# Description:       This script assembles a system's MD arrays, according to
#                    the settings in /etc/mdadm/mdadm.conf and the preferences
#                    in /etc/default/mdadm.
### END INIT INFO
/etc/init.d/open-iscsi

Code: Alles auswählen

### BEGIN INIT INFO
# Provides:          open-iscsi iscsi
# Required-Start:    $network $remote_fs
# Required-Stop:     $network $remote_fs sendsigs
# Default-Start:     S
# Default-Stop:      0 1 6
# Short-Description: Starts and stops the iSCSI initiator services and logs in to default targets
### END INIT INFO
Was ich erschreckend finde, ist einfach die Tatsache, dass bei den K-Bezeichnungen im Verzeichnis /etc/rc0.d/ der Symlink auf mdadm quasi am Anfang ist. Jedoch wird mdadm-raid sehr viel später ausgeführt.

Ich sitz jetzt an dem Krempel geschlagene zwei Tage und so langsam werd ich ganz schön genervt.

Bitte erbarme sich einer und gebe mir nen Denkanstoß.

Danke und Gruß
CaptnUnterhose
Geht nicht, gibts nicht. Aber gibts nicht geht.

gingupin

Re: Init-Skript mit LSB neu sortieren

Beitrag von gingupin » 02.09.2011 07:29:02

Moin...

mal ne ganz dumme Frage:

hast Du die Reihenfolge einfach mal geändert? Also die Verlinkungen mit neuen K+nummer Einträgen neu angelegt?
Ich hatte ähnliches Problem mit einem Firewall-Script und verschiedenen Diensten....
Also habe ich durch neue Links mit geänderten Nummern und somit Reihenfolgen die Boot und Shutdown-Vorgänge
"neu" angelegt...

Gruss

CaptnUnterhose
Beiträge: 36
Registriert: 30.08.2011 11:28:15

Re: Init-Skript mit LSB neu sortieren

Beitrag von CaptnUnterhose » 02.09.2011 23:33:00

Hallochen,

herzlichen Dank für deine Antwort.

Ich dachte immer, dass man eigentlich nur die Reihenfolge der K-Nummern ändern muss. Das habe ich auch zur Genüge gemacht bzw. versucht. Jedoch hat es leider nicht geklappt.

Daher hat man mir den Tip gegeben, dass Squeeze mit LSB auskommt und siehe da: man kann das K-Geraffel an sich vergessen, da es erstens durch insserv angelegt wird in Abhängigkeit der jeweiligen LSB-Header und zweitens, weil eh Parallelisierung durch die .depend-Dateien erreicht wird.

Sprich, ich hab das manuelle Ändern probiert und kläglich versagt, da das LSB irgendeine verrückte Abhängigkeit hat, so dass man es einfach nicht hinbekommt.

Nichts desto trotz war ich heute auch so frei und habe einfach bei Required-Stop im mdadm-raid-Skript das Programm umountiscsi.sh und open-iscsi angegeben. Daher könnte man meinen, dass jetzt auch erst mdadm-raid gestoppt wird. insserv sortiert auch die K-Nummer entsprechend neu. Jedoch, und das ist absolut nicht nachvollzeihbar, wird mdadm-raid nicht gestoppt und das Raid ist inkonsistent. Keine Ahnung warum. Ich habe mittlerweile das Gefühl, dass irgendwo der Stop von MD-Geräten hart verdrahtet ist.

Sofern noch Hinweise, Ratschläge oder sonstige Sachen sind: Nur Mut, immer her damit. Ich bin sicherlich nicht der Einzige, dass sich daran die Zähne ausbeisst.

Grüße und gute Nacht
Geht nicht, gibts nicht. Aber gibts nicht geht.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Init-Skript mit LSB neu sortieren

Beitrag von rendegast » 03.09.2011 00:01:46

dass das Skript mdadm-raid vor dem Skript open-iscsi beendet wird.
Mit anderen Worten:
"dass das Skript open-iscsi nach dem Skript mdadm-raid beendet wird."

Bei mir nach Installieren der beiden Pakete:

Code: Alles auswählen

# ls -1 /etc/rc0.d /etc/rc6.d | egrep "mdadm|iscsi|etc/|^$"
/etc/rc0.d:
K01mdadm
K01umountiscsi.sh
K02mdadm-raid
K02open-iscsi

/etc/rc6.d:
K01mdadm
K01umountiscsi.sh
K02mdadm-raid
K02open-iscsi
mdadm-raid und open-iscsi werden parallel zum Beenden aufgerufen,
und open-iscsi ist schneller erledigt?


/etc/insserv/overrides/open-iscsi :

Code: Alles auswählen

### BEGIN INIT INFO
# Provides:          open-iscsi iscsi
# Required-Start:    $network $remote_fs
# Required-Stop:     $network $remote_fs sendsigs
# Should-Start:
# Should-Stop:
# X-Start-Before:
# X-Stop-After:      mdadm-raid
# Default-Start:     S
# Default-Stop:      0 1 6
# Short-Description: Starts and stops the iSCSI initiator services and logs in to default targets
### END INIT INFO
(Die leeren Werte sind als Templates zum Experimentieren eingefügt)
->

Code: Alles auswählen

# ls -1 /etc/rc0.d /etc/rc6.d | egrep "mdadm|iscsi|etc/|^$"
/etc/rc0.d:
K01mdadm
K01umountiscsi.sh
K02mdadm-raid
K03open-iscsi

/etc/rc6.d:
K01mdadm
K01umountiscsi.sh
K02mdadm-raid
K03open-iscsi
Analog für umountiscsi.sh.

Nichts desto trotz war ich heute auch so frei und habe einfach bei Required-Stop im mdadm-raid-Skript das Programm umountiscsi.sh und open-iscsi angegeben.
So geht es auch,
umountiscsi.sh anzugeben reicht aber, da es selbst eine Beziehung zu open-iscsi hat:

Code: Alles auswählen

# Required-Stop:     mountkernfs umountiscsi.sh
Anmerkung. zwischen "mountkernfs" und "umountiscsi.sh" KEIN Tab,
der Eintrag wird sonst von insserv ignoriert.


Aber diese Änderungen waren auch nur in den overrides?
Stelle alle von debian gelieferten Startskripte wieder in den Ausgangszustand!
Wichtig! -> da eventuelles Fehlverhalten, eventuell Probleme bei Upgrades.
(Korrekte Dateien bekommst Du auch aus heruntergeladenen debs.)

Änderungen an den Headern nur an Headerkopien in /etc/insserv/overrides durchführen!
(Die sind bei problematischem Verhalten einfach durch Umbenennen "Name" -> ".Name" abgeschaltet
Spielereien bleiben dabei übersichtlich, da ja auch direkt mit dem Original verglichen werden kann.)
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

CaptnUnterhose
Beiträge: 36
Registriert: 30.08.2011 11:28:15

Re: Init-Skript mit LSB neu sortieren

Beitrag von CaptnUnterhose » 05.09.2011 13:15:08

Hallo miteinander,

besten Dank für die Hinweise. Die habe ich wahrlich gebraucht. Man sieht ja nachher nur noch Matsch auf dem Bildschirm :roll: .

Komplett konnte ich es noch nicht testen. Mir ist jetzt nur noch folgendes aufgefallen. Scheinbar wird das md-Gerät VOR dem open-iscsi runtergefahren. Soweit schick. Jedoch besteht ein Mount vom md-Gerät. Wenn ich jetzt so nachdenke, würde mir noch ein automatischer Unmount vor dem Raid-Stop helfen. Quasi wäre das das Non-Plus-Ultra.

Jemand Ideen??

Erst wenn das gelöst wurde, kann ich vollends der Lösung von rendegast zustimmen.

Aber schon einmal herzlichen Dank.

Gruß
Geht nicht, gibts nicht. Aber gibts nicht geht.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Init-Skript mit LSB neu sortieren

Beitrag von rendegast » 05.09.2011 13:29:04

Sowas zBsp., /etc/init.d/UMOUNT (durch den Namen findet sich das Skript am Anfang der Dateiliste)

Code: Alles auswählen

#!/bin/bash
### BEGIN INIT INFO
# Provides:          UMOUNT
# Required-Start:
# Required-Stop:     mdadm-raid
# Should-Start:
# Should-Stop:       
# X-Start-Before:
# X-Stop-After:      mdadm
# Default-Start:
# Default-Stop:      0 6
# Short-Description: Schaltet einige Mounts ab.
# Description:
### END INIT INFO
## X-Interactive:     true

echo "-------------- $0 $@ -------------"

SCRIPT2() {
......
}
mount | grep "on /mnt/md-mounts/" >/dev/null  && { SCRIPT2; sync; }	# Eine Aktion

SCRIPT1() {
....
}
Teste && { SCRIPT1; sync; }		# Noch eine Aktion

:
Natürlich noch auf Deine Bedürfnisse eingestellt.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

CaptnUnterhose
Beiträge: 36
Registriert: 30.08.2011 11:28:15

Re: Init-Skript mit LSB neu sortieren

Beitrag von CaptnUnterhose » 05.09.2011 16:24:36

Hallochen,

ich kann nun voller Stozl berichten, dass das Thema aus meiner Sicht gelöst ist.

Ich hab dein Skript abgewandelt und jetzt wird PostgreSQl sauber beendet, dann erfolgt der saubere Unmount vom Datenverzeichnis (von PostgreSQL). Als nächstes wird mdadm-raid gestoppt und zu guter letzt ist für open-iscsi Feierabend.

Einzig ein

Code: Alles auswählen

sleep 5s
musste noch in die Datei /etc/init.d/open-iscsi in der Stop-Funktion eingefügt werden, da der Stop von mdadm-raid zu langsam war, so dass der Stopvorgang von open-iscsi immer nen Fehler gebracht hat.

Ich danke herzlichst für die Lösung (zumindest sieht es danach aus).

Gruß aus dem Norden
Geht nicht, gibts nicht. Aber gibts nicht geht.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Init-Skript mit LSB neu sortieren

Beitrag von rendegast » 05.09.2011 17:14:47

Einzig ein
sleep 5s
musste noch in die Datei /etc/init.d/open-iscsi in der Stop-Funktion eingefügt werden,
Sollte IMO auch mit einem separaten Skript gelöst werden, statt in der open-iscsi des Systems:
/etc/init.d/PAUSE

Code: Alles auswählen

#!/bin/sh
### BEGIN INIT INFO
# Provides:          PAUSE
# Required-Start:
# Required-Stop:     open-iscsi
# Should-Start:
# Should-Stop:       
# X-Start-Before:
# X-Stop-After:      
# Default-Start:
# Default-Stop:      0 6
# Short-Description: Pause vor open-iscsi-Stop
# Description:
### END INIT INFO
## X-Interactive:     true

sleep 5
:
Obiges allein fügt sich so problemlos ins System.
Die dem System widersprechende Beziehung
mdadm-raid ->( PAUSE )-> open-iscsi
wird im /etc/insserv/overrides/PAUSE festgesetzt:

Code: Alles auswählen

### BEGIN INIT INFO
# Provides:          PAUSE
# Required-Start:
# Required-Stop:     open-iscsi
# Should-Start:
# Should-Stop:       
# X-Start-Before:
# X-Stop-After:      mdadm-raid
# Default-Start:
# Default-Stop:      0 6
# Short-Description: Pause vor open-iscsi-Stop
# Description:
### END INIT INFO
## X-Interactive:     true
-----------------------------------------------------------------
Für eine Rückstellung auf normales System müßten dann aber zwei Dateien deaktiviert werden
/etc/insserv/overrides/PAUSE
/etc/insserv/overrides/mdadm-raid

Mit dem Zwischenschitt init.d/PAUSE ergibt sich aber eine weitere, sauberere(?) Lösungsmöglichkeit:
/etc/insserv/overrides/mdadm-raid (ganz ohne ein overrides/PAUSE)

Code: Alles auswählen

...
# Provides:          mdadm-raid
# Required-Start:
# Required-Stop:     PAUSE
...
Sobald (einzig und nur) /etc/insserv/overrides/mdadm-raid deaktiviert wird,
ist also das normale Systemverhalten wiederhergestellt, ohne Osterei.
Zuletzt geändert von rendegast am 06.09.2011 13:51:21, insgesamt 4-mal geändert.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

CaptnUnterhose
Beiträge: 36
Registriert: 30.08.2011 11:28:15

Re: Init-Skript mit LSB neu sortieren

Beitrag von CaptnUnterhose » 06.09.2011 10:29:26

Hallochen,

und einfach mal fetten Dank für den Hinweis. Das PAUSE-Skript ist natürlich die sauberste Variante.

Was mich jedoch noch interessieren würde: warum macht man im Verzeichnis overrides nochmals die Definierung von PAUSE, obwohl es ja bereits definiert wurde. Wenn ich mir deine Skripte so anschaue, sehe ich da keine gravierenden Unterschied. Oder bin ich gerade mal wieder blind ;-)?

Nichts desto trotz habe ich jetzt die Lösung vor dem Herrn gefunden.

Besten Dank dafür!!! Sofern jemand ne ausführliche Anleitung braucht, einfach ne PN an mich.

Gruß
Geht nicht, gibts nicht. Aber gibts nicht geht.

CaptnUnterhose
Beiträge: 36
Registriert: 30.08.2011 11:28:15

Re: Init-Skript mit LSB neu sortieren

Beitrag von CaptnUnterhose » 06.09.2011 10:31:34

Ach ich seh gerade: in der orginalen PAUSE hast Du bei X-Stop-After dein Eintrag für mdadm-raid rausgelassen. Und bei Overrides mit rein genommen.

Kann ich das nicht gleich so machen??

Gruß und Danke
Geht nicht, gibts nicht. Aber gibts nicht geht.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Init-Skript mit LSB neu sortieren

Beitrag von rendegast » 06.09.2011 13:41:56

in der orginalen PAUSE hast Du bei X-Stop-After dein Eintrag für mdadm-raid rausgelassen.
Und bei Overrides mit rein genommen.
Kann ich das nicht gleich so machen??
Das (mögliche) Problem ist dann, daß wenn overrides/mdadm-raid deaktiviert wird,
der header des init.d/PAUSE dann eine Fehlbedingung machen würde.

Das init.d/ sollte IMO ohne alle overrides/ aber valide sein, und die debian-Beziehungen belassen.
(Was für von debian gelieferte Skripte wohl auch zutrifft.)
Für Reparaturen / Erstellung fehlender Header externer Skripte oder auch nur einfache Umsortierung gibt es dann overrides/.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

CaptnUnterhose
Beiträge: 36
Registriert: 30.08.2011 11:28:15

Re: Init-Skript mit LSB neu sortieren

Beitrag von CaptnUnterhose » 06.09.2011 15:53:01

Man lernt immer was dazu.

Einfach mal richtig herzlichen Dank :hail: .

So stell ich mir echt Hilfe vor. Kompetent, schnell und extrem hilfreich.

Besten Dank
Geht nicht, gibts nicht. Aber gibts nicht geht.

Antworten