<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>A Random String of Bits &#187; linux</title>
	<atom:link href="http://stringofbits.net/tag/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://stringofbits.net</link>
	<description>Sequences of bytes about Technology, Programming, Gaming, Doctor Who, and more</description>
	<lastBuildDate>Sat, 28 Jan 2012 12:06:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='stringofbits.net' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>A Random String of Bits &#187; linux</title>
		<link>http://stringofbits.net</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://stringofbits.net/osd.xml" title="A Random String of Bits" />
	<atom:link rel='hub' href='http://stringofbits.net/?pushpress=hub'/>
		<item>
		<title>Desura &#8211; what Steam should have been</title>
		<link>http://stringofbits.net/2011/11/12/desura-what-steam-should-have-been/</link>
		<comments>http://stringofbits.net/2011/11/12/desura-what-steam-should-have-been/#comments</comments>
		<pubDate>Sat, 12 Nov 2011 18:00:23 +0000</pubDate>
		<dc:creator>Anna Wiggins</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[Amnesia]]></category>
		<category><![CDATA[Desura]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=581</guid>
		<description><![CDATA[I like Steam. In a gaming world of ubiquitous DRM, Steam strikes a nice balance between functionality and nuisance. That is, Steam makes it dead simple to install and launch games, and the trade-off is that it does some fairly unobtrusive DRM. This is a good model, although I can think of several ways in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=581&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I like <a href="http://steampowered.com/">Steam</a>. In a gaming world of ubiquitous DRM, Steam strikes a nice balance between functionality and nuisance. That is, Steam makes it dead simple to install and launch games, and the trade-off is that it does some fairly unobtrusive DRM. This is a good model, although I can think of several ways in which it could provide a better end-user experience.</p>
<p>At the very top of my personal list of improvements to Steam would be &#8220;native Linux support&#8221;. And I know, I know, I&#8217;ve heard all of the conventional wisdom: There isn&#8217;t a big enough market to justify porting it. Even if there was, there aren&#8217;t enough Linux-native games to make the service very useful. Everybody knows Windows is the OS for gaming.</p>
<p>But sitting here staring down that conventional wisdom is <a href="http://www.desura.com/">Desura</a>. I&#8217;ve known that Desura existed for a while &#8211; the Frozenbyte Bundle and the Humble Bundle 3 both had options to acquire &#8216;Desura keys&#8217;, so it was obviously a Steam competitor. Until recently, though, I had just dismissed the product &#8211; obviously, I thought, any Steam competitor is going to lag far behind in available games and basic feature set, given Steam&#8217;s popularity. Faulty logic, but there it is.</p>
<p>So when a friend told me that Desura works in Linux, I was pretty stunned. I had gotten used to not being the &#8216;target audience&#8217; for game companies. And now, a few hours later, I&#8217;ve got Desura installed, my humble bundle keys redeemed, and I&#8217;ve purchased Amnesia: The Dark Descent (which was on sale at the time, and I&#8217;ve been meaning to buy for some time anyway).</p>
<p>Desura&#8217;s (native Linux!) install is smooth and painless, and its (native Linux!) interface is pretty nice. It has some rough edges, to be fair: most of what it does is load websites that are skinned to feel like part of the interface (much like Steam does), and some of those pages are still obviously works in progress. On the other hand, everything works quickly and smoothly. The main options menu is accessed by clicking the Desura logo, which doesn&#8217;t look obviously like a button. So that&#8217;s a design flaw, but it didn&#8217;t take too long to work out. Redeeming gift keys is more streamlined than in Steam (once you find where to do it!).</p>
<p>Now, Desura certainly isn&#8217;t perfect, and it lacks very useful features that Steam has had for some time. One problem I noticed is that it lacks Steam&#8217;s resume-after-closing feature; I started to install Amnesia, absent-mindedly closed the client later, and it didn&#8217;t auto-resume after I opened Desura again. Desura doesn&#8217;t track how much time you&#8217;ve sunk into a given game. It also doesn&#8217;t have any way to access your save games from multiple locations (a la Steam&#8217;s cloud sync), and while their developer info mentions achievements, I haven&#8217;t seen any games implement Desura-specific achievements, nor would I even know where to look to find them.</p>
<p>Another feature that both Steam and Desura need are tags, or some sort of organizational system for your games. Right now all Desura has are &#8216;all games&#8217; and &#8216;favorite games&#8217;. Steam has a categories system, but it doesn&#8217;t always save that information across accounts, and you can&#8217;t tag games with multiple categories. A proper tagging-based sorting system would be great.</p>
<p>So, Desura has a spartan interface, but it&#8217;s also still very young. And more importantly, it runs flawlessly in Linux, which makes it very appealing to me. If you game in Linux at all, check out Desura. It&#8217;s already a great service, and it looks like it&#8217;s only going to get better.</p>
<br />Filed under: <a href='http://stringofbits.net/category/gaming/'>Gaming</a> Tagged: <a href='http://stringofbits.net/tag/amnesia/'>Amnesia</a>, <a href='http://stringofbits.net/tag/desura/'>Desura</a>, <a href='http://stringofbits.net/tag/linux/'>linux</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/stringofbits.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/stringofbits.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/stringofbits.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/stringofbits.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/stringofbits.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/stringofbits.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/stringofbits.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/stringofbits.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/stringofbits.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/stringofbits.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/stringofbits.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/stringofbits.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/stringofbits.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/stringofbits.wordpress.com/581/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=581&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2011/11/12/desura-what-steam-should-have-been/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7a6c6c99ccd3e2bbaec318a52fb3d43c?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">annabunches</media:title>
		</media:content>
	</item>
		<item>
		<title>BitTorrent, the Linux way</title>
		<link>http://stringofbits.net/2011/05/26/bittorrent-the-linux-way/</link>
		<comments>http://stringofbits.net/2011/05/26/bittorrent-the-linux-way/#comments</comments>
		<pubDate>Thu, 26 May 2011 18:00:11 +0000</pubDate>
		<dc:creator>Anna Wiggins</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[bittorrent]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=306</guid>
		<description><![CDATA[I use BitTorrent a lot. Most Linux distributions have torrents available, and I have gotten a lot of Creative Commons-licensed music, such as the work of Jonathan Coulton, via BitTorrent. It is a great way to deliver content. However, I have a problem with (most of) the available BitTorrent clients. Given what BitTorrent does, which [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=306&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I use <a href="http://en.wikipedia.org/wiki/BitTorrent_%28protocol%29">BitTorrent</a> a lot. Most Linux distributions have torrents available, and I have gotten a lot of <a href="http://creativecommons.org/">Creative Commons</a>-licensed music, such as the work of <a href="http://www.jonathancoulton.com/">Jonathan Coulton</a>, via BitTorrent. It is a great way to deliver content.</p>
<p>However, I have a problem with (most of) the available BitTorrent clients. Given what BitTorrent <em>does</em>, which is allow you to download and subsequently seed content, it should really run like a service &#8211; quietly running in the background handling your torrents. However, most of the clients for Linux work like Windows applications. They sit in your system tray, giving you &#8220;helpful&#8221; popup notifications. More importantly, they die if you logout. Luckily, I have found a solution.</p>
<h3>Enter transmission-daemon</h3>
<p>Transmission is one of the bittorrent clients for Linux that works like I described above &#8211; it&#8217;s a desktop application. However, it comes with a variant, transmisison-daemon, that can run in the background, as a dedicated &#8216;transmission&#8217; user. This is much nicer.</p>
<p>Setting it up in fedora is pretty easy. Install the transmission-daemon package. Edit /etc/sysconfig/transmission-daemon to suit your needs. You can change TRANSMISSION_HOME to whatever directory you&#8217;d like your completed torrent files to live in (you <strong>do not</strong> need to modify the actual home directory of the transmission user, but do make sure TRANSMISSION_HOME is owned by that user).</p>
<p>Now, start transmission-daemon, then stop it again:</p>
<pre>service transmission-daemon start
service transmission-daemon stop</pre>
<p>That step created the transmission configuration files, which you can now find in $TRANSMISSION_HOME/.config/transmission-daemon/. The file you probably want to edit is settings.json. Edit this file to suit your needs, then start transmission again. To tell transmission to automatically start at boot, run:</p>
<pre>chkconfig transmission-daemon on</pre>
<h3>transmission-remote &#8211; for all your transmission-related needs</h3>
<p>So, now you have a daemonized BitTorrent client, running unobtrusively in the background. But how do you use it?</p>
<p>The answer is transmission-remote. This tool is an administrative front-end for transmission-daemon that lets you add, remove, start, stop, and view your torrents, and a lot more besides. To add a torrent, you can use &#8216;transmission-remote -a&#8217; on either a local .torrent file or a URL, like so:</p>
<pre>transmission-remote -a /path/to/file.torrent
transmission-remote -a http://example.com/file.torrent</pre>
<p>Once the torrent is added, it will automatically start. You can get information on all your torrents with &#8216;transmission-remote -l&#8217;. Note that each torrent has a numeric ID assigned to it; you use that ID with the &#8216;-t&#8217; option to tell transmission-remote to perform actions on the torrent. For example, to stop the torrent with ID 42, you could run:</p>
<pre>transmission-remote -t 42 -S</pre>
<p>transmission-remote can do a lot more; check its man page for details. In particular, the -s, -i, and &#8211;remove-and-delete are useful flags to know.</p>
<h3>Making things easier &#8211; the watch directory</h3>
<p>The problem with the approach I have described is that the command line, while great for interacting with your local torrents, is not the place most people go to look for torrents in the first place. More often, you find a .torrent file on the web, and having to open a terminal and run a command is an annoying extra step.</p>
<p>To make things easier, you can set up a watch directory; any .torrent files placed in that directory will automatically be added to transmission-daemon. To set up a watch directory, edit settings.json and add the following:</p>
<pre>watch-dir-enabled: "true",
watch-dir: "/path/to/watch/dir",</pre>
<p>(I have found it is best to always stop transmission-daemon before making changes to settings.json. It often overwrites settings at shutdown)</p>
<p>One caveat about the watch directory: when transmission-daemon is started, every .torrent file in there will be added. While this has no effect on torrents you are still downloading or seeding, torrents you have already removed will be re-added to transmission-daemon. For this reason, it is a good idea to routinely delete the files in your watch directory. You can use tmpwatch and/or cron to periodically delete the files.</p>
<h3>Torrents from anywhere &#8211; using Dropbox with transmission-daemon</h3>
<p><a href="http://dropbox.com">Dropbox</a> is a fantastic tool for always having access to important files. Any files you put in your dropbox directory get automatically synced to every machine you use dropbox on. There are also Android, iOS, and web interfaces, so you can really get to your files from anywhere.</p>
<p>What does this have to do with transmission? Well, you can put your watch directory inside your dropbox directory. Any .torrent file you add to that directory &#8211; from any computer or phone &#8211; will automatically be started on the computer running transmission-daemons. This means you can start your torrents whenever you come across them, no matter where in the world you happen to be.</p>
<p>And if you have multiple people in your household who might all like to use one machine for BitTorrent, you can simply share your dropbox watch directory with all of them.</p>
<h3>The way computers should behave &#8211; the world according to Anna</h3>
<p>User interface design is a complicated thing, and a lot of research has gone into it. What a lot of UI discussions miss, though, is that everyone has different needs and preferences. The setup I have described here works the way I personally like best. It is transparent; that is, it gets out of your way and just does what it is supposed to do, with no fuss. It is powerful and flexible. For a Linux power user who prefers to use the command line where she can, it is hard to imagine a better BitTorrent solution.</p>
<br />Filed under: <a href='http://stringofbits.net/category/technology/'>Technology</a> Tagged: <a href='http://stringofbits.net/tag/bittorrent/'>bittorrent</a>, <a href='http://stringofbits.net/tag/dropbox/'>dropbox</a>, <a href='http://stringofbits.net/tag/linux/'>linux</a>, <a href='http://stringofbits.net/tag/tutorial/'>tutorial</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/stringofbits.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/stringofbits.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/stringofbits.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/stringofbits.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/stringofbits.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/stringofbits.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/stringofbits.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/stringofbits.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/stringofbits.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/stringofbits.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/stringofbits.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/stringofbits.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/stringofbits.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/stringofbits.wordpress.com/306/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=306&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2011/05/26/bittorrent-the-linux-way/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7a6c6c99ccd3e2bbaec318a52fb3d43c?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">annabunches</media:title>
		</media:content>
	</item>
		<item>
		<title>Tutorial: Creating OpenSim terrain with Blender</title>
		<link>http://stringofbits.net/2009/09/08/tutorial-creating-opensim-terrain-with-blender/</link>
		<comments>http://stringofbits.net/2009/09/08/tutorial-creating-opensim-terrain-with-blender/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 02:18:19 +0000</pubDate>
		<dc:creator>Anna Wiggins</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[metaverse]]></category>
		<category><![CDATA[opensim]]></category>
		<category><![CDATA[second life]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=152</guid>
		<description><![CDATA[This tutorial will explain how to create RAW terrain files for OpenSim and Second Life using Blender and the Gimp. Before we begin You will need the following software for this tutorial. All of this software is free and open source. Blender, a professional 3d modelling tool. Blender is powerful but complex, and basic blender [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=152&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This tutorial will explain how to create RAW terrain files for <a href="http://opensimulator.org/wiki/Main_Page">OpenSim</a> and <a href="http://secondlife.com">Second Life</a> using <a href="http://blender.org">Blender</a> and the <a href="http://www.gimp.org/">Gimp</a>.<br />
<span id="more-152"></span></p>
<h3>Before we begin</h3>
<p>You will need the following software for this tutorial.  All of this software is free and open source.</p>
<ul>
<li><a href="http://blender.org">Blender</a>, a professional 3d modelling tool.  Blender is powerful but complex, and basic blender knowledge is assumed for this tutorial.  Blender will be used to actually create the heightmap.</li>
<li><a href="http://www.gimp.org/">The Gimp</a>, a powerful program for creating and editing raster (i.e. normal) image files.  The Gimp will be used for splitting the heightmap into RAW terrain files that OpenSim can use.</li>
<li><a href="http://dominodesigns.info/project/gimpterrain">gimpterrain</a>, a plug-in for The Gimp that allows it to open and save RAW terrain files.</li>
<li><a href="http://stringofbits.files.wordpress.com/2009/09/upload_terrain.pngterrainerizer/">terrainerizer</a> (optional), a bash script I created to automate splitting the heightmap into RAW files.  Terrainerizer only works on Linux, and still requires The Gimp and gimpterrain to be installed.  It also requires <a href="http://www.imagemagick.org/script/index.php">ImageMagick</a>.</li>
</ul>
<p>In addition to the above software, you will also need a blank RAW terrain file.  You could download a terrain file from OpenSim and transform it into a blank one (replace the Height layer with #ffffff, replace the factor layer with #808080), or you could just download <a href="http://stringofbits.files.wordpress.com/2009/09/upload_terrain.pngwp-content/blank.raw">this one</a> that I have created for you.</p>
<h3>Create a heightmap</h3>
<p>A good tutorial on creating a generic heightmap in Blender can be found <a href="http://wiki.blender.org/index.php/Doc:Tutorials/Textures/Maps/Creating_a_Heightmap_from_a_Plane">here</a>.</p>
<p>The tutorial above creates a heightmap that is 512&#215;512 pixels.  However, an OpenSim RAW terrain file is only 256&#215;256 pixels.  This means that the above tutorial will create terrain for 4 regions, arranged in a square.  If you need terrain for a different number of regions, you can modify the above tutorial to create different sized heightmaps.</p>
<p>For example, suppose you want to create an oblong island that is 2 regions by 4 regions in size.  To do that:</p>
<p>1. Create the plane, but instead of scaling it to 2&#215;2 blender units, scale it to 2&#215;4 blender units.  To do this, you can use this command sequence in blender:</p>
<ul>
<li>Right-click on the object to select it.</li>
<li>Change the mode to Edit mode.</li>
<li>Press &#8216;s&#8217;, &#8216;y&#8217;, &#8217;2&#8242;, &#8216;return&#8217;.</li>
<li>Press &#8216;s&#8217;, &#8216;x&#8217;, &#8217;4&#8242;, &#8216;return&#8217;.</li>
</ul>
<p>Now you should have a plane that is oblong instead of perfectly square.</p>
<p>2. When you configure the render settings, you will need to use different values.</p>
<ul>
<li>In the Scene settings (F10), SizeX and SizeY should be set to 256 * (number of regions).  In our case, we have 2 regions in the Y dimension, and 4 regions in the X dimension.  So, SizeX should be set to 1024, and SizeY should be set to 512.</li>
<li>In the camera settings, the scale needs to be adjusted to fit the plane precisely.  In our example, the scale should be set to 8.  To get it just right, select the camera, and press Numpad0 to switch to camera view.  You should see two concentric rectangles composed of dashed lines.  Now, press F9 to view the Editing options for the camera.  Now, adjust the Scale value until the outer dashed rectangle encompasses your plane completely, without including anything outside the plane.  If the dashed rectangle is not the same shape as your plane, then you still need to set SizeX and SizeY in the Render settings.</li>
</ul>
<h3>Creating RAW terrain files with the Gimp</h3>
<p>Now that you have a heightmap file, you still need to turn it into terrain files that can be uploaded into OpenSim.</p>
<p>Enter <a href="http://dominodesigns.info/">Domino Marama</a>, creator of <a href="http://dominodesigns.info/project/gimpterrain">gimpterrain</a>, an import/export plug-in for the Gimp that can handle the OpenSim RAW terrain format.  Download gimpterrain and install it into your gimp plug-ins directory.</p>
<p>Now, if you are running Linux, you can automate the rest of this section with my terrainerizer script.  See <a href="#easier">below</a>.</p>
<p>We also need the blank terrain file that I mentioned earlier.</p>
<p>Armed with these tools, we can open a terrain file in the gimp and combine it with a portion of our heightmap.</p>
<ol>
<li>Open your blank terrain file (blank.raw) and the heightmap in the Gimp.</li>
<li>Using the Rectangle Select tool, select a 256&#215;256 pixel section of the heightmap, starting in the upper-left corner.</li>
<li>Click Edit -&gt; Copy</li>
<li>Select the terrain file and make sure the Height layer is selected.</li>
<li>Click Edit -&gt; Paste.  You should see the section of the heightmap you copied appear as a floating layer.</li>
<li>Click Layer -&gt; Anchor Layer.  The Height layer should now look like the copied portion of the heightmap.</li>
<li>Click File -&gt; Save As and save this file as a new file with the .raw extension.</li>
</ol>
<p>Now, repeat this process for every 256&#215;256 pixel section in your original heightmap.</p>
<h3><a name="easier">Making it easier</a></h3>
<p>Performing the steps in the previous section is very tedious, especially given how long it takes to save the terrain files.  To make this easier, I have automated the process with the <a href="http://stringofbits.files.wordpress.com/2009/09/upload_terrain.pngterrainerizer/">terrainerizer</a> script.</p>
<p>If you are running Linux, simply put the terrainerizer script somewhere in your path.  Edit it and specify the path to your blank.raw file, then run:</p>
<blockquote><p><code>terrainerizer heightmap.png</code></p></blockquote>
<p>Replace &#8216;heightmap.png&#8217; with your heightmap file.  Now let terrainerizer work.  It will handle everything we did in the previous section automatically.  It may take a while, depending on how large your heightmap is.</p>
<p>When it is finished, terrainerizer will leave several files in your current directory, named with this scheme:</p>
<p><code>heightmap-nxm.raw</code></p>
<p>Where &#8216;n&#8217; and &#8216;m&#8217; are numbers starting at 0 that represent the column and row for that terrain file.  So, <code>0x0</code> is the top left region of your terrain, <code>0x1</code> is the next region (moving from top to bottom), and so on.  Just upload these terrain files and you&#8217;re done!</p>
<h3>Uploading the terrain files</h3>
<p>Now that you have the terrain files, you can upload these files into OpenSim.  There are two ways to do this.</p>
<p>1. From the OpenSim server console, you can simply:</p>
<blockquote><p><code>change region RegionName<br />
terrain load /path/to/terrain.raw</code></p></blockquote>
<p>Repeat this for each of your regions.</p>
<p>2. From a viewer connected to OpenSim (assuming you are using Hippo or a similar viewer):</p>
<ul>
<li>Move to the region you where you want to upload terrain.</i>
<li>Navigate to World -&gt; Region/Estate -&gt; Terrain</li>
<li>Click &#8220;Upload RAW Terrain&#8230;&#8221; and select the terrain file you created for this region.</li>
</ul>
<div id="attachment_190" class="wp-caption alignright" style="width: 310px"><a href="http://stringofbits.files.wordpress.com/2009/09/upload_terrain.png"><img src="http://stringofbits.files.wordpress.com/2009/09/upload_terrain.png?w=300&#038;h=218" alt="The Upload Terrain menu in Hippo" title="upload_terrain" width="300" height="218" class="size-medium wp-image-190" /></a><p class="wp-caption-text">The Upload Terrain menu in Hippo</p></div>
<p>Repeat these steps for each region where you want to upload terrain.</p>
<br />Posted in Technology Tagged: linux, metaverse, opensim, second life, tutorial <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/stringofbits.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/stringofbits.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/stringofbits.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/stringofbits.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/stringofbits.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/stringofbits.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/stringofbits.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/stringofbits.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/stringofbits.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/stringofbits.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/stringofbits.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/stringofbits.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/stringofbits.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/stringofbits.wordpress.com/152/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=152&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/09/08/tutorial-creating-opensim-terrain-with-blender/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7a6c6c99ccd3e2bbaec318a52fb3d43c?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">annabunches</media:title>
		</media:content>

		<media:content url="http://stringofbits.files.wordpress.com/2009/09/upload_terrain.png?w=300" medium="image">
			<media:title type="html">upload_terrain</media:title>
		</media:content>
	</item>
		<item>
		<title>Twitter from the command line</title>
		<link>http://stringofbits.net/2009/07/02/twitter-from-the-command-line/</link>
		<comments>http://stringofbits.net/2009/07/02/twitter-from-the-command-line/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 20:38:30 +0000</pubDate>
		<dc:creator>Anna Wiggins</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=129</guid>
		<description><![CDATA[I&#8217;ve recently started playing with twitter. A nice way to use it via the command-line (using curl) was suggested here. I have taken that and improved slightly on it. Here is the result: #!/bin/sh echo -n "twitter&#62; " read text while [ ${#text} -gt 140 ]; do echo echo "Message too long; used ${#text}/140 characters." [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=129&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently started playing with twitter.  A nice way to use it via the command-line (using curl) was suggested <a href="http://binnyva.blogspot.com/2007/03/using-twitter-part-1-command-line.html">here</a>.  I have taken that and improved slightly on it.</p>
<p><span id="more-129"></span></p>
<p>Here is the result:</p>
<blockquote><p><code>#!/bin/sh<br />
echo -n "twitter&gt; "<br />
read text</p>
<p>while [ ${#text} -gt 140 ]; do</p>
<p>echo<br />
echo "Message too long; used ${#text}/140 characters."<br />
echo<br />
echo -n "twitter&gt; "<br />
read text</p>
<p>done</p>
<p>echo<br />
echo "Message is ${#text}/140 characters.  Press enter to post, or Ctrl+C to cancel."<br />
read</p>
<p>curl --basic --user "username:password" --data-ascii "status=`echo $text|tr ' ' '+'`" "http://twitter.com/statuses/update.json" &amp;&gt; /dev/null<br />
</code>
</p></blockquote>
<p>To use the script, copy all of that into a file somewhere in your path, then make the file executable (e.g., <code>chmod 755 /usr/local/bin/twitter</code>).  Now you can type &#8216;twitter&#8217;, type in your tweet, and you&#8217;re done!</p>
<p>I even set up fluxbox so that mod4+t launches a terminal with the script running.  To do that, I added this to ~/.fluxbox/keys:</p>
<blockquote><p>
<code><br />
Mod4 t :Exec xterm -e "twitter"<br />
</code>
</p></blockquote>
<p>If you&#8217;re not familiar with &#8216;mod4&#8242;, it is the Windows key on most PC keyboards.</p>
<p>I&#8217;ll eventually get around to writing a slightly more full-featured twitter updater in c or c++.  Until then, enjoy this script!</p>
<br />Posted in Technology Tagged: linux, programming, twitter <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/stringofbits.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/stringofbits.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/stringofbits.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/stringofbits.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/stringofbits.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/stringofbits.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/stringofbits.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/stringofbits.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/stringofbits.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/stringofbits.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/stringofbits.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/stringofbits.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/stringofbits.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/stringofbits.wordpress.com/129/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=129&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/07/02/twitter-from-the-command-line/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7a6c6c99ccd3e2bbaec318a52fb3d43c?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">annabunches</media:title>
		</media:content>
	</item>
		<item>
		<title>The Case of the Odd NetworkManager Behavior</title>
		<link>http://stringofbits.net/2009/04/27/the-case-of-the-odd-networkmanager-behavior/</link>
		<comments>http://stringofbits.net/2009/04/27/the-case-of-the-odd-networkmanager-behavior/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 17:31:47 +0000</pubDate>
		<dc:creator>Anna Wiggins</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=110</guid>
		<description><![CDATA[I recently purchased an Eee PC 1000HE.  This is a very nice machine, and aside from one weird bug, Linux support is great.  However, I&#8217;ve run into a very annoying problem with Fedora 10, and at the root of that problem is gnome-keyring-manager. Misconfiguration Most Foul We begin our tale with NetworkManager.  Since I connect [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=110&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I recently purchased an <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16834220504">Eee PC 1000HE</a>.  This is a very nice machine, and aside from one <a href="https://bugzilla.redhat.com/show_bug.cgi?id=489216">weird bug</a>, Linux support is great.  However, I&#8217;ve run into a very annoying problem with Fedora 10, and at the root of that problem is gnome-keyring-manager.</p>
<p><span id="more-110"></span></p>
<h3>Misconfiguration Most Foul</h3>
<p>We begin our tale with NetworkManager.  Since I connect to several wireless networks and a VPN, NetworkManager is a very useful thing to have working.  Its initial setup was great; I loaded nm-applet in my fluxbox startup, it prompted me for a default keyring password, and we were off.</p>
<p>However, on my next boot I was not prompted for my keyring password; I had to enter my WEP key manually.  After some exploration, I learned that gnome-keyring-daemon needs to be running.  The paradox is that it WAS running.</p>
<h3>A Red Herring</h3>
<p>I found some rather old advice thas suggested I run gnome-keyring-daemon manually from ~/.fluxbox/startup, but this didn&#8217;t work; gnome-keyring-daemon starts automatically in Fedora 10, thanks to pam_gnome_keyring.so.  I now had two copies of the daemon now running, neither of which worked.</p>
<p>What I eventually discovered was this: if I kill the automatically-started gnome-keyring-daemon (or remove auto_start from the pam_gnome_keyring options in /etc/pam.d/kdm), then start it manually with different options, it works every time.  So, instead of:</p>
<p><code>gnome-keyring-daemon -d --login</code></p>
<p>which is the automatically provided command, I ran:</p>
<p><code>gnome-keyring-daemon -f -c keyring</code></p>
<p>from my fluxbox startup file.  This worked, but turned out to be unnecessary.</p>
<h3>An Anwser</h3>
<p>My next discovery:  If I disable the daemon&#8217;s automatic starting (once again by taking the auto_start option out of /etc/pam.d/kdm) and remove my custom invocation from the startup file, it still starts automatically, but with different options than the auto_start version!  In fact, it starts with the options work.</p>
<p>It turns out that nm-applet and gnome-screensaver both automatically start gnome-keyring-daemon if it isn&#8217;t running.  Since nm-applet runs first, it starts up the daemon, and passes it a completely different set of options than the pam-invoked version.  Thanks for the consistency, gnome!</p>
<h3>A Problem</h3>
<p>Starting gnome-keyring-daemon manually or allowing nm-applet to start it still poses a problem: the daemon doesn&#8217;t die when I log out!  This means that, as I log in and out several times, useless instances of the daemon end up sitting around doing nothing.  Since the apps that talk to the daemon use $GNOME_KEYRING_SOCKET to do so, everything keeps working; but it&#8217;s cruft I&#8217;d rather not have.</p>
<h3>Elementary</h3>
<p>After following this circuitous path, I finally stumbled into the answer: it&#8217;s a <a href="https://bugzilla.redhat.com/show_bug.cgi?id=453880">known bug</a>.  It is actually related to the lack of a proper $DISPLAY getting set for gnome-keyring-daemon; it isn&#8217;t related to the passed in options at all.</p>
<p>At this point, I&#8217;m forced to fall back on a hack.  I&#8217;ve added the following to my ~/.fluxbox/startup, above the gnome-related apps:</p>
<p><code>killall gnome-keyring-daemon</code></p>
<p>I&#8217;ve also removed the auto_start option from /etc/pam.d/kdm.  Unfortunately, not launching the daemon with pam means that I can&#8217;t take advantage of the single sign-on feature provided by pam_gnome_keyring.  But until the bug is fixed, I guess this will have to be good enough.</p>
<p>(As for why I don&#8217;t use gdm, see <a href="http://stringofbits.net/2009/01/5-things-i-hate-about-fedora-10/">this post</a>)</p>
<h3>Update: a command explained</h3>
<p>If you look at the &#8211;help output for gnome-keyring-daemon (or, if you&#8217;ve applied my hack below, gnome-keyring-daemon-bin), you&#8217;ll see this output:</p>
<p><code>Usage:<br />
  gnome-keyring-daemon [OPTION...] - The Gnome Keyring Daemon</p>
<p>Help Options:<br />
  -?, --help                              Show help options</p>
<p>Application Options:<br />
  -f, --foreground                        Run in the foreground<br />
  -d, --daemonize                         Run as a daemon<br />
  -l, --login                             Use login password from stdin<br />
  -c, --components=ssh,keyring,pkcs11     The components to run</code></p>
<p>Anyone acquainted with Linux will understand the first two options, -f and -d, pretty intuitively.  You&#8217;ll note in my post above that my &#8216;working&#8217; option set included -f; this is because -f prints to standard out, allowing us to capture the GNOME_KEYRING_SOCKET and GNOME_KEYRING_PID variables that the daemon spits out.  However, when run in -d, these variable seem to get set correctly anyway.  Further, the -c option I used in my quest seems superfluous; the daemon defaults to using the keyring component.  I wanted to explain this since it wasn&#8217;t clear in the original post exactly why I bounced between options.  At the time, I was grasping at straws, and assigned a simple correlation (the different command-line options in use) to a causation (the daemon that started automatically, with the different options, failed to work correctly).</p>
<p>The option that had me baffled, though, was &#8211;login.  The information in the help output is cryptic, but I finally worked out its purpose; it allows single sign-on.  pam_gnome_keyring passes your login password to gnome-keyring-daemon, which uses it to unlock a special keyring called the login keyring.  This keyring can then be used to store the passwords to your other keyrings, so that when you log in, everything unlocks automatically.  Your system login doubles as your keyring authentication.</p>
<h4>Further Update: Eureka! (or: building a better hack)</h4>
<p>Based on a comment in the bugzilla entry for this problem, I have crafted a better (if more system-intrusive) hack.  I simply perform the following:</p>
<p><code>mv /usr/bin/gnome-keyring-daemon /usr/bin/gnome-keyring-daemon-bin<br />
touch /usr/bin/gnome-keyring-daemon<br />
chmod 755 /usr/bin/gnome-keyring-daemon<br />
cat &gt; /usr/bin/gnome-keyring-daemon &lt;&lt; EOF<br />
#!/bin/sh<br />
DISPLAY=&quot;:0.0&quot; /usr/bin/gnome-keyring-daemon-bin &quot;\$@&quot;<br />
EOF</code></p>
<p>This hack creates a wrapper script that sets the $DISPLAY variable before running the keyring daemon.  Until this kdm bug is worked out, this hack performs beautifully.</p>
<br />Posted in Technology Tagged: fedora, linux <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/stringofbits.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/stringofbits.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/stringofbits.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/stringofbits.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/stringofbits.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/stringofbits.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/stringofbits.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/stringofbits.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/stringofbits.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/stringofbits.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/stringofbits.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/stringofbits.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/stringofbits.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/stringofbits.wordpress.com/110/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=110&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/04/27/the-case-of-the-odd-networkmanager-behavior/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7a6c6c99ccd3e2bbaec318a52fb3d43c?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">annabunches</media:title>
		</media:content>
	</item>
		<item>
		<title>It is pitch black.  You are likely to be flamed by a fanboy.</title>
		<link>http://stringofbits.net/2009/01/18/it-is-pitch-black-you-are-likely-to-be-flamed-by-a-fanboy/</link>
		<comments>http://stringofbits.net/2009/01/18/it-is-pitch-black-you-are-likely-to-be-flamed-by-a-fanboy/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 05:53:44 +0000</pubDate>
		<dc:creator>Anna Wiggins</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[stupid people]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=97</guid>
		<description><![CDATA[I feel the need to comment about this (and, subsequently, this and this). First, a summary, for those who get a case of the tl;dr&#8217;s.  A woman bought a laptop to use for her coursework at a local college.  She accidentally bought a Dell laptop with Ubuntu on it.  When she realized her ISP&#8217;s setup [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=97&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I feel the need to comment about <a href="http://www.wkowtv.com/Global/story.asp?S=9667184&amp;nav=menu1362_8_6">this</a> (and, subsequently, <a href="http://www.wkowtv.com/Global/story.asp?S=9682258&amp;nav=menu1362_2">this</a> and <a href="http://addins.wkowtv.com/blogs/behindthenews/archives/84">this</a>).</p>
<p>First, a summary, for those who get a case of the tl;dr&#8217;s.  A woman bought a laptop to use for her coursework at a local college.  She accidentally bought a Dell laptop with Ubuntu on it.  When she realized her ISP&#8217;s setup disk wouldn&#8217;t work, she tried to get Dell to swap the laptop for one with Windows.  The Dell representative apparently convinced her to keep the one she had.</p>
<p>She claims that this problem, combined with a lack of Microsoft Office, forced her to withdraw from classes.  The local news ran the linked article; it is worth noting that the bottom portion (the part where the news agency contacted the college and Verizon, and everything got cleaned up) did not appear in the initial article.</p>
<p><span id="more-97"></span><br />
Needless to say, the Linux community (and the Ubuntu community in particular) exploded.  The article hit digg, slashdot, and reddit.  The angry letters and phone calls started pouring in to the news station (though they got tons of traffic, naturally).  More significantly, the woman in question was harassed on facebook.</p>
<p>This story shows mistakes from every party involved.  The Dell representative should have helped her switch to a machine she was more comfortable with.  The woman herself should have taken initiative, called Verizon and asked what she could do to get her connection working.  Alternately, what&#8217;s wrong with using another computer (say, at a local library) until you can get the laptop issue sorted out?  Dropping all your classes for the semester is overly drastic and melodramatic.</p>
<p>The worst perpetrators of stupidity here, though, are the Linux community members who not only lambasted and ridiculed this woman publicly on forums and blogs, but also attacked her personally on her Facebook account.  This is childish, pointless, and it paints the entire Linux community as anti-social assholes.</p>
<p>Unlike most groups, the Linux community IS Linux.  If a Star Wars fan blogs about how everyone who doesn&#8217;t know the difference between a Sith and a Dark Jedi is an idiot, the Star Wars franchise is not going to be damaged; there is a clear disparity between the creators (Lucasfilm et al) and the consumers (fans).  On the other hand, if a Linux fanboy blogs that everyone should know the intricacies of iptables configuration before being allowed on the Internet, this will color peoples&#8217; perception of Linux.</p>
<p>Why does this happen?  Because Linux is Free, open to the world.  Anyone can add to it.  The community and the product are intricately intertwined.</p>
<p>This is a false perception, though; in reality, the rabid fanboys who would harass a woman on Facebook are a completely different set of people than the assholes that argue fine technical points on <a href="http://lkml.org/">LKML</a>. (I&#8217;m using asshole here in its rare application as a compliment)  However, the impression that an outsider has looking in is that Linux is some wild, anarchistic (or maybe communist) creation.  This stems from the growing cultural knowledge that Linux was created by and for the people that use it.  This is not quite true.  Linux was created by and for developers and technology enthusiasts, true.  However, not every vocal member of the community actually contributes to Linux itself; only a fairly small subset of users are actively involved in improving the software.</p>
<p>I don&#8217;t mean to devalue the role of the community in development.  Community contributors are important, welcome, and numerous.  Bug submitters and other &#8220;active users&#8221; are vital to the strength of the open development model.  However, the active users aren&#8217;t even the people that we see evident in this article.  What we see here are fanboys:</p>
<blockquote><p>fanboy (n): Someone who is so obsessed with some subject or thing that they are blind to its faults and harass and deride anyone whose opinion differs.</p></blockquote>
<p>These are precisely the people that Linux does not need.  The community would be doing itself a favor by creating public distance from this subset of itself.  We need more rational, clear-headed people speaking out about the benefits of Linux.  Fanboys ranting and harassing people will get us nowhere.</p>
<div>I am aware that I haven&#8217;t offered any advice on <strong>how</strong> to make the fanboys go away, and that&#8217;s because I don&#8217;t have any.  I don&#8217;t know how to do it, or if it is even possible.  This is just a statement of a problem that I see; anyone with ideas, please share them.</div>
<br />Posted in Technology Tagged: linux, stupid people <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/stringofbits.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/stringofbits.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/stringofbits.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/stringofbits.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/stringofbits.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/stringofbits.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/stringofbits.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/stringofbits.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/stringofbits.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/stringofbits.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/stringofbits.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/stringofbits.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/stringofbits.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/stringofbits.wordpress.com/97/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=97&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/01/18/it-is-pitch-black-you-are-likely-to-be-flamed-by-a-fanboy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7a6c6c99ccd3e2bbaec318a52fb3d43c?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">annabunches</media:title>
		</media:content>
	</item>
		<item>
		<title>5 things I hate about Fedora 10</title>
		<link>http://stringofbits.net/2009/01/14/5-things-i-hate-about-fedora-10/</link>
		<comments>http://stringofbits.net/2009/01/14/5-things-i-hate-about-fedora-10/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 21:14:05 +0000</pubDate>
		<dc:creator>Anna Wiggins</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=88</guid>
		<description><![CDATA[Every release of Fedora feels like a step in the wrong direction.  I don&#8217;t say this lightly &#8211; I use Fedora at work and at home; it is my primary operating system.  I have staunchly supported it in the face of critical Ubuntu fans for a while now. First, a little background.  I switched to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=88&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Every release of Fedora feels like a step in the wrong direction.  I don&#8217;t say this lightly &#8211; I use Fedora at work and at home; it is my primary operating system.  I have staunchly supported it in the face of critical Ubuntu fans for a while now.</p>
<p>First, a little background.  I switched to Fedora from a mixture of gentoo and slackware around the time I started my <a href="http://www.redhat.com">current job</a>, since it was far easier to keep track of one package management toolset, and several things about gentoo&#8217;s packaging system had started to irk me.  The current release of Fedora at the time was 7.  I have been using it since, usually upgrading to new releases (via a clean install) about a month after they release.</p>
<p>My needs are simple, but apparently elusive to Fedora.  I use fluxbox as my window manager.  I prefer to perform all of my system configuration from the command line.  My graphical application use is minimal (firefox, games, pidgin).</p>
<p>Let&#8217;s explore the problems I&#8217;ve noticed have started creeping in, starting with the release of fedora 8.  My solution/workaround for each problem is included, if I have one.  For what it is worth, I realize that some of these could be the result of 3rd-party packages (such as Nvidia&#8217;s proprietary drivers).  However, if any of these are the result of user error, then the solution should rightly be easy to find by searching documentation, which I have done extensively in every case.</p>
<p><span id="more-88"></span></p>
<h2>1. Pulseaudio</h2>
<p><em>Pulseaudio&#8230; I hate the word</em></p>
<p>This one heads the list because it&#8217;s the problem I&#8217;ve had to deal with most recently.  I have been lucky in that pulseaudio plays nicely with the sound cards on all 3 of my Fedora machines (others have been less fortunate).  However, I was stuck with audio far quieter than what I had grown used to in gentoo.</p>
<p><strong>Solution:</strong> I finally discovered that pulseaudio has its own volume settings, independent of the ALSA-level audio device.  You can adjust the hardware volume levels with either of these commands:</p>
<blockquote><p><code>alsamixer -Dhw:0<br />
alsamixer -c 0</code></p></blockquote>
<p>It would be nice if this were clearly documented somewhere.  There are some vague hints on <a href="https://fedoraproject.org/wiki/SoundTroubleshooting">this page</a>, which is what pointed me in the right direction.</p>
<p>Thankfully, pulseaudio is no longer quite so painful when dealing with apps that only talk to ALSA.  I noticed some popping in certain applications, though (Neverwinter Nights, for one).  pasuspender seems to work around this, but the fact that this is necessary is kludgy.</p>
<h3>2. GDM</h3>
<p><em>The thousand injuries of GDM I had borne as best I could; but when he ventured upon insult, I vowed revenge&#8230;</em></p>
<p>GDM in Fedora has been upgraded to the latest upstream from the gnome team.  The problem with this version of GDM is that it removes almost all of its configuration options.  They have crippled it thus <a href="http://live.gnome.org/GDM/2.22/Configuration">intentionally</a>, and while they claim the removed options were &#8220;obsoleted due to redesign&#8221;, it seems that some of the options were dropped to prevent users from doing stupid things.</p>
<p>This Lowest Common Denominator approach is fine for a default configuration, but it should always be possible to change the default behavior.  Removing the ability to customize it entirely is not only against the spirit of open source software and Linux, it is insulting to the users.  It feels as if the team responsible for GDM thinks they know better than I do when it comes to configuring my machine.</p>
<p>In my case, the default behavior that troubles me is the fact that GDM passes the +accessx option to X.  Gnome includes a daemon that can override the accessx behavior (namely, enabling sticky keys if you hold shift down too long).  KDE includes a similar tool.  Fluxbox, however, has none &#8211; it assumes (justly) that you can turn off the accessx option at the X11 level if you don&#8217;t want it.  The new GDM denies you this ability, however.</p>
<p><strong>Solution:</strong> Switched to KDM, which doesn&#8217;t seem to enable +accessx by default.  I tried XDM first, but it has SELinux errors and fails to launch fluxbox.  Also, KDM looks much nicer.  Alternately, I could have booted into runlevel 3 and then used startx, but I&#8217;ve become a fan of the graphical login prompt.</p>
<h3>3. Upstart</h3>
<p><em>The name says it all</em></p>
<p><a href="http://en.wikipedia.org/wiki/Upstart">upstart</a> is the new init system in fedora; a replacement for the aging sysVinit.  In theory, upstart is great &#8211; gives you much more granular control over what processes should happen at each runlevel, and may eventually replace /etc/init.d entirely.  In practice, however, it has a rather annoying problem: sometimes it fails to respawn the ttys when in runlevel 5.  This problem doesn&#8217;t seem to be present in runlevel 3, for whatever reason.</p>
<p><strong>Solution:</strong> no real solution at present, but you can work around it with <code>initctl start ttyX</code></p>
<h3>4. rsyslog</h3>
<p><em>Hey&#8230; Listen!</em></p>
<p>The traditional syslogd has been replaced with rsyslog, a much more powerful/configurable syslog daemon.  However, it seems to dump all kernel output to the console.  The default configuration doesn&#8217;t include any statements that should be logging to the console, so it could be caused by something else.  Either way, the problem is present.</p>
<p>You can test this from any fedora machine: it seems to happen on every F10 box I can find.  Just press Ctrl+Alt+F2, then plug in a USB flash drive.  This is annoying on its own, but is especially frustrating when combined with #5, below.</p>
<p><strong>Solution:</strong> none</p>
<h3>5. PCI-Express device errors</h3>
<p><em>Or How I Learned to Stop Worrying and Love X.org</em></p>
<p>On my PCI-Express video card, I receive constant error messages, both in messages and on the console (see #4, above).  These happen whenever the screen is cleared or switched to.  In other words, Ctrl+Alt+FX will generate one of these, sometimes two.  Running &#8216;less&#8217; generates the errors.  So does the &#8216;clear&#8217; command.  emacs and vi both trigger the error.  Each instance of the error takes up about 25% of the screen&#8217;s real estate.  This makes operating on the command line extremely difficult.</p>
<p><strong>Solution:</strong> None yet.  I suspect this may be related to the Nvidia drivers; in that case, a future update may fix these errors.  I&#8217;ll give Fedora the benefit of the doubt where I can.</p>
<br />Posted in Technology Tagged: linux <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/stringofbits.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/stringofbits.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/stringofbits.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/stringofbits.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/stringofbits.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/stringofbits.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/stringofbits.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/stringofbits.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/stringofbits.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/stringofbits.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/stringofbits.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/stringofbits.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/stringofbits.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/stringofbits.wordpress.com/88/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=88&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/01/14/5-things-i-hate-about-fedora-10/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7a6c6c99ccd3e2bbaec318a52fb3d43c?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">annabunches</media:title>
		</media:content>
	</item>
		<item>
		<title>Paranoid Security: Establishing a Connection the Hard Way</title>
		<link>http://stringofbits.net/2008/12/07/paranoid-security-establishing-a-connection-the-hard-way/</link>
		<comments>http://stringofbits.net/2008/12/07/paranoid-security-establishing-a-connection-the-hard-way/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 07:03:08 +0000</pubDate>
		<dc:creator>Anna Wiggins</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=52</guid>
		<description><![CDATA[Recently, I was describing the personal setup I use to connect to my home machine over on watchingback (a group that has gone unfortunately silent).  This setup combines port-knocking (with one-time sequences), disk encryption, and passphrase-protected rsa keys.  Here&#8217;s a basic rundown of how it works from an end-user perspective (i.e., once everything is set [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=52&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently, I was describing the personal setup I use to connect to my home machine over on <a href="http://groups.google.com/group/watchingback/topics">watchingback</a> (a group that has gone unfortunately silent).  This setup combines <a href="http://en.wikipedia.org/wiki/Port_knocking">port-knocking</a> (with <a href="http://en.wikipedia.org/wiki/One-time_pad">one-time sequences</a>), disk encryption, and passphrase-protected rsa keys.  Here&#8217;s a basic rundown of how it works from an end-user perspective (i.e., once everything is set up):</p>
<p>First, the user (me) inserts a USB flash drive with an encrypted partition.  He mounts up the encrypted disk on a local machine (I&#8217;ll call this machine the &#8216;client&#8217; throughout this article), providing the necessary password, and runs a script called &#8216;callhome&#8217;.  He is prompted for his passphrase, and then gets a terminal session on his home machine (we&#8217;ll call this one the &#8216;server&#8217;).</p>
<p>Read on for details about this setup, and how to do it.</p>
<p><span id="more-52"></span></p>
<p>Warning: what follows is madness. It is overkill taken to an extreme.  I am describing a way you can take a very, very simple procedure (connecting remotely to a system), and make it exceedingly complicated, all for the benefit of a little added security.  Whether or not this security is worthwhile to you is, of course, your business.  In an age where our governments and fellow citizens are increasingly keen on everything from our shopping and reading habits to our credit card numbers, I personally feel that cautiousness is worth the effort.</p>
<p>It is madness.  I&#8217;m not convinced it isn&#8217;t justified madness.</p>
<p>This tutorial assumes you are running <a href="http://linux.org">Linux</a>, and that you are comfortable with the command-line interface and with networked computing in general (of course, you&#8217;re reading this on the Internet, so that&#8217;s a good start).  All of my examples will be <a href="http://fedoraproject.org">Fedora</a>-centric.  If you don&#8217;t use Fedora, you&#8217;ll need to figure out what the commands are for your distro.</p>
<p>So, how is this complex setup I describe different from just typing &#8220;ssh user@server&#8221;?  Well, first, the callhome script executes a portknocking sequence.  Until this sequence is done, ssh is closed on the server.  After the sequence, ssh is opened only for the IP address of the client, and only for a small time window.  The ssh connection must happen during this window.  The script initiates the ssh connection, which helps keep this secure.  In addition, each portknocking sequence is valid only once &#8211; the USB drive contains a list of all valid sequences, and the script is set up to only use each one once.</p>
<p>Next, ssh on our server is set up to <strong>only</strong> allow connections with public keys.  This means that even if an attacker knew the correct portknocking sequence, he would not be able to login with a password &#8211; he must have the private RSA key.  The private key is on our USB flash drive, which is encrypted.  The key itself is further encrypted with its own passphrase, so you still enter a password to connect home, the work to verify it is simply done on the local machine.  The passphrase is never sent across the Internet, even in an encrypted/hashed form.</p>
<p>There are some other nice features, including a &#8216;panic&#8217; portknocking sequence that will shut down the portknocking server itself, locking down the remote server completely.  This panic script is stored on a machine to which I have a shell account.  If the USB flash drive is ever lost/stolen, I can get to any machine with an ssh client, log in to the shell account, and kill the knock server.  New connections to the server then become impossible.</p>
<p>This setup is useful for more than just a terminal connection home.  You can forward X through it and run graphical apps from home (this is typically going to be very slow, however).  You can forward any ports you like, so that you can route web traffic through this ssh tunnel and prevent people on your network from watching where you go on the web.  Anything you can do with a normal ssh connection can be done here.  Later I&#8217;ll demonstrate some examples that I use.  So, that&#8217;s the setup.</p>
<p>Now I will outline exactly how to do it, one step at a time.  You might want to grab a snack and use the bathroom &#8211; this is going to be a long trip.</p>
<h2 id="part_1">Part 1: Dynamic DNS</h2>
<p>Before you can call home to your server, it helps to have a name to call it by.  However, you can&#8217;t use a traditional hostname if your machine is on a broadband network because your IP address may periodically change.  Dynamic DNS (or DynDNS) was created to solve this problem.  A daemon runs on your server that periodically checks the IP address of the server and sends it to a DynDNS server.  This DynDNS server then updates a DNS record whenever your IP address changes.  I use <a href="http://dyndns.com">DynDNS.com</a>.  It&#8217;s free and easy.  Just choose a hostname for your machine, then install and configure the <a href="http://cdn.dyndns.com/ddclient.tar.gz">ddclient</a> software.  You can get instructions on configuring ddclient for DynDNS.com <a href="https://www.dyndns.com/support/kb/using_ddclient_with_dyndns_services.html">here</a>.</p>
<h2 id="part_2">Part 2: Configuring SSH</h2>
<p>On the server, find your sshd configuration file (on Fedora, this is at /etc/ssh/sshd_config) and ensure the following options are set to these values:</p>
<blockquote><p><code>RSAAuthentication yes<br />
PubkeyAuthentication yes<br />
AuthorizedKeysFile     .ssh/authorized_keys<br />
PasswordAuthentication no<br />
ChallengeResponseAuthentication no</code></p></blockquote>
<p>Now, restart your ssh daemon:</p>
<blockquote><p><code>service sshd restart</code></p></blockquote>
<p>Now, try to ssh into your machine (you can just do &#8216;ssh user@localhost&#8217;).  You&#8217;ll get denied immediately, without even seeing a password prompt.  This is what we want.  Next, we create the ssh key that we will use.  Run:</p>
<blockquote><p><code>ssh-keygen -t rsa -b 4096</code></p></blockquote>
<p>When prompted, specify a path <strong>other</strong> than the default.  Your home directory is a good choice &#8211; we will be moving id_rsa to the USB flash drive later.  Also, make sure you specify a good passphrase &#8211; if the USB flash drive is compromised, the strength of this passphrase will buy you time to lock down the server.  Now you have 2 files in your home directory, id_rsa and id_rsa.pub.  id_rsa is your encrypted, private RSA key.  id_rsa.pub is the public key that matches this private key.  Copy the contents of id_rsa.pub into ~/.ssh/authorized_keys.  This step will allow the private key to connect to the server as this user.</p>
<h2 id="part_3">Part 3: portknocking</h2>
<p>There&#8217;s still one significant security concern: unknown vulnerabilities.  OpenSSH is a complex program, and almost certainly still contains a vulnerability or two that haven&#8217;t been discovered.  To combat getting hit with that latest exploit, we can hide the presence of ssh from the outside world completely.  This is the beauty of portknocking.  The premise of portknocking is that the ssh port is firewalled off unless a specific sequence of ports are first pinged, in order.  This doesn&#8217;t add a lot of security by itself; an attacker can simply sniff the portknock sequence, then repeat it to open the same port.  Normally, portknocking will only deter attackers who don&#8217;t know you have ssh open.</p>
<p>However, the portknocking server we are going to use supports one-time sequences.  With this configuration, the correct knock sequence changes after each knock.  The server has a list of sequences to use, and we will also keep this list with us on the USB flash drive.  Before we begin configuring portknocking, make sure you have firewalled off port 22.  There are two possible network setups we will consider:</p>
<ul>
<li>You have a router between the server and the Internet.  This router passes ssh traffic to your server, and the router acts as the firewall that blocks ssh access.</li>
<li>The server is connected directly to the Internet.  Local firewall rules on the machine are blocking ssh access.</li>
</ul>
<p>In the first instance, you need to be able to install a portknocking server on the router; additionally, the firewall rules needed will be more complicated, and will vary based on how your router is configured.  My example here assumes the second case: that the server itself is listening to the knocks (i.e. it is directly connected to the Internet).  The first case is discussed in <a href="#appendix_c">Appendix C</a>.   Install <a href="http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki">knockd</a>.  Once installed, you&#8217;ll need to configure /etc/knockd.conf.  For now, I&#8217;ll present a basic configuration (we&#8217;ll add some more stuff to this later):</p>
<blockquote><p><code>[options]<br />
logfile = /var/log/knockd.log</code></p>
<p><code>[ssh]<br />
one_time_sequences = /etc/knockd/ssh<br />
seq_timeout = 10<br />
tcpflags = syn<br />
start_command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT<br />
cmd_timeout = 5<br />
stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT</code></p></blockquote>
<p>In /etc/knockd/ssh, you need to have sequences of numbers to use as one-time sequences.  Each entry in the list should be formatted like this:</p>
<blockquote><p><code>1,2,3,4,5</code></p></blockquote>
<p>There is a space at the beginning of the line; this is helpful because knockd will comment out each line as it uses it by placing a &#8216;#&#8217; at the beginning of the line.  The numbers you generate should ideally be between 1024 and 65535; I generate my numbers with a script similar to the following:</p>
<blockquote><p><code>#!/usr/bin/perl<br />
$num_keys = 50;<br />
@data = `d20diceroller --nototals "5d65535[reroll&lt; 1024][repeat $num_keys]"`;</code></p>
<p>foreach (@data)<br />
{<br />
next if (/:/);</p>
<p>s/ $//;<br />
s/ /,/g;<br />
s/^/ /;</p>
<p>print;<br />
}</p></blockquote>
<p>This script uses a program I created, d20diceroller, to generate its random numbers.  That tool is part of the d20tools package, and can be found at its <a href="http://d20tools.sourceforge.net">sourceforge page</a>.  The subversion repository is currently recommended.  Now that you have the one-time sequences, you must start the knock daemon.  You&#8217;ll most likely want to add this to an init script (such as /etc/rc.local):</p>
<blockquote><p><code>knockd -i eth0 &amp;</code></p></blockquote>
<p>&#8216;eth0&#8242; here should be replaced with whatever the name of your Internet-facing network interface is.  Now, portknocking is configured and running.  We only need to configure the USB flash drive, and we&#8217;re done with the basics.</p>
<h2 id="part_4">Part 4: USB Flash drive setup</h2>
<p>First, you need a partition on the flash drive that will be dedicated as the encrypted partition.  This can be one small partition, or it can be the entire disk.  I set aside the last 10 MB of the disk, myself.  Use fdisk, parted, or another partitioning tool to get the disk to your liking (remember, re-partitioning can erase everything you have on the drive.  Be careful).  Once the disk is partitioned, you must create a secure volume, then create a filesystem on that volume.  As root, run the command:</p>
<blockquote><p><code>cryptsetup create secure /dev/sda1</code></p></blockquote>
<p>Where &#8216;/dev/sda1&#8242; is the device name of the partition that should be the encrypted partition.  Enter your desired passphrase when prompted.  This should be a <strong>different</strong> passphrase than you used with the ssh key, ideally.  Now, you should have a device file named /dev/mapper/secure.  This is the encrypted pseudo-device Linux has created to represent your partition.  Create a filesystem on it.  I recommend a DOS filesystem because of its portability (an ext3 filesystem will retain the UID/GID and permissions for each file, which can get really confusing when moving from system to system and using users with different UIDs):</p>
<blockquote><p><code>mkdosfs -F 16 /dev/mapper/secure</code></p></blockquote>
<p>Now mount /dev/mapper/secure.  On it, create a directory called .ssh.  Copy the id_rsa file you created earlier into this directory, and create a file called &#8216;config&#8217; that looks like this:</p>
<p><code><small><br />
</small></code></p>
<blockquote><p><code>Host your.server.address home<br />
User your_user_name<br />
UserKnownHostsFile .ssh/known_hosts<br />
HostName your.server.address<br />
Port 22<br />
IdentityFile .ssh/id_rsa<br />
Compression yes</code></p></blockquote>
<p>Also, take a copy of the sequences you created earlier (in /etc/knockd/ssh) and copy them to a file called &#8216;sequences&#8217; in this .ssh directory.  You need to modify this sequences file so that the commas are converted to spaces.  You can do that with this command:</p>
<blockquote><p><code>perl -p -i -e 's/,/ /' sequences</code></p></blockquote>
<p>Now, create a script in the root of the encrypted partition with these contents:</p>
<blockquote><p><code>#!/bin/sh<br />
SERVER_NAME=your.server.name<br />
WD=$(echo $0 | perl -pe 's/^(.*)\/.*?$/\1/')<br />
cd $WD<br />
chmod 600 $WD/.ssh/id_rsa &amp;&gt; /dev/null<br />
sequence=`head -n 1 $WD/.ssh/sequences`<br />
[ -z "$sequence" ] &amp;&amp; echo "Error: No more knock sequences" &amp;&amp; exit 1<br />
for i in $sequence;<br />
do nc -z $SERVER_NAME $i; done<br />
sleep 1<br />
ssh -F $WD/.ssh/config home &amp;&amp; sed -i '1d' $WD/.ssh/sequences</code></p></blockquote>
<p>This script will execute the next portknocking sequence in the list, then automatically ssh into the server.  It uses the config file in our local .ssh directory, so the username and key file are already specified.  Now, to unmount the USB flash drive&#8217;s encrypted partition, you can execute these commands:</p>
<blockquote><p><code>umount /dev/mapper/secure<br />
cryptsetup remove secure</code></p></blockquote>
<p>That&#8217;s it!  Now, all you need to do use the system is set up the partition as an encrypted volume, mount the encrypted filesystem, run the &#8216;callhome&#8217; script, and enter your ssh passphrase.  Extra-secure connection home, for the truly paranoid.  The only upkeep required is to periodically generate a new list of sequences when you run low.  This system is a bit more complicated than just using an ssh command, but I discuss how to automate the connection procedure on systems you use a lot in <a href="#appendix_b">Appendix B</a>.</p>
<p>But wait, there&#8217;s more!  What happens when The Bad Guys steal our USB flash drive and start frantically trying to decrypt it?  Enter the panic knock.</p>
<h2 id="part_5">Part 5: Disaster recovery</h2>
<p>A scenario, if you will.  <em>You&#8217;re sitting at your desk, your uber-secure connection home humming along, letting you chat on IRC without your boss being any wiser.  You lock your X session and get up to grab some coffee.  You get back to your desk, and glance over at your workstation, expecting to see protruding from the front your faithful USB flash drive, fast friend these many years, steadfast companion against the dangers of revealing your personal life&#8217;s details to those who would kill for it.  But it&#8217;s gone.  Someone has taken it.  A quick survey of your fellow workers (and by &#8220;survey&#8221; we mean &#8220;threaten them with violence so they know you&#8217;re serious&#8221;) reveals that they don&#8217;t have it.  No one saw anyone come near your desk.</em></p>
<p><em>There is only one explanation: Identity Theft Ninja.  Trained in the secluded mountains of Japan from birth, these versatile agents of stealth can smell a USB flash drive that allows a connection to someone&#8217;s home server from a league distant.  You never had a chance.  Hope is not lost, however!  Because the drive is encrypted, and the ssh key is further encrypted, you have an advantage.  The Identity Theft Ninja have powerful computers for cracking encryption schemes, but it will still take time.</em></p>
<p>Basically, when you notice your USB drive is missing, you can execute your panic script.  The panic script should live on a shell server; something you can get to from any machine.  I recommend <a href="http://silenceisdefeat.com">silenceisdefeat</a>.  On the shell server, you simply have a script called &#8216;panic&#8217;.  It can look like the following:</p>
<blockquote><p><code>#!/bin/sh<br />
SERVER_NAME=your.server.name<br />
sequence=("1" "2" "3" "4" "5")</code></p>
<p>for i in ${sequence[@]};<br />
do nc -z $SERVER_NAME $i;<br />
done</p></blockquote>
<p>Most shell servers will not give you execute privileges, but because this is a script, you can simply type &#8216;sh panic&#8217; to execute it.  On the knock server, we have a special action to perform when someone executes that particular sequence.  Add this to /etc/knockd.conf:</p>
<blockquote><p><code>[shutdown]<br />
sequence = 1,2,3,4,5<br />
seq_timeout = 10<br />
tcpflags = syn<br />
command = killall knockd</code></p></blockquote>
<p>By the way, <strong>do not</strong> actually use the sequence 1 2 3 4 5.  Use a random sequence, but include a number that will never appear in your normal portknocking sequences.  The &#8216;out of phase&#8217; number guarantees you never accidentally shut down the server, and keeping the sequence random guarantees that a portscan or other malicious attack won&#8217;t lock you out down your server.  It would be a good idea to change this sequence every time you use it, as well, to prevent an attacker from repeating the sequence to frustrate you.</p>
<h2 id="appendix_a">Appendix A: Beyond SSH &#8211; forwarding other traffic</h2>
<p>You can take advantage of the power of SSH to create an extremely secure tunnel for almost any data; you aren&#8217;t limited to running commands on your remote machine.  Perhaps you want to browse the web through the encrypted tunnel, so other users on the network can&#8217;t see that you&#8217;re really shopping on newegg instead of getting work done.  In that case, you could add this to your .ssh/config file:</p>
<blockquote><p><code>DynamicForward 8137</code></p></blockquote>
<p>This creates a SOCKS proxy that you can route traffic through.  Simply configure your web browser to use a proxy at localhost, port 8137.  If you want to tunnel certain sites through the proxy but not others (and you use Firefox), check out <a href="http://foxyproxy.mozdev.org/">FoxyProxy</a>.  Check the command &#8216;man ssh_config&#8217; for more options you can put in the .ssh/config file.</p>
<h2 id="appendix_b">Appendix B: Mounting your encrypted volume made easy</h2>
<p>You need root access to create and mount an encrypted volume.  If you use the same few computers all the time (and you have root access on them), you can simplify your life.  First, use the &#8216;visudo&#8217; command and add a line to the end of the sudoers file like this:</p>
<blockquote><p><code>your_user ALL=(root) NOPASSWD: /sbin/cryptsetup</code></p></blockquote>
<p>This will allow you, as a normal user, to execute &#8216;cryptsetup&#8217;, which lets you create and remove encrypted volumes.  Next, add a line like this to /etc/fstab:</p>
<blockquote><p><code>/dev/mapper/secure /mnt/secure auto noauto,user,umask=077 0 0</code></p></blockquote>
<p>This will allow users to mount /dev/mapper/secure once it is created.  The umask guarantees other users on the system can&#8217;t see our files, which would compromise the ssh key.  Don&#8217;t worry, we can still prevent another user on the system from hijacking our mount; that comes next.  Now, create two files in /usr/local/bin, called &#8216;secureon&#8217; and &#8216;secureoff&#8217;.  In secureon, put:</p>
<blockquote><p><code>#!/bin/sh<br />
sudo cryptsetup create secure /dev/sda1 &amp;&amp; \<br />
mount /mnt/secure</code></p></blockquote>
<p>sda1, of course, is whatever the device name of the encrypted partition is.  You can use udev or hal to ensure this is always a consistent name.  secureoff looks like this:</p>
<blockquote><p><code>#!/bin/sh<br />
umount /mnt/secure &amp;&amp; \<br />
sudo cryptsetup remove secure</code></p></blockquote>
<p>Make both of these scripts executable (&#8216;chmod 755 /usr/local/bin/secureo*&#8217;).  Now you can simply run &#8216;secureon to create and mount the secure volume (you&#8217;ll be prompted for the encryption passphrase), and &#8216;secureoff&#8217; when you&#8217;re finished.</p>
<h2 id="appendix_c">Appendix C: Behind a router</h2>
<p>The last case we will consider is the complex but extremely common situation where you have one device acting as a router.  This changes the iptables rules we need to use with the knockd server.</p>
<p>First, you need to have a router that  you can install Linux software on.  In other words, your router must be running Linux.  If you have a computer acting as your router, this is probably no problem for you.  If you have a consumer broadband router, this may be more difficult.  You can get Linux firmware for certain models of broadband router, however.  Several broadband router distributions exist; I use <a href="http://openwrt.org/">OpenWRT</a>; it is easy to install new software with OpenWRT, and <a href="http://www.dd-wrt.com/wiki/index.php/Knockd">knockd is available for it</a>.</p>
<p>The exact rules you will need are going to depend on your particular iptables setup, but to forward a port you will need two rules:  one in the filter table&#8217;s FORWARD chain and one in the nat table&#8217;s PREROUTING chain.  The approach that I recommend is to add the rule in the FORWARD chain permanently, and use knockd to add and remove the PREROUTING rule.  This simplifies the knockd configuration, and allows you to use the FORWARD chain as a handy reference for what forwards are possible.</p>
<p>For example, let&#8217;s say you have a machine at 10.10.9.18, and the knock daemon will open SSH to this machine.  First, you want to add this firewall rule permanently:</p>
<blockquote><p><code>iptables -A FORWARD -p tcp --dport 22 -d 10.10.9.18 -j ACCEPT</code></p></blockquote>
<p>Put that in your router&#8217;s iptables configuration.  If your router is running Fedora, put this line (minus &#8216;iptables&#8217;) in /etc/sysconfig/iptables.</p>
<p>If you&#8217;re using OpenWRT, I would suggest using the forwarding_wan chain instead of the FORWARD chain.  Also, on OpenWRT you can put this line in /etc/firewall.user.</p>
<p>The start_command and stop_command lines in /etc/knockd.conf will add and remove the PREROUTING rule, like so:</p>
<blockquote><p><code> start_command = /usr/sbin/iptables -t nat -A PREROUTING -s %IP% -p tcp --dport 22 -j DNAT --to 10.10.9.18:22<br />
stop_command = /usr/sbin/iptables -t nat -D PREROUTING -s %IP% -p tcp --dport 22 -j DNAT --to 10.10.9.18:22</code></p></blockquote>
<p>For OpenWRT, use the prerouting_wan chain instead of the  PREROUTING chain.</p>
<p>One great thing you can do with a router is use different knock sequences to forward SSH to different servers.  If you have several machines on your network, you can simply add additional sections to knockd.conf (and additional rules in the FORWARD chain).  As long as they use different knock sequences, you can overload port 22 to forward to whichever machine you need.</p>
<br />Posted in Technology Tagged: howto, linux, security <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/stringofbits.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/stringofbits.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/stringofbits.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/stringofbits.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/stringofbits.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/stringofbits.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/stringofbits.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/stringofbits.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/stringofbits.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/stringofbits.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/stringofbits.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/stringofbits.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/stringofbits.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/stringofbits.wordpress.com/52/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=52&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2008/12/07/paranoid-security-establishing-a-connection-the-hard-way/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7a6c6c99ccd3e2bbaec318a52fb3d43c?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">annabunches</media:title>
		</media:content>
	</item>
		<item>
		<title>Linux on the Desktop &#8211; a partial solution</title>
		<link>http://stringofbits.net/2007/07/24/linux-on-the-desktop-a-partial-solution/</link>
		<comments>http://stringofbits.net/2007/07/24/linux-on-the-desktop-a-partial-solution/#comments</comments>
		<pubDate>Tue, 24 Jul 2007 18:56:00 +0000</pubDate>
		<dc:creator>Anna Wiggins</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=14</guid>
		<description><![CDATA[Lately, I&#8217;ve read a number of &#8220;Windows user tried Linux for a week and hated it, and this is why&#8221; articles. Then, while holding back the urge to scream during a Windows XP install, it hit me: we&#8217;re holding a double standard, here. In the last year, whenever someone talks about &#8220;whether Linux is ready [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=14&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Lately, I&#8217;ve read a number of &#8220;Windows user tried Linux for a week and hated it, and this is why&#8221; articles.  Then, while holding back the urge to scream during a Windows XP install, it hit me: we&#8217;re holding a double standard, here.</p>
<p>In the last year, whenever someone talks about &#8220;whether Linux is ready for the desktop&#8221;, the complaints that always crop up revolve around the fact that a user can&#8217;t throw in a Linux install CD, click next a few times, and have a fully functional desktop environment in half an hour.  Several things plague these proverbial users: the lack of mp3 support is probably the most problematic now, as is the lack of 3d graphics support.  The complaints further, er&#8230; complain, that the user has to know what she is doing to enable/install all of these components.</p>
<p>What most people overlook, though, is that installing Windows is no cakewalk, either.  Windows ships with almost no real video or audio hardware support &#8211; everything must be downloaded from 3rd party websites, and more importantly, the user has to *know* what vendor website to go to, and how to navigate the vendor&#8217;s site (with some vendors, that can be a real pain!).</p>
<p>So now, let&#8217;s be fair.  I&#8217;m taking a Windows XP install, out of the box, and comparing it side-by-side with an Ubuntu Linux install.  Okay, here goes.</p>
<div style="font-size:14pt;">Ubuntu Linux</div>
<div style="font-weight:bold;">No mp3 support</div>
<p>As a user, I have to install several non-free packages, which means changing my available repositories and running a few commands (or using the graphical tool).  If I prefer the less-questionably-legal route, I would purchase <a href="http://www.fluendo.com/">Fluendo</a> (28E for their entire set of plugins, with perputual updates, as of this writing.  Still about 1/4 the price of Windows&#8217; most basic version), and follow their instructions to install it.</p>
<p>Of course, I also have to *know* about these options.  A quick google search (&#8220;MP3s in Ubuntu&#8221;) and a forum gives me the answer, in step-by-step format.</p>
<div style="font-weight:bold;">No 3d graphics acceleration</div>
<p>This is even easier.  All we need is to install the nvidia-glx or xorg-driver-fglrx packages, depending on the card.  They&#8217;re also in the restricted repository, but we&#8217;ve already enabled it previously.  If we hadn&#8217;t, the google search &#8220;3d graphics in Ubuntu&#8221; gives us the correct answer immediately.</p>
<div style="font-weight:bold;">No flash player</div>
<p>Another quick google search turns up the answer, as always with step-by-step instructions.</p>
<p>And, that&#8217;s it.  Everything else I need to do to be productive is already provided by Ubuntu: web browser, office suite, multimedia software.  Note: I never had to restart Ubuntu during this whole process.</p>
<div style="font-size:14pt;">Windows XP</div>
<div style="font-weight:bold;">No audio</div>
<p>First, I have to figure out the name of my audio chip, which Windows doesn&#8217;t tell me.  All Windows will say is &#8220;Unknown Multimedia device&#8221;.  By booting Linux and running lspci, I discover it&#8217;s a C-Media chip, and go to their website.  I have to give them the exact chip model number, and they give me a driver to download.  I have to restart Windows.</p>
<div style="font-weight:bold;">No 3d graphics acceleration</div>
<p>Again, the video controller is just called an &#8220;Unknown display adapter&#8221;.  Foreknowledge tells me I have an Nvidia Geforce 6600 GT.  I go to Nvidia&#8217;s website (much easier to use than C-Media was), and get the driver.  I have to restart Windows.</p>
<div style="font-weight:bold;">No flash player</div>
<p>Well, this one installs automatically.  Doesn&#8217;t even need a restart!  1/3 isn&#8217;t bad, I suppose.</p>
<div style="font-size:14pt;">The Conclusion</div>
<p>What&#8217;s the point of this exercise?  Am I trying to say Windows is teh sux0r?  No, that&#8217;s not my message today.  I could extoll the myriad problems with Windows that make Linux a better option (spyware, viruses, openness and all the benefits thereof, etc), but that&#8217;s not the point.</p>
<p>The point is this:  when it comes to installation, Linux and Windows are roughly equivalent in complexity.  Linux has its installation issues; so does Windows.  They tend to break roughly even, in my experience, although Linux has a much more readily available support structure in the form of community forums.  But both OSes require a lot of user knowledge in order to get up and running.  They assume you already know how to do things.  What they really assume, underneath, is that</p>
<div style="font-weight:bold;">a technical person is doing the install.</div>
<div style="font-size:14pt;">The Solution</div>
<p>Most Windows users never install their OS; some technician installs it, either OEM at a factory, or at the local computer shop, or the in-law programmer who gets drafted for technical work (ahem&#8230;).  Linux users have seldom known this luxury; instead, whenever someone talks about Linux, they assume that the end user is doing the install.</p>
<p>The solution is to treat Linux installation the way we treat Windows installation.  Someone who Knows What They Are Doing &#8482; sets up the OS and delivers it to the end user.  One practical advantage for the Linux community is that all the time spent on fancy installers could be channeled elsewhere (not to say we don&#8217;t like our hardware auto-detection, et al.  But a curses-based menu is just fine, thanks).  Make Linux installation work like OS installation always has before: technical users install their own OS, everyone else leaves it to the techs.</p>
<p>At least don&#8217;t hold us to a double standard.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/stringofbits.wordpress.com/14/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/stringofbits.wordpress.com/14/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/stringofbits.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/stringofbits.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/stringofbits.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/stringofbits.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/stringofbits.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/stringofbits.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/stringofbits.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/stringofbits.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/stringofbits.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/stringofbits.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/stringofbits.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/stringofbits.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/stringofbits.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/stringofbits.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=14&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2007/07/24/linux-on-the-desktop-a-partial-solution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7a6c6c99ccd3e2bbaec318a52fb3d43c?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">annabunches</media:title>
		</media:content>
	</item>
		<item>
		<title>Then They Fight You</title>
		<link>http://stringofbits.net/2007/05/14/then-they-fight-you/</link>
		<comments>http://stringofbits.net/2007/05/14/then-they-fight-you/#comments</comments>
		<pubDate>Mon, 14 May 2007 05:56:00 +0000</pubDate>
		<dc:creator>Anna Wiggins</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[freedom]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=12</guid>
		<description><![CDATA[Microsoft threatens to sue the entire FOSS community Where have I seen this kind of threat before? Hmm&#8230; SCO, anyone? Is MS really desperate enough for that? SCO only sued IBM because they were losing money in copious amounts, flirting with bankruptcy. Vista seems to be the straw that&#8217;s breaking Microsoft&#8217;s back.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=12&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://money.cnn.com/magazines/fortune/fortune_archive/2007/05/28/100033867/index.htm?section=money_latest">Microsoft threatens to sue the entire FOSS community</a></p>
<p>Where have I seen this kind of threat before?  Hmm&#8230; SCO, anyone?  Is MS really desperate enough for that?  SCO only sued IBM because they were losing money in copious amounts, flirting with bankruptcy.  Vista seems to be the straw that&#8217;s breaking Microsoft&#8217;s back.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/stringofbits.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/stringofbits.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/stringofbits.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/stringofbits.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/stringofbits.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/stringofbits.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/stringofbits.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/stringofbits.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/stringofbits.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/stringofbits.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/stringofbits.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/stringofbits.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/stringofbits.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/stringofbits.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/stringofbits.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/stringofbits.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stringofbits.net&amp;blog=23443234&amp;post=12&amp;subd=stringofbits&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2007/05/14/then-they-fight-you/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7a6c6c99ccd3e2bbaec318a52fb3d43c?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">annabunches</media:title>
		</media:content>
	</item>
	</channel>
</rss>
