<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Daniel Hall&#039;s Website &#187; Linux</title>
	<atom:link href="http://www.danielhall.me/tag/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.danielhall.me</link>
	<description>Because the Internet doesn&#039;t have enough opinions already</description>
	<lastBuildDate>Sun, 23 Oct 2011 23:15:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Rebooting with &#8216;The Big Hammer&#8217;</title>
		<link>http://www.danielhall.me/2010/12/rebooting-with-the-big-hammer/</link>
		<comments>http://www.danielhall.me/2010/12/rebooting-with-the-big-hammer/#comments</comments>
		<pubDate>Sun, 12 Dec 2010 00:57:40 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[System Administration]]></category>
		<category><![CDATA[Desperation]]></category>
		<category><![CDATA[Emergency]]></category>
		<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Overkill]]></category>
		<category><![CDATA[Recovery]]></category>

		<guid isPermaLink="false">http://www.danielhall.me/?p=670</guid>
		<description><![CDATA[Today I had a machine I was working on spit the dummy in a really bad way. It had a tonne of IO errors to its root filesystem and eventually decided to remount it read only. Of course this meant &#8230;<p class="read-more"><a href="http://www.danielhall.me/2010/12/rebooting-with-the-big-hammer/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Today I had a machine I was working on spit the dummy in a really bad way. It had a tonne of IO errors to its root filesystem and eventually decided to remount it read only. Of course this meant that it was almost entirely wedged. I tried the reboot command, the init command and everything would lockup my terminal. Not having console or physical access to the machine I couldn&#8217;t simply hit the power button, so I used the Linux magic commands:<code></code></p>
<p><code><br />
# echo 1 &gt; /proc/sys/kernel/sysrq<br />
# echo b &gt; /proc/sysrq-trigger<br />
</code></p>
<p>Of course the disk errors meant that it was unable to boot but &#8216;The Big Hammer&#8217; struck me as something extremely useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielhall.me/2010/12/rebooting-with-the-big-hammer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Using EncFS to encrypt your files</title>
		<link>http://www.danielhall.me/2010/04/using-encfs-to-encrypt-your-files/</link>
		<comments>http://www.danielhall.me/2010/04/using-encfs-to-encrypt-your-files/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 20:53:38 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Encryption]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.danielhall.me/?p=546</guid>
		<description><![CDATA[About EncFS EncFS is an encrypted filesystem based on FUSE. It transparently encrypts files stored in it and places them on another volume. This is in contrast to block level encrypted filesystems which transparently encrypt the data under the filesystem &#8230;<p class="read-more"><a href="http://www.danielhall.me/2010/04/using-encfs-to-encrypt-your-files/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<h1>About EncFS</h1>
<p>EncFS is an encrypted filesystem based on FUSE. It transparently encrypts files stored in it and places them on another volume. This is in contrast to block level encrypted filesystems which transparently encrypt the data under the filesystem layer as it is being written to disk. Think of EncFS as a bind mount, except that the source for the mount is encrypted and the place it is mounted to is the only place it is available unencrypted.</p>
<p>The main advantage of EncFS filesystems is that when backing up only the files which have changed need to be backed up. This means it works perfectly with tools such as rsnapshot. Another advantage is that the filesystem doesn&#8217;t need a block of disk allocated to it and will shrink and expand as the files inside change.</p>
<p>Finally because this is all implemented with FUSE it is all done in userspace. No root access is required (apart from setting FUSE up) to create and alter encfs filesystems.</p>
<h2>Setting Up an EncFS Volume</h2>
<p>So the first thing you need to do to setup an encfs volume is to install FUSE and EncFS. If you don&#8217;t have root access you will have to ask your sysadmin to do this for you, otherwise follow your distribution specific method of installing new packages. On Fedora it is called &#8216;fuse-encfs&#8217; and on Debian/Ubuntu its called &#8216;encfs&#8217;. On some older systems users wishing to use FUSE may need to be added to the correct group.</p>
<p>First you need to decide where you will put the encfs volume, and where you&#8217;ll mount it. I usually put mine in /home/daniel/.crypt and mount it to /home/daniel/crypt. But feel free to name it whetever you want. When you&#8217;ve decided run the EncFS with those arguments, for example to use the example I specified it would look like this:</p>
<p>[code]<br />
&lt;daniel@server ~&gt;$ encfs /home/daniel/.crypt /home/daniel/crypt<br />
The directory &quot;/home/daniel/.crypt/&quot; does not exist. Should it be created? (y,n) y<br />
The directory &quot;/home/daniel/crypt&quot; does not exist. Should it be created? (y,n) y<br />
Creating new encrypted volume.<br />
Please choose from one of the following options:<br />
 enter &quot;x&quot; for expert configuration mode,<br />
 enter &quot;p&quot; for pre-configured paranoia mode,<br />
 anything else, or an empty line will select standard mode.<br />
?&gt;</p>
<p>Standard configuration selected.</p>
<p>Configuration finished.  The filesystem to be created has<br />
the following properties:<br />
Filesystem cipher: &quot;ssl/aes&quot;, version 2:2:1<br />
Filename encoding: &quot;nameio/block&quot;, version 3:0:1<br />
Key Size: 192 bits<br />
Block Size: 1024 bytes<br />
Each file contains 8 byte header with unique IV data.<br />
Filenames encoded using IV chaining mode.<br />
File holes passed through to ciphertext.</p>
<p>Now you will need to enter a password for your filesystem.<br />
You will need to remember this password, as there is absolutely<br />
no recovery mechanism.  However, the password can be changed<br />
later using encfsctl.</p>
<p>New Encfs Password:<br />
Verify Encfs Password:<br />
[/code]</p>
<p>As you can see the directories don&#8217;t need to be created first. There is also a prompt for what security settings you want to use. Hitting enter will give you standard settings, but for something more powerful you should hit &#8216;p&#8217; then enter. You can now proceed to place files in /home/daniel/crypt and they will be encrypted and placed into /home/daniel/.crypt. If you don&#8217;t believe me go ahead and check.</p>
<p>See? I told you so. Now you can unmount it using &#8216;fusermount -u /home/daniel/crypt&#8217; and mount it again using <span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">encfs /home/daniel/.crypt /home/daniel/crypt and typing your password.</span></p>
<p><strong>Random Thought:</strong> When travelling to other countries, local laws may mean that customs can search your laptop, including encrypted filesystems. You may have to reveal your key, or be arrested.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielhall.me/2010/04/using-encfs-to-encrypt-your-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing a Daemon in C</title>
		<link>http://www.danielhall.me/2010/01/writing-a-daemon-in-c/</link>
		<comments>http://www.danielhall.me/2010/01/writing-a-daemon-in-c/#comments</comments>
		<pubDate>Fri, 01 Jan 2010 12:14:35 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Daemon]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://www.danielhall.me/?p=466</guid>
		<description><![CDATA[What is a Daemon? A daemon is a program that runs in the background. A daemon will usually be started at system startup and end at system shutdown. The exceptions to this rule are programs like the Bluetooth SDP daemon, &#8230;<p class="read-more"><a href="http://www.danielhall.me/2010/01/writing-a-daemon-in-c/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<h2>What is a Daemon?</h2>
<p>A daemon is a program that runs in the background. A daemon will usually be started at system startup and end at system shutdown. The exceptions to this rule are programs like the Bluetooth SDP daemon, which is activated when a new Bluetooth HCI is found,, and ends when it is removed. Daemons run transparently and do not normally interact with the user directly.</p>
<p>Daemons start as ordinary processes but they eventually &#8216;fork and die&#8217; to start running in the background. Some daemons do only the &#8216;fork and die&#8217; step but ignore other important steps. Here is a list of what a daemon should do:</p>
<ol>
<li>Fork to create a child, and exit the parent process.</li>
<li>Change the umask so that we aren&#8217;t relying on the one set in the parent.</li>
<li>Open logs to write to in the case of an error.</li>
<li>Create a new session id and detach from the current session.</li>
<li>Change the working directory to somewhere that won&#8217;t get unmounted.</li>
<li>Close STDIN, STDOUT and STDERR.</li>
</ol>
<p>These steps ensure that our association with the calling environment is destroyed and our daemon is now free to run as a completely separate process.</p>
<p>Lastly before writing the daemon you should make sure the code is written securely and in a way that fails gracefully. If your daemon crashes it will not be able to prompt the user about what action to take. The user may not even notice until it is too late.</p>
<h2>Forking a child process</h2>
<p>In Unix fork() is the only system call with two return values. When you call fork a child process is created which is a near copy of its parent (some things will be different in the child eg. process id). The fork command then returns a 0 in the child and the childs process id in the parent, on failure a -1 is sent to the parent. Generally a program will then check whether it is the child or parent by these return values (just like in movies when a cloned character will check to see if he has a belly button and hence is the original). Here is a snippet of code to do this:<br />
[code lang="c"]<br />
pid_t pid;</p>
<p>/* Clone ourselves to make a child */<br />
pid = fork(); </p>
<p>/* If the pid is less than zero,<br />
   something went wrong when forking */<br />
if (pid &lt; 0) {<br />
    exit(EXIT_FAILURE);<br />
}</p>
<p>/* If the pid we got back was greater<br />
   than zero, then the clone was<br />
   successful and we are the parent. */<br />
if (pid &gt; 0) {<br />
    exit(EXIT_SUCCESS);<br />
}</p>
<p>/* If execution reaches this point we are the child */<br />
[/code]</p>
<h2>Changing the umask</h2>
<p>Because we are a clone of our parent we&#8217;ve inherited its umask. This means the child doesn&#8217;t know what permissions files will end up with when it tries to create them. We do this by simply calling umask like this:<br />
[code lang="c"]<br />
/* Set the umask to zero */<br />
umask(0);<br />
[/code]</p>
<h2>Open logs to write to</h2>
<p>This part can be done in several different ways. You could open text files, log to a database or use syslog. The method I&#8217;m going to demonstrate here is to log using syslog. Syslog sends your log messages to a system wide logger, where they can be configured to be written to a file, send to a network server or filtered away entirely.<br />
[code lang="c"]<br />
/* Open a connection to the syslog server */<br />
openlog(argv[0],LOG_NOWAIT|LOG_PID,LOG_USER); </p>
<p>/* Sends a message to the syslog daemon */<br />
syslog(LOG_NOTICE, &quot;Successfully started daemon\n&quot;); </p>
<p>/* this is optional and only needs to be done when your daemon exits */<br />
closelog();<br />
[/code]</p>
<h2>Create a new session id</h2>
<p>Each process on a Unix system is a member of a process group (or session). The id of each group is the process id of its owner. When we forked from our parent earlier we will have inherited its process group, and our process group leader will still be its parent process. We want to create our own process group and become our own process leader otherwise we will look like an orphan. We can do this easily as follows:<br />
[code lang="c"]<br />
pid_t sid;</p>
<p>/* Try to create our own process group */<br />
sid = setsid();<br />
if (sid &lt; 0) {<br />
    syslog(LOG_ERR, &quot;Could not create process group\n&quot;);<br />
    exit(EXIT_FAILURE);<br />
}<br />
[/code]</p>
<h2>Changing the working directory</h2>
<p>At the moment we have the working directory we inherited from our parent. This working directory could be a network mount, a removable drive or somewhere the administrator may want to unmount at some point. To unmount any of these the system will have to kill any processes still using them, which would be unfortunate for our daemon. For this reason we set our working directory to the root directory, which we are sure will always exist and can&#8217;t be unmounted.<br />
[code lang="c"]<br />
/* Change the current working directory */<br />
if ((chdir(&quot;/&quot;)) &lt; 0) {<br />
    syslog(LOG_ERR, &quot;Could not change working directory to /\n&quot;);<br />
    exit(EXIT_FAILURE);<br />
}<br />
[/code]</p>
<h2>Closing the standard file descriptors</h2>
<p>A daemon doesn&#8217;t interact with the user directly it has no use for STDIN, STDOUT and STDERR and we really have no idea where these are connected or where anything we write to them will end up. As these file descriptors are not required and effectively useless we should close them to save some system resources and prevent any related security problems. We close these descriptors like this:<br />
[code lang="c"]<br />
/* Close the standard file descriptors */<br />
close(STDIN_FILENO);<br />
close(STDOUT_FILENO);<br />
close(STDERR_FILENO);<br />
[/code]</p>
<h2>Writing the payload</h2>
<p>Now you have a C program that is capable of becoming a daemon, but its a pretty useless daemon if it exits immediately. Payload code is really up to you to design. I&#8217;ll offer you a few tips on designing your payload.</p>
<ul>
<li>Put your payload in a loop. Generally in a daemon you want to perform the same action over and over again until you&#8217;re killed. If you have to cleanup (such as closing syslog) when the daemon is about to be killed you should add an exit clause that will be activated by a SIGTERM signal handler.</li>
<li>Make your code as fast an efficient as possible. This is something you should do with any program, but with daemons it is important that you do not hamper the performance of the rest of the system. This is especially true if you&#8217;re going to be running this daemon on desktop systems.</li>
<li>Be aware that your code may be preempted very often. As your daemon is going to be running for the amount of time the system is up, it is likely that its execution will be preempted.</li>
<li>Be paranoid about security. Daemons are common attack vectors and can be used to gain privileged access to a system. You should consider dropping any privileges that you don&#8217;t require.</li>
</ul>
<h2>Conclusion</h2>
<p>So if we take all the code I&#8217;ve mentioned in this post and put it all together you have a simple daemon. You can download the source from the link here: <a href='http://www.danielhall.me/wp-content/uploads/2010/01/daemon.c'>daemon.c</a>.<br />
If your daemon is only going to be run on Linux and not on a System V style system such as Solaris you can use the <a href="http://www.manpagez.com/man/3/daemon/">daemon</a> function to do a lot of this work for you.</p>
<h2>References</h2>
<p><a href="http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html">Linux Daemon Writing HOWTO in C</a><br />
<a href="http://blog.emptycrate.com/node/219">Linux Daemon writing in C++</a></p>
<p><strong>Random Thought:</strong> It appears the <a href="http://objectiveministries.org/creation/propaganda.html#">devil uses a Unix</a> based OS, probably OSX.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielhall.me/2010/01/writing-a-daemon-in-c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using Subversion for Assignments</title>
		<link>http://www.danielhall.me/2009/10/using-subversion-for-assignments/</link>
		<comments>http://www.danielhall.me/2009/10/using-subversion-for-assignments/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 11:50:28 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[School Work]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://www.danielhall.me/?p=359</guid>
		<description><![CDATA[If you&#8217;ve never heard of subversion before then you are in for a pleasant surprise. Subversion is a version control tool, which means it will keep track of several files and all their old versions. Normally subversion is used to &#8230;<p class="read-more"><a href="http://www.danielhall.me/2009/10/using-subversion-for-assignments/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve never heard of subversion before then you are in for a pleasant surprise. Subversion is a version control tool, which means it will keep track of several files and all their old versions. Normally subversion is used to help multiple people work together on a single project. It tracks all their changes and combines them all, even flagging when conflicts occur and assists in resolving them. It is also useful when working alone on a school assignment. Here&#8217;s a few dot points that capture the essence of why Subversion is useful with assignments:</p>
<ul>
<li>Subversion allows you to work on the same assignment on multiple computers.</li>
<li>Subversion can email you with changes you&#8217;ve made, allowing to review them.</li>
<li>Subversion allows you to show a teacher that you&#8217;ve been working on an assignment over the whole time available and not just in the last few days. this gives you greater leverage when asking for an extension.</li>
<li>Subversion can help you prove in a disciplinary hearing that you did not plagiarise any code from others showing the natural growth your code had.</li>
<li>Subversion can get back that file you just accidentally emptied out of the trash.</li>
<li>Subversion can show you all the changes you made between the time you fixed that annoying bug, and now, when you just reintroduced it.</li>
</ul>
<p>The first step to making an assignment in is to build your repository. If you didn&#8217;t do this first that&#8217;s okay, you can easily import an existing project into a subversion repository. To create a repository you simply use the &#8216;svnadmin create&#8217; command. You should then create some folders that should be in every subversion repository (trunk, tags and branches). This next block of commands will show you how to create the initial project. If you&#8217;re using these instructions to import an existing project just copy your files into the trunk folder before you run the &#8216;svn import&#8217; command.<br />
[code lang="shell"]mkdir -p /home/daniel/svn/newproject<br />
svnadmin create /home/daniel/svn/newproject<br />
mkdir -p /tmp/newrepo/{trunk,branches,tags}<br />
svn import /tmp/newrepo file:///home/daniel/svn/newproject -m &quot;Create Initial Structure&quot;<br />
rm -rf /tmp/newproject[/code]<br />
The trunk, tags and branches folders aren&#8217;t strictly required but can be very useful in certain circumstances. The trunk folder is where you main copy sits, it should be the latest stable version of the software. In an assignment though this is where you will probably be doing all your work, you generally don&#8217;t have the need or the time to make and merge branches. Which leads us to branches. Generally you branch software when you are about to make a major change that may break other developers work. You most likely don&#8217;t have other developers on your assignment and if you do you&#8217;ve probably all decided on what parts you will work on. Finally tags are for labelling certain versions with a specific tag. For example if you have to submit your assignment weekly you could tag each week as you submit, or you could tag as you finish each requirement. To populate these folders you just copy whatever it is you want into them. Subversion will only use a minuscule amount of space as the copy will be stored internally to the repository.</p>
<p>Before you can edit the files in the repository you need to check it out. You can check it out to the same machine, you can <a href="http://www.danielhall.me/2009/09/using-subversion-over-ssh/">use SSH</a> or you could check it out over WebDAV depending how you&#8217;ve set it up. The following command checks out the trunk folder into a folder called newproject. This is one of the few times you have to type the full path to the repository. Subversion remembers this for you so that next time you use a subversion command its pre filled.<br />
[code lang="shell"]svn checkout file:///home/daniel/svn/newproject/trunk newproject[/code]<br />
What you&#8217;ve just checked out is called a &#8216;working copy&#8217;. This is where you make your changes before uploading them again in to the repository. Your working copy also includes copies of the versions you originally checked out so that if you want to revert back to them you can. Because they are stored in the working copy you don&#8217;t need access to the repository to revert. To revert back to the version you checked out from the repository you simply run &#8216;svn revert &lt;filename&gt;&#8217;. You can also find the differences between these versions and the current ones by using &#8216;svn diff &lt;filename&gt;&#8217;. The filename is optional and if omitted will print all the changes in the current directories and below.</p>
<p>Part 2 to come&#8230;<br />
<strong>Random Thought:</strong> I&#8217;ve just redesigned my website, I&#8217;d love to know what my readers think. If you could post your comment on the new design, I&#8217;d appreciate it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielhall.me/2009/10/using-subversion-for-assignments/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Using Subversion over SSH</title>
		<link>http://www.danielhall.me/2009/09/using-subversion-over-ssh/</link>
		<comments>http://www.danielhall.me/2009/09/using-subversion-over-ssh/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 08:19:38 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://www.danielhall.me/?p=356</guid>
		<description><![CDATA[Few people don't realise that subversion has the ability to connect to a remote repository via SSH. Its extremely simple and can give you all the advantages of storing your important files on a server while still having them readily accessible on your desktop.<p class="read-more"><a href="http://www.danielhall.me/2009/09/using-subversion-over-ssh/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Subversion is an amazing tool that you can use to keep track of all the changes you make to a group of files. If you haven&#8217;t used it before, or have never heard of &#8216;version control&#8217; then you should probably read the <a href="http://svnbook.red-bean.com/">Subversion Book</a>.</p>
<p>Few people don&#8217;t realise that subversion has the ability to connect to a remote repository via SSH. Its extremely simple and can give you all the advantages of storing your important files on a server while still having them readily accessible on your desktop. This means that for example you could have your files (and every old version of your files) stored on a RAID device on a server while working with them locally on your desktop.</p>
<p>To set this up its actually rather simple. First you create your repository and perform the initial import of the files. I usually make it in my home directory as follows:<br />
[code lang="shell"]mkdir -p /home/daniel/svn/newproject<br />
svnadmin create /home/daniel/svn/newproject<br />
mkdir -p /tmp/newrepo/{trunk,branches,tags}<br />
svn import /tmp/newrepo file:///home/daniel/svn/newproject -m &quot;Create Initial Structure&quot;<br />
rm -rf /tmp/newproject[/code]<br />
These commands are basically what you&#8217;d use to create any subversion repository and people familiar with it require no explanation. Most people probably even have is scripted to make it just that much easier. Here comes the fun part though. Next we (on our local machine) check the files out. To checkout subversion repositories over ssh you simply use the following command:<br />
[code lang="shell"]svn checkout svn+ssh://username@servername/home/daniel/svn/newproject/trunk newproject[/code]<br />
All going well you will now see a password prompt and upon successful authentication the files will be checked out. This is all that is required and from now on you can simply use the ordinary svn commands.</p>
<p><strong>Random Thought:</strong> &#8230; and I says to the kernel developer, I says &#8220;git this!&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielhall.me/2009/09/using-subversion-over-ssh/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fedora 12 Alpha</title>
		<link>http://www.danielhall.me/2009/09/fedora-12-alpha/</link>
		<comments>http://www.danielhall.me/2009/09/fedora-12-alpha/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 07:42:53 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.danielhall.me/?p=320</guid>
		<description><![CDATA[So recently Fedora released the alpha of their latest OS. I&#8217;d been running rawhide for quite a while. Of particular interest is that my RS690 no longer flickers when I move a window that includes an alpha channel, and no &#8230;<p class="read-more"><a href="http://www.danielhall.me/2009/09/fedora-12-alpha/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>So recently Fedora released the alpha of their latest OS. I&#8217;d been running rawhide for quite a while. Of particular interest is that my RS690 no longer flickers when I move a window that includes an alpha channel, and no longer randomly crashes. I&#8217;ve still got to disable modesetting but modesetting currently only stops me from enabling desktop effects.</p>
<p>Particular points I&#8217;m enjoying:</p>
<ul>
<li>The desktop wallpaper that has squares on an angled surface is very appealing. The other new desktop wallpapers are very eye catching too.</li>
<li>Having 3D rendering working properly on my laptop.</li>
<li>The new <a href="http://www.danielhall.me/wp-content/uploads/2009/09/desktop-login.ogg">Fedora 12 Login Theme</a> is music to my ears (except when I have my laptop speakers turned up and it reverbs horribly).</li>
<li>EXT4 support seems a bit stronger. Of particular importance barrier based sync now works on LVM metadevices.</li>
<li>Dracut has made no discernible difference to boot times and ability to boot.</li>
<li>resize2fs is now able to shrink an ext4 partition. system-config-lvm now recognises ext4 and allows resizing it.</li>
</ul>
<p>Particular points I&#8217;m not enjoying:</p>
<ul>
<li>Eclipse is unstable and keeps crashing.</li>
<li>Turning off the menu icons in GNOME seems like a bad idea, it makes it harder to recognise each menu.</li>
<li>Modesetting stops me from using 3D effects.</li>
<li>You can&#8217;t drag icons from the menu to the panels or the desktop any more.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.danielhall.me/2009/09/fedora-12-alpha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pet Projects</title>
		<link>http://www.danielhall.me/2009/08/pet-projects/</link>
		<comments>http://www.danielhall.me/2009/08/pet-projects/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 23:57:13 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.danielhall.me/?p=253</guid>
		<description><![CDATA[One thing I&#8217;ve observed of people around me who are extremely passionate about computers is that they all have pet projects. For some its their work on an open source project, some maintain distribution packages, others run useful websites and &#8230;<p class="read-more"><a href="http://www.danielhall.me/2009/08/pet-projects/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>One thing I&#8217;ve observed of people around me who are extremely passionate about computers is that they all have pet projects. For some its their work on an open source project, some maintain distribution packages, others run useful websites and some even attempt to found companies. I&#8217;ve had a few pet projects through my years.</p>
<p>Early in my high school education I discovered Microsoft Visual Basic 6.0. This was my original programming language and where I learnt the basis of my programming skills. Using Visual Basic I wrote many programs, some useful some utterly useless. I remember writing a chat program, a scrabble optimiser, a remote PC control application and several games. Unfortunately an over zealous system administrator saw many executables in my home directory and decided I had been infected by a virus and wiped the whole directory. Unfortunately as much as I protested and complained the files were never restored and they are all lost forever.</p>
<p>As I was completing my high school years I ran a web game with two fellow classmates of mine. We spend most of the second half of the year designing it and I spent my exam period implementing it. We managed to keep it running for a year until we ran out of funds (we were all studying) to support it. The game had several limitations and some major design flaws. I&#8217;ve entertained thoughts of setting it up once again many times, but ultimately without my two partners (one of who I&#8217;ve lost touch with) it would never work. In addition all copies of the original source code have been lost.</p>
<p>Now we come to my favourite project of all. <a href="http://www.danielhall.me/WeatherMon">WeatherMon</a> was written for my Dad. He had bought a weather station that had a PC link and this enabled me to get the data into our server. Not only is <a href="http://www.danielhall.me/WeatherMon">WeatherMon</a>&#8216;s source code still available it is still running to this day. It was also my first foray into AJAX and XML. WeatherMon does not reload the page at all, and all data transferred is either images or XML. I&#8217;ve got a write up all about it <a href="http://www.danielhall.me/projects/about-weathermon/">here</a>.</p>
<p>Finally, it began as a school assignment but I took it way too far. Originally I had implemented it as a web service, which I then extended to a website, then I made the XHTML so that it could easily be themed and finally I implemented several themes. You can read about converter <a href="http://www.danielhall.me/projects/about-converter/">here</a>.</p>
<p>I think pet projects are what differentiates the passionate from the crowd. Anybody can write programs, and anybody can go to work and do it there. It takes the right person to want to toil outside hours on something that isn&#8217;t earning them any money. I think the best thing you can do to further your abilities and your career is to start a pet project. It doesn&#8217;t have to be thankless, or useless but that doesn&#8217;t mean it can&#8217;t be. Its easy, submit a patch to an open source project, become a maintainer for a project lacking development, fork a project, start a website or even start your own open source project.</p>
<p><strong>Random Thought:</strong> How tasty is the definitive <a href="http://recipes.wikia.com/wiki/Tomato_sauce">Open Sauce</a>?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielhall.me/2009/08/pet-projects/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SSH Agent Forwarding</title>
		<link>http://www.danielhall.me/2009/08/ssh-agent-forwarding/</link>
		<comments>http://www.danielhall.me/2009/08/ssh-agent-forwarding/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 23:01:29 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[System Administration]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SSH]]></category>

		<guid isPermaLink="false">http://www.danielhall.me/?p=160</guid>
		<description><![CDATA[So you use keys to SSH between your hosts, and you either have separate keys for each machine you use, or worse you have the same key on each machine. Lets go over why each of those are bad, and &#8230;<p class="read-more"><a href="http://www.danielhall.me/2009/08/ssh-agent-forwarding/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>So you use keys to SSH between your hosts, and you either have separate keys for each machine you use, or worse you have the same key on each machine. Lets go over why each of those are bad, and lets see how SSH Agent forwarding will help with those issues and make things easier for you in general.</p>
<p>So the key part of why a SSH agent and SSH agent forwarding forwarding is so useful is due to the way keys can be attacked. If I wanted to get your SSH private key I could find some flaw in the system that would give me that /home/you/.ssh/id_rsa file you have. Of course a malicious user with root access to the system could just go in and grab it. You can prevent this kind of attack by setting a passphrase on the key. Of course the root user could replace SSH with a special version designed to get your passphrase, steal the key out of memory or setup a keylogger. This means effectively that your private key is not safe on any system where a person you don&#8217;t trust has root access, or has other users and exploitable vulnerabilities.</p>
<h2>Single Private Key on Multiple Machines</h2>
<p>In this example you&#8217;re trusting the security of every single machine you have your private key on. Should it get compromised then you have to revoke you public key from every host, and regenerate private keys to place on every host. Every time you put your private key on a machine you increase the chances that it could be compromised.</p>
<h2>Multiple Private Keys On Multiple Machines</h2>
<p>So we&#8217;re getting a little closer to a good solution. In this instance we don&#8217;t have to generate our key and roll it out to all hosts in event of a compromise. You can also have segregate groups, on set of keys for work, another for home and so on. Your keys can still be compromised easily though, and once compromised they can be used until you revoke them manually.</p>
<h2>SSH Agent Forwarding</h2>
<p>There is a way to keep your key safe from compromise. Now I&#8217;ll have to explain how SSH authenticates you using your key. When your authenticating with SSH keys your key isn&#8217;t sent, the server sends you some random data and challenges your client to encrypt it with your private key. It then verifies the encrypted data by decrypting it with the public key and checking if it matches the data originally sent. Now the way most people would SSH from the second host to another third host is to utilise a private key on the second host to connect to the third host. Unfortunately this method means that you have to store a key (that is open for compromise) on the second host. SSH agent forwarding tells the SSH client on the second server to send the challenge data through to the SSH client (or ssh agent) on the first host. The agent encrypts the data and sends it via the SSH session to the third client.</p>
<p>The beauty of this method is that the second host never sees a private key, and the challenge data is useless to try and connect to a different host. Even if the second host is compromised there isn&#8217;t a private key there to compromise. It should be noted that if the second host is compromised it can still request the agent identify for a different host, or the session to the third host can be taken over. Both these are temporary though and unless the malicious user installs their key (something easy to notice) they cannot get back in.</p>
<div id="attachment_173" class="wp-caption alignright" style="width: 160px"><a href="http://www.danielhall.me/wp-content/uploads/2009/08/SSHAgent.png"><img class="size-thumbnail wp-image-173 " title="SSHAgent" src="http://www.danielhall.me/wp-content/uploads/2009/08/SSHAgent-150x150.png" alt="Diagram detailing how an SSH connection is authenticated using agent forwarding." width="150" height="150" /></a><p class="wp-caption-text">Diagram detailing how an SSH connection is authenticated using agent forwarding.</p></div>
<p>If you want to know more about how this works, there is a wonderful tech tip at <a href="http://unixwiz.net/techtips/ssh-agent-forwarding.html">http://unixwiz.net/techtips/ssh-agent-forwarding.html</a>.</p>
<h2>But how?</h2>
<p>SSH agent forwarding is even easier than copying keys all over the place. The first step is to generate keys for all the machines you log on to directly. You need to be sure these machines are secure and that your keys will stay safe, though this is sometimes not possible. You then add the generated public key to the authorized hosts file of all the machines you will connect to from this one, including ones that take two or more steps to get to. Finally you edit your ~/.ssh/ssh_config file to tell SSH to forward your agent through those hosts. Include the intermediate hosts in this list, but not the endpoints. You could also use <a href="http://www.danielhall.me/2009/07/sshmenu/">SSHmenu</a> to add the arguments automatically to those SSH commands. The following disables forwarding to all hosts, and explicitly enables it to fred, and aaron.missgner.com.</p>
<pre>Host fred
  ForwardAgent yes

Host aaron.missgner.com
  ForwardAgent yes

Host *
  ForwardAgent no</pre>
<p><strong>Random thought: </strong>Linux has Plug &#8216;n Pray too, you plug the device in and pray the drivers aren&#8217;t proprietary.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielhall.me/2009/08/ssh-agent-forwarding/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Oh My God &#8211; I broke my LVM</title>
		<link>http://www.danielhall.me/2009/08/oh-my-god-i-broke-my-lvm/</link>
		<comments>http://www.danielhall.me/2009/08/oh-my-god-i-broke-my-lvm/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 22:04:25 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[LVM]]></category>
		<category><![CDATA[Recovery]]></category>

		<guid isPermaLink="false">http://www.danielhall.me/?p=192</guid>
		<description><![CDATA[So today I did about the stupidest thing I could have done at the time. I was planning on clearing my USB hard drive so I could start my new backup plan on it. Of course any Linux geek knows the easy way to erase a hard drive is to do a 'dd if=/dev/zero of=/dev/sdb1'. On almost all my computer there is only one hard drive which maps to /dev/sda. Of course you know exactly where I'm going here don't you? So this is my home server with two hard drive combines into one volume group. The first hard drive is /dev/sda, the second /dev/sdb and the USB hard drive got mapped to /dev/sdc. So in my case that command obliterated the first 125Mb of my second drive before I noticed.<p class="read-more"><a href="http://www.danielhall.me/2009/08/oh-my-god-i-broke-my-lvm/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>So today I did about the stupidest thing I could have done at the time. I was planning on clearing my USB hard drive so I could start my new backup plan on it. Of course any Linux geek knows the easy way to erase a hard drive is to do a &#8216;dd if=/dev/zero of=/dev/sdb1&#8242;. On almost all my computer there is only one hard drive which maps to /dev/sda. Of course you know exactly where I&#8217;m going here don&#8217;t you? So this is my home server with two hard drive combines into one volume group. The first hard drive is /dev/sda, the second /dev/sdb and the USB hard drive got mapped to /dev/sdc. So in my case that command obliterated the first 125Mb of my second drive before I noticed.</p>
<p>My machine was still running so I knew I hadn&#8217;t wiped anything immediately important. The first thing that I thought of doing was checking what exactly it was that I had wiped and what chance I had of backing up anything before bailing out. Looking at the LVM layout revealed that I&#8217;d probably just destroyed the file system I stored my local Fedora repository on, something I could do without. So I umounted it, removed it from /etc/fstab and did a lvremove. This is exactly where I realised the gravity of the situation. LVM was complaining that it couldn&#8217;t locate one of the physical volumes. Of course it couldn&#8217;t, I&#8217;d just blown away all the metadata for it.</p>
<p>Did you know LVM keeps backups of the metadata? Yes, it keeps them in /etc/lvm/backup (for slightly older copies see /etc/lvm/archive) and you can use this to recover the metadata. I thought a good place to do this would be now, before the reboot that could end it all. Try as I might it was refusing to create a volume that already existed and it also complained about the device being in use. I count myself extremely lucky to be able to do what I did next. To me it felt incredible but when you really think about it it makes sense.</p>
<p>I downloaded the Fedora 11 Live CD and burned it to CD. Yep that&#8217;s right, while knocking on deaths door my machine managed to launch a torrent client, download a 700Mb ISO and burn it to a CD. After that I backed up the /etc/lvm folder to the USB hard drive that caused this mess. Finally I rebooted into the Live environment. The very next step was to recreate the partition table with fdisk.</p>
<p>Then I recreated the physical volume metadata that was destroyed with the following command:</p>
<pre>pvcreate -ff -u DsuvMV-1HVj-SQOU-wZkT-N9M0-LMZd-gPws1U \
 --restorefile /media/usbdisk/lvm/backup/Volgroup00 /dev/sdb1</pre>
<p>This forces the creation of a pv with a specific uuid, ignoring any pvs that exist with the same uuid. It also restores the metadata stored in the restorefile. Follow up with this command to restore the full metadata.</p>
<pre>vgcfgrestore -f /media/usbdisk/lvm/backup/Volgroup00 -v VolGroup00</pre>
<p>Now our LVM metadata is all correct, but at this point we still need to activate the logical volumes.</p>
<pre>vgchange -ay</pre>
<p>Finally you should fsck your logical volumes to make sure everything is working properly and you don&#8217;t get any nasty surprises later. All that is left then is to reboot into your recovered system.</p>
<p>Now thats something they don&#8217;t teach you in RHCE!</p>
<p><strong>Random thought: </strong>Who needs enemies when I have my own stupidity to contend with?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielhall.me/2009/08/oh-my-god-i-broke-my-lvm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fedora 12 (Constantine) Features</title>
		<link>http://www.danielhall.me/2009/08/fedora-12-constantine-features/</link>
		<comments>http://www.danielhall.me/2009/08/fedora-12-constantine-features/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 20:00:32 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[Systemtap]]></category>
		<category><![CDATA[Virtualisation]]></category>

		<guid isPermaLink="false">http://www.danielhall.me/?p=138</guid>
		<description><![CDATA[So it appears I called the feature freeze a little early. The feature freeze will actually happen on July 28. You will need to read my other post for features that haven't changed since then.<p class="read-more"><a href="http://www.danielhall.me/2009/08/fedora-12-constantine-features/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>So it appears I called the feature freeze a little early. The feature freeze will actually happen on July 28. You will need to read my <a href="http://www.danielhall.me/2009/07/a-look-forward-to-fedora-12-constantine/">other post</a> for features that haven&#8217;t changed since then. You can see the official list of features at <a href="https://fedoraproject.org/wiki/Releases/12/FeatureList">this page</a>.</p>
<h1>New Features</h1>
<h2>Abrt 1.0</h2>
<p>ABRT stands for Automated Bug Reporting Daemon. It is a tool designed to make it trivially easy for a user to submit a bug report when an application they are using crashes. This will require a fully updated system (to ensure you&#8217;re not reporting bugs already fixed, and the debuginfo packages for the software you&#8217;re reporting the bug for (they will be downloaded on demand). This will mean that should an application crash a popup will appear in the system tray, clicking the pop-up will launch a simple wizard to walk the user through the steps of reporting the bug.</p>
<h2>Anaconda MDRaid</h2>
<p>This feature involves changing the default RAID type from dmraid to mdraid when using Intel BIOS-RAID devices. Mdraid (Linux Software RAID) holds many advantages over dmraid including RAID 5 sets and better flexibility. In the past the dmraid drivers were built into the initrd and hence the only way to stop them loading would be to rebuild the initrd without them. Of course this was a non-solution as you had to do it every time you upgraded the kernel.</p>
<h2>FCoE</h2>
<p><a href="http://en.wikipedia.org/wiki/Fibre_Channel_over_Ethernet">Fibre Channel over Ethernet</a> is a recent attempt to reduce the number of cables and interfaces in datacenters. With less switches, cables and interfaces then less cooling is needed and less power is needed, which saves money which is clearly good for companies. So currently to get Fedora working over FCoE you have to play some very interesting tricks. This new feature is aiming to get Fedora 12 to easily install and boot straight from FCoE without any hassle.</p>
<h2>Fedora Studio</h2>
<p>If you have many multimedia applications installed in Fedora 11 you can end up with a very large menu. This can make it difficult to see all the applications and choose the right one. This feature is about creating submenus for media applications to make it easier to find everything.</p>
<h2>GFS2 Clustered Samba</h2>
<p>This feature (though I must admit I&#8217;m not experienced with samba) allows you to export GFS2 clustered filesystems across samba. This means that you can have high availability samba share. Unfortunately that&#8217;s as much as I can tell you. If you want to know more, I suggest you visit the <a href="https://fedoraproject.org/wiki/Features/GFS2ClusteredSamba">feature page</a>.</p>
<h2>KDE 4.3</h2>
<p>Keeping Fedoa at the cutting edge of the Linux software world involves keeping the desktop environments up to date. A desktop environment is what the user sees most and what will make the most difference to their experience. KDE 4.3 has many <a href="http://techbase.kde.org/Schedules/KDE4/4.3_Feature_Plan">new features</a> including: a new default theme, brand new plasma gadgets, Google Calendar support in KOrganiser and a new bug reporting tool.</p>
<h2>KSM</h2>
<p>KSM or Kernel SamePage Merging allows KVM to request pages of RAM that are identical between multiple virtual machines be shared. This approach works because visualized guests will be running the same daemons, loading the same kernels and loading a large amount of similar files. This requires a large amount of kernel changes which probably wont make it into the 2.6.31 kernel so will have to be backported.</p>
<h2>Mobile Broadband Enhancements</h2>
<p>The current black spot in NetworkManagers support is around mobile broadband. Today mobile broadband adaptors are becoming commonplace, but support in Linux is anything but easy. Adding NetworkManager support should make it extremely simple to get your broadband working where ever you are, whatever plan you&#8217;re on and whatever device you&#8217;re using.</p>
<h2>Moblin</h2>
<p>Moblin is a Linux platform that is optimised to give a better experience on netbooks. This feature involves the addition of new desktop manager from Moblin Core. Moblin is a complete rethink of the GUI in a way that&#8217;s designed to be easy to work on netbooks. Its also integrated with socail networking and all the features the &#8216;new kids&#8217; want. Check out the <a href="http://moblin.org/documentation/moblin-netbook-intro">intro video</a>.</p>
<h2>Gnome 2.28</h2>
<p>The plan for Gnome 2.28 hasn&#8217;t been completely finalized yet. So I cant tell you what you&#8217;ll see, what it will be like or whether this feature will eventually be dropped. You can find a list of planned changes for Gnome overall <a href="http://live.gnome.org/RoadMap">here</a> and a separate list for each Gnome application <a href="http://live.gnome.org/RoadMap/Modules">here</a>.</p>
<h2>KVM NIC Hotplug</h2>
<p>This feature add support for hot plugging KVM network interfaces. Having to restart every time you want to add a host to a new network, or give it another interface to load balance over can be a royal pain. Adding a new device simply involves creating a new TAP device and passing its file descriptor to QEMU. Some changes to SELinux will be required but that&#8217;s about it.</p>
<h2>KVM qcow2 Performance</h2>
<p>qcow2 is a disk format for QEMU. Currently though it has a poor performance when using it without a in memory write cache. Unfortunately though storing writes in memory means that in the event of a system crash they may not get written to the physical disk. This feature focuses on improving performance so that administrators don&#8217;t feel the need to choose between performance and data safety.</p>
<h2>KVM Huge Page Backed Memory</h2>
<p>Normally on an x86 CPU the page size would be 4 kilobytes, but the Linux kernel has the ability to use huge page sizes. To find out what size a huge page is in you system type &#8216;cat /proc/meminfo | grep Hugepagesize:&#8217;. On my x86_64 bit system this is 2048 Kb. Large pages require less memory for page tables, which increases performance.</p>
<h2>KVM Stable Guest ABI</h2>
<p>When QEMU is upgraded some of the devices it emulates may change, for example it may support new network cards or different hard drive controllers. These upgrades are equivalent to upgrading the hardware the guest runs on. Unfortunately if Windows detects that hardware has changed it requests activation. Reactivating all your windows guests can become very tiresome every time you upgrade QEMU. This feature is about providing a stabilized hardware to each guest, and only upgrading on the request of the administrator.</p>
<h2>libguestfs</h2>
<p>Libguestfs allows you to easily access any filesystem that can be accessed by your qemu virtual machines. It borrows code from the Linux kernel and qemu. This saves application developers from using complicated loopback mounts and LVM (of which there is another feature to improve).</p>
<h2>Lower Process Capabilities</h2>
<p>The DAC_OVERRIDE capability allows a process to override any file permissions that may be set. If we can remove the DAC_OVERRIDE permission from system daemons then they will become a less attractive target for exploitation. If the filesystem permissions are set in such a way as to protect the files even better (such as 0000 permissions on /etc/shadow and 005 on /bin) then attacking a program with root privileges will be even less attractive. This feature is about dropping DAC_OVERRIDE from some system daemons and modifying file permissions system wide.</p>
<h2>NetBeans 6.7</h2>
<p>Fedora has always been up to date with the latest cutting edge software. Currently NetBeans 6.5 is in Fedora 11. The plan it to move to NetBeans 6.7 to take advantages of the <a href="http://www.netbeans.org/community/releases/67/relnotes.html#new">new features</a>.</p>
<h2>Ovirt Node</h2>
<p>Ovirt node is a host installation of Fedora that is extremely lightweight. The only items included are utilities to run and manage virtual machines and their dependencies. This takes much less memory, disk and CPU for the host leaving more memory available to the guests and increasing the amount of virtual machines you can run on any host.</p>
<h2>Open Shared Root</h2>
<p>This feature is extremely interesting to me because as part of my work I manage several High Performance Clusters. This feature is about having multiple Fedora systems all boot off the same root filesystem. This way people who manage a large number of systems can make one completely stateless image that they all boot off.</p>
<h2>Power Management F12</h2>
<p>A sneak addition to Fedora 11 was tuned, so sneaky I only discovered it recently. It allows the system to tune its setting on the fly. For example on my laptop when there is little filesystem activity it can tune the commit interval so it only has to spin up the HD on rare occasions. It has a plugin architecture so it could also tune the network card to 10Mbits when it is hardly being used, or turn off the wireless network card when it isn&#8217;t required. This feature involves merging tuned and Red Hats ktune in order to automatically tune the power usage of your PC.</p>
<h2>SystemTap Eclipse GUI</h2>
<p>There is currently a focus on making SystemTap easier to use. Currently SystemTap only has a CLI GUI, and while there is a vim syntax highlighter it isn&#8217;t installed by default. This effectively means there is no IDE for developing SystemTap scripts. Eclipse is a visual editor for writing many types of applications. SystemTap will no doubt benefit With eclipse integration, maybe we&#8217;ll even see automatically generated SystemTap scripts.</p>
<h2>Systemtap Tracing Refresh</h2>
<p><a name="SystemTapTracingRefresh"></a>Originally a feature was proposed for Fedora 12 titled &#8216;SystemTap Static probes&#8217;, but the work required for this feature to become a reality hasn&#8217;t been finished yet. So that feature has been re targeted for Fedora 13. Instead this feature will focus on documenting and streamlining the SystemTap tools to provide a better user experience. This work going into this feature also enables the &#8216;SystemTap Static probes&#8217; for the next version of Fedora.</p>
<h2>Rakudo Perl 6</h2>
<p>Rakudo is an implementation of the Perl 6 specification under the Parrot Virtual Machine. There are currently many implementations of Perl 6 but this one clearly separates the compiler and the runtime and its more actively maintained than the rest. This feature allows Fedora to stay at the cutting edge of technology.</p>
<h2><a title="Features/Thusnelda" href="https://fedoraproject.org/wiki/Features/Thusnelda"> </a>Thusnelda</h2>
<p>Thusnelda is the name of the new Theora encoder. As of the libtheora 1.1 release it is now the chosen encoder for Theora video. Thusnelda&#8217;s development was supported by Red Hat, Wikimedia and Mozilla. It should be noted that mplayer and ffmpeg include their own implementation for Theora encoders so this feature will not include those applications that rely on them.</p>
<h2>Virtual Network Interface Management</h2>
<p>Linux allows some very complicated setups for networking, for instance you can bond multiple physical interfaces for increased throughput or reliability, you can set an inteface to tag VLANs and many more. None of these configurations are easy, and NetworkManager has even made some harder. This feature is especially important when guest machines are involved because they can involde some interesting network setups. This feature will introduce a netcf library to allow the easy configuration of complicated network setups. Netcf will not be integrated with NetworkManager in this release of Fedora, but these features will be designed with future integration in mind.</p>
<h2>NFSv4Default</h2>
<p>Simply put, this feature is about changing the default NFS protocol for Fedora 12 to NFSv4. NFSv4 includes many improvements over its predecessors but most importantly it uses less traffic to perform the same tasks.</p>
<h2>PackageKitBrowserPlugin</h2>
<p>Lets say I&#8217;m writing a blog post that explains how get SystemTap working on your system. I&#8217;d have to tell you what packages you&#8217;d need to install in order to get it working. Rather than give you a bunch of yum commands to run wouldn&#8217;t it be cool if you just clicked a button on my site. That&#8217;s basically what is involved in this feature, it means I can add a button which will prompt you to install the features I&#8217;ve told it to.</p>
<h2>PackageKitCommandNotFound</h2>
<p>Ever typed mplayer into a terminal only to find out it isn&#8217;t installed yet? This integrates into bashes command not found message to help you find the program you were looking for. Now instead of bash saying command not found when you type iotop for the first time it will prompt you to install it.</p>
<h2>SR-IOV</h2>
<p>using QEMU you can assign PCI devices directly to the guests machines, but previously this would stop the host from using it, and it would only be available on the one guest. This feature is about allowing multiple guests and the host to simultaneously access one PCI device. This requires driver support so that the machines can be organised and coordinated to prevent mishaps and errors.</p>
<h2>Virt Privileges</h2>
<p>This feature allows running QEMU as a non root user. Running with these lower privileges limits the damage that can be done by particular vulnerabilities. Another advantage is that you can have a much better intergration with a users desktop. The guest machine will be able to use that users sound server, put disk images in that users home directories and generally integrate with the desktop better.</p>
<h2>VirtioSerial</h2>
<p>This feature will create an interface between the userspace on the guest and the userspace on the host. This interface will consist of simple character devices that will be able to alert the guest to windows size changes, or transfer copy/paste data bidirectionally.</p>
<h2>VirtgPXE</h2>
<p>Every time Red Hat fix a bug in etherboot and send a patch upstream the get the response &#8220;we currently do not support etherboot, can you use gpxe instead?&#8221;. At the moment gxpe is included in Fedora but is not used by QEMU. The plan for this feature is to deprecate etherboot and move towards gxpa.</p>
<h2>Virt Storage Management</h2>
<p>At the moment if you want a guest machine to use a SAN for storage you&#8217;ll have to set it up manually. This feature plans to make it easier to configure by allowing machines to auto-detect and configure the SAN for the virtual machine.</p>
<h2>XI2</h2>
<p>XInput2 is a major enhancement over XInput1.5. It opens up X to some very interesting posibilities, for example I could have two keyboards and mice attached to my desktop allowing both me and another person to use two applications on the same screen simultaneously. I could copy something to the clipboard and they could paste it. I could drag a picture into their document from my image editor and so on. Somewhat less exciting is support for 32bit keycodes, instead of 255 allowing even more multimedia keys, support for devices that modify the amount of buttons they have at runtime and so on.</p>
<h2>YumLangpackPlugin</h2>
<p>Fedora is available in many different languages, but finding and installing the correct langpacks to get the language you want can be very difficult. This feature lets yum find and install the correct langpacks when the base langpack is installed. this makes Fedora much more accessable to people who speak languages other than English.</p>
<h1>Dropped Features</h1>
<h2>Debuginfo filesystem</h2>
<p>Dropped due to a lack of status updates</p>
<h2>Multiseat</h2>
<p>Dropped due to a lack of status updates</p>
<h2>SystemTap Static probes</h2>
<p>See the <a href="#SystemTapTracingRefresh">SystemTap Tracing Refresh</a>.</p>
<p><strong>Random Thought:</strong> I just wrote a 2446 word post about Fedora&#8217;s features and you expect me to be able to think afterwards? I&#8217;m too tired to think!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielhall.me/2009/08/fedora-12-constantine-features/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

