summaryrefslogtreecommitdiff
path: root/hurd/running/chroot.mdwn
blob: 699f05a15e6ec13586f05483601943aa5d390df5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[[!meta copyright="Copyright © 2012, 2013 Free Software Foundation, Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled [[GNU Free Documentation
License|/fdl]]."]]"""]]

This documents the currently-needed tricks to successfully build a
[[glibc/chroot]] in GNU/Hurd.

# Preparation

It can be a good idea to put the chroot on a separate translator, for instance:

    # dd [...] < /dev/zero > storage
    # mke2fs storage
    # settrans -c chroot /hurd/ext2fs $PWD/storage

# Unpack

Debootstrap should be able to build the content:

    # debootstrap sid chroot

# Tricks

One current issue to know about chroots is that since passive translators (e.g.
`/servers/socket/1`) are started by the root translator, which is not aware
of the chrooting, these passive translators are started non-chrooted, leading to
a few issues.
[[!tag open_issue_hurd]]

## Sockets

Since the passive [[translator/pflocal]] translator will not be chrooted, local
socket creation
will actually happen in the root filesystem. To make things work correctly the
programs inside the chroot need to be able to access them:

    # settrans -kp chroot/servers /hurd/firmlink /servers
    # settrans -kp chroot/dev /hurd/firmlink /dev
    # settrans chroot/tmp /hurd/firmlink /tmp
    # settrans -c chroot/var/lib/dbus /hurd/firmlink /var/lib/dbus
    # settrans -c chroot/run/dbus /hurd/firmlink /run/dbus