aboutsummaryrefslogtreecommitdiff
blob: 61dbec9285a80c6603ded13011b35236f38a9c36 (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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link title="new" rel="stylesheet" href="http://www.gentoo.org/css/main.css" type="text/css">
<link REL="shortcut icon" HREF="http://www.gentoo.org/favicon.ico" TYPE="image/x-icon">
<link rel="search" type="application/opensearchdescription+xml" href="http://www.gentoo.org/search/www-gentoo-org.xml" title="Gentoo Website">
<link rel="search" type="application/opensearchdescription+xml" href="http://www.gentoo.org/search/forums-gentoo-org.xml" title="Gentoo Forums">
<link rel="search" type="application/opensearchdescription+xml" href="http://www.gentoo.org/search/bugs-gentoo-org.xml" title="Gentoo Bugzilla">
<link rel="search" type="application/opensearchdescription+xml" href="http://www.gentoo.org/search/packages-gentoo-org.xml" title="Gentoo Packages">
<link rel="search" type="application/opensearchdescription+xml" href="http://www.gentoo.org/search/archives-gentoo-org.xml" title="Gentoo List Archives">
<title>Gentoo Linux Documentation
--
  Developer Chroots Utility Guide</title>
</head>
<body style="margin:0px;" bgcolor="#ffffff"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td valign="top" height="125" bgcolor="#45347b"><a href="http://www.gentoo.org/"><img border="0" src="http://www.gentoo.org/images/gtop-www.jpg" alt="Gentoo Logo"></a></td></tr>
<tr><td valign="top" align="right" colspan="1" bgcolor="#ffffff"><table border="0" cellspacing="0" cellpadding="0" width="100%"><tr>
<td width="99%" class="content" valign="top" align="left">
<br><h1>Developer Chroots Utility Guide</h1>
<form name="contents" action="http://www.gentoo.org">
<b>Content</b>:
        <select name="url" size="1" OnChange="location.href=form.url.options[form.url.selectedIndex].value" style="font-family:sans-serif,Arial,Helvetica"><option value="#doc_chap1">1. Introduction</option>
<option value="#doc_chap2">2. Installation</option>
<option value="#doc_chap3">3. Configuration</option>
<option value="#doc_chap4">4. Startup and maintenance</option></select>
</form>
<p class="chaphead"><a name="doc_chap1"></a><span class="chapnum">1.
            </span>Introduction</p>
<p class="secthead"><a name="doc_chap1_sect1">What is this all about?</a></p>
<p>
The normal procedure for a developer setting up a chroot is
to fetch a stage, find a directory where to unpack it, unroll the stage,
make some modifications to basic files like <span class="code" dir="ltr">/etc/resolv.conf</span>,
<span class="code" dir="ltr">/etc/hosts</span> and others.
Then she or he is usually incorporating some kind of custom script
to start the chroot again once the machine gets rebooted
or she/he needs to reenter it for another reason.
More advanced scripts use screen sessions for making the chroot
command launching the chroot independent of the 
currently connected user.
</p>
<p>
However, lots of these scripts exist and people are using more
and more chroots on our development servers,
which is a very good thing in fact because it's relieving stress
off the main system and is making our production systems
more stable if development is done inside contained chroots.
</p>
<p>
There has been a previous version of <span class="code" dir="ltr">devel-chroots</span>,
but the old version only had limited multiuser capabilities and
was rather bulky compared to the code in the script and the
configuration abilities of the different chroots.
</p>
<p>
For this reason, the new version of <span class="code" dir="ltr">devel-chroots</span> has been
completely rewritten and is using a three-layered approach
of configuration data for setting up chroots and populating
the config files in these.
</p>
<p>
Finishing this introduction, this guide is not meant to be exclusive
to Gentoo development machines and their maintainers and users,
the tool has been developed to be usable on any machine
where chroots should be set up in an automatic and configurable fashion.
</p>
<p>
Your input is welcome and there is always room for improving
this little program as it aims at easing development and promotes
thorough regression and live testing by providing an easy way
of setting up a testbed, which a chroot basically is.
</p>
<p class="chaphead"><a name="doc_chap2"></a><span class="chapnum">2.
            </span>Installation</p>
<p class="secthead"><a name="doc_chap2_sect1">Ebuild installation</a></p>
<p>
The utility can be emerged with the following shell command:
</p>
<table class="ncontent" width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td bgcolor="#bbffbb"><p class="note"><b>Note: </b>
If you want to emerge only the basic tool without the sample configuration,
activate the <span class="code" dir="ltr">"minimal"</span> USE-flag.
</p></td></tr></table>
<a name="doc_chap2_pre1"></a><table class="ntable" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr><td bgcolor="#7a5ada"><p class="codetitle">Code Listing2.1: Installation of devel-chroots</p></td></tr>
<tr><td bgcolor="#eeeeff" align="left" dir="ltr"><pre>
# <span class="code-input">USE="-minimal" emerge -pv devel-chroots</span>

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R   ] dev-util/devel-chroots-2.0.0  USE="-minimal*" 0 kB 

Total size of downloads: 0 kB

# <span class="code-input">USE="-minimal" emerge -v devel-chroots</span>
</pre></td></tr>
</table>
<a name="doc_chap2_pre2"></a><table class="ntable" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr><td bgcolor="#7a5ada"><p class="codetitle">Code Listing2.2: Installation of devel-chroots without configuration files</p></td></tr>
<tr><td bgcolor="#eeeeff" align="left" dir="ltr"><pre>
# <span class="code-input">USE="minimal" emerge -pv devel-chroots</span>

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R   ] dev-util/devel-chroots-2.0.0  USE="minimal" 0 kB 

Total size of downloads: 0 kB

# <span class="code-input">USE="minimal" emerge -v devel-chroots</span>
</pre></td></tr>
</table>
<p class="secthead"><a name="doc_chap2_sect2">Fetching the source code</a></p>
<p>
The source code for the project can be found in the following
anonymous <span class="code" dir="ltr">cvs</span> or <span class="code" dir="ltr">svn</span> location, along with viewcvs:
</p>
<a name="doc_chap2_pre3"></a><table class="ntable" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr><td bgcolor="#7a5ada"><p class="codetitle">Code Listing2.3: fetching the project source code with anonymous cvs</p></td></tr>
<tr><td bgcolor="#eeeeff" align="left" dir="ltr"><pre>
/tmp/dc $ <span class="code-input">cvs -d :pserver:anonymous@anoncvs.gentoo.org/var/cvsroot co gentoo-projects</span>
</pre></td></tr>
</table>
<a name="doc_chap2_pre4"></a><table class="ntable" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr><td bgcolor="#7a5ada"><p class="codetitle">Code Listing2.4: fetching the project source code with anonymous svn</p></td></tr>
<tr><td bgcolor="#eeeeff" align="left" dir="ltr"><pre>
/tmp/dc $ <span class="code-input">svn co http://anonsvn.gentoo.org/repositories/gentoo-projects</span>
</pre></td></tr>
</table>
<p>
Then dive into the
<span class="code" dir="ltr">gentoo-projects/devel-chroots/devel-chroots-2.0.0/</span>
directory to see the source code for the project.
</p>
<p>
As you can see, it's just the same as the scripts
that are getting installed by the ebuild.
Which positively means that you can theoretically also use
these scripts without having an ebuild install them.
</p>
<p class="chaphead"><a name="doc_chap3"></a><span class="chapnum">3.
            </span>Configuration</p>
<p class="secthead"><a name="doc_chap3_sect1">General machine configuration</a></p>
<p>
There is no standard location where a <span class="code" dir="ltr">stage3</span>
file may be located on the mirrors.
For this reason, it is highly advised to edit the
default configuration file and explicitly set the <span class="code" dir="ltr">STAGE_URL</span> variable.
</p>
<a name="doc_chap3_pre1"></a><table class="ntable" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr><td bgcolor="#7a5ada"><p class="codetitle">Code Listing3.1: STAGE_URL in default configuration</p></td></tr>
<tr><td bgcolor="#eeeeff" align="left" dir="ltr"><pre>
$ <span class="code-input">grep STAGE_URL /etc/devel-chroots/default/config</span>
STAGE_URL="$(echo ${GENTOO_MIRRORS} | awk '{ print $1; }')/${STAGE_PATH}/${STAGE_NAME}"
# STAGE_URL="http://ftp.belnet.be/mirror/rsync.gentoo.org/gentoo/releases/x86/2006.0/stages/stage3-x86-2006.0.tar.bz2"
</pre></td></tr>
</table>
<p>
As you can see, the default mechanism is to pick the first mirror,
add the stage path for a typical x86 stage and construct
the name for a current profile's stage.
However, this doesn't work for sparc for example,
because they are differentiating between sparc32 and sparc64.
The same holds true for hppa, where it's stages pertaining
to the 1.1 ABI and the 2.0 ABI of different types of machines.
</p>
<p>
Also remember that users and specific chroots can always
override this variable, so it would be the best thing
to make sure it points to a reasonable default stable stage.
</p>
<p>
As said, users wishing to enable a hardened toolchain chroot,
a linux32 chroot on an amd64 machine or a new bleeding edge stage
from one of their private mirrors can always override
this setting in their own <span class="code" dir="ltr">config</span>.
</p>
<p>
Another important piece of the configuration is the global <span class="code" dir="ltr">make.conf</span>.
Basically, every single chroot contains a file 
<span class="code" dir="ltr">/usr/local/chroot/conf.d/make.conf</span>
which is constructed from three possible <span class="code" dir="ltr">make.conf</span> files
residing in the configuration directory of <span class="code" dir="ltr">devel-chroots</span>:
</p>
<p>
<span class="code" dir="ltr">/etc/devel-chroots/default/make.conf</span> is the main file for chroots.
</p>
<p>
<span class="code" dir="ltr">/etc/devel-chroots/pappy/make.conf</span> is holding user specific addons.
</p>
<p>
<span class="code" dir="ltr">/etc/devel-chroots/pappy/chroot001/make.conf</span> is a chroot specific file.
</p>
<p>
These three files make up the final
<span class="code" dir="ltr">/usr/local/chroot/conf.d/make.conf</span>
which then can be sourced by the real <span class="code" dir="ltr">/etc/make.conf</span> of the chroot.
</p>
<p class="secthead"><a name="doc_chap3_sect2">User specific configuration</a></p>
<p>
As noted in the previous section, each user can define her or his
own versions of <span class="code" dir="ltr">config</span> and <span class="code" dir="ltr">make.conf</span> in the
configuration directory <span class="code" dir="ltr">/etc/devel-chroots/username</span>.
This enables the highest possible versatility and flexibility.
For example, it is possible to allow a user define her or his own
debugging settings for
<span class="code" dir="ltr">FEATURES</span> and <span class="code" dir="ltr">USE</span> flags in <span class="code" dir="ltr">make.conf</span>.
</p>
<p>
Another example is the custom setting of the screenrc:
</p>
<a name="doc_chap3_pre2"></a><table class="ntable" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr><td bgcolor="#7a5ada"><p class="codetitle">Code Listing3.2: user specific screenrc for chroot screen sessions</p></td></tr>
<tr><td bgcolor="#eeeeff" align="left" dir="ltr"><pre>
$ <span class="code-input">cat /etc/devel-chroots/pappy/screenrc</span>
backtick 1 5 0 /home/pappy/bin/mem.sh
backtick 2 1 0 /home/pappy/bin/cetclock.sh 'CET' '-0200' '-0100'

hardstatus string '%{= kG}[%= %{= kw}%?%-Lw%?%{r}[%{W}%n*%f %t%?{%u}%?%{r}]%{w}%?%+Lw%?%?%= %{g}]%{W} %2`:%s %{g}%{.w}%H%{.c} [%l] %1`MB ram'
</pre></td></tr>
</table>
<p>
This makes it easy for users to include their own scripts
in screen sessions of chroots,
for example to measure disk usage or load of the system.
</p>
<a name="doc_chap3_pre3"></a><table class="ntable" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr><td bgcolor="#7a5ada"><p class="codetitle">Code Listing3.3: Example: user specific CET date display on chroot screen</p></td></tr>
<tr><td bgcolor="#eeeeff" align="left" dir="ltr"><pre>
~ $ cat bin/cetclock.sh 
#!/bin/bash

# check for daylight saving time being currently active at this time
if [ "x$(perl -e '@timeData = localtime(time); print ${timeData}[-1];')y" == "x1y" ]
then
        date --utc --date="$(date --utc '+%F %T') $2" "+$1 %H:%M"
else
        date --utc --date="$(date --utc '+%F %T') $3" "+$1 %H:%M"
fi

</pre></td></tr>
</table>
<p class="secthead"><a name="doc_chap3_sect3">Chroot specific configuration</a></p>
<p>
Last but not least, on some arches (notably amd64),
there is the possibility to install an x86 chroot using a special emulator
command, called <span class="code" dir="ltr">linux32</span>.

Redefining the respective variables in the chroot-specific
<span class="code" dir="ltr">/etc/devel-chroots/pappy/chroot001/config</span> enables users to
set up those special chroots on amd64 test machines:
</p>
<a name="doc_chap3_pre4"></a><table class="ntable" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr><td bgcolor="#7a5ada"><p class="codetitle">Code Listing3.4: chroot specific config for linux32 chroot on amd64</p></td></tr>
<tr><td bgcolor="#eeeeff" align="left" dir="ltr"><pre>
$ <span class="code-input">cat /etc/devel-chroots/pappy/chroot001/config</span>
CHROOT_BINARY="linux32 /usr/bin/chroot"
STAGE_URL="http://ftp.belnet.be/mirror/rsync.gentoo.org/gentoo/releases/x86/2006.0/stages/stage3-x86-2006.0.tar.bz2"
</pre></td></tr>
</table>
<p>
These variables are learned by the script and will
be used for setting up the chroot.
Other chroots are not affected by this setting, however.
This makes it very easy for users to set up and maintain
different chroots for their needs on the same machine at a time.
</p>
<p>
As you can see, in every case,
chroot-specific data is overwriting default and user-specific data.
Please do not change system-internal variables like
the maximum number of chroots for a user
and similar definitions inside a chroot-specific <span class="code" dir="ltr">config</span> file.
</p>
<p class="chaphead"><a name="doc_chap4"></a><span class="chapnum">4.
            </span>Startup and maintenance</p>
<p class="secthead"><a name="doc_chap4_sect1">Automatic startup</a></p>
<p>
Automatic startup of the developer chroots is attained with an init script
that is conforming to the Gentoo standards.
</p>
<a name="doc_chap4_pre1"></a><table class="ntable" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr><td bgcolor="#7a5ada"><p class="codetitle">Code Listing4.1: starting the devel-chroots init script</p></td></tr>
<tr><td bgcolor="#eeeeff" align="left" dir="ltr"><pre>
# /etc/init.d/devel-chroots status
 * status:  stopped

# /etc/init.d/devel-chroots start 
 * Starting developer chroots for all users ...
 * pappy: starting chroot001 in (/space/devel-chroots/pappy/chroot001)
 * pappy: mounting chroot filesystems: /space/devel-chroots/pappy/chroot001
 * pappy: chroot001: creating conf: make.conf
 * pappy: starting chroot002 in (/space/devel-chroots/pappy/chroot002)
 * pappy: mounting chroot filesystems: /space/devel-chroots/pappy/chroot002
 * pappy: chroot002: creating conf: make.conf
 * config file [/etc/devel-chroots/pappy/chroot002/make.conf] not existing, skipping
 * no /etc/devel-chroots/pappy/chroot003 config dir
 * no /etc/devel-chroots/pappy/chroot004 config dir
 * no /etc/devel-chroots/pappy/chroot005 config dir
 * no /etc/devel-chroots/pappy/chroot006 config dir
 * no /etc/devel-chroots/pappy/chroot007 config dir
 * no /etc/devel-chroots/pappy/chroot008 config dir
 * launching detached screen session for pappy's chroots
 * remember that you have to source /usr/local/chroot/conf.d/make.conf
 * in the make.conf of created chroots for user-specific settings
 * for multiuser mode, you need to set /usr/bin/screen to mode 4755
 * and also change the directory /var/run/screen to mode 0755                                    [ <span class="code-identifier">ok</span> ]
</pre></td></tr>
</table>
<a name="doc_chap4_pre2"></a><table class="ntable" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr><td bgcolor="#7a5ada"><p class="codetitle">Code Listing4.2: restarting the chroots init script</p></td></tr>
<tr><td bgcolor="#eeeeff" align="left" dir="ltr"><pre>
# /etc/init.d/devel-chroots restart
 * Stopping developer chroots for all users ...
 * stopping chroot001 of user pappy (/space/devel-chroots/pappy/chroot001)
 * pappy: terminating the following screen sessions: 8638
 * pappy: unmounting chroot filesystems: /space/devel-chroots/pappy/chroot001
 * stopping chroot002 of user pappy (/space/devel-chroots/pappy/chroot002)
 * pappy: unmounting chroot filesystems: /space/devel-chroots/pappy/chroot002
 * no /etc/devel-chroots/pappy/chroot003 config dir
 * no /etc/devel-chroots/pappy/chroot004 config dir
 * no /etc/devel-chroots/pappy/chroot005 config dir
 * no /etc/devel-chroots/pappy/chroot006 config dir
 * no /etc/devel-chroots/pappy/chroot007 config dir
 * no /etc/devel-chroots/pappy/chroot008 config dir                                                                                           [ <span class="code-identifier">ok</span> ]
 * Starting developer chroots for all users ...
 * pappy: starting chroot001 in (/space/devel-chroots/pappy/chroot001)
 * pappy: mounting chroot filesystems: /space/devel-chroots/pappy/chroot001
 * pappy: chroot001: creating conf: make.conf
 * pappy: starting chroot002 in (/space/devel-chroots/pappy/chroot002)
 * pappy: mounting chroot filesystems: /space/devel-chroots/pappy/chroot002
 * pappy: chroot002: creating conf: make.conf
 * config file [/etc/devel-chroots/pappy/chroot002/make.conf] not existing, skipping
 * no /etc/devel-chroots/pappy/chroot003 config dir
 * no /etc/devel-chroots/pappy/chroot004 config dir
 * no /etc/devel-chroots/pappy/chroot005 config dir
 * no /etc/devel-chroots/pappy/chroot006 config dir
 * no /etc/devel-chroots/pappy/chroot007 config dir
 * no /etc/devel-chroots/pappy/chroot008 config dir
 * launching detached screen session for pappy's chroots
 * remember that you have to source /usr/local/chroot/conf.d/make.conf
 * in the make.conf of created chroots for user-specific settings
 * for multiuser mode, you need to set /usr/bin/screen to mode 4755
 * and also change the directory /var/run/screen to mode 0755                                                                                 [ <span class="code-identifier">ok</span> ]
</pre></td></tr>
</table>
<p>
As you can see, the init script is maybe generating
lots of considered unnecessary output,
however this is important for being able
to judge why a certain chroot has not been set up
and adds in easy understanding what is happening and what is not.
</p>
<p>
For example, as you can see, a chroot for a given user is only started
if a configuration directory for that chroot could be found.
It can be empty, but it has to exist for the given chroot to be started.
</p>
<p>
Please note that the usage of the init script should be left
up to the discretion of the system administrator.
</p>
<p class="secthead"><a name="doc_chap4_sect2">User management of chroots</a></p>
<p>
Users should be issuing the following script for
starting and stopping their own chroots:
</p>
<a name="doc_chap4_pre3"></a><table class="ntable" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr><td bgcolor="#7a5ada"><p class="codetitle">Code Listing4.3: user maintenance of chroots: stopping chroots</p></td></tr>
<tr><td bgcolor="#eeeeff" align="left" dir="ltr"><pre>
$ sudo /usr/sbin/devel-chroots stop pappy
 * stopping chroot001 of user pappy (/space/devel-chroots/pappy/chroot001)
 * pappy: terminating the following screen sessions: 9371
 * pappy: unmounting chroot filesystems: /space/devel-chroots/pappy/chroot001
 * stopping chroot002 of user pappy (/space/devel-chroots/pappy/chroot002)
 * pappy: unmounting chroot filesystems: /space/devel-chroots/pappy/chroot002
</pre></td></tr>
</table>
<a name="doc_chap4_pre4"></a><table class="ntable" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr><td bgcolor="#7a5ada"><p class="codetitle">Code Listing4.4: user maintenance of chroots: starting chroots</p></td></tr>
<tr><td bgcolor="#eeeeff" align="left" dir="ltr"><pre>
$ sudo /usr/sbin/devel-chroots start pappy  
 * pappy: starting chroot001 in (/space/devel-chroots/pappy/chroot001)
 * pappy: mounting chroot filesystems: /space/devel-chroots/pappy/chroot001
 * pappy: chroot001: creating conf: make.conf
 * pappy: starting chroot002 in (/space/devel-chroots/pappy/chroot002)
 * pappy: mounting chroot filesystems: /space/devel-chroots/pappy/chroot002
 * pappy: chroot002: creating conf: make.conf
 * launching detached screen session for pappy's chroots
</pre></td></tr>
</table>
<p>
Please remember there is no restart command:
</p>
<a name="doc_chap4_pre5"></a><table class="ntable" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr><td bgcolor="#7a5ada"><p class="codetitle">Code Listing4.5: illegal use of restart command for chroot</p></td></tr>
<tr><td bgcolor="#eeeeff" align="left" dir="ltr"><pre>
$ sudo /usr/sbin/devel-chroots restart pappy
 * error: unknown mode: restart
</pre></td></tr>
</table>
<p class="secthead"><a name="doc_chap4_sect3">Final notes</a></p>
<p>
As noted in the init script, for users being able to reattach
to root screen sessions as a user and
use the <span class="code" dir="ltr">acladd</span> command to see who is working with them,
it is necessary to change screen and
the working directory of the screen session sockets.
</p>
<p>
However, this is a cosmetic advantage,
because normally everybody is supposed to be root
on a development system and there is no security restrictions.
</p>
<p>
But on the other hand, having a system of voluntarily
least priviledges used for reconnecting to screen sessions
as an authorized user never hurts, avoids mistakes and problems
and opens up room for cutting down the necessary priviledges
of scripts and users for having their work done!
</p>
<br><p class="copyright">
	The contents of this document, unless otherwise expressly stated, are licensed under the <a href="http://creativecommons.org/licenses/by-sa/2.5">CC-BY-SA-2.5</a> license. The <a href="http://www.gentoo.org/main/en/name-logo.xml"> Gentoo Name and Logo Usage Guidelines </a> apply.
  </p>
<!--
  <rdf:RDF xmlns="http://web.resource.org/cc/"
      xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <License rdf:about="http://creativecommons.org/licenses/by-sa/2.5/">
     <permits rdf:resource="http://web.resource.org/cc/Reproduction" />
     <permits rdf:resource="http://web.resource.org/cc/Distribution" />
     <requires rdf:resource="http://web.resource.org/cc/Notice" />
     <requires rdf:resource="http://web.resource.org/cc/Attribution" />
     <permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
     <requires rdf:resource="http://web.resource.org/cc/ShareAlike" />
  </License>
  </rdf:RDF>
--><br>
</td>
<td width="1%" bgcolor="#dddaec" valign="top"><table border="0" cellspacing="4px" cellpadding="4px">
<tr><td class="topsep" align="center"><p class="altmenu"><a title="View a printer-friendly version" class="altlink" href="devel-chroots-intro.xml?style=printable">Print</a></p></td></tr>
<tr><td class="topsep" align="center"><p class="alttext">Updated December 6, 2006</p></td></tr>
<tr><td class="topsep" align="left"><p class="alttext"><b>Summary: </b>
This guide covers the installation, configuration and set up
of chroots using a tool developed for the Gentoo dev machines.
</p></td></tr>
<tr><td align="left" class="topsep"><p class="alttext">
  <a href="mailto:a.gabert@fh-trier.de" class="altlink"><b>Alexander Gabert</b></a>
<br><i>Author</i><br></p></td></tr>
<tr lang="en"><td align="center" class="topsep">
<p class="alttext"><b>Donate</b> to support our development efforts.
        </p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick"><input type="hidden" name="business" value="paypal@gentoo.org"><input type="hidden" name="item_name" value="Gentoo Linux Support"><input type="hidden" name="item_number" value="1000"><input type="hidden" name="image_url" value="http://www.gentoo.org/images/paypal.png"><input type="hidden" name="no_shipping" value="1"><input type="hidden" name="return" value="http://www.gentoo.org"><input type="hidden" name="cancel_return" value="http://www.gentoo.org"><input type="image" src="http://images.paypal.com/images/x-click-but21.gif" name="submit" alt="Donate to Gentoo">
</form>
</td></tr>
<tr lang="en"><td align="center"><iframe src="http://sidebar.gentoo.org" scrolling="no" width="125" height="850" frameborder="0" style="border:0px padding:0x" marginwidth="0" marginheight="0"><p>Your browser does not support iframes.</p></iframe></td></tr>
</table></td>
</tr></table></td></tr>
<tr><td colspan="2" align="right" class="infohead">
Copyright 2001-2011 Gentoo Foundation, Inc. Questions, Comments? <a class="highlight" href="http://www.gentoo.org/main/en/contact.xml">Contact us</a>.
</td></tr>
</table></body>
</html>