Fileflags (noschg et al) widerherstellen?

Errorsmith

Kompiliertier
Moin!

Ich hab gerade ein System mit make installworld upgegradet. Das ging jedoch insofern schief als das ich den Fehler "Operation not permitted" bekommen hab.
Die Lösung war ein beherztes chflags -R / auf der Konsole.

Gibt es einen Weg die Flags nun - nach dem Upgrade - wieder in den Ursprungszustand zu versetzen oder muss ich nun damit leben? Ist nur ne Desktop Kiste und ein Backup hab ich auch, aber irgendwie hätte ich meine Flags schon gern wieder.

Grüße,
Errorsmith
 
Wenn du den Zustand vorher nicht gesichert hast war es das. Es gibt keine Historie für die Bits.
 
Beim nächsten make installworld sollte m.E. das Wichtigste wieder korrekt gesetzt werden.
 
@Rakor:
Danke, das hatte ich vermutet. Mein Gedanke war ob es irgendwo eine Art "Standard-Setup" gibt in dem festgehalten ist welche Files standardmäßig das Flag gesetzt haben. Ein Backup habe ich natürlich, aber eben vom Zustand vor dem Upgrade. Und das Upgrade kann ich nicht machen solange die Flags gesetzt sind.

@Elwood:
Das ist genau mein Problem. / und /usr/home liegen auf NFS. make installworld läuft durch, setzt aber natürlich die Flags nicht.

Wie gesagt, ist nicht so wichtig, das ist ein Desktop Bastelrechner. Beim Nächstenmal passe ich mehr auf und gut ists.

Danke für Eure Hilfe :)

Grüße,
Errorsmith
 
Von wo nimmt den installworld die Information welche Flags wo zu setzten sind? Irgendwo müssen Sie ja definiert sein.
 
Ich nehme an es ist in der Makefile? Oder so?
Hm... Bin übers WE weg, wäre aber ne interessante Frage. Setz mich da nächste Woche mal dran.

Sinnvoller m.E. aber die Frage wie ich ein FreeBSD ohne dieses Problem upgraden kann. Das heißt ... hm... den Server kann ich nicht nehmen um die Welt zu bauen, da läuft ja ein anderes FreeBSD (8.0) als auf dem Desktoprechner (8.3). Außerdem ist er leistungsmäßig nicht wirklich zum kompilieren gedacht.

Grüße,
Errorsmith
 
Die Flags kommen aus den Makefiles und werden an install(1) übergeben. Das setzen der Flags bei "installworld" kann man mit der undokumentierten src.conf Einstellung "NO_FSCHG=" unterdrücken.
 
Auf die Schnelle weiss ich nicht, ob man "nur" die chflags setzen kann. Aber ein grep über die Makefiles in /usr/src sollte darüber Aufschluß geben. Die paar Dinger kannste auch per Hand setzen.

Probier mal, ob in /usr/src ein make hierarchy eventuell auch die chflags setzt, sofern Ordner davon betroffen sind. (Gibt es chflags-getaggte Ordner?!?!).

Code:
# find /usr/src -name "Makefile*" -exec grep chflags \{\} \; -print
        -chflags noschg ${DESTDIR}${BINDIR}/$i
        -chflags schg ${DESTDIR}${BINDIR}/chpass
/usr/src/usr.bin/chpass/Makefile
        -@chflags noschg ${DESTDIR}${BINDIR}/cu
/usr/src/usr.bin/tip/tip/Makefile
                chflags noschg ${DESTDIR}${BINDIR}/$i || true
        -chflags schg ${DESTDIR}${BINDIR}/passwd
/usr/src/usr.bin/passwd/Makefile
                chflags noschg ${DESTDIR}${BINDIR}/$i || true
        -chflags schg ${DESTDIR}${BINDIR}/passwd
/usr/src/release/picobsd/tinyware/passwd/Makefile
        -chflags -R 0 ${CHROOTDIR}/.
        -chflags -R noschg ${_R}/.
                (find ${OTHER_DISTS} -path '*/var/empty' | xargs chflags noschg; \
                        chflags -R noschg ${RD}/trees/$${i} || true ; \
                        chflags -R noschg ${RD}/trees/$${i} || true ; \
/usr/src/release/Makefile.sysinstall
        chflags -R noschg ${.OBJDIR}
/usr/src/release/Makefile
CRUNCH_PROGS_bin= cat chflags chio chmod cp date dd df echo     \
/usr/src/rescue/rescue/Makefile
        priv_vfs_chflags.c              \
/usr/src/tools/regression/priv/Makefile
        bind.2 brk.2 cap_enter.2 cap_new.2 chdir.2 chflags.2 \
MLINKS+=chflags.2 fchflags.2 chflags.2 lchflags.2
/usr/src/lib/libc/sys/Makefile.inc
# $FreeBSD: src/bin/chflags/Makefile,v 1.19.28.1 2011/09/23 00:51:37 kensmith Exp $
PROG=   chflags
/usr/src/bin/chflags/Makefile
        chflags \
/usr/src/bin/Makefile
        -chflags noschg ${DESTDIR}/usr/libexec/${PROG}
/usr/src/libexec/rtld-elf/Makefile
ITOOLS= [ awk cap_mkdb cat chflags chmod chown \
                        chflags noschg "${DESTDIR}/$${file}" 2>/dev/null || true; \
                        chflags noschg "${DESTDIR}/$${file}" 2>/dev/null || true; \
/usr/src/Makefile.inc1
# because 'chflags' will need to operate on fewer files afterwards.
        -chflags -R 0 ${BW_CANONICALOBJDIR}
        -chflags -R 0 ${.OBJDIR}
/usr/src/Makefile
 
Ist schon ne Weile her, aber ich bin vorhin über die Lösung gestolpert:

Das Zauberwort heißt mtree

In meinem Fall also so:
Code:
sol# cd /usr/data/tftpboot/clients/fbsd-amd64 
sol# mtree -deU -f /usr/data/tftpboot/clients/fbsd-amd64/etc/mtree/BSD.root.dist 
sol# cd /usr/data/tftpboot/clients/fbsd-amd64/usr 
sol# mtree -deU -f /usr/data/tftpboot/clients/fbsd-amd64/etc/mtree/BSD.usr.dist 
sol# cd /usr/data/tftpboot/clients/fbsd-amd64/usr/include
sol# mtree -deU -f /usr/data/tftpboot/clients/fbsd-amd64/etc/mtree/BSD.include.dist 
sol# cd /usr/data/tftpboot/clients/fbsd-amd64/usr/local
sol# mtree -deU -f /usr/data/tftpboot/clients/fbsd-amd64/etc/mtree/BSD.local.dist 
sol# cd /usr/data/tftpboot/clients/fbsd-amd64/var 
sol# mtree -deU -f /usr/data/tftpboot/clients/fbsd-amd64/etc/mtree/BSD.var.dist

Falls jemand mal das selbe Problem hat. Hilft auch beim einspielen von Backups via tar oder ähnlichen Problemen :)

Grüße,
Errorsmith
 
Zurück
Oben