TomTomNavigator
Mitglied
- Mitglied seit
- 24 Aug 2007
- Beiträge
- 643
- Punkte für Reaktionen
- 4
- Punkte
- 18
Sehr interessant das Ganze.
Ich selbst blicke jetzt da noch nicht zu hunderprozent durch, wie ich die abgeänderte post_install wieder auf die Fritz!Box bringe.
Was ich bis dato verstanden habe muss ich mir eine spezielle provideradditive.tar bauen in der die angepasste post_install enthalten ist.
provideradditive.tar wird, wie vorangehend beschrieben, bei jedem Start der Box entpackt - man nutzt den busybox tar Bug aus um die post_install nach /var zu schreiben. Dann die Box neustarten und post_install wird beim nächsten Start ausgeführt.
Über die Supportdaten komme ich an die provideradditive.tar. (erstellt mit den auf Github angebotenen YourFritz tffs Tools)
Wüsste nicht wie man das ohne telnet Zugriff anstellt.
Wie bringe ich die provideradditive.tar wieder auf die Box? Bastel ich das in ein TFFS-Image und spiele das über EVA ein? Die Settings der Fritz!Box sind mir ja egal - im Zweifel spiel ich den export wieder ein.
Ahja, das ist die "/var/post_install" aus der 06.62, falls jemand nicht selbst entpacken möchte.
Ich selbst blicke jetzt da noch nicht zu hunderprozent durch, wie ich die abgeänderte post_install wieder auf die Fritz!Box bringe.
Was ich bis dato verstanden habe muss ich mir eine spezielle provideradditive.tar bauen in der die angepasste post_install enthalten ist.
provideradditive.tar wird, wie vorangehend beschrieben, bei jedem Start der Box entpackt - man nutzt den busybox tar Bug aus um die post_install nach /var zu schreiben. Dann die Box neustarten und post_install wird beim nächsten Start ausgeführt.
Über die Supportdaten komme ich an die provideradditive.tar. (erstellt mit den auf Github angebotenen YourFritz tffs Tools)
Wüsste nicht wie man das ohne telnet Zugriff anstellt.
Wie bringe ich die provideradditive.tar wieder auf die Box? Bastel ich das in ein TFFS-Image und spiele das über EVA ein? Die Settings der Fritz!Box sind mir ja egal - im Zweifel spiel ich den export wieder ein.
Ahja, das ist die "/var/post_install" aus der 06.62, falls jemand nicht selbst entpacken möchte.
Code:
## ! /bin/sh
## Skip Startup (on very early reboot-cmd)
if ps | grep -v grep | grep -q 'rc.S'; then
echo "rc.S is running - set 'skip init'"
touch /var/skip_init
fi
## AHA
if ps | grep -v grep | grep -q /usr/bin/aha ; then
/usr/bin/aha -s
fi
## EWETEL
if [ -x /bin/smartmeter ] ; then
/bin/smartmeter stop
fi
## Telefon und was dran hängt
if ps | grep -v grep | grep -q telefon; then
killall telefon
sleep 2
fi
if [ -x /etc/hotplug/usb.pandu -a -d /sys/bus/usb/devices ] ; then
if grep -q 'tffs=/tffs/[1-2]' /proc/cmdline ; then
echo "SDK-System skip stopping USB-Subsystem .."
echo "remount / ro"
mount -o remount,ro /
else
echo "stopping USB-Subsystem .."
/etc/hotplug/usb.pandu stop
echo "USB-Subsystem .. stopped"
fi
fi
## WLAN
if [ -x /etc/init.d/rc.wlan ] ; then
echo "stopping WLAN ..."
/etc/init.d/rc.wlan stop
echo "WLAN ... stopped"
fi
## prohibit writing anything
if ps | grep -v grep | grep -q mediasrv; then
/sbin/stop_mediasrv
sleep 2
fi
## alle verbliebenen mountpoints unmounten (auch Internen Speicher, falls vorhanden)
if [ -d /var/media/ftp ]; then
## wer hat noch die finger drauf?
for i in /proc/[0-9]*/fd ; do if ls -l ${i} | grep -q '/var/media/ftp' ; then j=`echo ${i%*/fd}`; j=`echo ${j##*/}`; echo [$$] WARNING: '/var/media/ftp/*' still used by process ${j}; ps | grep -v grep | grep ${j} ; fi ; done
for i in /proc/[0-9]*/cwd ; do if ls -l ${i} | grep -q '/var/media/ftp' ; then j=`echo ${i%*/cwd}`; j=`echo ${j##*/}`; echo [$$] WARNING: '/var/media/ftp/*' still used by process ${j}; ps | grep -v grep | grep ${j} ; fi ; done
echo "unmounting '/var/media/ftp/*' .."
## rmdir /var/media/ftp/* > /dev/null 2>&1
for MP in /var/media/ftp/*; do
test -d "$MP" || continue
grep " $MP " /proc/mounts > /dev/null 2>&1 || continue
umount "$MP" > /dev/null 2>&1 || echo "unmounting '$MP' failed"
rmdir "$MP"
done
fi
## TAM auf Internem Speicher?
if mount | grep '^/var/dev/nand' | grep -q '/data/tam' ; then
echo "unmounting '/data/tam' .."
umount /data/tam > /dev/null 2>&1
fi
######################################
## NAND
## known candidates using nand (for smartstop)
POST_NAND_ACCESS_STOPLIST="ftpd smbd mediasrv mount.davfs"
post_mtd_nand=`grep nand-filesystem /proc/mtd`
for i in ${post_mtd_nand} ; do
post_mtd_nand=$i
break
done
if [ -n "${post_mtd_nand}" ] && mount | grep -q '^/var/dev/nand'; then
post_mtd_nand=${post_mtd_nand#mtd}
post_mtd_nand=${post_mtd_nand%:*}
INTERNAL_NAME=`echo internalflash.mountpoint | usbcfgctl -s | tr -d '"'`
## post_mountpoint="/var/media/ftp/$INTERNAL_NAME"
post_mountpoint="/var/media/ftp"
if [ -d "${post_mountpoint}" ] ; then
echo "[$$]++ ++ do internalflash 'prepare unmount'... ++ ++" > /dev/console
#########################
## wer hat hier die finger drauf? (known candidates using nand)
post_nand_access_pidlist=""
for pid in `pidof ${POST_NAND_ACCESS_STOPLIST}`; do
if `ls -l /proc/$pid/cwd /proc/$pid/fd | grep "/var/media/ftp" > /dev/null 2>&1` ; then
post_nand_access_pidlist="${post_nand_access_pidlist} ${pid}"
fi
done
if [ -n "${post_nand_access_pidlist}" ] ; then
## smartstop sequence, because we found something
for process in ${POST_NAND_ACCESS_STOPLIST} ; do
case ${process} in
ftpd|smbd)
for pid in `pidof ${process}`; do
for i in ${post_nand_access_pidlist}; do
if [ "${pid}" = "${i}" ] && pidof ${process} ; then
## ftp/samba: prevent re-forked access, then simple kill
echo "[$$][Internal Memory] smartstop: try to disconnect ${process} ${pid}" > /dev/console
test -x /bin/inetdctl && inetdctl disable ${process}
kill ${pid}
fi
done
done
;;
mediasrv)
for pid in `pidof ${process}`; do
for i in ${post_nand_access_pidlist}; do
if [ "${pid}" = "${i}" ] && pidof ${process} ; then
## mediasrv: stop cmd
echo "[$$][Internal Memory] smartstop: try to disconnect ${process} ${pid}" > /dev/console
test -x /sbin/stop_mediasrv && /sbin/stop_mediasrv
sleep 2
fi
done
done
;;
mount.davfs)
for pid in `pidof ${process}`; do
for i in ${post_nand_access_pidlist}; do
if [ "${pid}" = "${i}" ] && pidof ${process} ; then
## webdav: stop cmd (needs no sleep, returns after completion)
echo "[$$][Internal Memory] smartstop: try to disconnect ${process} ${pid}" > /dev/console
test -x /etc/webdav_control && /etc/webdav_control stop
fi
done
done
;;
*)
for pid in `pidof ${process}`; do
for i in ${post_nand_access_pidlist}; do
if [ "${pid}" = "${i}" ] && pidof ${process} ; then
echo "[$$][Internal Memory] smartstop: WARNING: try to disconnect unhandled NAME ${process} PID ${pid}" > /dev/console
kill ${pid}
fi
done
done
;;
esac
done
fi
## wer hat hier IMMERNOCH die finger drauf ('fd' fuer files, 'cwd' fuer verzeichnisse)?
## (handle known & unknown candidates using nand)
post_nand_access_pidlist=""
for i in /proc/[0-9]*/fd ; do if ls -l ${i} | grep -q "${post_mountpoint}" ; then j=`echo ${i%*/fd}`; j=`echo ${j##*/}`; post_nand_access_pidlist="${post_nand_access_pidlist} ${j}"; fi ; done
for i in /proc/[0-9]*/cwd ; do if ls -l ${i} | grep -q "${post_mountpoint}" ; then j=`echo ${i%*/cwd}`; j=`echo ${j##*/}`; post_nand_access_pidlist="${post_nand_access_pidlist} ${j}"; fi ; done
for i in ${post_nand_access_pidlist} ; do echo "[$$] WARNING: ${post_mountpoint} still used by process ${i}"; ps | grep -v grep | grep ${i} ; done > /dev/console
#########################
## Killer
post_killer9_stop_wdt=n
if [ -n "${post_nand_access_pidlist}" ] ; then
post_killer9_stop_wdt=y
fi
for i in ${post_nand_access_pidlist} ; do
## stop watchdog (once)
if [ -c /dev/watchdog ] && [ "${post_killer9_stop_wdt}" = "y" ]; then
echo "[$$][Internal Memory] killer9: disable watchdog"; echo disable > /dev/watchdog
post_killer9_stop_wdt=n
fi
## handle pid
[ -d "/proc/$i" ] && echo "[$$][Internal Memory] killer9: working on PID ${i}" && kill -9 ${i} && sleep 5 > /dev/console
done
## annahme: post_nand_access_state=unused
post_nand_access_state=unused
for i in ${post_nand_access_pidlist} ; do
[ -d "/proc/$i" ] && echo "[$$][Internal Memory] ERROR: killer9: failed on PID ${i} - ${post_mountpoint} still used by process ${i}" && ps | grep -v grep | grep ${i} > /dev/console
post_nand_access_state=busy
done
## fertig
echo "[$$]++ ++ ...done ++ ++" > /dev/console
fi
fi
######################################
######################################
## Internen Speicher unmounten, falls doch nochwas vorhanden
if mount | grep -q '^/var/dev/nand' ; then
echo "unmounting '/var/dev/nand' .."
## umount /var/dev/nand > /dev/null 2>&1
umount /var/dev/nand
fi
######################################
## TAM auf Internem Speicher? (ramdisk16)
if mount | grep '^/var/16MB' | grep -q '/data/tam' ; then
echo "unmounting '/data/tam' .."
umount /data/tam > /dev/null 2>&1
fi
## Internen Speicher unmounten, falls doch nochwas vorhanden
if mount | grep -q '^/var/16MB' ; then
echo "unmounting '/var/16MB' .."
umount /var/16MB > /dev/null 2>&1
fi
## TAM auf Internem Speicher? (ramdisk8)
if mount | grep '^/var/8MB' | grep -q '/data/tam' ; then
echo "unmounting '/data/tam' .."
umount /data/tam > /dev/null 2>&1
fi
## Internen Speicher unmounten, falls doch nochwas vorhanden
if mount | grep -q '^/var/8MB' ; then
echo "unmounting '/var/8MB' .."
umount /var/8MB > /dev/null 2>&1
fi
## TAM auf Internem Speicher? (ramdisk4)
if mount | grep '^/var/4MB' | grep -q '/data/tam' ; then
echo "unmounting '/data/tam' .."
umount /data/tam > /dev/null 2>&1
fi
## Internen Speicher unmounten, falls doch nochwas vorhanden
if mount | grep -q '^/var/4MB' ; then
echo "unmounting '/var/4MB' .."
umount /var/4MB > /dev/null 2>&1
fi
## TAM auf Internem Speicher? (ramdisk2)
if mount | grep '^/var/2MB' | grep -q '/data/tam' ; then
echo "unmounting '/data/tam' .."
umount /data/tam > /dev/null 2>&1
fi
## Internen Speicher unmounten, falls doch nochwas vorhanden
if mount | grep -q '^/var/2MB' ; then
echo "unmounting '/var/2MB' .."
umount /var/2MB > /dev/null 2>&1
fi
######################################
rm -f /var/InternerSpeicher
if [ -x /etc/init.d/e40-dsl ] ; then
echo "unload dsl and dependend driver .."
/etc/init.d/e40-dsl
fi
set -x
## prohibit further access
if ps | grep -v grep | grep -q dtrace; then killall dtrace ; fi
ps
echo "stopping applications using ubik2/pcmlink .."
if ps | grep -v grep | grep -q capiotcp_server ; then killall capiotcp_server ; fi
if ps | grep -v grep | grep -q telefon ; then killall telefon ; fi
if ps | grep -v grep | grep -q dect_manager ; then killall dect_manager ; fi
if ps | grep -v grep | grep -q voipd ; then voipd -s ; fi
sleep 2
if ps | grep -v grep | grep -q voipd ; then killall -9 voipd ; fi
## unload if still running
lsmod
echo "stopping modules using ubik2/pcmlink .."
if lsmod | grep -q ulpcmlink ; then rmmod ulpcmlink ; fi
if lsmod | grep -q dect_io ; then rmmod dect_io ; fi
if lsmod | grep -q avm_dect ; then rmmod avm_dect ; fi
if lsmod | grep -q capi_codec ; then rmmod capi_codec ; fi
if lsmod | grep -q isdn_fbox_fon5 ; then rmmod isdn_fbox_fon5 ; sleep 2; fi
if lsmod | grep -q pcmlink ; then rmmod pcmlink ; fi
set +x
echo "still running:"
ps
lsmod
echo "system is going down .."
echo "disable watchdog ..."
echo disable > /dev/watchdog
echo "reinit watchdog 20 sek ..."
echo init-start 20 >/dev/watchdog
if grep -q 'tffs=/tffs/[1-2]' /proc/cmdline ; then
sync
echo "SDK-System: stopping USB-Subsystem .."
/etc/hotplug/usb.pandu stop
echo "SDK-System: USB-Subsystem .. stopped"
fi
## UBIK2 Nutzer freigeben
## if lsmod | grep -q ubik2 ; then
## echo "stopping applications using ubik2 .."
## if ps | grep -v grep | grep -q capiotcp_server ; then killall capiotcp_server ; fi
## if ps | grep -v grep | grep -q telefon ; then killall telefon ; fi
## if ps | grep -v grep | grep -q voipd ; then voipd -s ; fi
## sleep 2
## if ps | grep -v grep | grep -q voipd ; then killall voipd ; fi
## sleep 3
## if lsmod | grep -q isdn_fbox ; then rmmod isdn_fbox ; fi
## sleep 3
## if lsmod | grep -q ubik2 ; then rmmod ubik2 ; fi
## fi
## return 0