UNIXwork

Tags

c dav unix shell linux xattr solaris links x11 java rant fun webdav sync gnome apple benchmark network ldap oracle analytics xnedit macos windows graalvm bsd curl mac apache wtf virtualbox microsoft zfs sparc tomcat rhel freebsd arm

Dateihierarchie-Überprüfung mit mtree

18. Dezember 2017

Mit dem BSD-Tool mtree kann eine Datei-Hierarchie mit einer Spezifikation verglichen werden, wobei diese Spezifikation ebenfalls mit mtree erstellt werden kann. So kann man mit mtree geänderte Dateien finden, es ist jedoch auch möglich, Dateien, die nicht der Spezifikation entsprechen, zu löschen oder geänderte Dateirechte wiederherzustellen.

Nehmen wir mal an, man hat ein paar Dateien:

$ find .
.
./file2
./dir
./dir/abc
./dir/ccc
./file1

Bevor man mit mtree etwas vergleichen kann, benötigt man eine Spezifikation der Dateien. Diese erstellen wir mit mtree -c.

$ mtree -c > ../spec
$ cat ../spec
#	   user: olaf
#	machine: m2.fritz.box
#	   tree: /Users/olaf/Desktop/test
#	   date: Mon Dec 18 18:50:28 2017

# .
/set type=file uid=501 gid=20 mode=0644 nlink=1 flags=none
.               type=dir mode=0755 nlink=5 size=160 \
	            time=1513618591.304192231
	file1       size=6 time=1513619185.055667000
	file2       size=13 time=1513619203.579709605

# ./dir
dir             type=dir mode=0755 nlink=4 size=128 \
	            time=1513618608.749249207
	abc         size=6 time=1513618604.803276546
	ccc         size=5 time=1513618611.066866426
# ./dir
..

..

Nun hat man eine Spezifikation, mit der man später die Dateien vergleichen kann.

$ touch dir/abc
$ echo "Hello World" > file1
$ mtree < ../spec 
dir/abc changed
	modification time expected Mon Dec 18 18:36:44 2017.803276546 found Mon Dec 18 18:56:22 2017.582045000
file1 changed
	size expected 6 found 12
	modification time expected Mon Dec 18 18:46:25 2017.055667000 found Mon Dec 18 18:57:03 2017.596168115

Wie man sieht, werden standardmäßig nur wenige Eigenschaften im der Spezifikation gespeichert, man hat jedoch eine große Auswahl an sogenannten keywords, die pro Datei gespeichert werden sollen. Diese können mit der -K-Option angegeben werden.

$ mtree -c -K sha256digest

Das Tool ist zwar ein BSD-Tool und unter Linux standardmäßig nicht anzutreffen, ich habe aber zumindestens einen Port gefunden. Und unter Ubuntu gibt es das Paket freebsd-buildutils, welches das Tool fmtree enthält.

TrueOS 17.12 veröffentlicht

14. Dezember 2017

Eine neue stabile Version von TrueOS, einem FreeBSD-basierenden Betriebsystem, wurde veröffentlicht.

Ursprünglich war TrueOS ein etwas nutzerfreundliches FreeBSD, mit einem einfacheren Installer, der ein benutzbares Desktop-OS installiert und grafische Tools für die Paketverwaltung bereitstellt. Die Entwickler haben aber daran gearbeitet, sich durch besondere Features von FreeBSD hervorzuheben. So kommt im Unterschied zu FreeBSD das OpenRC Init-System zum Einsatz. TrueOS hat auch seinen eigenen auf Qt basierten Desktop, nämlich Lumina. Zu den weiteren besonderen TrueOS Features zählen ein überarbeitetes Package-Management und die eigene SysAdm Remote Management API.

Zu den Neuerungen von 17.12 zählen:

  • Basiert auf FreeBSD 12.0-CURRENT
  • Verbesserung der OpenRC-Integration mit über 1100 OpenRC Services für 3rd-party Pakete
  • Update des Lumina-Desktops
  • Automounter-Service um entfernbare Geräte zu verwalten
  • Unterstützung von bhyve, dem BSD Hypervisor
  • Separate Installations-Images für Desktop und Server

Offizielle Release-Ankündigung

Extended Attributes Teil 4: FreeBSD Syscalls

08. Dezember 2016

Um auf Extended Attributes in C zuzugreifen gibt es unter FreeBSD die extattr_*-Syscalls. Auch hier gibt es Varianten, die mit Pfaden arbeiten, welche für Filedeskriptoren und welche die im Falle eines symbolischen Links den Link selber betreffen.

Alle Funktionen erwarten als 2. Parameter ein int für den Namespace. Hierfür gibt es die Makros EXTATTR_NAMESPACE_USER und EXTATTR_NAMESPACE_SYSTEM.

Um an alle Namen der Attribute zu kommen gibt es die Funktion extattr_list_file (und noch die beiden anderen Varianten). Im Gegensatz zu Linux werden hier die Namen nicht einfach Null-terminiert hintereinander in den Buffer geschrieben, sondern vor jedem Namen steht zunächst ein einzelnes Bytes, welches die Länge des Namens angibt. Danach folgt der Name, jedoch ist dieser nicht Null-terminiert. Die anderen Funktionen sind alle recht trivial zu benutzen.

Da FreeBSD keine Tools hat, um Dateien mit ihren Extended Attributes zu kopieren, hab ich ein kleines Beispielprogramm geschrieben, dass alle Attribute aus dem User-Namespace von einer Datei auf eine andere kopiert.

Extended Attributes Teil 3: FreeBSD Commandline Tools

07. Dezember 2016

Extended Attributes sind auch unter FreeBSD name/value-Paare, die man beliebig für alle Dateien setzen kann. Im Unterschied zu Linux ist die Größe nicht auf wenige Kilobyte beschränkt. Desweiteren gibt es auch hier Namespaces (user und system), diese sind jedoch nicht Teil des Attribut-Namen.

Unter FreeBSD gibt es 4 Tools für den Zugriff auf Extended Attributes: getextattr, lsextattr, rmextattr, setextattr. Diese erwarten nach den optionalen Flags als erstes Argument immer den Namespace. Hier ein kleines Beispiel:

$ echo "hello" > test.txt
$ setextattr user test "xattr test string" test.txt
$ setextattr user mime_type "text/plain" test.txt
$ lsextattr user test.txt
test.txt        mime_type       test
$ getextattr user test test.txt
test.txt        xattr test string

Leider unterstützen die Userland-Tools wie cp und tar keine Extended Attributes.