<?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>su-root.eu</title>
	<atom:link href="http://www.su-root.eu/feed" rel="self" type="application/rss+xml" />
	<link>http://www.su-root.eu</link>
	<description>A blog about Linux, Android and a few other things</description>
	<lastBuildDate>Thu, 11 Aug 2011 18:56:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Making an encrypted and compressed backup of your files onto DVDs</title>
		<link>http://www.su-root.eu/uncategorized/making-an-encrypted-and-compressed-backup-of-your-files-onto-dvds</link>
		<comments>http://www.su-root.eu/uncategorized/making-an-encrypted-and-compressed-backup-of-your-files-onto-dvds#comments</comments>
		<pubDate>Sun, 17 Jul 2011 15:32:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.su-root.eu/?p=151</guid>
		<description><![CDATA[Recently I decided I should make a permanent backup of my files on to blank DVD discs just in case my backup hard drive fails. I had the following requirements The data should be compressed but performance should be favoured over compressed sized. The data should be encrypted because some of the data I have [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I decided I should make a permanent backup of my files on to blank DVD discs just in case my backup hard drive fails. I had the following requirements</p>
<ul>
<li>The data should be compressed but performance should be favoured over compressed sized.</li>
<li>The data should be encrypted because some of the data I have I consider private information that I don&#8217;t want others to be able to access (e.g. gpg private key). However I can&#8217;t use my gpg private key for encryption because one of the things I am backing up is my gpg private key and in the event of hard drive failure I would not be able to decrypt my backup.</li>
<li>The data is ~14GB in size so the backup needs to be split across multiple discs.</li>
</ul>
<p>I thought I&#8217;d share my solution to this problem. I satisfied the above requirements by</p>
<ul>
<li>Using <tt class="inlineCode">tar</tt> to collect my files and directories into one file and gzip for compression. Although bzip2 provides a smaller compressed file size it is significantly slower than gzip.</li>
<li>Using <tt class="inlineCode">gpg</tt>&#8216;s symmetric encryption/decryption that uses a passphrase for encryption/decryption instead of a private and public key set for encryption/decryption.</li>
<li>Using the <tt class="inlineCode">split</tt> tool to break the encrypted compressed archive into 4699MB chunks so that I could burn these chunks on to single layer DVD+R discs.</li>
</ul>
<p>I will run through the individual steps required to encrypt and decrypt. The majority of the steps are on the command line. I will assume that you are using BASH as your terminal shell.</p>
<h2>Creating the backup</h2>
<ol>
<li>We&#8217;ll create the compressed archive containing one or more directories that we wish to backup. Run the following command where <tt class="inlineCode">backup.tar.gz</tt> is the name of the archive you wish to create and <tt class="inlineCode">/path/to/folder</tt> is the path to a folder you wish to add to the compressed archive.The <tt class="inlineCode">-z</tt> option instructs tar to compress the archive using gzip. The <tt class="inlineCode">-v</tt> option will show what file/directories are being added to the compressed archive as it is being created. The <tt class="inlineCode">-p</tt> option preserves file permissions.

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-cvpzf</span> backup.tar.gz <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>folder<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>You can add multiple files/folders to archive in one go when creating the archive. An example command is shown below</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-cvpzf</span> backup.tar.gz <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>folder1<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>folder2<span style="color: #000000; font-weight: bold;">/</span> path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">file</span></pre></div></div>

<p>If you want to see what files/directories are in your compressed archive run the following command where <tt class="inlineCode">backup.tar.gz</tt> is the name of the archive you created.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-tvf</span> backup.tar.gz</pre></div></div>

<p>Be careful, absolute file paths go &#8220;into&#8221; the archive, e.g. using <tt class="inlineCode">/path/to/folder</tt> will recreate the folder structure <tt class="inlineCode">path/to/folder</tt> inside the archive. Use relative file paths or use the <tt class="inlineCode">--strip-components</tt> option on absolute paths (see man page for tar) instead.</li>
<li>Now we&#8217;ll encrypt our compressed archive using gpg&#8217;s symmetric encryption which uses a passphrase instead of a public and private key set. To do this run the following command where <tt class="inlineCode">backup.tar.gz</tt> is the name of the compressed archive made in the previous step and <tt class="inlineCode">backup.tar.gz.gpg</tt> is the name for the encrypted compressed archive that we wish to create.

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ gpg <span style="color: #660033;">--enable-progress-filter</span> <span style="color: #660033;">--status-fd</span>=<span style="color: #000000;">0</span> <span style="color: #660033;">--compress-algo</span> uncompressed  <span style="color: #660033;">--output</span> backup.tar.gz.gpg <span style="color: #660033;">--symmetric</span> backup.tar.gz</pre></div></div>

<p>You will be asked to enter a passphrase and then confirm it. Do not forget this passphrase because without you will NOT be able to decrypt your backup.</p>
<p>By default the CAST5 algorithm is used for encryption but a different algorithm can be specified using the <tt class="inlineCode">--cipher-algo</tt> option. Run <tt class="inlineCode">gpg --version</tt> for a list of supported algorithms.</p>
<p>By default gpg will compress whatever it is encrypting, we don&#8217;t want this to happen because our archive has already been compressed. To prevent gpg doing compression when encrypting the option <tt class="inlineCode">--compress-algo uncompressed</tt> is specified.</p>
<p>The <tt class="inlineCode">--enable-progress-filter --status-fd=0</tt> options allow progress information to be shown. It will appear similar to what is shown below</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">PROGRESS backup.tar.gz ? <span style="color: #000000;">12181504</span> <span style="color: #000000;">104857600</span></pre></div></div>

<p>What this information means is documented in <tt class="inlineCode"><a href="http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=doc/DETAILS;h=543ae4d962e45691feb4d2e153ec3dab8978f48c;hb=92e66c70b64283cba2442ee0ca1268abecf7e107">doc/DETAILS</a></tt> available with the GNU gpg source code. Essentially the first number is the number of bytes processed so far and the next number is the total number of bytes to process.</li>
<li>Now we&#8217;ll split the encrypted compressed archive (<tt class="inlineCode">backup.tar.gz.gpg</tt>) by running the following command where <tt class="inlineCode">backup.tar.gz.gpg.</tt> is the prefix that is used for the filename of each chunk.

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">split</span> <span style="color: #660033;">--numeric-suffixes</span> <span style="color: #660033;">-b</span> 4699MB backup.tar.gz.gpg backup.tar.gz.gpg.</pre></div></div>

<p>This will split <tt class="inlineCode">backup.tar.gz.gpg</tt> into chunks (the original file will be kept) of size 4699MB (see <tt class="inlineCode">info split</tt> for the available multipliers).</p>
<p>Once this command has completed the result can be seen by running the following command</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">du</span> <span style="color: #660033;">--si</span> <span style="color: #000000; font-weight: bold;">*</span>
4.7G	backup.tar.gz.gpg.00
4.7G	backup.tar.gz.gpg.01
2.7G	backup.tar.gz.gpg.02</pre></div></div>

</li>
<li>Now each of the chunks can be burned on to a single layer DVD+R disc. This is the one step I prefer not to use command line tools for and I chose to use k3b for the job. I advise that you instruct whatever disc burning software you use to verify the discs it burns. I also advise you make multiple copies of the discs so that if one is damaged you can still get your data!</li>
</ol>
<p>The previous steps can be joined together using pipes and is illustrated below. The progress information isn&#8217;t particularly useful though as the total number of bytes to be encrypted is not known to gpg.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-czpv</span> <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>folder <span style="color: #000000; font-weight: bold;">|</span> gpg <span style="color: #660033;">--enable-progress-filter</span> <span style="color: #660033;">--status-fd</span>=<span style="color: #000000;">2</span> <span style="color: #660033;">--compress-algo</span> uncompressed <span style="color: #660033;">--symmetric</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">split</span> <span style="color: #660033;">--numeric-suffixes</span> <span style="color: #660033;">-b</span> 4699MB - backup.tar.gz.gpg.</pre></div></div>

<h2>Accessing the backup</h2>
<ol>
<li>Transfer the split chunks on to your machine by copying them from the DVD discs they were burnt onto to your computer&#8217;s hard drive.</li>
<li>Now we&#8217;ll rejoin the chunks. First switch to the directory you copied the chunks to then run the following command

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">cat</span> backup.tar.gz.gpg.<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">&gt;</span> backup.tar.gz.gpg</pre></div></div>

</li>
<li>Next we&#8217;ll decrypt <tt class="inlineCode">backup.tar.gz.gpg</tt> by running the following command where <tt class="inlineCode">backup.tar.gz</tt> is the decrypted compressed archive.

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ gpg <span style="color: #660033;">--enable-progress-filter</span> <span style="color: #660033;">--status-fd</span>=<span style="color: #000000;">1</span> <span style="color: #660033;">--output</span> backup.tar.gz <span style="color: #660033;">-d</span> backup.tar.gz.gpg</pre></div></div>

<p>Note you will be asked for the passphrase you used to encrypt with originally.
</li>
<li>You can now check the contents of the decrypted compressed archive by running the following command

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-tvzf</span> backup.tar.gz</pre></div></div>

<p>If you wish to extract the files from the archive you can run the following command where <tt class="inlineCode">/path/to/extract/to</tt> is the directory in which the extracted files and directories will be put.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xvzf</span> backup.tar.gz <span style="color: #660033;">-C</span> <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>extract<span style="color: #000000; font-weight: bold;">/</span>to</pre></div></div>

</li>
<p>The previous steps can be joined together using pipes and is illustrated below.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">cat</span> backup.tar.gz.gpg.<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">|</span> gpg <span style="color: #660033;">--enable-progress-filter</span> <span style="color: #660033;">--status-fd</span>=<span style="color: #000000;">2</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xvzf</span> -  <span style="color: #660033;">-C</span> <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>extract<span style="color: #000000; font-weight: bold;">/</span>to</pre></div></div>

<p>Note that the gpg&#8217;s progress display doesn&#8217;t seem to work at all. I&#8217;m not sure why</p>
</ol>
<p>I hope someone finds this useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.su-root.eu/uncategorized/making-an-encrypted-and-compressed-backup-of-your-files-onto-dvds/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Turn your Linux computer into a wireless access point using hostapd</title>
		<link>http://www.su-root.eu/computing/turn-your-linux-computer-in-a-wireless-access-point-using-hostapd</link>
		<comments>http://www.su-root.eu/computing/turn-your-linux-computer-in-a-wireless-access-point-using-hostapd#comments</comments>
		<pubDate>Thu, 26 Aug 2010 18:43:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[access point]]></category>
		<category><![CDATA[AP]]></category>
		<category><![CDATA[hostapd]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[wireless]]></category>

		<guid isPermaLink="false">http://www.su-root.eu/?p=56</guid>
		<description><![CDATA[A few weeks ago I was living in accommodation that provided internet access via a wired router. This obviously meant no wireless access for some of my devices. This was especially bad for my Nexus One phone which because of the lack of wireless received all data via my mobile phone network causing me to [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago I was living in accommodation that provided internet access via a wired router. This obviously meant no wireless access for some of my devices. This was especially bad for my Nexus One phone which because of the lack of wireless received all data via my mobile phone network causing me to go over my fair usage policy! Also have you ever tried sharing one ethernet cable with your girlfriend/boyfriend, it doesn&#8217;t work.</p>
<p>This was quite irritating so I decided I would try to turn my netbook into a wireless access point (AP). A diagram below illustrates the network setup I was trying to achieve.<br />
<a href="http://www.su-root.eu/wp-content/uploads/2010/08/diagram-base.png"><img class="aligncenter size-full wp-image-57" title="Network diagram" src="http://www.su-root.eu/wp-content/uploads/2010/08/diagram-base.png" alt="Network diagram" width="605" height="316" /></a></p>
<ul>
<li><b>DSL/cable modem</b> &#8211; In my setup the internet connection is provided by a cable modem linked to the wired router via an ethernet cable.</li>
<li><b>Wired router</b> &#8211; In my setup the wired router was a Netgear RP614 v2 which has some truly awful firmware installed. This router provides a DHCP server and a gateway.</li>
<li><b>AP machine</b> &#8211; In my setup this is the machine I turned into an access point (AP) which is connected to the wired router via an ethernet cable. This is a Asus EeePC 1005HA netbook. This has an Atheros AR9825 wireless card (uses ath9k driver in Linux kernel) and an Atheros AR8132 wired ethernet card (uses atl1c driver in Linux kernel).</li>
<li><b>WiFi device</b> &#8211; This could be any IEEE 802.11 Wi-Fi device. In my setup this was my Nexus One phone. In Wi-Fi terminology this is referred to as a station (STA).</li>
</ul>
<p>In the above network setup an AP is made using the <b>AP machine</b> by creating a bridge between the wireless card (in Master mode) &#038; the wired ethernet card and then using the <b class="inlineCode">hostapd</b> daemon to manage the access point. I used Arch Linux using version 2.6.35 of the stock Arch Linux kernel.</p>
<h3>The AP machine requirements</h3>
<p>In order to setup an wireless AP the <b>AP machine</b> must have the following:</p>
<ul>
<li>A Linux distribution installed or running off a live-cd (you need Linux kernel >= 2.6.30 if using the ath9k driver)</li>
<li>A wired ethernet card</li>
<li>A wireless card that is supported by <b class="inlineCode">hostapd</b>. This card must be capable of going into &#8220;Master&#8221; mode using the current driver you are using. A list of supported wireless cards/drivers can be found <a href="http://hostap.epitest.fi/hostapd/">here</a>. In my case I&#8217;m using the ath9k driver which implements the MAC80211 interface which <b class="inlineCode">hostapd</b> supports.</li>
<li>The <b class="inlineCode">hostapd</b> daemon installed.</li>
<li>The <b class="inlineCode">brctl</b> program installed which is available from the bridge-utils package in most Linux distributions.</li>
</ul>
<h3>Checking what wireless driver you are currently using</h3>
<p>The wireless card in your machine is what will probably cause the biggest headache to most users as hostapd doesn&#8217;t support every wireless driver.</p>
<p>To see what wireless driver you are currently using run the following command and look for a section mentioning your wireless card.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">lspci</span> <span style="color: #660033;">-k</span></pre></div></div>

<p>For example the relevant part of my output appears as follows which shows the kernel is using the ath9k module.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">02:<span style="color: #000000;">00.0</span> Network controller: Atheros Communications Inc. AR9285 Wireless Network Adapter <span style="color: #7a0874; font-weight: bold;">&#40;</span>PCI-Express<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">rev</span> 01<span style="color: #7a0874; font-weight: bold;">&#41;</span>
	Subsystem: Device 1a3b:<span style="color: #000000;">1089</span>
	Kernel driver <span style="color: #000000; font-weight: bold;">in</span> use: ath9k
	Kernel modules: ath9k</pre></div></div>

<p>You can check to see if your driver implements the MAC80211 interface (one of the driver interfaces <b class="inlineCode">hostapd</b> supports) by running the following command (where KERNEL_MODULE is the kernel module being used by your wireless card, in my case this is ath9k) which will tell you what other kernel modules your driver depends on.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">modinfo KERNEL_MODULE <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">'^depends:'</span></pre></div></div>

<p>For example when I run the above command I see the following output which confirms that the ath9k driver depends on mac80211 which means it should implement the MAC80211 interface.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">depends:        ath9k_hw,mac80211,led-class,ath,cfg80211,ath9k_common</pre></div></div>

<h3>Setting up the AP machine</h3>
<p>In this section the Ethernet interface is <b class="inlineCode">eth0</b>, the wireless interface is <b class="inlineCode">wlan0</b> &#038; the bridge interface is <b class="inlineCode">br0</b>. You will need to run most commands as root or using sudo.</p>
<ol>
<li>
<p>Make a back-up (in case you mess up your configuration file) copy of your <b class="inlineCode">hostapd</b> configuration file (usually located at <b class="inlineCode">/etc/hostapd/hostapd.conf</b>) and open the original configuration file with your favourite text editor.</p>
<p>The hostapd configuration file configures how your access point will behave and has a lot of options. It is here you can set important settings such as security, channel, SSID, etc. . Below are some of the most important settings I set in my configuration file. You should set yours appropriately.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#wireless interface to use as AP</span>
<span style="color: #007800;">interface</span>=wlan0
&nbsp;
<span style="color: #666666; font-style: italic;">#bridge device (needed for madwifi &amp; nl80211 drivers)</span>
<span style="color: #007800;">bridge</span>=br0
&nbsp;
<span style="color: #666666; font-style: italic;">#driver interface type (hostapd/wired/madwifi/prism54/test/none/nl80211/bsd)</span>
<span style="color: #666666; font-style: italic;"># Use nl80211 for wifi drivers that implement MAC80211 interface</span>
<span style="color: #666666; font-style: italic;">#You should set this to your relevant driver interface type</span>
<span style="color: #007800;">driver</span>=nl80211
&nbsp;
<span style="color: #666666; font-style: italic;">#Enables logging to standard output (useful for debugging)</span>
<span style="color: #007800;">logger_stdout</span>=-<span style="color: #000000;">1</span>
<span style="color: #007800;">logger_stdout_level</span>=<span style="color: #000000;">2</span>
&nbsp;
&nbsp;
<span style="color: #666666; font-style: italic;">#Set SSID to use</span>
<span style="color: #007800;">ssid</span>=YOUR_SSID
&nbsp;
<span style="color: #666666; font-style: italic;"># Operation mode (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g)</span>
<span style="color: #666666; font-style: italic;"># note your card may not support every mode.</span>
<span style="color: #007800;">hw_mode</span>=g
&nbsp;
<span style="color: #666666; font-style: italic;">#Channel to use (1-13)</span>
<span style="color: #007800;">channel</span>=<span style="color: #000000;">6</span>
&nbsp;
&nbsp;
<span style="color: #666666; font-style: italic;"># IEEE 802.11 specifies two authentication algorithms. hostapd can be</span>
<span style="color: #666666; font-style: italic;"># configured to allow both of these or only one. Open system authentication</span>
<span style="color: #666666; font-style: italic;"># should be used with IEEE 802.1X.</span>
<span style="color: #666666; font-style: italic;"># Bit fields of allowed authentication algorithms:</span>
<span style="color: #666666; font-style: italic;"># bit 0 = Open System Authentication</span>
<span style="color: #666666; font-style: italic;"># bit 1 = Shared Key Authentication (requires WEP)</span>
<span style="color: #007800;">auth_algs</span>=<span style="color: #000000;">3</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#maximum number of stations (clients connecting to AP) allowed</span>
<span style="color: #666666; font-style: italic;"># Maximum number of stations allowed in station table. New stations will be</span>
<span style="color: #666666; font-style: italic;"># rejected after the station table is full. IEEE 802.11 has a limit of 2007</span>
<span style="color: #666666; font-style: italic;"># different association IDs, so this number should not be larger than that.</span>
<span style="color: #007800;">max_num_sta</span>=<span style="color: #000000;">5</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Enable WPA2</span>
<span style="color: #666666; font-style: italic;"># This field is a bit field that can be used to enable WPA (IEEE 802.11i/D3.0)</span>
<span style="color: #666666; font-style: italic;"># and/or WPA2 (full IEEE 802.11i/RSN):</span>
<span style="color: #666666; font-style: italic;"># bit0 = WPA</span>
<span style="color: #666666; font-style: italic;"># bit1 = IEEE 802.11i/RSN (WPA2) (dot11RSNAEnabled)</span>
<span style="color: #007800;">wpa</span>=<span style="color: #000000;">2</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Set passphrase for WPA</span>
<span style="color: #007800;">wpa_passphrase</span>=YOUR_PASSWORD
<span style="color: #007800;">wpa_key_mgmt</span>=WPA-PSK
&nbsp;
<span style="color: #666666; font-style: italic;"># Set of accepted cipher suites (encryption algorithms) for pairwise keys</span>
<span style="color: #666666; font-style: italic;"># (unicast packets). This is a space separated list of algorithms:</span>
<span style="color: #666666; font-style: italic;"># CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]</span>
<span style="color: #666666; font-style: italic;"># TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]</span>
<span style="color: #666666; font-style: italic;"># Group cipher suite (encryption algorithm for broadcast and multicast frames)</span>
<span style="color: #666666; font-style: italic;"># is automatically selected based on this configuration. If only CCMP is</span>
<span style="color: #666666; font-style: italic;"># allowed as the pairwise cipher, group cipher will also be CCMP. Otherwise,</span>
<span style="color: #666666; font-style: italic;"># TKIP will be used as the group cipher.</span>
<span style="color: #666666; font-style: italic;"># (dot11RSNAConfigPairwiseCiphersTable)</span>
<span style="color: #666666; font-style: italic;"># Pairwise cipher for WPA (v1) (default: TKIP)</span>
<span style="color: #007800;">wpa_pairwise</span>=TKIP CCMP
<span style="color: #666666; font-style: italic;"># Pairwise cipher for RSN/WPA2 (default: use wpa_pairwise value)</span>
<span style="color: #007800;">rsn_pairwise</span>=CCMP</pre></div></div>

<p>The <b class="inlineCode">hostapd</b> configuration file has many options which are documented in the example configuration file. Other than that there isn&#8217;t really much documentation for configuring <b class="inlineCode">hostapd</b>.</p>
</li>
<li>
<p>Disable any running network connection manager (e.g. wicd, Gnome Network manager, KNetwork manager), kill any running DHCP clients and disable the interfaces. In my case I&#8217;m using wicd so I ran the following commands.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>rc.d<span style="color: #000000; font-weight: bold;">/</span>wicd stop
<span style="color: #c20cb9; font-weight: bold;">killall</span> dhcpcd
<span style="color: #c20cb9; font-weight: bold;">ifconfig</span> eth0 down
<span style="color: #c20cb9; font-weight: bold;">ifconfig</span> wlan0 down</pre></div></div>

<p>The reason for doing this is we don&#8217;t want any of our interfaces to be automatically configured as neither eth0 or wlan0 should be given an IP address via DHCP.</p>
</li>
<li>Enable IP forwarding by running the following command.

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>sys<span style="color: #000000; font-weight: bold;">/</span>net<span style="color: #000000; font-weight: bold;">/</span>ipv4<span style="color: #000000; font-weight: bold;">/</span>ip_forward</pre></div></div>

<p>This is required because clients (STA &#8211; stations) connecting to the AP will most of the time want their traffic forwarded to the wired router.
      </li>
<li>
<p>We will now setup our ethernet bridge by running the following commands.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">brctl addbr br0 <span style="color: #666666; font-style: italic;">#This creates the br0 bridge</span>
brctl addif br0 eth0 <span style="color: #666666; font-style: italic;">#This adds the eth0 interface to the br0 ethernet bridge</span>
brctl setfd br0 <span style="color: #000000;">0</span> <span style="color: #666666; font-style: italic;">#This sets the forwarding delay to 0 seconds</span></pre></div></div>

<p>The current bridges can be shown by running <b class="inlineCode">brctl show</b>. The result can be seen below (bridge id has been changed).</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">bridge name	bridge <span style="color: #c20cb9; font-weight: bold;">id</span>		STP enabled	interfaces
br0		<span style="color: #000000;">0000.000000000000</span>	no		eth0</pre></div></div>

<p>You have probably noticed that the wlan0 interface is not part of the bridge. This is deliberate because the wlan0 interface cannot be added to the bridge until it is in &#8220;Master&#8221; mode. Unfortunately how this is done varies between drivers.</p>
<ul>
<li>For the hostap driver I believe you need to run the following commands to put the wireless card into Master mode and add it to the ethernet bridge although I haven&#8217;t tested this.

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">iwconfig wlan0 mode Master <span style="color: #666666; font-style: italic;">#Put the wlan0 interface in master mode</span>
brctl addif br0 wlan0 <span style="color: #666666; font-style: italic;">#Add the wlan0 interface to the ethernet bridge br0</span></pre></div></div>

<p>The hostap driver can be configured in many ways see <a href="http://w1.fi/cgi-bin/viewcvs.cgi/hostap/README?content-type=text/plain&#038;revision=HEAD">this page</a></li>
<li>For the madwifi driver you will need to run the following commands apparently according to this <a href="http://www.linux.com/archive/feed/55617">article</a>.

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">wlanconfig ath0 destroy <span style="color: #666666; font-style: italic;">#destroy the VAP (virtual access point) ath0</span>
wlanconfig ath0 create wlandev wlan0 wlanmode ap <span style="color: #666666; font-style: italic;">#create a VAP from wlan0 in access point mode</span>
<span style="color: #c20cb9; font-weight: bold;">ifconfig</span> ath0 mode Master <span style="color: #666666; font-style: italic;">#put VAP ath0 in Master mode</span>
brctl addif br0 ath0 <span style="color: #666666; font-style: italic;">#add VAP ath0 to ethernet bridge br0</span>
<span style="color: #666666; font-style: italic;">#Note that hostapd should use interface ath0 not wlan0</span></pre></div></div>

</li>
<li>For drivers that implement the MAC80211 interface (in my case the ath9k driver does) we must use <b class="inlineCode">hostapd</b> to put the interface Master mode and then add the wlan0 interface to the bridge afterwards. An explanation of why this is necessary is given <a href="http://acx100.erley.org/stable.html">here</a>. This step is discussed later on.</li>
</ul>
</li>
<li>
<p>We will now launch <b class="inlineCode">hostapd</b>. For initial testing purposes we can use the following command which will not go into the background which will show useful debugging output.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">hostapd <span style="color: #660033;">-dd</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>hostapd<span style="color: #000000; font-weight: bold;">/</span>hostapd.conf</pre></div></div>

<p>If you&#8217;ve set something wrong in your hostapd.conf file you will warned about it here. Here is a sample of the output that is produced when <b class="inlineCode">hostapd</b> starts successfully (with mac address of wlan0 not shown).</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">Configuration <span style="color: #c20cb9; font-weight: bold;">file</span>: hostapd.conf
<span style="color: #007800;">ctrl_interface_group</span>=<span style="color: #000000;">0</span>
Opening raw packet socket <span style="color: #000000; font-weight: bold;">for</span> ifindex <span style="color: #660033;">-1218870462</span>
BSS count <span style="color: #000000;">1</span>, BSSID mask ff:ff:ff:ff:ff:ff <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">0</span> bits<span style="color: #7a0874; font-weight: bold;">&#41;</span>
SIOCGIWRANGE: WE<span style="color: #7a0874; font-weight: bold;">&#40;</span>compiled<span style="color: #7a0874; font-weight: bold;">&#41;</span>=<span style="color: #000000;">22</span> WE<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">source</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>=<span style="color: #000000;">21</span> <span style="color: #007800;">enc_capa</span>=0xf
nl80211: Added 802.11b mode based on 802.11g information
RATE<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #007800;">rate</span>=<span style="color: #000000;">10</span> <span style="color: #007800;">flags</span>=0x2
RATE<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #007800;">rate</span>=<span style="color: #000000;">20</span> <span style="color: #007800;">flags</span>=0x6
RATE<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">2</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #007800;">rate</span>=<span style="color: #000000;">55</span> <span style="color: #007800;">flags</span>=0x4
RATE<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">3</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #007800;">rate</span>=<span style="color: #000000;">110</span> <span style="color: #007800;">flags</span>=0x4
Passive scanning not supported
Mode: IEEE 802.11b  Channel: <span style="color: #000000;">6</span>  Frequency: <span style="color: #000000;">2437</span> MHz
Flushing old station entries
Deauthenticate all stations
Using interface wlan0 with hwaddr 00:00:00:00:00:00 and ssid <span style="color: #ff0000;">'YOUR_SSID'</span>
WPA: group state machine entering state GTK_INIT <span style="color: #7a0874; font-weight: bold;">&#40;</span>VLAN-ID <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
GMK - <span style="color: #c20cb9; font-weight: bold;">hexdump</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #007800;">len</span>=<span style="color: #000000;">32</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>: <span style="color: #7a0874; font-weight: bold;">&#91;</span>REMOVED<span style="color: #7a0874; font-weight: bold;">&#93;</span>
GTK - <span style="color: #c20cb9; font-weight: bold;">hexdump</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #007800;">len</span>=<span style="color: #000000;">32</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>: <span style="color: #7a0874; font-weight: bold;">&#91;</span>REMOVED<span style="color: #7a0874; font-weight: bold;">&#93;</span>
WPA: group state machine entering state SETKEYSDONE <span style="color: #7a0874; font-weight: bold;">&#40;</span>VLAN-ID <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
wlan0: Setup of interface done.
MGMT <span style="color: #7a0874; font-weight: bold;">&#40;</span>TX callback<span style="color: #7a0874; font-weight: bold;">&#41;</span> ACK</pre></div></div>

<p>Once you have found a configuration where hostapd starts correctly you can start it in the background by running the following command if you wish (kill your original hostapd first!).</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">hostapd <span style="color: #660033;">-B</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>hostapd<span style="color: #000000; font-weight: bold;">/</span>hostapd.conf</pre></div></div>

</li>
<li>
<p>If you are using drivers that don&#8217;t implement the MAC80211 interface then skip this step.<br />
If you are using wireless card drivers that do implement the MAC80211 interface then your card should now have been put into &#8220;Master&#8221; mode by <b class="inlineCode">hostapd</b>. You can check this by running <b class="inlineCode">iwconfig wlan0</b> . You should see something similar to the following output.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">wlan0     IEEE 802.11bgn  Mode:Master  Frequency:<span style="color: #000000;">2.437</span> GHz  Tx-Power=<span style="color: #000000;">20</span> dBm   
          Retry  long limit:<span style="color: #000000;">7</span>   RTS <span style="color: #007800;">thr</span>=<span style="color: #000000;">2347</span> B   Fragment <span style="color: #007800;">thr</span>=<span style="color: #000000;">2346</span> B   
          Power Management:off</pre></div></div>

<p>You should now add wlan0 to the ethernet bridge by running the following command.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">brctl addif br0 wlan0</pre></div></div>

</li>
<li>
<p>Now we should bring up the eth0 interface and our bridge. This can be done by running the following command.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ifconfig</span> eth0 up
<span style="color: #c20cb9; font-weight: bold;">ifconfig</span> br0 up</pre></div></div>

<p>Our AP should now be operational so go give it a try!</p>
</li>
<li>This is an optional step. If you&#8217;d like to be able access the internet on the machine you&#8217;ve decided to use as an AP then we need to get an IP address for the br0 interface from the DHCP server. This can be done by running the following command.

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">dhcpcd br0</pre></div></div>

</li>
</ol>
<p>Congratulations you should now have a working wireless AP. Just as a note you may find you are able to connect to the wireless network but then are not able to access &#8220;the internet&#8221;. This happened to me and this was caused by a particular <b class="inlineCode">iptables</b> rule I had set in the past and had forgotten about. For initial debugging you may wish to stop <b class="inlineCode">iptables</b> entirely.</p>
<h3>Disabling your AP</h3>
<p>Here are the commands you should run to disable your AP (access point).</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">killall</span> dhcpcd
<span style="color: #c20cb9; font-weight: bold;">killall</span> hostapd
brctl delif br0 wlan0 <span style="color: #666666; font-style: italic;">#remove wlan0 from ethernet bridge br0</span>
brctl delif br0 eth0 <span style="color: #666666; font-style: italic;">#remove eth0 from ethernet bridge br0</span>
brctl delbr br0 <span style="color: #666666; font-style: italic;">#delete ethernet bridge br0</span></pre></div></div>

<h3>Acknowledgements</h3>
<p>I&#8217;m indebted to the following articles which were very useful.</p>
<ul>
<li><a href="http://www.robert-heyward.com/rjh/?page_id=12">ath9k &#038; hostapd HOWTO &#8211; Robert Heyward</li>
<li><a href="http://www.linux.com/archive/feed/55617">Create a secure linux based wireless access point &#8211; Manolis Tzanidakis </a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.su-root.eu/computing/turn-your-linux-computer-in-a-wireless-access-point-using-hostapd/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>View websites like a &#8220;desktop&#8221; machine from your Android phone</title>
		<link>http://www.su-root.eu/computing/android/view-websites-like-a-desktop-machine-from-your-android-phone</link>
		<comments>http://www.su-root.eu/computing/android/view-websites-like-a-desktop-machine-from-your-android-phone#comments</comments>
		<pubDate>Fri, 28 May 2010 12:03:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.su-root.eu/?p=21</guid>
		<description><![CDATA[Sometimes I get really annoyed when I try to visit a website using the built in Android browser only to be redirected to the &#8220;mobile&#8221; version of that website with no option to visit the full version site. A good example of this is the National rail website. Some websites however handle this better by [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes I get really annoyed when I try to visit a website using the built in Android browser only to be redirected to the <a href="#mobile">&#8220;mobile&#8221; version</a> of that website with no option to visit the <strong>full version</strong> site. A good example of this is the<a href="http://www.nationalrail.co.uk" target="_blank"> National rail website</a>.</p>
<p>Some websites however handle this better by giving the option of using the <strong>full version</strong> of a site instead of the <strong>mobile version </strong>via a link at the bottom of the page. A good example is the <a href="http://m.wikipedia.org" target="_blank">mobile wikipedia site</a>.</p>
<p>Most websites use the browser&#8217;s <strong>user-agent string</strong> to decided whether to show the full site or the mobile site. The built in Android browser doesn&#8217;t normally give the option to change the user-agent string but you can by doing the following:</p>
<ol>
<li>Start up the built in Android browser on your phone.</li>
<li>Type <a href="#aboutdebug"><strong>about:debug</strong></a> into the url box and press &#8220;GO&#8221; button.</li>
<li>Nothing will appeared to have happened, however if you press your <a href="#menukey">menu key</a> on your phone and go into settings then <a href="#new_settings">new options will be available.</a></li>
<li>Find the <a href="#new_settings">UAString option</a> (right at the end of the list) and <a href="#ua_string">change it to Desktop</a>.</li>
<li>You can now browse the internet like a &#8220;desktop&#8221; machine.</li>
</ol>
<p>Note this change isn&#8217;t permanent so you will need to perform these steps again sometimes.</p>
<p>The <a href="http://www.androidzoom.com/android_applications/communication/dolphin-browser_bjfp.html">Dolphin browser</a> available from the Android market place has the option to change the user-agent string permanently but I&#8217;m not such a huge fan of Dolphin as it&#8217;s a bit sluggish.</p>
<p>I&#8217;ve included a few screenshots which can been seen below.</p>
<div id="attachment_28" class="wp-caption alignleft" style="width: 160px"><a name="mobile"></a><a href="http://www.su-root.eu/wp-content/uploads/2010/05/mobile-national-rail.png"><img class="size-thumbnail wp-image-28" title="Mobile version of the National rail website" src="http://www.su-root.eu/wp-content/uploads/2010/05/mobile-national-rail-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">Mobile version of the National rail website</p></div>
<div id="attachment_43" class="wp-caption alignleft" style="width: 160px"><a name="aboutdebug"><a href="http://www.su-root.eu/wp-content/uploads/2010/05/about.debug_.png"><img class="size-thumbnail wp-image-43" title="about.debug" src="http://www.su-root.eu/wp-content/uploads/2010/05/about.debug_-150x150.png" alt="Typing about:debug" width="150" height="150" /></a></a><p class="wp-caption-text">Typing about:debug into the URL box</p></div>
<div id="attachment_31" class="wp-caption alignleft" style="width: 160px"><a name="menukey"></a><a href="http://www.su-root.eu/wp-content/uploads/2010/05/menu.more_.png"><img class="size-thumbnail wp-image-31 " title="Menu shown by pressing menu key" src="http://www.su-root.eu/wp-content/uploads/2010/05/menu.more_-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">Menu displayed by pressing the menu key in the built in Android browser</p></div>
<div id="attachment_32" class="wp-caption alignleft" style="width: 160px"><a name="new_settings"></a><a href="http://www.su-root.eu/wp-content/uploads/2010/05/settings.png"><img class="size-thumbnail wp-image-32" title="Android Browser settings" src="http://www.su-root.eu/wp-content/uploads/2010/05/settings-150x150.png" alt="Android browser settings, UAString option is now available." width="150" height="150" /></a><p class="wp-caption-text">Android browser settings, UAString option is now available.</p></div>
<div id="attachment_34" class="wp-caption alignleft" style="width: 160px"><a name="ua_string"></a><a href="http://www.su-root.eu/wp-content/uploads/2010/05/UAstring.png"><img class="size-thumbnail wp-image-34" title="UAstring" src="http://www.su-root.eu/wp-content/uploads/2010/05/UAstring-150x150.png" alt="Choice of User-agent strings" width="150" height="150" /></a><p class="wp-caption-text">Choice of User-agent strings</p></div><br />
<div id="attachment_22" class="wp-caption alignleft" style="width: 160px"><a href="http://www.su-root.eu/wp-content/uploads/2010/05/full-national-rail.png"><img class="size-thumbnail wp-image-22 " title="The full version of the National Rail site" src="http://www.su-root.eu/wp-content/uploads/2010/05/full-national-rail-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">The full version of the National Rail site</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.su-root.eu/computing/android/view-websites-like-a-desktop-machine-from-your-android-phone/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Windows USB driver for Android development</title>
		<link>http://www.su-root.eu/computing/android/usb-driver-for-android-development</link>
		<comments>http://www.su-root.eu/computing/android/usb-driver-for-android-development#comments</comments>
		<pubDate>Fri, 28 May 2010 10:45:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.su-root.eu/?p=15</guid>
		<description><![CDATA[I only had my girfriend&#8217;s laptop to use today and I needed to use the ddms tool to take screenshots for the User agent blog post. Unfortunately it turns out I needed to install the Java SDK to just so I could run android.bat to download the USB driver that windows needs just so tools [...]]]></description>
			<content:encoded><![CDATA[<p>I only had my girfriend&#8217;s laptop to use today and I needed to use the <b class="inlineCode">ddms</b> tool to take screenshots for the <a href="/computing/android/view-websites-like-a-desktop-machine-from-your-android-phone">User agent blog post</a>.</p>
<p>Unfortunately it turns out I needed to install the Java SDK to just so I could run <b class="inlineCode">android.bat</b> to download the USB driver that windows needs just so tools like <strong>adb</strong> can communicate with my phone.</p>
<p>Well I had to install the Java SDK anyway so I could use the <b class="inlineCode">ddms</b> tool but I thought, what if someone just wants to use <b class="inlineCode">adb</b> tool? To this end I&#8217;ve put the <a href="http://developer.android.com/sdk/win-usb.html" target="_blank">USB driver (revision 3)</a> on this site <a href="/downloads/android_usb_driver_r3.zip">here</a> for others to download if they need it.</p>
<p>I don&#8217;t make guarantees about the file integrity though but the MD5 sum was <strong>2755ab04ea74b8a369750b0ecdf958fd</strong> when I uploaded the file.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.su-root.eu/computing/android/usb-driver-for-android-development/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

