Fehler beim Build von freetz-trunk: ERROR: modsed failed editing build/modified/files

zaptac

Neuer User
Mitglied seit
16 Mai 2006
Beiträge
31
Punkte für Reaktionen
0
Punkte
6
Hi!

Ich scheitere gerade beim Versuch aus dem Trunk eine FW zu bauen:
  • Aktuelle Revision frisch ausgecheckt
  • Unveränderte frische .config

Code:
$ rm .config
$ make menuconfig
configuration written to .config

*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.

]$ make
STEP 1: UNPACK (SKIPPED)

detected firmware 7390_de 84.05.53 rev26435 (16.09.2013 13:42:33)

STEP 2: MODIFY
applying symlinks, deleting additional webinterfaces in: usr/www usr/www.nas usr/www.myfritz
applying patches
  applying patches: 7390-de (05_5X)
    applying patch file ./patches/devices/05_5X/105-S06-logging.sh
    applying patch file ./patches/devices/05_5X/115-S20-modload.sh
    applying patch file ./patches/devices/05_5X/200-tun-device.sh
    patching build/modified/filesystem/etc/udev/rules.d/50-udev-default.rules
  Language specific HTML directory: build/modified/filesystem/usr/www/all/html/de
  LUA directory: build/modified/filesystem/usr/www/all/lua
    applying patch file ./patches/devices/05_5X/120-rc.S-dev.patch
    patching file etc/init.d/rc.S
    ----------------------------------------------------------------------
    applying patch file ./patches/devices/05_5X/140-rc.tail.sh-no_exit.patch
    patching file etc/init.d/rc.tail.sh
    Hunk #1 succeeded at 45 (offset -4 lines).
    ----------------------------------------------------------------------
    applying patch file ./patches/devices/05_5X/de/190-webmenu.patch
    patching file usr/www/all/templates/menu_page_end.html
    patching file usr/www/all/menus/menu_freetz.lua
    patching file usr/www/all/templates/menu_page_head.html
    ----------------------------------------------------------------------
  creating symlinks /tmp, /mod and /home
  creating /mnt and /opt
  setting freetz-version 'freetz-devel-11325'
    applying patch file ./patches/scripts/100-3170_7170.sh
    applying patch file ./patches/scripts/100-7112_7170.sh
    applying patch file ./patches/scripts/100-7113_7170.sh
    applying patch file ./patches/scripts/100-7140_7170.sh
    applying patch file ./patches/scripts/100-7141_7170.sh
    applying patch file ./patches/scripts/100-7150_7170.sh
    applying patch file ./patches/scripts/100-7240_7270.sh
    applying patch file ./patches/scripts/100-7270v1_7270v2.sh
    applying patch file ./patches/scripts/100-7270v2_7270v1.sh
    applying patch file ./patches/scripts/100-7320_7330.sh
    applying patch file ./patches/scripts/100-7340_7390.sh
    applying patch file ./patches/scripts/100-7570_7270.sh
    applying patch file ./patches/scripts/100-7570_iad7570.sh
    applying patch file ./patches/scripts/100_iad3331_7170.sh
    applying patch file ./patches/scripts/100-w701v_7170.sh
    applying patch file ./patches/scripts/100-w900v_7170.sh
    applying patch file ./patches/scripts/100-w920v_7570.sh
    applying patch file ./patches/scripts/101-enforce_urlader-settings.sh
    applying patch file ./patches/scripts/102-add_inittab.sh
    applying patch file ./patches/scripts/103-patch_tffs-nodes.sh
  applying tffs_nodes patch
    patching build/modified/filesystem/etc/init.d/S08-tffs
    applying patch file ./patches/scripts/105-add_ctlmgr-wrapper.sh
    applying patch file ./patches/scripts/106-patch_multid-wrapper.sh
  replacing multid by a wrapper
    patching build/modified/filesystem/etc/init.d/rc.net
    applying patch file ./patches/scripts/107-rename_ar7login-wrapper.sh
  renaming ar7login to make way for wrapper script
    applying patch file ./patches/scripts/108-patch_multid-wait.sh
  applying multid-wait patch
    patching build/modified/filesystem/etc/init.d/rc.net
grep: build/modified/filesystem/etc/init.d/rc.net: Keine Berechtigung
ERROR: modsed failed editing build/modified/filesystem/etc/init.d/rc.net
make: *** [firmware-nocompile] Fehler 1

Modsed muss auf die Schnauze fallen, da keine Dateirechte:

Code:
$ ls -l build/modified/filesystem/etc/init.d/rc.net
----------. 1 zaptac zaptac 9876 28. Nov 08:17 build/modified/filesystem/etc/init.d/rc.net

Die Rechte des Original passen:

Code:
$ ls -l ./build/original/filesystem/etc/init.d/rc.net
-rwxrwxrwx. 1 zaptac zaptac 9753 16. Sep 13:42 ./build/original/filesystem/etc/init.d/rc.net

Muss ja auch so sein, sonst würde schon ./patches/scripts/106-patch_multid-wrapper.sh versagen.
Code:
make V=99
funktioniert nicht, ebenso die Umstellung des "Verbosity Level" :(

Ich stehe auf dem Schlauch wo das schiefgeht. Kann mir jemand auf die Sprünge helfen?

Danke, Zaptac
 
Mach mal ein fsck auf das Dateisystem und versuch es dann noch einmal. Normalerweise kann man so leicht keine Dateien mit Mode 000 unbeabsichtigt anlegen, und Freetz hat keinen Grund, es zu versuchen.
 
Das Filsystem ist wohl ok:

Code:
# fsck.ext4 -f /dev/mapper/SPACE-LV_SPACE
e2fsck 1.42.8 (20-Jun-2013)
Durchgang 1: Prüfe Inodes, Blocks und Größen
Durchgang 2: Prüfe die Verzeichnisstruktur
Durchgang 3: Prüfe Verzeichnis-Verknüpfungen
Durchgang 4: Überprüfe die Referenzzähler
Durchgang 5: Überprüfe die zusammengefasste Gruppeninformation
/dev/mapper/SPACE-LV_SPACE: 1700083/29491200 Dateien (0.2% nicht zusammenhängend), 108160335/117964800 Blöcke
 
Hmm, habe noch einen alten Rechner mit Fedora 19 rumstehen, auf dem klappt es, nur auf meinem Arbeitsrechner mit Fedora 20 eben nicht.

Ich habe dort mal ein bisschen in tools/freetz_functions #modsed() rumgespielt in der Hoffnung zu verstehen was schiefläuft:
Code:
$ git diff
diff --git a/tools/freetz_functions b/tools/freetz_functions
index dea84fa..c8e658f 100644
--- a/tools/freetz_functions
+++ b/tools/freetz_functions
@@ -106,7 +106,10 @@ modsed()
        esac
        if [ -f "$2" ]; then
                echo2 "patching $2"
+echo "UID=$UID"
+ls -l $2
                sed -i -e "$1" "$2"
+ls -l $2
                if [ $# -ge 3 ]; then
                        grep -q "$3" "$2" || error 1 "modsed failed editing $2"
                fi

Der Aufruf von "sed -i" hinterlässt tatsächlich die bearbeiteten Files mit Mode 000. Strace (sed) spuckt das aus:

fchown(4, 0, 0) = -1 EPERM (Operation not permitted)

Warum auch immer, im Environment der Patchskripte ist $UID 0, ein ls -l gibt root als Eigentümer aus:

Code:
  applying tffs_nodes patch
    patching build/modified/filesystem/etc/init.d/S08-tffs
UID=0
-rwxrwxrwx. 1 root root 12531 16. Sep 13:42 build/modified/filesystem/etc/init.d/S08-tffs
----------. 1 root root 12547 29. Nov 16:50 build/modified/filesystem/etc/init.d/S08-tffs
    applying patch file ./patches/scripts/105-add_ctlmgr-wrapper.sh
    applying patch file ./patches/scripts/106-patch_multid-wrapper.sh
  replacing multid by a wrapper
    patching build/modified/filesystem/etc/init.d/rc.net
UID=0
-rwxrwxrwx. 1 root root 9753 16. Sep 13:42 build/modified/filesystem/etc/init.d/rc.net
----------. 1 root root 9770 29. Nov 16:50 build/modified/filesystem/etc/init.d/rc.net
    applying patch file ./patches/scripts/107-rename_ar7login-wrapper.sh
  renaming ar7login to make way for wrapper script
    applying patch file ./patches/scripts/108-patch_multid-wait.sh
  applying multid-wait patch
    patching build/modified/filesystem/etc/init.d/rc.net
UID=0
----------. 1 root root 9770 29. Nov 16:50 build/modified/filesystem/etc/init.d/rc.net
----------. 1 root root 9876 29. Nov 16:50 build/modified/filesystem/etc/init.d/rc.net
grep: build/modified/filesystem/etc/init.d/rc.net: Keine Berechtigung
ERROR: modsed failed editing build/modified/filesystem/etc/init.d/rc.net
make: *** [firmware-nocompile] Fehler 1

Hinterher gehören die Files wieder mir. Sed bricht offensichtlich ab bevor die Rechte wieder gesetzt werden:
Code:
$ ls -l build/modified/filesystem/etc/init.d/S08-tffs
-rwxrwxrwx. 1 zaptac zaptac 12547 29. Nov 16:50 build/modified/filesystem/etc/init.d/S08-tffs
$ ls -l build/modified/filesystem/etc/init.d/rc.net
----------. 1 zaptac zaptac 9876 29. Nov 16:50 build/modified/filesystem/etc/init.d/rc.net

Ist da ein ganz kranker Bug im OS, oder läuft da ein seltsamer Hack schief? Bin weiterhin ratlos... :confused:
 
Freetz verwendet fakeroot. Damit wird simuliert, dass die Dateien root gehören, Insbesondere ist es damit möglich, Gerätedateien zu simulieren, die bei der Erstellung des Dateisystems gebraucht werden.

Oben haben auch andere Dateien Mode 000. Gibt es bei denen nur deswegen kein Problem, weil nicht versucht wird, sie ein zweites Mal zu lesen?

Der Aufruf "fchown(4, 0, 0)" ist normal, denn das Programm denkt, dass es root ist. Interessanter ist fchmod
Versuch mal folgendes:
Code:
echo > /tmp/test
tools/build/bin/fakeroot bash -c 'strace -fvefile,fstat,fchmod sed -i -e 's/1/2/g' /tmp/test 2>&1 | tail -n8 ; ls -l /tmp/test'
strace -fvefile,fstat,fchmod sed -i -e 's/1/2/g' /tmp/test 2>&1 | tail -n8 ; ls -l /tmp/test
Es sollte in beiden Fällen "fchmod(4, 0100644)" ausgeführt werden. Bei mir fangen die letzten 8 Zeilen an mit "open("/tmp/test", O_RDONLY) = 3". Wenn Du eine andere Version von sed hast, sind es evtl. mehr oder weniger als 8 Zeilen. Davor werden soch verschiedene andere Dateien geöffnet, die hier nicht interessant sind.
 
Offensichtlich funktioniert das mit dem fakeroot nicht:
Code:
$ tools/build/bin/fakeroot bash -c 'strace -fvefile,fstat,fchmod sed -i -e 's/1/2/g' /tmp/test 2>&1 | tail -n16 ; ls -l /tmp/test'
open("/tmp/test", O_RDONLY)             = 3
fstat(3, {st_dev=makedev(0, 32), st_ino=1623202, st_mode=S_IFREG|0644, st_nlink=1, st_uid=1000, st_gid=1000, st_blksize=4096, st_blocks=8, st_size=1, st_atime=2013/11/29-18:55:05, st_mtime=2013/11/29-18:55:05, st_ctime=2013/11/29-18:55:05}) = 0
open("/proc/self/task/12273/attr/current", O_RDONLY|O_CLOEXEC) = 4
getxattr("/tmp/test", "security.selinux", "unconfined_u:object_r:user_tmp_t:s0", 255) = 36
open("/sys/fs/selinux/mls", O_RDONLY)   = 4
open("/proc/self/task/12273/attr/fscreate", O_RDONLY|O_CLOEXEC) = 4
open("/proc/self/task/12273/attr/fscreate", O_RDWR|O_CLOEXEC) = 4
open("/tmp/seduwXJmQ", O_RDWR|O_CREAT|O_EXCL, 0600) = 4
fstat(4, {st_dev=makedev(0, 32), st_ino=1611717, st_mode=S_IFREG, st_nlink=1, st_uid=1000, st_gid=1000, st_blksize=4096, st_blocks=0, st_size=0, st_atime=2013/11/29-18:56:41, st_mtime=2013/11/29-18:56:41, st_ctime=2013/11/29-18:56:41}) = 0
open("/proc/self/task/12273/attr/fscreate", O_RDWR|O_CLOEXEC) = 5
fstat(3, {st_dev=makedev(0, 32), st_ino=1623202, st_mode=S_IFREG|0644, st_nlink=1, st_uid=1000, st_gid=1000, st_blksize=4096, st_blocks=8, st_size=1, st_atime=2013/11/29-18:55:05, st_mtime=2013/11/29-18:55:05, st_ctime=2013/11/29-18:55:05}) = 0
fstat(4, {st_dev=makedev(0, 32), st_ino=1611717, st_mode=S_IFREG, st_nlink=1, st_uid=1000, st_gid=1000, st_blksize=4096, st_blocks=8, st_size=1, st_atime=2013/11/29-18:56:41, st_mtime=2013/11/29-18:56:41, st_ctime=2013/11/29-18:56:41}) = 0
fstat(3, {st_dev=makedev(0, 32), st_ino=1623202, st_mode=S_IFREG|0644, st_nlink=1, st_uid=1000, st_gid=1000, st_blksize=4096, st_blocks=8, st_size=1, st_atime=2013/11/29-18:56:41, st_mtime=2013/11/29-18:55:05, st_ctime=2013/11/29-18:55:05}) = 0
lstat("/tmp/test", {st_dev=makedev(0, 32), st_ino=1623202, st_mode=S_IFREG|0644, st_nlink=1, st_uid=1000, st_gid=1000, st_blksize=4096, st_blocks=8, st_size=1, st_atime=2013/11/29-18:56:41, st_mtime=2013/11/29-18:55:05, st_ctime=2013/11/29-18:55:05}) = 0
rename("/tmp/seduwXJmQ", "/tmp/test")   = 0
+++ exited with 0 +++
----------. 1 root root 1 29. Nov 18:56 /tmp/test
$ 
$ strace -fvefile,fstat,fchmod sed -i -e 's/1/2/g' /tmp/test 2>&1 | tail -n16 ; ls -l /tmp/test
open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 3
fstat(3, {st_dev=makedev(253, 1), st_ino=2231828, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=56, st_size=26254, st_atime=2013/11/15-22:10:26, st_mtime=2013/11/15-22:10:26, st_ctime=2013/11/15-22:10:26}) = 0
open("/tmp/test", O_RDONLY)             = 3
fstat(3, {st_dev=makedev(0, 32), st_ino=1611717, st_mode=S_IFREG|0644, st_nlink=1, st_uid=1000, st_gid=1000, st_blksize=4096, st_blocks=8, st_size=1, st_atime=2013/11/29-18:56:41, st_mtime=2013/11/29-18:56:41, st_ctime=2013/11/29-18:56:41}) = 0
open("/proc/self/task/12287/attr/current", O_RDONLY|O_CLOEXEC) = 4
getxattr("/tmp/test", "security.selinux", "unconfined_u:object_r:user_tmp_t:s0", 255) = 36
open("/sys/fs/selinux/mls", O_RDONLY)   = 4
open("/proc/self/task/12287/attr/fscreate", O_RDONLY|O_CLOEXEC) = 4
open("/proc/self/task/12287/attr/fscreate", O_RDWR|O_CLOEXEC) = 4
open("/tmp/sedgtnkgE", O_RDWR|O_CREAT|O_EXCL, 0600) = 4
fstat(4, {st_dev=makedev(0, 32), st_ino=1623232, st_mode=S_IFREG, st_nlink=1, st_uid=1000, st_gid=1000, st_blksize=4096, st_blocks=0, st_size=0, st_atime=2013/11/29-18:56:53, st_mtime=2013/11/29-18:56:53, st_ctime=2013/11/29-18:56:53}) = 0
open("/proc/self/task/12287/attr/fscreate", O_RDWR|O_CLOEXEC) = 5
fstat(3, {st_dev=makedev(0, 32), st_ino=1611717, st_mode=S_IFREG|0644, st_nlink=1, st_uid=1000, st_gid=1000, st_blksize=4096, st_blocks=8, st_size=1, st_atime=2013/11/29-18:56:41, st_mtime=2013/11/29-18:56:41, st_ctime=2013/11/29-18:56:41}) = 0
fstat(3, {st_dev=makedev(0, 32), st_ino=1611717, st_mode=S_IFREG|0644, st_nlink=1, st_uid=1000, st_gid=1000, st_blksize=4096, st_blocks=8, st_size=1, st_atime=2013/11/29-18:56:53, st_mtime=2013/11/29-18:56:41, st_ctime=2013/11/29-18:56:41}) = 0
rename("/tmp/sedgtnkgE", "/tmp/test")   = 0
+++ exited with 0 +++
-rw-r--r--. 1 zaptac zaptac 1 29. Nov 18:56 /tmp/test

Es kommt keine Ausgabe von fchmod:
Code:
$ tools/build/bin/fakeroot bash -c 'strace -fvefile,fstat,fchmod sed -i -e 's/1/2/g' /tmp/test 2>&1' | grep fchmod 
$
 
Zuletzt bearbeitet:
Ich vermute es liegt am SELinux, in Verbindung fakeroot und einem Fehler in sed.

Die Erstellung der temporären Datei sieht bei mir so aus:
Code:
umask(0700)                             = 022
getpid()                                = 28973
open("/tmp/sedEU4ucj", O_RDWR|O_CREAT|O_EXCL, 0600) = 4
umask(022)                              = 0700
fcntl(4, F_GETFL)                       = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(4, {st_dev=.., st_ino=.., st_mode=S_IFREG, ..) = 0
...
fchmod(4, 0100644)                      = 0
Wie man sieht, wird zunächst umask auf 0700 gesetzt. Man kann argumentieren, ob umask überhaupt geändert werden muss, aber 0700 bedeutet, dass die Eigentümer Berechtigungen gelöscht werden. Ich könnte eher umask 0077 verstehen. In Verbindung mit dem Erstellen der Datei mit Mode 0600 ergibt das eine Datei mit Mode 0000. Man erkennt es daran, dass der Aufruf von fstat das Ergebnis st_mode=S_IFREG bringt und nicht st_mode=S_IFREG|0600. Das fällt aber normalerweise nicht auf, weil danach mit fchmod die Rechte der Eingabedatei gesetzt werden.
Interessanterweise sind beim Aufruf ohne fakeroot mehr Aufrufe als ohne. Beim Aufruf mit fakeroot ist ein Aufruf von fstat(4) und ein Aufruf von lstat("/tmp/test") zusätzlich vorhanden.

Man kann davon ausgehen, dass fakeroot kein SELinux emuliert.
Interessant wäre auch, was beim direkten Aufruf von sed dafür sorgt, dass die Rechte nachher 0644 sind und nicht 0000.

Nachtrag:
Welche Version von sed verwendest Du (sed --version | head -n1)?
Versuche nochmal die Aufrufe von strace wie oben, aber mit -fvefile,fstat,fchmod,fgetxattr,fsetxattr (die letzten beiden zusätzlich zu den vorherigen) und ggf. mehr als 8 Zeilen, open("/tmp/test") sollte mit dabei sein.
 
Zuletzt bearbeitet:
Bin über den Thread nur drübergeflogen. Ob es sich um ein fakeroot- oder sed-Problem handelt, ist mir leider nicht ganz klar geworden. Ich habe von daher im trunk einfach mal die fakeroot-Version aktualisiert, in der Hoffnung, dass, sofern es sich um einen fakeroot-Fehler handelt, dieser in der neuen Version behoben ist. @zaptac: könntest Du bitte testen, ob sich bei Dir dadurch etwas ändert? Danke!

Hier ist das Change-/Commitlog von fakeroot zu finden. In der Version 1.19 wurde der xattr-Support implementiert/verbessert.
 
Hi ich hatte heute Morgen das gleiche Problem, gegoogelt, gerade diesen Thread gefunden, nochmal ein svn up gemacht... und nun laeuft es:)
Tausend Dank fuer die schnelle Hilfe!!
 
Ob es sich um ein fakeroot- oder sed-Problem handelt, ist mir leider nicht ganz klar geworden.

Vermutlich beide zusammen. sed setzt zuerst umask auf 0700 und erstellt dann eine Datei mit 0600, zusammen ergibt das eine Datei mit Mode 0000.
sed 4.2.1 setzt später mit fchmod(4, 0100644) den Mode der ursprünglichen Datei.
sed 4.2.2 setzt später mit fsetxattr(4, "system.posix_acl_access", ...) den Mode der ursprünglichen Datei.
Wenn fakeroot fsetxattr ignoriert oder nicht richtig unterstützt, dann hat das keinen Effekt und der Mode bleibt bei 0000.
 
Danke fürs Aufklären. Das Verhalten von sed ist zwar etwas eigenartig, aber die fehlende Unterstützung von fsetxattr ist für mich eindeutig ein fakeroot-Problem. Zum Glück scheint die neue fakeroot-Version *xattr besser zu unterstützen.

Ich schätze die Aktualisierung gehört auch in den freetz-2.0 branch gemerged.
 
Ich hab da auch noch mal ne Frage (auch wenn etwas OT).
Das einzige funktionierende Repo, das ich gefunden habe, ist das trunk-Repo bei Freetz. Ein "experimental" gibts da zwar auch noch, aber das laeuft bei mir nicht.
Die Repos unter svn.freetz.org sind schon seit sicher 2 Wochen nicht erreichbar (vorher hab ich es nicht probiert), und der letzte freetz 1.2-Download ist irgendwie vom letzten Jahr.
Mh... Soll das so?
Danke.
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
244,840
Beiträge
2,219,268
Mitglieder
371,543
Neuestes Mitglied
Brainbanger
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.