exekvere en kommando fra boot på DM500HD - busybox [SOLVED]
hey gutter.
Jeg roder med et problem da jeg gerne vil have kørt en kommando på min Dreambox ( som kører busybox) allerede ved opstarten.
jeg har nu prøvet flere metoder - men kan ikke få det til at blive afviklet under opstarten.
Har lavet et script:
/var/etc/init.d/start.sh
kører jeg dette direkte - virker alting. Men skal hen og logge ind på boksen for derefter at aktivere kommandoen - det burde da vel være til at fungere under boot.
Normalt havde jeg bare lagt kommandoen in i /etc/rc.local men den findes ikke - hvordan skal jeg så gøre dette
- Log in to post comments
Kommentarer31
Jeg kan desværre ikke
Jeg kan desværre ikke hjælpe dig, men jeg er nysgerrig og vil gerne vide hvordan du bruger din Dreambox. Jeg kan se så meget fra Google at det er en TV-boks der kører Linux, men hvad "ekstra" kan den som alm. TV-bokse ikke kan?
PS. Synes at alt der kører Linux er spændende :)
#0 du kan ikke bruge noget a
#0 du kan ikke bruge noget a la /etc/init.d og så kalde fra /etc/rc?.d (? = S, 0 .. 6) ?
Jeg har lavet mit script
Jeg har lavet mit script (kommando) der skal køres i en fil kaldet /var/etc/init.d/start
og derefter lavet symlinks som skal gå i rc0-6.d.
Men efter en reboot ligger de stadigvæk - men ikke bliver kørt ???
Og det er reelt underligt - for kører jeg filen i hånden - kører det uden problemer.
Der må simpelthen være noget specielt omkring at tilføje denne på en måde
Re: exekvere en kommando fra boot på DM500HD - busybox
Hej
Du mangler lige og opdatere din deamon.
Mangler lige at skrive en enkelt linie i din terminal.
update-rc.d script navn defaults
Så skal du lige genstarte og så starter dit script ved start.
Normalt er denne kommando da
Normalt er denne kommando da nok . som dne har accepteret - lavet sine links og sagt det er OK - men stadig ikke virker :
update-rc.d scripts defaults
Så laver den da også sine symlinks - så hvis jeg skal skrive script/navn ?? så må jeg vel have lavet noget forkert - kan dog ikke forstå at den accepterer og siger OK - hvis jeg mangler en parameter
Re: Re: exekvere en kommando fra boot på DM500HD - busybox
Det script du har lavet har du lagt under /etc/init.d/
Det har du givet et navn fx start, som jeg tror du har kaldt dit script.
update-rc.d start defaults
Det burde nu virke
Ellers skal vi have kørt /etc/init.d/start start ved opstart på en anden måde.
Har du forresten husket og gøre din fil eksekverbar?
chmod +x start
update-rc.d start
update-rc.d start defaults
Det burde virke - i min forstand og filen er exekverbar - så alt er i den fineste orden.
kører jeg manuelt /etc/init.d/start - kører det perfekt - men jkeg kan ikke få det til at starte automatisk - er nødt til at logge ind på boksen og køre det hver gang!
en TV-boks der kører Linux,
en TV-boks der kører Linux, men hvad "ekstra" kan den som alm. TV-bokse ikke kan?
PS. Synes at alt der kører Linux er spændende :)
Mon ikke de fleste "alm. tv-bokse" kører Busybox/Linux? ;-)
Jeg tror forskellige devices der kører Linux er mere udbredte end du tror, mit Philips tv gør f.eks. også - og det formoder jeg at stort set alle deres modeller gør.
Firmaerne har ofte så travlt med at smide busybox på deres devices at de glemmer at læse GPL først ;-)
Så vidt min opfattelse er -
Så vidt min opfattelse er - kører alle recievere Linux -. probleemt er bare som tidligere - det er ikke alle der overholder GPL reglerne -. og Viasat bla har været i retten omkring dette.
Men tror de fleste devices reelt kører linux.
Men der er ingen der kan fortælle mig hvorfor jeg ikke kan aktivere det script så det kører automatisk fra starten - da jeg ville mene at det burde fungere som jeg nu har gjort - men alligevel ikke.
Skal manualt køre det script før end det virker
Ved du om busybox læner sig
Ved du om busybox læner sig op ad en "normal" distro? Debian? RH? SUSE?
Der burde vel være en fil i /etc/init.d/ til at køre egne kommandoer under boot. På suse ville det være boot.local eller after.local.
må ærlig indrømme - jeg
må ærlig indrømme - jeg ved ikke hvilken en der ligger mest op af. Men nej der er ikke en local fil der klarer dette - efter hvad jeg kan se.
Under inet.d ligger kun de almindelige scripts som er llinket til under diverse rc[0-6].d biblioteker.
Men kan ikke se nogen almindelig fil der skulle kunne håndtere det - da alle der ligger derinde er diverse daemons der starter almindeligt.
Re: exekvere en kommando fra boot på DM500HD - busybox
Nu har jeg selv prøvet og lave et lille script og få det til at køre. Prøvede bare med at starte nautilus ved opstart.
Det virkede heller ikke. Så jeg prøvede at sætte mit script til at starte 20 sekunder efter opstart, for at se om der var noget som forstyrrede mit script.
Det virkede for mig.
#!/bin/bash
sleep 20 && nautilus
Håber det hjælper med dit problem.
Nope - prøvede at sætte
Nope - prøvede at sætte sleep 20 ind men nej - starter stadigvæk ikke
Så er totalt på herens mark - syntes det er ufatteligt det ikke kan køre
Re: exekvere en kommando fra boot på DM500HD - busybox
Det da underligt. Jeg vil prøve og se på det senere i dag. Det skal jo kunne lade sig gøre.
Hvordan har du præcist
Hvordan har du præcist gjort ?
Dette burde virke med et script der hedder "testmig"
(Jeg kan ikke huske hvad "20" gør, men må kunne findes i man pagen)
1) Kopier filen til init.d hvis du ikke har gjort det.
cp testmig /etc/init.d/testmig
2) Sæt rettigheder på filen
chmod 755 /etc/init.d/testmig
3) Opdater init scripts og fortæl hvilke runlevels scriptet skal køre og stoppe i.
BEMÆRK PUNKTUM !!
update-rc.d testmig start 20 2 3 4 5 . stop 20 0 1 6 .
hermed gjort - men med samme
hermed gjort - men med samme resultat.
Altså det med testing og opdatere rc.d - men samme resultat - der vil ikke starte af sig selv under opstarten. Men det er nøjagtigt som jeg har gjort tidligere.
Jeg er fra Arch vant /etc/rc.local men sådanne fil findes ikke og de andre muligheder ligger der heller ikke.
Kan bare ikke rigtig se hvad der reelt skulle kunne gøre dette.
Mit script er at starte en SSH tunnel således at jeg kan oprette forbindelse til min DB.
det ser således ud:
#!/bin/sh
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
dbclient -T -i ~/.ssh/mykey -L 2345:localhost:22 root@ServerIP
(har endda prøvet med og uden & efter linien
Kan da ikke forstå at dette ikke fungerer da man burde kunne afvikle dette på en enkelt måde!
Per
Kan du ikke prøve at lave
Kan du ikke prøve at lave et andet script der skriver hej ned i en fil eller noget meget simpelt, så du er sikker på at det virker?
Umiddelbart så lugter det lidt af, at den laver en fejl ved eksekvering af scriptet ved boot af den ene eller anden årsag.
peger ~/.ssh/myke til
peger ~/.ssh/myke til /root/.ssh/mykey ??
Bare et skud i tågen, men:
Bare et skud i tågen, men: kan du ikke snyde lidt og putte en linje ind i eksisterende script der bliver kørt ved opstart, og derfra kalde dit eget script?
Nu har jeg leget et par
Nu har jeg leget et par gange og sat følgende ind i scriptet.
#!/bin/sh
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
echo "HELLO" >> /tmp/test.txt
dbclient -T -i ~/.ssh/mykey -L 2345:localhost:22 root@ServerIP
og den kommer ind - så skriptet bliver kaldt og køres - så det er selve linien / måden det er skrevet på der er forkert i min dbclient linie.
hvis jeg kører det manuelt - afslutter den ikke - så hvordan kan dette skrive anderledes - da jeg normalt bare ville kalde kommandoen fra rc.local - men busybox på denne syntes at være ret begrænset
#20:
Jeg kommer til at
#20:
Jeg kommer til at tænke på at jeg havde/har et problem der minder meget om det:
http://www.linuxin.dk/node/16898
Når jeg kører scriptet manuelt, så virker det helt perfekt, men kører det under opstarten så fejler det af grunde jeg aldrig blev klar over. Måtte give op til sidst.
Peger ~/.ssh/mykey til
Peger ~/.ssh/mykey til /root/.ssh/mykey ?
Jeg tænker at hvis du kører scriptet når detvirker som en normal bruger vil ~ pege til /home/myuser, så har du muligvis en ugyldig sti da den sikkert kører som root ved boot er dermed kigger i /root i stedet.
Gav det mening? :)
Hey IBM.
Scriptet bliver
Hey IBM.
Scriptet bliver kørt som root - og brugeren er root.
Der er som default ikke andre brugere og normalt ville man slet ikke kigge ind på OS på en Dreambox - da den reelt kun bruges til at glo TV på.
Alting kører i baggrunden som root - og jo nøglen ligger det rigtige sted! Så det kan desværre ikke være der problemet ligger
Re: exekvere en kommando fra boot på DM500HD - busybox
Det er virkelig noget underligt noget. Mangler der noget i selve scriptet der får hans daemon til at acceptere filen i startop.
http://www.linux.com/archive/feed/46892
Jeg fandt det her link og har kigget hans script igennem. Her starter han sit script med
. /etc/init.d/functions
Har ikke selv prøvet det, da jeg ikke har haft tid. Håber der er nogen som får det til at virke.
Hey Gutter nu er jeg nået
Hey Gutter nu er jeg nået så langt her:
#!/bin/sh
#
# /etc/init.d/sshtunnel: start or stop SSH tunnel.
#
. /etc/default/sshtunnel
case "$1" in
start)
echo -n "Starting up SSHtunnel: sshtd"
dbclient -T -i ~/.ssh/mykey -L 2345:localhost:22 $SERVERIP || exit 0
echo "."
;;
stop)
echo -n "Shutting down SSHtunnel: sshtd"
killall dbclient
echo "."
;;
*)
echo "Usage: /etc/init.d/sshtunnel {start|stop}"
exit 1
;;
esac
exit 0
Fungerer i realiteten OK - MEN jeg skal uanset hvad kalde scriptet manuelt. I /etc/default/sshtunnel ligger hvilken host den skal udføre kommandoen på.
Jeg kan starte og stoppe min daemon med mit script. Dog imens den kører står den sådanne:
# /etc/init.d/ssh_tunnels start
Starting up SSHtunnel: sshtd
hvilket nok har nået at gøre med hvordan linien exekveres - hvordan kan jeg smide den i baggrunden, alt selve kommando linien ?? således at den forbliver aktiv og exitter. Jeg har sat & ind og prøvet med || exit 0 , men hvordan kan man få dette til at holde den SSHtunnel oppe, så jeg kan logge ind på boksen
Uanset hvad - så har jeg disse muligheder igennem ssh ?
# ssh -h
Dropbear client v0.48
Usage: ssh [options] [user@]host
Options are:
-p
-l
-t Allocate a pty
-T Don't allocate a pty
-i (multiple allowed)
-L Local port forwarding
-g Allow remote hosts to connect to forwarded ports
-R Remote port forwarding
Så har nogle et rigtig godt udgangspunkt videre - for lige nu er jeg lidt blank overfor den ikke vil køre
Du kan prøve med nohup til
Du kan prøve med nohup til at ligge den i baggrunden måske ?
" nohup - run a command immune to hangups, with output to a non-tty "
Hey Ibm.
Jeg har tjekket og
Hey Ibm.
Jeg har tjekket og set overalt.
Som jeg lige kan se er nohup ikke en del af busybox på disse dreamboxe ???
root@dm500hd:~# uname -r
2.6.12-5.1-brcmstb
Og kender slet ikke kommandoen i kernen, der er ingen man-sider help.
Så hmmmmm det er da imponerende det kan være så svært at køre et script
På min NAS der også kører
På min NAS der også kører busybox, bliver baggrundsprogrammer kørende efter hangup.
OK, det var også et wild
OK, det var også et wild shot. :)
@ibm: hvordan ville du lave
@ibm:
hvordan ville du lave det script med nohup - bare for sjov - da jeg har opdateret min kernel og nu har nohup med - så er spørgsmålet lige at få det tilrettet korrekt.
Så ville da gerne høre et bud med nohup
Netop da jeg har nu fået den til at kalde scriptet men for denne udmelding i scriptet - selvom i nohup smider den følgende kommentar:
Host 'xxx.xxx.xxx.xxx' is not in the trusted hosts file.
(fingerprint md5 8d:6a:da:40:80:82:aa:a1:ff:4d:5a:71:69:36:a3:91)
Do you want to continue connecting? (y/n) /usr/bin/dbclient: connection to root@xxx.xxx.xxx.xxx exited: Didn't validate host key
Så ergo må den ikke kunne finde min fil der giver den adgang til at kende hosten. Altså hvilken kommando er det så ? hvordan kommer jeg videre - da den bruger ikke kender known hosts
Nu er jeg nået så langt
Nu er jeg nået så langt her:
/etc/init.d/sshtunnel indeholder:
nohup /etc/sshtunnel &
det køres og giver output i nohup.out om den accepterer nøglen osv.
Derefter indeholder scriptet /etc/sshtunnel følgende:
/usr/bin/dbclient -T -i /home/root/.ssh/mykey -y -L 2345:localhost:22 root@xxx.xxx.xxx.xxx
Køres /etc/sshtunnel manuelt kører det. Køres /etc/init.d/sshtunnel - kører det ikke, men kan se ved hjælp af echo af scriptet køres - men afsluttes igen med det samme derefter. har prøvet at holde sleep på 20sek men samme problem alligevel!
Hvordan kan dette script foresættes i baggrunden.
Løsningen var:
/usr/bin/dbclient -T -i /home/root/.ssh/mykey -y -L 2345:localhost:22 root@xxx.xxx.xxx.xxx -N &
bare til orientering