<?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>odyniec.net blog &#187; Ubuntu</title>
	<atom:link href="http://odyniec.net/blog/category/ubuntu/feed/" rel="self" type="application/rss+xml" />
	<link>http://odyniec.net/blog</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 26 Jul 2010 20:37:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Running Multiple Versions of Firefox in Ubuntu 9.10</title>
		<link>http://odyniec.net/blog/2010/02/running-multiple-versions-of-firefox-in-ubuntu-9-10/</link>
		<comments>http://odyniec.net/blog/2010/02/running-multiple-versions-of-firefox-in-ubuntu-9-10/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 21:45:51 +0000</pubDate>
		<dc:creator>Michal Wojciechowski</dc:creator>
				<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://odyniec.net/blog/?p=390</guid>
		<description><![CDATA[Here&#8217;s a simple howto on running several different versions of Firefox in Ubuntu 9.10. This is the setup that I use to test my jQuery plugins and other JavaScript code &#8212; I hope some of you fellow developers out there will find it useful too. The basic advantage of this solution is that is does [...]]]></description>
			<content:encoded><![CDATA[<p><em>Here&#8217;s a simple howto on running several different versions of Firefox in Ubuntu 9.10. This is the setup that I use to test my <a href="http://odyniec.net/projects/#jquery-plugins">jQuery plugins</a> and other JavaScript code &#8212; I hope some of you fellow developers out there will find it useful too. The basic advantage of this solution is that is does not clutter your basic system with unnecessary software packages, as all the additional files are stored in your home directory and nowhere else.</em></p>
<p>I&#8217;m going to create a directory where all the different Firefox versions will reside. I have a dedicated directory for any software that I can&#8217;t or don&#8217;t want to install the standard way (using <code>apt</code>), and it is located in my home directory &#8211; <code>/home/michal/opt</code>. It serves a similar purpose as the system-wide <code>opt</code> directory, which is intended for &#8220;<code>opt</code>ional&#8221; software.<br />
<p class="code">$ <strong>mkdir /home/michal/opt/firefoxes</strong></p></p>
<p>There it is. Now, I&#8217;m going to get all those versions of Firefox that I want to run. As of this writing, the version running in my system is 3.5.7. I decided to also install the latest version of the 3.0 series (3.0.17), the prehistoric 2.0.0.20 release, as well as the freshly released Firefox 3.6.</p>
<p>Actually, according to browser usage statistics (such as those run by <a href="http://getclicky.com/marketshare/global/web-browsers/firefox/">Clicky</a> and <a href="http://gs.statcounter.com/">StatCounter</a>), Firefox 2.0 has a market share below one percent, so it&#8217;s questionable whether web developers should still care about it. I just happen to like to see if new versions of my jQuery plugins still work in the older browsers, so I&#8217;m going to install it.</p>
<p>Binary packages for all Firefox releases can be downloaded from the Mozilla FTP server at <a href="ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/">ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/</a>. Here are the respective URLs for the versions that I&#8217;ve chosen:</p>
<ul>
<li><a href="ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.20/linux-i686/en-US/firefox-2.0.0.20.tar.gz">ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.20/linux-i686/en-US/firefox-2.0.0.20.tar.gz</a></li>
<li><a href="ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/3.0.17/linux-i686/en-US/firefox-3.0.17.tar.bz2">ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/3.0.17/linux-i686/en-US/firefox-3.0.17.tar.bz2</a></li>
<li><a href="ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/3.6/linux-i686/en-US/firefox-3.6.tar.bz2">ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/3.6/linux-i686/en-US/firefox-3.6.tar.bz2</a></li>
</ul>
<p>So now I&#8217;ll go to the <code>firefoxes</code> directory and download the three packages with wget (of course, you can also download them using your browser or any FTP client):<br />
<p class="code">$ <strong>cd /home/michal/opt/firefoxes</strong>
$ <strong>wget ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.20/linux-i686/en-US/firefox-2.0.0.20.tar.gz</strong>
$ <strong>wget ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/3.0.17/linux-i686/en-US/firefox-3.0.17.tar.bz2</strong>
$ <strong>wget ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/3.6/linux-i686/en-US/firefox-3.6.tar.bz2</strong></p></p>
<p><span id="more-390"></span></p>
<p>The files are gzipped or bzipped tar packages, so I need to uncompress them. Let&#8217;s start with the Firefox 2 package:<br />
<p class="code">$ <strong>tar zxvf firefox-2.0.0.20.tar.gz</strong></p></p>
<p>Each package extracts to a directory named <code>firefox</code>, so if I just uncompress the tarballs one after another, all the different versions are going to go into the same directory and the files will get mixed up and overwritten. To prevent that, I&#8217;ll rename each directory after it is extracted:<br />
<p class="code">$ <strong>mv firefox firefox-2.0</strong></p></p>
<p>Now the other two:<br />
<p class="code">$ <strong>tar jxvf firefox-3.0.17.tar.bz2</strong>
$ <strong>mv firefox firefox-3.0</strong>
$ <strong>tar jxvf firefox-3.6.tar.bz2</strong>
$ <strong>mv firefox firefox-3.6</strong></p></p>
<p>Ok, so now I have three directories in <code>/home/michal/opt/firefoxes</code>, each holding a different release of Firefox.</p>
<p>Each version needs a separate user profile &#8212; otherwise, it won&#8217;t be possible to run them simultaneously, and worse, it might break the default profile which is used by the system version. I&#8217;m going to create new profiles for the three versions by running Firefox with the <code>-no-remote</code> and <code>-CreateProfile</code> options:<br />
<p class="code">$ <strong>firefox -no-remote -CreateProfile firefox-2.0</strong>
$ <strong>firefox -no-remote -CreateProfile firefox-3.0</strong>
$ <strong>firefox -no-remote -CreateProfile firefox-3.6</strong></p></p>
<p>That&#8217;s it for the basic setup &#8212; I can now try running the Firefoxes. Let&#8217;s start with the ancient version 2.0:<br />
<p class="code">$ <strong>cd firefox-2.0</strong>
$ <strong>./firefox -no-remote -P firefox-2.0</strong>
./firefox-bin: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory</p></p>
<p>Whooops. Grandpa Firefox 2.0 says it won&#8217;t run, unless it has the <code>libstdc++.so.5</code> library. However, Ubuntu 9.10 comes with a newer version of <code>libstdc++</code>, and the obsolete release is no longer available. But that&#8217;s no big deal, as I can just get it elsewhere &#8212; for example, at <a href="http://packages.debian.org/">packages.debian.org</a>:</p>
<p><a href="http://ftp.us.debian.org/debian/pool/main/g/gcc-3.3/libstdc++5_3.3.6-18_i386.deb">http://ftp.us.debian.org/debian/pool/main/g/gcc-3.3/libstdc++5_3.3.6-18_i386.deb</a></p>
<p>So let&#8217;s grab it:<br />
<p class="code">$ <strong>cd ..</strong>
$ <strong>wget http://ftp.us.debian.org/debian/pool/main/g/gcc-3.3/libstdc++5_3.3.6-18_i386.deb</strong></p></p>
<p>Since it&#8217;s a <code>.deb</code> package, I could simply install it with <code>dpkg</code> &#8212; but, I want to keep my system sterile clean and not clutter it with outdated packages that only some old Firefox release needs. Let&#8217;s have a look at the files that this package would install &#8212; I&#8217;ll use a combination of <code>ar</code> and <code>tar</code> (in case you&#8217;d be interested, <a href="http://www.g-loaded.eu/2008/01/28/how-to-extract-rpm-or-deb-packages/">this blog post</a> at <a href="http://www.g-loaded.eu/">G-Loaded Journal</a> explains the use of these commands):<br />
<p class="code">$ <strong>ar p libstdc++5_3.3.6-18_i386.deb data.tar.gz | tar zt</strong>
./
./usr/
./usr/share/
./usr/share/doc/
./usr/share/doc/libstdc++5/
./usr/share/doc/libstdc++5/README.Debian
./usr/share/doc/libstdc++5/TODO.Debian
./usr/share/doc/libstdc++5/copyright
./usr/share/doc/libstdc++5/changelog.Debian.gz
./usr/lib/
./usr/lib/libstdc++.so.5.0.7
./usr/lib/libstdc++.so.5</p></p>
<p>Apparently, there&#8217;s a couple documentation files that I can ignore. What I&#8217;m interested in are the two library files in <code>./usr/lib</code> &#8212; <code>libstdc++.so.5.0.7</code> and <code>libstdc++.so.5</code> (actually, that&#8217;s just one library file, as <code>libstdc++.so.5</code> is a symbolic link to <code>libstdc++.so.5.0.7</code>), and I&#8217;m going to extract just those two files. Moreover, I don&#8217;t want <code>tar</code> to create the <code>usr/lib</code> directory structure (as it normally would), I just want the two files to be placed in the <code>firefox-2.0</code> directory, and for all that to happen I&#8217;ll use this lengthy command:<br />
<p class="code">$ <strong>ar p libstdc++5_3.3.6-18_i386.deb data.tar.gz | tar zx ./usr/lib/libstdc++.so.5.0.7 ./usr/lib/libstdc++.so.5 --transform 's!./usr/lib/!firefox-2.0/!'</strong></p></p>
<p>What this command does is it extracts the two library files from the package, then translates their full paths, substituting <code>./usr/lib</code> with <code>firefox-2.0</code>, so the files should end up where I want them. Let&#8217;s see:<br />
<p class="code">$ <strong>ls firefox-2.0/libstdc++*</strong>
firefox-2.0/libstdc++.so.5  firefox-2.0/libstdc++.so.5.0.7</p></p>
<p>Great. Now I can try launching Firefox 2 again, but I also have to tell it that it should look for the <code>libstdc++.so.5</code> library file in its own directory. There&#8217;s an environmental variable that serves this purpose called <code>LD_LIBRARY_PATH</code> &#8212; all I need to do is set it to &#8220;.&#8221; (which corresponds to the current directory) and run Firefox with that setting:<br />
<p class="code">$ <strong>cd firefox-2.0</strong>
$ <strong>LD_LIBRARY_PATH=. ./firefox -no-remote -P firefox-2.0</strong></p></p>
<p>Success! We can now party like it&#8217;s 2008.</p>
<p style="text-align: center;"><img class="size-full wp-image-401  aligncenter" title="Firefox 2.0 About Window" src="http://odyniec.net/blog/wp-content/uploads/2010/02/firefox-2.0.png" alt="Firefox 2.0 About Window" width="330" height="514" /></p>
<p>The other two versions should run smoothly without complaining about libraries.<br />
<p class="code">$ <strong>cd ../firefox-3.0</strong>
$ <strong>./firefox -no-remote -P firefox-3.0</strong></p></p>
<p><p class="code">$ <strong>cd ../firefox-3.6</strong>
$ <strong>./firefox -no-remote -P firefox-3.6</strong></p></p>
<p>Enjoy your multiple Firefoxes!</p>
]]></content:encoded>
			<wfw:commentRss>http://odyniec.net/blog/2010/02/running-multiple-versions-of-firefox-in-ubuntu-9-10/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Setting Up an Ubuntu Subversion Server</title>
		<link>http://odyniec.net/blog/2009/05/setting-up-an-ubuntu-subversion-server/</link>
		<comments>http://odyniec.net/blog/2009/05/setting-up-an-ubuntu-subversion-server/#comments</comments>
		<pubDate>Tue, 19 May 2009 12:49:50 +0000</pubDate>
		<dc:creator>Michal Wojciechowski</dc:creator>
				<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://odyniec.net/blog/?p=301</guid>
		<description><![CDATA[A few days ago, my friend asked me to help him configure Subversion on his Ubuntu server, so that he and his fellow programmers could use it for their projects. Being the helpful chap that I am, I wrote up some instructions for him, and then I thought I might as well write a step-by-step [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago, my friend asked me to help him configure Subversion on his Ubuntu server, so that he and his fellow programmers could use it for their projects. Being the helpful chap that I am, I wrote up some instructions for him, and then I thought I might as well write a step-by-step tutorial on this subject. So here it is &#8212; my tutorial on <a title="Setting Up an Ubuntu Subversion Server" href="http://odyniec.net/articles/ubuntu-subversion-server/">setting up an Ubuntu-based Subversion server</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://odyniec.net/blog/2009/05/setting-up-an-ubuntu-subversion-server/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
