# Root rebootet nur mit Hardware-reboot und init scripte

## Headshot XXL

Hallo,

habe derzeit 2 Probleme mit Gentoo 2008 32Bit auf meinem Root.

Wenn ich Gentoo per "# reboot" oder "# shutdown -r now" rebooten will bleibt er danach erstmal Timeout. Erst wenn ich den Root per Harware-reset reboote, bootet er ganz normal. Ich weis nicht warum der Root nach dem reboot nicht mehr hochfährt.

Edit:// Einen Fehlerhaften Kernel kann ich ausschließen, da es mit dem Standardkernel auch nicht funktioniert. Ich denke es liegt am System , bzw. an den scripten. 

Wenn ich den Inhalt von /sbin/halt, /sbin/shutdown mit dem Texteditor anschaue sehe ich nur  *Quote:*   

> ELF

 

Edit2:// Habe das Gefühl dass anstatt ein reboot ein shutdown durchgeführt wird. Aber ich hab keine Ahnung wo ich nachschauen könnte.

Dann 2. Problem:

Ein Init script das einen CS Server nach dem booten starten soll, wird nicht ausgeführt, gestartet oder was auch immer.

Das script "cs-1" liegt in "/etc/init.d/", ein symbolischer link zu dem script ist in "/etc/runlevels/default" gesetzt.

"# rc-update show" zeigt mir folgendes:

```
rc-update show

             netmount |           default

               procfs |                   boot

           vixie-cron |           default

                 swap |                   boot

                 root |                   boot

            savecache |                                       shutdown

                 fsck |                   boot

                local | nonetwork default

                 mtab |                   boot

             bootmisc |                   boot

                 cs-6 |           default

             mount-ro |                                       shutdown

              modules |                   boot

              hwclock |                   boot

                devfs |                               sysinit

                dmesg |                               sysinit

                 cs-5 |           default

                 cs-1 |           default

            killprocs |                                       shutdown

          consolefont |                   boot

              urandom |                   boot

           localmount |                   boot

                css-1 |           default

               net.lo |                   boot

              keymaps |                   boot

         termencoding |                   boot

                 udev |                               sysinit

                 sshd |           default

             hostname |                   boot

               sysctl |
```

Der code vom script: http://planet-flash.de/Server/cs-1Last edited by Headshot XXL on Mon Mar 16, 2009 6:26 pm; edited 2 times in total

----------

## R.Aven

 *Headshot XXL wrote:*   

> 
> 
> Der code vom script: http://rafb.net/p/yoYLEs26.html

 

Was sagt denn ein "/etc/init.d/cs-1 status"?

----------

## Headshot XXL

```
# /etc/init.d/cs-1 status

* status: stopped
```

Das script lässt sich per hand starten, nur eben nicht nach dem booten.

----------

## R.Aven

 *Headshot XXL wrote:*   

> 
> 
> ```
> # /etc/init.d/cs-1 status
> 
> ...

 

Das mit dem Symlink auf /etc/init.d/ Skripte ist auch nicht der korrekte Weg Init-Skripte beim Wechsel in einen anderen Runlevel zu starten. Entferne den Symlink mal und führe ein

```
rc-update add cs-1 default
```

aus.

Und findet sich irgend ein Fehler beim Starten des Skripts in /var/log/rc.log?

----------

## Headshot XXL

Symlink gelöscht und per #rc-update add cs-1 default geaddet.

Script startet immer noch nicht nach boot.

/var/log/rc.log

Achja reboot funktioniert immer noch nicht, nach #emerge -eD -j3 --keep-going system && emerge -eD -j3 --keep-going world wird nicht mehr rebootet, nur ein Hardware reset hilft.

----------

## R.Aven

 *Headshot XXL wrote:*   

> Symlink gelöscht und per #rc-update add cs-1 default geaddet.
> 
> Script startet immer noch nicht nach boot.
> 
> /var/log/rc.log
> ...

 

Du solltest dir auf jeden Fall zu aller erst die /etc/sysctl.conf ändern - wie du dem Log entnehmen kannst wird sysctl nicht korrekt gestartet.

Und wie schaut es aus, wenn du an die Stelle von /bin/sh am Beginn des cs-1 Scripts ein

"#!/sbin/runscript" schreibst? Wie in allen anderen Init-Skripten. Vielleicht ist das schon die Lösung des Problems - runscript.sh bietet das "Framework" der Init-Skripte.

----------

## Headshot XXL

Thx erstmal für deine Hilfe, es waren veraltete Config Files in /etc, rebooten klappt jetzt.

Allerdings wird das script nach dem booten immernoch nicht gestartet. #! /bin/sh wurde durch #!/sbin/runscript ersetzt.

Log vom letzten reboot:

```
rc shutdown logging started at Wed Mar 18 17:33:42 2009

* Stopping local...

 [ ok ]

* Stopping vixie-cron...

 [ ok ]

* Saving random seed...

 [ ok ]

* Deactivating swap devices...

 [ ok ]

* Stopping sshd...

 [ ok ]

* Unmounting network filesystems...

 [ ok ]

* Bringing down interface eth0

*   Removing addresses

*     84.38.74.224/32

* Bringing down interface lo

*   Removing addresses

* Unmounting loopback devices

* Unmounting filesystems

*   Unmounting /var...

 [ ok ]

* Stopping udevd...

 [ ok ]

rc shutdown logging stopped at Wed Mar 18 17:33:44 2009

rc boot logging started at Wed Mar 18 17:34:21 2009

* Setting system clock using the hardware clock [UTC]...

 [ ok ]

* Autoloaded 0 module(s)

* Checking local filesystems ...

/dev/sda2: clean, 344104/38191104 files, 3908991/76352928 blocks

/dev/sda3: clean, 29884/632736 files, 97016/1263110 blocks

 [ ok ]

* Remounting root filesystem read/write...

 [ ok ]

* Updating /etc/mtab...

 [ ok ]

* Mounting local filesystems...

 [ ok ]

* Setting hostname to localhost...

 [ ok ]

* Configuring kernel parameters...

 [ ok ]

* Creating user login records...

 [ ok ]

* Cleaning /var/run...

 [ ok ]

* Wiping /tmp directory...

 [ ok ]

* Setting terminal encoding [UTF-8]...

 [ ok ]

* Setting console font [default8x16]...

 [ ok ]

* Loading key mappings [us]...

 [ ok ]

* Setting keyboard mode [UTF-8]...

 [ ok ]

* Bringing up interface lo

*   127.0.0.1/8...

 [ ok ]

*   Adding routes

*     127.0.0.0/8 via 127.0.0.1...

 [ ok ]

*   Running postup...

SIOCADDRT: Network is down

SIOCADDRT: No such process

* Bringing up interface eth0

*   84.38.74.224...

 [ ok ]

*   Running postup...

* Mounting USB device filesystem [usbfs]...

 [ ok ]

* Activating swap devices...

 [ ok ]

* Initializing random number generator...

 [ ok ]

rc boot logging stopped at Wed Mar 18 17:34:24 2009

rc default logging started at Wed Mar 18 17:34:24 2009

* Mounting network filesystems...

 [ ok ]

* Starting sshd...

 [ ok ]

* Starting vixie-cron...

 [ ok ]

* Starting local...

 [ ok ]

rc default logging stopped at Wed Mar 18 17:34:24 2009

```

----------

## mv

Dein Script ist kein Gentoo Runlevel Script: Wenn es ein solches sein sollte, sollte es nichts ausführen, sondern nur Funktionen wie depend(), start(), stop() usw. definieren, die dann beim Booten entsprechend von /sbin/runscript aufgerufen werden - schau Dir mal andere Scripte in /etc/init.d an (und am besten such mal im Handbuch oder Developer-Dokumentation wie solche Skripte ausshen müssen).

(Übrigens: Das Rumgehacke mit "ps aux |grep ..." ja entsetzlich - dafür gibt es pgrep/pkill, aber auch das ist nicht so zuverlässig: Schau Dir doch mal "man start-stop-daemon" an: Dieses speichert die PID in einem File [üblicherweise nimmt man dazu /var/run/xxx.pid] und killt damit zuverlässig den richtigen Prozess).

Das Sauberste wäre, wenn Du ein korrektes Gentoo-Runlevel-Skript (unter Benutzung von start-stop-daemon) in /etc/init.d/xxx schreibst und die Variablen (User, Pfade, usw.) in /etc/conf.d/xxx setzt - dann kannst Du diese auch später einfach ändern, ohne das Skript selbst anfassen zu müssen.

Wenn Du aber nicht lernen willst, wie die Gentoo-Runlevel-Skripte funktionieren, kannst Du den Server auch einfach in /etc/conf.d/local.start (was ein Shell-Script sein soll) starten: Um das "killen" musst Du Dich nicht kümmern, weil vor dem Herunterfahren ohnehin alle Prozesse gekillt werden. Das hat halt den Nachteil, dass Du Dich auf das Herunterfahren verlassen musst und nicht händisch "nur" den Server abschießen kannst (außer Du machst es ganz manuell oder mit einem unabhängigen Skript).

Noch 'ne Anmerkung: Für init-Skripte und #! /bin/sh-Skripte sollte man POSIX benutzen - also nicht die [[ ... ]]-Bashismen sondern das kompatible [ ... ].

Edit: Ein schönes Beispiel für ein Skript für Dich ist vermutlich /etc/init.d/acpid und ev. auch /etc/init.d/sshd (und die Konfigurationen /etc/conf.d/acpid und /etc/conf.d/sshd).

Noch'ne Edit: start-stop-daemon hat auch gleich Optionen eingebaut, Benutzer und Nicelevel zu wechseln, so dass Du nicht mit "su" und "nice" herumwürgen musst.

----------

