[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[dpkg] FS ohne Hardlinks



Hi,

wir haben heute ein riesen Problem gefunden: dpkg erstellt Hardlinks,
auch über Verzeichnisse hinweg. Wir setzen aber AFS ein, dass keine
Hardlinks unterstüzt. Was macht man da?

Wir wollten heute ein Update der libc6 machen, zwecks installation von
openoffice.org, und dabei ist uns dpkg abgeschmiert, weil es eben die
besagten Hardlinks nicht erstellen konnte. Aber ich glaube, das wird
nicht nur ein Problem von AFS sein. Jedes FS, dass ACLs bietet, kann
keine Hardlinks unterstützen, da eine Datei ja in 2 Verzeichnissen liegen
könnte und damit wäre 2 ACLs zuständig, was aber nicht geht. [Außer es
gibt ACLs auch für die Dateien. Das weiß ich nicht, ob es das gibt,
jedenfalls AFS hat es nicht.]

Ich habe heute nur einfach das tar-Archiv von Hand ausgepackt und die
dpkg-Datenbank von Hand geändert. Aber das kann ja nicht der Weg sein.

Hier noch ein Auszug von strace:
#v+
fstat64(8, {st_mode=S_IFREG|0644, st_size=431, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0
x40016000
_llseek(8, 0, [0], SEEK_CUR)            = 0
read(8, "root:x:0:\ndaemon:x:1:\nbin:x:2:\ns"..., 4096) = 431
close(8)                                = 0
munmap(0x40016000, 4096)                = 0
lstat64("/usr/share/zoneinfo/Europe/Nicosia", {st_mode=S_IFLNK|0755, st_size=32,
 ...}) = 0
rmdir("/usr/share/zoneinfo/Europe/Nicosia.dpkg-new") = -1 ENOENT (No such file o
r directory)
rmdir("/usr/share/zoneinfo/Europe/Nicosia.dpkg-tmp") = -1 ENOENT (No such file o
r directory)
link("/./usr/share/zoneinfo/Asia/Nicosia", "/usr/share/zoneinfo/Europe/Nicosia.d
pkg-new") = -1 EXDEV (Invalid cross-device link)
write(2, "dpkg: error processing /var/cach"..., 175dpkg: error processing /var/c
ache/apt/archives/libc6_2.2.5-13_i386.deb (--install):
 error creating hard link `./usr/share/zoneinfo/Europe/Nicosia': Invalid cross-d
evice link
) = 175
lstat64("//usr/share/zoneinfo/Europe/Nicosia.dpkg-tmp", 0xbffff8dc) = -1 ENOENT 
(No such file or directory)
rmdir("//usr/share/zoneinfo/Europe/Nicosia.dpkg-new") = 
#v-

Die Stelle, wo link() EXDEV zurück gibt, hat uns das Genick gebrochen.

BTW: die Zeilen darüber sehen auch nicht gerade schön aus. mit rmdir() eine
Datei entfernen ist nicht die richtige Methode.

Jörg.



Reply to: