<?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>Max Manders &#187; Linux</title>
	<atom:link href="http://maxmanders.co.uk/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://maxmanders.co.uk</link>
	<description>thoughts of a web developer</description>
	<lastBuildDate>Mon, 16 Jan 2012 22:29:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Missing LaTeX &#8216;Glossaries&#8217; Package In Ubuntu</title>
		<link>http://maxmanders.co.uk/2012/01/05/missing-ubuntulatex-glossaries/</link>
		<comments>http://maxmanders.co.uk/2012/01/05/missing-ubuntulatex-glossaries/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 22:54:10 +0000</pubDate>
		<dc:creator>maxmanders</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://maxmanders.co.uk/?p=482</guid>
		<description><![CDATA[I had cause to use the glossaries package in LaTeX today to take care of all my glossary management needs.  The idea of being able to create an external file to define all of my acronyms and definitions, and then include them as required in a separate section that is automatically included in a table [...]]]></description>
			<content:encoded><![CDATA[<p>I had cause to use the <code>glossaries</code> package in <code>LaTeX</code> today to take care of all my glossary management needs.  The idea of being able to create an external file to define all of my acronyms and definitions, and then include them as required in a separate section that is automatically included in a table of contents is very appealing.  Unfortunately, the <code>glossaries</code> package isn&#8217;t installed as part of the Ubuntu <code>texlive-latex-*</code> packages, nor is it separately installable via Aptitude.<span id="more-482"></span>  I had expected that something as common as glossary management would be included, bud sadly that&#8217;s not the case.</p>
<p>Thankfully, the TexLive installation is quite modular, and it&#8217;s relatively straight forward to install new environments and packages. Through trial and error, I&#8217;ve discovered the missing packages required to use <code>glossaries</code> are: <code>glossary</code>, <code>glossaries</code>, <code>xfor</code> and <code>etoolbox</code>.</p>
<p>Firstly, we need to find the location to install local <code>tex</code> packages</p>
<pre class="brush: bash">[max@dolphin ~] $ kpsewhich -expand-var "\$TEXMFLOCAL"
/usr/local/share/texmf</pre>
<p>Now that we know where to install the packages, we can download and install them. The following redacted typescript will download and extract the packages to the appropriate local location and rebuild the <code>LaTeX</code> package map.</p>
<pre class="brush: bash">[max@dolphin ~] $ wget http://mirror.ctan.org/macros/latex/contrib/glossary.zip -P /tmp/
[max@dolphin ~] $ wget http://mirrors.ctan.org/install/macros/latex/contrib/glossaries.tds.zip -P /tmp/
[max@dolphin ~] $ wget http://mirrors.ctan.org/install/macros/latex/contrib/xfor.tds.zip -P /tmp/
[max@dolphin ~] $ wget http://mirrors.ctan.org/install/macros/latex/contrib/etoolbox.tds.zip -P /tmp/
[max@dolphin ~] $ sudo unzip /tmp/glossaries.tds.zip -d /usr/local/share/texmf
[max@dolphin ~] $ sudo unzip /tmp/xfor.tds.zip -d /usr/local/share/texmf
[max@dolphin ~] $ sudo unzip /tmp/etoolbox.tds.zip -d /usr/local/share/texmf
[max@dolphin ~] $ sudo mkdir -p /usr/local/share/texmf/tex/latex/{contrib,html}
[max@dolphin ~] $ cd /tmp/
[max@dolphin ~] $ unzip glossary.zip &amp;&amp; cd glossary
[max@dolphin glossary] $ latex glossary.ins
[max@dolphin glossary] $ sudo cp glossary.sty /usr/local/share/texmf/tex/latex/contrib/
[max@dolphin glossary] $ sudo cp glossary.perl /usr/local/share/texmf/tex/latex/html/
[max@dolphin glossary] $ cd /usr/local/share/texmf/
[max@dolphin glossary] $ sudo texhash</pre>
]]></content:encoded>
			<wfw:commentRss>http://maxmanders.co.uk/2012/01/05/missing-ubuntulatex-glossaries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSMTP Local MTA Using Google Apps Account</title>
		<link>http://maxmanders.co.uk/2011/09/22/ssmtp-local-mta-using-google-apps-account/</link>
		<comments>http://maxmanders.co.uk/2011/09/22/ssmtp-local-mta-using-google-apps-account/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 09:05:38 +0000</pubDate>
		<dc:creator>maxmanders</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://maxmanders.co.uk/?p=411</guid>
		<description><![CDATA[While there are plenty of MTAs out there, I find it quite handy to have SSMTP installed locally; it&#8217;s quick to install and configure and lacks some of the overhead of a more enterprise MTA such as Sendmail, Postfix, Exim etc.  The following assumes you have a &#8220;Google Apps for Domains&#8221; user account &#8212; ssmtp_user@domain.com &#8212; [...]]]></description>
			<content:encoded><![CDATA[<p>While there are plenty of MTAs out there, I find it quite handy to have SSMTP installed locally; it&#8217;s quick to install and configure and lacks some of the overhead of a more <em>enterprise</em> MTA such as Sendmail, Postfix, Exim etc.  The following assumes you have a &#8220;Google Apps for Domains&#8221; user account &#8212; ssmtp_user@domain.com &#8212; through which you will relay all email.  Additionally, the steps below work on Ubuntu 10.10, similar steps should work on other distributions.</p>
<p><strong>Install SSMTP</strong></p>
<pre class="brush: bash">
sudo apt-get install ssmtp
</pre>
<p><strong>Edit configuration in /etc/ssmtp/ssmtp.conf</strong></p>
<pre class="brush: bash">
# Backup the original first
sudo cp /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.out
# Truncate the file and add the following
mailhub=smtp.gmail.com:587
hostname=ssmtp_user@domain.com
root=ssmtp_user@domain.com
AuthUser=ssmtp_user@domain.com
AuthPass=<ssmtp_user_password>
UseSTARTTLS=yes
UseTLS=yes
FromLineOverride=yes
</pre>
<p><strong>Edit revaliases map in /etc/ssmtp/revaliases.conf</strong></p>
<pre class="brush: bash">
# Add a line for each local user who should be able to send email
root:smtp_user@domain.com:smtp.gmail.com:587
max:smtp_user@domain.com:smtp.gmail.com:587
</pre>
<p><strong>Send Email!</strong><br />
You should now be able to send email, e.g. from the shell using</p>
<pre class="brush: bash">
echo "Testing" | mail -s "Test Email" someone@example.com
</pre>
]]></content:encoded>
			<wfw:commentRss>http://maxmanders.co.uk/2011/09/22/ssmtp-local-mta-using-google-apps-account/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automating Internet Explorer VPC Images On VirtualBox</title>
		<link>http://maxmanders.co.uk/2011/03/06/automating-internet-explorer-vpc-images-on-virtualbox/</link>
		<comments>http://maxmanders.co.uk/2011/03/06/automating-internet-explorer-vpc-images-on-virtualbox/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 21:55:05 +0000</pubDate>
		<dc:creator>maxmanders</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://maxmanders.co.uk/?p=306</guid>
		<description><![CDATA[In order to facilitate testing of websites in different browsers, Microsoft have released what they call their &#8216;Application Compatibility Virtual PC Images&#8216;.  These time-limited V12n solutions are great for quickly bringing up a VM for a particular version of Internet Explorer but they are built for Microsoft&#8217;s Virtual PC (VPC) software. I work predominantly with Linux and [...]]]></description>
			<content:encoded><![CDATA[<p>In order to facilitate testing of websites in different browsers, Microsoft have released what they call their &#8216;<a title="Microsoft Application Compatibility VPC Images" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=21eabb90-958f-4b64-b5f1-73d0a413c8ef&amp;displaylang=en" target="_blank">Application Compatibility Virtual PC Images</a>&#8216;.  These time-limited <a title="Virtualization (V12n)" href="en.wikipedia.org/wiki/Virtualization" target="_blank">V12n</a> solutions are great for quickly bringing up a VM for a particular version of Internet Explorer but they are built for Microsoft&#8217;s Virtual PC (VPC) software.</p>
<p>I work predominantly with Linux and use <a title="Virtual Box" href="http://www.virtualbox.org" target="_blank">Virtual Box</a> as my V12n application of choice.  Later versions of Virtual Box support VPC&#8217;s VHD disk image format.  This means it&#8217;s possible to run these VPC images under VirtualBox, but it involves downloading and extracting files from the win32 executables; downloading drivers for the ethernet adapter and other time consuming steps that I&#8217;d rather not repeat every time my IE VM expires.  I&#8217;m a programmer, therefore I&#8217;m lazy and don&#8217;t like doing things more than once; I&#8217;d rather script something to do it for me.  In keeping with this virtue, I&#8217;ve written <a title="msie2vbox" href="http://maxmanders.co.uk/msie2vbox">msie2vbox</a> to automate this stuff for me.  It&#8217;s on <a title="msie2vbox on Github" href="https://github.com/maxmanders/msie2vbox/" target="_blank">Github</a> with a GPLv3 license.  There&#8217;s some outstanding todo items but it does the job for me, and I thought it might be of use to others.</p>
]]></content:encoded>
			<wfw:commentRss>http://maxmanders.co.uk/2011/03/06/automating-internet-explorer-vpc-images-on-virtualbox/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Manage Your Home Directory With Subversion</title>
		<link>http://maxmanders.co.uk/2010/10/14/manage-your-home-directory-with-subversion/</link>
		<comments>http://maxmanders.co.uk/2010/10/14/manage-your-home-directory-with-subversion/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 21:16:28 +0000</pubDate>
		<dc:creator>maxmanders</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://maxmanders.co.uk/?p=275</guid>
		<description><![CDATA[Revision control systems serve their purpose well for managing codebases, but they can also be used to good effect for configuration management.  I&#8217;ll discuss how I&#8217;ve used Subversion to manage the configuration of my home directory.  The same goal could probably be achieved just as easily with Git.  While I use Git and Github for [...]]]></description>
			<content:encoded><![CDATA[<p>Revision control systems serve their purpose well for managing codebases, but they can also be used to good effect for configuration management.  I&#8217;ll discuss how I&#8217;ve used Subversion to manage the configuration of my home directory.  The same goal could probably be achieved just as easily with Git.  While I use Git and Github for personal projects, I have employed this solution at work where we use Subversion.<span id="more-275"></span></p>
<p>I&#8217;m often jumping on and off of a number of different servers where I use a variety of programs such as Gnu Screen and Vim.  If I tweak <em>~/.vimrc</em> for example, I have to remember to copy the changed file to all of the other servers I use, which is a pain.  I could request that home directories be auto-mounted using autofs, but this solution is something I can implement myself in isolation without effecting any other users.  The idea is to store configuration files in SVN so that when I make a change on one server, I can push that change to SVN and pull the change down to any other server I happen to be on.  The approach I&#8217;m taking here is to have a local working copy in my home directory, and to have configuration files symlinked into that working copy.  This could be made more flexible by having different configurations stored in a separate branch and switching branches depending on your needs.</p>
<p>I&#8217;m sure there are better ways to do this, such as having the entire home directory in subversion, and automatically updated on login.  Perhaps you could use SVN externals to provide a modular approach to managing your configuration.  The great thing about SVN, and more generally Linux is that there are plenty of different ways to achieve your goal.</p>
<p>Before I go on, I&#8217;ve made a few assumptions based on my server configuration &#8211; Ubuntu 10.04 with Apache 2.2.14 and Subversion already installed.  The first thing we need to do is enable SVN over HTTP.</p>
<pre class="brush: bash">sudo apt-get install libapache2-svn</pre>
<p>Once installed, we need to configure the module in <em>/etc/apache2/mods-enabled/dav_svn.conf<br />
</em></p>
<pre class="brush: bash">
DAV svn
SVNParentPath /var/lib/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user</pre>
<p>This configuration will allow you to refer to your repositories via e.g. http://example.com/svn, where the actual location of your repositories on the filesystem is <em>/var/lib/svn</em>.  We&#8217;re also using basic authentication here, so we&#8217;ll need to add a valid user.</p>
<pre class="brush: bash">sudo htpasswd -c /etc/apache2/dav_svn.passwd username</pre>
<p>Next, we need to create our SVN directory and create a first repository</p>
<pre class="brush: bash">sudo mkdir -p /var/lib/svn
sudo svnadmin create /var/lib/svn/homedir
sudo chown -R :www-data /var/lib/svn
sudo chmod 700 /var/lib/svn
sudo chmod -R 755 /var/lib/svn/homedir
</pre>
<p>Now, on a server that has a good baseline set of configuration files, we can check out a working copy</p>
<pre class="brush: bash">svn co http://example.com/svn/homedir .</pre>
<p>Add some configuration files</p>
<pre class="brush: bash">cp ~/.bashrc ~/.vimrc ~/.vimrc ~/homedir
cd ~/homedir
svn st | awk '/\?/ {print $2}' | xargs svn add
svn commit -m "Initial Commit"</pre>
<p>We can now symlink our files to those in the working copy</p>
<pre class="brush: bash">ln -sf ~/homedir/.bashrc ~/.bashrc
ln -sf ~/homedir/.vimrc ~/.vimrc
ln -sf ~/homedir/.screenrc ~/.screenrc</pre>
<p>If we do this on all the servers we use, we can make a change in one place, commit it to SVN, and then update our working copy somewhere else to get the most up-to-date version of the files.  As I said before, I&#8217;m sure this can be enhanced and tweaked to be more efficient, but this serves my needs for now.</p>
]]></content:encoded>
			<wfw:commentRss>http://maxmanders.co.uk/2010/10/14/manage-your-home-directory-with-subversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subversion And The Entropy Pool</title>
		<link>http://maxmanders.co.uk/2010/10/04/subversion-and-the-entropy-pool/</link>
		<comments>http://maxmanders.co.uk/2010/10/04/subversion-and-the-entropy-pool/#comments</comments>
		<pubDate>Mon, 04 Oct 2010 20:05:13 +0000</pubDate>
		<dc:creator>maxmanders</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://maxmanders.co.uk/?p=265</guid>
		<description><![CDATA[I ran into an interesting little subversion problem earlier.  I was trying to commit a change, and the commit just seemed to hang indefinitely.  I couldn&#8217;t sent an interrupt, and eventually resorted to killing the process.  I tried all sorts of command line options in case there was an authentication problem &#8211; with no luck.  [...]]]></description>
			<content:encoded><![CDATA[<p>I ran into an interesting little subversion problem earlier.  I was trying to commit a change, and the commit just seemed to hang indefinitely.  I couldn&#8217;t sent an interrupt, and eventually resorted to killing the process.  I tried all sorts of command line options in case there was an authentication problem &#8211; with no luck.  I then thought I had made a mistake when switching my working copy to a different branch.  I checked the logs on the server to find nothing pertinent; it seemed as though svn didn&#8217;t get as far as taking to the server.  At a loss, I thought there was nothing for it but to run the command with strace.  Bingo!</p>
<p>Strace showed that subversion reads from /dev/random as part of the commit, and that&#8217;s where the problem seemed to be happening.  After doing some research, I discovered that /dev/random generates random numbers using the so-called <em>entropy pool</em>.  This <em>entropy pool</em> is just random bits of noise generated from things such as mouse movements, time between keystrokes and so on.  For whatever reason, on the client server, this <em>entropy pool</em> was empty!  Using /dev/random is cryptographically <em>more random</em> than using /dev/urandom; and /dev/random blocks when the <em>entropy pool</em> is empty, whereas /dev/urandom is non-blocking.  Moving /dev/random to /dev/random.old and linking /dev/urandom to /dev/random solved the problem.  There may be a better solution to this, and depending on your cryptographic requirements it might be better to find an alternative, but this did the trick for me.  One svn commit later and all was well.</p>
]]></content:encoded>
			<wfw:commentRss>http://maxmanders.co.uk/2010/10/04/subversion-and-the-entropy-pool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

