<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Aeturnalus</title>
	<atom:link href="http://aeturnalus.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://aeturnalus.com</link>
	<description>Vita, Semper Eternus</description>
	<lastBuildDate>Sat, 05 May 2012 15:13:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Hacking SCM Creator and Redmine Git Hosting to Cooperate with one another</title>
		<link>http://aeturnalus.com/software/hacking-scm-creator-redmine-git-hosting-cooperate/</link>
		<comments>http://aeturnalus.com/software/hacking-scm-creator-redmine-git-hosting-cooperate/#comments</comments>
		<pubDate>Sat, 05 May 2012 15:00:09 +0000</pubDate>
		<dc:creator>Robert Ying</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[redmine]]></category>
		<category><![CDATA[redmine git hosting]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scm creator]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://aeturnalus.com/?p=1383</guid>
		<description><![CDATA[Introduction If you&#8217;ve been following along my other tutorials, you&#8217;ve probably noticed that the SCM Creator and Redmine Git Hosting plugins really just don&#8217;t want to cooperate one another. The conflict here is that they both override the same method &#8230; <a href="http://aeturnalus.com/software/hacking-scm-creator-redmine-git-hosting-cooperate/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p>If you&#8217;ve been following along my other tutorials, you&#8217;ve probably noticed that the SCM Creator and Redmine Git Hosting plugins really just don&#8217;t want to cooperate one another. The conflict here is that they both override the same method (RepositoriesController#edit), so that while they appear to work on the surface (the correct menu shows up for each), the Git repository creation results in a 500 error message in AJAX, and the repository is not created. It turns out that, due to the internal implementations of these plugins, fixing this problem isn&#8217;t terribly hard, although it does involve editing two lines in the plugin files directly.<br />
<span id="more-1383"></span></p>
<h3>Assumptions</h3>
<ol>
<li>SCM Creator is installed in /usr/share/redmine/vendor/plugins/scm_creator, as per <a href="http://aeturnalus.com/software/svn-repository-management-redmine-ubuntu-12-04/">my guide here</a></li>
<li>Redmine Git Hosting is installed in /usr/share/redmine/vendor/plugins/redmine_git_hosting, as per <a href="http://aeturnalus.com/software/redmine-git-hosting-setup-ubuntu-12-04-lts/">my guide here</a></li>
<li>You want to use SCM Creator for everything that is not Git, and Redmine Git Hosting to handle all of the Git requests on its own</li>
</ol>
<h3>Fixing the Problem</h3>
<p><strong>Modifications to SCM Creator</strong></p>
<p>Edit the /usr/share/redmine/vendor/plugins/scm_creator/lib/scm_repositories_controller_patch.rb and find the lines that look like this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">included</span><span style="color:#006600; font-weight:bold;">&#40;</span>base<span style="color:#006600; font-weight:bold;">&#41;</span>
    base.<span style="color:#9900CC;">extend</span><span style="color:#006600; font-weight:bold;">&#40;</span>ClassMethods<span style="color:#006600; font-weight:bold;">&#41;</span>
    base.<span style="color:#9900CC;">send</span><span style="color:#006600; font-weight:bold;">&#40;</span>:<span style="color:#9966CC; font-weight:bold;">include</span>, InstanceMethods<span style="color:#006600; font-weight:bold;">&#41;</span>
    base.<span style="color:#9900CC;">class_eval</span> <span style="color:#9966CC; font-weight:bold;">do</span>
        unloadable
        before_filter <span style="color:#ff3333; font-weight:bold;">:delete_scm</span>, <span style="color:#ff3333; font-weight:bold;">:only</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:destroy</span>
        alias_method <span style="color:#ff3333; font-weight:bold;">:edit</span>, <span style="color:#ff3333; font-weight:bold;">:edit_with_add</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>The important line here is the one contains &#8220;alias_method :edit, :edit_with_add&#8221;, as it&#8217;s what&#8217;s causing the conflict. Just comment it out for now&mdash;it&#8217;s used to add the repository in the plugin architecture, so we&#8217;ll need to make sure the edit_with_add method is called at some point.</p>
<p>It should now look like this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">included</span><span style="color:#006600; font-weight:bold;">&#40;</span>base<span style="color:#006600; font-weight:bold;">&#41;</span>
    base.<span style="color:#9900CC;">extend</span><span style="color:#006600; font-weight:bold;">&#40;</span>ClassMethods<span style="color:#006600; font-weight:bold;">&#41;</span>
    base.<span style="color:#9900CC;">send</span><span style="color:#006600; font-weight:bold;">&#40;</span>:<span style="color:#9966CC; font-weight:bold;">include</span>, InstanceMethods<span style="color:#006600; font-weight:bold;">&#41;</span>
    base.<span style="color:#9900CC;">class_eval</span> <span style="color:#9966CC; font-weight:bold;">do</span>
        unloadable
        before_filter <span style="color:#ff3333; font-weight:bold;">:delete_scm</span>, <span style="color:#ff3333; font-weight:bold;">:only</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:destroy</span>
        <span style="color:#008000; font-style:italic;"># alias_method :edit, :edit_with_add</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p><strong>Modifications to Redmine Git Hosting</strong></p>
<p>Once again, this is a one line change:<br />
Edit /usr/share/redmine/vendor/plugins/redmine_git_hosting/lib/git_hosting/patches/repositories_controller_patch.rb and find the block that looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">else</span>
    edit_without_scm_settings
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Replace &#8220;edit_without_scm_settings&#8221; with &#8220;edit_with_add&#8221;, like so:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">else</span>
    <span style="color:#008000; font-style:italic;"># edit_without_scm_settings</span>
    edit_with_add
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>This ensures that there is now a process chain that first goes to the Redmine Git Hosting plugin, which will only activate if the repository is a Git repository or if the Git option is selected in the repository settings menu. If it is not a Git repository, it will forward the request on to SCM Creator&#8217;s edit_with_add method, which can handle all the other repository types.</p>
<p>I have only tested this fix with SVN, as I don&#8217;t use the other types of repositories, but there should be no conflicts: just make sure NOT to configure git in SCM Creator&#8217;s scm.yml, as that will cause further conflicts between the two systems.</p>
]]></content:encoded>
			<wfw:commentRss>http://aeturnalus.com/software/hacking-scm-creator-redmine-git-hosting-cooperate/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SVN Repository Management with Redmine on Ubuntu 12.04</title>
		<link>http://aeturnalus.com/software/svn-repository-management-redmine-ubuntu-12-04/</link>
		<comments>http://aeturnalus.com/software/svn-repository-management-redmine-ubuntu-12-04/#comments</comments>
		<pubDate>Thu, 03 May 2012 20:06:18 +0000</pubDate>
		<dc:creator>Robert Ying</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[12.04]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[mod_perl]]></category>
		<category><![CDATA[precise pangolin]]></category>
		<category><![CDATA[redmine]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[virtualmin]]></category>

		<guid isPermaLink="false">http://aeturnalus.com/?p=1372</guid>
		<description><![CDATA[Introduction Managing repository management is always a hassle for network administrators, as it usually involves going into into the shell to create the repository itself. Redmine solves this problem using reposman.rb, which can be run regularly by a cronjob and &#8230; <a href="http://aeturnalus.com/software/svn-repository-management-redmine-ubuntu-12-04/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p>Managing repository management is always a hassle for network administrators, as it usually involves going into into the shell to create the repository itself.</p>
<p>Redmine solves this problem using reposman.rb, which can be run regularly by a cronjob and thus automate repository creation. But this is still inconvenient&mdash;you still need to wait for the repository to be created, and you can only manage one type of SCM at once. Thus, we are going to install and configure the <a href="http://projects.andriylesyuk.com/projects/scm-creator">Redmine SCM Creator</a> plugin to manage repository creation for us. </p>
<p>This tutorial is oriented primarily towards setting up SVN repository creation, as git repository management is better done by the Redmine Git Hosting plugin (<a href="http://aeturnalus.com/software/redmine-git-hosting-setup-ubuntu-12-04-lts/">Setup Guide</a>). For instructions on how to set up Redmine, visit <a href="http://aeturnalus.com/software/installing-redmine-ubuntu-12-04-virtualmin/">this tutorial</a> before continuing on.<br />
<span id="more-1372"></span><br />
Once again, this tutorial will assume that you are running all commands from the root user, unless otherwise noted. Do NOT use the root user as your primary account, it should be restricted to setup and administration only.</p>
<h3>Step 1: Setting up the SVN repository location</h3>
<p>We&#8217;ll start by creating the SVN repository hosting location at /var/svn, and setting it to the correct permissions:</p>
<pre>
$ mkdir /var/svn
$ chown www-data:www-data /var/svn
$ chmod 755 /var/svn
</pre>
<h3>Step 2: Creating the Redmine SVN Creator Configuration File</h3>
<p>Edit the file at /usr/share/redmine/config/scm.yml, and set its contents as follows:</p>
<pre>
$ cat /usr/share/redmine/config/scm.yml
production:
  auto_create: false
  deny_delete: false
  pre_create: /usr/local/bin/pre-create.sh
  post_create: /usr/local/bin/post-create.sh
  pre_delete: /usr/local/bin/pre-delete.sh
  post_delete: /usr/local/bin/post-delete.sh
  svn:
    path: /var/svn
    svnadmin: /usr/bin/svnadmin
    url: svn
</pre>
<p>For more information about the configuration options, visit <a href="projects.andriylesyuk.com/projects/scm-creator/wiki/Configuration">this wiki page</a></p>
<h3> Step 3: Installing the plugin</h3>
<p>We&#8217;re now actually going to install this plugin into redmine:</p>
<pre>
$ cd /usr/share/redmine/
$ ./script/plugin install http://svn.s-andy.com/scm-creator
$ rake db:migrate_plugins RAILS_ENV=production
</pre>
<p>Restart apache to see if this plugin installed properly:</p>
<pre>
$ service apache2 restart
</pre>
<p>Now, if you create a new project and go to the Project&rarr;Settings&rarr;Repositories tab, you should be able to select &#8220;Subversion&#8221; and create a repository.</p>
<h3>Step 4: Setting up SVN with WebDAV, Apache, and Redmine authentication</h3>
<p><strong>Installing packages</strong></p>
<p>Start by getting the required packages to configure SVN through Apache:</p>
<pre>
$ apt-get install libapache2-svn libapache-dbi-perl libapache2-mod-perl2 libdbd-mysql-perl libdigest-sha-perl libauthen-simple-ldap-perl
</pre>
<p>Enable SVN via WebDAV:</p>
<pre>
$ a2enmod dav
$ a2enmod dav_svn
$ a2enmod perl
</pre>
<p><strong>Set up authentication</strong></p>
<p>Link the the Redmine authentication module to Apache, so we can load it the configuration file.</p>
<pre>
$ ln -s /usr/share/redmine/extra/svn/Redmine.pm /usr/lib/perl5/Apache/Redmine.pm
</pre>
<p>Configure Apache to serve SVN in redmine.example.com/svn:</p>
<pre>
$ cat /etc/apache2/sites-available/redmine.example.com.conf
PerlLoadModule Apache::Redmine

&lt;VirtualHost your-server-ip:80&gt;
  SuexecUserGroup "#1012" "#1012" # fill these in from the automatically generated values in the config file
  ServerName redmine.example.com
  ErrorLog /var/log/virtualmin/redmine.example.com_error_log
  CustomLog /var/log/virtualmin/redmine.example.com_access_log combined

  DocumentRoot "/usr/share/redmine/public"
  PassengerResolveSymlinksInDocumentRoot on
  Options Indexes ExecCGI FollowSymLinks

  &lt;Location /svn&gt;
    DAV svn
    SVNParentPath "/var/svn"
    Order deny,allow
    Deny from all
    Satisfy any

    PerlAccessHandler Apache::Authn::Redmine::access_handler
    PerlAuthenHandler Apache::Authn::Redmine::authen_handler
    AuthType Basic
    AuthName redmine

    &lt;Limit GET PROPFIND OPTIONS REPORT&gt;
      Require valid-user
      Allow from server-ip-address
      Satisfy any
    &lt;/Limit&gt;
    &lt;LimitExcept GET PROPFIND OPTIONS REPORT&gt;
      Require valid-user
    &lt;/LimitExcept&gt;

    RedmineDSN "DBI:mysql:database=redmine_default;host=localhost"
    RedmineDbUser "redmine"
    RedmineDbPass "redmine-db-password"
  &lt;/Location&gt;
&lt;/VirtualHost&gt;
</pre>
<p>Replace redmine, redmine_default, and redmine-db-password with the appropriate values for your configuration.</p>
<h3>Step 5: Add a cronjob to regularly update the repository listings</h3>
<p>Redmine normally only checks for updates to the repository when you access the project &#8216;repository&#8217; tab, which can be somewhat clumsy when you want to see the repository updates in closer to real time. Thus, we will setup a regular cronjob to fetch new updates every minute:</p>
<p><strong>Enable WS for repository management</strong></p>
<p>Go to Administration&rarr;Settings&rarr;Repositories, and check &#8220;Enable WS for repository management&#8221;, and generate a random API key for use later.</p>
<p>Edit the crontab with the following command:</p>
<pre>
$ crontab -e
</pre>
<p>and add the following line to the end:</p>
<pre>
* * * * * curl "http://redmine.example.com/sys/fetch_changesets?key=API-KEY" > /dev/null 2>&#038;1
</pre>
<p>Make sure that you have curl installed with the following command:</p>
<pre>
$ apt-get install curl
</pre>
<p>Save the crontab, and you&#8217;re done with this step.</p>
<h3>Restart Apache and have fun!</h3>
<p>At this point, you have a working SVN repository creation and authentication system, synchronized with and controlled by Redmine. You should be able to check out the project repositories at http://redmine.example.com/svn/[project-identifier], and track the progress of the repository within Redmine.  </p>
<h3>What&#8217;s next?</h3>
<p>If you would also like to put together a fully functional Git hosting solution, check out <a href="http://aeturnalus.com/software/redmine-git-hosting-setup-ubuntu-12-04-lts/">http://aeturnalus.com/software/redmine-git-hosting-setup-ubuntu-12-04-lts/</a></p>
<p>Note that you will have to resolve conflicts between the two plugins as per <a href="http://aeturnalus.com/software/hacking-scm-creator-redmine-git-hosting-cooperate/">http://aeturnalus.com/software/hacking-scm-creator-redmine-git-hosting-cooperate/</a>, but it&#8217;s a fairly simple fix.</p>
]]></content:encoded>
			<wfw:commentRss>http://aeturnalus.com/software/svn-repository-management-redmine-ubuntu-12-04/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Redmine Git Hosting Setup on Ubuntu 12.04 LTS</title>
		<link>http://aeturnalus.com/software/redmine-git-hosting-setup-ubuntu-12-04-lts/</link>
		<comments>http://aeturnalus.com/software/redmine-git-hosting-setup-ubuntu-12-04-lts/#comments</comments>
		<pubDate>Wed, 02 May 2012 06:31:01 +0000</pubDate>
		<dc:creator>Robert Ying</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[12.04]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[precise pangolin]]></category>
		<category><![CDATA[redmine]]></category>
		<category><![CDATA[smart http]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://aeturnalus.com/?p=1353</guid>
		<description><![CDATA[Introduction Redmine Git Hosting is a plugin for Redmine authored by Eric Bishop, which integrates the Git SCM system into Redmine&#8217;s project management system. At the end of this guide, you will have a server which can, from the Redmine &#8230; <a href="http://aeturnalus.com/software/redmine-git-hosting-setup-ubuntu-12-04-lts/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p><a href="https://github.com/ericpaulbishop/redmine_git_hosting">Redmine Git Hosting</a> is a plugin for Redmine authored by Eric Bishop, which integrates the Git SCM system into Redmine&#8217;s project management system. At the end of this guide, you will have a server which can, from the Redmine GUI,</p>
<ul>
<li>Create git repositories for projects</li>
<li>Serve git repositories via SSH, GIT, and HTTP(S)</li>
<li>Add users to git repositories</li>
</ul>
<p>This guide is a continuation of the one <a href="http://aeturnalus.com/software/installing-redmine-ubuntu-12-04-virtualmin/">here</a>, which shows how to install and configure Redmine in Ubuntu with Virtualmin.<br />
<span id="more-1353"></span></p>
<h3>Step 1: Get Gitolite</h3>
<p>Gitolite is in the Ubuntu repositories, so just apt-get it.</p>
<pre>
$ apt-get install gitolite
</pre>
<h3>Step 2: Configure Gitolite</h3>
<p>The gitolite package needs to be reconfigured in order for it to finish setup.</p>
<p>In order for the gitolite setup to work properly, we need to generate a key for the gitolite user before we actually set it up.</p>
<pre>
$ cd /tmp
$ ssh-keygen -t rsa -f /tmp/id_rsa
</pre>
<p>Do not give it a passphrase</p>
<pre>
$ dpkg-reconfigure gitolite
</pre>
<p>Use the default username and path, and give it /tmp/id_rsa.pub for the &#8220;Administrator&#8217;s SSH Key&#8221;</p>
<p>Copy the RSA keys into the gitolite user&#8217;s .ssh folder for safekeeping:</p>
<pre>
$ cp /tmp/id_rsa* /var/lib/gitolite/.ssh
$ chown gitolite:gitolite /var/lib/gitolite/.ssh/*
$ chmod 600 /var/lib/gitolite/.ssh/id_rsa
$ chmod 644 /var/lib/gitolite/.ssh/id_rsa.pub
</pre>
<h3>Step 3: Configure redmine&#8217;s SSH keys</h3>
<p>Copy the RSA keys into a place where redmine can handle them:</p>
<pre>
$ mkdir /usr/share/redmine/.ssh
$ cp /var/lib/gitolite/.ssh/id_rsa* /usr/share/redmine/.ssh/
$ cd /usr/share/redmine/
$ mv .ssh/id_rsa .ssh/gitolite_admin_id_rsa
$ mv .ssh/id_rsa.pub .ssh/gitolite_admin_id_rsa.pub
$ chown www-data:www-data -R .ssh
$ chmod 700 .ssh
$ chmod 600 .ssh/gitolite_admin_id_rsa
$ chmod 644 .ssh/gitolite_admin_id_rsa.pub
</pre>
<h3>Step 4: Install the redmine_git_hosting plugin</h3>
<p><strong>Install the plugin</strong></p>
<pre>
$ cd /usr/share/redmine
$ mkdir public/plugin_assets
$ chown -R www-data:www-data public/plugin_assets
$ chmod -R 777 public/plugin_assets
$ gem install lockfile net-ssh rdoc inifile
$ ./script/plugin install https://github.com/ericpaulbishop/redmine_git_hosting.git
</pre>
<p>Edit the init file at /usr/share/redmine/vendor/plugins/redmine_git_hosting/init.rb<br />
Change &#8216;httpServer&#8217; to &#8216;redmine.example.com&#8217;<br />
Change &#8216;gitServer&#8217; to &#8216;redmine.example.com&#8217;<br />
Change &#8216;gitUser&#8217; to &#8216;gitolite&#8217;</p>
<p><strong>Migrate the databases</strong></p>
<pre>
$ rake db:migrate_plugins RAILS_ENV=production
</pre>
<p><strong>Link the plugin assets files</strong></p>
<pre>
$ cd /usr/share/redmine/public/plugin_assets
$ ln -s ../../vendor/plugins/redmine_git_hosting/assets ./redmine_git_hosting
</pre>
<h3>Step 5: Add www-data to the sudoers file</h3>
<pre>
$ visudo
</pre>
<p>Add these lines:</p>
<pre>
www-data    ALL=(gitolite) NOPASSWD:ALL
gitolite    ALL=(www-data) NOPASSWD:ALL
</pre>
<h3>Step 6: Restart Apache</h3>
<pre>
$ service apache2 restart
</pre>
<h3>Step 7: Configure redmine settings</h3>
<p>Log in to redmine and navigate to Administration&rarr;Plugins&rarr;Redmine Git Hosting Plugin&rarr;Configure</p>
<p>Set <em>Automatically Initialize Git Repositories</em> if you want to automatically create a new git repository when you create a project. This conflicts with using redmine for other types of repositories, though, so use it with caution.</p>
<h3>You&#8217;re done!</h3>
<p>Yay, you&#8217;re done! You have a fully working project management system, which can integrate with git and provide you with a git repository accessible through read-only git://, SSH, and Smart HTTP. For SSH, public-key authentication is used: you can upload your public key as part of your redmine user profile. For those less inclined to use SSH (for whatever reason), Smart HTTP is also configured by default, and can be logged in with your Redmine user credentials.</p>
<p>If you have any issues, make sure that you restart apache (and with it, Rails):</p>
<pre>
$ service apache2 restart
</pre>
<p>before debugging&mdash;this has resolved many a configuration issue. Note that unless you have set up a proper SSL certificate, git will refuse to clone from your repository over HTTPS (it gives a TLS error), so just enable Smart HTTP hosting on both HTTP and HTTPS in the Project&rarr;Settings&rarr;Repositories section.</p>
<h3>What&#8217;s next?</h3>
<p>If you would also like to put together a fully functional SVN hosting solution, check out <a href="http://aeturnalus.com/software/svn-repository-management-redmine-ubuntu-12-04/">http://aeturnalus.com/software/svn-repository-management-redmine-ubuntu-12-04/</a></p>
<p>Note that you will have to resolve conflicts between the two plugins as per <a href="http://aeturnalus.com/software/hacking-scm-creator-redmine-git-hosting-cooperate/">http://aeturnalus.com/software/hacking-scm-creator-redmine-git-hosting-cooperate/</a>, but it&#8217;s a fairly simple fix.</p>
]]></content:encoded>
			<wfw:commentRss>http://aeturnalus.com/software/redmine-git-hosting-setup-ubuntu-12-04-lts/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Installing Redmine in Ubuntu 12.04 with Virtualmin</title>
		<link>http://aeturnalus.com/software/installing-redmine-ubuntu-12-04-virtualmin/</link>
		<comments>http://aeturnalus.com/software/installing-redmine-ubuntu-12-04-virtualmin/#comments</comments>
		<pubDate>Fri, 27 Apr 2012 22:55:33 +0000</pubDate>
		<dc:creator>Robert Ying</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[12.04]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[precise pangolin]]></category>
		<category><![CDATA[redmine]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[virtualmin]]></category>

		<guid isPermaLink="false">http://aeturnalus.com/?p=1331</guid>
		<description><![CDATA[Introduction Installing Redmine is relatively simple on Ubuntu / Debian servers as compared to any other operating system, due to its inclusion into the APT repositories. As before, all terminal commands below are assumed to be executed from the root &#8230; <a href="http://aeturnalus.com/software/installing-redmine-ubuntu-12-04-virtualmin/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p>Installing Redmine is relatively simple on Ubuntu / Debian servers as compared to any other operating system, due to its inclusion into the APT repositories. As before, all terminal commands below are assumed to be executed from the root user via SSH.<br />
<span id="more-1331"></span></p>
<h3>Step One: Creating a Virtualmin Subserver</h3>
<p>This part is pretty much self-explanatory: create a new subserver named &#8220;redmine.example.com&#8221; under the server &#8220;example.com&#8221; from the Virtualmin dashboard.</p>
<h3>Step Two: Installing the packages</h3>
<p>Through the wonder of apt-get, just follow the prompts given after the command below:</p>
<pre>
$ apt-get install redmine redmine-mysql libapache2-mod-passenger
</pre>
<p>Then, activate mod_passenger and mod_rewrite:</p>
<pre>
$ a2enmod passenger rewrite
</pre>
<h3>Step Three: Configuring Apache</h3>
<p>Virtualmin should have created a new virtualhost for you in /etc/apache2/sites-enabled/ named redmine.example.com.conf. Edit it, and replace its contents with something like the following:</p>
<pre>
&lt;VirtualHost your-ip-here:80&gt;
  SuexecUserGroup "#1010" "#1010"
  ServerName redmine.example.com
  DocumentRoot "/usr/share/redmine/public"
  PassengerResolveSymlinksInDocumentRoot on
  Options Indexes ExecCGI FollowSymlinks
  ErrorLog /var/log/virtualmin/redmine.example.com_error_log
  CustomLog /var/log/virtualmin/redmine.example.com_access_log combined
&lt;/VirtualHost&gt;
</pre>
<h3>Step Four: Configure Redmine</h3>
<p>edit /etc/redmine/default/configuration.yml and add:</p>
<pre>
production:
 email_delivery:
  delivery_method: :sendmail
</pre>
<p>note the : in front of sendmail.</p>
<h3>Step Five: Reload Apache</h3>
<pre>
$ service apache2 reload
</pre>
<h3>Step Six: Configure Redmine</h3>
<p>Navigate to http://redmine.example.com and log in with the default admin / admin credentials. Change these via the &#8220;My Account&#8221; link, and then go to Administration&rarr;Settings and change the hostname from &#8220;localhost:3000&#8243; to &#8220;redmine.example.com&#8221;</p>
<h3>Further Configuration</h3>
<p>At this point, you have a working Redmine install, which you can associate with repositories and begin work on. However, for a more complete system, visit the following tutorials:</p>
<p>Git: (better)</p>
<ul>
<li><a href="http://aeturnalus.com/software/redmine-git-hosting-setup-ubuntu-12-04-lts/">Setting up Redmine Git Hosting</a></li>
</ul>
<p>SVN:</p>
<ul>
<li><a href="http://aeturnalus.com/software/svn-repository-management-redmine-ubuntu-12-04/">Setting up Redmine SVN Hosting</a></li>
</ul>
<p>Both of these methods can be configured in the same Redmine install, but you will have to resolve conflicts between them as per <a href="http://aeturnalus.com/software/hacking-scm-creator-redmine-git-hosting-cooperate/">http://aeturnalus.com/software/hacking-scm-creator-redmine-git-hosting-cooperate/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://aeturnalus.com/software/installing-redmine-ubuntu-12-04-virtualmin/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Setting up a Virtualmin-controlled Ubuntu 12.04 LTS Precise Pangolin server on Linode</title>
		<link>http://aeturnalus.com/software/setting-virtualmin-controlled-ubuntu-12-04-lts-precise-pangolin-server-linode/</link>
		<comments>http://aeturnalus.com/software/setting-virtualmin-controlled-ubuntu-12-04-lts-precise-pangolin-server-linode/#comments</comments>
		<pubDate>Fri, 27 Apr 2012 22:15:55 +0000</pubDate>
		<dc:creator>Robert Ying</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[bind9]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[linode]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[precise pangolin]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://aeturnalus.com/?p=1327</guid>
		<description><![CDATA[Introduction Linode is one of the best low-cost Virtual Private Server Hosts available, offering Xen VPS Hosting for a number of popular operating systems. With the release of Ubuntu 12.04 LTS, I felt that it was past time that I &#8230; <a href="http://aeturnalus.com/software/setting-virtualmin-controlled-ubuntu-12-04-lts-precise-pangolin-server-linode/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p><a href="http://linode.com">Linode</a> is one of the best low-cost Virtual Private Server Hosts available, offering Xen VPS Hosting for a number of popular operating systems. With the release of Ubuntu 12.04 LTS, I felt that it was past time that I upgraded my webserver (the one that runs this website, actually!), and document the little tweaks that I discovered along the way.</p>
<h3>What we&#8217;re setting up</h3>
<ul>
<li>Ubuntu 12.04 LTS</li>
<li>A standard LAMP Stack (Linux, Apache, MySQL, PHP)</li>
<li>BIND DNS resolution&mdash;combined with Virtualmin below, you&#8217;ll be able to manage your own domains!</li>
<li>Linode reverse-DNS resolution</li>
<li>Virtualmin / Webmin backend server management</li>
</ul>
<p><span id="more-1327"></span></p>
<h3>Step One: Nameserver Configuration</h3>
<p>Log on to your domain registrar and set the nameservers for your domain to</p>
<pre>
ns1.linode.com
ns2.linode.com
ns3.linode.com
ns4.linode.com
ns5.linode.com
</pre>
<p>We&#8217;ll be using Linode&#8217;s nameservers as our primary DNS providers because they&#8217;ll stay up even when the server is down&mdash;taking advantage of redundancy where we can. Since it takes a while for this DNS setting to propagate, this should be done well before any of the other parts of this tutorial.</p>
<h3>Step Two: Linode Configuration</h3>
<p><strong>Setting up the slave zone</strong><br />
Log into Linode&#8217;s dashboard, and add your domain (hereafter referred to as example.com) to the DNS manager. Configure it as &#8220;Slave Zone&#8221;, and set the master server IP to the IP of your server. This will allow Linode to mirror your server&#8217;s DNS settings.</p>
<p><strong>Deploying Ubuntu 12.04 LTS</strong></p>
<p>Deploy Ubuntu 12.04 LTS to your Linode, using the standard &#8220;Deploy a Linux Distribution&#8221; Option. This will take a short while, and you&#8217;ll be asked to supply an administrator password to the system. </p>
<p>Once that&#8217;s done, remember to set up the reverse-DNS setting, available in the &#8220;Remote Access&#8221; tab. This should be set to hostname.example.com, although it isn&#8217;t particularly important. Also, enable IPv6; it&#8217;s used internally for DNS resolution and will cause issues if disabled.</p>
<p>While you&#8217;re here, take note of the IP configuration settings listed. The important values are the public IPs / masks, the default gateway, and the DNS resolvers. </p>
<h3>Step Three: Ubuntu Configuration</h3>
<p>Alright, now it&#8217;s time to actually begin to set up the server. All commands following will be given with the assumption that you are running as the root user. DO NOT use the root account as your primary login; it should be reserved for system administration roles as much as is possible.</p>
<p><strong>Setting up the hostname</strong></p>
<p>Edit /etc/hostname with your favorite editor and set it to your hostname of choice. The file should look something like this:</p>
<pre>
hostname
</pre>
<p>Afterwards, run the command</p>
<pre>
$ hostname -F /etc/hostname
</pre>
<p>to set it across the system.</p>
<p>Then, edit /etc/hosts to enable localhost resolution. The first two lines should look something like this:</p>
<pre>
127.0.0.1 localhost
your-ip-address hostname.example.com hostname
</pre>
<p>If you have trouble with this, take a look at Linode&#8217;s full guide <a href="http://library.linode.com/getting-started#sph_setting-the-hostname">here</a> with regards to setting the hostname and hosts file.</p>
<p>To test, the command </p>
<pre>$ hostname</pre>
<p>should print the hostname of the server, and </p>
<pre>$ hostname -f</pre>
<p>should print hostname.example.com (or whatever you set as your Fully Qualified Domain Name).</p>
<p><strong>Setting up a static IP</strong><br />
For some reason, Linode defaults its nodes to use DHCP; this will not work well with our BIND9 DNS server. So, using the settings you got from the Remote Access tab on the Dashboard, configure your /etc/network/interfaces file:</p>
<pre>
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
 address your-ip-address-here
 netmask 255.255.255.0
 gateway your-gateway-address-here
</pre>
<p><strong>Edit May 1, 2012: Use Resolvconf directly instead of removing it.</strong></p>
<p>View old version here: <a href="#" class="slidebox-link" id="dynamicresolution">Expand</a></p>
<div class="slidebox" id="dynamicresolution-box">
Since Ubuntu ships with a dynamic resolver that only really works when you&#8217;re using DHCP, we&#8217;re going to replace it with a static /etc/resolv.conf:</p>
<pre>
$ apt-get remove resolvconf
</pre>
<p>Configure the newly-static resolv.conf:</p>
<pre>
$ cat /etc/resolv.conf
domain members.linode.com
search members.linode.com
nameserver dns-resolver-1-ip-here
nameserver dns-resolver-2-ip-here
nameserver 127.0.0.1
options rotate
</pre>
</div>
<p>Ubuntu now ships with a dynamic resolv.conf manager called resolvconf, which handles editing /etc/resolv.conf for us. Thus, instead of editing /etc/resolv.conf, we can edit /etc/resolvconf/resolv.conf.d/base</p>
<pre>
$ cat /etc/resolvconf/resolv.conf.d/base
domain members.linode.com
search members.linode.com
nameserver dns-resolver-1-ip-here
nameserver dns-resolver-2-ip-here
nameserver 127.0.0.1
options rotate
</pre>
<p>Now, reload the resolvconf (or restart the server, since you&#8217;ve changed networking settings)</p>
<pre>
$ service resolvconf restart
</pre>
<p>Further details on resolv.conf and network interface configuration can be found in Linode&#8217;s documentation <a href="http://linode.com/wiki/index.php/Configure_Static_IPs">here</a>.</p>
<p><strong>Configuring the timezone</strong></p>
<p>We can just use dpkg-reconfigure for this:</p>
<pre>

dpkg-reconfigure tzdata
</pre>
<p><strong>Installing LAMP</strong></p>
<p>Since Ubuntu is debian-based, the installation of LAMP is remarkably simple:</p>
<pre>

$ apt-get update
$ apt-get install lamp-server^
</pre>
<p>should do it&mdash;just follow the instructions that it gives you.</p>
<p><strong>Installing Virtualmin and Webmin</strong></p>
<p>Unfortunately, since Ubuntu 12.04 LTS just came out, Virtualmin doesn&#8217;t <em>officially</em> support it yet, but we can install it anyways!</p>
<p>Start by copying /etc/issue to a backup, so that we can trick Virtualmin into believing it&#8217;s installing on Ubuntu 10.04 LTS:</p>
<pre>
$ cp /etc/issue /etc/issue-bak
</pre>
<p>Edit /etc/issue, and replace “Ubuntu 12.04 LTS \n \l” with “Ubuntu 10.04.02 LTS”</p>
<p>Virtualmin depends on an scponly shell which Ubuntu has, for some reason, removed from the Precise Pangolin repositories. Nevertheless, we can just install the version from Oneiric, which works fine:</p>
<pre>

$ cd /tmp
$ wget http://security.ubuntu.com/ubuntu/pool/universe/s/scponly/scponly_4.8-4.1_i386.deb
$ dpkg -i scponly_4.8-4.1_i386.deb
</pre>
<p>Installing virtualmin itself: Virtualmin has kindly provided an install script for us, so we&#8217;ll just use that</p>
<pre>

$ cd /tmp
$ wget http://software.virtualmin.com/gpl/scripts/install.sh
$ chmod u+x install.sh
$ /tmp/install.sh
</pre>
<p>Now that that&#8217;s all done, we can revert our /etc/issue file back to what it should be</p>
<pre>

$ mv /etc/issue-bak /etc/issue
</pre>
<h3>Setting up the Virtualmin Configuration</h3>
<p><strong>Initial configuration</strong></p>
<p>Log on to your-ip-address:10000 to access the Virtualmin configuration panel. It should walk you through some initial setup options&mdash;you don&#8217;t need to change any of these.</p>
<p>After that&#8217;s done, go to Virtualmin&rarr;System Settings&rarr;Server Templates&rarr;BIND DNS Domains and find the Additional Manually Configured Nameservers box. Add these lines:</p>
<pre>
ns1.linode.com
ns2.linode.com
ns3.linode.com
ns4.linode.com
ns5.linode.com
</pre>
<p>Also, make sure that the option &#8220;Add sub-domain DNS records to parent&#8217;s domain&#8221; is set to &#8220;Yes&#8221;.</p>
<p>This will set up the Linode nameservers as slaves, and allow them to request zone transfers (AXFR and AXFR-style IXFR)</p>
<p>Now, go to Webmin&rarr;Servers&rarr;BIND DNS Server&rarr;Default Zone and set &#8220;Notify Slaves of Changes&#8221; to &#8220;Yes&#8221;.</p>
<p>To see if Linode is successfully duplicating your zone, view the syslog and watch for AXFR / IXFR transfers:</p>
<pre>
$ tail -f /var/log/syslog
</pre>
<p>BIND will automatically inform Linode when you&#8217;ve made a change to your DNS configuration.</p>
<h3>Setting up your first Virtual Server</h3>
<p>This part is pretty simple: just click &#8220;Create Virtual Server&#8221; on the Virtualmin dashboard, and give it the domain example.com. The rest should be handled for you.<br />
After it&#8217;s been constructed, go to Virtualmin&rarr;Server Configuration&rarr;DNS Records and add a new A record for hostname.example.com, pointing at the IP Address of your hostname. This will serve as the primary forward-DNS for your server.</p>
<h3>Final notes</h3>
<p>Yay! You&#8217;ve set up a Ubuntu/Virtualmin-powered Linode, and you&#8217;re ready to host a website. Since BIND and Virtualmin are configured to create a new zone for each virtual server, the DNS configuration should be largely automatic&mdash;no more needing to set all the A records yourself. </p>
<p>There is one caveat, however: Linode&#8217;s Slave DNS Zones are configured NOT to allow subdomains to be controlled by separate DNS zones. </p>
<p>This means that if you want to serve a different website for a domain and its subdomain (&#8220;example.com&#8221; and &#8220;test.example.com&#8221;, for example), you will need to configure &#8220;test.example.com&#8221; as a SUB-SERVER in Virtualmin. Otherwise, Linode will NOT request the DNS records, and you will not be able to access the subdomain.</p>
<p>To configure email virus and spam scanning, take a look at Ubuntu&#8217;s official Amavis tutorial <a href="https://help.ubuntu.com/12.04/serverguide/mail-filtering.html">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://aeturnalus.com/software/setting-virtualmin-controlled-ubuntu-12-04-lts-precise-pangolin-server-linode/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Build season is over!</title>
		<link>http://aeturnalus.com/robotics/build-season-over/</link>
		<comments>http://aeturnalus.com/robotics/build-season-over/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 19:46:22 +0000</pubDate>
		<dc:creator>Robert Ying</dc:creator>
				<category><![CDATA[Robotics]]></category>

		<guid isPermaLink="false">http://aeturnalus.com/?p=1322</guid>
		<description><![CDATA[I spent the past six weeks in the chaotic design and development of the Tail of the Monkey, Team 846&#8242;s entry in this year&#8217;s FIRST competition. While we haven&#8217;t had a chance to test quite all the functionality we want &#8230; <a href="http://aeturnalus.com/robotics/build-season-over/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I spent the past six weeks in the chaotic design and development of the Tail of the Monkey, Team 846&#8242;s entry in this year&#8217;s FIRST competition. While we haven&#8217;t had a chance to test quite all the functionality we want to have, the robot is bagged and prepared for shipping&#8211;hopefully we&#8217;ll be able to finish things up at the New York Regional this March.</p>
<p>In the meanwhile, a picture:</p>
<p><a href="http://aeturnalus.com/wp/wp-content/uploads/2012/02/tailofthemonkey.jpg" rel="lightbox[1322]" title="The Tail of the Monkey"><img src="http://aeturnalus.com/wp/wp-content/uploads/2012/02/tailofthemonkey.jpg" alt="" title="The Tail of the Monkey" width="720" height="1080" class="alignnone size-full wp-image-1324" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://aeturnalus.com/robotics/build-season-over/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moved to GitHub</title>
		<link>http://aeturnalus.com/robotics/moved-github/</link>
		<comments>http://aeturnalus.com/robotics/moved-github/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 01:17:53 +0000</pubDate>
		<dc:creator>Robert Ying</dc:creator>
				<category><![CDATA[Robotics]]></category>

		<guid isPermaLink="false">http://aeturnalus.com/?p=1319</guid>
		<description><![CDATA[Due to various reasons, not the least of which was a desire to make my code easier to access for those who want to see it, I&#8217;ve decided to move my ROS repository from my own server to GitHub. It &#8230; <a href="http://aeturnalus.com/robotics/moved-github/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Due to various reasons, not the least of which was a desire to make my code easier to access for those who want to see it, I&#8217;ve decided to move my ROS repository from my own server to GitHub. </p>
<p>It can be viewed here: <a href="https://github.com/rbtying/Companion-Cube">https://github.com/rbtying/Companion-Cube</a></p>
]]></content:encoded>
			<wfw:commentRss>http://aeturnalus.com/robotics/moved-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple Arduino Robot Control</title>
		<link>http://aeturnalus.com/software/simple-arduino-robot-control/</link>
		<comments>http://aeturnalus.com/software/simple-arduino-robot-control/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 03:32:37 +0000</pubDate>
		<dc:creator>Robert Ying</dc:creator>
				<category><![CDATA[Robotics]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://aeturnalus.com/?p=1313</guid>
		<description><![CDATA[One of the simplest bits of functionality that is useful for small-scale robotics is the ability to control robots over the serial port, which can easily be made wireless using Pololu Wixels, XBee, bluetooth, or any other wireless serial connection. &#8230; <a href="http://aeturnalus.com/software/simple-arduino-robot-control/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>One of the simplest bits of functionality that is useful for small-scale robotics is the ability to control robots over the serial port, which can easily be made wireless using Pololu Wixels, XBee, bluetooth, or any other wireless serial connection. Since the Arduino Serial Monitor only sends out messages rather slowly, and it&#8217;s usually nice to have a fast response from computer to robot, I wrote a short Java application that handles the communication for you.</p>
<p>Download here:</p>
<blockquote><p><a href='http://aeturnalus.com/wp/wp-content/uploads/2011/11/robotcontrol.tar.gz'>Robot Controller</a><br />
Source code is released into the public domain, but if you use it, I&#8217;d appreciate it if you cite me somewhere (Robert Ying).</p></blockquote>
<p>You&#8217;ll also need to have the appropriate rxtx native library in the same folder as the jar file when running it&mdash;you can download that <a href="http://rxtx.qbang.org/wiki/index.php/Download">here</a></p>
<p>Corresponding Arduino Code:</p>
<pre lang="c++">
void setup() {
  Serial.begin(115200);
}

// method that sets motor speeds from -255 to 255
// corresponding to full reverse and full forward
void setLeftMotor(int speed);
void setRightMotor(int speed);

byte nextByte() {
  unsigned long start = millis();
  while (millis() - start < 100) {
    if (Serial.available()) {
      return Serial.read();
    }
  }
  return 0x00;
]

void loop() {
  while (Serial.available()) {
    switch(Serial.read()) {
      case 0xC1: setLeftMotor(2 * nextByte()); break;
      case 0xC2: setLeftMotor(-2 * nextByte()); break;
      case 0xC5: setRightMotor(2 * nextByte()); break;
      case 0xC6: setRightMotor(-2 * nextByte()); break;
      default: setLeftMotor(0); setRightMotor(0); break;
    }
  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://aeturnalus.com/software/simple-arduino-robot-control/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eagle Project</title>
		<link>http://aeturnalus.com/news/eagle-project/</link>
		<comments>http://aeturnalus.com/news/eagle-project/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 22:48:21 +0000</pubDate>
		<dc:creator>Robert Ying</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://aeturnalus.com/?p=1248</guid>
		<description><![CDATA[For the past two weekends I&#8217;ve been working on organizing and executing my Eagle project, which is to construct a pair of lecterns for Lynbrook High School. Noticing that we have a shortage of such pieces of furniture, and that &#8230; <a href="http://aeturnalus.com/news/eagle-project/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_1870.jpg" height="480" width="640" alt="A completed project" title="A completed and finished project" /></p>
<p>For the past two weekends I&#8217;ve been working on organizing and executing my Eagle project, which is to construct a pair of lecterns for Lynbrook High School. Noticing that we have a shortage of such pieces of furniture, and that they are rather expensive to acquire directly, I decided to build these lecterns to benefit both the faculty and the student population at my school.<br />
<span id="more-1248"></span></p>
<p>I started my project by designing a quick 3D model to lay out the dimensions and get an idea of what it would look like:<br />
<iframe style="overflow:none;border:none;" src="http://aeturnalus.com/upload/files/lectern3d/index.html" width="640" height="520">Your browser does not support iframes, please go to http://aeturnalus.com/upload/files/lectern3d/</iframe></p>
<p>And then built it over the course of a weekend with the help of scouts from my troop. This weekend, we put the finishing touches on it by staining and varnishing the wood, so that the color will last longer and the lectern will be sturdier and more durable in general.</p>
<p>A slideshow of the various service project sessions:</p>
<blockquote style="margin-left:-48px;margin-top:-20px;position:relative;float:left;width:640px;height:540px;padding-bottom:32px;"><div id="portfolio-slideshow0" class="portfolio-slideshow">
	<div class="slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111119_140645.jpg" src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111119_140645.jpg" height="491" width="655" alt="Scouts working on measuring and assembling parts of the first lectern" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111119_140645.jpg" height="491" width="655" alt="Scouts working on measuring and assembling parts of the first lectern" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">Scouts working on measuring and assembling parts of the first lectern</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111119_140654.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="Some scouts marking out lines to be cut" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111119_140654.jpg" height="491" width="655" alt="Some scouts marking out lines to be cut" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">Some scouts marking out lines to be cut</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111119_140705.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="Mr. Ying getting ready to cut some plywood" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111119_140705.jpg" height="491" width="655" alt="Mr. Ying getting ready to cut some plywood" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">Mr. Ying getting ready to cut some plywood</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111119_152615.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="Scouts beginning to nail plywood to the frame underneath" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111119_152615.jpg" height="491" width="655" alt="Scouts beginning to nail plywood to the frame underneath" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">Scouts beginning to nail plywood to the frame underneath</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111119_152623.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="A scout positioning a part to be glued." /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111119_152623.jpg" height="491" width="655" alt="A scout positioning a part to be glued." /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">A scout positioning a part to be glued.</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111119_153604.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="Scouts working together to use the nailgun" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111119_153604.jpg" height="491" width="655" alt="Scouts working together to use the nailgun" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">Scouts working together to use the nailgun</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111120_110452.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="A completed lectern! Not quite stained yet, though." /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111120_110452.jpg" height="491" width="655" alt="A completed lectern! Not quite stained yet, though." /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">A completed lectern! Not quite stained yet, though.</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111120_131723.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="Scouts discussing what to do next" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111120_131723.jpg" height="491" width="655" alt="Scouts discussing what to do next" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">Scouts discussing what to do next</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111120_160705.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="Scouts working outside" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111120_160705.jpg" height="491" width="655" alt="Scouts working outside" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">Scouts working outside</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111120_161630.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="Two completed lecterns!" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111120_161630.jpg" height="491" width="655" alt="Two completed lecterns!" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">Two completed lecterns!</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111120_161725.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="And the rest of the group..." /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111120_161725.jpg" height="491" width="655" alt="And the rest of the group..." /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">And the rest of the group...</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111126_134715.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="Scouts beginning to stain the lectern" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111126_134715.jpg" height="491" width="655" alt="Scouts beginning to stain the lectern" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">Scouts beginning to stain the lectern</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111126_135704.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="Scouts sanding down the surfaces" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111126_135704.jpg" height="491" width="655" alt="Scouts sanding down the surfaces" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">Scouts sanding down the surfaces</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111126_135710.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="Some more staining" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111126_135710.jpg" height="491" width="655" alt="Some more staining" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">Some more staining</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111126_135717.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="Sanding down the ... other ... lectern" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111126_135717.jpg" height="491" width="655" alt="Sanding down the ... other ... lectern" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">Sanding down the ... other ... lectern</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111127_091406.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="Scouts applying varnish to the lecterns" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111127_091406.jpg" height="491" width="655" alt="Scouts applying varnish to the lecterns" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">Scouts applying varnish to the lecterns</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111127_091504.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="Finishing up the varnish work" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111127_091504.jpg" height="491" width="655" alt="Finishing up the varnish work" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">Finishing up the varnish work</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111127_105404.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="Scouts admiring their work" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111127_105404.jpg" height="491" width="655" alt="Scouts admiring their work" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">Scouts admiring their work</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111127_105409.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="A few more scouts celebrating" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_20111127_105409.jpg" height="491" width="655" alt="A few more scouts celebrating" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">A few more scouts celebrating</p></div></div>
			<div class="not-first slideshow-next slideshow-content">
			<a href="javascript: void(0);" class="slideshow-next"><img class="psp-active" data-img="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_1870.jpg" src="http://aeturnalus.com/wp/wp-content/plugins/portfolio-slideshow/img/tiny.png" height="491" width="655" alt="A completed and finished project!" /><noscript><img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/IMG_1870.jpg" height="491" width="655" alt="A completed and finished project!" /></noscript></a><div class="slideshow-meta"><p class="slideshow-title">A completed and finished project!</p></div></div>
			</div><!--#portfolio-slideshow--></div><!--#slideshow-wrapper--></blockquote>
<p>More details about the project can be found by reading my project reports, linked below:</p>
<ul>
<li><a href="http://aeturnalus.com/wp/wp-content/uploads/2011/11/day_1_report.pdf">Day 1 Report</a></li>
<li><a href="http://aeturnalus.com/wp/wp-content/uploads/2011/11/day_2_report.pdf">Day 2 Report</a></li>
<li><a href="http://aeturnalus.com/wp/wp-content/uploads/2011/11/day_3_4_report.pdf">Day 3 and 4 Report</a></li>
</ul>
<p>Thanks to all of the people who helped me out on this project!</p>
]]></content:encoded>
			<wfw:commentRss>http://aeturnalus.com/news/eagle-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A sneak peek&#8230;</title>
		<link>http://aeturnalus.com/robotics/sneak-peek/</link>
		<comments>http://aeturnalus.com/robotics/sneak-peek/#comments</comments>
		<pubDate>Sat, 19 Nov 2011 18:26:03 +0000</pubDate>
		<dc:creator>Robert Ying</dc:creator>
				<category><![CDATA[Robotics]]></category>

		<guid isPermaLink="false">http://aeturnalus.com/?p=1244</guid>
		<description><![CDATA[A sneak peek at upcoming developments:]]></description>
			<content:encoded><![CDATA[<p>A sneak peek at upcoming developments:<br />
<img src="http://aeturnalus.com/wp/wp-content/uploads/2011/11/2011-11-14-20.59.41.jpg" alt="" title="What could this be...?" width="640" height="539" class="alignnone size-full wp-image-1245" /></p>
]]></content:encoded>
			<wfw:commentRss>http://aeturnalus.com/robotics/sneak-peek/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
Content-Type: text/html

<title> </title>

