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

<channel>
	<title>Linux tips &#8211; All My Base</title>
	<atom:link href="https://blog.allmybase.com/category/linux-tips/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.allmybase.com</link>
	<description>...are belong to the internet.</description>
	<lastBuildDate>Wed, 23 May 2012 21:52:46 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Setting up fully redundant failover nagios servers</title>
		<link>https://blog.allmybase.com/2010/10/04/setting-up-fully-redundant-failover-nagios-servers/</link>
					<comments>https://blog.allmybase.com/2010/10/04/setting-up-fully-redundant-failover-nagios-servers/#comments</comments>
		
		<dc:creator><![CDATA[brose]]></dc:creator>
		<pubDate>Tue, 05 Oct 2010 03:30:01 +0000</pubDate>
				<category><![CDATA[Linux tips]]></category>
		<category><![CDATA[Nagios Plugins]]></category>
		<category><![CDATA[Programming Tips]]></category>
		<guid isPermaLink="false">http://allmybase.com/?p=133</guid>

					<description><![CDATA[Haven&#8217;t updated in a while, so I&#8217;ll write a good post to make up for it. Recently, I&#8217;ve encountered the need to set up fully redundant nagios servers in a typical pair setup. However, reading the documentation [here], the solutions seemed lacking. The official method is to simply run two different machines with the same [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Haven&#8217;t updated in a while, so I&#8217;ll write a good post to make up for it.</p>
<p>Recently, I&#8217;ve encountered the need to set up fully redundant nagios servers in a typical pair setup. However, reading the documentation [<a href="http://nagios.sourceforge.net/docs/3_0/redundancy.html#scenario_2">here</a>], the solutions seemed lacking. The official method is to simply run two different machines with the same configuration. The master should do everything a normal nagios server should do, but the slave should have its host &#038; service checks and notifications disabled. Then, a separate mechanism is set up so that the slave can &#8220;watch&#8221; the master, and enable the aforementioned features if the master goes down. Then, still checking, the slave will disable those features again when the master comes back alive.</p>
<p>Well, this solution sounds just fine in theory, but in practice it really creates several more problems than it solves. For instance, acknowledgements, scheduled downtimes, and comments made do NOT synchronize with the official method. Their mechanism does not allow for this, as it uses the obsessive-compulsive service and host parameters, which can be executed after every single check is run. It therefore has no access to the comment/acknowledgement data, so it simply cannot synchronize.</p>
<p>So can this data be synchronized? The short answer is yes, but I&#8217;ll explain the game plan before we dive in. Nagios can (unknowingly) provide us with another synchronization method, its own internal retention.dat file. This file is, by default, written to every 90 minutes by the nagios process, and contains all of the information necessary to restore nagios to the state it was in when it exited. Sounds like exactly what we need! So we&#8217;re going to now stop thinking about running nagios, and start thinking about how we can take this blob of ASCII data, and ensure it never gets corrupted and is as frequently as possible being updated. This is, after all, the true goal of the situation.</p>
<p>First and foremost, we will need a nagios installation! You can follow their documentation on this one and set one up for yourself. It&#8217;s ok, I can wait.</p>
<p>Second, we need another nagios installation on a second server! Hop to it.</p>
<p>Third, all of the nagios configuration files need to be constantly synchronized between these two hosts. I use puppet to synchronize my config files over the servers I administer, so unfortunately my implementation is highly specific. You may need to find other ways to synchronize your config files, but this should not be terribly difficult (perhaps a Makefile with a versioning repository and ssh keys?). This is needed in the official nagios failover deployment as well. Anyway, one &#8220;gotcha&#8221; I faced was the need to change the configuration parameter &#8220;retain_state_information=90&#8221; to &#8220;retain_state_information=1&#8221;. <b>Do not forget to do this or else synchronizations will only occur once every 90 minutes.</b></p>
<p>Fourth, you will need to deploy this script on both hosts, and configure the requirements. You will see embedded ERB syntax in this script, that is because puppet allows me to configure discrepancies in my deployment inline, as the final configuration files are generated on-the-fly, then pushed to the clients.</p>
<blockquote><p>
[root@puppet ~]# cat /usr/bin/nagios-watchdog.sh.erb<br />
#!/bin/bash</p>
<p># Executable variables. Useful.<br />
RM=&#8221;/bin/rm -f&#8221;<br />
MV=&#8221;/bin/mv&#8221;<br />
ECHO=&#8221;/bin/echo -e&#8221;<br />
FIXFILES=&#8221;/sbin/fixfiles&#8221;<br />
MAILER=/usr/sbin/sendmail<br />
SUBJECT=&#8221;URGENT: nagios master process switch has taken place.&#8221;<br />
RECIPIENT=&#8221;sysadmin@example.com&#8221;<br />
SERVICE=/etc/init.d/nagios<br />
RETENTIONFILE=/var/log/nagios/retention.dat</p>
<p># This is where we point the servers at each-other (configure this properly in your deployment!)&#8230;<br />
&lt;% if fqdn == &#8220;nagios1.example.com&#8221; %><br />
MASTERHOST=192.168.1.2<br />
&lt;% else %><br />
MASTERHOST=192.168.1.1<br />
&lt;% end %></p>
<p># Ensure only one copy can run at a time&#8230;<br />
PIDFILE=/var/run/nagios-watchdog.pid<br />
if [ -e ${PIDFILE} ]; then<br />
        exit 1;<br />
else<br />
        touch ${PIDFILE};<br />
fi</p>
<p># Checks the actual daemon status on the other host&#8230;<br />
su nagios -c &#8220;ssh ${MASTERHOST} \&#8221;/etc/init.d/nagios status\&#8221; >/dev/null 2>&#038;1&#8243;</p>
<p># Is the other host doing all the work?<br />
if [ $? -eq 0 ]; then<br />
        # Stop what I&#8217;m doing&#8230;<br />
        ${SERVICE} stop >/dev/null 2>&#038;1</p>
<p>        # Copy the retention data from the other nagios process&#8230;<br />
        su nagios -c &#8220;scp ${MASTERHOST}:${RETENTIONFILE} /tmp/&#8221;;</p>
<p>        # Verify that we didn&#8217;t get a corrupted copy&#8230;<br />
        if [ `grep &#8220;{&#8221; /tmp/retention.dat | wc -l` -eq `grep &#8220;}&#8221; /tmp/retention.dat | wc -l` ]; then<br />
                ${MV} /tmp/retention.dat ${RETENTIONFILE};<br />
        else<br />
                ${RM} /tmp/retention.dat;<br />
        fi<br />
        ${FIXFILES} restore /var/log/nagios<br />
else<br />
        ${SERVICE} status >/dev/null 2>&#038;1<br />
        if [ $? -ne 0 ]; then<br />
                ${ECHO} &#8220;From: nagios-watchdog@`hostname`\nSubject: ${SUBJECT}\nTo: ${RECIPIENT}\nNow running on host: `hostname`&#8221; | ${MAILER} ${RECIPIENT};<br />
                ${SERVICE} start >/dev/null 2>&1;<br />
        fi<br />
fi</p>
<p>${RM} ${PIDFILE}</p>
<p>exit 0;
</p></blockquote>
<p>There is a single requirement to this script, you must give no-password ssh keys to the nagios accounts on each host, but you can use those securely by using the allowed commands directives of the authorized_keys file.</p>
<p>Fifth, and finally, we must implement a mutex operation around running nagios processes. Recall that we are synchronizing copies of nagios internal state data, and having a running nagios process is just a luxury. If you look at the script above, it simply ensures that nagios is running one, but not both servers, and ensures that the newest retention.dat file always has priority. The mutex operation doesn&#8217;t need to be infinetely accurate, I used the following relatively barbaric solution:</p>
<blockquote><p>
[root@nagios1 ~]# crontab -l<br />
1,5,9,13,17,21,25,29,33,37,41,45,49,53,57 * * * * /usr/bin/watchdog-nagios.sh<br />
0 6 * * * /usr/bin/nagios-reports.sh<br />
0 12 * * * /usr/bin/nagios-reports.sh</p>
<p>[root@nagios2 ~]# crontab -l<br />
3,7,11,15,19,23,27,31,35,39,43,47,51,55,59 * * * * /usr/bin/watchdog-nagios.sh<br />
0 6 * * * /usr/bin/nagios-reports.sh<br />
0 12 * * * /usr/bin/nagios-reports.sh
</p></blockquote>
<p>Sixth, and optionally, as you can see above, I&#8217;ve also set up redundant reporting. We do a similar test to ensure that at a maximum, only one email report is dispatched for the given timeframe. In this solution, reports could be theoretically lost forever if a specific set of circumstances is met, but that was deemed acceptable in this deployment. To see the real magic behind that script:</p>
<blockquote><p>
[root@puppet ~]# cat /var/lib/puppet/files/nagios/usr/bin/nagios-reports.sh.erb<br />
#!/bin/bash</p>
<p>/etc/init.d/nagios status >/dev/null 2>&#038;1</p>
<p>if [ $? -eq 0 ]; then<br />
	/usr/bin/nagios-reporter.pl &#8211;type=24 &#8211;embedcss &#8211;warnings<br />
fi
</p></blockquote>
<p>And voila, of course nagios-reporter.pl could be any report generation tool you wish, just be sure to call it in the method that suits your reporting needs.</p>
<p>Seventh, and convenient to have, I also wrote these two quick PHP scripts. Throw them in /var/www/html on each nagios box and do not redirect straight to nagios. Then setup DNS in a round-robin multiple A-record fashion. That is,</p>
<blockquote><p>
[root@puppet ~]# dig +short nagios.example.com<br />
192.168.1.1<br />
192.168.1.2
</p></blockquote>
<p>Once you get that set up, insert these two files into the aforementioned directories:</p>
<blockquote><p>
[root@puppet ~]# cat /var/lib/puppet/files/nagios/var/www/html/index.php.erb | sed &#8216;s/&lt;/\&lt;/g&#8217;<br />
&lt;HTML><br />
	&lt;HEAD><br />
		&lt;TITLE>INTERNal Redirect&lt;/TITLE><br />
	&lt;/HEAD><br />
	&lt;FRAMESET ROWS=&#8221;30,100%&#8221; BORDER=&#8221;1&#8243; STYLE=&#8221;border-style:solid&#8221; noresize><br />
		&lt;FRAME SRC=&#8221;switcher.php&#8221; NAME=&#8221;switcher&#8221;/><br />
&lt;?php</p>
<p>// This will set the $me and $you variables correctly&#8230;<br />
$me = &#8220;&lt;%= fqdn %>&#8221;;<br />
if($me == &#8220;nagios1.example.com&#8221;)<br />
{ $you = &#8220;nagios2.example.com&#8221;; }<br />
else<br />
{ $you = &#8220;nagios1.example.com&#8221;; }</p>
<p># Test whether or not nagios is running locally.<br />
$ch = curl_init();<br />
curl_setopt($ch, CURLOPT_URL, &#8220;https://localhost/nagios/cgi-bin/status.cgi&#8221;);<br />
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);<br />
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);<br />
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);<br />
$output = curl_exec($ch);<br />
curl_close($ch);<br />
$pos = strpos($output, &#8220;Whoops!&#8221;);</p>
<p>if($pos === false)<br />
{ echo(&#8220;&lt;FRAME SRC=\&#8221;https://$me/nagios/\&#8221; NAME=\&#8221;activenode\&#8221;/>&#8221;); }<br />
else<br />
{ echo(&#8220;&lt;FRAME SRC=\&#8221;https://$you/nagios/\&#8221; NAME=\&#8221;activenode\&#8221;/>&#8221;); }</p>
<p>?></p>
<p>	&lt;/FRAMESET><br />
&lt;/HTML>
</p></blockquote>
<blockquote><p>
[root@puppet ~]# cat /var/lib/puppet/files/nagios/var/www/html/switcher.php.erb | sed &#8216;s/&lt;/\&lt;/g&#8217;<br />
&lt;HTML><br />
	&lt;HEAD><br />
		&lt;TITLE>Switcher&lt;/TITLE><br />
	&lt;/HEAD><br />
	&lt;BODY><br />
		&lt;CENTER><br />
			&lt;FONT SIZE=&#8221;-1&#8243;></p>
<p>&lt;?php<br />
$me = &#8220;&lt;%= fqdn %>&#8221;;<br />
if($me == &#8220;nagios1.example.com&#8221;)<br />
{ $you = &#8220;nagios2.example.com&#8221;; }<br />
else<br />
{ $you = &#8220;nagios1.example.com&#8221;; }</p>
<p># Test whether or not nagios is running locally.<br />
$ch = curl_init();<br />
curl_setopt($ch, CURLOPT_URL, &#8220;https://localhost/nagios/cgi-bin/status.cgi&#8221;);<br />
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);<br />
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);<br />
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);<br />
$output = curl_exec($ch);<br />
curl_close($ch);<br />
$pos = strpos($output, &#8220;Whoops!&#8221;);</p>
<p>if($pos === false)<br />
{ $current = $me; }<br />
else<br />
{ $current = $you; }</p>
<p>echo(&#8221;<br />
Currently using: $current [&lt;a href=\&#8221;javascript:parent.document.location.reload(true)\&#8221;>Redetect active node&lt;/a>]&#8221;);<br />
?></p>
<p>			&lt;/FONT><br />
		&lt;/CENTER><br />
	&lt;/BODY><br />
&lt;/HTML>
</p></blockquote>
<p>So now, you can simply visit http://nagios.example.com and nagios will always be displayed, unless a particularly bizarre set of circumstances has occurred. If this is the case, don&#8217;t panic! Remember, we set our minds correctly in the beginning and the integrity of the retention.dat files is not in question. The scipts may just take a minute or two to adjust themselves properly. For those that worry the DNS failover wouldn&#8217;t work, I&#8217;ve verified that it does on some of the popular browsers. There is no 90-second timeout delay, either, as in all but the rarest circumstances. I verified that a timeout can occur if the first connect() call&#8217;s SYN packets are dropped completely, but this is the aforementioned rare circumstance. Most testing on this is done at the iptables level, but be sure to REJECT the SYN packets (not DROP!) if you want an accurate account of the speed of the failover in your web-browser during a real-life outage. Also ensure that your router will send proper ICMP Host Unreachable responses if one of the addressed hosts is offline.</p>
<p>I think that&#8217;s pretty much all you need to get going. This deployment has been running for a little while now in a production environment, and has been rock-solid. It&#8217;s a bit more work than the official solution, but it solved my monitoring needs and extensive testing, both real-world and artificial, has not yet revealed any issue with this solution.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.allmybase.com/2010/10/04/setting-up-fully-redundant-failover-nagios-servers/feed/</wfw:commentRss>
			<slash:comments>17</slash:comments>
		
		
			</item>
		<item>
		<title>Allowing gnome to use windows key as a shortcut</title>
		<link>https://blog.allmybase.com/2010/04/01/allowing-gnome-to-use-windows-key-as-a-shortcut/</link>
					<comments>https://blog.allmybase.com/2010/04/01/allowing-gnome-to-use-windows-key-as-a-shortcut/#comments</comments>
		
		<dc:creator><![CDATA[brose]]></dc:creator>
		<pubDate>Thu, 01 Apr 2010 21:47:36 +0000</pubDate>
				<category><![CDATA[Linux tips]]></category>
		<guid isPermaLink="false">http://allmybase.com/?p=124</guid>

					<description><![CDATA[I have a wonderful habit of binding &#8220;open a terminal&#8221; in gnome&#8217;s System -> Preferences -> Keyboard Shortcuts dialog to the Windows key. This is the key that in WIndows would typically open up the start menu. However, I wasn&#8217;t able to do so after an update to Fedora 12. I would press the key [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I have a wonderful habit of binding &#8220;open a terminal&#8221; in gnome&#8217;s System -> Preferences -> Keyboard Shortcuts dialog to the Windows key. This is the key that in WIndows would typically open up the start menu. However, I wasn&#8217;t able to do so after an update to Fedora 12. I would press the key in the shortcuts window, and nothing would happen. I could combine the Windows key with another key, and it recognized the Windows key as mod4, a modifying key like control or alt. I figured out the problem, just run this command to unbind the windows key as a modifier and go back to it just being known as &#8220;Super_L&#8221;:</p>
<blockquote><p>
xmodmap -e &#8220;remove mod4 = Super_L&#8221;
</p></blockquote>
<p>Then go back into the Keyboard Shortcuts list and try again. Super_L should now show up in the window when you hit the key.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.allmybase.com/2010/04/01/allowing-gnome-to-use-windows-key-as-a-shortcut/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Sharing pictures from Fedora 11 Linux to Kodak Easyshare EX811 Digitial Picture Frame</title>
		<link>https://blog.allmybase.com/2009/08/13/sharing-pictures-from-fedora-11-linux-to-kodak-easyshare-ex811-digitial-picture-frame/</link>
					<comments>https://blog.allmybase.com/2009/08/13/sharing-pictures-from-fedora-11-linux-to-kodak-easyshare-ex811-digitial-picture-frame/#comments</comments>
		
		<dc:creator><![CDATA[brose]]></dc:creator>
		<pubDate>Thu, 13 Aug 2009 15:37:29 +0000</pubDate>
				<category><![CDATA[Linux tips]]></category>
		<guid isPermaLink="false">http://allmybase.com/?p=101</guid>

					<description><![CDATA[Wow that&#8217;s a huge title. Anyway, a friend of mine brought home a digital photo frame, the EX811 to be precise. He couldn&#8217;t quite figure out how to get pictures to display from the computer onto the frame. We did get it working, but here&#8217;s the documentation on how, since I think this might be [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Wow that&#8217;s a huge title. Anyway, a friend of mine brought home a digital photo frame, the EX811 to be precise. He couldn&#8217;t quite figure out how to get pictures to display from the computer onto the frame. We did get it working, but here&#8217;s the documentation on how, since I think this might be helpful to other people.</p>
<p>1) Get the frame on the network. I really can&#8217;t help you too much with this, just use the picture frame&#8217;s menu system to do it. The menu is fairly intuitive. If possible, try to give the picture frame a static IP address, whether through the frame&#8217;s menu system or via the DHCP server in your private network.</p>
<p>2) The frame sends a lot of, well, odd traffic. It uses multicast and unicast traffic, so, and you might be disappointed in me over this, I recommend you just allow all traffic from that source. A rule such as &#8220;-A INPUT &#8211;src 192.168.100.100 -j ACCEPT&#8221; in /etc/sysconfig/iptables will work perfectly here. Just change the IP address in the example to the static IP address you gave the frame when you got it on the network in part 1.</p>
<p>3) Install [<a href="http://mediatomb.cc/">mediatomb</a>] and start it. Check it&#8217;s configuration file for what port it runs on, and navigate to that port on your local computer. For example, point firefox at &#8220;http://127.0.0.1:thatport&#8221;. From there, configure what pictures and stuff you would like to share with the frame.</p>
<p>4) Reboot the frame. At the main screen, an entry labelled &#8220;Network Computer&#8221; should appear. Click on that one, navigate to the folder with all the pictures in it, and press play. Congrats, you&#8217;re now sharing your photos.</p>
<p>5) You may want to make mediatomb start automatically on system boot with &#8220;chkconfig &#8211;levels 345 mediatomb on&#8221;.</p>
<p>6) You don&#8217;t need to restart the frame or mediatomb to make changes to the pictures that are shared. Just make the changes, and they&#8217;ll happen in real time.</p>
<p>Hope this helps someone out there.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.allmybase.com/2009/08/13/sharing-pictures-from-fedora-11-linux-to-kodak-easyshare-ex811-digitial-picture-frame/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Linux convert utility resize image to EXACT size</title>
		<link>https://blog.allmybase.com/2009/08/07/linux-convert-utility-resize-image-to-exact-size/</link>
					<comments>https://blog.allmybase.com/2009/08/07/linux-convert-utility-resize-image-to-exact-size/#comments</comments>
		
		<dc:creator><![CDATA[brose]]></dc:creator>
		<pubDate>Fri, 07 Aug 2009 16:09:23 +0000</pubDate>
				<category><![CDATA[Linux tips]]></category>
		<guid isPermaLink="false">http://allmybase.com/?p=98</guid>

					<description><![CDATA[convert, provided by the ImageMagick package, has good behaviour in the resizing of images. If you were to write, for example: [brose@allmybase-demo]$ convert -resize &#8216;1024&#215;768&#8217; in.jpg out.jpg your image would be resized such that neither dimension exceeded the bounds, but unless the aspect ratio is dead on (convert honours and preserves aspect ratios), your image [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>convert, provided by the ImageMagick package, has good behaviour in the resizing of images. If you were to write, for example:</p>
<blockquote><p>
[brose@allmybase-demo]$ convert -resize &#8216;1024&#215;768&#8217; in.jpg out.jpg
</p></blockquote>
<p>your image would be resized such that neither dimension exceeded the bounds, but unless the aspect ratio is dead on (convert honours and preserves aspect ratios), your image will not be the exact size you specified.</p>
<p>But, there is a simple fix. Append an exclamation point to the end of the size, like this:</p>
<blockquote><p>
[brose@allmybase-demo]$ convert -resize &#8216;1024&#215;768!&#8217; in.jpg out.jpg
</p></blockquote>
<p>and convert will do exactly what you ask, even if it means distorting the image by destroying the aspect ratio. This could be pretty handy to someone, so I decided to blog it. Heck, it&#8217;ll probably be useful to me again soon when I say, &#8220;hmmm&#8230; how did I do that again?&#8221;. Enjoy.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.allmybase.com/2009/08/07/linux-convert-utility-resize-image-to-exact-size/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Skype on 64-bit Fedora 11 Linux</title>
		<link>https://blog.allmybase.com/2009/08/04/skype-on-64-bit-fedora-11-linux/</link>
					<comments>https://blog.allmybase.com/2009/08/04/skype-on-64-bit-fedora-11-linux/#comments</comments>
		
		<dc:creator><![CDATA[brose]]></dc:creator>
		<pubDate>Tue, 04 Aug 2009 19:07:17 +0000</pubDate>
				<category><![CDATA[Linux tips]]></category>
		<guid isPermaLink="false">http://allmybase.com/?p=94</guid>

					<description><![CDATA[Getting skype to work &#8211; and behave properly &#8211; on Fedora 11 is something of chore. The lack of support on skype&#8217;s part is almost appalling, given that they&#8217;re on version 4.1 for Windows and version 2.0 for Linux at the time of this article&#8217;s writing. To be honest, I don&#8217;t think I&#8217;ve seen a [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Getting skype to work &#8211; and behave properly &#8211; on Fedora 11 is something of chore. The lack of support on skype&#8217;s part is almost appalling, given that they&#8217;re on version 4.1 for Windows and version 2.0 for Linux at the time of this article&#8217;s writing. To be honest, I don&#8217;t think I&#8217;ve seen a disparity this great in popular chat software since AOL Instant Messenger. I wish that the skype protocol would be released as a public spec so open source versions could be made&#8230; unless one exists of which I&#8217;m unaware?</p>
<p>Anyway, this leaves us with a couple of options. You could do no video chatting, or you could also use another utility to chat, such as gnome-meeting. I&#8217;m going to assume, however, that these aren&#8217;t good options for you. Below we&#8217;ll embark on the quest of getting skype to behave properly on a 64-bit linux system. For me, this happened to be on Fedora 11. Your mileage may vary.</p>
<p>First, go grab the RPM from the skype website and install it. Pull in the dependencies as well via yum. Then, make sure the packages &#8220;libv4l-0.5.9-1.fc11.i586&#8221;, &#8220;pulseaudio-libs-0.9.15-14.fc11.i586&#8221;, and &#8220;alsa-plugins-pulseaudio-1.0.20-2.fc11.i586&#8221; (or whatever versions you want) are installed.</p>
<blockquote><p>
[root@allmybase-demo ~]# yum -y install libv4l-0.5.9-1.fc11.i586 pulseaudio-libs-0.9.15-14.fc11.i586 alsa-plugins-pulseaudio-1.0.20-2.fc11.i586
</p></blockquote>
<p>First thing&#8217;s first, we&#8217;ll need to make sure that this library will load properly when skype launches, otherwise there will be no video for skype to send to your chatting partners. To do this, mimic what I&#8217;ve done here:</p>
<blockquote><p>
[root@allmybase-demo ~]# mv /usr/bin/skype /usr/bin/skype.proper<br />
[root@allmybase-demo ~]# cat << EOF > /usr/bin/skype<br />
#!/bin/bash<br />
LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so<br />
skype.proper</p>
<p>EOF
</p></blockquote>
<p>What we&#8217;ve done here is ensure that skype will be able to communicate properly with the webcam by preloading the 32-bit library file before the execution of the next ELF binary. At this point, fire up skype. Go into the options, and set all of the audio dropboxes to &#8220;pulse&#8221;. If you&#8217;re lucky, sound will work out of the box. If not, you&#8217;ll probably get something like this, however:</p>
<blockquote><p>
[brose@allmybase-demo ~]$ skype<br />
RtApiAlsa: underrun detected.<br />
RtApiAlsa: underrun detected.<br />
RtApiAlsa: underrun detected.<br />
RtApiAlsa: underrun detected.<br />
RtApiAlsa: underrun detected.
</p></blockquote>
<p>This seems to be a well-known bug. There have been a variety of &#8220;hacks&#8221; to make the problem bearable, and some of them do work a bit, but I&#8217;m going to present another option here that works quite well. Traditional hacks usually involve changing the nice level of pulse audio such that it runs at a different rate than the fork()&#8217;d process sending audio data. By adjusting this finely, one can minimize the impact of the buffer underrun by ensuring that data will ALWAYS be written to the buffer before it&#8217;s played.</p>
<p>However, I&#8217;m going to make one assumption here, no matter how incorrect it may be. I&#8217;m going to say that you&#8217;re going to try to keep the computer as quiet as possible while chatting on skype. First, mute or turn off any programs that are actively using the sound on your system. A simple test of this is whether or not there are sounds coming out of your speakers. Now in skype, change the three &#8220;sound devices&#8221; dropbox settings to the underlying hardware on your system. For me, this was labelled as, &#8220;HDA Intel (hw:Intel,0)&#8221;. Apply the settings and see if you can now get proper sound on skype by calling the echo123 test number. If so, you&#8217;re done. Just remember to always stop your music and audio applications before making a call.</p>
<p>If at this point, however, you get &#8220;Problem with audio playback&#8221;, it means that you didn&#8217;t kill all services using sound. It&#8217;s okay, there&#8217;s a simple solution. Quit skype, and, from the command line, run it again as:</p>
<blockquote><p>
[brose@allmybase-demo ~]$ pasuspender skype >/dev/null 2>/dev/null&#038;
</p></blockquote>
<p>This will suspend pulseaudio from using the soundcard while the application skype is running. You now can ONLY make sound with skype. To get other programs to make sound after this, you will need to quit skype. But, you can rest assured that your sound will work 100% and that there will be no audible interruptions coming from your computer. This fix does work, I&#8217;ve done it and so has Thomas (his link is on the right), and we&#8217;ve both made calls, having no problems whatsoever. Hope this helps someone, perhaps leave a comment if it did? Have a good one.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.allmybase.com/2009/08/04/skype-on-64-bit-fedora-11-linux/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Properly configuring plymouth</title>
		<link>https://blog.allmybase.com/2009/07/17/properly-configuring-plymouth/</link>
					<comments>https://blog.allmybase.com/2009/07/17/properly-configuring-plymouth/#comments</comments>
		
		<dc:creator><![CDATA[brose]]></dc:creator>
		<pubDate>Sat, 18 Jul 2009 03:54:50 +0000</pubDate>
				<category><![CDATA[Funny Finds]]></category>
		<category><![CDATA[Linux tips]]></category>
		<guid isPermaLink="false">http://allmybase.com/?p=79</guid>

					<description><![CDATA[Mayhaps this should be better called &#8220;getting rid of the blue and white bar loading screen in Fedora 11&#8221;, because that was the goal I had in mind when I set out on this mission. I&#8217;d like to officially say that [this guy] is just totally incorrect. He reviews Fedora 11 booting as, and I [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Mayhaps this should be better called &#8220;getting rid of the blue and white bar loading screen in Fedora 11&#8221;, because that was the goal I had in mind when I set out on this mission. I&#8217;d like to officially say that [<a href="http://www.brighthub.com/computing/linux/articles/39330.aspx">this guy</a>] is just totally incorrect. He reviews Fedora 11 booting as, and I quote here,</p>
<blockquote><p>
&#8220;First, the loading screen is a simple blue loading bar. Second, the boot process is extremely quick. Does the first have anything to do with the second? It sure does. The Fedora 11 development team has decided to go with speed instead of looks during the boot process and I think Fedora 11 users will be thrilled with this small change to speed up the LiveCD boot time.&#8221;
</p></blockquote>
<p>HE&#8217;S CORRECT, I&#8217;M SO THRILLED!!! One main reason I find this funny &#8212; he assumes he knows exactly what the Fedora development team had in mind when designing this blue bar loading screen, yet he&#8217;s not a developer on the team. Nor is he correct. Nor did he even read the release notes or improvements list. Nope, not a single piece of knowledge, data, or documentation to back up this claim.</p>
<p>The truth? The dev team did work very hard on the boot process, and the fruit of their labors is the plymouth codebase. The blue/light-blue/white loading bar? Yeah, that&#8217;s actually a fallback when the graphical plymouth booting mechanism fails. Great job doing your homework! So we&#8217;ve established two things here, that there&#8217;s at least one page on the internet with incorrect information, and that, if you are experiencing the fedora 11 blue bar boot (say THAT one three times fast), you can actually attain a prettier boot process.</p>
<p>This how-to is written both from memory, and specifically for my laptop, which I was attempting to spruce up with a nice graphical boot. If it&#8217;s inaccurate, sorry about that, but you can certainly use the base I&#8217;m giving you here as a launching point for further research.</p>
<p>First, my laptop has an NVidia GPU in it, so it was necessary to download the proprietary NVidia drivers and install them. I did not install the 32-bit compatibility libraries, since if I do, the NVidia installer says something to the effect of, &#8220;Could not check random component #9662, assuming successful installation&#8221;. Well NVidia, you know what happens when you assume things&#8230; Anyway, once you&#8217;ve gotten the nvidia kernel module installed, edit /etc/modprobe.d/blacklist.conf and blacklist the modules &#8220;nv&#8221; and &#8220;nouveau&#8221; to prevent them from being loaded. We only want the proprietary driver to be loaded here. Make sure you update /etc/X11/xorg.conf as well and tell it to use the nvidia module.</p>
<p>Next, we need to make the framebuffer have the optimal settings, that way plymouth won&#8217;t die and fall back to the blue bar loading screen. Append to the end of the kernel line in /boot/grub/grub.conf the text &#8220;vga=ask&#8221; and reboot. The kernel will prompt you for a video mode. I recommend typing &#8220;scan&#8221; here and striking return abruptly, as we want to make sure all available modes are listed. And yes, the abrupt manner with which the enter key is pressed is important. So yeah, pick which mode fits your screen the best, for me it was 1920x1200x32, which had a hex code of like 37D or something. Like I said, this is all from memory. Now, write down this hex code somewhere, because you&#8217;ll need it again shortly. After the machine boots, find a calculator and convert the hex code you just entered into the kernel into decimal, then place the decimal value in the /boot/grub/grub.conf file, replacing the &#8220;ask&#8221; with your number. Mine resolved to decimal &#8220;893&#8221;, so I ended up with &#8220;vga=893&#8221; on the kernel line. Congrats, you have now made a hospitable environment with which plymouth can bedazzle you.</p>
<p>Okay, now it&#8217;s time to configure the workhorse. We&#8217;ll need the appropriate utilities, so run this:</p>
<blockquote><p>
# yum install plymouth plymouth-gdm-hooks plymouth-libs plymouth-plugin-label plymouth-plugin-two-step plymouth-scripts plymouth-system-theme plymouth-theme-charge plymouth-utils
</p></blockquote>
<p>Honestly, most of these were probably already installed, but it never hurts to make absolutely sure. Now, recall before where we compiled the NVidia driver? We&#8217;ll need that to be loaded during the boot process so that plymouth can come up. This means that we&#8217;ll need a new initrd containing the NVidia module. This is also the purpose of blacklisting the nv and nouveau modules, as they now won&#8217;t get included into the initrd. I&#8217;ve become <del datetime="2009-07-18T01:41:22+00:00">Canadian</del> lazy lately, so you can run this command to see how to build a new initrd:</p>
<blockquote><p>
# rpm -aq &#8211;scripts kernel | grep initrd
</p></blockquote>
<p>A list of 2 or 4 commands will show up from that. Now find the appropriate one and run it. For me, that was:</p>
<blockquote><p>
# /sbin/new-kernel-pkg &#8211;package kernel &#8211;mkinitrd &#8211;depmod &#8211;install 2.6.29.5-191.fc11.x86_64
</p></blockquote>
<p>Voila, one new shiny initrd. But the initrd isn&#8217;t quite done yet. We need to update plymouth&#8217;s hooks into it. First, we&#8217;ll want to select a theme for initrd to use. I&#8217;ve made sure, at the very least, you&#8217;ve installed the &#8220;charge&#8221; theme in the yum command above. There&#8217;s plenty more in the repos, feel free to search for more, install them, and play around. Some are very neat. Anyway, to see which themes are available, do something like this:</p>
<blockquote><p>
# ls -1 /usr/share/plymouth/themes/<br />
charge<br />
default.plymouth<br />
details<br />
text
</p></blockquote>
<p>As you can see, I have a couple of themes installed, but let&#8217;s focus on the charge theme. Set it as the default theme, and then update it&#8217;s initrd hooks by running, in order:</p>
<blockquote><p>
# plymouth-set-default-theme charge<br />
# /usr/libexec/plymouth/plymouth-update-initrd
</p></blockquote>
<p>Note: This entire abovesaid process needs to be redone for each NVidia driver or kernel update, otherwise it&#8217;ll be broken and fall back to the blue bars again.</p>
<p>Now, reboot and enjoy the pretty loading screen. Now there&#8217;s only one issue you&#8217;ll need to figure out from here on out that I can&#8217;t seem to work out, and that&#8217;s when to reboot in order to enjoy the loading screen anyway. I mean, if you followed this tutorial, you&#8217;re clearly running Linux, which means you&#8217;ll probably not need to reboot any time soon. Effectively, you may have just wasted a good 15 minutes setting up a boot screen you&#8217;ll never really enjoy too much. Thanks for reading my blog, though, I do appreciate it. I promise next time I&#8217;ll include a spoiler warning at the top of the article. Have a nice day! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.allmybase.com/2009/07/17/properly-configuring-plymouth/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>64-bit Adobe Flash Player</title>
		<link>https://blog.allmybase.com/2009/07/09/64-bit-adobe-flash-player/</link>
					<comments>https://blog.allmybase.com/2009/07/09/64-bit-adobe-flash-player/#respond</comments>
		
		<dc:creator><![CDATA[brose]]></dc:creator>
		<pubDate>Thu, 09 Jul 2009 15:31:49 +0000</pubDate>
				<category><![CDATA[Linux tips]]></category>
		<guid isPermaLink="false">http://allmybase.com/?p=55</guid>

					<description><![CDATA[It exists! It&#8217;s not in the Adobe yum repos yet, as it&#8217;s still an alpha build, but you can download it here: [Native Linux 64-bit Flash Player from Adobe Labs] It works very well. No longer do you need to get nspluginwrapper working, and then configure pulseaudio (if that&#8217;s your distro) to listen to 32-bit [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>It exists! It&#8217;s not in the Adobe yum repos yet, as it&#8217;s still an alpha build, but you can download it here:</p>
<p>[<a href="http://labs.adobe.com/downloads/flashplayer10.html">Native Linux 64-bit Flash Player from Adobe Labs</a>]</p>
<p>It works very well. No longer do you need to get nspluginwrapper working, and then configure pulseaudio (if that&#8217;s your distro) to listen to 32-bit apps, blah blah blah. Simply unpackage, throw the .so file into the firefox plugins directory, and restart firefox. Great stuff. I&#8217;ve also noticed there&#8217;s a performance gain to be seen, my flash videos used to lag and flicker on youtube when I made them fullscreen, and this doesn&#8217;t happen anymore. Sound worked out of the box with pulse.</p>
<p>And the best part, although it&#8217;s supposedly an alpha build, it crashes a heck of a lot less than it used to. No more npviewer.bin segfaults in the /var/log/messages file! My guess is that this is because of the lack of a hacked wrapper. But, that being said, if it crashes on you a lot after trying it, don&#8217;t be too upset. At least they&#8217;re trying.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.allmybase.com/2009/07/09/64-bit-adobe-flash-player/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Actually, I CAN believe it&#8217;s btrfs</title>
		<link>https://blog.allmybase.com/2009/07/07/actually-i-can-believe-its-btrfs/</link>
					<comments>https://blog.allmybase.com/2009/07/07/actually-i-can-believe-its-btrfs/#comments</comments>
		
		<dc:creator><![CDATA[brose]]></dc:creator>
		<pubDate>Tue, 07 Jul 2009 23:18:08 +0000</pubDate>
				<category><![CDATA[Linux tips]]></category>
		<guid isPermaLink="false">http://allmybase.com/?p=46</guid>

					<description><![CDATA[I&#8217;m the fool. I took the plunge this week and installed a fresh clean copy of Fedora 11, but I made my root partition btrfs instead of something more&#8230; well, for lack of better words, stable and mature. This should serve as a little documentation of my findings, in the hopes that others don&#8217;t make [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I&#8217;m the fool. I took the plunge this week and installed a fresh clean copy of Fedora 11, but I made my root partition btrfs instead of something more&#8230; well, for lack of better words, stable and mature. This should serve as a little documentation of my findings, in the hopes that others don&#8217;t make the hasty call to dedicate their root partition to the new filesystem.</p>
<p>From the dawn of my days with Linux, I have been told to heed warnings that this new system gives. This isn&#8217;t Windows any more, the warnings that you receive are no longer benign. My first experience with this was when I had a hard drive that was dying, so I decided to do a fsck. The only problem was that I did a fsck on the root partition &#8211; while it was still mounted &#8212; read/write. In all fairness, it was my own arrogance that made me add the flag to manually override that protection system. I figured, &#8220;what could get worse? The drive is already dying&#8221;. I did this with no backups. Three days and 20-something manual superblock hex-edits later, I finally got my data back. The valuable thing from that incident is the experience, though. I now knew how to do manual superblock recreations, which always comes in super handy. I also had learned to heed the warnings of the core developers very well.</p>
<p>Until Saturday. My friend had told me before about how funny the new anaconda argument is: &#8220;icantbelieveitsnotbtr&#8221;. And now who says these hardcore developers don&#8217;t have a sense of humor? Well, I&#8217;ve learned a heck of a lot over these last few years, and sometimes I even feel guilty that I don&#8217;t give back as much as I should to the open source community. So I figured I&#8217;d give their hard work a shot. I&#8217;ve heard nothing but glowing reviews about ZFS, and btrfs is supposed to be the up-and-coming big thing in the filesystem world. I figured, at the very least, I could do some benchmarks or something.</p>
<p>So here goes nothing&#8230;</p>
<p>I fired up the installer, adding the appropriate flags. I had /dev/sda1 already formatted 50 gig ntfs for Windows. This was to be a dual-booting system. I added a 512-meg /boot, sda2, and a 2-gig swap, sda3. sda4 was to be a pointer to an extended partition table, where sda5 resides, filling up all of the remaining space of 59 gigs. I picked my packages and started the installer. Uh oh, the format of sda5 as btrfs failed. Oh well. Reboot, repeat. Same results, but this time it just died with some non-helpful error code 1. Uhhh. So I tried to boot again. My partitioning table was simply gone. WTF.</p>
<p>I remade the partition table, and figured, &#8220;third time&#8217;s the charm!&#8221;. I selected btrfs as the filesystem for /. If this didn&#8217;t work, I was going to give up and use the (now-default) ext4 filesystem. Alas, it worked. I was actually looking forward to using the new filesystem. The install finished normally, and I booted into my new Linux system.</p>
<p>First thing&#8217;s first, I ran a full yum upgrade. I noticed something just then. The seek times with btrfs were amazing, read speeds were okay, but the write speeds were flat-out terrible. I&#8217;m guessing that&#8217;s simply because of all of the metadata btrfs stores, but I honestly have no idea why that is. Oh well, I do far more reads than writes, so this works out well. I then proceeded to use the system for a while. After my used disk space started to get above 25%, I started to get really unexpected results &#8211; kernel failures, corrupted filesystem blocks, half-missing extent entries, system bus errors, the whole nine yards.</p>
<p>I did the next logical thing, I strace&#8217;d the processes that were dying unexpectedly on me. Worst of all was yum, it would just die with a &#8220;Bus Error&#8221;. Strace revealed it was hitting massive ENOSPC (no space left) errors trying to open files on the hard drive. df reported the filesystem as exactly 27% full. A google search revealed this as a known bug, but no one else has really had the problem until their filesystem reached over 75% full. So why was mine being the opposite? I theorized that it may have been because of loads and loads of useless metadata across the hard drive. I rebooted (the only thing that fixed the ENOSPC errors) and installed the btrfs-progs package. This package includes userspace utilities needed to create, check, modify and correct any inconsistencies in the btrfs filesystem. I ran a btrfsck, which reported no problems. I read that it may be useful to re-examine my metadata by forcing a balance of it across all drives, even though it only existed on one partition. This is done with the command &#8220;btrfs-vol -b /&#8221;. Kicker &#8211; this operation, after about 5 minutes of heavily accessing the drive, segfaulted. I was left with a half-balanced btrfs system, ENOSPC errors everywhere, and a feeling like this was the beginning of the end.</p>
<p>I didn&#8217;t quite want to give up yet, but I also wanted a usable machine. I had read somewhere that kernel 2.6.30 had an insane number of btrfs improvements. On a personal wish, I downloaded the kernel source for 2.6.31 and compiled. Booting into the new kernel was like a breath of fresh air.</p>
<p>SIDE NOTE: kernel > 2.6.30 is awesome. readahead is now merged into the kernel source for MUCH faster booting. There have been a ludicrous amount of improvements, check the changelog on kernel.org for a good list of these changes.</p>
<p>Anyway, the new kernel loaded up just fine. The errors held off for a bit, long enough to make me think they were gone. But then they came back full-force. The balance segfaulted again. The fsck said nothing was wrong. No one had any idea what was going on. I do like to help the open source community, but I simply don&#8217;t have time at the present to dig through hundreds of thousands of C code source lines in order to fix a bug this serious. After filing 4 bug reports, submitting probably close to 50 kernel errors, and genuinely giving it my best college try, I was done with btrfs. I rebooted into anaconda and formatted my system as ext4 and went along my way. Yes, I know you can *theoretically* convert a btrfs volume to ext4, but with the structure so far destroyed, I didn&#8217;t even bother wasting my time.</p>
<p>Moral? I guess just know what you&#8217;re getting into if you decide to give btrfs a try. When the kernel developers say that a feature is experimental, take that literally. There is no warning here, only some sound advice &#8211; proceed at your own risk, make plenty of backups, and just generally don&#8217;t expect too much of the filesystem at this early stage of it&#8217;s development.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.allmybase.com/2009/07/07/actually-i-can-believe-its-btrfs/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Looking at you through the glass&#8230;</title>
		<link>https://blog.allmybase.com/2009/05/26/looking-at-you-through-the-glass/</link>
					<comments>https://blog.allmybase.com/2009/05/26/looking-at-you-through-the-glass/#respond</comments>
		
		<dc:creator><![CDATA[brose]]></dc:creator>
		<pubDate>Wed, 27 May 2009 01:09:45 +0000</pubDate>
				<category><![CDATA[Linux tips]]></category>
		<guid isPermaLink="false">http://allmybase.com/?p=30</guid>

					<description><![CDATA[Okay so as part of being a Linux sysadmin, I&#8217;ve run into the need to rebuild a software RAID (mdadm) array. This process usually takes forever, and in an effort to make sure it won&#8217;t take any longer than necessary, I usually leave the volume in question unmounted during the resync/reshape. I know, I know, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Okay so as part of being a Linux sysadmin, I&#8217;ve run into the need to rebuild a software RAID (mdadm) array. This process usually takes forever, and in an effort to make sure it won&#8217;t take any longer than necessary, I usually leave the volume in question unmounted during the resync/reshape. I know, I know, you can read/write to an array during the process safely, otherwise anaconda (the most superior Linux installer) wouldn&#8217;t be able to move forward with the install for a long while. But I still like the reshape to go faster. I&#8217;d rather not use the system for an hour and have it be perfectly fast afterwards than have the machine crawl along all day.</p>
<p>Long-winded ideals speech beside, I want to monitor how long the rebuild is going to take in quasi-realtime. Details of the software raid can be found in the file /proc/mdstat. You can cat this file once in a while to see the progress. But that wasn&#8217;t ever good enough, too much of that whole keyboard-button-pushing thing in order to get the statistics to update. So I would usually type this in real quick:</p>
<p>while [ 1 ]; do clear; cat /proc/mdstat ; sleep 1; done</p>
<p>It&#8217;s just a simple loop that keeps the information fresh on the screen. Well boy did I just find out something today that helps greatly with that dilemma. Enter the Linux &#8220;watch&#8221; command, courtesy of the procps package. The watch command automatically updates the information on the screen in the command that follows the binary on the shell. For example, the command:</p>
<p>watch cat /proc/mdstat</p>
<p>will update the file exactly like the loop does. But watch does it even better, as it prints a clock in the corner and lets you know how often it is updating. Plus, watch doesn&#8217;t make the screen flicker for a millisecond like the shell clear does. The default delay in updating is 2.0 seconds, but you can change that easily via the -n flag. For example, to update every second, as in the custom loop above, try the command:</p>
<p>watch -n 1 cat /proc/mdstat</p>
<p>and be amazed. It would seem at first glance that the delay can be set as low as 0.1 seconds. Pretty neat. It&#8217;s an interesting tool, and certainly one that is very useful for these sorts of things. Check out the man page for more information on the command.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.allmybase.com/2009/05/26/looking-at-you-through-the-glass/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>STFU!!!</title>
		<link>https://blog.allmybase.com/2009/05/03/stfu/</link>
					<comments>https://blog.allmybase.com/2009/05/03/stfu/#comments</comments>
		
		<dc:creator><![CDATA[brose]]></dc:creator>
		<pubDate>Sun, 03 May 2009 05:02:24 +0000</pubDate>
				<category><![CDATA[Linux tips]]></category>
		<guid isPermaLink="false">http://allmybase.com/?p=28</guid>

					<description><![CDATA[Quick tip. You&#8217;re working on setting up a server late at night. It&#8217;s dark out. Your roommate is sleeping. And every time you push the damn tab button, the computer makes a beeping sound. WHAT THE HELL?! Silence the PC Speaker with &#8220;rmmod pcspkr&#8221;. Make it loud again with &#8220;modprobe pcspkr&#8221;. Your roommate will thank [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Quick tip. You&#8217;re working on setting up a server late at night. It&#8217;s dark out. Your roommate is sleeping. And every time you push the damn tab button, the computer makes a beeping sound. WHAT THE HELL?!</p>
<p>Silence the PC Speaker with &#8220;rmmod pcspkr&#8221;. Make it loud again with &#8220;modprobe pcspkr&#8221;.</p>
<p>Your roommate will thank me for this&#8230; whether he/she knows it or not <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.allmybase.com/2009/05/03/stfu/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
	</channel>
</rss>
