<?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>Mike / Michael Fogel &#187; howto</title>
	<atom:link href="http://www.fogel.ca/tag/howto/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fogel.ca</link>
	<description>soapbox and search engine spam</description>
	<lastBuildDate>Wed, 31 Mar 2010 03:43:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Busting apart a Master Lock</title>
		<link>http://www.fogel.ca/2009/06/11/busting-apart-a-master-lock/</link>
		<comments>http://www.fogel.ca/2009/06/11/busting-apart-a-master-lock/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 00:25:25 +0000</pubDate>
		<dc:creator>Mike Fogel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[destruction]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.fogel.ca/?p=535</guid>
		<description><![CDATA[You ever see those ads back in the day where they&#8217;d have a little master combo lock, and someone would fire a handgun right at it?  The bullet would ricochet off the lock, sending the lock flapping around all over the place, and when everything settled &#8211; there was the lock, still all locked [...]]]></description>
			<content:encoded><![CDATA[<p>You ever see those ads back in the day where they&#8217;d have a little master combo lock, and someone would fire a handgun right at it?  The bullet would ricochet off the lock, sending the lock flapping around all over the place, and when everything settled &#8211; there was the lock, still all locked up.</p>
<p>I&#8217;m not saying those were faked or anything&#8230; but they sure were misleading.</p>
<p>To bust apart your master lock, you&#8217;ll need a hammer, a flathead screwdriver, a strong pair of pliers, a good pounding surface, and 15 minutes.</p>
<p><img src="http://farm3.static.flickr.com/2429/3618293300_d74da9d6da.jpg" alt="" /></p>
<p>Assuming your lock looks like mine, on the back you&#8217;ll find a nice little steel lip.  Pound the flathead down under that.</p>
<p><img src="http://farm3.static.flickr.com/2426/3618298802_5f7322549e.jpg" alt="" /></p>
<p>Pound forward so that you can get the flathead under the front dial.  It&#8217;ll pop right off.</p>
<p><img src="http://farm4.static.flickr.com/3333/3617483215_6b0e83d19c.jpg" alt="" /></p>
<p>Under the dial there&#8217;s a thicker piece of protective steel.  Choose a good spot and pound through it using the flathead.  Pry up a lip and pull it back with your pliers.  The insides of the lock will kinda just dissolve and fall out.  Give the lock a tug and bam!  Your lock is open.</p>
<p><img src="http://farm4.static.flickr.com/3327/3618289670_a82488c77e.jpg" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fogel.ca/2009/06/11/busting-apart-a-master-lock/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>T61p/Debian/Gnome/Gsynaptics HOWTO</title>
		<link>http://www.fogel.ca/2009/04/27/t61pdebiangnomegsynaptics-howto/</link>
		<comments>http://www.fogel.ca/2009/04/27/t61pdebiangnomegsynaptics-howto/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 18:46:13 +0000</pubDate>
		<dc:creator>Mike Fogel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[synaptics]]></category>
		<category><![CDATA[t61p]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://blog.fogel.ca/?p=516</guid>
		<description><![CDATA[gsynaptics gives you a nice little GUI in gnome to control the options on your synaptics touchpad, like the one my T61p came with.  It&#8217;s easy to set up on a default debian install, you just need to add a few stanazas to your xorg.conf

Here&#8217;s the edits I needed from a default install xorg.conf:

Make [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://gsynaptics.sourceforge.jp/">gsynaptics</a> gives you a nice little GUI in gnome to control the options on your synaptics touchpad, like the one my <a href="http://shop.lenovo.com/ISS_Static/merchandising/US/PDFs/T61p_Datasheet-USEN-00.pdf">T61p</a> came with.  It&#8217;s easy to set up on a default debian install, you just need to add a few stanazas to your <a href="http://www.x.org/archive/X11R6.8.0/doc/xorg.conf.5.html">xorg.conf<br />
</a></p>
<p>Here&#8217;s the edits I needed from a default install xorg.conf:</p>
<ol>
<li>Make a backup of your current xorg.conf</li>
<li>Remove the &#8220;Generic Mouse&#8221; section.  You don&#8217;t need it anymore.</li>
<li>Add a section for your touchpad like so:
<pre>
Section "InputDevice"
  Identifier  "Synaptics Touchpad"
  Driver      "synaptics"
  Option      "SendCoreEvents"  "true"
  Option      "Protocol"        "auto-dev"
  Option      "Device"          "/dev/psaux"
  Option      "SHMConfig"       "true"
EndSection
</pre>
</li>
<li>And add a line in your &#8220;ServerLayout&#8221; section referencing your new synaptics section.  I didn&#8217;t have a ServerLayout section so I had to add one, mine looks like this:
<pre>
Section "ServerLayout"
  Identifier  "Default Layout"
  Screen      "Default Screen"
  InputDevice "Generic Keyboard"
  InputDevice "Synaptics Touchpad"
EndSection
</pre>
</li>
</ol>
<p>Now save everything you&#8217;re doing and then restart X11 by hitting cntrl-alt-backspace.  If X won&#8217;t start back up, you can hit cntrl-alt-f1 and log in at a command prompt, restore your xorg.conf from the backup you made earlier, then run <code>/etc/init.d/gdm restart</code>.</p>
<p>In the event that things just aren&#8217;t working, your friend is /var/log/Xorg.0.log.  That log file contains the results of your x-server&#8217;s parsing of your xorg.conf.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fogel.ca/2009/04/27/t61pdebiangnomegsynaptics-howto/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to force your Users into bad Password Management</title>
		<link>http://www.fogel.ca/2009/02/23/how-to-force-your-users-into-bad-password-management/</link>
		<comments>http://www.fogel.ca/2009/02/23/how-to-force-your-users-into-bad-password-management/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 20:52:24 +0000</pubDate>
		<dc:creator>Mike Fogel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://blog.fogel.ca/?p=428</guid>
		<description><![CDATA[This is straight off GoDaddy&#8217;s FTP user password requirements for their shared linux hosting plans:
You must create a password for your account. This means that your password:

Must contain 7 to 14 characters.
Must contain at least one lowercase letter.
Must contain at least one uppercase letter.
Must contain at least one number.
Must begin with a letter.
Cannot contain the [...]]]></description>
			<content:encoded><![CDATA[<p>This is straight off GoDaddy&#8217;s FTP user password requirements for their shared linux hosting plans:</p>
<blockquote><p>You must create a password for your account. This means that your password:</p>
<ul>
<li>Must contain 7 to 14 characters.</li>
<li>Must contain at least one lowercase letter.</li>
<li>Must contain at least one uppercase letter.</li>
<li>Must contain at least one number.</li>
<li>Must begin with a letter.</li>
<li>Cannot contain the user name.</li>
<li>Cannot contain the following characters: question mark, space, caret, single quote, double quote, colon, backslash, dollar sign, ampersand, greater than, less than, tilde, semi-colon, or accent.</li>
</ul>
</blockquote>
<p>The result of these kind of password requirements is that your user has to come up with a new password, or a new variation on one of their existing passwords, just for your site.  Now in the perfect world, users would have a unique password for everywhere on the internet they have a login.  There are <a href="https://addons.mozilla.org/en-US/firefox/addon/3282">programs out there</a> to help users do that.  But guess what.  People don&#8217;t use them.  For some good reasons too &#8211; like now a copy of your passwords, one way or another, are being stored somewhere that isn&#8217;t your brain.  Which is the whole idea &#8211; your password is something that only you can produce and you can do so anywhere anytime you need to.</p>
<p>So in reality, your users likely have somewhere between 10 and 100 logins across the internet.  If they&#8217;re forced to try to remember a special username/password combo for your site &#8211; they won&#8217;t.  They&#8217;ll write it down, and stick in their wallet.  Or in the drawer next to their desk.  Or in a plaintext file on their desktop.  Which is about as secure as, well, putting something yummy in the snack room with a sign that says &#8216;yummy&#8217;.</p>
<p>When a hosting provider like GoDaddy does this kind of bad practice, it isn&#8217;t that big a deal.  It just makes their FTP user base more likely to be compromised.  Now when your bank does it (I believe all my banks do it at one level or another) it&#8217;s serious.  This isn&#8217;t helping the security problem &#8211; it&#8217;s just passing the buck.  Even though this makes the average user more vulnerable to attack, that&#8217;s no longer your bank&#8217;s fault.  It was you who didn&#8217;t safely guard your 7 different usernames, 3 levels of passwords, and up to 5 variations on those different passwords for your various logins across the internet.  That&#8217;s what I&#8217;m up to: 7, 3 and 5.  Now soon to be 6.</p>
<p>As a user, what do you guys use to manage all your usernames/passwords?  As a developer, what kind of restrictions do you apply for your users&#8217; passwords and/or usernames?  Do you know of any standard set of password restrictions, or any standard algorithm for computing what constitutes a &#8216;good&#8217; or a &#8216;weak&#8217; password?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fogel.ca/2009/02/23/how-to-force-your-users-into-bad-password-management/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails on DreamHost Installation</title>
		<link>http://www.fogel.ca/2009/02/10/ruby-on-rails-on-dreamhost-installation/</link>
		<comments>http://www.fogel.ca/2009/02/10/ruby-on-rails-on-dreamhost-installation/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 02:44:07 +0000</pubDate>
		<dc:creator>Mike Fogel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[rubyonrails]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://blog.fogel.ca/?p=409</guid>
		<description><![CDATA[I&#8217;m no Rails expert, nor a Ruby expert, and this is only my second installation of Rails in 4 years, and my first on DreamHost.  So no promises.  But here are the steps I went through to get Rails working on DreamHost with MySQL.


Set up a domain and directory. This where your Rails installation will [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m no <a href="http://rubyonrails.org/">Rails</a> expert, nor a <a href="http://ruby-lang.org/">Ruby</a> expert, and this is only my second installation of Rails in 4 years, and my first on <a href="http://www.dreamhost.com/r.cgi?314813">DreamHost</a>.  So no promises.  But here are the steps I went through to get Rails working on DreamHost with MySQL.</p>
<ol>
<li>
<p><em>Set up a domain and directory.</em> This where your Rails installation will live.   <a href="http://wiki.dreamhost.com/Rails">DreamHost&#8217;s preferred method of running Rails</a> is now officially with <a href="http://www.modrails.com/">Passenger</a> (aka mod_rails) which they have on all their Apache 2 servers.  You can use the DreamHost admin panel to set this up: go Domains-&gt;Manage Domains-&gt;Add New Domain/Sub-Domain and make sure to check off on &#8220;Ruby on Rails Passenger (mod_rails)&#8221;.  If you plan on making ~/path/to/rails/root your root directory for your Rails installation, then you need set the web root directory to ~/path/to/rails/root/public when you add this domain using the DreamHost admin panel.</p>
</li>
<li>
<p><em>Set up a database.</em> You can do this through DreamHost&#8217;s admin panel as well.  Goodies-&gt;Manage MySQL-&gt;Create a new MySQL database.</p>
</li>
<li>
<p><em>Set up Rails.</em> Go to the directory you&#8217;re going to run your Rails installation out of (~/path/to/rails/root from step 1) and run:</p>
<pre>
rails . -d mysql
</pre>
<p>(Note the dot for &#8216;current directory&#8217;.)  This will create all the Rails directory structure and default starter files.</p>
</li>
<li>
<p><em>Set the permissions.</em> I&#8217;m not sure what the exact minimum possible permissions are to run Rails on DreamHost, but this created an acceptable situation for me for now: (note that I ran step 3 with a umask of 0027)</p>
<pre>
find ./ -type d -exec chmod o+x {} \;
find ./ -type f -exec chmod o+r {} \;
chmod o-r config/database.yml
</pre>
<p>You would absolutely want to lock these permissions down further if your application involved any sensitive data or services whatsoever.  Leaving all your scripts world-readable allows any other DreamHost user to potentially scan your code and look for vulnerabilities.</p>
</li>
<li>
<p><em>Do an intermediate test.</em> At this point you should be able to navigate to your domain and see the <a href="http://www.ridaalbarazi.com/blog/wp-content/uploads/2006/06/testapp.png">Rails welcome page</a>.  Note that the &#8220;About your application&#8217;s environment&#8221; link will not work in &#8216;production&#8217; mode, DreamHost&#8217;s default.  If things aren&#8217;t working, your friends are the logs in ~/logs/your.rails.domain.com/http and ~/path/to/rails/root/log.</p>
</li>
<li>
<p><em>Set up the database connection.</em> This involves editing the file config/database.yml.  DreamHost has its Virtual Hosts set up to default your Rails installation to run as &#8216;production&#8217;, but you can change this by setting ENV['RAILS_ENV'] in config/environment.rb.  Here&#8217;s <a href="http://craigjolicoeur.com/blog/2008/11/set-rails_env-for-phusion-passenger-on-dreamhost/">a good way</a> to do this automagically once you have development/staging/production sites all set up.  After editing any of your Rails config files, you need to do:</p>
<pre>
touch tmp/restart.txt
</pre>
<p>to make sure Apache reloads the Rails config files on the next HTTP request.</p>
</li>
<li>
<p><em>Test it.</em> My test was to get the &#8217;skeleton&#8217; version of <a href="http://crypto.stanford.edu/cs142/projects/6/project6.html">this project</a> up and running by copying a few files into the Rails directory structure in the appropriate places.</p>
</li>
</ol>
<p>Probability I find something wrong with these instructions in the next week or so?  ~80%.  I&#8217;ll update this post when I do.</p>
<p><strong>Update:</strong></p>
<p>Fyi, if you run the Webrick server in script/server, a DreamHost bot will auto email you telling you to please stop it:</p>
<blockquote><p>
<strong>From:</strong> DreamHost Policy Bot &lt;support@dreamhost.com&gt;<br />
<strong>To:</strong> Michael Fogel 	&lt;******@gmail.com&gt;<br />
Our automated system has come across the following activity under your account that is in violation of our Terms of Service.<br />
We request that you take any necessary action to cease the activity as quickly as possible or we will be forced to take further action.  If you were not aware of any such activity, please feel free to contact support and we can look into the issue further.</p>
<p>User **** running &#8220;ruby ./script/server&#8221;.  This process is against our policies.</p>
<p>Please run ruby via cgi, not the built-in Webrick web server
</p></blockquote>
<p>They should add to this email a thinger about mod_rails being their preferred way to run Rails.</p>
<p><strong>Update 2:</strong></p>
<p>Ug, you <a href="http://code.google.com/p/phusion-passenger/issues/detail?id=94">can&#8217;t use HTTP Basic Auth with mod_rails</a> (as of version 2.0.6).  Note this is what DreamHost will set up for you if you use their web panel to set up authentication.  Here&#8217;s a <a href="http://frane.offbyte.com/2009/01/30/basic-authentication-problems-with-phusion-passanger-mod_rails/">relatively simple if not elegant solution</a> to the problem while we wait for mod_rails 2.1 to be released.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fogel.ca/2009/02/10/ruby-on-rails-on-dreamhost-installation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trac 0.11 Auto-Install on DreamHost</title>
		<link>http://www.fogel.ca/2008/09/30/trac-011-auto-install-on-dreamhost/</link>
		<comments>http://www.fogel.ca/2008/09/30/trac-011-auto-install-on-dreamhost/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 00:29:42 +0000</pubDate>
		<dc:creator>Mike Fogel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[releases]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[trac]]></category>

		<guid isPermaLink="false">http://blog.fogel.ca/?p=55</guid>
		<description><![CDATA[Update: I&#8217;ve released an updated version of AutoTracOnDreamHost.
Trac 0.11 is out.  And it&#8217;s awesome &#8211; both the usability in enhancements in 0.11 and Trac in general.  Trac is one of those tools in my toolbox I use to up my productivity a few notches.  For small projects, it&#8217;s a nice convenient time [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> I&#8217;ve released an updated version of <a href="http://blog.fogel.ca/2008/11/14/autotracondreamhost-v1-1-0/">AutoTracOnDreamHost</a>.</p>
<p><a href="http://trac.edgewall.org/wiki/TracDownload">Trac 0.11</a> is out.  And it&#8217;s awesome &#8211; both the usability in enhancements in 0.11 and Trac in general.  Trac is one of those tools in my toolbox I use to up my productivity a few notches.  For small projects, it&#8217;s a nice convenient time saver.  For large projects, having the project management tools trac provides makes an astonishing difference in group productivity and allows for a significantly higher quality final product.</p>
<p>On my web host, <a href="http://www.dreamhost.com/">DreamHost</a>, Trac is <a href="http://wiki.dreamhost.com/Trac_Install">non-trivial</a> to install&#8230; until now!  I&#8217;ve written a set of scripts that make it semi-trivial to set Trac 0.11 up on DreamHost.  Original inspiration came from the &#8216;<a href="http://wiki.dreamhost.com/DreamTracInstall">auto-install</a>&#8216; on the DreamHost wiki, which is great that it&#8217;s there, but it was awkward for my configuration and, IMHO, suffers from backward compatibility and feature bloat issues.  So, I wrote up some scripts that work well with my configuration.  The README explains how to use them.</p>
<p>You may also want to check out the <a href="http://code.google.com/p/dreamy-trac/">dreamy-trac</a> project.  Both that code and these scripts were originally based off the same code on the DreamHost wiki, so you&#8217;ll see similarities.  They both get you to a similar end result.  I know in these scripts I&#8217;ve emphasized simplicity as much as possible at the expense of installing any extra plugins, or customization, or whatnot.</p>
<p>If there&#8217;s a fair amount of traffic coming here and it looks like people are using these, I&#8217;ll set them up on a public repository for easier access and collaboration.  In the meantime, keeping it simple&#8230; here they are.</p>
<p><strong>README</strong>:</p>
<pre>
# AutoTracOnDreamHost: README
# Released under GLPv3. http://www.gnu.org/licenses/gpl-3.0.html
# Copyright 2008 Michael Fogel. http://fogel.ca

#################### LICENSE #####################

AutoTracOnDreamHost is free software: you can redistribute
it and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation, either
version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

http://www.gnu.org/licenses/gpl-3.0.html

#################### HowTo #######################

Preliminaries:

  1. Assuming you're going to use this with SVN, you need to already
     have an SVN repository setup and running.  The webserver needs
     to have at least read permissions to the repository.

  2. You need to have a complete domain/subdomain set up to use
     with trac or a subdirectory of an existing domain.

  3. A MySQL database ready to use with trac.  This doesn't have to
     be it's own database, but AFAIK, there is no good reason not
     to give each trac site it's own database.

Do once: 

  1. Edit the configure.inc:

     - you probably want the latest and greatest of Trac, Genshi,
       MySQLDB, and Pygments.  Minor version releases of these
       shouldn't break this script.

     - alter the trac directory structure to your liking, or just
       run with my setup.

  2. Run the backend.sh.  This will set up all the parts of trac that
     are shared between all your trac sites (even if you have only one).

Do once per trac site:

  1. Run the site.sh.  This script will query you for details about
     the configuration of your database, your directory structure,
     svn repository, an admin trac user etc.

  2. Test it! Go to your new trac url and log in, browse the svn
     repository, create a dummy ticket etc.

#################### Help Me! ####################

I'll post about any major updates or known bugs on my blog.
http://blog.fogel.ca  In event of enough interest in these
scripts, I'll set up a public repository for it so we can
all contribute.

If you find any major bugs or want to submit a patch, you can
email me which is my first name (mike) at my domain (fogel.ca).
Requests for personalized help will be answered in the limit
of infinite free time, which I don't have, so no promises.

Elsewise, the best conglomeration of information about Trac
on DreamHost AFAIK is currently at on the DreamHost wiki.
http://wiki.dreamhost.com/Trac

##################################################
</pre>
<p><strong>configure.inc:</strong></p>
<pre>
# AutoTracOnDreamHost: configure.inc
# Released under GLPv3. http://www.gnu.org/licenses/gpl-3.0.html
# Copyright 2008 Michael Fogel. http://fogel.ca

# Abort on any errors
set -e

TRAC_VERS=0.11.1
GENSHI_VERS=0.5.1
MYSQLDB_VERS=1.2.2
PYGMENTS_VERS=0.11.1

# trac dir structure
TRAC_ROOT="${HOME}/trac"
PKG=${TRAC_ROOT}/packages
EGG=${TRAC_ROOT}/egg_cache
INSTALL=${TRAC_ROOT}/install
SITES=${TRAC_ROOT}/sites
SVN=${HOME}/svn
TRAC_SITE_PACKAGES=${PKG}/lib/python2.3/site-packages
TRAC_HTDOCS=${TRAC_SITE_PACKAGES}/Trac-${TRAC_VERS}-py2.3.egg/trac/htdocs

EXP_CMD1="export PYTHONPATH=$TRAC_SITE_PACKAGES"
EXP_CMD2="export PYTHON_EGG_CACHE=$EGG"
EXP_CMD3="export LD_LIBRARY_PATH=$PKG/lib"
EXP_CMD4="export PATH=$PKG/bin:\$PATH"

cat &lt;&lt;OutputDreamTracInstallReminder

==== Put the following in your ~/.bash_profile ====
Where trac/packages=PKG
$EXP_CMD1
$EXP_CMD2
$EXP_CMD3
$EXP_CMD4
===================================================

OutputDreamTracInstallReminder

# modify those env vars for the duration of this script too.
$EXP_CMD1
$EXP_CMD2
$EXP_CMD3
if [[ "$PATH" != *"$PKG/bin"* ]]; then export PATH=$PKG/bin:$PATH; fi

# Update version information here and DIRs below.

TRAC=http://ftp.edgewall.com/pub/trac/Trac-${TRAC_VERS}.tar.gz
GENSHI=http://ftp.edgewall.com/pub/genshi/Genshi-${GENSHI_VERS}.tar.gz
SETUPTOOLS=http://peak.telecommunity.com/dist/ez_setup.py
MYSQLDB=http://switch.dl.sourceforge.net/sourceforge/mysql-python/MySQL-python-${MYSQLDB_VERS}.tar.gz
PYGMENTS=http://pypi.python.org/packages/source/P/Pygments/Pygments-${PYGMENTS_VERS}.tar.gz

TRACDIR=Trac-${TRAC_VERS}
GENSHIDIR=Genshi-${GENSHI_VERS}
MYSQLDBDIR=MySQL-python-${MYSQLDB_VERS}
PYGMENTSDIR=Pygments-${PYGMENTS_VERS}

#### function getInupt - used primarily in site.sh #####
# arg 1: message
# arg 2: initial value
function getInput {
	MES="$1"
	eval "VAL=\$$2"
	echo ""
	echo "Press enter to accept the current value, or input a new value."
	TMP="$VAL"
	while [[ -n "$TMP" ]]; do
		VAL="$TMP"
		echo "$MES: $VAL"
		read TMP
	done
	echo "Using $MES: $VAL"
	eval "$2=\"$VAL\""
}
</pre>
<p><strong>backend.sh:</strong></p>
<pre>
# AutoTracOnDreamHost: backend.sh
# Released under GLPv3. http://www.gnu.org/licenses/gpl-3.0.html
# Copyright 2008 Michael Fogel. http://fogel.ca

source ./configure.inc

echo -e "\n==== Creating need dir structure ===="
[ ! -d ${PKG} ] &#038;&#038; mkdir -p ${PKG}
# the egg_cache dir must be writable by your apache cgi/python user
[ ! -d ${EGG} ] &#038;&#038; mkdir -p ${EGG} &#038;&#038; chmod 770 ${EGG}
[ ! -d ${INSTALL} ] &#038;&#038; mkdir -p ${INSTALL}
[ ! -d ${SITES} ] &#038;&#038; mkdir -p ${SITES}

echo -e "\n==== Retrieving installation files ===="
cd ${INSTALL}
[ ! -f ${TRACDIR}.tar.gz ] &#038;&#038; wget ${TRAC}
[ ! -f ${GENSHIDIR}.tar.gz ] &#038;&#038; wget ${GENSHI}
[ ! -f ${MYSQLDBDIR}.tar.gz ] &#038;&#038; wget ${MYSQLDB}
[ ! -f ${PYGMENTSDIR}.tar.gz ] &#038;&#038; wget ${PYGMENTS}
[ ! -f ez_setup.py ] &#038;&#038; wget ${SETUPTOOLS}

echo -e "\n==== Installing Setup Tools ===="
#Create site-packages directory. Script will fail without it.
mkdir -p ${TRAC_SITE_PACKAGES}
[ -z `which easy_install` ] &#038;&#038; cd ${INSTALL} &#038;&#038; python ez_setup.py --prefix=${PKG}

echo -e "\n==== Installing Pygments ===="
cd ${INSTALL} &#038;&#038; tar xzf ${PYGMENTSDIR}.tar.gz
cd ${PYGMENTSDIR} &#038;&#038; python setup.py install --prefix=${PKG}

echo -e "\n==== Installing MYSQLdb ===="
cd ${INSTALL} &#038;&#038; tar xzf ${MYSQLDBDIR}.tar.gz
cd ${MYSQLDBDIR} &#038;&#038; python setup.py install --prefix=${PKG}

echo -e "\n==== Installing Genshi ===="
cd ${INSTALL} &#038;&#038; tar xzf ${GENSHIDIR}.tar.gz
cd ${GENSHIDIR} &#038;&#038; python setup.py install --prefix=${PKG}

echo -e "\n==== Installing Trac ===="
cd ${INSTALL} &#038;&#038; tar xzf ${TRACDIR}.tar.gz
cd ${TRACDIR} &#038;&#038; python setup.py install --prefix=${PKG}
mkdir -p ${PKG}/share/trac
cp -fr ${INSTALL}/${TRACDIR}/cgi-bin ${PKG}/share/trac

echo -e "\n==== Setting permissions for Trac htdocs ===="
DIR=${TRAC_HTDOCS}
while [ "$DIR" != "$HOME" ]; do
	chmod o+x $DIR
	DIR=`dirname $DIR`
done
find ${TRAC_HTDOCS} -type d -exec chmod 751 {} \;
find ${TRAC_HTDOCS} -type f -exec chmod 644 {} \;

echo -e "\n==== Backend install complete ===="
</pre>
<p><strong>site.sh:</strong></p>
<pre>
# AutoTracOnDreamHost: site.sh
# Released under GLPv3. http://www.gnu.org/licenses/gpl-3.0.html
# Copyright 2008 Michael Fogel. http://fogel.ca

source ./configure.inc

# Defaults
PROJECT=somesvnproject
DOMAIN=trac.somedomain.com
DOMAINDIR=${HOME}/http/$DOMAIN  # default refreshed after sampling DOMAIN
TRACPATH=/trac
MYSQLHOST=mysql.$DOMAIN         # default refreshed after sampling DOMAIN
MYSQLUSER=trac_username
MYSQLPASSWD=trac_password
MYSQLDBNAME=trac_$PROJECT       # default refreshed after sampling PROJECT
TRAC_USER=admin
TRAC_PASSWORD=password

# Prompt on those defaults
getInput "Subversion Project ID"                 PROJECT
getInput "Domain for Trac"                       DOMAIN
DOMAINDIR=${HOME}/http/$DOMAIN
MYSQLHOST=mysql.$DOMAIN
getInput "Path for domain root"                  DOMAINDIR
getInput "Path for Trac relative to domain root" TRACPATH
getInput "MySQL hostname"                        MYSQLHOST
getInput "MySQL username"                        MYSQLUSER
getInput "MySQL password"                        MYSQLPASSWD
MYSQLDBNAME=trac_$PROJECT
getInput "MySQL DB name"                         MYSQLDBNAME
getInput "Trac Admin username"                   TRAC_USER
getInput "Trac Admin password"                   TRAC_PASSWORD

# using these values
echo "PROJECT:${PROJECT}"
echo "DOMAIN:${DOMAIN}"
echo "DOMAINDIR:${DOMAINDIR}"
echo "TRACPATH:${TRACPATH}"
echo "MYSQLHOST:${MYSQLHOST}"
echo "MYSQLUSER:${MYSQLUSER}"
echo "MYSQLPASSWD:${MYSQLPASSWD}"
echo "MYSQLDBNAME:${MYSQLDBNAME}"
echo "TRAC_USER:${TRAC_USER}"
echo "TRAC_PASSWORD:${TRAC_PASSWORD}"

# Vars for this site
WEBDIR=${DOMAINDIR}/${TRACPATH}
INDEX_CGI=${WEBDIR}/index.cgi
TRACINI=${SITES}/${PROJECT}/conf/trac.ini
HTACCESS=${WEBDIR}/.htaccess
HTPASSWD=${WEBDIR}/.htpasswd
NAME="Trac: ${DOMAIN}${TRACPATH}/"

echo "Setup site"
if [ ! -d ${SITES}/${PROJECT} ]; then

	#Setup Trac Environment for MySQL
	${PKG}/bin/trac-admin ${SITES}/${PROJECT} \
		initenv ${PROJECT} \
		"mysql://${MYSQLUSER}:${MYSQLPASSWD}@${MYSQLHOST}/${MYSQLDBNAME}" \
		svn \
		${SVN}/${PROJECT};

	# set admin user to premissions
	${PKG}/bin/trac-admin ${SITES}/${PROJECT} \
	permission add $TRAC_USER TRAC_ADMIN
fi

echo "Make Trac Web Accessible"
# Make Trac Web Accessible
mkdir -p ${WEBDIR}
chmod 751 ${WEBDIR}

if [ -f "${INDEX_CGI}" ]; then
	rm ${INDEX_CGI}
fi
echo "#!/bin/bash" >> ${INDEX_CGI}
echo "export HOME=\"/home/${USER}\"" >> ${INDEX_CGI}
echo "export TRAC_ENV=\"$SITES/${PROJECT}\"" >> ${INDEX_CGI}
echo "$EXP_CMD1" >> ${INDEX_CGI}
echo "$EXP_CMD2" >> ${INDEX_CGI}
echo "$EXP_CMD3" >> ${INDEX_CGI}
echo "$EXP_CMD4" >> ${INDEX_CGI}
echo "exec $PKG/share/trac/cgi-bin/trac.cgi" >> ${INDEX_CGI}
chmod 755 ${INDEX_CGI}

# logo in trac.ini
sed -i "s/^alt = .*$/alt = trac_banner.png/" ${TRACINI}
# some fancy sed to escape forward slashes... simplier patches are welcome.
TRACPATH_S=`echo ${TRACPATH} | sed -e "s/\/$//" -e "s/\//\\\\\\ \//g" -e "s/ \//\//g"`
sed -i "s/^src = .*$/src = ${TRACPATH_S}\/chrome\/common\/trac_banner.png/" ${TRACINI}

#Pretty URLs
mkdir -p ${WEBDIR}/chrome
chmod 751 ${WEBDIR}/chrome
ln -sf ${TRAC_HTDOCS} ${WEBDIR}/chrome/common

# .htaccess fun
if [ -f ${HTACCESS} ]; then
	rm ${HTACCESS}
fi

touch ${HTACCESS}
chmod 644 ${HTACCESS}

echo "AuthType Basic" >> ${HTACCESS}
echo "AuthUserFile ${HTPASSWD}" >> ${HTACCESS}
echo "AuthName '${NAME}'" >> ${HTACCESS}
echo "require valid-user" >> ${HTACCESS}
echo "" >> ${HTACCESS}
echo "DirectoryIndex index.cgi" >> ${HTACCESS}
echo "Options ExecCGI FollowSymLinks" >> ${HTACCESS}
echo "" >> ${HTACCESS}
echo "<IfModule mod_rewrite.c>" >> ${HTACCESS}
echo "RewriteEngine On" >> ${HTACCESS}
echo "RewriteCond %{REQUEST_FILENAME} !-f" >> ${HTACCESS}
echo "RewriteCond %{REQUEST_FILENAME} !-d" >> ${HTACCESS}
echo "RewriteRule ^(.*)\$ ${TRACPATH}/index.cgi/\$1 [L]" >> ${HTACCESS}
echo "</IfModule>" >> ${HTACCESS}

#Create .htpasswd file for trac admin with password
htpasswd -bc ${HTPASSWD} $TRAC_USER "$TRAC_PASSWORD"

# Note: on DreamHost you avoid a world-readable htpasswd file by
# setting one up via panel.dreamhost.com->Goodies->Htaccess/WebDAV.
# This will make htpasswd and htaccess files (overwriting anything
# that's there) that has group dhapache, is group readable, and
# the apache user is in the dhapache group.  Baring this, you need
# to make your htpasswd file word-readable (or email support for
# some chgrp action as root)
chmod 644 ${HTPASSWD}

echo ---------- SITE INSTALL COMPLETE! ----------
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.fogel.ca/2008/09/30/trac-011-auto-install-on-dreamhost/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Intel 4965AGN, T61p, and Debian</title>
		<link>http://www.fogel.ca/2008/09/10/intel-4965agn-t61p-and-debian/</link>
		<comments>http://www.fogel.ca/2008/09/10/intel-4965agn-t61p-and-debian/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 13:42:11 +0000</pubDate>
		<dc:creator>Mike Fogel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[t61p]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://blog.fogel.ca/?p=70</guid>
		<description><![CDATA[My new T61p has the standard built-in Intel 4965AGN wireless card for 802.11b/g/n goodness.  The kernel has had driver support for this hardware since 2.6.24.  But, after doing a default Debian Lenny install, the wireless just ain&#8217;t working&#8230;  what gives?
Well, this comes up in /var/log/syslog and others:

iwl4965: iwlwifi-4965-1.ucode firmware file req failed: [...]]]></description>
			<content:encoded><![CDATA[<p>My new <a href="http://shop.lenovo.com/ISS_Static/merchandising/US/PDFs/T61p_Datasheet-USEN-00.pdf">T61p</a> has the standard built-in Intel 4965AGN wireless card for 802.11b/g/n goodness.  The kernel has had driver support for this hardware <a href="http://intellinuxwireless.org/">since 2.6.24</a>.  But, after doing a default Debian Lenny install, the wireless just ain&#8217;t working&#8230;  what gives?</p>
<p>Well, this comes up in /var/log/syslog and others:</p>
<pre>
iwl4965: iwlwifi-4965-1.ucode firmware file req failed: Reason -2
iwl4965: Could not read microcode: -2
</pre>
<p>As is explained <a href="http://intellinuxwireless.org/?n=faq&amp;s=license">here</a>, the iwlwifi drivers require a binary firmware (aka microcode) image to function.  The drivers themselves are free, both as in beer and as in freedom.  However, the microcode images, in order to enforce end-user FCC compliance, are free as in beer but not freedom.  Thus a default Debian install, which <a href="http://en.wikipedia.org/wiki/IceApe#Origins_of_the_issue_and_of_the_Iceweasel_name">bends over backwards</a> to be free as in beer <em>and</em> free as in freedom, does not include the microcode images.</p>
<p>Two options:</p>
<ol>
<li>Install the firmware image yourself.  Find the image you need <a href="http://intellinuxwireless.org/?n=Downloads">here</a> (as of August 2008 the version you want was 1.21), download it, extract it, and copy it to /lib/firmware/iwlwifi-4965-1.ucode.</li>
<li>Or, <a href="http://www.debian.org/doc/manuals/apt-howto/ch-basico.en.html">add the non-free</a> repositories to your /etc/apt/sources.list, and do an
<pre>apt-get install <a href="http://packages.debian.org/lenny/firmware-iwlwifi">firmware-iwlwifi</a></pre>
</li>
</ol>
<p>Or, pretend you didn&#8217;t really want wireless if you can&#8217;t have it free as in freedom&#8230; and put it on your to-do list to reverse-engineer that binary firmware image.  Buena suerte! ;p</p>
<p>I can&#8217;t remember if a reboot was necessary after installing the microcode image.  But that should be it in terms of edits and installs&#8230; everything wifi, all the way out to the gnome GUI, should now just automagically work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fogel.ca/2008/09/10/intel-4965agn-t61p-and-debian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Built-In Verizon EVDO on a T61p with Debian</title>
		<link>http://www.fogel.ca/2008/08/29/built-in-verizon-evdo-on-a-t61p-with-debian/</link>
		<comments>http://www.fogel.ca/2008/08/29/built-in-verizon-evdo-on-a-t61p-with-debian/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 20:21:31 +0000</pubDate>
		<dc:creator>Mike Fogel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[t61p]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://blog.fogel.ca/?p=66</guid>
		<description><![CDATA[This is the first in what will be a short series of posts of what I&#8217;ve had to do to get Debian (Lenny &#8211; currently the &#8216;testing&#8217; distro) working fully and smoothly on my new T61p.
The key options in my T61p package:

39T4822 	VBB WWAN
42V9332 	SBB WAN:VERIZONSIERRACDMA2000
42V8603 	SBB INT.WWAN ANTENNA 15.4"
42V8659 	SBB CL.PLATE T61P WL WWAN
42W7002 [...]]]></description>
			<content:encoded><![CDATA[<p>This is the first in what will be a short series of posts of what I&#8217;ve had to do to get Debian (Lenny &#8211; currently the &#8216;testing&#8217; distro) working fully and smoothly on my new <a href="http://shop.lenovo.com/ISS_Static/merchandising/US/PDFs/T61p_Datasheet-USEN-00.pdf">T61p</a>.</p>
<p>The key options in my T61p package:</p>
<pre>
39T4822 	VBB WWAN
42V9332 	SBB WAN:VERIZONSIERRACDMA2000
42V8603 	SBB INT.WWAN ANTENNA 15.4"
42V8659 	SBB CL.PLATE T61P WL WWAN
42W7002 	SBB FCC-ID/LABEL FOR WWAN
42V8675 	SBB VERIZON OPTION
</pre>
<p>That all translates to a slickly built-in Verizon card and antenna:</p>
<pre>
$ sudo lsusb -v | grep Sierra
Bus 006 Device 002: ID 1199:0220 Sierra Wireless, Inc.
  idVendor           0x1199 Sierra Wireless, Inc.
  iManufacturer           1 Sierra Wireless, Incorporated
  iProduct                2 Sierra Wireless MC5725 Modem
</pre>
<p>Here is the only officially unofficial official public <a href="http://www.sierrawireless.com/faq/ShowFAQ.aspx?ID=601">documentation</a> I could find for that card on Linux.</p>
<p>Before setting this up with Debian, I&#8217;d recommend getting it working with Windows if you haven&#8217;t reformatted over it yet.  The card and connection pretty much &#8216;just works&#8217; on Lenovo&#8217;s preinstalled Windows.  This will mostly eliminate Verizon as the source of the problem if things don&#8217;t go right with Debian.</p>
<p>A default Debian install provides a number of tools you can use to configure and automate your connection.  I like gnome-ppp (essentially a GUI frontend on wvdial) best.  I&#8217;ve also set it up with gnome&#8217;s network-admin applet (System->Administration->Network), but it doesn&#8217;t provide good user feedback on the connection process or status.  And by &#8216;good&#8217;, I mean &#8216;any&#8217;.  Perhaps future versions will have better integration of dial-out connections, now that they&#8217;re coming back into style with EVDO and 3G networks.  In any case, I will provide instructions for both these two tools here.  (Note this is an either/or.  There is no reason to bother setting this up with both tools, other than to test out the GUI&#8217;s.)</p>
<p>First, GUI configuration.  Here&#8217;s your key points:</p>
<ul>
<li>Username: <strong>YOURPHONENUMBER@vzw3g.com</strong></li>
<li>Password: <strong>vzw</strong></li>
<li>Phone number to dial: <strong>#777</strong></li>
</ul>
<p>For gnome-ppp, you want to:</p>
<ul>
<li>Use the &#8216;Detect&#8217; mechanism.  It worked perfect for me.  Try it.</li>
<li>Under Options, enable &#8217;stupid mode&#8217; to speed up the connection process substantially.  You&#8217;re also calling Verizon stupid, in a extremely passive aggressive manner&#8230; ummm, feels so good&#8230;. stupid stupid stupid.</li>
</ul>
<p>For network-admin:</p>
<ul>
<li>Set the Modem port to /dev/ttyUSB0.</li>
<li>Check the &#8216;Set modem as default route to Internet&#8217; option or your machine will just drop your outbound packets on the floor.</li>
<li>No remote authentication.  In the file /etc/ppp/peers/ppp0, add a line &#8216;noauth&#8217; to disable your authentication of the verizon servers.  This means that if someone successfully hijacks Verizon&#8217;s &#8216;#777&#8242; number, you will have no way of knowing, and they will have complete control over your traffic. (gnome-ppp does this &#8216;noauth&#8217; for you automatically, for better or for worse.)</li>
<li>Do not set the modem volume.  In the file /etc/chatscripts/ppp0, comment out the line that has a command like &#8216;AT&#038;FH0XX&#8217; where XX are wildcards depending on your GUI settings.  Issuing this command causes the modem error out, reporting &#8216;NO CARRIER&#8217; on the ensuing ATDT (dial) command.</li>
</ul>
<p>And that&#8217;s it!  For debugging, your friends are tail, /var/log/syslog, /var/log/messages, gnome-ppp&#8217;s GUI log display, cat, echo, /dev/ttyUSB0, minicom and or course, good old google.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fogel.ca/2008/08/29/built-in-verizon-evdo-on-a-t61p-with-debian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Get the Gum out!</title>
		<link>http://www.fogel.ca/2008/08/24/get-the-gum-out/</link>
		<comments>http://www.fogel.ca/2008/08/24/get-the-gum-out/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 20:50:42 +0000</pubDate>
		<dc:creator>Mike Fogel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://blog.fogel.ca/?p=63</guid>
		<description><![CDATA[Got gum stuck on your nice pants?  Like say you sat on some at the bachelor party?  Whatcha gonna do?

Vinegar!
First test the vinegar on a inseam or something to make sure it doesn&#8217;t discolor your pants.  If that&#8217;s ok, then&#8230;
Pour some vinegar on the gum.  Wait a few moments for the vinegar and gum to [...]]]></description>
			<content:encoded><![CDATA[<p>Got gum stuck on your nice pants?  Like say you sat on some at the bachelor party?  Whatcha gonna do?</p>
<p><img src="http://farm3.static.flickr.com/2695/4386174773_050b526840.jpg" alt="vinegar!" /></p>
<p>Vinegar!</p>
<p>First test the vinegar on a inseam or something to make sure it doesn&#8217;t discolor your pants.  If that&#8217;s ok, then&#8230;</p>
<p>Pour some vinegar on the gum.  Wait a few moments for the vinegar and gum to fight it out, then wipe it all with a towel.  Some little bits of the gum will come off.  Repeat this process a dozen times or so, throw the pants through the wash once to get the vinegar smell off, and you&#8217;re good to go.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fogel.ca/2008/08/24/get-the-gum-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Copying an SVN Repository off googlecode.com</title>
		<link>http://www.fogel.ca/2008/07/26/copying-an-svn-repository-off-googlecodecom/</link>
		<comments>http://www.fogel.ca/2008/07/26/copying-an-svn-repository-off-googlecodecom/#comments</comments>
		<pubDate>Sat, 26 Jul 2008 19:57:38 +0000</pubDate>
		<dc:creator>Mike Fogel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://blog.fogel.ca/?p=56</guid>
		<description><![CDATA[Let&#8217;s say you wanted to transfer a complete copy of an existing SVN repository, all history included, from a googlecode.com project to a subdirectory in another preexisting repository.  This takes a few steps since us mere mortal non-googlers (and former googlers) don&#8217;t get direct command line access to the googlecode.com servers.

Make a local copy [...]]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s say you wanted to transfer a complete copy of an existing SVN repository, all history included, from a googlecode.com project to a subdirectory in another preexisting repository.  This takes a few steps since us mere mortal non-googlers (and former googlers) don&#8217;t get direct command line access to the googlecode.com servers.</p>
<ol>
<li>Make a local copy of the full googlecode.com repository.
<pre>
svnadmin create local_repos
echo -e "#\041/bin/sh" &gt; local_repos/hooks/pre-revprop-change
echo "exit 0" &gt;&gt; local_repos/hooks/pre-revprop-change
chmod 755 local_repos/hooks/pre-revprop-change
svnsync init file://`pwd`/local_repos https://urproject.googlecode.com/svn
svnsync sync file://`pwd`/local_repos
</pre>
</li>
<li>Now, you can make a dump of that local repository.
<pre>
svnadmin dump ./local_repos &gt; thedump
</pre>
</li>
<li>Copy that dumpfile over to wherever your preexisting destination repository is located.  -C is for gzip compression during transfer, and is helpful if you have a big repository full of text.
<pre>
scp -C ./thedump yourhost.com:~/
</pre>
</li>
<li>Now, we load that dumpfile.
<pre>
ssh yourhost.com
svn mkdir file://path/to/your/repos/dir_for_googlecode_copy
svnadmin load /path/to/your/repos --parent-dir dir_for_googlecode_copy &lt; thedump
</pre>
</li>
</ol>
<p>Revision number will be incremented correctly (ending at the sum of the two previous repositories), all the commit logs and such are transfered intact, including the authors (even if they&#8217;re not users on the new system).  Pretty smooth.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fogel.ca/2008/07/26/copying-an-svn-repository-off-googlecodecom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HOWTO: IPod Shuffle, Rhythmbox, Debian</title>
		<link>http://www.fogel.ca/2008/07/08/howto-ipod-shuffle-rhythmbox-debian/</link>
		<comments>http://www.fogel.ca/2008/07/08/howto-ipod-shuffle-rhythmbox-debian/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 03:37:58 +0000</pubDate>
		<dc:creator>Mike Fogel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://blog.fogel.ca/?p=52</guid>
		<description><![CDATA[Just plug it in.  It just works.  I can&#8217;t believe it.  Somebody wake me up&#8230; or wait, don&#8217;t.  My debian box is &#8216;just working&#8217;!
Still, I&#8217;m watching songbird&#8217;s development closely and eagerly&#8230;.
]]></description>
			<content:encoded><![CDATA[<p>Just plug it in.  It just works.  I can&#8217;t believe it.  Somebody wake me up&#8230; or wait, don&#8217;t.  My debian box is &#8216;just working&#8217;!</p>
<p>Still, I&#8217;m watching <a href="http://getsongbird.com/">songbird&#8217;s</a> development closely and eagerly&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fogel.ca/2008/07/08/howto-ipod-shuffle-rhythmbox-debian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
