个人工具

UbuntuHelp:BasicChroot/zh

来自Ubuntu中文

跳转至: 导航, 搜索
  • 标题:创建一个基本的chroot

通过把其它的应用软件都封闭起来,chroot是一个把应用软件孤立于你系统的其它部分的方法。当你测试一个有可能要更改重要的系统文件的软件时,或者使用一个可能不安全的软件时,这个方法相当有用。本文档在于解析关于chroot使用的一些基本概念并且介绍如何启用和运行一个基本的chroot。

基本概念

chroot基本上就是你系统内的一个特殊的目录,如果这个目录内执行命令,可以防止你访问此目录之外的其他文件。从许多方面来说,chroot就好像是在你已经存在的系统上安装另一个操作系统。技术上说,chroot暂时性的把根目录(一般是/)更改为chroot目录(比如:/var/chroot)。由于根目录是文件系统的最顶层,应用软件就不能到达比根目录更上层的目录,也就这样应用软件就与系统的其它部分分开了。这样就防止了在chroot目录内执行的软件影响到你电脑上其他地方的文件。需要注意的是从chroot目录外的软件是可以访问到chroot目录内的文件的。更多信息请看Wikipedia-chroot

chroot的使用

接下来的是chroot的一些可能的应用:

  • 隔离不安全的和不稳定的应用软件
  • 在64位系统上运行32位的应用软件
  • 在生产性系统上安装新的软件包之前对软件进行测试
  • 在新发行版的Ubuntu上运行比较旧的应用软件
  • 在创建新的软件包时,允许在已安装的软件包上的小心的操作

创建chroot

这一部分提供关于如何创建一个基本的chroot的介绍。关于更多的高级chroot请看 Debootstrap Chroot

  1. 安装dchroot和debootstrap软件包;
  2. 以超级用户身份(也就是sudo),为chroot创建一个新的目录。在此过程中目录/var/chroot将会被用到。为了完成这个,在命令行里输入sudo mkdir /var/chroot
  3. 以超级用户身份在文本编辑器里打开/etc/schroot/schroot.conf。输入cd /etc/schroot,之后输入gksu gedit schroot.conf,这样你就能编辑此文件了。
  4. 添加以下的内容到schroot.conf里然后保存并关闭文件。把里面的your_username替换成你的用户名。
[gutsy]
description=Ubuntu Gutsy
location=/var/chroot
priority=3
users=your_username
groups=sbuild
root-groups=root
  1. 打开终端输入:
sudo debootstrap --variant=buildd --arch i386 gutsy /var/chroot/ http://archive.ubuntu.com/ubuntu/

这样子将会在chroot里创建一个基本的Ubuntu 7.10(Gutsy Gibbon)“安装”。这软件包可能会花费一点时间来下载。 注意:你可以以你选择的Ubuntu版本来替换gutsy。1.#6一个基本的chroot现在应该已经创建好了。输入sudo chroot /var/chroot来在chroot里成为root shell。

配置chroot

有一些基本的步骤可以用来配置chroot,为用户提供譬如DNS解析和/proc的访问的工具。 注意:在chroot之外shell里输入以下命令。

  1. 输入下面的命令来在chroot里挂载/proc文件系统(进程管理的需要):
sudo mount -o bind /proc /var/chroot/proc
  1. 输入下面的命令来允许内部chroot的DNS解析(互联网访问的需要):
sudo cp /etc/resolv.conf /var/chroot/etc/resolv.conf

在chroot里默认安装的软件包非常少(即使是sudo也没安装多少软件)。使用apt-get install package_name来安装软件包。请看 Debootstrap ChrootInstalling Mandriva Linux in a Chroot来获得更多的高级配置说明。

从chroot内部访问图形应用软件

你可以在chroot里运行一个图形应用软件,但是首先你得为这些应用软件提供一个X服务器。在chroot之外执行以下的说明:

  1. 安装xhost和xnest软件包;
  2. 确保在chroot内/proc已经挂载和DNS解析已经设置好(请看前文);
  3. 把下面的命令输入终端:
Xnest -ac :1

一个空白的Xnest窗口将会出现。1.#4打开另一个终端然后输入下面的命令来进入chroot:

sudo chroot /var/chroot
  1. 在chroot shell未关闭的情况下,输入以下命令:
export DISPLAY=localhost:1

如果你有启动图形应用软件的问题的话,请再次输入,但是以127.0.0.1替换掉localhost。

  1. 在chroot里面启动一个窗口管理器。比如,安装metacity软件包然后输入:
metacity &
  1. 在chroot里启动一个图形应用软件(前提是确认你已经把要运行的软件安装到了chroot里面),这个应用软件将会在Xnest窗口出现。

你也可以在chroot里面通过安装ubuntu-desktop软件包来安装一个完整的Ubuntu桌面。GNOME可以通过运行gnome-session命令从命令行启动。这一部分援引自文章Installing Mandriva Linux in a Chroot

有关进一步资料

  1. Wikipedia-chroot
  2. Installing Mandriva Linux in a Chroot
  3. Debootstrap Chroot

注意

这似乎表明了安装和使用schroot来替代dchroot将会更加一致。另外,(我并不以我的指尖为参考)在我印象里是dchroot反对schroot替代了他的位置?如果在使用schroot方面上能达成一致,那么使用sudo schroot -c gutsy -d替代sudo chroot /var/chroot并且这样做将会通过默认使用schroot保留很多东西的基本依赖。此外通过使用schroot所有的约束将会在chroot进入和退出的时候被自动关联并解决。这对于最小化数据的意外删除来说很重要。如此,我觉得这样的一个基本的帮助页警告用户不要erase/delete/trash_can整个的chroot或整个chroot目录中,直到chroot退出(约束被移除)。对于schroot来说,所有所有自动创建的约束将会在退出的时候被移除,意外的整个/home目录删除(时常听说的)可以被最小化。(似乎是人们忘记了或者没理解双向的mount --bind的本质。)reedmb 20081224 isSuS