Wie löse ich Hostnamen in chroot auf?

15

Ich versuche ein defektes Ubunu 14.04 mit chroot zu reparieren. Was ich getan habe, ist, Ubuntu von einem USB-fähigen System zu booten, das repariert und mit chroot auf dieses System umgestellt werden muss:

sudo mount /dev/sdXY /mnt 
sudo mount -o bind /dev /mnt/dev 
sudo mount -o bind /sys /mnt/sys 
sudo mount -t proc /proc /mnt/proc 
sudo cp /proc/mounts /mnt/etc/mtab 
sudo chroot /mnt /bin/bash 

Das hat gut funktioniert, aber in chroot Umgebung habe ich keinen Zugang zum Internet und kann daher aptkeine Hostnamen auflösen. Was soll ich machen?

ping www.askubuntu.com

geht auch nicht.

user5950
quelle
Ich denke, mein Befehl sollte seinfor d in dev sys run proc; do sudo mount -o bind /$d /mnt/$d ; done
Avinash Raj
versuchen Sie es und melden Sie sich bald bei mir :-)
Avinash Raj
Scheint zu funktionieren, aber ich bin mir nicht ganz sicher, weil es ein anderer Grund ist, warum es funktioniert. Trotzdem danke!
user5950

Antworten:

21

Auf neueren Ubuntu-Systemen wird die Namensauflösung vom Dienst resolvconf übernommen, und /etc/resolv.conf ist eine symbolische Verknüpfung zu /run/resolvconf/resolv.conf. Sie können entweder dem Dateisystem / run zusammen mit Ihren anderen Bindemounts einen Bindemount hinzufügen, bevor Sie den Befehl chroot ausführen

sudo mount -o bind /run /mnt/run

Damit das Chroot-System die DNS-Einstellungen des Host-Systems übernimmt oder, sobald Sie sich im Chroot-System befinden, vorübergehend eine statische Datei /etc/resolv.conf mit einem oder mehreren Nameservern Ihrer Wahl erstellt, z

echo 'nameserver 8.8.4.4' | sudo tee -a /etc/resolv.conf
Stahlfahrer
quelle
1
Was sind "neuere Ubuntu-Systeme"? mit anderen Worten, seit welcher Version wird die Namensauflösung von resolvconf übernommen?
Pro Backup
@ProBackup mindestens ab 12.04 Ich denke, obwohl es möglicherweise
zurückportiert wurde
1
Das sudo mount --bind /run /mnt/runhat bei mir funktioniert, als ich in ein verpfuschtes 17.10-Upgrade geraten bin. Danke für die Antwort!
Labyrinth
Gibt es eine dauerhafte Lösung?
Gromit190
1
Es ist wahrscheinlich ein bisschen gegen den Zweck von chroot, wenn Sie das gesamte / run-Verzeichnis mit vielen Sockets binden. Daher ist es wahrscheinlich eine bessere Idee, nur die benötigten Sockets zu binden (resolvconf, vielleicht nscd und syslog)
siehe