<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns="http://purl.org/rss/1.0/">




    



<channel rdf:about="http://rudd-o.com/linux-and-free-software/aggregator/RSS">
  <title>Linux and free software: front page</title>
  <link>http://rudd-o.com</link>
  
  <description>
    
       Get to know the wonderful world that Linux and free software enthusiasts have created!
       
  </description>
  
  
  
            <syn:updatePeriod>hourly</syn:updatePeriod>
            <syn:updateFrequency>1</syn:updateFrequency>
            <syn:updateBase>2008-11-13T17:05:31Z</syn:updateBase>
        
  
  <image rdf:resource="http://rudd-o.com/logo.png"/>

  <items>
    <rdf:Seq>
        
            <rdf:li rdf:resource="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/index"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/linux-and-free-software/ways-in-which-zfs-is-better-than-btrfs"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/linux-and-free-software/does-the-subwoofer-in-your-asus-laptop-not-work-under-fedora"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/linux-and-free-software/tip-letting-your-zfs-pool-sleep"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/linux-and-free-software/does-your-adobe-flash-player-icon-in-the-kde-system-settings-malfunction"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/linux-and-free-software/does-your-wireless-wifi-network-connection-glitch-stop-interrupt-every-two-minutes"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/linux-and-free-software/a-better-way-to-block-brute-force-attacks-on-your-ssh-server"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/linux-and-free-software/nokia-n900"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/linux-and-free-software/help-i-uninstalled-a-plone-product-reinstalled-it-and-now-some-of-my-content-doesnt-show-up-in-the-navigation"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/linux-and-free-software/arcana-of-etc-ltsp-ldm-global-dmrc"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/linux-and-free-software/how-to-make-pulseaudio-run-once-at-boot-for-all-your-users"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/linux-and-free-software/how-to-get-virtual-surround-sound-on-your-headphones-plugged-to-your-linux-rig"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/linux-and-free-software/kde-4.2-nepomuk-and-linux-distributions"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/linux-and-free-software/conficker-eye-chart-reloaded"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/linux-and-free-software/amarok-2-a-story-of-disappointment"/>
        
    </rdf:Seq>
  </items>

</channel>


    <item rdf:about="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/index">
    <title>How to install Fedora on top of ZFS</title>
    <link>http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/index</link>
    <description>A step-by-step guide to install ZFS on a newly-installed Fedora system, with screenshots and tips.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>
	This time, we will help you set up a newly installed Fedora system on your computer, which will boot from a ZFS file system. &nbsp;In a later guide, we'll show how to migrate an existing Fedora system to ZFS.</p>
<h2>
	What's this ZFS thing? &nbsp;Why would I want it on my computer?</h2>
<p>
	<strong>ZFS is, bar none, the best file system ever invented</strong>. &nbsp;It's better than ext4, better than XFS, and <a href="http://rudd-o.com/linux-and-free-software/ways-in-which-zfs-is-better-than-btrfs">better than btrfs</a> (which is, to date, the most advanced file system included in the Linux kernel).</p>
<p>
	If you want high reliability, data integrity and ease of administration for your computer, then you <em>want</em> to install Fedora atop ZFS.</p>
<p>
	I'll help you do exactly that.</p>
<h2>
	Gather what you'll need</h2>
<p>
	This guide should take about 25 to 30 minutes of your time, unless you're making a speed run. &nbsp;You will need:</p>
<ol>
	<li>
		A computer with a hard disk (or SSD, same thing). &nbsp;Conceivably, you could install on an USB drive too. &nbsp;We'll stick to the hard disk in this case.</li>
	<li>
		A USB drive or CD-ROM with Fedora 16 Live booting from it. &nbsp;You can record a CD or use liveusb-creator to afford your USB the Live CD.</li>
</ol>
<h2>
	Install Fedora</h2>
<p>
	We are going to install a Fedora copy on your computer.</p>
<h3>
	Boot Fedora Live</h3>
<p>
	Tell your computer that you want to boot from the USB drive or CD-ROM containing the Fedora Live installation you have at hand. &nbsp;For this, the instructions will vary from computer to computer, so we won't say much about that.</p>
<p style="text-align: center; ">
	<img src="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/images/01%20fedora%20live%20booted.png" alt="" title="01 fedora live booted.png" /></p>
<h3>
	Start the installation program</h3>
<p>
	Now run the Install to Hard Disk program in the System tools menu.</p>
<p style="text-align: center; ">
	<img src="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/images/02%20install%20hard%20disk.png" alt="" style="width: 856px; height: 670px; " title="02 install hard disk.png" /></p>
<p>
	You can use the installation program as usual. &nbsp;We'll just have to make a quick stop on the partitioning part, where we'll hold your hands. &nbsp;Select&nbsp;<em>Create custom layout</em> from the options:</p>
<h3>
	Partition your disk correctly</h3>
<p style="text-align: center; ">
	<img src="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/images/03%20create%20custom%20layout.png" alt="" style="width: 856px; height: 670px; " title="03 create custom layout.png" /></p>
<p>
	OK, now that you're you're here, continue and create the following partition layout:</p>
<ol>
	<li>
		A BIOS boot partition, 2 MB in size</li>
	<li>
		A <kbd>/boot</kbd> partition (ext4 or ext2, whatever you prefer) around 500 MB in size</li>
	<li>
		A swap partition, probably twice as big as the RAM&nbsp;memory in your system.</li>
	<li>
		An ext4 partition, mounted nowhere. &nbsp;You must select&nbsp;<em>Fill to maximum available size</em></li>
	<li>
		Another ext4 partition, mounted nowhere. &nbsp;You must select the same <em>Fill</em>&nbsp;option as before.</li>
	<li>
		Once you have done this, select the very last partition, and change it so it mounts on <kbd>/</kbd>.</li>
</ol>
<p>
	In sum: it's very important that the last partition on disk is the <kbd>/</kbd> partition, and that the swap partition be at the beginning of the disk. &nbsp;This is how it will look like in the end:</p>
<p style="text-align: center; ">
	<img src="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/images/04%20disk%20partition%20layout.png" alt="" style="width: 856px; height: 670px; " title="04 disk partition layout.png" /></p>
<p>
	Now hit Next.</p>
<h3>
	Continue the installation after rebooting</h3>
<p>
	You can continue the installation as normal. &nbsp;When the installation is done, eject the CD or USB drive, and reboot. &nbsp;After rebooting, complete the Fedora post-install wizard. &nbsp;Here's the product of your work:</p>
<p style="text-align: center; ">
	<img src="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/images/05%20log%20in%20as%20mr%20z.png" alt="" style="width: 856px; height: 670px; " title="05 log in as mr z.png" /></p>
<h3>
	Disable SELinux</h3>
<p>
	As root, edit <kbd>/etc/selinux/config</kbd> and disable SELinux by changing <kbd>SELINUX</kbd> to <kbd>disabled</kbd>. &nbsp;Save the file.</p>
<p>
	Then disable enforcement for the duration of your current session by running the command:</p>
<pre>
setenforce 0</pre>
<p>
	Note: yes, SELinux is important. &nbsp;We know. &nbsp;For the time being, however, your system will require that you disable SELinux until all issues preventing the use of SELinux with ZFS are ironed out. &nbsp;Maybe you can help us fix them.</p>
<h2>
	Install ZFS</h2>
<p>
	Since the installation of ZFS is a bit involved, we'll give you a few steps to run by hand and then a script that will take care of ZFS just fine. &nbsp;The following steps you will need to run as root, so open a terminal window and run the following commands as root.</p>
<h3>
	Install dependencies first</h3>
<p>
	You'll need to a series of dependencies to compile ZFS, so install them first:</p>
<pre>
yum install -y git patch kernel-devel gcc zlib-devel libuuid-devel libtool automake autoconf</pre>
<h3>
	Clone ZFS</h3>
<p>
	OK, after doing this, clone the ZFS repositories:</p>
<pre>
cd /usr/src
git clone https://github.com/zfsonlinux/spl
git clone https://github.com/Rudd-O/zfs</pre>
<p>
	This should net you two directories in <kbd>/usr/src</kbd> containing these sources.</p>
<h3>
	Add the compile script</h3>
<p>
	You will need to run <a href="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/files/deploy-zfs">the following script</a> soon. &nbsp;Save the contents of that file as&nbsp;<kbd>/usr/src/deploy-zfs</kbd>: &nbsp;Don't forget to make it executable.</p>
<h3>
	Patch GRUB to accept ZFS root file systems</h3>
<p>
	OK, now it's time to patch GRUB. &nbsp;Do the following steps:</p>
<pre>
cp /sbin/grub2-mkconfig /usr/src/grub-mkconfig.in
patch -p2 &lt; /usr/src/zfs/grub2/grub-mkconfig-zfs-support.diff
mv /usr/src/grub-mkconfig.in /usr/src/grub2-mkconfig</pre>
<h3>
	Tell the system to run deploy-zfs on every kernel installation</h3>
<p>
	To get this step done, do the following:</p>
<pre>
mkdir -p /etc/kernel/postinst.d
ln -s /usr/src/deploy-zfs /etc/kernel/postinst.d/</pre>
<h3>
	Run deploy-zfs</h3>
<p>
	At this point, you're ready to install ZFS. &nbsp;Run it:</p>
<pre>
/usr/src/deploy-zfs</pre>
<h3>
	Reboot</h3>
<p>
	Since the kernel-devel package is only available for the latest kernel, the ZFS modules are only going to be available on the latest kernel. &nbsp;<em>So you are now going to reboot using the latest kernel</em>.</p>
<p>
	Reboot your machine. &nbsp;When it reboots, select the latest kernel. &nbsp;After boot is done, confirm that you're using the latest kernel using the commands <kbd>rpm -q kernel</kbd> and <kbd>uname -r</kbd>.</p>
<h2>
	Prepare the​ ZFS pool and file systems</h2>
<p>
	OK. &nbsp;You have rebooted. &nbsp;Good.</p>
<p>
	Remember when we created a partition that was empty initially during the installation? &nbsp;Excellent. &nbsp;We're going to create a pool right there. &nbsp;In the following example, we assume that your root file system is mounted in <kbd>/dev/sda5</kbd> and the empty space is mounted in <kbd>/dev/sda4</kbd>. &nbsp;It would be a good idea to check this fact with the <kbd>mount</kbd> and <kbd>parted</kbd> commands before you proceed.</p>
<h3>
	Create the storage pool</h3>
<p>
	Run the following commands:</p>
<pre>
zpool create pool -m none -o ashift=12 /dev/sda4</pre>
<p>
	The <kbd>-m none</kbd> parameter tells the pool to not mount itself anywhere. &nbsp;The <kbd>-o ashift=12</kbd> parameter is optional, but it will make your pool perform better on advanced-format 4K sector disks (like SSDs and big hard disks).</p>
<p>
	If you did it right, you should be able to do the following and see a screen similar to this:</p>
<p style="text-align: center; ">
	<img src="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/images/06%20create%20pool%20FOR%20REALZ.png" alt="" style="width: 856px; height: 670px; " title="06 create pool FOR REALZ.png" /></p>
<h3>
	Create the root file system, along with other file systems</h3>
<p>
	Strictly speaking, this step is optional. &nbsp;You could use your pool exactly as it was when it was created. &nbsp;However, it's a good idea to follow the next step because it allows you to carry multiple operating systems and system directories in your pool more easily, so it's recommended.</p>
<pre>
zfs create pool/ROOT
zfs create pool/ROOT/fedora</pre>
<p>
	You should see something like this, after listing them:</p>
<p style="text-align: center; ">
	<img src="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/images/07%20create%20root%20and%20fedora.png" alt="" style="width: 856px; height: 670px; " title="07 create root and fedora.png" /></p>
<p>
	<kbd>pool/ROOT/fedora</kbd> will be your root file system. &nbsp;Feel free to create as many file systems underneath it as you would like, now. &nbsp;<kbd>pool/ROOT/fedora/home</kbd>, <kbd>pool/ROOT/fedora/var</kbd>, go wild like this:</p>
<p>
	&nbsp;</p>
<pre>
zfs create pool/ROOT/fedora/home
zfs create pool/ROOT/fedora/var</pre>
<p>
	Note: there is an exception to this. &nbsp;Remember that <kbd>/usr</kbd> <strong>cannot</strong> be an independent file system for now -- you can create it and set its <kbd>canmount</kbd> property to <kbd>no</kbd>, then create child file systems with <kbd>canmount=yes</kbd>&nbsp;within <kbd>/usr</kbd>, but you cannot directly mount any file system on <kbd>/usr</kbd> without your system breaking completely. &nbsp;This issue will be addressed in the future by the ZFS team. &nbsp;In the meantime. <kbd>/usr</kbd> must be available as part of the root file system.</p>
<h3>
	Set optional properties on the pool</h3>
<p>
	This is an optional step. &nbsp;Now is the best time to set properties like compression or no access time updates on your pool. &nbsp;If you have a decent CPU, compression will give you higher performance, especially with slower disks. &nbsp;Disabling access time recording gives an extra boost. &nbsp;This is the moment to set them:</p>
<pre>
zfs set compression=on pool
zfs set atime=off pool</pre>
<p>
	OK. &nbsp;Now every byte hitting your pool will be compressed. &nbsp;Nice space savings!</p>
<h3>
	Export the pool and reimport it with an alternate root</h3>
<p>
	Run the following commands:</p>
<pre>
zpool export pool
zpool import -o altroot=/sysroot pool</pre>
<p>
	This will make the ZFS system mount any file systems within the pool in <kbd>/sysroot</kbd>.</p>
<h3>
	Mount the file system that will be the destination for your operating system</h3>
<p>
	Set the <kbd>mountpoint</kbd> property on the root file system for your operating system:</p>
<pre>
zfs set mountpoint=/ root/POOL/fedora</pre>
<p>
	Your file systems will now look like this:</p>
<p style="text-align: center; ">
	<img src="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/images/08%20mount%20root.png" alt="" style="width: 856px; height: 670px; " title="08 mount root.png" /></p>
<h2>
	Migrate and configure the operating system</h2>
<h3>
	Copy the operating system to <kbd>/sysroot</kbd></h3>
<p>
	The next step is straightforward and it only requires waiting a bit:</p>
<pre>
rsync -axv / /sysroot/</pre>
<p>
	Note the slash in the end of <kbd>/sysroot/</kbd>!</p>
<h3>
	Populate /dev</h3>
<p>
	You'll need the device files too:</p>
<pre>
rsync -axv /dev/ /sysroot/dev/</pre>
<h3>
	Chroot into the /sysroot file system</h3>
<p>
	That's it. &nbsp;Use <kbd>chroot</kbd> to enter that directory as if it was the root.</p>
<h3>
	Mount /boot, /sys and /proc</h3>
<pre>
mount -t proc proc /proc
mount -t sysfs sys /sys
mount /boot</pre>
<p>
	This is how your system should look like after mounting these file systems.</p>
<p style="text-align: center; ">
	<img src="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/images/09%20all%20mounted.png" alt="" style="width: 856px; height: 670px; " title="09 all mounted.png" /></p>
<h3>
	Edit fstab to fix the root file system</h3>
<p>
	Now you'll be editng the root file system entry in <kbd>fstab</kbd>. &nbsp;Edit the file <kbd>/etc/fstab</kbd>, and change the line that mounts <kbd>/</kbd> as follows:</p>
<pre>
pool/ROOT/fedora / zfs defaults 0 0</pre>
<p>
	You may want to replace <kbd>defaults</kbd> with <kbd>noatime</kbd> for higher performance. &nbsp;This is how it should look like:</p>
<p style="text-align: center; ">
	<img src="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/images/10%20fstab.png" alt="" style="width: 856px; height: 670px; " title="10 fstab.png" /></p>
<h3>
	Redo GRUB configuration</h3>
<p>
	We will be using the special <kbd>grub2-mkconfig</kbd> that we patched earlier for this. &nbsp;Run the following command:</p>
<pre>
/usr/src/grub2-mkconfig | tee /boot/grub2/grub.cfg</pre>
<p>
	Your screen should look a bit like this. &nbsp;Note the <kbd>root=pool/ROOT/fedora</kbd> parameter!</p>
<p style="text-align: center; ">
	<img src="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/images/12%20grub.cfg.png" alt="" style="width: 856px; height: 670px; " title="12 grub.cfg.png" /></p>
<h3>
	Regenerate the initial RAM disk</h3>
<p>
	OK, now it's time to regenerate the initial RAM disk. &nbsp;The following command accomplishes that:</p>
<pre>
dracut -f /boot/initramfs-`uname -r`.img `uname -r`
</pre>
<p>
	Ignore the errors it gives you about <samp>no such dataset</samp>. &nbsp;These are temporary error messages because you are in a chroot.</p>
<h3>
	Unmount mounted file systems inside the chroot, and exit the chroot</h3>
<p>
	Clean up your chroot, and exit it.</p>
<pre>
umount /boot
umount /sys
umount /proc
exit</pre>
<h3>
	Export the pool</h3>
<p>
	To ensure a clean system, export the pool now.</p>
<pre>
zpool export pool</pre>
<p>
	If this process hangs, just wait thirty seconds, and then hard power off your machine. &nbsp;ZFS won't lose a bit because of this.</p>
<h3>
	Reboot</h3>
<p>
	Reboot your operating system. &nbsp;The system should boot normally.</p>
<h3>
	Confirm that your system is now using ZFS as the root file system</h3>
<p>
	Run the <kbd>mount</kbd>&nbsp;command. &nbsp;It should show you the following, confirming that ZFS is now your root file system, and everything works normally:</p>
<p style="text-align: center; ">
	<img src="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/images/13%20success%20after%20reboot.png" alt="" style="width: 856px; height: 670px; " title="13 success after reboot.png" /></p>
<h2>
	Enlarge the pool to take the unused space up</h2>
<p>
	The last and final step is short and sweet. &nbsp;It involves nuking the ext4 partition and enlarging the ZFS partition to take up the empty space. &nbsp;We'll show you how to do that right now.</p>
<h3>
	Nuke the ext4 partition</h3>
<p>
	Open <kbd>parted</kbd> on a terminal as root. &nbsp;Follow these steps:</p>
<ul>
	<li>
		Remove partition 5:&nbsp;<kbd>rm 4</kbd><br />
		This is the ext4 partition we created earlier that was mounted on <kbd>/</kbd>.</li>
	<li>
		Resize partition 4 to take up the newly freed space:
		<ul>
			<li>
				Change to sectors unit: <kbd>unit s</kbd></li>
			<li>
				Show the list of partitions: <kbd>p</kbd></li>
			<li>
				Make a note of the starting size of partition 4, and the total size of the disk.</li>
			<li>
				Remove partition 4: <kbd>rm 4</kbd><br />
				Ignore any errors.</li>
			<li>
				Create a new partition: <kbd>mkpart</kbd>.
				<ul>
					<li>
						Give it no name.</li>
					<li>
						Set its type to ext4 (doesn't matter, really).</li>
					<li>
						Set its starting point to the old partition 4's starting point.</li>
					<li>
						Set its ending point to the size of the disk in sectors minus 1.</li>
					<li>
						Ignore all errors.</li>
				</ul>
			</li>
		</ul>
	</li>
</ul>
<p>
	After all the changes, <kbd>parted</kbd> should look like this:</p>
<p style="text-align: center; ">
	<img src="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/images/14%20new%20partition%20table.png" alt="" style="width: 856px; height: 670px; " title="14 new partition table.png" /></p>
<p>
	Reboot your machine now. &nbsp;As long as the starting sector of the ZFS partition remains unchanged, ZFS will be unfazed by this change in partitions.</p>
<h3>
	Enlarge the pool</h3>
<p>
	After the reboot, run the command:</p>
<pre>
zpool online -e pool /dev/sda4</pre>
<p>
	Once you have done that, the pool will have gobbled up the new space in the bigger partition. &nbsp;Look:</p>
<p style="text-align: center; ">
	<img src="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/images/15%20resized.png" alt="" style="width: 856px; height: 670px; " title="15 resized.png" /></p>
<h2>
	That's it!</h2>
<p>
	And that is it. &nbsp;That is really the end. &nbsp;You have a system that runs ZFS and boots from it. &nbsp;Great job!</p>
<p>
	From now on, every time you update the kernel, the <kbd>deploy-zfs</kbd> script will be run right after the new kernel is deployed into place, allowing you to boot updated kernels with ZFS just fine. &nbsp;In the future, the ZFS on Linux project will release more enhancements to get your system up and running with the latest version of ZFS without compilation. &nbsp;For the moment, your system is going to do fine. &nbsp;Make sure you update with <kbd>git pull</kbd> the <kbd>spl</kbd> and <kbd>zfs</kbd> source trees from time to time!</p>
<p>
	Good luck, and happy hacking!</p>
<hr />
<p>
	<cite>Huge thanks to <a href="https://twitter.com/shiiineeeee">@shiinee</a> for helping me with test-driving the entire process and documenting each step!</cite></p>

<p><small>This article was culled from <a href="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs/index">How to install Fedora on top of ZFS</a></small>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>ZFS</dc:subject>
    
    
        <dc:subject>HOWTO</dc:subject>
    
    
        <dc:subject>Fedora</dc:subject>
    
    
        <dc:subject>Linux</dc:subject>
    
    <dc:date>2012-03-29T18:59:13Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/linux-and-free-software/ways-in-which-zfs-is-better-than-btrfs">
    <title>How ZFS continues to be better than btrfs</title>
    <link>http://rudd-o.com/linux-and-free-software/ways-in-which-zfs-is-better-than-btrfs</link>
    <description>ZFS keeps winning over btrfs on many fronts.  Here's a short list that explains exactly how.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>
	We keep hearing about the wonders of btrfs. &nbsp;btrfs is algorithmically better, btrfs has features that ZFS does not have, btrfs is going to win over ZFS at some unspecified point in the future.</p>
<p>
	The reality is that, <em>today</em>, ZFS is <em>way</em> better than btrfs in a number of areas, in very concrete ways that make using ZFS a joy and make using btrfs a pain, and make ZFS the only choice for many workloads. &nbsp;Even in single-disk laptop or desktop configurations, ZFS has a number of advantages over btrfs that will make your life much easier.</p>
<p>
	Here, I will examine in detail all the ways in which ZFS is better than btrfs. &nbsp;Fundamentally, all of these advantages are practical consequences of user-centered design decisions that -- while technically possible to implement in btrfs -- were completely absent during the conception of btrfs. &nbsp;We can only hope that, with a bit of luck, the btrfs developers will eventually fix these problems and produce a superior file system.</p>
<p>
	For the record, everything I've discussed here is available for Linux, both as the <a href="http://github.com/zfsonlinux/">ZFS on Linux</a> project and the <a href="http://zfs-fuse.net">ZFS-FUSE</a> project as well.</p>
<h2>
	ZFS organizes file systems as a flexible tree</h2>
<p>
	btrfs does not allow you to organize subvolumes. &nbsp;Subvolumes appear where you created them (whether through creation or snapshotting), and you can't move or rename them. &nbsp;That's it.</p>
<p>
	ZFS organizes file systems within a pool as a flexible tree. &nbsp;Of course -- just like with btrfs -- when you create a file system, the file system you created is always a child file system of another file system. &nbsp;But you can rename and move them around freely, and you can reconfigure how they attach to your VFS anywhere, <em>including</em>&nbsp;points outside of the mount point where the pool was attached originally. &nbsp;Also, snapshots do not attach themselves to the VFS automatically.</p>
<p>
	What do these facts allow you to do?</p>
<ul>
	<li>
		You can organize your ZFS file systems in a tree, separate from snapshots themselves. &nbsp;This&nbsp;comes more naturally&nbsp;because the VFS is already a tree. &nbsp;You can't do that with btrfs.</li>
	<li>
		You can mount a ZFS file system without mounting its children. &nbsp;What's more, mounting a ZFS file system <em>with</em> its children, whether they are file systems or snapshots, <em>doesn't force you to see the children mounted underneath</em> -- you can have the children be mounted&nbsp;somewhere else. &nbsp;With ZFS,&nbsp;<em>you</em>&nbsp;choose where a file system is attached to the VFS tree; the initial mount point of the file system does not bind your wishes in any way.</li>
	<li>
		You can apply operations&nbsp;to an entire tree of&nbsp;file systems at once. &nbsp;You&nbsp;have to apply those operations separately to each btrfs subvolume.</li>
	<li>
		You can set policy for an entire subtree of file systems at once. &nbsp;You&nbsp;have to manually set policy for each btrfs subvolume.</li>
	<li>
		You can manage usage of disk space hierarchically. &nbsp;You can't even view per-subvolume disk space usage on btrfs.</li>
	<li>
		You can view the entire tree of all active pools on your system with a single command. &nbsp;With btrfs, you have to first discover which btrfs file systems are mounted, and then use one command per tree, which may not show you the entire tree (e.g. if you have mounted a subvolume rather than the root subvolume).</li>
</ul>
<p>
	At first glance, these may sound like whining about "the way btrfs does things". &nbsp;But all we have to do to understand they really are not, is ask ourselves: hy are these ZFS affordances important?</p>
<p>
	Because they allow you to discover, manage and tune data storage and organization with very little effort. &nbsp;Sure, if you have two subvolumes vs. two ZFS file systems, it's not that important to have them organized in a tree, but if you have two hundred, then suddenly the ability to operate on whole swaths of file systems becomes vital. &nbsp;And there are very good reasons you might want to have lots of file systems:</p>
<ul>
	<li>
		Separating data according to security policies.</li>
	<li>
		Giving different quotas depending on the directory.</li>
	<li>
		Segregating data according to policy, churn, backup lifecycle, et cetera.</li>
	<li>
		Giving each user his own home directory.</li>
</ul>
<p>
	These are all things you&nbsp;<em>might</em>&nbsp;want to do, but you'd have to ponder whether it is worth doing given the added effort to do them. &nbsp;ZFS makes it&nbsp;<em>effortless</em>&nbsp;to use these features, without adding any additional work for you. &nbsp;Thus, ZFS makes it&nbsp;<em>possible</em>&nbsp;to do what you want, whereas before with btrfs you would have said "naaah, that's too much work for very little benefit". &nbsp;In this sense, ZFS offers advantages that make btrfs look as cumbersome as LVM in some scenarios.</p>
<h2>
	File system operations in ZFS can apply recursively</h2>
<p>
	Want to snapshot a ZFS file system and all its children together? &nbsp;It's one command. &nbsp;You can snapshot fifty or five thousand file systems this way. &nbsp;Not possible with btrfs -- the snapshot operation applies exclusively to the file system you snapshotted. &nbsp;If you have / and /var is a subvolume of <kbd>/</kbd>, snapshotting of <kbd>/</kbd> does not snapshot <kbd>/var</kbd> with it.</p>
<p>
	Want to relocate a subtree of twenty file systems into a new mountpoint? &nbsp;Again, one command changing one property accomplishes it. &nbsp; Not possible with btrfs.</p>
<p>
	Want to backup a specific subtree or mirror it to another machine? &nbsp;No problem. &nbsp;Again, one command.</p>
<p>
	You can't do any of these things with btrfs. &nbsp;Which means you will think twice about creating many btrfs subvolumes. &nbsp;Which means you won't benefit from the advantages of btrfs subvolumes as much.</p>
<h2>
	Policy set on ZFS file systems is inherited by their children</h2>
<p>
	One powerful feature of ZFS file systems is that any property set on it -- including the mount point -- will inherit to its children by default.</p>
<p>
	Say you want compression on all your file systems but a specific one. &nbsp; No problem -- enable it on the root and disable it on the one you don't want to compress data. &nbsp;You can even set different compression algorithms, and the policy will inherit properly. &nbsp;You can't do any of that with btrfs.</p>
<p>
	You want to relocate a specific subtree of file systems somewhere else? &nbsp;No problem -- change the mountpoint property on the parent of all those file systems, and ZFS will remount the parent in the new location, and all its children inside the new location too.</p>
<h2>
	ZFS auto-mounts file systems by default</h2>
<p>
	btrfs does not automatically mount file systems. &nbsp;For each subvolume you create, you have to register it in the <kbd>fstab</kbd> so it is mounted on boot, unless it's a direct child of a mounted subvolume -- in which case <em>you can't change its mount point!</em></p>
<p>
	This is not needed with ZFS. &nbsp;ZFS automatically mounts each file system based on the mountpoint property assigned to it. &nbsp;Since the mountpoint property is inherited too (but overridable), all child file systems are mounted at the right place as well.</p>
<p>
	This means you can forget about having to change <kbd>fstab</kbd> with ZFS, if you so choose. &nbsp;Creating a file system? &nbsp;No problem, ZFS will mount it in the right place. &nbsp;Destroying a file system or a whole subtree? &nbsp;No problem, ZFS will unmount them for you. &nbsp;Relocating a file system subtree to another graft point in your VFS? &nbsp;Easy peasy -- change one property in one file system and you're good to go. &nbsp;At no point will you be required to change <kbd>fstab</kbd> or issue many mount and umount commands.</p>
<p>
	Of course, you can override that. &nbsp;You can relocate specific portions of your ZFS tree of file systems to a different mountpoint. &nbsp;Simply adjust the mountpoint property on the file system you want to move, and ZFS will unmount it and remount it in the new destination directory. &nbsp;If the file system has any children, they will also be unmounted and remounted as subdirectories of the new location.</p>
<p>
	Heck, with the built-in dracut and systemd support in ZFS (<a href="https://github.com/Rudd-O/zfs">my tree contains it</a>), you can even boot your operating system on a ZFS file system root, and you won't have to register any file system (except perhaps for the root one) in <kbd>fstab</kbd>. &nbsp;Using my tree, systemd will automatically take care of discovering all pools and mounting all file systems on boot, in the <em>correct</em> order (even if you have other file systems in fstab) and in parallel. &nbsp;And yes, root file system on ZFS <em>works fine</em>. &nbsp;You can kiss maintenance of <kbd>fstab</kbd> goodbye. &nbsp;<a href="http://rudd-o.com/linux-and-free-software/installing-fedora-on-top-of-zfs">I have written a guide to do exactly this</a>.</p>
<p>
	And, if you don't like this, you can even tell ZFS that certain file systems are legacy and should not be mounted automatically, then use <kbd>fstab</kbd> for them.</p>
<p>
	Not having the auto-mount feature or inheritable mountpoint properties in btrfs, again, means that managing many subvolumes is cumbersome at best. &nbsp;Which means you won't take advantage of subvolumes in practice.</p>
<h2>
	ZFS tracks used space per file system</h2>
<p>
	btrfs cannot show you how much disk space is being referred to by each subvolume, as its used and free space tracking is only per pool. &nbsp;The only way to see how much space a particular subvolume is taking is to use <kbd>du</kbd>, which gets slower the bigger the subvolume gets.</p>
<p>
	ZFS can, and it will do so instantaneously, regardless of the size or amount of your filesystems. &nbsp;The command <kbd>zfs list</kbd> will show you how much disk space is being referred to by each dataset, by its snapshots, and by all child snapshots of the dataset.</p>
<p>
	This is good because you can designate different areas or categories, mounted at different points of the VFS structure, and then rapidly see which ones are taking the most space and how intensive is the "churn" (change in time), simply by visually comparing the used space with the used space of previous snapshots of your datasets. &nbsp;Want to know how much space your <kbd>/var</kbd> is taking? &nbsp;As long as you created it as a ZFS file system, no problem -- it will be instantaneous. &nbsp;Want to know how much its data has changed since the last snapshot? &nbsp;<kbd>zfs list</kbd> will tell you that.</p>
<p>
	Suppose you have:</p>
<pre>
pool/shared
pool/shared/Movies
pool/shared/Music
pool/shared/TV shows</pre>
<p>
	A single <kbd>zfs list</kbd> command will let you know, instantaneously:</p>
<ul>
	<li>
		How much disk space you have free</li>
	<li>
		How much disk space Movies, Music and TV shows take</li>
	<li>
		How much disk space the whole of <kbd>pool/shared</kbd> takes</li>
	<li>
		How much disk space is being used exclusively by<kbd> pool/shared</kbd> but not by any of its children</li>
	<li>
		How much disk space the snapshots of each one of those file systems are taking</li>
</ul>
<p>
	In a very easy to read list.</p>
<p>
	This is made possible because of the "virtual memory-like" DMU abstraction layer in ZFS.</p>
<p>
	Oh, I almost forgot: <kbd>df</kbd> actually does work properly with ZFS file systems.</p>
<h2>
	ZFS distinguishes snapshots from file systems</h2>
<p>
	btrfs pollutes the file system namespace by keeping snapshots and file systems in the same location. &nbsp;A snapshot appears as a "copy-on-write" (and writable!) directory which is a sibling of the directory containing the subvolume you just snapshotted. &nbsp;What happens if you don't like that, or you would like the snapshot to be invisible to users? &nbsp;What happens is that you're screwed -- you can't prevent that from happening. &nbsp;Cue ten <kbd>/home</kbd> directories!</p>
<p>
	In contrast, ZFS intelligently separates snapshots from file systems, which makes it possible for ZFS not to list them by default, or to list them separately from file systems. &nbsp;The name of the snapshot is distinct and separate from the name of the file system that was snapshotted. &nbsp;ZFS also doesn't auto-mount snapshots or allow modifications to it, unless you request otherwise. &nbsp;To get the snapshot to be writable (which you presumably might want in certain circumstances), you have to explicitly clone it into the file system namespace.</p>
<p>
	This lack of clutter makes ZFS more efficacious for you to manage large numbers of snapshots with large numbers of file systems, and less likely for you to touch data you snapshotted for backup purposes.</p>
<h2>
	ZFS lets you specify compression and other properties per file system subtree</h2>
<p>
	btrfs only lets you specify compression for the whole pool, or for individual files, or for specific file systems (and only as a mount option). &nbsp;ZFS lets you specify compression as an intrinsic property of a file system. &nbsp;Of course, coupled with property inheritance, this means you can compress a whole subtree, or compress the entire pool&nbsp;<em>but for</em>&nbsp;a specific subtree, with one or two commands.</p>
<p>
	Same goes for every other file system tuning option, like the block size for I/O or mount options like <kbd>noatime</kbd>.</p>
<h2>
	ZFS is more stable</h2>
<p>
	ZFS has simply had orders of magnitude more testing. &nbsp;It was written as a user-space program to begin with, and it's runnable for testing purposes as a user-space program, which means that fast automated testing was there from day one.</p>
<h2>
	ZFS has RAIDZ</h2>
<p>
	btrfs has nothing equivalent to RAID5. &nbsp;You can only do RAID10, RAID1 and RAID0. &nbsp;ZFS has them all plus a RAID5 implementation called RAIDZ that is invulnerable to the write hole problem (which will make you lose your entire array under certain circumstances).</p>
<h2>
	ZFS has send and receive</h2>
<p>
	ZFS lets you mirror an entire pool or subtrees of that pool by incrementally transferring changed data between snapshots. &nbsp;btrfs does not have that yet, though it's in the works. &nbsp;It remains to be seen if btrfs's implementation of send and receive will be as easy to use as ZFS's implementation is -- judging from current facts, it is unlikely.</p>
<h2>
	ZFS is better documented</h2>
<p>
	There is a wealth of documentation on ZFS. &nbsp;Its man pages are impeccable and explain very well what ZFS is, the core concepts, how they relate with each other, and details on the behavior of each command. &nbsp;The documentation is written in such a way that you don't have to piece facts together to get a comprehensive view of the whole subsystem, and you won't have as many doubts as to the effect of each action you take.</p>
<h2>
	ZFS uses atomic writes and barriers</h2>
<p>
	Every write in ZFS is an atomic transaction, because ZFS makes use of barriers to complete transactions. &nbsp;This prevents reordering of writes that might cause inconsistencies due to incomplete writes. &nbsp;This also makes it unnecessary to disable the disk write cache, an operation that would reduce your disk subsystem write performance substantially.</p>
<p>
	You can yank the power cord of your machine -- you will never lose a single byte of anything committed to the disk. &nbsp;ZFS is always consistent on disk, and never trusts any faulty data (that might have become damaged because of hardware issues). &nbsp;This is why people say ZFS requires no fsck to check for consistency, and faulty data never causes kernel panics.</p>
<p>
	We do not yet know with certainity if that is the case with btrfs, but -- unlike with ZFS -- we do know of many btrfs pools that have gone bad, and of btrfs inconsistencies that have caused kernel panics.</p>
<h2>
	ZFS will actually tell you what went bad in no uncertain terms, and help you fix it</h2>
<p>
	ZFS includes an administrative function in <kbd>zpool status</kbd>, that will let you check the status of your pool and its component devices.</p>
<p>
	This command will list any damage that your pool has sustained, the type of damage (read, write or checksum error), and which device suffered the damage. &nbsp;In addition to that, ZFS will tell you if you actually&nbsp;<em>lost</em>&nbsp;any data due to the damage, and which files were lost. &nbsp;If no data was lost as a consequence of the damage, because ZFS managed to repair the damage, ZFS will tell you "everything is okay, I have repaired the data, but this device is still faulty".</p>
<p>
	The same command will also tell you which devices are online, offline, faulted, and spares for your pool. &nbsp;If any device is offline or faulted, ZFS will explain why (because of absence of the device, deadlock, or too many errors detected from the device).</p>
<p>
	Finally, ZFS will give you helpful hints right there in the command line, informing you of the best course of action and linking you to an extended explanation of what happened.</p>
<p>
	btrfs has nothing of the sort. &nbsp;You are forced to stalk the kernel ring buffer if you want to find out about such things.</p>
<h2>
	ZFS increases random read performance with advanced memory and disk caches</h2>
<p>
	Unlike btrfs, which is limited to the system's cache, ZFS will take advantage of fast SSDs or other fast memory technology devices, as a second level cache (L2ARC). &nbsp;This cache is very effective because it is geared toward serving random reads at very high performance (so large streaming reads won't evict or trash other hot objects in the cache).</p>
<p>
	The L2ARC also cooperates with the very effective ARC (adaptive replacement cache) in main memory, to prevent unnecessary data duplication and to keep the hottest data in the fastest location. &nbsp;Finally, the L2ARC won't destroy your cache device with unlimited writes -- write speeds to the L2ARC are judiciously limited so the memory cells in your cache device won't sustain inordinate wear.</p>
<p>
	btrfs has nothing even remotely close to this. &nbsp;You want to cache a large working set being consumed by random reads, but you don't have a machine that will accept 256 GB RAM? &nbsp;Sorry, you're out of luck.</p>
<h2>
	ZFS increases random and synchronous write performance with log devices</h2>
<p>
	ZFS has the ability to designate a fast SSD as a SLOG device. &nbsp;This SLOG device lets clients complete synchronous writes instantaneously and return to the clients immediately, without bogging down the main disks (which would be slow under any copy-on-write file system because of random seeks). &nbsp;After a short period, the transactions committed to the SLOG device are committed to the rotating disks in streaming fashion. &nbsp;The SLOG device is, effectively, a very effective mechanism to commit a huge volume of small synchronous transactions, which would destroy IOPS performance, in a sequentialized fashion.</p>
<p>
	btrfs? &nbsp;Nothing like that there, move along.</p>
<h2>
	ZFS supports thin-provisioned virtual block devices</h2>
<p>
	Virtualizing a large number of machines? &nbsp;Testing other file systems? &nbsp;Consolidating many machines in a single storage unit?</p>
<p>
	No problem. &nbsp;ZFS (in its ZFS on Linux incarnation)&nbsp;lets you allocate block devices called ZVOLs backed by portions of your pool. &nbsp;ZVOLs are thin-provisioned, so you can create any number of them, and create any kind of file systems on top of them. &nbsp;TRIM commands from clients using those volumes release unused space on the ZVOLs back to the pool, so you can continue enjoying the advantages of thin provisioning. &nbsp;What's even better, ZFS will let you share ZVOLs using iSCSI, no extra configuration or mucking around with configuration files required.</p>
<p>
	Of course,&nbsp;<em>all</em>&nbsp;of the benefits of ZFS (including deduplication, snapshotting, and incremental send/receive) are available to be used with ZVOLs. &nbsp;A client of a ZVOL writes a sector -- whether iSCSI, or a VM, or a local file system created on top of the volume -- and that sector will get compressed, deduplicated, and backed up using your established snapshot and send / receive policy.</p>
<p>
	To even come close to this kind of thing on btrfs, you would have to create big-ass qcow or other block storage backing files, then turn them into block devices using iSCSI or other technologies like qemu. &nbsp;Which means that every disk read or write incurs an extra 2 context switches. &nbsp;And don't forget the editing of configuration files...</p>
<h2>
	ZFS helps you share</h2>
<p>
	Sharing data?</p>
<p>
	No matter the mechanism, ZFS will help you there. &nbsp;ZFS will share, upon your request, file systems over CIFS (SAMBA), NFS or iSCSI without any special kind of configuration:</p>
<pre>
zfs set sharesmb=on pool/shared/Movies
zfs set sharenfs=on pool/shared/Movies
zfs set shareiscsi=on pool/virtualmachines/fedorarootfilesystem</pre>
<p>
	btrfs can't do that. &nbsp;You must manually alter daemon configuration and reload services if you want to share something. &nbsp;ZFS does it automatically for you.</p>
<p>
	Don't be a misanthrope. &nbsp;Share!</p>
<h2>
	ZFS can save you terabytes by deduplicating your data</h2>
<p>
	Yes, it's memory-hungry, and yes, it can reduce your write performance a bit. &nbsp;But at least you <em>can</em> use it.</p>
<p>
	btrfs? &nbsp;Nope.</p>
<hr />
<p>
	Some of this information was culled from the <a href="https://github.com/gentoofan/zfs-overlay/wiki/FAQ">ZFS Gentoo overlay FAQ</a>. &nbsp;Many thanks to Richard Yao.</p>

<p><small>This article was culled from <a href="http://rudd-o.com/linux-and-free-software/ways-in-which-zfs-is-better-than-btrfs">How ZFS continues to be better than btrfs</a></small>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>ZFS</dc:subject>
    
    
        <dc:subject>btrfs</dc:subject>
    
    <dc:date>2012-03-30T19:40:36Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/linux-and-free-software/does-the-subwoofer-in-your-asus-laptop-not-work-under-fedora">
    <title>Does the subwoofer in your ASUS laptop not work under Fedora?</title>
    <link>http://rudd-o.com/linux-and-free-software/does-the-subwoofer-in-your-asus-laptop-not-work-under-fedora</link>
    <description>Here's a hacky fix that worked for me.  Works for Ubuntu too.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>
	OK, if you are trying to enable the subwoofer laptop, you will probably not succeed because the kernel (as of 3.1.0) does not have the necessary ALSA codec configuration that enables the output pin for the subwoofer.</p>
<p>
	Here are the steps to work around that:</p>
<ul>
	<li>
		Download this file:&nbsp;<a href="http://people.canonical.com/~diwic/temp/alsa-hda-diwic-asus-g73jh-dkms_1.0.23.diwic_all.deb">http://people.canonical.com/~diwic/temp/alsa-hda-diwic-asus-g73jh-dkms_1.0.23.diwic_all.deb</a></li>
	<li>
		Unpack it using ark or some other archiver. &nbsp;Inside of it there will be two files:
		<ul>
			<li>
				<samp>control.tar.gz</samp></li>
			<li>
				<samp>data.tar.gz</samp></li>
		</ul>
	</li>
	<li>
		Unpack data.tar.gz in a temporary directory. &nbsp;You'll note a directory <samp>usr</samp> was created</li>
	<li>
		Inside that directory, there is a <samp>src/alsa-hda-diwic-asus-g73jh-1.0.23.diwic</samp> -- move that <samp>alsa-hda... </samp>directory into <samp>/usr/src</samp>, and change its ownership to root using <samp>chown -R</samp></li>
	<li>
		Inside that directory which you just moved to <samp>/usr/src</samp>, there is a <samp>dkms.conf</samp> file with an <samp>OBSOLETE</samp> line -- bump the version number in that <samp>OBSOLETE</samp> line to <samp>3.99.1</samp> or something high</li>
	<li>
		Install the <samp>dkms</samp> RPM using <samp><kbd>yum install</kbd></samp> -- also install the RPM called <samp>kernel-devel</samp></li>
	<li>
		Now run the command&nbsp;<samp>dkms add alsa-hda-diwic-asus-g73jh/1.0.23.diwic</samp></li>
	<li>
		Now run the command&nbsp;<samp>dkms install alsa-hda-diwic-asus-g73jh/1.0.23.diwic</samp></li>
	<li>
		Now let's test -- to test, kill all applications using the audio devices (like PulseAudio),&nbsp;<samp>rmmod snd-hda-intel snd-hda-codec-hdmi snd-hda-codec-realtek</samp>, <samp>modprobe snd-hda-intel</samp> and start PulseAudio or other audio playback applications again. &nbsp;Play some audio -- you should hear and feel the subwoofer playing now</li>
	<li>
		Reboot to the same kernel (or redo the procedure above for the newer kernel you just rebooted into), and your audio drivers should have enabled the subwoofer</li>
</ul>

<p><small>This article was culled from <a href="http://rudd-o.com/linux-and-free-software/does-the-subwoofer-in-your-asus-laptop-not-work-under-fedora">Does the subwoofer in your ASUS laptop not work under Fedora?</a></small>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>ASUS</dc:subject>
    
    
        <dc:subject>ALSA</dc:subject>
    
    
        <dc:subject>Fedora</dc:subject>
    
    
        <dc:subject>Linux</dc:subject>
    
    <dc:date>2012-01-15T00:02:12Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/linux-and-free-software/tip-letting-your-zfs-pool-sleep">
    <title>Tip: letting your ZFS pool sleep</title>
    <link>http://rudd-o.com/linux-and-free-software/tip-letting-your-zfs-pool-sleep</link>
    <description>You may not want to keep those disks rotating all day long, if they're not in use.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>If you're using <a href="http://github.com/zfsonlinux">ZFS on Linux</a> as part of a home NAS solution, you might want to make your disks sleep when they are not in use.</p>
<p>Here are the steps:</p>
<h1>Keep cron jobs in check</h1>
<p>Check your crontab, <code>/etc/cron.hourly</code> and <code>/etc/cron.d</code> directories.  Neutralize or modify any cron jobs that take place more than one time a day, so they happen at the same time.</p>
<h1>Check for daemons that do periodic scans</h1>
<p>Make them defer their scans for later, or configure them so they scan all together at the same time.</p>
<h1>Disable unnecessary daemons</h1>
<p>Self-explanatory.</p>
<h1>Mount all your filesystems <code>noatime</code></h1>
<p>For regular filesystems, you can set mount option <code>noatime</code> in <code>fstab</code>.  For ZFS, a <code>zfs set atime=off poolname</code> command will accomplish the same.</p>
<h1>Find files modified in the last day or so</h1>
<p>Now that you have no reason to worry about access time updates causing disk writes, you can issue this command:</p>
<pre><code>find / -mmin -1
</code></pre>
<p>This <code>find</code> command will give you an idea of what files have been modified in the last day.  Check for on-disk directories or files that are modified recently (in other words, ignore  anything coming from pseudo-filesystems like <code>/dev</code>, <code>/proc</code> or <code>/sys</code>).  We'll be moving them to flash storage.</p>
<h1>Relocate directories and files to non-rotating media</h1>
<p>Get a cheap USB drive (does not need to be big) and format it as <code>ext4</code> (technically, you could set up another ZFS pool there too).  Then, set it to be mounted in <code>/var/volatile</code> on your <code>fstab</code>.</p>
<p>You can now move directories that contain frequently modified files there.  After you're done moving those directories, you can symlink them from their original location.  So, for example, you would move <code>/var/log</code> to <code>/var/volatile/log</code>, then creating a symbolic link to <code>/var/volatile/log</code> named <code>/var/log</code>.</p>
<p>At this point, it would be wise to make a cron job to nightly back the contents of this USB drive up (think <code>rsync -a</code>) to a <code>backups</code> directory somewhere in your pool.</p>
<p>OK.  If you've moved the most frequently modified files to <code>/var/volatile</code>, your disks will be idle unless you are actually using your file server.  Now it's time to take advantage of that idleness.</p>
<h1>Finally, tell your disks to power off when they're idle</h1>
<p>In your <code>/etc/rc.d/rc.local</code> file, you can add one of these commands for each one of your rotating disks (<code>sda</code>, <code>sdb</code>...):</p>
<pre><code>hdparm -S 120 /dev/sda
</code></pre>
<p>The <code>-S 120</code> parameter tells the disk to go to sleep every ten minutes.  So, if nothing has read or written to the disk for ten minutes, the disk will enter a non-rotating, very low-power mode.</p>
<p><small>This article was culled from <a href="http://rudd-o.com/linux-and-free-software/tip-letting-your-zfs-pool-sleep">Tip: letting your ZFS pool sleep</a></small>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>ZFS</dc:subject>
    
    
        <dc:subject>tips</dc:subject>
    
    
        <dc:subject>Linux</dc:subject>
    
    <dc:date>2011-12-07T21:37:02Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/linux-and-free-software/does-your-adobe-flash-player-icon-in-the-kde-system-settings-malfunction">
    <title>Does your Adobe Flash Player icon in the KDE System Settings malfunction?</title>
    <link>http://rudd-o.com/linux-and-free-software/does-your-adobe-flash-player-icon-in-the-kde-system-settings-malfunction</link>
    <description>The library is installed in the wrong location on Fedora 15 64-bit machines.  Here is how to fix it.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<pre>~@karen.dragonfear α:
sudo ln -s /usr/lib/kde4/kcm_adobe_flash_player.so /usr/lib64/kde4/kcm_adobe_flash_player.so</pre>

<p>That is: become root, then link the library into <tt>/usr/lib64/kde4</tt></p>

Update: this fix doesn't work if you have Flash Player 10 32-bit installed on your system.  Install the Flash 64-bit for Linux version 11 RC1, and then, after deploying all the files that come in the tarball in the right places, perform the above fix.
<p><small>This article was culled from <a href="http://rudd-o.com/linux-and-free-software/does-your-adobe-flash-player-icon-in-the-kde-system-settings-malfunction">Does your Adobe Flash Player icon in the KDE System Settings malfunction?</a></small>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>tips</dc:subject>
    
    
        <dc:subject>Flash</dc:subject>
    
    
        <dc:subject>Fedora</dc:subject>
    
    
        <dc:subject>Linux</dc:subject>
    
    <dc:date>2011-09-08T03:21:20Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/linux-and-free-software/does-your-wireless-wifi-network-connection-glitch-stop-interrupt-every-two-minutes">
    <title>Does your wireless (WiFi) network connection glitch / stop / interrupt every two minutes?</title>
    <link>http://rudd-o.com/linux-and-free-software/does-your-wireless-wifi-network-connection-glitch-stop-interrupt-every-two-minutes</link>
    <description>If you have a wireless adapter on Linux like the ath9k (Atheros) or others, and you are on Fedora, here is a solution.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>The problem is NetworkManager.  It scans the network every two (2) minutes.  The solution is a patch to prevent network scanning when you are connected.  The asshat of a developer has refused to incorporate <a href="http://pastebin.com/dTSEqNxJ">this patch</a> in the sources despite many requests for it, so I have taken it upon myself to adapt the patch and produce packages for them.  The NetworkManager packages for Fedora 15 are available <a href="http://rudd-o.com/new-projects/the-missing-rpms/3rdparty">here</a> and the source package is there too.</p>
<p><small>This article was culled from <a href="http://rudd-o.com/linux-and-free-software/does-your-wireless-wifi-network-connection-glitch-stop-interrupt-every-two-minutes">Does your wireless (WiFi) network connection glitch / stop / interrupt every two minutes?</a></small>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>NetworkManager</dc:subject>
    
    
        <dc:subject>tips</dc:subject>
    
    
        <dc:subject>Fedora</dc:subject>
    
    <dc:date>2011-07-31T08:10:21Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/linux-and-free-software/a-better-way-to-block-brute-force-attacks-on-your-ssh-server">
    <title>A better way to block brute force attacks on your SSH server</title>
    <link>http://rudd-o.com/linux-and-free-software/a-better-way-to-block-brute-force-attacks-on-your-ssh-server</link>
    <description>You have probably seen very simple IPTables rules to do this.  This is a little bit better.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<pre>-A INPUT -i eth0.103 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource
-A INPUT -i eth0.103 -p tcp -m tcp --dport 22 -m recent --rcheck --seconds 30 --hitcount 4 --rttl --name SSH --rsource -j REJECT --reject-with tcp-reset
-A INPUT -i eth0.103 -p tcp -m tcp --dport 22 -m recent --rcheck --seconds 30 --hitcount 3 --rttl --name SSH --rsource -j LOG --log-prefix "SSH brute force "
-A INPUT -i eth0.103 -p tcp -m tcp --dport 22 -m recent --update --seconds 30 --hitcount 3 --rttl --name SSH --rsource -j REJECT --reject-with tcp-reset
-A INPUT -i eth0.103 -p tcp -m tcp --dport 22 -j ACCEPT</pre>
<p>That's it.</p>
<h2>Now what is it? &nbsp;What does it do? &nbsp;How does it work?</h2>
<p>OK. &nbsp;Let's explain in English. &nbsp;You put these five rules in your iptables table <em>filter</em> (the default table).</p>
<ol><li>The first rule tells the system:<br /><em>TCP packets are going to come in, that will attempt to establish an SSH connection. &nbsp;Mark them as SSH. &nbsp;Pay attention to the source of the packet.</em></li><li>The second rule says:<br /><em>If a packet attempting to establish an SSH connection comes, and it's the fourth packet to come from the same source in thirty seconds, just reject it with prejudice and stop thinking about it.</em></li><li>The third and fourth rules mean:<br /><em>If an SSH connection packet comes in, and it's the third attempt from the same guy in thirty seconds, log it to the system log once, then immediately reject it and forget about it.</em></li><li>The fifth rule says:<br /><em>Any SSH packet not stopped so far, just accept it.</em></li></ol>
<p>And that's all. &nbsp;You may want to change your network interface (<strong>-i eth0.103</strong>) to the public-facing network interface in your computer / server. &nbsp;You may also want to adjust the number of seconds and hitcount to your tastes. &nbsp;Remember that the second rule has a hitcount that is one higher than the ones following it -- this is a precaution to stop the packet from continuing down the chain of rules, so brute forcing won't spam your logs. &nbsp;Spamming your logs may not be a problem to you, but it is a problem in my environment because the server literally speaks attacks out loud.</p>

<p><small>This article was culled from <a href="http://rudd-o.com/linux-and-free-software/a-better-way-to-block-brute-force-attacks-on-your-ssh-server">A better way to block brute force attacks on your SSH server</a></small>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    <dc:date>2010-08-11T10:18:39Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/linux-and-free-software/nokia-n900">
    <title>Nokia N900: check it out on this video.</title>
    <link>http://rudd-o.com/linux-and-free-software/nokia-n900</link>
    <description>It is not only superior to the iPhone 3GS in what you can do -- the user interface is really streamlined.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>I have an iPhone. I am not afraid to say this: the N900 smashes it.&nbsp; Here's just a quick example -- in the form of an interaction demo video -- of what the N900 can do:</p> <p style="text-align: center;"><object width="560" height="340">   <embed width="560" height="340" src="http://www.youtube.com/v/RP5R-5NX1BE&hl=es&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true"></embed></object></p> <p>For a <a href="http://www.reddit.com/r/technology/comments/9eyag/nokia_n900_vs_iphone_3gs_specs_side_by_side/">blow-by-blow feature comparison against the 3GS, go here</a>.</p><p><strong>Edit: and the promo video is to die for!</strong></p> <p style="text-align: center;"><object width="560" height="340"><embed width="560" height="340" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash" src="http://www.youtube.com/v/GhTtsZATwBQ&hl=es&fs=1&"></embed></object></p>
<p><small>This article was culled from <a href="http://rudd-o.com/linux-and-free-software/nokia-n900">Nokia N900: check it out on this video.</a></small>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>Maemo</dc:subject>
    
    
        <dc:subject>Nokia</dc:subject>
    
    
        <dc:subject>iPhone</dc:subject>
    
    
        <dc:subject>Linux</dc:subject>
    
    <dc:date>2009-08-28T09:23:23Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/linux-and-free-software/help-i-uninstalled-a-plone-product-reinstalled-it-and-now-some-of-my-content-doesnt-show-up-in-the-navigation">
    <title>Help!  I uninstalled a Plone product, reinstalled it and now some of my content doesn't show up in the navigation!</title>
    <link>http://rudd-o.com/linux-and-free-software/help-i-uninstalled-a-plone-product-reinstalled-it-and-now-some-of-my-content-doesnt-show-up-in-the-navigation</link>
    <description>Relax.  Your content hasn't disappeared -- is there, hidden by a perhaps overzealous malfunction protection mechanism.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>User Moo__ in the #plone channel at Freenode alerted me to the solution.&nbsp; What happens is this:</p> <ol>     <li>You uninstall a product.</li>     <li>Plone detects this, and to prevent malfunctions, any of the content types in the product get registered in a secret exclusion list.&nbsp; Whenever the navigation is shown, this list is consulted so as to not make Plone fail because the type of the uninstalled objects can't be found.</li>     <li>You install the product again.</li>     <li>Items remain in this secret list, and do not get removed no matter how hard you tinker with the Navigation control panel.</li> </ol> <p>The solution is to remove the excluded content types in the <code>portal_properties</code> folder of your Zope Management Interface:</p> <ol>     <li>Open your ZMI.</li>     <li>Browse to <code>portal_properties</code> within your Plone site.</li>     <li>Go to the Properties tab and look for the list <code>parentMetaTypesNotToQuery</code>.</li>     <li>Remove the content types that got added there.</li> </ol> <p>That's it!&nbsp; Now, why isn't this documented somewhere?</p> <p>&nbsp;</p>
<p><small>This article was culled from <a href="http://rudd-o.com/linux-and-free-software/help-i-uninstalled-a-plone-product-reinstalled-it-and-now-some-of-my-content-doesnt-show-up-in-the-navigation">Help!  I uninstalled a Plone product, reinstalled it and now some of my content doesn't show up in the navigation!</a></small>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>tips</dc:subject>
    
    
        <dc:subject>Plone</dc:subject>
    
    <dc:date>2011-12-14T07:28:22Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/linux-and-free-software/arcana-of-etc-ltsp-ldm-global-dmrc">
    <title>Arcana of /etc/ltsp/ldm-global-dmrc</title>
    <link>http://rudd-o.com/linux-and-free-software/arcana-of-etc-ltsp-ldm-global-dmrc</link>
    <description>A tip of the trade from a fellow LTSP administrator: how to set up the default language and desktop session on LTSP terminals booting off a Fedora 11 terminal server.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p>In the Fedora 11 flavor of LTSP, you can set a default language and desktop environment for the users' session by editing the file <code>/etc/ltsp/ldm-global-dmrc</code>.&nbsp; This is "documented" behavior; Warren Togami kindly wrote a one-line blurb about it in the RPM change log.&nbsp; A Busey clap for their dedication to <strong>not</strong> documenting their "configuration" options publicly:</p>
<pre>* Thu Dec 11 2008 Warren Togami &lt;wtogami@redhat.com&gt; - 2.0.22-1
  - Show good names in Session menu
  - Use and write to user .<strong>dmrc</strong>
<em>    It is now possible to set a default session that is not GNOME.
    Set LDM_GLOBAL_DMRC=/etc/ltsp/<strong>ldm</strong>-<strong>global</strong>-<strong>dmrc</strong> in lts.conf
      and specify your choice in /etc/ltsp/<strong>ldm</strong>-<strong>global</strong>-<strong>dmrc</strong> on the server.</em>
</pre>
<p> I wanted to understand how a file in the server filesystem, not exported via NFS to the client, gets to affect the configuration of the terminal itself.</p>
<p>My first look was inside the <code>ldminfod</code> RPM package -- a companion package to the LDM greeter that goes in the terminal and serves some information the terminal needs to display to the user on the greeter.&nbsp; Since that file is distributed inside the <code>ldminfod</code> RPM package, that was the logical step, right?&nbsp; But said file does not appear to be read by the <code>ldminfod</code> on-demand <code>xinetd</code> daemon, so I was left stumped and wondering where and how it's read.</p>
<p>In case you wanted to know, it's read by the terminal client itself upon LDM login, when it's time to set up the desktop session, in the script <code>/opt/ltsp/i386/usr/share/ldm/rc.d/X50-dmrc-processing</code>.</p>
<p>The way that the script works is rather convoluted (I would have expected the LDM info daemon to give out the information in the file to the LDM greeter).&nbsp; The script specified in <code>/var/lib/tftpboot/ltsp/i386/lts.conf</code> in the variable <code>LDM_GLOBAL_DMRC</code> (which defaults to the file name in the first paragraph) is copied via scp to a temporary location into the terminal memory, along with the <code>.dmrc</code> of the user.&nbsp; Those files are then merged, and finally a decision on desktop environment and language is made upon the merged content of those files.</p>
<p class="discreet">How did I discover this?&nbsp; Thanks to the audit subsystem.&nbsp; I set a watch on the file of interest, and watched it be fetched by the terminal when I logged on to it.</p>
<p>I admit: this scp shenanigan is rather ingenious.&nbsp; However, unless having a user <code>.dmrc</code> is so important, I think it's overengineering; in my humble opinion, the LDM info daemon should export that information instead; after all, it's just security-insensitive defaults.</p>
<p>In fact, this whole <code>LDM_GLOBAL_DMRC</code> problem could be easily bypassed if LTSP simply obeyed the global terminal server configuration.&nbsp; I don't see why I should need to specify a default language in a separate file, when that default language has already been specified in the system configuration via the <code>LANG</code> environment variable.&nbsp; I also do not see why I should need to specify a default desktop environment, when that information has already been specified via distribution methods -- just run whatever gets me the session that I use when I logon locally and that's it!</p>
<p>For example, in Fedora, you just launch the <code>Xsession</code> script with the name of the desktop session that you want to run.&nbsp; Which is, all in all, what the terminal ends up remoting via SSH on the server, so the session piggybacks to the client display.&nbsp; The whole thing could be done by serving a "default" session line in the LDM info daemon output before all the lines of the other sessions, and serving the default language as the first line as well.&nbsp; Then LDM can use the first choice of language as the default language, and the default session gets to be the default system session.&nbsp; It would all work integrated with the Fedora X Window System client startup subsystem.</p>

<p><small>This article was culled from <a href="http://rudd-o.com/linux-and-free-software/arcana-of-etc-ltsp-ldm-global-dmrc">Arcana of /etc/ltsp/ldm-global-dmrc</a></small>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>Fedora</dc:subject>
    
    
        <dc:subject>the X Window System</dc:subject>
    
    
        <dc:subject>Linux</dc:subject>
    
    
        <dc:subject>tips</dc:subject>
    
    
        <dc:subject>LTSP</dc:subject>
    
    <dc:date>2009-07-23T09:23:51Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/linux-and-free-software/how-to-make-pulseaudio-run-once-at-boot-for-all-your-users">
    <title>How to make PulseAudio run once at boot for all your users</title>
    <link>http://rudd-o.com/linux-and-free-software/how-to-make-pulseaudio-run-once-at-boot-for-all-your-users</link>
    <description>Running PulseAudio as a system-wide service has advantages -- you can play audio without having logged on, multiple users can play audio on the same audio gear, and music daemons like MPD won't fight for the audio device with PulseAudio.  Here's how.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p class="discreet">These instructions should work in Fedora 11, and probably Ubuntu as well.&nbsp; You will probably lose the ability to pair up Bluetooth audo gear, like lose&nbsp; autotunneling capabilities to networked audio devices through Zeroconf, but hey, you get what you pay for ;-)&nbsp; I also hear there are security considerations stemming from the fact that users allowed access to PulseAudio may break something in it, but for home use it is probably going to be just fine.</p>
<h2>Starting up PulseAudio on boot</h2>
<p>Put this text in the file <code>/etc/event.d/pulseaudio</code>:</p>
<pre>start on runlevel [2345]
stop on runlevel [016]

exec pulseaudio --system --realtime --log-target=syslog

respawn

description "PulseAudio system server"

pre-start script
	for a in `seq 60` ; do
		sleep 1
		killall -0 hald &amp;&amp; killall -0 dbus-daemon &amp;&amp; break
	done
end script

<em>post-start script
	( sleep 1 ; paplay /usr/share/sounds/login.wav ) &amp;
end script</em></pre>
<p>The text in italics is <em>optional</em> -- either don't include it, or replace it with something that will play a sound file confirming that PulseAudio has started.</p>
<p>As you can see, this is a straightforward script that waits until hald and D-Bus are active before starting PulseAudio (both are needed to get the hardware list), and then starts it up.</p>
<h2>Setting up default client settings</h2>
<p>Add these lines in the file <code>/etc/pulse/client.conf</code>:</p>
<pre>default-server = /var/run/pulse/native
autospawn = no</pre>
<h2>Allowing users access to the audio service</h2>
<p>Add every user that is allowed to use the audio device to the group <code>pulse-access</code>.</p>
<h2>Allowing PulseAudio access to Bluetooth</h2>
<p>In order to pair up with Bluetooth devices, you need to add the following text to the file <code>/etc/dbus-1/system.d/pulse.conf</code>:</p>
<pre>&lt;!DOCTYPE busconfig PUBLIC
 "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"&gt;
&lt;busconfig&gt;
	&lt;policy user="root"&gt;
		&lt;allow own="org.pulseaudio.Server"/&gt;
                &lt;allow send_destination="org.bluez"/&gt;
                &lt;allow send_interface="org.bluez.Manager"/&gt;
	&lt;/policy&gt;
	&lt;policy user="pulse"&gt;
		&lt;allow own="org.pulseaudio.Server"/&gt;
                &lt;allow send_destination="org.bluez"/&gt;
                &lt;allow send_interface="org.bluez.Manager"/&gt;
	&lt;/policy&gt;
	&lt;policy context="default"&gt;
                &lt;deny own="org.pulseaudio.Server"/&gt;
                &lt;deny send_destination="org.bluez"/&gt;
                &lt;deny send_interface="org.bluez.Manager"/&gt;
        &lt;/policy&gt;
&lt;/busconfig&gt;
</pre>
<h2>Preventing PulseAudio from starting on graphical logon</h2>
<p>A pesky program tries to start PulseAudio every time you log on, which may cause conflicts.&nbsp; Prevent this by running the following command as root:</p>
<pre>chmod -x /usr/bin/start-pulseaudio-x11</pre>
<p>You may need to run this command whenever you upgrade your system and,
in the course of the upgrade, PulseAudio itself is upgraded.</p>
<p>I've submitted a patch for PulseAudio that will render this step unnecessary soon, if it's accepted.  It's logged as <a href="http://www.pulseaudio.org/ticket/606">ticket 606 in the PulseAudio bug tracker</a>.</p>
<h2>That's it!</h2>
<p>Close your session and reboot your machine.&nbsp; PulseAudio should start on boot now, and all applications will be able to play sound, whether they are console or graphical applications, and without the need to actually log on beforehand.&nbsp; In addition, if PulseAudio dies, it will be automatically restarted and you will hear a confirmatory sound (provided you actually put the italicized text with a command to play audio).</p>

<p><small>This article was culled from <a href="http://rudd-o.com/linux-and-free-software/how-to-make-pulseaudio-run-once-at-boot-for-all-your-users">How to make PulseAudio run once at boot for all your users</a></small>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>Fedora</dc:subject>
    
    
        <dc:subject>Linux</dc:subject>
    
    
        <dc:subject>PulseAudio</dc:subject>
    
    
        <dc:subject>music</dc:subject>
    
    
        <dc:subject>Ubuntu</dc:subject>
    
    
        <dc:subject>audio</dc:subject>
    
    <dc:date>2009-07-15T00:52:28Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/linux-and-free-software/how-to-get-virtual-surround-sound-on-your-headphones-plugged-to-your-linux-rig">
    <title>How to get virtual surround sound on your headphones plugged to your Linux rig</title>
    <link>http://rudd-o.com/linux-and-free-software/how-to-get-virtual-surround-sound-on-your-headphones-plugged-to-your-linux-rig</link>
    <description>Want to experience movies better but don't have the home theater?  Now you can.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p>The latest release of ALSA (Advanced Linux Sound Architecture) ships a sound virtualization plugin that uses (to the extent that my hearing can tell) HRTF to virtualize multichannel sound.&nbsp; This plugin is called <code>vdownmix</code> and it has the ability to mix down both quadraphonic and 5.1 surround sound so they sound more "spatial" with headphones.</p>
<p>Here, we'll learn how to set that up with Fedora 11 -- with the advantage that this solution works with PulseAudio just fine.&nbsp; Users of other distributions may adapt these instructions to their packaging and configuration.&nbsp; We assume, of course, that you don't have a home theater installed in your system -- rather, you only have a set of headphones plugged into your stereo or sound card.</p>
<h2>Step 1: install the requisite software</h2>
<p>Launch your software installer tool and look for a package named <code>alsa-plugins-vdownmix</code>.&nbsp; Install it.&nbsp; For those of you who like to use the command line:</p>
<pre>yum install -y alsa-plugins-vdownmix
</pre>
<h2>Step 2: set the software up</h2>
<p>By default, this plugin comes with a neutered configuration that you have to explicitly request in your application.&nbsp; This is silly.&nbsp; The way we're going to set it up is rather simple: we're going to tell ALSA to disregard the standard multichannel outputs in the cards with this short ALSA configuration script:</p>
<pre>pcm.!surround51 {
        @args [ CARD DEV ]
        @args.CARD {
                type string
                default {
                        @func getenv
                        vars [
                                ALSA_SURROUND51_CARD
                                ALSA_PCM_CARD
                                ALSA_CARD
                        ]
                        default {
                                @func refer
                                name defaults.pcm.surround51.card
                        }
                }
        }
        @args.DEV {
                type integer
                default {
                        @func igetenv
                        vars [
                                ALSA_SURROUND51_DEVICE
                        ]
                        default {
                                @func refer
                                name defaults.pcm.surround51.device
                        }
                }
        }
        type vdownmix
        slave.pcm {
                @func refer
                name {
                        @func concat
                        strings [
                                "cards."
                                {
                                        @func card_driver
                                        card $CARD
                                }
                                ".pcm.surround51." $DEV ":CARD=" $CARD
                        ]
                }
        }
        hint {
                description "Downmix to stereo 5.1 Surround output to Front, Center, Rear and Subwoofer speakers"
                device $DEV
        }
}

pcm.!surround40 {
        @args [ CARD DEV ]
        @args.CARD {
                type string
                default {
                        @func getenv
                        vars [
                                ALSA_SURROUND51_CARD
                                ALSA_PCM_CARD
                                ALSA_CARD
                        ]
                        default {
                                @func refer
                                name defaults.pcm.surround40.card
                        }
                }
        }
        @args.DEV {
                type integer
                default {
                        @func igetenv
                        vars [
                                ALSA_SURROUND51_DEVICE
                        ]
                        default {
                                @func refer
                                name defaults.pcm.surround40.device
                        }
                }
        }
        type vdownmix
        slave.pcm {
                @func refer
                name {
                        @func concat
                        strings [
                                "cards."
                                {
                                        @func card_driver
                                        card $CARD
                                }
                                ".pcm.surround51." $DEV ":CARD=" $CARD
                        ]
                }
        }
        hint {
                description "Downmix to stereo 4.0 Surround output to Front, Center, Rear and Subwoofer speakers"
                device $DEV
        }
}</pre>
<p>&nbsp;Save the contents of this script in the file <code>/etc/alsa/pcm/vdownmix.conf</code> (do this as root, obviously).  Now we're going to tell ALSA to pick this configuration file up, by editing the file <code>/etc/asound.conf</code>.  The original file should look like this:</p>
<pre>#
# Place your global alsa-lib configuration here...
#

@hooks [
        {
                func load
                files [
                        "/etc/alsa/pulse-default.conf"
                ]
                errors false
        }
]</pre>
<p>Add a new line as per this example:</p>
<pre>#
# Place your global alsa-lib configuration here...
#

@hooks [
        {
                func load
                files [
                        "/etc/alsa/pcm/vdownmix.conf"
                        <strong>"/etc/alsa/pulse-default.conf"</strong>
                ]
                errors false
        }
]</pre>
<p>You're finished with the setup.  You can verify that the configuration has been picked up properly by running the command <code>aplay -L</code> on a console -- you should see the description of the surround51 definition begin with <q>Downmix...</q>.</p>
<p>And that's it.&nbsp; Your system is now properly set up to virtualize surround sound to your headphones.&nbsp;</p>
<p>Now, you should know this configuration is not applied by default: PulseAudio still needs to be informed when you intend to play multichannel audio, otherwise PulseAudio performs non-spatialized mixdown of your multichannel audio.&nbsp; Here's how you prevent that from happening.</p>
<h2>How to activate and deactivate virtualization on the fly</h2>
<p>Whenever you want to listen to multichannel audio on your headphones, you will want to tell PulseAudio to output multichannel audio on your gear.&nbsp; You do this by:</p>
<ol><li>Opening the <em>PulseAudio Volume Control</em></li><li>Going to the <em>Configuration</em> tab (the last tab in the application)</li><li>Selecting <em>Output Analog 5.1</em> on the drop-down of your sound card</li></ol>
<p>This lets PulseAudio know that you have a "surround-sound capable" sound card, which makes PulseAudio relay each sound channel straight into the ALSA downmixer, which in turn mixes each channel down to the correct virtual position.</p>
<p>Finally: when you go back to your speakers or to listening stereo music, select <em>Output Analog Stereo</em> again, and the spatialization will be disabled.</p>
<p>And that's it!</p>

<p><small>This article was culled from <a href="http://rudd-o.com/linux-and-free-software/how-to-get-virtual-surround-sound-on-your-headphones-plugged-to-your-linux-rig">How to get virtual surround sound on your headphones plugged to your Linux rig</a></small>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>Fedora</dc:subject>
    
    
        <dc:subject>movies</dc:subject>
    
    
        <dc:subject>music</dc:subject>
    
    
        <dc:subject>Linux</dc:subject>
    
    
        <dc:subject>audio</dc:subject>
    
    
        <dc:subject>ALSA</dc:subject>
    
    <dc:date>2009-07-13T10:16:13Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/linux-and-free-software/kde-4.2-nepomuk-and-linux-distributions">
    <title>KDE 4.2, NEPOMUK and Linux distributions</title>
    <link>http://rudd-o.com/linux-and-free-software/kde-4.2-nepomuk-and-linux-distributions</link>
    <description>NEPOMUK and Strigi do not work in the vast majority of Linux distributions.  We'll see why, and how we can fix that.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<h2>
	What NEPOMUK is about</h2>
<p>
	The stable KDE 4.2 release is a phenomenal work of art that lets every application share and modify metadata using an unified ontology, all mediated through the great D-Bus protocol.&nbsp; This is known as NEPOMUK and the way it works is as follows:</p>
<ul>
	<li>
		There is a daemon that starts up when your desktop environment starts.&nbsp; This daemon (the NEPOMUK daemon) starts a bunch of little services -- storage backends, query server, indexer (known as Strigi).</li>
	<li>
		This daemon latches onto the D-Bus session associated with your desktop environment.&nbsp; It sits there listening to queries -- they can be questions in SPARQL, or method calls to get/set specific pieces of metadata.</li>
	<li>
		The daemon mediates the job of searching the storage backends and manipulating the data.</li>
	<li>
		Applications query it through D-Bus using a standardized interface that works for full-text-search queries and other sorts of metadata-related queries.</li>
</ul>
<p>
	This provides a central location which applications can access the metadata, either directly through D-Bus or abstracted through the available application libraries.&nbsp; It's a rather powerful idea, since applications no longer need to link directly to metadata libraries or use ad-hoc methods like stat calls to piece together metadata for files in your computer.</p>
<p>
	Couple this with a KIO slave called <code>nepomuksearch:</code>, and you have live searches or data feeds for your applications.&nbsp; That's right, you can put a list of files tagged <em>TO-DO</em> or a list of files with the word <em>rabbit</em> right on your desktop.</p>
<p>
	Or at least you ought to be able to.</p>
<h2>
	The problem</h2>
<p>
	The problem is that NEPOMUK simply does not work in KDE 4.2 as it was supposed to work.</p>
<p>
	The database technology used in NEPOMUK is called Soprano.&nbsp; It was chosen because it has several pluggable backends (sort of on-disk formats).&nbsp; The problem with Soprano is that its default backend (the Redland one) does not support certain query methods on its database, methods that NEPOMUK requires.&nbsp; So the NEPOMUK developers decided to use the Sesame2 backend, which is feature-complete and fast enough for their needs.</p>
<p>
	One problem, though: Sesame2 is a Java library that almost nobody in the distribution world has bothered to package for almost no distributions.&nbsp; And with good reason too -- most distributions require a compilation from source, while the Sesame2 backend is being distributed as a JAR file instead.</p>
<p>
	The result is clear:&nbsp; <code>nepomuksearch:</code> (the whole point behind NEPOMUK) does not work in any distribution except perhaps for Mandriva.</p>
<p>
	And, in that manner, the NEPOMUK developers royally tied themselves up into a Gordian Knot.</p>
<h2>
	The fix</h2>
<p>
	...is already deployed in the latest Fedora 15 and 16, which includes KDE 4.7 and a staggering number of bug fixes to NEPOMUK.</p>

<p><small>This article was culled from <a href="http://rudd-o.com/linux-and-free-software/kde-4.2-nepomuk-and-linux-distributions">KDE 4.2, NEPOMUK and Linux distributions</a></small>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>Strigi</dc:subject>
    
    
        <dc:subject>NEPOMUK</dc:subject>
    
    
        <dc:subject>Fedora</dc:subject>
    
    
        <dc:subject>KDE</dc:subject>
    
    
        <dc:subject>hacks</dc:subject>
    
    
        <dc:subject>Linux</dc:subject>
    
    
        <dc:subject>tips</dc:subject>
    
    <dc:date>2011-12-19T10:37:32Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/linux-and-free-software/conficker-eye-chart-reloaded">
    <title>Conficker eye chart -- reloaded.  Also known (in the great tradition) as: Spread this chart</title>
    <link>http://rudd-o.com/linux-and-free-software/conficker-eye-chart-reloaded</link>
    <description>Are you infected with Conficker?  My machines can handle the DDoS that Conficker inflicted on the original eye chart's site.  See if you're infected here.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p class="callout">On account of the original eye chart at Joe Stewart's site being down, I've taken the liberty of creating this eye chart in replacement.</p>
<table align="center">
<tbody>
<tr>
<td align="center"><a href="http://www.f-secure.com/"><img src="http://www.f-secure.com/export/system/fsgalleries/thumbnails/thumbnails_112xN/FSC_logo_pos_112x128.jpg" alt="" height="128" width="112" /></a></td>
<td align="center"><a href="http://www.secureworks.com/"><img src="http://www.secureworks.com/images/headerlogo.gif" alt="" height="37" width="233" /></a></td>
<td align="center"><a href="http://www.trendmicro.com/"><img src="http://us.trendmicro.com/images/common/LogoTrendMicro_3d.gif" alt="" height="45" width="120" /></a></td>
</tr>
<tr>
<td align="center"><a href="http://www.openbsd.org/"><img src="http://eyechart.sie.isc.org/openbsd.jpg" alt="" height="129" width="150" /></a></td>
<td align="center"><a href="http://www.linux.org/"><img src="http://149.20.54.68/linux.png" alt="" height="129" width="109" /></a></td>
<td align="center"><a href="http://www.freebsd.org/"><img src="http://eyechart.sie.isc.org/freebsd.png" alt="" height="129" width="118" /></a></td>
</tr>
</tbody>
</table>
<h2>How to interpret</h2>
<table>
<tbody>
<tr align="center">
<td>If you see this above:</td>
<td>It probably means this:</td>
</tr>
<tr>
<td align="center">All six images displayed</td>
<th align="left">= Normal/Not Infected by Conficker (or using proxy)</th>
</tr>
<tr>
<td align="center">Security/AV logos not displayed</td>
<th align="left">= Possibly Infected by Conficker (C variant or greater)</th>
</tr>
<tr>
<td align="center">Some security/AV logos not displayed</td>
<th align="left">= Possibly Infected by Conficker B variant</th>
</tr>
<tr>
<td align="center">Lower images don't appear<br />(Tux, blowfish, devil)<br /></td>
<th align="left">=<br />
<ol><li>&nbsp;Image loading turned off in browser?</li>
<li>Verification images most likely being DDoSed (attacked by thousands of machines around the globe)</li></ol>
It's okay, the important part is the top images -- <em>do you see them</em>?</th>
</tr>
<tr>
<td align="center">Any other combination</td>
<th align="left">= Poor Internet connection?</th>
</tr>
</tbody>
</table>
<h2>Explanation</h2>
<p>Conficker (aka Downadup, Kido) is known to block access to over 100 anti-virus and security websites.</p>
<p>If you are blocked from loading the remote images in the first row of
the top table above (AV/security sites) but not blocked from loading
the remote images in the second row (websites of alternative operating
systems) then your Windows PC may be infected by Conficker (or some
other malicious software).</p>
<p>
If you can see all six images in both rows of the top table -- or at
least the top ones, as the bottom ones seem to be DDoSed at the time -- you are either not infected by Conficker, or you
may be using a proxy server, in which case you will not be able to use
this test to make an accurate determination, since Conficker will be
unable to block you from viewing the AV/security sites.</p>
<h2>Detecting Conficker on your network through a port scanner</h2>
<p><a class="external-link" href="http://www.net-security.org/secworld.php?id=7252">Net-Security suggests that</a>, to scan for Conficker, you can a command such as:</p>
<pre>&nbsp;nmap -PN -T4 -p139,445 -n -v --script=smb-check-vulns --script-args safe=1 [targetnetworks]</pre>
<h2>Credits<br /></h2>
<p class="discreet">F-Secure and the F-Secure Logo are trademarks of F-Secure Corporation.<br />SecureWorks and the SecureWorks Logo are registered trademarks of SecureWorks Inc.<br />Trend Micro and the T-Ball logo are trademarks or registered trademarks of Trend Micro Inc.
<br />The Conficker Eye Chart is a concept by <a href="http://www.joestewart.org/">Joe Stewart</a>.

This derivative work was set up to help Joe Stewart's efforts.<br /><a href="http://www.gnu.org/copyleft/">Copyleft</a> 2009.</p>
<p class="callout">If this machine survives the current hundreds-of-hits per second traffic storm,  consider <a class="external-link" href="http://www.gplhost.com/hosting-vps.html">GPLHost</a> for your next Web service venture (I'm using a 768 MB RAM VPS).&nbsp; And, for your next consulting need, <a href="http://rudd-o.com/../contact-info" class="external-link">consider me</a>.&nbsp; <a href="http://rudd-o.com/monopolies-of-the-mind/spread-this-number" class="internal-link" title="Spread this number">Back in the day</a>, I used <a class="external-link" href="http://wordpress.org/">WordPress</a>; today, I use <a class="external-link" href="http://www.plone.org/">Plone</a>.&nbsp; So far, I seem to know what I'm doing to serve big traffic, and I hope you'll let me do that for you too.</p>

<p><small>This article was culled from <a href="http://rudd-o.com/linux-and-free-software/conficker-eye-chart-reloaded">Conficker eye chart -- reloaded.  Also known (in the great tradition) as: Spread this chart</a></small>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>viruses</dc:subject>
    
    <dc:date>2009-04-10T00:44:10Z</dc:date>
    <dc:type>Article</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/linux-and-free-software/amarok-2-a-story-of-disappointment">
    <title>Amarok 2: a story of disappointment -- with a solution for Fedora 11</title>
    <link>http://rudd-o.com/linux-and-free-software/amarok-2-a-story-of-disappointment</link>
    <description>Amarok 2 is regrettably worse than unusable (it actually causes data loss) for people coming from Amarok 1.  Worst part is, Fedora ships it as "stable" software since its tenth release.  Fortunately, I have built Amarok 1.4.10 for Fedora 11 -- and you can install it now.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p>I've finished upgrading my workstation to Fedora 11 beta.&nbsp; Since Fedora 10, Amarok 2 has been shipping in lieu of Amarok 1, but since the import tool in Amarok 2 was unusable, I had remained with Amarok 1 instead.&nbsp; This time around, I decided to take Amarok 2 (specifically, 2.0.2) for a spin. So, I diligently backed up my KDE config and application data for Amarok 1, and nuked it from the original places.</p>
<p>Before anybody accuses me of using a beta for this rant, bear in mind that the rest of the KDE 4 applications in this system are functioning correctly.&nbsp; Of course, if you want to skip the rant, <a href="http://rudd-o.com/linux-and-free-software/amarok-2-a-story-of-disappointment/#the-solution" title="The solution">click here for the solution</a>.</p>
<h2>The launch -- failure #1<br /></h2>
<p>I launched Amarok 2.</p>
<p>No cookie.&nbsp; It didn't even launch -- it ended with a SIGSEGV after an St9_bad_alloc C++ exception.&nbsp; What could be going on?</p>
<p>Turns out it was my security configuration.&nbsp; I have my system set up to never grant more than 1 GB of RAM to any application, using the ulimit command; and for good reason too, since Kopete every once in a while decides to run away with all system memory and freeze my machine.</p>
<p>But this only lets me ask the question: why would a music player need to allocate in excess of <strong>one gigabyte of RAM</strong> just to start up?&nbsp; I am appalled at this.&nbsp; It makes me want to go back to MS-DOS .OVL files as a memory management strategy.</p>
<p>Well, never mind, let's increase that to 2 GB and try again.&nbsp;</p>
<h2>The import -- failure #2</h2>
<p>This time around, Amarok launches, and presents me with a collection configuration screen.&nbsp; I check the folders I had checked in the old Amarok 1 configuration, then click <em>Import</em>.&nbsp; The importer appears -- I feed it my database information and I hit Next.&nbsp; It starts importing.&nbsp; This import function is vital to me, since my entire music collection habit and mobile music experience is powered by Amarok 1 statistics and other metadata like tags.</p>
<p>The importer takes 5 minutes to list all of my music, spitting quite a few TagLib errors on the console.&nbsp; And then... it just spins.&nbsp; It spins using 100% of one CPU core for twenty minutes.&nbsp; I am about to terminate Amarok 2... and then the Finish button on the importer lights up.&nbsp; I hit <em>Finish</em>.&nbsp; Remember, I'm now half an hour trying to get this junk to work, and so far <em>nothing</em>.</p>
<p>Now, like any regular person, I'd expect the importer to have succeeded.&nbsp; Surprise, surprise, the collection pane is <strong>empty</strong>.&nbsp; Not a single song has been imported!</p>
<h2>Drag and drop, Ogg edition -- failure #3<br /></h2>
<p>So, okay, maybe the statistics were imported but not the collection itself, which may need a rescan, right?</p>
<p>Let's move on to the file browser panel.&nbsp; In Amarok 1, I had a series of bookmarks pointing to commonly accessed directories.&nbsp; No such luck in Amarok 2!</p>
<p>That's okay, I know my way around my collection, so let's browse to an Ace of Base folder which contains several tracks I listen frequently.&nbsp; Let's drag the song Beautiful life.ogg to the playlist... wait... why isn't my favorite Ace of Base song showing up in the pane?</p>
<p>What?&nbsp; Only MP3 files are showing up!&nbsp; All the Ogg files are gone!</p>
<p>I launch Dolphin and browse to the folder and, sure enough, the Ogg files are there!&nbsp; Why would Amarok not show me my Ogg files?</p>
<p>OK so let's try and drag the file in question from Dolphin to Amarok's playlist... nice, the drop target shows a black bar where it's going to be inserted.&nbsp; Let's release the mouse button... <strong>nothing</strong>!&nbsp; Amarok plainly refuses to accept Ogg files dropped into it!</p>
<p>By now I'm furious.</p>
<p>OK, maybe at least Amarok will let me drop an MP3 file.&nbsp; So I try with Angel eyes.mp3.&nbsp; Sure enough, the black bar appears, and this time the file gets actually added...</p>
<h2>Metadata fail -- failure #4</h2>
<p>...only there's something funny about the playlist.&nbsp; It doesn't show me any info except for the file name.&nbsp; No album, no artist, no track, no number, no nothing!</p>
<p>I right-click the file and select the option to edit tags (which shows me a number of things, not just the tags).&nbsp; Whaddya know?&nbsp; Amarok thinks the file is zero bytes long and the only things that it shows correctly are:</p>
<ol><li>The path to the file</li><li>The number of plays that song has seen</li></ol>
<p>Aha.&nbsp; Well, will it play the song?&nbsp; Let's double-click it... and <em>bingo</em>, sound!</p>
<p>OK, so let's go fix the collection thing.&nbsp; Let's request a collection update.&nbsp; I do that... and boom, segfault again.&nbsp; Despite that taking place, there are several amarokcollectionscanner processes running amok on my system and slowing it down to a nearly unusable crawl.</p>
<p>So, in the words of a friend wise beyond his years, <strong>a la verga los pastores, se acabó la Navidad</strong>.&nbsp; killall -9 amarokcollectionscanner &amp;&amp; rpm -e amarok.</p>
<h2>The recap</h2>
<ol><li>Amarok 2 refuses to load when limited to less than one gigabyte of RAM.</li><li>The importer doesn't work.</li><li>You can't play Ogg files.</li><li>If you so much as sneeze, it dies and leaves mongrels that make your system unusable.</li></ol>
<p>Let me remind you, the Amarok developers have the audacity to call this the second bug fix release of the second version.</p>
<p>If I, a Linux developer with 12 years of experience who knows his way around UNIX like the back of his hand, can't get this ersatz "music player", with elementarily dumb oversights, mistakenly shipped by the Fedora release managers as stable software, what can a regular user who just wants to play music have in the way of hope?</p>
<p>Now I go to the IRC channel in Freenode where the Amarok developers dwell, and voice my complaints.&nbsp; They tell me to stop complaining and file bugs.&nbsp; What for?&nbsp; It isn't the first bug I have filed about Amarok, and bugs take <em>months or even years</em> to be sorted out.</p>
<p>This on top of a number of regressions I discovered months ago that I'm pretty sure aren't fixed yet:</p>
<ol><li>Playlist import didn't work.&nbsp; Especially if one of your playlists had a track entry that had been moved and is no longer in the collection.&nbsp; In fact, you cannot even put a song outside your collection in a playlist, since the database doesn't store paths but rather IDs from songs in the collection.&nbsp; So you had to manually fix all of your playlists in order to prevent data loss.&nbsp; Fortunately, I scripted this task so I did do it months ago in the good faith that I would be able to use Amarok 2 some day.<br /></li><li>Any statistics (ratings, labels, play counts, scores) for songs outside your collection is lost.&nbsp; Lost.&nbsp; If you have been listening to songs outside your collection folder, expect to say goodbye to all track metadata applied to these tracks.&nbsp; The reason it is lost is, again, because Amarok does who knows what with the imported statistics data that used to show (not anymore!&nbsp; so you can say this is a bug atop a bug!)&nbsp; on the playlist when a non-collection track was first added, but gets utterly reset when the non-collection track finishes playing.<br /></li><li>Intelligent playlists weren't imported either.&nbsp; If you were feeding your iPod using one of these, bye bye.</li><li>There is no way to mass-edit tag information right from the playlist, something I very much frequently did when using Amarok 1.<br /></li></ol>
<p><strong>Systemic failure</strong>.&nbsp; That's all I can say.&nbsp; A group of developers set out to write a music player that has less features than the old generation one, and has more bugs than an ant colony.&nbsp; Then they code code code without any meaningful testing.&nbsp; Then they ship it implying it is stable software under the banner of "we need more testers", but with no working migration path from the old version of the software, and double the hardware requirements.&nbsp; Good-willed people in charge of distributing good software get duped into shipping this bag of FAIL, updating perfectly-working software already-deployed into millions of users' workstations.&nbsp; And when the users complain, some people have the gall to say that we are rude.</p>
<p><em>Lenin would be proud.</em></p>
<p class="discreet">If you want to accuse me of being an ungrateful son of a bitch, can that accusation.&nbsp; Not only is my criticism valid in a world where you're validated by how good the results of your work is -- regardless of end-user price -- I have actually gone out of my way to provide a solution for you and help you avoid these disasters.&nbsp; Scroll down.</p>
<h2><a name="the-solution"></a>The solution</h2>
<p>Well, since I cannot live without Amarok 1, I decided to built it for Fedora 11.&nbsp; I had to patch a number of deficiencies in the Amarok 1 source code (namely, the use of obsolete libraries and C include practices) with patches I found around the globe for Gentoo and other distributions.&nbsp; It wasn't that hard, but it wasn't easy either.&nbsp; The RPM packages ready to install are on <a href="resolveuid/920588c00c7f3e1193d732e18062f83c" class="internal-link" title="The missing RPMs">The missing RPMs repository</a> (which I do not recommend you actually add to your Yum configuration if you're using Fedora 11) and you can get them here directly:</p>
<ol><li><a href="http://rudd-o.com/../new-projects/the-missing-rpms/browse/RPMS/x86_64/amarok-1.4.10-4.fc11.x86_64.rpm" class="external-link">Amarok 1.4.10 for Fedora 11 64 bits.</a></li><li><a href="http://rudd-o.com/../new-projects/the-missing-rpms/browse/SRPMS/amarok-1.4.10-4.fc11.src.rpm" class="external-link">Amarok 1.4.10 source package to rebuild for Fedora 11 or Fedora 10 (32 or 64 bits).</a><br /></li></ol>
<p>You install them by downloading them and then using the <code>rpm -Uvh --oldpackage</code> command, so this package actually replaces the newer Amarok package.&nbsp; After doing that, you're strongly encouraged to lock Amarok from being upgraded with yum by putting a line <code>exclude=amarok</code> in your <code>/etc/yum.conf</code> file.</p>
<p class="callout">Tip: if you use the <a class="external-link" href="http://labix.org/smart">Smart package manager</a>, you can install the package using point-and-click, and it will automatically erase the newer version for you, no need for funny commands or anything.&nbsp; After installing the package, lock the version of the newly installed Amarok package so it won't get upgraded in future upgrade cycles.</p>

<p><small>This article was culled from <a href="http://rudd-o.com/linux-and-free-software/amarok-2-a-story-of-disappointment">Amarok 2: a story of disappointment -- with a solution for Fedora 11</a></small>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>Fedora</dc:subject>
    
    
        <dc:subject>KDE</dc:subject>
    
    
        <dc:subject>bugs</dc:subject>
    
    
        <dc:subject>Amarok</dc:subject>
    
    
        <dc:subject>rants</dc:subject>
    
    
        <dc:subject>bad software</dc:subject>
    
    
        <dc:subject>sucks!</dc:subject>
    
    <dc:date>2009-04-03T23:16:25Z</dc:date>
    <dc:type>Article</dc:type>
    </item>





</rdf:RDF>

