Ist es möglich, Debootstrap in einer Fakeroot-Umgebung auszuführen?

9

Ich habe ein Skript, das ein Installationsimage durch Ausführen vorbereitet debootstrap, einige Änderungen an den Dateien vornimmt und die Dateien dann auf ein von einer Datei gesichertes Disk-Image kopiert.

Dies funktioniert unter root, aber ich wollte das Skript ohne rootBerechtigungen ausführen können , da es wirklich keine privilegierten Ressourcen benötigen sollte. Ich dachte, ich würde nur das gesamte Skript mit ausführen fakeroot, aber es debootstrapschlägt fehl

W: Failure trying to run: chroot /tmp/tmp..... mount -t proc proc /proc

Gibt es einen Weg, das zu umgehen?

Petr Pudlák
quelle

Antworten:

5

Im Allgemeinen ist es ja möglich, debootstrapals Nicht-Root-Benutzer ausgeführt zu werden fakeroot, aber es gibt mehr Details dazu.

Das unmittelbare Problem, das Sie zu haben scheinen, ist der Versuch, chrootals Nicht-Root-Benutzer zu arbeiten. Sie müssen fakechrootstattdessen zusätzlich zu verwenden fakeroot. Zum Beispiel:

fakechroot fakeroot debootstrap sid /tmp/sid

Spätere Probleme, auf die Sie möglicherweise stoßen, umfassen das Erstellen von Loopback-Mounts oder das Erstellen von Disk-Image-Partitionstabellen als Nicht-Root-Benutzer.

Anstatt all diese Details einzeln durchzuarbeiten , ist es möglicherweise einfacher, eine Debootstrap-Variante wie Polystrap zu verwenden , die auch die Cross-Kompilierung übernimmt (z. B. ein Armhf-Image von x86-64 generiert), wenn Sie dies eines Tages wünschen .

bnewbold
quelle
2
Das Problem ist, dass debootstrapselbst angerufen chrootwird und ich keinen Weg finden konnte, um zu sagen, dass es verwendet werden muss fakechroot.
Petr Pudlák
@ PetrPudlák Hast du fakerootng statt fakeroot ausprobiert? Sie arbeiten anders, so dass manchmal einer funktioniert, wenn der andere nicht. Ich weiß nicht, ob fakerootng chroot zum Laufen bringt.
Gilles 'SO - hör auf böse zu sein'
@ PetrPudlák: Die Fakechroot-Manpage gibt einen Beispielaufruf alsfakechroot fakeroot debootstrap sid /tmp/sid
bnewbold
@ PetrPudlák: --variant = fakechroot sollte das tun. Darüber hinaus: unshare / lxc-userns-exec sind eine "bessere" Möglichkeit, dies in Kombination mit Multistrap zu tun (dh die Idee hinter Polystrap, das in Brickstrap gerollt wurde).
user268396
0

Der srocall chroot (2) erfordert Root-Rechte oder genauer und technisch die CAP_SYS_CHROOTFähigkeit (siehe Fähigkeiten (7)).

Daher können Sie nicht nur fakerootdarauf verwenden (Sie brauchen auch fakechrootusw.).

Basile Starynkevitch
quelle
0

Ich bin überrascht, dass niemand erwähnt hat, dass Debootstrap die Option hat --variant=fakechroot, genau das zu tun, was Sie versuchen.

Étienne
quelle