View Full Version : busybox aggiungere comandi al boot
lbottoni
13-04-2010, 16:58
Ciao a tutti,
ho fatto un'accesso a un piccolo lettore multimediale in telnet e vedo che è stato messo un busybox, io non ne capisco molto, ma volevo chiedere se qualcuno sa dirmi come posso inserire un comando che venga eseguito direttamente al momento del boot...nel senso che per avviare un client ftp devo farlo manualmente, invece vorrei che lo start avvenisse in automatico...qualcuno sa aiutarmi?
damiano77
14-04-2010, 11:57
Ma c'è un sistema linux sul lettore?
Prova a cercare qualcosa tipo /etc/rc.local o /etc/conf.d/local e ci metti il comando... come editor puoi usare vi ci sarà di sicuro
è il metodo più veloce che conosca su linux
lbottoni
14-04-2010, 12:03
no c'è però la shell busybox (linux based)...ma non capisco da dove posso metter eil comando mio per avviare quello che voglio al boot..
damiano77
14-04-2010, 12:11
Un kernel ci sarà pure, se c'è una busybox dovrà essere uno unix...
guarda cosa c'è in /etc a priori io non lo so...
lbottoni
14-04-2010, 12:18
contenuto etc
drwxrwxrwx 1 root root 2048 Sep 21 2009 .
drwxr-xr-x 1 root root 2048 Jan 19 2010 ..
lrwxrwxrwx 1 root root 27 Jan 19 2010 dctcs.conf -> ../usr/local/etc/dctcs.conf
drwxrwxrwx 1 root root 2048 Sep 1 2009 dvdplayer
-rwxrwxrwx 1 root root 342 Sep 1 2009 fstab
lrwxrwxrwx 1 root root 22 Jan 19 2010 group -> ../usr/local/etc/group
-rwxrwxrwx 1 root root 6 Sep 1 2009 hostname
-rwxrwxrwx 1 root root 20 Sep 1 2009 hosts
-rwxrwxrwx 1 root root 385 Sep 1 2009 httpd.conf
-rwxrwxrwx 1 root root 460 Sep 1 2009 inetd.conf
drwxrwxrwx 1 root root 2048 Sep 1 2009 init.d
lrwxrwxrwx 1 root root 28 Jan 19 2010 ld.so.cache -> ../usr/local/etc/ld.so.cache
lrwxrwxrwx 1 root root 27 Jan 19 2010 ld.so.conf -> ../usr/local/etc/ld.so.conf
lrwxrwxrwx 1 root root 14 Jan 19 2010 mtab -> ../proc/mounts
lrwxrwxrwx 1 root root 23 Jan 19 2010 passwd -> ../usr/local/etc/passwd
lrwxrwxrwx 1 root root 24 Jan 19 2010 passwd- -> ../usr/local/etc/passwd-
-rwxrwxrwx 1 root root 80 Sep 1 2009 ppscdn_config.ini
lrwxrwxrwx 1 root root 24 Jan 19 2010 profile -> ../usr/local/etc/profile
drwxrwxrwx 1 root root 2048 Sep 1 2009 reexec_init
lrwxrwxrwx 1 root root 26 Jan 19 2010 resolv.conf -> /usr/local/etc/resolv.conf
-rwxrwxrwx 1 root root 20373 Sep 1 2009 services
-rwxrwxrwx 1 root root 7 Sep 1 2009 system_svn_version
-rwxrwxrwx 1 root root 1893 Sep 1 2009 udhcpc.script
ls -la /etc/reexec_init/
drwxrwxrwx 1 root root 2048 Sep 1 2009 .
drwxrwxrwx 1 root root 2048 Sep 21 2009 ..
-rwxrwxrwx 1 root root 523 Sep 1 2009 fstab
-rwxrwxrwx 1 root root 1620 Sep 1 2009 init.script
-rwxrwxrwx 1 root root 123 Sep 1 2009 lock_usbdisk
-rwxrwxrwx 1 root root 270 Sep 1 2009 rcS
ls -la /etc/init.d/
drwxrwxrwx 1 root root 2048 Sep 1 2009 .
drwxrwxrwx 1 root root 2048 Sep 21 2009 ..
-rwxrwxrwx 1 root root 227 Sep 1 2009 S50inetd
-rwxrwxrwx 1 root root 1752 Sep 1 2009 mount.rcS
-rwxrwxrwx 1 root root 76 Sep 1 2009 rcS
-rwxrwxrwx 1 root root 1816 Sep 1 2009 rcS1
-rwxrwxrwx 1 root root 2821 Sep 1 2009 syslog.rcS
dentro init.d ho 2 file che potrebbero essere quello che si cerca ma sono in sola lettura!
init.script
#!/bin/sh
# This script is used to do some things before changing root to ram. It will try to
# move mount points of usbdisk to new root, and then execute "loader_a" to install
# firmware that resides in some usbdisk or on the internet.
#
# Use "kill -6 1" to trigger busybox to execute this script and then execute new init
# in ram.
# Ramfs can use more memory
echo 1 > /sys/realtek_boards/update
# If we echo lock_usbdisk script to /tmp, it cannot work. This is pretty strange.
#echo -e "#!/bin/sh\n\nwhile [ -f /tmp/usbdisk_lock ]; do\n\ttrue;\ndone\n\n" > /tmp/lock_usbdisk
#chmod a+x /tmp/lock_usbdisk
cp /etc/reexec_init/lock_usbdisk /tmp/
touch /tmp/usbdisk_lock
#swapoff /mnt/rd/swap.img
# Keep usbdisk mounts
for Dir in `ls /mnt/usbmounts/`; do
cd /mnt/usbmounts/$Dir; /tmp/lock_usbdisk&
done
cd /mnt/rd; /tmp/lock_usbdisk&
cd /tmp; umount -a; rm /tmp/usbdisk_lock; cd /
mount -t ramfs ramfs /mnt/hda
cd /mnt/hda; cp -a /lib /bin /sbin /etc .
mkdir -p /mnt/hda/usr/local; cd /mnt/hda/usr; cp -a /usr/bin /usr/sbin .; cd /mnt/hda/usr/local/; cp -a /usr/local/sbin .
rm -rf /mnt/hda/lib/modules
cd /mnt/hda; cp /etc/reexec_init/rcS etc/init.d/; cp /etc/reexec_init/fstab etc/
mkdir -p /mnt/hda/tmp /mnt/hda/proc /mnt/hda/sys
mkdir -p /mnt/hda/mnt/old /mnt/hda/mnt/rd
cp /tmp/installing_source /mnt/hda/tmp/
# Move usbdisk mounts
for Dir in `ls /mnt/usbmounts/`; do
mkdir -p /mnt/hda/mnt/usbmounts/$Dir
mount --move /mnt/usbmounts/$Dir /mnt/hda/mnt/usbmounts/$Dir
done
mv /tmp/* /mnt/hda/tmp
mount --move /mnt/rd /mnt/hda/mnt/rd
pivot_root /mnt/hda /mnt/hda/mnt/old
mkdir dev; mount -t devfs devfs dev
rcS
#!/bin/sh
umount /mnt/old/dev # It seems that dev may not be unloaded successfully.
umount /mnt/old/tmp /mnt/old
mount -a
read FIRM_URL < /tmp/installing_source
if [ "$FIRM_URL" != "" ]; then
loader_a -t $FIRM_URL
else
loader_a
fi
echo "Welcome to Realtek Linux"
idee?:cry:
damiano77
14-04-2010, 12:42
Bravo hai individuato gli scritpt. Io direi di aggiiungere i comandi alla fine del secondo.
Il fatto che sia in sola lettura non dovrebbe essere un problema, hai accesso come root, no?
cambiagli i permessi con chmod +w
lbottoni
15-04-2010, 16:32
ho guardato un pò gli script e alla fine non è possibile farlo...nella rom del player c'è il file sistem che ad ogni avvio viene copiato e montato su una piccola memoria...se esiste il tutto viene cancellato...ad esclusione della /usr/local/etc, la quale contiene (correttamente i file di configurazione dei servizi gestibili)
il ragionamento è corretto...per evitare modifiche che possano compromettere il lettore...te le impediscono!:cry:
damiano77
15-04-2010, 17:42
Sei sicuro che sia una rom? Hai provato a rimontarla in scrittura?
lbottoni
19-04-2010, 09:21
in che modo?
damiano77
20-04-2010, 14:32
# mount -o rw,remount <device> <punto di mount>
per device e punto di mount guarda in /etc/fstab
lbottoni
20-04-2010, 15:38
ok, fatto...
mount -o rw,remount /dev/root /
e viene montato in rw, però..qui la fregatura...se faccio un df -k
/ # df -k
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/root 127232 127232 0 100% /
/dev/mtdblock/2 32768 1336 31432 4% /usr/local/etc
/dev/rd/0 40 40 0 100% /mnt/rd
/dev/scsi/host2/bus0/target0/lun0/part1 976756704 298132088 678624616 31% /tmp/usbmounts/sda1
ho provato a scrivere il fil /etc/init.d/S50inetd ma poi perdo il contenuto salvandolo.
eseguendo un reboot lo ritrovo con il suo contenuto (avvia il demone del network).
ora guarda
/ # ls -l /etc/init.d/
-rwxrwxrwx 1 root root 227 Sep 1 2009 S50inetd
-rwxr-xr-x 1 root root 0 May 14 16:43 S99lbottoni.sh
-rwxrwxrwx 1 root root 1752 Sep 1 2009 mount.rcS
-rwxrwxrwx 1 root root 76 Sep 1 2009 rcS
-rwxrwxrwx 1 root root 1816 Sep 1 2009 rcS1
-rwxrwxrwx 1 root root 2821 Sep 1 2009 syslog.rcS
se scrivo nel file di prima (S50inetd) il suo spazio occupato diventa da 227 a 0, ma se noti nel list esiste (dopo un reboot) il file S99lbottoni.sh creato da me (con un vi) dopo aver montato in rw e eseguito il reboot.
non mi pemette modifiche reali :cry:
damiano77
21-04-2010, 12:10
ho guardato un pò gli script e alla fine non è possibile farlo...nella rom del player c'è il file sistem che ad ogni avvio viene copiato e montato su una piccola memoria...se esiste il tutto viene cancellato...ad esclusione della /usr/local/etc, la quale contiene (correttamente i file di configurazione dei servizi gestibili)
il ragionamento è corretto...per evitare modifiche che possano compromettere il lettore...te le impediscono!:cry:
Avevi perfettamente ragione... purtroppo :cry:
Il fatto che montando il filesystem in scrittura ti dica che non c'e' piu' spazio disponibile e' il comportamento tipico nei confronti di dispositivi non riscrivibili.
Il fatto che il nome del file rimanga in lista e' strano... e' come se i metadati del filesystem di root fossero invece su un altro dispositivo questa volta riscrivibile...
lbottoni
21-04-2010, 13:19
si la presenza del mio file è strano...però non si è preso 1K di blocco minimo di quando si crea un file...idea pazza...
...quando si aggiorna il firmware creado che il filesystem sia riscritto da nuovo...secondo te per pazzia se uno si copia l'attuale filesystem...lo modifica e se lo salva sua una chiavetta usb e poi crea l'immagine del firmaware...potrebbe funzionare?non so assolutamente come...però teoricamente quando si aggiorna il fw l'apparecchio scrive sulla rom!:rolleyes:
damiano77
22-04-2010, 23:24
Se il firmware è aggiornabile al limite sarà su una eeprom, non su una rom.
Comunque non ho idea di come si possa sovrascrivere la eeprom.
Se semplicemente ti chiede di uploadare un file contenente il firmware potresti provare a scaricarne uno vedere se è in un formato che riesci ad aprire e modificare e poi caricarlo. Io però non so nel modo più assoluto se sia una cosa sicura. Attento! se fai danni e il dispositivo non si avvia più sono cazzi amari
si può fare ma è + complicato...
estendi il sistema alla cartella sys su HDD1..
ovvero all'avvio il sistema sovrascrive temp con il contenuto di temp_old mi sembra.. ma poi puoi agire sulle configurazioni... c'è tutto un forum per lui.. vieni sei il bevenuto
Damage92
05-06-2010, 15:28
ok, fatto...
se scrivo nel file di prima (S50inetd) il suo spazio occupato diventa da 227 a 0, ma se noti nel list esiste (dopo un reboot) il file S99lbottoni.sh creato da me (con un vi) dopo aver montato in rw e eseguito il reboot.
non mi pemette modifiche reali :cry:
A te basterebbe poter creare un file nuovo in quella cartella, giusto?
Per esempio S99lbottoni.sh e scriverci dentro il comando per far partire il demone (se ho capito come funziona).
Hai detto che il file da te creato rimane. Puoi provare a mettere il file vero nella memoria rw, e poi fai un link che forse, come il file S99lbottoni.sh, rimarrà anche dopo il reboot.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.