[Patch] Remove userman für 3170

linuxkasten

Aktives Mitglied
Mitglied seit
2 Feb 2009
Beiträge
891
Punkte für Reaktionen
0
Punkte
16
Da bei der 3170 mit "Replace Kernel" das Problem besteht, dass sie bei deaktivierter Kindersicherung Dauerreboots hinlegt, ist ja seit längerem der Patch zum Entfernen der Kindersicherung für die 3170 mit aktiviertem "Replace Kernel" nicht mehr auswählbar. Ich habe aber herausgefunden, dass zum Vermeiden der Reboots lediglich das Modul "userman_mod.ko" während einer Internetverbindung geladen sein muss, den Dämon und das andere Zeugs braucht man nicht. Deswegen habe ich einen Patch geschrieben, der bei aktiviertem "Replace Kernel" und Auswahl der 3170
- soviel KiSi-Zeug wie möglich entfernt (das Kernel-Modul gehört nicht dazu).
- das Modul während des Systemstarts (nach Laden von kdsldmod.ko) läd. So kann man die Kindersicherung auch im WebIF deaktivierten; da jedoch das Modul trotzdem geladen wird, finden keine Dauerreboots statt.

Wichtig: Ich habe meinen Patch noch nicht getestet! Ich lade ihn lediglich hoch, damit ihn die Devs mal durchschauen können und mich z.B. auf strukturelle Probleme hinweisen (z.B. ist mir nicht ganz klar, wie ich die Zahlen in den Patch-Dateinamen korrekt vergebe.).
Bei Gelegenheit könnte ich ihn noch so abändern, dass bei aktiviertem "Remove dsld" wieder der normale userman-Patch verwendet wird, da AFAIK die Reboots nur im Zusammenspiel mit dsld stattfinden.

Werde Ihn bald auf meiner 3170 testen, und falls er funktioniert, wäre es cool ihn baldöglichst einzuchecken, da sich von Zeit zu Zeit immer wieder 3170-User mit dem KiSi-Reboot-Problem im Forum blicken lassen.

Anwendung: Im Freetz-Hauptverzeichnis
Code:
patch -p0 < userman.patch

Da ich das neue Hochlade-System nicht kapiere, hier der Patch ;)
Code:
Index: patches/3170/200-rc.S-load_userman_mod.sh
===================================================================
--- patches/3170/200-rc.S-load_userman_mod.sh	(Revision 0)
+++ patches/3170/200-rc.S-load_userman_mod.sh	(Revision 0)
@@ -0,0 +1,6 @@
+[ "$FREETZ_REPLACE_KERNEL" == "y" ] || return 0
+echo1 "patching /etc/init.d/rc.S"
+modsed "s/^modprobe kdsldmod\n\/etc\/init\.d\/rc\.net/modprobe kdsldmod\
+modprobe userman\
+\/etc\/init\.d\/rc\.net\/g" "${FILESYSTEM_MOD_DIR}/etc/init.d/rc.S}"
+
Index: patches/3170/315-remove_userman.sh
===================================================================
--- patches/3170/315-remove_userman.sh	(Revision 0)
+++ patches/3170/315-remove_userman.sh	(Revision 0)
@@ -0,0 +1,15 @@
+[ "$FREETZ_REMOVE_USERMAN_3170" == "y" ] || return 0
+echo1 "removing userman files"
+rm_files ${FILESYSTEM_MOD_DIR}/bin/userman* \
+	 $(find ${HTML_LANG_MOD_DIR} -name 'userlist*' -o -name 'useradd*')
+for j in userlist useradd; do
+	for i in $(find "${HTML_LANG_MOD_DIR}" -type f -name '*.html' | xargs grep -l $j); do
+		modsed "/$j/d" $i
+	done
+done
+if [ -e "$FILESYSTEM_MOD_DIR/etc/init.d/rc.init" ]; then
+	modsed "s/KIDS=y/KIDS=n/g" "$FILESYSTEM_MOD_DIR/etc/init.d/rc.init"
+else
+	modsed "s/CONFIG_KIDS=.*$/CONFIG_KIDS=\"n\"/g" "$FILESYSTEM_MOD_DIR/etc/init.d/rc.conf"
+fi
+
Index: Config.in
===================================================================
--- Config.in	(Revision 6858)
+++ Config.in	(Arbeitskopie)
@@ -1882,6 +1882,15 @@
 	help
 		Remove userman files (Kindersicherung)
 
+config FREETZ_REMOVE_USERMAN_3170
+	bool "Remove usermand - EXPERIMENTAL"
+	depends on \
+		(FREETZ_REPLACE_KERNEL && FREETZ_TYPE_WLAN_3170)
+	default n
+	help
+		Remove userman files (Kindersicherung), except for userman_mod.ko 
+		(without userman_mod.ko, the 3170-Firmware wont work)
+
 config FREETZ_REMOVE_VOIPD
 	bool "Remove VoIP files (for non-telephony boxes)"
 	depends on \
 
Ich würde sowas in der Art vorschlagen:
Code:
--- Config.in   (Revision 6857)
+++ Config.in   (Arbeitskopie)
@@ -1910,8 +1910,7 @@
 config FREETZ_REMOVE_USERMAN
        bool "Remove usermand and userman.ko - EXPERIMENTAL"
        depends on \
-               ! (FREETZ_REPLACE_KERNEL && FREETZ_TYPE_WLAN_3170) \
-               && ! FREETZ_TYPE_FON_5140 \
+               ! FREETZ_TYPE_FON_5140 \
                && ! FREETZ_TYPE_FON_WLAN_7112 \
                && ! FREETZ_TYPE_FON_WLAN_7113 \
                && ! FREETZ_TYPE_SPEEDPORT_W501V
Index: patches/310-remove_userman.sh
===================================================================
--- patches/310-remove_userman.sh       (Revision 6857)
+++ patches/310-remove_userman.sh       (Arbeitskopie)
@@ -1,8 +1,13 @@
 [ "$FREETZ_REMOVE_USERMAN" == "y" ] || return 0
 echo1 "removing userman files"
 rm_files ${FILESYSTEM_MOD_DIR}/bin/userman* \
-        $(find ${FILESYSTEM_MOD_DIR}/lib/modules -name userman) \
         $(find ${HTML_LANG_MOD_DIR} -name 'userlist*' -o -name 'useradd*')
+
+# Prevent continous reboots on 3170 with replace kernel
+if ! ( isFreetzType 3170 && [ "$FREETZ_REPLACE_KERNEL" = "y" ] ); then
+       rm_files $(find ${FILESYSTEM_MOD_DIR}/lib/modules -name userman)
+fi
+
 for j in userlist useradd; do
        for i in $(find "${HTML_LANG_MOD_DIR}" -type f -name '*.html' | xargs grep -l $j); do
                modsed "/$j/d" $i

Wie wird das userman_mod Modul normal geladen? Ich konnte in den Skripten keinen Hinweis dazu finden.

Gruß
Oliver

edit: Scheinbar vom ctlmgr. Wahrscheinlich nur für den Fall CONFIG_KIDS=y?
 
Stimmt, Deine Lösung ist nicht so umständlich wie meine. Da kann man dann gleich den Fall für "remove dsld" behandeln:
Code:
--- Config.in   (Revision 6857)
+++ Config.in   (Arbeitskopie)
@@ -1910,8 +1910,7 @@
 config FREETZ_REMOVE_USERMAN
        bool "Remove usermand and userman.ko - EXPERIMENTAL"
        depends on \
-               ! (FREETZ_REPLACE_KERNEL && FREETZ_TYPE_WLAN_3170) \
-               && ! FREETZ_TYPE_FON_5140 \
+               ! FREETZ_TYPE_FON_5140 \
                && ! FREETZ_TYPE_FON_WLAN_7112 \
                && ! FREETZ_TYPE_FON_WLAN_7113 \
                && ! FREETZ_TYPE_SPEEDPORT_W501V
Index: patches/310-remove_userman.sh
===================================================================
--- patches/310-remove_userman.sh       (Revision 6857)
+++ patches/310-remove_userman.sh       (Arbeitskopie)
@@ -1,8 +1,13 @@
 [ "$FREETZ_REMOVE_USERMAN" == "y" ] || return 0
 echo1 "removing userman files"
 rm_files ${FILESYSTEM_MOD_DIR}/bin/userman* \
-        $(find ${FILESYSTEM_MOD_DIR}/lib/modules -name userman) \
         $(find ${HTML_LANG_MOD_DIR} -name 'userlist*' -o -name 'useradd*')
+
+# Prevent continous reboots on 3170 with replace kernel
[COLOR="red"]+if [ "$FREETZ_REMOVE_DSLD" = "y" ] || ! ( isFreetzType 3170 && [ "$FREETZ_REPLACE_KERNEL" = "y" ] ); then[/COLOR]
+       rm_files $(find ${FILESYSTEM_MOD_DIR}/lib/modules -name userman)
+fi
+
 for j in userlist useradd; do
        for i in $(find "${HTML_LANG_MOD_DIR}" -type f -name '*.html' | xargs grep -l $j); do
                modsed "/$j/d" $i

Ich hab das ganze Filesystem gegrept, und konnte nirgends, außer in ctlmgr das "modprobe userman" finden (für modprobe übrigens irrelevant, ob das Modul userman oder userman_mod genannt wird).
 
Ist der angehängte Patch okay und beinhaltet alles nötige?

Gruß
Oliver
 

Anhänge

  • userman_3170.patch.txt
    1.4 KB · Aufrufe: 4
Ja, das passt. Jetzt muss ich Ihn allerdings erstmal testen ;)
 
Hattest du inzwischen Zeit den Patch zu testen?

Gruß
Oliver
 
Nein, sorry... steht auf meiner ToDo-List für diese Woche ;)

EDIT: hat doch etwas länger gedauert ;)
 
Zuletzt bearbeitet:
Habe den Patch soeben auf den neuen Trunk angepasst (Anhang anzeigen userman_3170.patch.txt) und ausprobiert... Leider scheint der ctlmgr jetz nicht mehr zu funktionieren. Man kann also nicht mehr auf das AVM-WebIF zugreifen :(
Der Rest funktioniert (Internet usw.)

Habe außerdem festgestellt, dass ein "rmmod userman" das ganze Modul-Interface lahmlegt, d.h. der Prozess beendet sich nicht und man kann auch kein "lsmod", "modprobe" o.Ä. ausführen; versucht man es trotzdem, legt man die Session lahm und muss sich in einer neuen Telnet-Sitzung einloggen. Diese Befehle funktionieren erst nach einem Reboot wieder.
Deswegen funktioniert ein FW-Update durch die Freetz-Oberfläche nicht, sofern man (auch nur einen Teil der) Dienste dabei stoppen lässt.

Irgendwie passt userman_mod.ko mal gar nicht zum Kernel...
 
Ich hab den Patch jetzt mal eingecheckt, sonst gerät er in Vergessenheit. Wenn du neue Erkenntnisse hast, dann meld dich.

Gruß
Oliver
 
Okay, danke.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.