<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PlanetLab | Aqualab - Northwestern University</title><link>https://aqualab.cs.northwestern.edu/tag/planetlab/</link><atom:link href="https://aqualab.cs.northwestern.edu/tag/planetlab/index.xml" rel="self" type="application/rss+xml"/><description>PlanetLab</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Sat, 01 Jan 2005 00:00:00 +0000</lastBuildDate><image><url>https://aqualab.cs.northwestern.edu/media/logo_hu_8646b2b27455bd.png</url><title>PlanetLab</title><link>https://aqualab.cs.northwestern.edu/tag/planetlab/</link></image><item><title>The Nixes Tool Set</title><link>https://aqualab.cs.northwestern.edu/project/nixes/</link><pubDate>Sat, 01 Jan 2005 00:00:00 +0000</pubDate><guid>https://aqualab.cs.northwestern.edu/project/nixes/</guid><description>&lt;div class="article-style"&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Nixes provided a set of bash scripts to install, maintain, control and monitor
applications on &lt;strong&gt;PlanetLab&lt;/strong&gt;. It bootstrapped nodes with &lt;code&gt;yum&lt;/code&gt; and let the user
install RPMs from the PlanetLab distribution. It was designed for simplicity and
performance, and had three parts: the scripts, a configuration file, and a
repository — a public web directory — hosting the application being deployed.&lt;/p&gt;
&lt;p&gt;This is the kind of infrastructure that rarely gets written up but without which
none of the wide-area experiments happen.&lt;/p&gt;
&lt;h2 id="the-tools"&gt;The Tools&lt;/h2&gt;
&lt;p&gt;Every tool took a list of nodes — fully qualified Internet addresses — and
authenticated to them over SSH with a public/private key pair named in the
configuration file.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;plsetup&lt;/code&gt;&lt;/strong&gt; — bootstraps the vserver with &lt;code&gt;yum&lt;/code&gt;, &lt;code&gt;gzip&lt;/code&gt; and Java&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;plinstallrpm&lt;/code&gt;&lt;/strong&gt; — installs RPMs across all nodes, resolving dependencies automatically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;pldeploy&lt;/code&gt;&lt;/strong&gt; — deploys a file structure to the nodes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;plcmd&lt;/code&gt;&lt;/strong&gt; — executes an arbitrary set of commands on all nodes, named by an environment variable holding the script&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of them ran in parallel, thirty threads by default, and wrote a per-node log
into the directory named by &lt;code&gt;TMP&lt;/code&gt;. Only success was reported to the console; a
failure sent you to the logs. Running several tools in parallel yourself was
explicitly discouraged — the logs collide.&lt;/p&gt;
&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;p&gt;A &lt;code&gt;.nixesrc&lt;/code&gt; in the user&amp;rsquo;s home directory configured everything. Options
included the SSH identity, the PlanetLab slice name, the location of the
bootstrap script, and the base location and list of files and executables to
deploy. Options could equally be set in the environment, sharing a namespace
with the file.&lt;/p&gt;
&lt;h2 id="bootstrapping"&gt;Bootstrapping&lt;/h2&gt;
&lt;p&gt;Bootstrapping downloaded a script to each node and ran it, installing &lt;code&gt;yum&lt;/code&gt; so
that any RPM could subsequently be pulled by name. Custom RPMs not on the Red
Hat mirrors could be added at the top of &lt;code&gt;bootstrap.sh&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Java was a special case. Because of Sun&amp;rsquo;s licensing at the time, users had to
download the JDK themselves and host it on a server only they knew about, then
update the location in the bootstrap script — a detail that says a good deal
about the era.&lt;/p&gt;
&lt;h2 id="implementation-and-availability"&gt;Implementation and Availability&lt;/h2&gt;
&lt;p&gt;The scripts were written in bash, with static interleaved scheduling; dynamic
scheduling was noted as a possible improvement that was never made. Nixes was
distributed to users who registered on the lab site, and is no longer available.&lt;/p&gt;
&lt;p&gt;Feedback and bug reports went to Stefan Birrer.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="people"&gt;People&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Lead &amp;amp; PI&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aqualab.cs.northwestern.edu/author/fabian-e.-bustamante/"&gt;Fabián E. Bustamante&lt;/a&gt; (Northwestern University)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Students&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aqualab.cs.northwestern.edu/author/stefan-birrer/"&gt;Stefan Birrer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="related-links"&gt;Related Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aqualab.cs.northwestern.edu/project/edge-measurement/"&gt;Measurement and Experimentation from the Edge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aqualab.cs.northwestern.edu/project/resilient-overlays/"&gt;Resilient Overlays and Multicast&lt;/a&gt; — Nixes supported those wide-area experiments&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description></item></channel></rss>