add section about myplc-devel
authorMark Huang <mlhuang@cs.princeton.edu>
Tue, 18 Jul 2006 22:41:45 +0000 (22:41 +0000)
committerMark Huang <mlhuang@cs.princeton.edu>
Tue, 18 Jul 2006 22:41:45 +0000 (22:41 +0000)
doc/.cvsignore [new file with mode: 0644]
doc/Makefile
doc/myplc.pdf
doc/myplc.php
doc/myplc.xml
doc/plc_devel_variables.xml [new file with mode: 0644]
doc/plc_variables.xml [moved from doc/variables.xml with 86% similarity]

diff --git a/doc/.cvsignore b/doc/.cvsignore
new file mode 100644 (file)
index 0000000..cdb1378
--- /dev/null
@@ -0,0 +1 @@
+*.xml.valid
index 14a62ed..8caff1d 100644 (file)
@@ -4,18 +4,18 @@
 # Mark Huang <mlhuang@cs.princeton.edu>
 # Copyright (C) 2006 The Trustees of Princeton University
 #
-# $Id: Makefile,v 1.3 2006/04/24 22:14:56 mlhuang Exp $
+# $Id: Makefile,v 1.4 2006/04/28 20:16:04 mlhuang Exp $
 #
 
 vpath GenDoc.xsl ../../plc_www/doc
-vpath plc_config.xml ..
+vpath %_config.xml ..
 
 all: myplc.pdf myplc.php
 
 # Dependencies
-.myplc.xml.valid: architecture.eps architecture.png variables.xml
+.myplc.xml.valid: architecture.eps architecture.png plc_variables.xml plc_devel_variables.xml
 
-variables.xml: variables.xsl plc_config.xml
+%_variables.xml: variables.xsl %_config.xml
        xsltproc $(XSLFLAGS) --output $@ $^
 
 # Validate the XML
index d9f9814..f8a636c 100644 (file)
Binary files a/doc/myplc.pdf and b/doc/myplc.pdf differ
index 720182a..fbc314c 100644 (file)
 <div class="toc">
 <p><b>Table of Contents</b></p>
 <dl>
-<dt><span class="section"><a href="#id225357">1. Overview</a></span></dt>
-<dt><span class="section"><a href="#id225202">2. Installation</a></span></dt>
-<dt><span class="section"><a href="#id267666">3. Quickstart</a></span></dt>
+<dt><span class="section"><a href="#id225359">1. Overview</a></span></dt>
+<dt><span class="section"><a href="#Installation">2. Installation</a></span></dt>
+<dt><span class="section"><a href="#id267678">3. Quickstart</a></span></dt>
 <dd><dl>
 <dt><span class="section"><a href="#ChangingTheConfiguration">3.1. Changing the configuration</a></span></dt>
-<dt><span class="section"><a href="#id268167">3.2. Installing nodes</a></span></dt>
-<dt><span class="section"><a href="#id268241">3.3. Administering nodes</a></span></dt>
-<dt><span class="section"><a href="#id268335">3.4. Creating a slice</a></span></dt>
+<dt><span class="section"><a href="#id268186">3.2. Installing nodes</a></span></dt>
+<dt><span class="section"><a href="#id268260">3.3. Administering nodes</a></span></dt>
+<dt><span class="section"><a href="#id268354">3.4. Creating a slice</a></span></dt>
 </dl></dd>
-<dt><span class="appendix"><a href="#id268410">A. Configuration variables</a></span></dt>
-<dt><span class="bibliography"><a href="#id271055">Bibliography</a></span></dt>
+<dt><span class="section"><a href="#id268428">4. Rebuilding and customizing MyPLC</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="#id268453">4.1. Installation</a></span></dt>
+<dt><span class="section"><a href="#id268661">4.2. Fedora Core 4 mirror requirement</a></span></dt>
+<dt><span class="section"><a href="#BuildingMyPLC">4.3. Building MyPLC</a></span></dt>
+<dt><span class="section"><a href="#UpdatingCVS">4.4. Updating CVS</a></span></dt>
+</dl></dd>
+<dt><span class="appendix"><a href="#id269022">A. Configuration variables</a></span></dt>
+<dt><span class="appendix"><a href="#id271727">B. Development environment configuration variables</a></span></dt>
+<dt><span class="bibliography"><a href="#id271809">Bibliography</a></span></dt>
 </dl>
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id225357"></a>1. Overview</h2></div></div></div>
+<a name="id225359"></a>1. Overview</h2></div></div></div>
 <p>MyPLC is a complete PlanetLab Central (PLC) portable
     installation contained within a <span><strong class="command">chroot</strong></span>
     jail. The default installation consists of a web server, an
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id225202"></a>2. Installation</h2></div></div></div>
+<a name="Installation"></a>2. Installation</h2></div></div></div>
 <p>Though internally composed of commodity software
     subpackages, MyPLC should be treated as a monolithic software
     application. MyPLC is distributed as single RPM package that has
     no external dependencies, allowing it to be installed on
     practically any Linux 2.6 based distribution:</p>
 <div class="example">
-<a name="id225260"></a><p class="title"><b>Example 1. Installing MyPLC.</b></p>
+<a name="id225262"></a><p class="title"><b>Example 1. Installing MyPLC.</b></p>
 <pre class="programlisting"># If your distribution supports RPM
-rpm -U myplc-0.3-1.planetlab.i386.rpm
+rpm -U http://build.planet-lab.org/build/myplc-0_4-rc1/RPMS/i386/myplc-0.4-1.planetlab.i386.rpm
 
 # If your distribution does not support RPM
+cd /tmp
+wget http://build.planet-lab.org/build/myplc-0_4-rc1/RPMS/i386/myplc-0.4-1.planetlab.i386.rpm
 cd /
-rpm2cpio myplc-0.3-1.planetlab.i386.rpm | cpio -diu</pre>
+rpm2cpio /tmp/myplc-0.4-1.planetlab.i386.rpm | cpio -diu</pre>
 </div>
 <p>MyPLC installs the following files and directories:</p>
 <div class="itemizedlist"><ul type="disc">
 <li><p><code class="filename">/plc/root.img</code>: The main
       root filesystem of the MyPLC application. This file is an
       uncompressed ext3 filesystem that is loopback mounted on
-      <code class="filename">/plc/root</code> when MyPLC starts. The
-      filesystem, even when mounted, should be treated an opaque
+      <code class="filename">/plc/root</code> when MyPLC starts. This
+      filesystem, even when mounted, should be treated as an opaque
       binary that can and will be replaced in its entirety by any
       upgrade of MyPLC.</p></li>
 <li><p><code class="filename">/plc/root</code>: The mount point
@@ -112,13 +122,14 @@ rpm2cpio myplc-0.3-1.planetlab.i386.rpm | cpio -diu</pre>
 <li>
 <p><code class="filename">/plc/data</code>: The directory where user
        data and generated files are stored. This directory is bind
-       mounted into the <span><strong class="command">chroot</strong></span> jail on
-       <code class="filename">/data</code>. Files in this directory are marked
-       with <span><strong class="command">%config(noreplace)</strong></span> in the RPM. That
-       is, during an upgrade of MyPLC, if a file has not changed
-       since the last installation or upgrade of MyPLC, it is subject
-       to upgrade and replacement. If the file has chanegd, the new
-       version of the file will be created with a
+       mounted onto <code class="filename">/plc/root/data</code> so that it is
+       accessible as <code class="filename">/data</code> from within the
+       <span><strong class="command">chroot</strong></span> jail. Files in this directory are
+       marked with <span><strong class="command">%config(noreplace)</strong></span> in the
+       RPM. That is, during an upgrade of MyPLC, if a file has not
+       changed since the last installation or upgrade of MyPLC, it is
+       subject to upgrade and replacement. If the file has changed,
+       the new version of the file will be created with a
        <code class="filename">.rpmnew</code> extension. Symlinks within the
        MyPLC root filesystem ensure that the following directories
        (relative to <code class="filename">/plc/root</code>) are stored
@@ -183,7 +194,7 @@ service plc stop</pre>
        the <span><strong class="command">chkconfig</strong></span> command on a Red Hat or Fedora
        host system:</p>
 <div class="example">
-<a name="id243542"></a><p class="title"><b>Example 3. Disabling automatic startup of MyPLC.</b></p>
+<a name="id243553"></a><p class="title"><b>Example 3. Disabling automatic startup of MyPLC.</b></p>
 <pre class="programlisting"># Disable automatic startup
 chkconfig plc off
 
@@ -208,13 +219,13 @@ chkconfig plc on</pre>
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id267666"></a>3. Quickstart</h2></div></div></div>
+<a name="id267678"></a>3. Quickstart</h2></div></div></div>
 <p>Once installed, start MyPLC (see <a href="#StartingAndStoppingMyPLC" title="Example 2. Starting and stopping MyPLC.">Example 2, “Starting and stopping MyPLC.”</a>). MyPLC must be started as
     root. Observe the output of this command for any failures. If no
     failures occur, you should see output similar to the
     following:</p>
 <div class="example">
-<a name="id267786"></a><p class="title"><b>Example 4. A successful MyPLC startup.</b></p>
+<a name="id267798"></a><p class="title"><b>Example 4. A successful MyPLC startup.</b></p>
 <pre class="programlisting">Mounting PLC:                                              [  OK  ]
 PLC: Generating network files:                             [  OK  ]
 PLC: Starting system logger:                               [  OK  ]
@@ -245,10 +256,12 @@ PLC: Signing node packages:                                [  OK  ]
       mounts, or your kernel may not support loopback mounting, bind
       mounting, or the ext3 filesystem. Try freeing at least one
       loopback device, or re-compiling your kernel to support loopback
-      mounting, bind mounting, and the ext3 filesystem. SELinux may
-      also be enabled. If you install MyPLC on Fedora Core 4 or 5, use
-      the <span class="application">Security Level Configuration</span>
-      utility to configure SELinux to be
+      mounting, bind mounting, and the ext3 filesystem. If you see an
+      error similar to <code class="literal">Permission denied while trying to open
+      /plc/root.img</code>, then SELinux may be enabled. If you
+      installed MyPLC on Fedora Core 4 or 5, use the
+      <span class="application">Security Level Configuration</span> utility
+      to configure SELinux to be
       <code class="literal">Permissive</code>.</p></li>
 <li><p><code class="literal">Starting database server</code>: If
       this step fails, check
@@ -343,7 +356,7 @@ PLC: Signing node packages:                                [  OK  ]
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id268167"></a>3.2. Installing nodes</h3></div></div></div>
+<a name="id268186"></a>3.2. Installing nodes</h3></div></div></div>
 <p>Install your first node by clicking <code class="literal">Add
       Node</code> under the <code class="literal">Nodes</code> tab. Fill in
       all the appropriate details, then click
@@ -367,12 +380,12 @@ PLC: Signing node packages:                                [  OK  ]
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id268241"></a>3.3. Administering nodes</h3></div></div></div>
+<a name="id268260"></a>3.3. Administering nodes</h3></div></div></div>
 <p>You may administer nodes as <code class="literal">root</code> by
       using the SSH key stored in
       <code class="filename">/etc/planetlab/root_ssh_key.rsa</code>.</p>
 <div class="example">
-<a name="id268263"></a><p class="title"><b>Example 5. Accessing nodes via SSH. Replace
+<a name="id268281"></a><p class="title"><b>Example 5. Accessing nodes via SSH. Replace
        <code class="literal">node</code> with the hostname of the node.</b></p>
 <pre class="programlisting">ssh -i /etc/planetlab/root_ssh_key.rsa root@node</pre>
 </div>
@@ -395,7 +408,7 @@ PLC: Signing node packages:                                [  OK  ]
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id268335"></a>3.4. Creating a slice</h3></div></div></div>
+<a name="id268354"></a>3.4. Creating a slice</h3></div></div></div>
 <p>Create a slice by clicking <code class="literal">Create Slice</code>
       under the <code class="literal">Slices</code> tab. Fill in all the
       appropriate details, then click <code class="literal">Create</code>. Add
@@ -410,7 +423,7 @@ PLC: Signing node packages:                                [  OK  ]
       to determine if it needs to create or delete any slices. You may
       accelerate this process manually if desired.</p>
 <div class="example">
-<a name="id268393"></a><p class="title"><b>Example 6. Forcing slice creation on a node.</b></p>
+<a name="id268412"></a><p class="title"><b>Example 6. Forcing slice creation on a node.</b></p>
 <pre class="programlisting"># Update slices.xml immediately
 service plc start crond
 
@@ -420,9 +433,242 @@ vserver pl_conf exec service pl_conf restart</pre>
 </div>
 </div>
 </div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="id268428"></a>4. Rebuilding and customizing MyPLC</h2></div></div></div>
+<p>The MyPLC package, though distributed as an RPM, is not a
+    traditional package that can be easily rebuilt from SRPM. The
+    requisite build environment is quite extensive and numerous
+    assumptions are made throughout the PlanetLab source code base,
+    that the build environment is based on Fedora Core 4 and that
+    access to a complete Fedora Core 4 mirror is available.</p>
+<p>For this reason, it is recommended that you only rebuild
+    MyPLC (or any of its components) from within the MyPLC development
+    environment. The MyPLC development environment is similar to MyPLC
+    itself in that it is a portable filesystem contained within a
+    <span><strong class="command">chroot</strong></span> jail. The filesystem contains all the
+    necessary tools required to rebuild MyPLC, as well as a snapshot
+    of the PlanetLab source code base in the form of a local CVS
+    repository.</p>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="id268453"></a>4.1. Installation</h3></div></div></div>
+<p>Install the MyPLC development environment similarly to how
+      you would install MyPLC. You may install both packages on the same
+      host system if you wish. As with MyPLC, the MyPLC development
+      environment should be treated as a monolithic software
+      application, and any files present in the
+      <span><strong class="command">chroot</strong></span> jail should not be modified directly, as
+      they are subject to upgrade.</p>
+<div class="example">
+<a name="id268472"></a><p class="title"><b>Example 7. Installing the MyPLC development environment.</b></p>
+<pre class="programlisting"># If your distribution supports RPM
+       rpm -U http://build.planet-lab.org/build/myplc-0_4-rc2/RPMS/i386/myplc-devel-0.4-2.planetlab.i386.rpm
+
+       # If your distribution does not support RPM
+       cd /tmp
+       wget http://build.planet-lab.org/build/myplc-0_4-rc2/RPMS/i386/myplc-devel-0.4-2.planetlab.i386.rpm
+       cd /
+       rpm2cpio /tmp/myplc-devel-0.4-2.planetlab.i386.rpm | cpio -diu</pre>
+</div>
+<p>The MyPLC development environment installs the following
+      files and directories:</p>
+<div class="itemizedlist"><ul type="disc">
+<li><p><code class="filename">/plc/devel/root.img</code>: The
+       main root filesystem of the MyPLC development environment. This
+       file is an uncompressed ext3 filesystem that is loopback mounted
+       on <code class="filename">/plc/devel/root</code> when the MyPLC
+       development environment is initialized. This filesystem, even
+       when mounted, should be treated as an opaque binary that can and
+       will be replaced in its entirety by any upgrade of the MyPLC
+       development environment.</p></li>
+<li><p><code class="filename">/plc/devel/root</code>: The mount
+       point for
+       <code class="filename">/plc/devel/root.img</code>.</p></li>
+<li>
+<p><code class="filename">/plc/devel/data</code>: The directory
+         where user data and generated files are stored. This directory
+         is bind mounted onto <code class="filename">/plc/devel/root/data</code>
+         so that it is accessible as <code class="filename">/data</code> from
+         within the <span><strong class="command">chroot</strong></span> jail. Files in this
+         directory are marked with
+         <span><strong class="command">%config(noreplace)</strong></span> in the RPM. Symlinks
+         ensure that the following directories (relative to
+         <code class="filename">/plc/devel/root</code>) are stored outside the
+         root filesystem image:</p>
+<div class="itemizedlist"><ul type="circle">
+<li><p><code class="filename">/etc/planetlab</code>: This
+           directory contains the configuration files that define your
+           MyPLC development environment.</p></li>
+<li><p><code class="filename">/cvs</code>: A
+           snapshot of the PlanetLab source code is stored as a CVS
+           repository in this directory. Files in this directory will
+           <span class="bold"><strong>not</strong></span> be updated by an upgrade of
+           <code class="filename">myplc-devel</code>. See <a href="#UpdatingCVS" title="4.4. Updating CVS">Section 4.4, “Updating CVS”</a> for more information about updating
+           PlanetLab source code.</p></li>
+<li><p><code class="filename">/build</code>:
+           Builds are stored in this directory. This directory is bind
+           mounted onto <code class="filename">/plc/devel/root/build</code> so that
+           it is accessible as <code class="filename">/build</code> from within the
+           <span><strong class="command">chroot</strong></span> jail. The build scripts in this
+           directory are themselves source controlled; see <a href="#BuildingMyPLC" title="4.3. Building MyPLC">Section 4.3, “Building MyPLC”</a> for more information about executing
+           builds.</p></li>
+</ul></div>
+</li>
+<li><p><code class="filename">/etc/init.d/plc-devel</code>: This file is
+         a System V init script installed on your host filesystem, that
+         allows you to start up and shut down the MyPLC development
+         environment with a single command.</p></li>
+</ul></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="id268661"></a>4.2. Fedora Core 4 mirror requirement</h3></div></div></div>
+<p>The MyPLC development environment requires access to a
+      complete Fedora Core 4 i386 RPM repository, because several
+      different filesystems based upon Fedora Core 4 are constructed
+      during the process of building MyPLC. You may configure the
+      location of this repository via the
+      <code class="envar">PLC_DEVEL_FEDORA_URL</code> variable in
+      <code class="filename">/plc/devel/data/etc/planetlab/plc_config.xml</code>. The
+      value of the variable should be a URL that points to the top
+      level of a Fedora mirror that provides the
+      <code class="filename">base</code>, <code class="filename">updates</code>, and
+      <code class="filename">extras</code> repositories, e.g.,</p>
+<div class="itemizedlist"><ul type="disc">
+<li><p><code class="filename">file:///data/fedora</code></p></li>
+<li><p><code class="filename">http://coblitz.planet-lab.org/pub/fedora</code></p></li>
+<li><p><code class="filename">ftp://mirror.cs.princeton.edu/pub/mirrors/fedora</code></p></li>
+<li><p><code class="filename">ftp://mirror.stanford.edu/pub/mirrors/fedora</code></p></li>
+<li><p><code class="filename">http://rpmfind.net/linux/fedora</code></p></li>
+</ul></div>
+<p>As implied by the list, the repository may be located on
+      the local filesystem, or it may be located on a remote FTP or
+      HTTP server. URLs beginning with <code class="filename">file://</code>
+      should exist at the specified location relative to the root of
+      the <span><strong class="command">chroot</strong></span> jail. For optimum performance and
+      reproducibility, specify
+      <code class="envar">PLC_DEVEL_FEDORA_URL=file:///data/fedora</code> and
+      download all Fedora Core 4 RPMS into
+      <code class="filename">/plc/devel/data/fedora</code> on the host system
+      after installing <code class="filename">myplc-devel</code>. Use a tool
+      such as <span><strong class="command">wget</strong></span> or <span><strong class="command">rsync</strong></span> to
+      download the RPMS from a public mirror:</p>
+<div class="example">
+<a name="id268792"></a><p class="title"><b>Example 8. Setting up a local Fedora Core 4 repository.</b></p>
+<pre class="programlisting">mkdir -p /plc/devel/data/fedora
+cd /plc/devel/data/fedora
+
+for repo in core/4/i386/os core/updates/4/i386 extras/4/i386 ; do
+    wget -m -nH --cut-dirs=3 http://coblitz.planet-lab.org/pub/fedora/linux/$repo
+done</pre>
+</div>
+<p>Change the repository URI and <span><strong class="command">--cut-dirs</strong></span>
+      level as needed to produce a hierarchy that resembles:</p>
+<pre class="programlisting">/plc/devel/data/fedora/core/4/i386/os
+/plc/devel/data/fedora/core/updates/4/i386
+/plc/devel/data/fedora/extras/4/i386</pre>
+<p>A list of additional Fedora Core 4 mirrors is available at
+      <a href="http://fedora.redhat.com/Download/mirrors.html" target="_top">http://fedora.redhat.com/Download/mirrors.html</a>.</p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="BuildingMyPLC"></a>4.3. Building MyPLC</h3></div></div></div>
+<p>All PlanetLab source code modules are built and installed
+      as RPMS. A set of build scripts, checked into the
+      <code class="filename">build/</code> directory of the PlanetLab CVS
+      repository, eases the task of rebuilding PlanetLab source
+      code.</p>
+<p>To build MyPLC, or any PlanetLab source code module, from
+      within the MyPLC development environment, execute the following
+      commands as root:</p>
+<div class="example">
+<a name="id268858"></a><p class="title"><b>Example 9. Building MyPLC.</b></p>
+<pre class="programlisting"># Initialize MyPLC development environment
+service plc-devel start
+
+# Enter development environment
+chroot /plc/devel/root su -
+
+# Check out build scripts into a directory named after the current
+# date. This is simply a convention, it need not be followed
+# exactly. See build/build.sh for an example of a build script that
+# names build directories after CVS tags.
+DATE=$(date +%Y.%m.%d)
+cd /build
+cvs -d /cvs checkout -d $DATE build
+
+# Build everything
+make -C $DATE</pre>
+</div>
+<p>If the build succeeds, a set of binary RPMS will be
+      installed under
+      <code class="filename">/plc/devel/data/build/$DATE/RPMS/</code> that you
+      may copy to the
+      <code class="filename">/var/www/html/install-rpms/planetlab</code>
+      directory of your MyPLC installation (see <a href="#Installation" title="2. Installation">Section 2, “Installation”</a>).</p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="UpdatingCVS"></a>4.4. Updating CVS</h3></div></div></div>
+<p>A complete snapshot of the PlanetLab source code is included
+      with the MyPLC development environment as a CVS repository in
+      <code class="filename">/plc/devel/data/cvs</code>. This CVS repository may
+      be accessed like any other CVS repository. It may be accessed
+      using an interface such as <a href="http://www.freebsd.org/projects/cvsweb.html" target="_top">CVSweb</a>,
+      and file permissions may be altered to allow for fine-grained
+      access control. Although the files are included with the
+      <code class="filename">myplc-devel</code> RPM, they are <span class="bold"><strong>not</strong></span> subject to upgrade once installed. New
+      versions of the <code class="filename">myplc-devel</code> RPM will install
+      updated snapshot repositories in
+      <code class="filename">/plc/devel/data/cvs-%{version}-%{release}</code>,
+      where <code class="literal">%{version}-%{release}</code> is replaced with
+      the version number of the RPM.</p>
+<p>Because the CVS repository is not automatically upgraded,
+      if you wish to keep your local repository synchronized with the
+      public PlanetLab repository, it is highly recommended that you
+      use CVS's support for <a href="http://ximbiot.com/cvs/wiki/index.php?title=CVS--Concurrent_Versions_System_v1.12.12.1:_Tracking_third-party_sources" target="_top">vendor
+      branches</a> to track changes. Vendor branches ease the task
+      of merging upstream changes with your local modifications. To
+      import a new snapshot into your local repository (for example,
+      if you have just upgraded from
+      <code class="filename">myplc-devel-0.4-2</code> to
+      <code class="filename">myplc-devel-0.4-3</code> and you notice the new
+      repository in <code class="filename">/plc/devel/data/cvs-0.4-3</code>),
+      execute the following commands as root from within the MyPLC
+      development environment:</p>
+<div class="example">
+<a name="id268989"></a><p class="title"><b>Example 10. Updating /data/cvs from /data/cvs-0.4-3.</b></p>
+<p><span class="bold"><strong>Warning</strong></span>: This may cause
+       severe, irreversible changes to be made to your local
+       repository. Always tag your local repository before
+       importing.</p>
+<pre class="programlisting"># Initialize MyPLC development environment
+service plc-devel start
+
+# Enter development environment
+chroot /plc/devel/root su -
+
+# Tag current state
+cvs -d /cvs rtag before-myplc-0_4-3-merge
+
+# Export snapshot
+TMP=$(mktemp -d /data/export.XXXXXX)
+pushd $TMP
+cvs -d /data/cvs-0.4-3 export -r HEAD .
+cvs -d /cvs import -m "PlanetLab sources from myplc-0.4-3" -ko -I ! . planetlab myplc-0_4-3
+popd
+rm -rf $TMP</pre>
+</div>
+<p>If there any merge conflicts, use the command suggested by
+      CVS to help the merge. Explaining how to fix merge conflicts is
+      beyond the scope of this document; consult the CVS documentation
+      for more information on how to use CVS.</p>
+</div>
+</div>
 <div class="appendix" lang="en">
 <h2 class="title" style="clear: both">
-<a name="id268410"></a>A. Configuration variables</h2>
+<a name="id269022"></a>A. Configuration variables</h2>
 <p>Listed below is the set of standard configuration variables
     and their default values, defined in the template
     <code class="filename">/etc/planetlab/default_config.xml</code>. Additional
@@ -527,33 +773,6 @@ vserver pl_conf exec service pl_conf restart</pre>
 <p>The SSH private key used to access the root
          account on your nodes.</p>
 </dd>
-<dt><span class="term">PLC_ROOT_CA_SSL_KEY</span></dt>
-<dd>
-<p>
-                 Type: file</p>
-<p>
-                 Default: /etc/planetlab/root_ca_ssl.key</p>
-<p>The SSL private key used for signing all other
-         generated certificates. If non-existent, one will be
-         generated.</p>
-</dd>
-<dt><span class="term">PLC_ROOT_CA_SSL_KEY_PUB</span></dt>
-<dd>
-<p>
-                 Type: file</p>
-<p>
-                 Default: /etc/planetlab/root_ca_ssl.pub</p>
-<p>The corresponding SSL public key.</p>
-</dd>
-<dt><span class="term">PLC_ROOT_CA_SSL_CRT</span></dt>
-<dd>
-<p>
-                 Type: file</p>
-<p>
-                 Default: /etc/planetlab/root_ca_ssl.crt</p>
-<p>The corresponding SSL public
-         certificate.</p>
-</dd>
 <dt><span class="term">PLC_MA_SA_NAMESPACE</span></dt>
 <dd>
 <p>
@@ -574,22 +793,36 @@ vserver pl_conf exec service pl_conf restart</pre>
          with the signature of your MA/SA. If non-existent, one will
          be generated.</p>
 </dd>
-<dt><span class="term">PLC_MA_SA_SSL_KEY_PUB</span></dt>
+<dt><span class="term">PLC_MA_SA_SSL_CRT</span></dt>
 <dd>
 <p>
                  Type: file</p>
 <p>
-                 Default: /etc/planetlab/ma_sa_ssl.pub</p>
-<p>The corresponding SSL public key.</p>
+                 Default: /etc/planetlab/ma_sa_ssl.crt</p>
+<p>The corresponding SSL public certificate. By
+         default, this certificate is self-signed. You may replace
+         the certificate later with one signed by the PLC root
+         CA.</p>
 </dd>
-<dt><span class="term">PLC_MA_SA_SSL_CRT</span></dt>
+<dt><span class="term">PLC_MA_SA_CA_SSL_CRT</span></dt>
 <dd>
 <p>
                  Type: file</p>
 <p>
-                 Default: /etc/planetlab/ma_sa_ssl.crt</p>
-<p>The corresponding SSL public certificate,
-         signed by the root CA.</p>
+                 Default: /etc/planetlab/ma_sa_ca_ssl.crt</p>
+<p>If applicable, the certificate of the PLC root
+         CA. If your MA/SA certificate is self-signed, then this file
+         is the same as your MA/SA certificate.</p>
+</dd>
+<dt><span class="term">PLC_MA_SA_CA_SSL_KEY_PUB</span></dt>
+<dd>
+<p>
+                 Type: file</p>
+<p>
+                 Default: /etc/planetlab/ma_sa_ca_ssl.pub</p>
+<p>If applicable, the public key of the PLC root
+         CA. If your MA/SA certificate is self-signed, then this file
+         is the same as your MA/SA public key.</p>
 </dd>
 <dt><span class="term">PLC_MA_SA_API_CRT</span></dt>
 <dd>
@@ -597,11 +830,11 @@ vserver pl_conf exec service pl_conf restart</pre>
                  Type: file</p>
 <p>
                  Default: /etc/planetlab/ma_sa_api.xml</p>
-<p>The API Certificate for your MA/SA is the SSL
-         public key for your MA/SA embedded in an XML document and
-         signed by the root CA SSL private key. The API Certificate
-         can be used by any PlanetLab node managed by any MA, to
-         verify that your MA/SA public key is valid.</p>
+<p>The API Certificate is your MA/SA public key
+         embedded in a digitally signed XML document. By default,
+         this document is self-signed. You may replace this
+         certificate later with one signed by the PLC root
+         CA.</p>
 </dd>
 <dt><span class="term">PLC_NET_DNS1</span></dt>
 <dd>
@@ -849,8 +1082,21 @@ vserver pl_conf exec service pl_conf restart</pre>
                  Type: file</p>
 <p>
                  Default: /etc/planetlab/api_ssl.crt</p>
-<p>The corresponding SSL public certificate,
-         signed by the root CA.</p>
+<p>The corresponding SSL public certificate. By
+         default, this certificate is self-signed. You may replace
+         the certificate later with one signed by a root
+         CA.</p>
+</dd>
+<dt><span class="term">PLC_API_CA_SSL_CRT</span></dt>
+<dd>
+<p>
+                 Type: file</p>
+<p>
+                 Default: /etc/planetlab/api_ca_ssl.crt</p>
+<p>The certificate of the root CA, if any, that
+         signed your server certificate. If your server certificate is
+         self-signed, then this file is the same as your server
+         certificate.</p>
 </dd>
 <dt><span class="term">PLC_WWW_ENABLED</span></dt>
 <dd>
@@ -923,8 +1169,21 @@ vserver pl_conf exec service pl_conf restart</pre>
                  Type: file</p>
 <p>
                  Default: /etc/planetlab/www_ssl.crt</p>
-<p>The corresponding SSL public certificate,
-         signed by the root CA.</p>
+<p>The corresponding SSL public certificate for
+         the HTTP server. By default, this certificate is
+         self-signed. You may replace the certificate later with one
+         signed by a root CA.</p>
+</dd>
+<dt><span class="term">PLC_WWW_CA_SSL_CRT</span></dt>
+<dd>
+<p>
+                 Type: file</p>
+<p>
+                 Default: /etc/planetlab/www_ca_ssl.crt</p>
+<p>The certificate of the root CA, if any, that
+         signed your server certificate. If your server certificate is
+         self-signed, then this file is the same as your server
+         certificate.</p>
 </dd>
 <dt><span class="term">PLC_BOOT_ENABLED</span></dt>
 <dd>
@@ -980,8 +1239,7 @@ vserver pl_conf exec service pl_conf restart</pre>
 <p>
                  Default: /etc/planetlab/boot_ssl.key</p>
 <p>The SSL private key to use for encrypting HTTPS
-         traffic. If non-existent, one will be
-         generated.</p>
+         traffic.</p>
 </dd>
 <dt><span class="term">PLC_BOOT_SSL_CRT</span></dt>
 <dd>
@@ -989,14 +1247,79 @@ vserver pl_conf exec service pl_conf restart</pre>
                  Type: file</p>
 <p>
                  Default: /etc/planetlab/boot_ssl.crt</p>
-<p>The corresponding SSL public certificate,
-         signed by the root CA.</p>
+<p>The corresponding SSL public certificate for
+         the HTTP server. By default, this certificate is
+         self-signed. You may replace the certificate later with one
+         signed by a root CA.</p>
+</dd>
+<dt><span class="term">PLC_BOOT_CA_SSL_CRT</span></dt>
+<dd>
+<p>
+                 Type: file</p>
+<p>
+                 Default: /etc/planetlab/boot_ca_ssl.crt</p>
+<p>The certificate of the root CA, if any, that
+         signed your server certificate. If your server certificate is
+         self-signed, then this file is the same as your server
+         certificate.</p>
+</dd>
+</dl></div>
+</div>
+<div class="appendix" lang="en">
+<h2 class="title" style="clear: both">
+<a name="id271727"></a>B. Development environment configuration variables</h2>
+<div class="variablelist"><dl>
+<dt><span class="term">PLC_DEVEL_FEDORA_RELEASE</span></dt>
+<dd>
+<p>
+                 Type: string</p>
+<p>
+                 Default: 4</p>
+<p>Version number of Fedora Core upon which to
+         base the build environment. Warning: Currently, only Fedora
+         Core 4 is supported.</p>
+</dd>
+<dt><span class="term">PLC_DEVEL_FEDORA_ARCH</span></dt>
+<dd>
+<p>
+                 Type: string</p>
+<p>
+                 Default: i386</p>
+<p>Base architecture of the build
+         environment. Warning: Currently, only i386 is
+         supported.</p>
+</dd>
+<dt><span class="term">PLC_DEVEL_FEDORA_URL</span></dt>
+<dd>
+<p>
+                 Type: string</p>
+<p>
+                 Default: file:///usr/share/mirrors/fedora</p>
+<p>Fedora Core mirror from which to install
+         filesystems.</p>
+</dd>
+<dt><span class="term">PLC_DEVEL_CVSROOT</span></dt>
+<dd>
+<p>
+                 Type: string</p>
+<p>
+                 Default: /cvs</p>
+<p>CVSROOT to use when checking out code.</p>
+</dd>
+<dt><span class="term">PLC_DEVEL_BOOTSTRAP</span></dt>
+<dd>
+<p>
+                 Type: boolean</p>
+<p>
+                 Default: false</p>
+<p>Controls whether MyPLC should be built inside
+         of its own development environment.</p>
 </dd>
 </dl></div>
 </div>
 <div class="bibliography">
 <div class="titlepage"><div><div><h2 class="title">
-<a name="id271055"></a>Bibliography</h2></div></div></div>
+<a name="id271809"></a>Bibliography</h2></div></div></div>
 <div class="biblioentry">
 <a name="TechsGuide"></a><p>[1] <span class="author"><span class="firstname">Mark</span> <span class="surname">Huang</span>. </span><span class="title"><i><a href="http://www.planet-lab.org/doc/TechsGuide.php" target="_top">PlanetLab
       Technical Contact's Guide</a></i>. </span></p>
index 98e8bc2..e727b7a 100644 (file)
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
 "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
-  <!ENTITY Variables SYSTEM "variables.xml">
+  <!ENTITY Variables SYSTEM "plc_variables.xml">
+  <!ENTITY DevelVariables SYSTEM "plc_devel_variables.xml">
 ]>
 <article>
   <articleinfo>
@@ -76,7 +77,7 @@
     </figure>
   </section>
 
-  <section>
+  <section id="Installation">
     <title>Installation</title>
 
     <para>Though internally composed of commodity software
     <example>
       <title>Installing MyPLC.</title>
 
-       <programlisting><![CDATA[# If your distribution supports RPM
-rpm -U myplc-0.3-1.planetlab.i386.rpm
+      <programlisting><![CDATA[# If your distribution supports RPM
+rpm -U http://build.planet-lab.org/build/myplc-0_4-rc1/RPMS/i386/myplc-0.4-1.planetlab.i386.rpm
 
 # If your distribution does not support RPM
+cd /tmp
+wget http://build.planet-lab.org/build/myplc-0_4-rc1/RPMS/i386/myplc-0.4-1.planetlab.i386.rpm
 cd /
-rpm2cpio myplc-0.3-1.planetlab.i386.rpm | cpio -diu]]></programlisting>
+rpm2cpio /tmp/myplc-0.4-1.planetlab.i386.rpm | cpio -diu]]></programlisting>
     </example>
 
     <para>MyPLC installs the following files and directories:</para>
@@ -103,8 +106,8 @@ rpm2cpio myplc-0.3-1.planetlab.i386.rpm | cpio -diu]]></programlisting>
       <listitem><para><filename>/plc/root.img</filename>: The main
       root filesystem of the MyPLC application. This file is an
       uncompressed ext3 filesystem that is loopback mounted on
-      <filename>/plc/root</filename> when MyPLC starts. The
-      filesystem, even when mounted, should be treated an opaque
+      <filename>/plc/root</filename> when MyPLC starts. This
+      filesystem, even when mounted, should be treated as an opaque
       binary that can and will be replaced in its entirety by any
       upgrade of MyPLC.</para></listitem>
 
@@ -117,13 +120,14 @@ rpm2cpio myplc-0.3-1.planetlab.i386.rpm | cpio -diu]]></programlisting>
       <listitem>
        <para><filename>/plc/data</filename>: The directory where user
        data and generated files are stored. This directory is bind
-       mounted into the <command>chroot</command> jail on
-       <filename>/data</filename>. Files in this directory are marked
-       with <command>%config(noreplace)</command> in the RPM. That
-       is, during an upgrade of MyPLC, if a file has not changed
-       since the last installation or upgrade of MyPLC, it is subject
-       to upgrade and replacement. If the file has chanegd, the new
-       version of the file will be created with a
+       mounted onto <filename>/plc/root/data</filename> so that it is
+       accessible as <filename>/data</filename> from within the
+       <command>chroot</command> jail. Files in this directory are
+       marked with <command>%config(noreplace)</command> in the
+       RPM. That is, during an upgrade of MyPLC, if a file has not
+       changed since the last installation or upgrade of MyPLC, it is
+       subject to upgrade and replacement. If the file has changed,
+       the new version of the file will be created with a
        <filename>.rpmnew</filename> extension. Symlinks within the
        MyPLC root filesystem ensure that the following directories
        (relative to <filename>/plc/root</filename>) are stored
@@ -271,10 +275,12 @@ PLC: Signing node packages:                                [  OK  ]
       mounts, or your kernel may not support loopback mounting, bind
       mounting, or the ext3 filesystem. Try freeing at least one
       loopback device, or re-compiling your kernel to support loopback
-      mounting, bind mounting, and the ext3 filesystem. SELinux may
-      also be enabled. If you install MyPLC on Fedora Core 4 or 5, use
-      the <application>Security Level Configuration</application>
-      utility to configure SELinux to be
+      mounting, bind mounting, and the ext3 filesystem. If you see an
+      error similar to <literal>Permission denied while trying to open
+      /plc/root.img</literal>, then SELinux may be enabled. If you
+      installed MyPLC on Fedora Core 4 or 5, use the
+      <application>Security Level Configuration</application> utility
+      to configure SELinux to be
       <literal>Permissive</literal>.</para></listitem>
 
       <listitem><para><literal>Starting database server</literal>: If
@@ -476,6 +482,279 @@ vserver pl_conf exec service pl_conf restart]]></programlisting>
     </section>
   </section>
 
+  <section>
+    <title>Rebuilding and customizing MyPLC</title>
+
+    <para>The MyPLC package, though distributed as an RPM, is not a
+    traditional package that can be easily rebuilt from SRPM. The
+    requisite build environment is quite extensive and numerous
+    assumptions are made throughout the PlanetLab source code base,
+    that the build environment is based on Fedora Core 4 and that
+    access to a complete Fedora Core 4 mirror is available.</para>
+
+    <para>For this reason, it is recommended that you only rebuild
+    MyPLC (or any of its components) from within the MyPLC development
+    environment. The MyPLC development environment is similar to MyPLC
+    itself in that it is a portable filesystem contained within a
+    <command>chroot</command> jail. The filesystem contains all the
+    necessary tools required to rebuild MyPLC, as well as a snapshot
+    of the PlanetLab source code base in the form of a local CVS
+    repository.</para>
+
+    <section>
+      <title>Installation</title>
+
+      <para>Install the MyPLC development environment similarly to how
+      you would install MyPLC. You may install both packages on the same
+      host system if you wish. As with MyPLC, the MyPLC development
+      environment should be treated as a monolithic software
+      application, and any files present in the
+      <command>chroot</command> jail should not be modified directly, as
+      they are subject to upgrade.</para>
+
+      <example>
+       <title>Installing the MyPLC development environment.</title>
+
+       <programlisting><![CDATA[# If your distribution supports RPM
+       rpm -U http://build.planet-lab.org/build/myplc-0_4-rc2/RPMS/i386/myplc-devel-0.4-2.planetlab.i386.rpm
+
+       # If your distribution does not support RPM
+       cd /tmp
+       wget http://build.planet-lab.org/build/myplc-0_4-rc2/RPMS/i386/myplc-devel-0.4-2.planetlab.i386.rpm
+       cd /
+       rpm2cpio /tmp/myplc-devel-0.4-2.planetlab.i386.rpm | cpio -diu]]></programlisting>
+      </example>
+
+      <para>The MyPLC development environment installs the following
+      files and directories:</para>
+
+      <itemizedlist>
+       <listitem><para><filename>/plc/devel/root.img</filename>: The
+       main root filesystem of the MyPLC development environment. This
+       file is an uncompressed ext3 filesystem that is loopback mounted
+       on <filename>/plc/devel/root</filename> when the MyPLC
+       development environment is initialized. This filesystem, even
+       when mounted, should be treated as an opaque binary that can and
+       will be replaced in its entirety by any upgrade of the MyPLC
+       development environment.</para></listitem>
+
+       <listitem><para><filename>/plc/devel/root</filename>: The mount
+       point for
+       <filename>/plc/devel/root.img</filename>.</para></listitem>
+
+       <listitem>
+         <para><filename>/plc/devel/data</filename>: The directory
+         where user data and generated files are stored. This directory
+         is bind mounted onto <filename>/plc/devel/root/data</filename>
+         so that it is accessible as <filename>/data</filename> from
+         within the <command>chroot</command> jail. Files in this
+         directory are marked with
+         <command>%config(noreplace)</command> in the RPM. Symlinks
+         ensure that the following directories (relative to
+         <filename>/plc/devel/root</filename>) are stored outside the
+         root filesystem image:</para>
+
+         <itemizedlist>
+           <listitem><para><filename>/etc/planetlab</filename>: This
+           directory contains the configuration files that define your
+           MyPLC development environment.</para></listitem>
+           
+           <listitem><para><filename>/cvs</filename>: A
+           snapshot of the PlanetLab source code is stored as a CVS
+           repository in this directory. Files in this directory will
+           <emphasis role="bold">not</emphasis> be updated by an upgrade of
+           <filename>myplc-devel</filename>. See <xref
+           linkend="UpdatingCVS" /> for more information about updating
+           PlanetLab source code.</para></listitem>
+
+           <listitem><para><filename>/build</filename>:
+           Builds are stored in this directory. This directory is bind
+           mounted onto <filename>/plc/devel/root/build</filename> so that
+           it is accessible as <filename>/build</filename> from within the
+           <command>chroot</command> jail. The build scripts in this
+           directory are themselves source controlled; see <xref
+           linkend="BuildingMyPLC" /> for more information about executing
+           builds.</para></listitem>
+         </itemizedlist>
+       </listitem>
+
+       <listitem>
+         <para><filename>/etc/init.d/plc-devel</filename>: This file is
+         a System V init script installed on your host filesystem, that
+         allows you to start up and shut down the MyPLC development
+         environment with a single command.</para>
+       </listitem>
+      </itemizedlist>
+    </section>
+
+    <section>
+      <title>Fedora Core 4 mirror requirement</title>
+
+      <para>The MyPLC development environment requires access to a
+      complete Fedora Core 4 i386 RPM repository, because several
+      different filesystems based upon Fedora Core 4 are constructed
+      during the process of building MyPLC. You may configure the
+      location of this repository via the
+      <envar>PLC_DEVEL_FEDORA_URL</envar> variable in
+      <filename>/plc/devel/data/etc/planetlab/plc_config.xml</filename>. The
+      value of the variable should be a URL that points to the top
+      level of a Fedora mirror that provides the
+      <filename>base</filename>, <filename>updates</filename>, and
+      <filename>extras</filename> repositories, e.g.,</para>
+
+      <itemizedlist>
+       <listitem><para><filename>file:///data/fedora</filename></para></listitem>
+       <listitem><para><filename>http://coblitz.planet-lab.org/pub/fedora</filename></para></listitem>
+       <listitem><para><filename>ftp://mirror.cs.princeton.edu/pub/mirrors/fedora</filename></para></listitem>
+       <listitem><para><filename>ftp://mirror.stanford.edu/pub/mirrors/fedora</filename></para></listitem>
+       <listitem><para><filename>http://rpmfind.net/linux/fedora</filename></para></listitem>
+      </itemizedlist>
+
+      <para>As implied by the list, the repository may be located on
+      the local filesystem, or it may be located on a remote FTP or
+      HTTP server. URLs beginning with <filename>file://</filename>
+      should exist at the specified location relative to the root of
+      the <command>chroot</command> jail. For optimum performance and
+      reproducibility, specify
+      <envar>PLC_DEVEL_FEDORA_URL=file:///data/fedora</envar> and
+      download all Fedora Core 4 RPMS into
+      <filename>/plc/devel/data/fedora</filename> on the host system
+      after installing <filename>myplc-devel</filename>. Use a tool
+      such as <command>wget</command> or <command>rsync</command> to
+      download the RPMS from a public mirror:</para>
+
+      <example>
+       <title>Setting up a local Fedora Core 4 repository.</title>
+       
+       <programlisting><![CDATA[mkdir -p /plc/devel/data/fedora
+cd /plc/devel/data/fedora
+
+for repo in core/4/i386/os core/updates/4/i386 extras/4/i386 ; do
+    wget -m -nH --cut-dirs=3 http://coblitz.planet-lab.org/pub/fedora/linux/$repo
+done]]></programlisting>
+      </example>
+      
+      <para>Change the repository URI and <command>--cut-dirs</command>
+      level as needed to produce a hierarchy that resembles:</para>
+
+      <programlisting><![CDATA[/plc/devel/data/fedora/core/4/i386/os
+/plc/devel/data/fedora/core/updates/4/i386
+/plc/devel/data/fedora/extras/4/i386]]></programlisting>
+
+      <para>A list of additional Fedora Core 4 mirrors is available at
+      <ulink url="http://fedora.redhat.com/Download/mirrors.html">http://fedora.redhat.com/Download/mirrors.html</ulink>.</para>
+    </section>
+
+    <section id="BuildingMyPLC">
+      <title>Building MyPLC</title>
+
+      <para>All PlanetLab source code modules are built and installed
+      as RPMS. A set of build scripts, checked into the
+      <filename>build/</filename> directory of the PlanetLab CVS
+      repository, eases the task of rebuilding PlanetLab source
+      code.</para>
+
+      <para>To build MyPLC, or any PlanetLab source code module, from
+      within the MyPLC development environment, execute the following
+      commands as root:</para>
+
+      <example>
+       <title>Building MyPLC.</title>
+       
+       <programlisting><![CDATA[# Initialize MyPLC development environment
+service plc-devel start
+
+# Enter development environment
+chroot /plc/devel/root su -
+
+# Check out build scripts into a directory named after the current
+# date. This is simply a convention, it need not be followed
+# exactly. See build/build.sh for an example of a build script that
+# names build directories after CVS tags.
+DATE=$(date +%Y.%m.%d)
+cd /build
+cvs -d /cvs checkout -d $DATE build
+
+# Build everything
+make -C $DATE]]></programlisting>
+      </example>
+
+      <para>If the build succeeds, a set of binary RPMS will be
+      installed under
+      <filename>/plc/devel/data/build/$DATE/RPMS/</filename> that you
+      may copy to the
+      <filename>/var/www/html/install-rpms/planetlab</filename>
+      directory of your MyPLC installation (see <xref
+      linkend="Installation" />).</para>
+    </section>
+
+    <section id="UpdatingCVS">
+      <title>Updating CVS</title>
+
+      <para>A complete snapshot of the PlanetLab source code is included
+      with the MyPLC development environment as a CVS repository in
+      <filename>/plc/devel/data/cvs</filename>. This CVS repository may
+      be accessed like any other CVS repository. It may be accessed
+      using an interface such as <ulink
+      url="http://www.freebsd.org/projects/cvsweb.html">CVSweb</ulink>,
+      and file permissions may be altered to allow for fine-grained
+      access control. Although the files are included with the
+      <filename>myplc-devel</filename> RPM, they are <emphasis
+      role="bold">not</emphasis> subject to upgrade once installed. New
+      versions of the <filename>myplc-devel</filename> RPM will install
+      updated snapshot repositories in
+      <filename>/plc/devel/data/cvs-%{version}-%{release}</filename>,
+      where <literal>%{version}-%{release}</literal> is replaced with
+      the version number of the RPM.</para>
+
+      <para>Because the CVS repository is not automatically upgraded,
+      if you wish to keep your local repository synchronized with the
+      public PlanetLab repository, it is highly recommended that you
+      use CVS's support for <ulink
+      url="http://ximbiot.com/cvs/wiki/index.php?title=CVS--Concurrent_Versions_System_v1.12.12.1:_Tracking_third-party_sources">vendor
+      branches</ulink> to track changes. Vendor branches ease the task
+      of merging upstream changes with your local modifications. To
+      import a new snapshot into your local repository (for example,
+      if you have just upgraded from
+      <filename>myplc-devel-0.4-2</filename> to
+      <filename>myplc-devel-0.4-3</filename> and you notice the new
+      repository in <filename>/plc/devel/data/cvs-0.4-3</filename>),
+      execute the following commands as root from within the MyPLC
+      development environment:</para>
+
+      <example>
+       <title>Updating /data/cvs from /data/cvs-0.4-3.</title>
+       
+       <para><emphasis role="bold">Warning</emphasis>: This may cause
+       severe, irreversible changes to be made to your local
+       repository. Always tag your local repository before
+       importing.</para>
+
+       <programlisting><![CDATA[# Initialize MyPLC development environment
+service plc-devel start
+
+# Enter development environment
+chroot /plc/devel/root su -
+
+# Tag current state
+cvs -d /cvs rtag before-myplc-0_4-3-merge
+
+# Export snapshot
+TMP=$(mktemp -d /data/export.XXXXXX)
+pushd $TMP
+cvs -d /data/cvs-0.4-3 export -r HEAD .
+cvs -d /cvs import -m "PlanetLab sources from myplc-0.4-3" -ko -I ! . planetlab myplc-0_4-3
+popd
+rm -rf $TMP]]></programlisting>
+      </example>
+
+      <para>If there any merge conflicts, use the command suggested by
+      CVS to help the merge. Explaining how to fix merge conflicts is
+      beyond the scope of this document; consult the CVS documentation
+      for more information on how to use CVS.</para>
+    </section>
+  </section>
+
   <appendix>
     <title>Configuration variables</title>
 
@@ -489,6 +768,12 @@ vserver pl_conf exec service pl_conf restart]]></programlisting>
     &Variables;
   </appendix>
 
+  <appendix>
+    <title>Development environment configuration variables</title>
+
+    &DevelVariables;
+  </appendix>
+
   <bibliography>
     <title>Bibliography</title>
 
diff --git a/doc/plc_devel_variables.xml b/doc/plc_devel_variables.xml
new file mode 100644 (file)
index 0000000..263aa3c
--- /dev/null
@@ -0,0 +1,58 @@
+<variablelist>
+  <varlistentry>
+    <term>PLC_DEVEL_FEDORA_RELEASE</term>
+    <listitem>
+      <para>
+                 Type: string</para>
+      <para>
+                 Default: 4</para>
+      <para>Version number of Fedora Core upon which to
+         base the build environment. Warning: Currently, only Fedora
+         Core 4 is supported.</para>
+    </listitem>
+  </varlistentry>
+  <varlistentry>
+    <term>PLC_DEVEL_FEDORA_ARCH</term>
+    <listitem>
+      <para>
+                 Type: string</para>
+      <para>
+                 Default: i386</para>
+      <para>Base architecture of the build
+         environment. Warning: Currently, only i386 is
+         supported.</para>
+    </listitem>
+  </varlistentry>
+  <varlistentry>
+    <term>PLC_DEVEL_FEDORA_URL</term>
+    <listitem>
+      <para>
+                 Type: string</para>
+      <para>
+                 Default: file:///usr/share/mirrors/fedora</para>
+      <para>Fedora Core mirror from which to install
+         filesystems.</para>
+    </listitem>
+  </varlistentry>
+  <varlistentry>
+    <term>PLC_DEVEL_CVSROOT</term>
+    <listitem>
+      <para>
+                 Type: string</para>
+      <para>
+                 Default: /cvs</para>
+      <para>CVSROOT to use when checking out code.</para>
+    </listitem>
+  </varlistentry>
+  <varlistentry>
+    <term>PLC_DEVEL_BOOTSTRAP</term>
+    <listitem>
+      <para>
+                 Type: boolean</para>
+      <para>
+                 Default: false</para>
+      <para>Controls whether MyPLC should be built inside
+         of its own development environment.</para>
+    </listitem>
+  </varlistentry>
+</variablelist>
similarity index 86%
rename from doc/variables.xml
rename to doc/plc_variables.xml
index 87a58e2..e0d7806 100644 (file)
          account on your nodes.</para>
     </listitem>
   </varlistentry>
-  <varlistentry>
-    <term>PLC_ROOT_CA_SSL_KEY</term>
-    <listitem>
-      <para>
-                 Type: file</para>
-      <para>
-                 Default: /etc/planetlab/root_ca_ssl.key</para>
-      <para>The SSL private key used for signing all other
-         generated certificates. If non-existent, one will be
-         generated.</para>
-    </listitem>
-  </varlistentry>
-  <varlistentry>
-    <term>PLC_ROOT_CA_SSL_KEY_PUB</term>
-    <listitem>
-      <para>
-                 Type: file</para>
-      <para>
-                 Default: /etc/planetlab/root_ca_ssl.pub</para>
-      <para>The corresponding SSL public key.</para>
-    </listitem>
-  </varlistentry>
-  <varlistentry>
-    <term>PLC_ROOT_CA_SSL_CRT</term>
-    <listitem>
-      <para>
-                 Type: file</para>
-      <para>
-                 Default: /etc/planetlab/root_ca_ssl.crt</para>
-      <para>The corresponding SSL public
-         certificate.</para>
-    </listitem>
-  </varlistentry>
   <varlistentry>
     <term>PLC_MA_SA_NAMESPACE</term>
     <listitem>
     </listitem>
   </varlistentry>
   <varlistentry>
-    <term>PLC_MA_SA_SSL_KEY_PUB</term>
+    <term>PLC_MA_SA_SSL_CRT</term>
     <listitem>
       <para>
                  Type: file</para>
       <para>
-                 Default: /etc/planetlab/ma_sa_ssl.pub</para>
-      <para>The corresponding SSL public key.</para>
+                 Default: /etc/planetlab/ma_sa_ssl.crt</para>
+      <para>The corresponding SSL public certificate. By
+         default, this certificate is self-signed. You may replace
+         the certificate later with one signed by the PLC root
+         CA.</para>
     </listitem>
   </varlistentry>
   <varlistentry>
-    <term>PLC_MA_SA_SSL_CRT</term>
+    <term>PLC_MA_SA_CA_SSL_CRT</term>
     <listitem>
       <para>
                  Type: file</para>
       <para>
-                 Default: /etc/planetlab/ma_sa_ssl.crt</para>
-      <para>The corresponding SSL public certificate,
-         signed by the root CA.</para>
+                 Default: /etc/planetlab/ma_sa_ca_ssl.crt</para>
+      <para>If applicable, the certificate of the PLC root
+         CA. If your MA/SA certificate is self-signed, then this file
+         is the same as your MA/SA certificate.</para>
+    </listitem>
+  </varlistentry>
+  <varlistentry>
+    <term>PLC_MA_SA_CA_SSL_KEY_PUB</term>
+    <listitem>
+      <para>
+                 Type: file</para>
+      <para>
+                 Default: /etc/planetlab/ma_sa_ca_ssl.pub</para>
+      <para>If applicable, the public key of the PLC root
+         CA. If your MA/SA certificate is self-signed, then this file
+         is the same as your MA/SA public key.</para>
     </listitem>
   </varlistentry>
   <varlistentry>
                  Type: file</para>
       <para>
                  Default: /etc/planetlab/ma_sa_api.xml</para>
-      <para>The API Certificate for your MA/SA is the SSL
-         public key for your MA/SA embedded in an XML document and
-         signed by the root CA SSL private key. The API Certificate
-         can be used by any PlanetLab node managed by any MA, to
-         verify that your MA/SA public key is valid.</para>
+      <para>The API Certificate is your MA/SA public key
+         embedded in a digitally signed XML document. By default,
+         this document is self-signed. You may replace this
+         certificate later with one signed by the PLC root
+         CA.</para>
     </listitem>
   </varlistentry>
   <varlistentry>
                  Type: file</para>
       <para>
                  Default: /etc/planetlab/api_ssl.crt</para>
-      <para>The corresponding SSL public certificate,
-         signed by the root CA.</para>
+      <para>The corresponding SSL public certificate. By
+         default, this certificate is self-signed. You may replace
+         the certificate later with one signed by a root
+         CA.</para>
+    </listitem>
+  </varlistentry>
+  <varlistentry>
+    <term>PLC_API_CA_SSL_CRT</term>
+    <listitem>
+      <para>
+                 Type: file</para>
+      <para>
+                 Default: /etc/planetlab/api_ca_ssl.crt</para>
+      <para>The certificate of the root CA, if any, that
+         signed your server certificate. If your server certificate is
+         self-signed, then this file is the same as your server
+         certificate.</para>
     </listitem>
   </varlistentry>
   <varlistentry>
                  Type: file</para>
       <para>
                  Default: /etc/planetlab/www_ssl.crt</para>
-      <para>The corresponding SSL public certificate,
-         signed by the root CA.</para>
+      <para>The corresponding SSL public certificate for
+         the HTTP server. By default, this certificate is
+         self-signed. You may replace the certificate later with one
+         signed by a root CA.</para>
+    </listitem>
+  </varlistentry>
+  <varlistentry>
+    <term>PLC_WWW_CA_SSL_CRT</term>
+    <listitem>
+      <para>
+                 Type: file</para>
+      <para>
+                 Default: /etc/planetlab/www_ca_ssl.crt</para>
+      <para>The certificate of the root CA, if any, that
+         signed your server certificate. If your server certificate is
+         self-signed, then this file is the same as your server
+         certificate.</para>
     </listitem>
   </varlistentry>
   <varlistentry>
       <para>
                  Default: /etc/planetlab/boot_ssl.key</para>
       <para>The SSL private key to use for encrypting HTTPS
-         traffic. If non-existent, one will be
-         generated.</para>
+         traffic.</para>
     </listitem>
   </varlistentry>
   <varlistentry>
                  Type: file</para>
       <para>
                  Default: /etc/planetlab/boot_ssl.crt</para>
-      <para>The corresponding SSL public certificate,
-         signed by the root CA.</para>
+      <para>The corresponding SSL public certificate for
+         the HTTP server. By default, this certificate is
+         self-signed. You may replace the certificate later with one
+         signed by a root CA.</para>
+    </listitem>
+  </varlistentry>
+  <varlistentry>
+    <term>PLC_BOOT_CA_SSL_CRT</term>
+    <listitem>
+      <para>
+                 Type: file</para>
+      <para>
+                 Default: /etc/planetlab/boot_ca_ssl.crt</para>
+      <para>The certificate of the root CA, if any, that
+         signed your server certificate. If your server certificate is
+         self-signed, then this file is the same as your server
+         certificate.</para>
     </listitem>
   </varlistentry>
 </variablelist>