如何在 chroot 中解析主机名?

use*_*950 18 chroot

我尝试使用 chroot 修复损坏的 Ubunu 14.04。我所做的是从 USB 启动 Ubuntu 安装了原始系统,该系统必须修复并使用 chroot 更改为该系统:

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 
Run Code Online (Sandbox Code Playgroud)

效果很好,但在chroot环境中我无法访问互联网,因此apt无法解析主机名。我应该做些什么?

ping www.askubuntu.com
Run Code Online (Sandbox Code Playgroud)

也不起作用。

ste*_*ver 29

在较新的 Ubuntu 系统上,名称解析由 resolvconf 服务处理,而 /etc/resolv.conf 是指向 /run/resolvconf/resolv.conf 的符号链接。在执行 chroot 命令之前,您可以将绑定安装与其他绑定安装一起添加到 /run 文件系统

sudo mount -o bind /run /mnt/run
Run Code Online (Sandbox Code Playgroud)

以便 chroot 系统获取主机系统的 DNS 设置,或者,一旦您进入 chroot 系统,临时创建一个静态的 /etc/resolv.conf,其中包含您选择的名称服务器,例如

echo 'nameserver 8.8.4.4' | sudo tee -a /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

  • 什么是“较新的 Ubuntu 系统”;换句话说,resolvconf 处理的是哪个版本的名称解析? (2认同)
  • 做`sudo mount --bind /run /mnt/run` 对我有用 chrooting 到一个拙劣的 17.10 升级。谢谢你的回答! (2认同)
  • 如果您将整个 /run 目录与大量套接字绑定,则可能有点违背 chroot 的目的,因此可能只绑定所需的套接字是一个更好的主意(resolvconf,也许是 nscd 和 syslog) (2认同)