[erledigt] modulare init-skripte anstatt monolithischer rcS

Kreuzuebersetzer, Diskussion über Änderungen im Tuxbox-CDK und Tuxbox-CVS
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von GetAway »

Sieht bei mir soweit auch ganz gut aus.
Zu den Keymaps: Werden die außer für kb2rcd noch für andere Sachen benötigt?
Wenn nicht, könnte man die Erzeugung des Skripts und das Laden doch davon abhängig machen.
Striper
Erleuchteter
Erleuchteter
Beiträge: 625
Registriert: Samstag 8. September 2007, 16:17

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von Striper »

Aus dem Log:

Code: Alles auswählen

install -m755 start_enigma /home/Striper/MY_Image/dbox2/cdkflash/var-neutrino/etc/init.d/start_enigma
Sollte start_enigma gar nicht erst installiert werden?
dwilx

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von dwilx »

Bilde ich mir das nur ein oder bootet die Box jetzt gefühlt um einiges schneller. Wenn das so ist, war das schon mal genial... :wink:
Mourice

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von Mourice »

Hallo,

das wirst Du Dir wohl einbilden. :D

Sie braucht einiges länger zum Booten. Wenigstens bei mir.

Gruss
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von dbt »

rhabarber1848 hat geschrieben: Wenn 06hdd (oder irgendein anderer Name) existiert,
kann dieses Skript die unmount-Befehle durchführen.
:gruebel: Finde ich nicht so gut, wenn kein halt mit rein gebaut wird. Es ist ja im repo drin wird aber vom make nicht übernommen. Gewollt?
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von rhabarber1848 »

dbt hat geschrieben:
rhabarber1848 hat geschrieben:Wenn 06hdd (oder irgendein anderer Name) existiert,
kann dieses Skript die unmount-Befehle durchführen.
:gruebel: Finde ich nicht so gut, wenn kein halt mit rein gebaut wird.
Könntest Du das für mich bitte etwas ausführlicher erklären?
dbt hat geschrieben:Es ist ja im repo drin wird aber vom make nicht übernommen. Gewollt?
"Es" = 06hdd? Diese Datei gibt es nicht im CVS.
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von dbt »

rhabarber1848 hat geschrieben:
dbt hat geschrieben:
rhabarber1848 hat geschrieben:Wenn 06hdd (oder irgendein anderer Name) existiert,
kann dieses Skript die unmount-Befehle durchführen.
:gruebel: Finde ich nicht so gut, wenn kein halt mit rein gebaut wird.
Könntest Du das für mich bitte etwas ausführlicher erklären?
dbt hat geschrieben:Es ist ja im repo drin wird aber vom make nicht übernommen. Gewollt?
"Es" = 06hdd? Diese Datei gibt es nicht im CVS.
06hdd ist klar genau wie 07mounts, die habe ich gerade im Ide-Menü verwurstet und schubse damit die IDE/FS und hdparm-Sachen beim Booten an. Die GUI erzeugt diese Scripte zur Laufzeit beim Abspeichern, das klappt auch, sogar beim Booten wird das richtige genommen, astrein eigentlich, aber darum gings eigentlich weniger.
Mir gings um das halt-Script. Das wird von make nicht mitgebaut bzw. angelegt, also es ist weder in Yadd noch im Image in /etc/init.d zu finden obwohl Links dafür existieren (Khalt, Shalt) und das obwohl es im cdk liegt (Absicht?). Bei Shalt weiß ich nicht ob man das haben muß, auch bei Khalt weiß ich auch nicht so recht. Deshalb meine ich man sollte es nur beim STOP direkt aufrufen und entweder eine eingebaute Standardversion oder /var-Version verwenden können, die evtl. auch benutzerdefiniert erstellt werden kann. Wenn es natürlich besser geht, kein Problem. Habe mich nur gewundert, dass halt fehlt.
Ich hatte das ja schonmal gepostet, mit dem Gedanken dass man es evtl. so ähnlich verwenden könnte:

Code: Alles auswählen

#!/bin/sh

# $Id: halt,v 1.6 2009/11/21 13:35:52 rhabarber1848 Exp $

echo "system shutdown..."

trap "echo" INT SEGV QUIT TERM
set +e

VENDOR_ID=`/bin/tuxinfo -v`
if [ $VENDOR_ID -eq 2 ]; then
	# Philips/Sat
	/bin/switch -rv 3 3 -rv 2 2 -ra 3 2 -v 0 -fnc 0
else
	/bin/switch -fnc 0
	/bin/switch -fblk 0
fi;

#kill rtc if available
if [ -e /var/etc/.rtc ]; then
	/bin/hwrtc systohw
fi;

#kill nfs
if [ -e /var/etc/.nfsd ]; then
	kill `pidof rpc.nfsd`
	kill `pidof rpc.mountd`
	kill `pidof portmap`
fi;

#kill samba
if [ -e /var/etc/.samba ]; then
	kill `pidof smbd`
	kill `pidof nmbd`
fi;


#kill automounter, tuxmail, tuxcal
DEAMONLIST="automount tuxmaild tuxcald"

for d in  $DEAMONLIST ; do
	if pidof $d > /dev/null; then
		killall $d
		i=5
		while expr $i != 0 > /dev/null; do 
			if [ -e /tmp/$d.pid ]; then echo "Waiting for $d (max. $i seconds)"
				else break;
			fi
			i=`expr $i - 1`
			sleep 1 
		done
	fi;		
done	

reverse ()
{
	local _line
	while read -r _line ; do
		reverse
		echo "$_line"
		break
	done
}

sync

# unmounting filesystems
MPATH=/lib/modules/$(uname -r)/kernel/fs
FSLIST=`ls $MPATH`

reverse < /proc/mounts | \
while read des fs type rest; do
	for f in  $FSLIST ; do
		case "$type" in
			$f)	echo "Unmounting '$f' on '$fs'"
				umount -f $fs
			;;
		esac
	done			
done

reverse < /proc/mounts | \
while read des fs type rest; do
	case "$type" in
		jffs2)	echo "Unmounting 'jffs2' on '$fs'"

			UMOUNT_FAILED=false

			umount -f $fs || {
				UMOUNT_FAILED=true
			}

			if [ "$UMOUNT_FAILED" = true ]; then
				echo "Oops: umount failed :-(  --  trying to remount readonly..."
				mount -v -n -o remount,ro $type $fs
			fi;

			sleep 1

		;;
	esac

done

echo "Ready to shutdown system..."
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von rhabarber1848 »

dbt hat geschrieben:Die GUI erzeugt diese Scripte zur Laufzeit beim Abspeichern, das klappt auch, sogar beim Booten wird das richtige genommen
Ich dachte eigentlich an folgendes: Dein Code erstellt 06hdd
und verlinkt nach S06hdd und K06hdd, alles in /var/etc/init.d/

Die Skript haben dann folgende Struktur:

Code: Alles auswählen

#!/bin/sh

case $1 in
        start)
                ;;
        stop)
                ;;
esac

exit 0
und übernehmen somit auch das umount im Stop-Teil.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von rhabarber1848 »

dbt hat geschrieben:#kill nfs
if [ -e /var/etc/.nfsd ]; then
kill `pidof rpc.nfsd`
kill `pidof rpc.mountd`
kill `pidof portmap`
fi;
Das geschieht bereits in 31nfsserver stop
dbt hat geschrieben:#kill samba
if [ -e /var/etc/.samba ]; then
kill `pidof smbd`
kill `pidof nmbd`
fi;
Das geschieht bereits in 31sambaserver stop
dbt hat geschrieben:#kill automounter, tuxmail, tuxcal
DEAMONLIST="automount tuxmaild tuxcald"
Auch das Stoppen dieser Daemons wird im jeweiligen Skript erledigt.
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von dbt »

Ja, das halt-script war ja nur ein Vorschlag, weil ich mich gewundert habe, das darauf gelinkt ist, obwohl keins da ist, aber jetzt dämmerts, :dash: muss mal schauen. Wenn es so ist, braucht man fast nichts ändern. :D :D Das schraubt den Aufwand für die Dateiausgabe etwas höher, aber sollte kein Problem sein.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von rhabarber1848 »

dbt hat geschrieben:Mir gings um das halt-Script. [...] es im cdk liegt (Absicht?).
Das ist ein Überbleibsel und wird noch von mir gelöscht.

Beim Herunterfahren wird nun rcK aufgerufen, dort findet
sich auch der "switch -fnc"-Aufruf aus halt und der Aufruf
aller Initskripts mit dem stop-Parameter.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von rhabarber1848 »

dixidix hat geschrieben:Bilde ich mir das nur ein oder bootet die Box jetzt gefühlt um einiges schneller.
Wenn Du nicht viele Sachen im Image hast, kann es durchaus sein, da
weniger Code beim Start abgearbeitet wird, in rcS war halt alles drin.
Mourice hat geschrieben:Sie braucht einiges länger zum Booten. Wenigstens bei mir.
Auch das kann möglich sein, da der Aufwand um die Init-Skripts herum
etwas mehr geworden ist.

@Euch beide: Ohne belastbare Zahlen ist ein Vergleich allerdings nicht möglich.

Ich habe schon oft von Usern gelesen, dass das jeweils neu Image etwas
schneller geworden ist. Wenn das kumuliert stimmen würde, würde die
66 MHz-CPU der Dbox2 auch für aktuelle Boxen ausreichen ;)
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von dbt »

Die mounts für /var usw. werden generell jetzt direkt ausgeführt oder täusche ich mich? Dann kann das doch eigentlich aus fstab raus?
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von rhabarber1848 »

dbt hat geschrieben:Ich hatte das ja schonmal gepostet, mit dem Gedanken dass man es evtl. so ähnlich verwenden könnte:

Code: Alles auswählen

#kill rtc if available
if [ -e /var/etc/.rtc ]; then
	/bin/hwrtc systohw
fi;
Die RTC-Unterstützung fehlt in der Tat noch in Neutrino und den Startskripts.
JtG-Riker hat mich ebenfalls darauf hingewiesen und mir seinen Patch zur
Verfügung gestellt, der noch auf rcS basiert. Mit den Anpassungen an die
aktuelle Init-Struktur habe ich den Patch committed:
http://article.gmane.org/gmane.comp.vid ... x.scm/1610
http://article.gmane.org/gmane.comp.vid ... x.scm/1611
http://article.gmane.org/gmane.comp.vid ... x.scm/1612
http://article.gmane.org/gmane.comp.vid ... x.scm/1613
http://article.gmane.org/gmane.comp.vid ... x.scm/1614
HorstH
Image-Team
Beiträge: 252
Registriert: Sonntag 23. Mai 2004, 23:10

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von HorstH »

Bei mir wird beim 1. Start nach dem flashen die initialize nicht gestartet, d.h. kein lcdip (Dbox mit E1).

Schreib ich das Startscript für lcdip in die rcS geht es.

CU
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von rhabarber1848 »

HorstH hat geschrieben:Bei mir wird beim 1. Start nach dem flashen die initialize nicht gestartet, d.h. kein lcdip (Dbox mit E1).
In der alten rcS.m4 stand folgendes:

Code: Alles auswählen

ifmarkerfile({initialize},{/etc/init.d/initialize && rm /var/etc/.initialize})
Es bedeutet, wenn /var/etc/.initialize existiert, soll das Skript gestartet
werden, danach wird /var/etc/.initialize gelöscht. Da im CVS nirgendwo
/var/etc/.initialize angelegt wird, habe ich die o.g. Funktion nicht migriert.

Ich habe einen Verweis auf /etc/init.d/initialize nur in lcdmenu gefunden.
Kannst Du mir sagen, wie /var/etc/.initialize ins Image kommt, außer
per customization und zu welchem Zweck?
HorstH
Image-Team
Beiträge: 252
Registriert: Sonntag 23. Mai 2004, 23:10

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von HorstH »

Ok, ich denke mal es liegt daran das ich die Sache aus dem Yadi übernommen habe. Da läuft das nicht über /var/etc/.initialize sondern /etc/network/interfaces.

Wenn interfaces fehlt wird lcdip gestartet.

Code: Alles auswählen

if [ ! -e /etc/network/interfaces ]; then
	  /bin/lcdip
	  ifup -a
fi
somit kannst du nach dem flashen eines Komplettimages beim 1. Start die IP, Subnet, Gateway und Namesserver über das LCD eingeben :wink:
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von rhabarber1848 »

HorstH hat geschrieben:Da läuft das nicht über /var/etc/.initialize sondern /etc/network/interfaces.
http://www.tuxbox-cvs.sourceforge.net/f ... 79#p288279
Barf hat geschrieben:Zweitens habe ich Support für ein Initialisierungsskript implementiert. Falls die Datei /var/etc/.initialize vorhanden ist, wird /etc/init.d/initialize ausgeführt. Was diese Datei enthalten soll, kann mann diskutieren. In meine Version setze ich IP mit Hilfe von carjays lcdip (etwas erweitert).Ist nicht per Default eingeschaltet, der Imagebuilder muss, z.B. in root-local.sh touch $(flashprefix)/var/etc/.initialize machen.
Ich kann den von Barf beschriebenen Weg in cdk/root/etc/init.d/10network einbauen,
um die bisherige Funktionalität aus rcS.m4 nachzustellen. Du müsstest dann diese
Datei patchen, um statt /var/etc/.initialize auf /etc/network/interfaces zu prüfen
oder die von Barf beschriebene customization-Lösung verwenden.

Wäre das so in Ordnung?
HorstH
Image-Team
Beiträge: 252
Registriert: Sonntag 23. Mai 2004, 23:10

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von HorstH »

Ja wäre in Ordnung, Danke!
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von seife »

Eine halbwegs elegante lösung wäre auch ein eigenes "S05initialize"-initskript, das, wenn es erfolgreich war, ein "touch /var/etc/init.d/S05initialize" macht und sich somit selbst deaktiviert.

Evtl. mit anderer Nummer, aber ich denke die Idee wird klar.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von rhabarber1848 »

seife hat geschrieben:Eine halbwegs elegante lösung wäre auch ein eigenes "S05initialize"-initskript, das, wenn es erfolgreich war, ein "touch /var/etc/init.d/S05initialize" macht und sich somit selbst deaktiviert.
ungetestet: EDIT: Patch ist im CVS
HorstH
Image-Team
Beiträge: 252
Registriert: Sonntag 23. Mai 2004, 23:10

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von HorstH »

rhabarber1848 hat geschrieben: ungetestet: lcdip_init.diff
Patch funktioniert wunderbar :up:
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von rhabarber1848 »

Es gibt hier ein prinzipielles Problem. Bis jetzt wurde lcdip beim
Image-Start nie genutzt, es sei denn, per customization wurde
es aktiviert. Wenn der Patch, so wie er jetzt ist, ins CVS kommt,
wird lcdip beim erstmaligen Imagestart immer gestartet, es findet
also eine Veränderung des Imageverhaltens statt, die nicht überall
gut ankommen würde. Mich würde es stören, da hier
/etc/networks/interfaces bereits per Patch korrekt eingestellt ist.

Darüberhinaus ist /bin/lcdip in allen Images enthalten, obwohl es
nur von den wenigsten genutzt wird. Deshalb würde ich vorschlagen,
folgendes zum Patch hinzuzufügen:

Code: Alles auswählen

--- ../cvs/cdk/make/flashroot.mk	2009-12-05 21:14:00.000000000 +0100
+++ ./cdk/make/flashroot.mk	2009-12-13 14:36:42.000000000 +0100
@@ -33,7 +33,6 @@
 	$(MAKE) flash-camd2
 	$(MAKE) flash-ucodes
 	$(MAKE) flash-satfind
-	$(MAKE) flash-lcdip
 	$(MAKE) flash-rtc
 endif
 	$(MAKE) flash-tools_misc
"make flash-lcdip" muss dann in root-local.sh eingetragen werden, wenn es
im Image gewünscht ist. Das Init-Skript sorgt schon jetzt selbst dafür, dass
es nur im Image ist, wenn auch /bin/lcdip vorhanden ist.

/etc/init.d/initialize ist deshalb im Image nicht mehr erforderlich, muss aber
noch aus apps/tuxbox/lcd/lcdmenu/lcdmenu.conf.example entfernt werden.

Ich habe den Patch aktualisiert, bitte testen, ob das so CVS-tauglich ist.
EDIT: Patch ist im CVS
HorstH
Image-Team
Beiträge: 252
Registriert: Sonntag 23. Mai 2004, 23:10

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von HorstH »

Ich würde auf lcdip jetzt nicht allzu großen Wert legen als das es ins CVS müsste. Ausser mir hat es ja keiner vermisst und ich weiß wie ich es einbauen müsste.

Von mir (Rest von Yadi) würde es eh nur noch E1 Images geben, wenn gewünscht, von daher muss nicht allzu viel verbogen werden ;-)

Aber trotzdem danke für eure Mühen!!
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: "modulare" init-skripte anstatt monolithischer rcS

Beitrag von rhabarber1848 »

rhabarber1848 hat geschrieben:"make flash-lcdip" muss dann in root-local.sh eingetragen werden, wenn es im Image gewünscht ist.
HorstH hat geschrieben:ich weiß wie ich es einbauen müsste.
Genauso wird es wohl laufen. Was mich an meinem letzten Patch noch nervt,
ist der Umstand, dass lcdip immer im Yadd landet und dank des Init-Skripts
auch aufgerufen wird, obwohl die Netzwerk-Konfiguration bereits korrekt ist.