Posix... Sp2F auf FreeBSD -- Skript-Änderungen! & Korrektheit überprüfbar?

quoosx

Neuer User
Mitglied seit
6 Feb 2006
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Was auf Linux läuft, muss doch auch recht einfach auf FreeBSD laufen -- aber letztendlich habe ich doch länger gebraucht, habe noch einige Meldungen, dass bestimmte Dateien nicht kopiert werden können, und weiß leider nicht, ob ich irgendwie überprüfen kann, ob alles geklappt hat.

Das Problem ist natürlich, dass FreeBSD sich weitgehend an den Posix-Standard hält und nicht die GNU-Erweiterungen vieler Befehle hat. Damit kann man noch umgehen, indem man bei Fehlermeldungen zu einem Befehl die Version aus compat/linux benutzt. Dann verhalten sich aber noch einige Befehle einfach anders, wofür man mit Glück indirekte Fehlermeldungen bekommt... hoffentlich, was mein Problem ist.

Außerdem habe ich gerade erst mit Shell-Programmierung angefangen. Gerade die sed-Befehle verstehe ich nicht auf Anhieb. Was für Konsequenzen das weglassen der GNU-Erweiterung an bestimmen Stellen hätte, weiß ich meist nicht -- und welche Ausgabe von od an der einen Stelle erwartet wird, ist mir völlig schleierhaft. Da war es dann doch einfacher, die compat/linux-Befehle zu nutzen.

(Falls der Autor des Skripts es Posix-kompatibler machen möchte -- die zu ersetzenden Befehle sind übersichtlich, außer GNU-sed, wofür man wohl eine Variable für den Befehl sed einführen müsste.)

Ich habe mit dem Skript von http://www.ip-phone-forum.de/showthread.php?p=913808#post913808 angefangen (aktuelle W501V-Firmware). Was ich verändert habe, schreibe ich ans Ende. Folgende Fehlermeldung sind noch aufgetreten:

********************************************************************************
Phase 3: Copy sources.
********************************************************************************
cp: /home/jan/tmp/sp/Fritzbox7140/squashfs-root/usr/www/all/cgi-bin/capture_notimeout: No such file or directory
cp: /home/jan/tmp/sp/Fritzbox7140/squashfs-root/usr/www/all/cgi-bin/firmwarecfg: No such file or directory
cp: /home/jan/tmp/sp/Fritzbox7140/squashfs-root/usr/www/all/cgi-bin/system_status: No such file or directory
cp: /home/jan/tmp/sp/Fritzbox7140/squashfs-root/usr/www/all/cgi-bin/webcm: No such file or directory
cp: /home/jan/tmp/sp/Fritzbox7140/squashfs-root/usr/www/all/html/config.def: No such file or directory
cp: /home/jan/tmp/sp/Fritzbox7140/squashfs-root/usr/www/all/html/lcr.html: No such file or directory
********************************************************************************
Phase 4: Setup environment.
********************************************************************************
cp: /home/jan/tmp/sp/Fritzbox7140/squashfs-root/etc/default.Fritz_Box_7140/avm/igddesc.xml: No such file or directory

Treten die auch unter Linux auf? Deuten die darauf hin, dass etwas schief gelaufen ist?

Kann ich irgendwie sinnvoll überprüfen, ob das Skript unter FreeBSD das Gleiche macht, wie unter Linux? Ich könnte ggf. ja doch mal Knoppix starten, aber da landen doch sicher zum Beispiel Timestamps im Image, so dass ich nie das Gleiche erhalten werde, oder?

Danke für jede weitere Anregung!
Code:
#!/bin/sh
# You need (at least) Linux compatibility, ftp/wget, shells/bash, and
# textproc/gsed.

# Since eth0 is never correct, you need to use the -p option. (Have
# not tested.)

# /bin/bash does not exist. Replace "#!/bin/bash"
# with "#!/usr/local/bin/bash" in all files or
# do "ln -s /bin/bash /usr/local/bin/bash". (Have not tested if it
# works with /bin/sh -- probably not, since that is not bash on
# FreeBSD.)
for i in `find . -maxdepth 1 -type f \! -name "*freebsd*" -exec grep \
-l \#\!/bin/bash {} \; `
do
    sed "s/\#\!\\/bin\\/bash/\#\!\\/usr\\/local\\/bin\\/bash/" $i \
>${i}-SED_TMP
    mv ${i}-SED_TMP ${i} && chmod 755 $i
done

# cp does not have "-d"="-P --preserve=link". "-P" is default on
# FreeBSD, "--preserve=link" does not exist. Replace all "cp -fdp"
# with "/usr/compat/linux/bin/cp -fdp" in sp-to-fritz.sh and upd_fs.
for i in `find . -maxdepth 1 -type f \! -name "*freebsd*" \( -exec gr\
ep -l "[^/]cp -fdp" {} \; -or -exec grep -l "^cp -fdp" {} \; \) `
do
    sed "s/cp -fdp/\\/usr\\/compat\\/linux\\/bin\\/cp -fdp/g" $i \
>${i}-SED_TMP
    mv ${i}-SED_TMP ${i} && chmod 755 $i
done

# readlink does not have "-f". Replace "readlink -f"
# with "/usr/compat/linux/usr/bin/readlink -f" in sp-to-fritz.sh.
for i in `find . -maxdepth 1 -type f \! -name "*freebsd*" \( -exec gr\
ep -l "[^/]readlink -f" {} \; -or -exec grep -l "^readlink -f" {} \; \
\) `
do
    sed "s/readlink -f/\\/usr\\/compat\\/linux\\/usr\\/bin\\/readlink\
 -f/g"\
 $i >${i}-SED_TMP
    mv ${i}-SED_TMP ${i} && chmod 755 $i
done

# sed is not GNU sed. Replace all sed with gsed in all files. That
# will find some "used" or "passed" in the comments. May be
# restrained to "sed -" and "sed s" ("-n -e", "-i -e", "-e",
# and "s"). They occur in: add_7150_dect add_7150_tam add_dectsetup
# add_eth conf_rc patch_fc patch_fc_w500v patch_sip patch_sperre
# patch_tam patch_tcom patch_tz rmv_7170_fon3 rmv_dsl_stat rmv_email
# rmv_eth rmv_info rmv_isdn_msn rmv_isdn_s0 rmv_kids_sw
# rmv_ppfon_fon3_isdn rmv_upnp rmv_usb rmv_vj_w501v sp-to-fritz.sh
for i in `find . -maxdepth 1 -type f \! -name "*freebsd*" \( -exec gr\
ep -l "[^g]sed s/" {} \; -or -exec grep -l "^sed s/" {} \; -or \
-exec grep -l "[^g]sed -" {} \; -or -exec grep -l "^sed -" {} \; \) `
do
    sed "s/sed -/gsed -/g" $i | sed "s/sed s\\//gsed s\\//g" \
>${i}-SED_TMP
    mv ${i}-SED_TMP ${i} && chmod 755 $i
done

# od behaves differently. Replace "od -i"
# with "/usr/compat/linux/usr/bin/od -i" in sp-to-fritz.sh. For me,
# the output of the od was this (which is nothing after sed):
# 0000042                14
# 0000043
for i in `find . -maxdepth 1 -type f \! -name "*freebsd*" \( -exec gr\
ep -l "[^/]od -i" {} \; -or -exec grep -l "^od -i" {} \; \) `
do
    sed "s/od -i/\\/usr\\/compat\\/linux\\/usr\\/bin\\/od -i/g" $i \
>${i}-SED_TMP
    mv ${i}-SED_TMP ${i} && chmod 755 $i
done

# chown does not have "--reference". Replace all "chown"
# with "/usr/compat/linux/bin/chown" in sp-to-fritz.sh.
for i in `find . -maxdepth 1 -type f \! -name "*freebsd*" \( -exec gr\
ep -l "[^/]chown" {} \; -or -exec grep -l "^chown" {} \; \) `
do
    sed "s/chown/\\/usr\\/compat\\/linux\\/bin\\/chown/g" $i \
>${i}-SED_TMP
    mv ${i}-SED_TMP ${i} && chmod 755 $i
done
 
Zuletzt bearbeitet von einem Moderator:
Live CD

Hi,

nimm dir doch einfach zur "einmaligen" Programmierung deines Speedport ne Live CD, Ubuntu, Knoppix etc....
Dann musst du dich nicht mit dem script rumärgern.
 
Der einzige Unterschied unter FreeBSD im Gegensatz zu Knoppix, der in den Verzeichnissen Fritzbox7140 und SpeedportW501V entsteht (md5 jeder einzelnen Datei), ist, dass SpeedportW501V/squashfs-root/usr/www/all/index.html fehlt -- das entspricht nicht wirklich den Fehlermeldungen (die nicht unter Knoppix auftreten)...
 
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.