<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title># Defining Chaos In Order</title>
	
	<link>http://mattiasgeniar.be</link>
	<description>Tips, Tricks &amp; Rants of a Sys Admin</description>
	<lastBuildDate>Tue, 07 Sep 2010 20:04:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/mattiasgeniar" /><feedburner:info uri="mattiasgeniar" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><feedburner:emailServiceId>mattiasgeniar</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Compile a (CentOS) Kernel And IPTables With TPROXY Support</title>
		<link>http://feedproxy.google.com/~r/mattiasgeniar/~3/k0Dw8TM0nJE/</link>
		<comments>http://mattiasgeniar.be/2010/09/01/compile-a-centos-kernel-and-iptables-with-tproxy-support/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 18:00:54 +0000</pubDate>
		<dc:creator>Matti</dc:creator>
				<category><![CDATA[Devops]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://mattiasgeniar.be/?p=2212</guid>
		<description><![CDATA[A default (CentOS) kernel doesn't have TPROXY support, which is needed if you want to it to behave as a transparant proxy. This is useful if you have a cluster set-up with one or more loadbalancers, but you still want &#8230; <a href="http://mattiasgeniar.be/2010/09/01/compile-a-centos-kernel-and-iptables-with-tproxy-support/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A default (CentOS) kernel doesn't have TPROXY support, which is needed if you want to it to behave as a <strong>transparant proxy</strong>. This is useful if you have a cluster set-up with one or more loadbalancers, but you still want each underlying node to see the original source IP from the request.</p>
<p>Without transparant proxy (TPROXY), all request would appear to come from the load balancer's IP address, instead of the actual client (which can mess up your logging, scripts, ...).</p>
<p>This article is derived from the "<a href="http://howtoforge.com/kernel_compilation_centos" onclick="pageTracker._trackPageview('/outgoing/howtoforge.com/kernel_compilation_centos?referer=');">How To Compile a Kernel - The CentOS way</a>" pages at howtoforge.com, and the guides at <a href="http://blog.loadbalancer.org/configure-haproxy-with-tproxy-kernel-for-full-transparent-proxy/" onclick="pageTracker._trackPageview('/outgoing/blog.loadbalancer.org/configure-haproxy-with-tproxy-kernel-for-full-transparent-proxy/?referer=');">LoadBalancer.org</a>.<span id="more-2212"></span></p>
<p>We will assume you have a running CentOS at this point (version 5.5 or later). First up, <strong>download the kernel</strong> source. Since the TPROXY patch isn't compatible with all Kernel versions, we're stuck with the 2.6.25 kernel. Please <a href="http://www.kernel.org/pub/linux/kernel/v2.6/" onclick="pageTracker._trackPageview('/outgoing/www.kernel.org/pub/linux/kernel/v2.6/?referer=');">browse the Kernel Source Index</a>, and pick the latest linux-2.6.25.* kernel work from. (if the version is no longer available for download, <a href="http://mattiasgeniar.be/downloads/tproxy-support/linux-2.6.25.20.tar.gz">here's a local copy</a>).</p>
<blockquote><p>cd /usr/src<br />
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.20.tar.gz</p></blockquote>
<p>Now, unpack the source code, and symlink the resulting directory to 'linux' (will make things easier later on).</p>
<blockquote><p>tar xzf linux-2.6.25.20.tar.gz<br />
ln -s linux-2.6.25.20 linux</p></blockquote>
<p>Next step is to download the TPROXY patch. (if the version is no longer available for download, <a href="http://mattiasgeniar.be/downloads/tproxy-support/tproxy-kernel-2.6.25-20080519-165031-1211208631.tar.bz2">here's a local copy</a>)</p>
<blockquote><p>wget http://www.balabit.com/downloads/files/tproxy/tproxy-kernel-2.6.25-20080519-165031-1211208631.tar.bz2<br />
tar xjf tproxy-kernel-2.6.25-20080519-165031-1211208631.tar.bz2</p></blockquote>
<p>Now to apply the patch mentioned.</p>
<blockquote><p>cd linux/<br />
cat ../tproxy-2.6.25-20080519/00* | patch -p1 --dry-run<br />
cat ../tproxy-2.6.25-20080519/00* | patch -p1</p></blockquote>
<p>To start compiling the kernel, we'll first clean any leftovers that may exist.</p>
<blockquote><p>make clean &amp;&amp; make mrproper</p></blockquote>
<p>And copy our current Kernel configuration to our local .config file. This will help in making sure our currently installed applications will continue working, and we don't modify the kernel too heavily.</p>
<blockquote><p>cp /boot/config-`uname -r` ./.config</p></blockquote>
<p>Make sure you have all the necessary developer-tools, to compile the kernel.</p>
<blockquote><p>yum install make rpm-build gcc gcc-c++ ncurses-devel elfutils elfutils-libs libstdc++-devel</p></blockquote>
<p>Let's pop up the kernel configuration menu, which will allow us to easily change configs.</p>
<blockquote><p>make menuconfig</p></blockquote>
<p>Since we saved our currently running Kernel's configuration in the <strong>.config</strong> file, we will choose the "<strong>Load an alternative Configuration File</strong>" option, and enter <strong>.config </strong>as the filename.</p>
<div id="attachment_2232" class="wp-caption alignnone" style="width: 310px"><a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/1_load_alternate_configuration_file.png" rel="lightbox[2212]"><img class="size-medium wp-image-2232 " title="1_load_alternate_configuration_file" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/1_load_alternate_configuration_file-300x266.png" alt="" width="300" height="266" /></a><p class="wp-caption-text">menuconfig: load config</p></div>
<p>Let's enable TPROXY support. Navigate in the menu to <em> </em></p>
<ul>
<li><em>Networking</em></li>
<li><em>&gt; Networking support</em></li>
<li><strong>&gt;</strong> <em>Networking options</em></li>
<li><strong>&gt; </strong><em>Network packet filtering framework (Netfilter)<br />
</em></li>
<li><strong>&gt;</strong> <em>Core Netfilter Configuration</em></li>
</ul>
<p>and highlight:</p>
<blockquote><p>Transparent proxying support (EXPERIMENTAL)<br />
Netfilter Xtables support (required for ip_tables)<br />
Netfilter Connection tracking<br />
&gt; Connection tracking flow accounting<br />
&gt; Connection mark tracking support<br />
"TPROXY" target support (EXPERIMENTAL)<br />
"socket" match support (EXPERIMENTAL)</p></blockquote>
<p>Beware that you can check these options in 2 ways:</p>
<blockquote><p>[*]: Built-in<br />
[M]: Module</p></blockquote>
<p>Try to select the options listed above as [M], so they are modules.</p>
<p>Then hit <strong>&lt;ESC&gt;&lt;ESC&gt;</strong> a few times, to get back to the main menu, and navigate to <em>General Setup <strong>&gt;</strong> () Local version - append to kernel release</em>. Add a custom suffix there, to identify this kernel. I've choosen "<strong>-tproxy</strong>" as suffix (so I know it has tproxy support). It's important you add a version number if you try to reinstall the kernel again afterwards, or you'll end up with "this package is already installed" messages.</p>
<p>Once you've applied the above changes, exit the menu and confirm you want to <strong>save your changes</strong>.</p>
<p>Now start compiling the source and create the RPM install file.</p>
<blockquote><p>make rpm</p></blockquote>
<p>This _will_ take a long time. If you're running this inside a virtual machine, consider adding more (virtual) CPU's to speed up this process. It's safe to assume this will run for at least 1 hour, probably more.</p>
<p>After it's been created, you will find the resulting <strong>Source RPM</strong> file in /usr/src/redhat/SRPMS/.</p>
<blockquote><p>lb02.lab.mojah.be linux $ ls -al /usr/src/redhat/SRPMS/<br />
total 62124<br />
drwxr-xr-x 2 root root     4096 Aug 21 17:31 .<br />
drwxr-xr-x 7 root root     4096 Aug 21 16:20 ..<br />
-rw-r--r-- 1 root root 63536285 Aug 21 17:27 <strong>kernel-2.6.25.20tproxy-1.src.rpm</strong></p></blockquote>
<p>And the <strong>binary RPM</strong> file in /usr/src/redhat/RPMS/i386/ (or x86_64 if you're running 64 bit).</p>
<blockquote><p>lb02.lab.mojah.be linux $ ls -al /usr/src/redhat/RPMS/i386/<br />
total 120256<br />
drwxr-xr-x 2 root root      4096 Aug 21 17:32 .<br />
drwxr-xr-x 9 root root      4096 Aug 21 16:20 ..<br />
-rw-r--r-- 1 root root 123002989 Aug 21 17:31 <strong>kernel-2.6.25.20tproxy-1.i386.rpm</strong></p></blockquote>
<p>Now it's time to install our custom kernel.</p>
<blockquote><p>rpm -ivh --nodeps /usr/src/redhat/RPMS/i386/kernel-2.6.25.20tproxy-1.i386.rpm</p></blockquote>
<p>And create the ramdisk for our system.</p>
<blockquote><p>mkinitrd /boot/initrd-2.6.25.20-tproxy.img 2.6.25.20-tproxy</p></blockquote>
<p>Let's see what files were made in the /boot partition. We'll need these filenames to edit the grub config later on.</p>
<blockquote><p>lb02.lab.mojah.be linux $ ls -alh /boot/ | grep -i tproxy<br />
-rw-r--r--  1 root root   73K Aug 21 17:27 config-2.6.25.20-tproxy<br />
-rw-------  1 root root  3.2M Aug 21 17:33 <strong>initrd-2.6.25.20-tproxy.img</strong><br />
-rw-r--r--  1 root root 1015K Aug 21 17:27 System.map-2.6.25.20-tproxy<br />
-rw-r--r--  1 root root  1.9M Aug 21 17:27 <strong>vmlinuz-2.6.25.20-tproxy</strong></p></blockquote>
<p>And edit the menu-file.</p>
<blockquote><p>vi /boot/grub/menu.lst</p></blockquote>
<p>And add the following snippet below the "hiddenmenu" line, and right above the first kernel declaration. This consists of copying an already existing boot-item, and modify the vmlinuz and initrd locations.</p>
<blockquote><p>title CentOS-Tproxy (2.6.25.20-tproxy)<br />
root (hd0,0)<br />
kernel <strong>/vmlinuz-2.6.25.20-tproxy</strong> ro root=/dev/VolGroup00/LogVol00<br />
initrd <strong>/initrd-2.6.25.20-tproxy.img</strong></p></blockquote>
<p>The /vmlinuz and /initrd should point to the filenames you discovered earlier. Please don't directly copy/paste the example above, but copy an entry from your file, and modify it (as to preserve the hard disk order and volume names).</p>
<p>Now reboot into your newly created kernel. Your boot screen would look a bit like this now, with a notice to the newly named kernel.</p>
<div id="attachment_2242" class="wp-caption alignnone" style="width: 310px"><a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/2_custom_kernel_screen.png" rel="lightbox[2212]"><img class="size-medium wp-image-2242" title="2_custom_kernel_screen" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/2_custom_kernel_screen-300x224.png" alt="" width="300" height="224" /></a><p class="wp-caption-text">tproxy kernel</p></div>
<p>You can verify this once the server's booted up.</p>
<blockquote><p>lb02.lab.mojah.be ~ $ <strong>uname -a</strong><br />
Linux lb02.lab.mojah.be <strong>2.6.25.20-tproxy</strong> #1 SMP Sat Aug 21 17:22:41 CEST 2010 i686 i686 i386 GNU/Linux</p></blockquote>
<p>Now we have our kernel with TPROXY support running, time to <strong>compile and patch our iptables</strong> to make use of it. To get started, download 1.4.0 iptables source. It's import you take the <strong>1.4.0</strong> version, newer versions won't work. (if the version is no longer available for download, <a href="http://mattiasgeniar.be/downloads/tproxy-support/iptables-1.4.0.tar.bz2">here's a local copy</a>).</p>
<blockquote><p>cd /usr/src/<br />
wget http://www.netfilter.org/projects/iptables/files/iptables-1.4.0.tar.bz2<br />
tar xjf iptables-1.4.0.tar.bz2</p></blockquote>
<p>Now also download the tproxy iptables patch. (if the version is no longer available for download, <a href="http://mattiasgeniar.be/downloads/tproxy-support/tproxy-iptables-1.4.0-20080521-113954-1211362794.patch">here's a local copy</a>)</p>
<blockquote><p>wget http://www.balabit.com/downloads/files/tproxy/tproxy-iptables-1.4.0-20080521-113954-1211362794.patch</p></blockquote>
<p>Apply the tproxy path.</p>
<blockquote><p>cd iptables-1.4.0/<br />
cat ../tproxy-iptables-1.4*.patch | patch -p1<br />
make &amp;&amp; make install</p></blockquote>
<p>Now you've installed both your kernel, and iptables, with the tproxy patch.</p>
<p><strong>Downloads</strong></p>
<p><a href="http://mattiasgeniar.be/downloads/tproxy-support/iptables-1.4.0.tar.bz2">iptables 1.4.0.tar.bz</a>: full iptables source code<br />
<a href="http://mattiasgeniar.be/downloads/tproxy-support/linux-2.6.25.20.tar.gz">linux-2.6.25.20.tar.gz</a>: full kernel 2.6.25.20 source code<br />
<a href="http://mattiasgeniar.be/downloads/tproxy-support/tproxy-iptables-1.4.0-20080521-113954-1211362794.patch">tproxy-iptables-1.4.0-20080521.patch</a>: tproxy patch for iptables<br />
<a href="http://mattiasgeniar.be/downloads/tproxy-support/tproxy-kernel-2.6.25-20080519-165031-1211208631.tar.bz2">tproxy-kernel-2.6.25-20080519.tar.bz2</a>: tproxy patch for 2.6.25 kernel</p>
<p><a href="http://mattiasgeniar.be/downloads/tproxy-support/menu.config">.config</a>: the .config file I used to compile my kernel (with all necessary modules checked)<br />
<a href="http://mattiasgeniar.be/downloads/tproxy-support/kernel-2.6.25.20tproxyfourteen-1.i386.rpm">kernel-2.6.25.20tproxy.i386.rpm</a>: rpm install file for a 32-bit (i386) kernel with tproxy support. Follow the "mkinitrd" steps above to install &amp; use this kernel. The kernel is named "2.6.25.20-tproxyfourteen".</p>
<p><strong>Troubleshooting: unknown match socket<br />
</strong></p>
<p>If you've done the above steps, and still get the <strong>UNKNOWN match `socket'</strong> message in your iptables, you've probably skipped a kernel module required for this to work.</p>
<p><strong>Troubleshooting: bad exit status during kernel compile</strong></p>
<p>You could run into something similar to the following when compiling your kernel.</p>
<blockquote><p>... [snip]<br />
LD [M]  drivers/scsi/scsi_mod.o<br />
LD      drivers/built-in.o<br />
error: Bad exit status from /var/tmp/rpm-tmp.48540 (%build)</p>
<p>RPM build errors:<br />
Bad exit status from /var/tmp/rpm-tmp.48540 (%build)<br />
make[1]: *** [rpm] Error 1<br />
make: *** [rpm] Error 2</p></blockquote>
<p>That will prevent you kernel from successfully compiling. It usually means you selected a kernel option with a certain dependency that wasn't checked. So it's dependent on an option, that's not being compiled.</p>
<p>Tricky part here is to track down which one, and I'm afraid to say I don't know how. Also, it's beyond the scope of this document. If you want to retry the compilation again, make sure to run:</p>
<blockquote><p>cp .config .config_backup<br />
make clean &amp;&amp; make mrproper</p></blockquote>
<p>to reset your current attempt, clear created files and reset the config back to zero. Your "broken" config can then still be found in the .config_backup file. In my experience, it's better to just start all over ...</p>
<p>You could also consider deleting the generated files in <em>/usr/src/redhat/BUILD/kernel-*</em> as they are obsolete now.</p>
<img src="http://feeds.feedburner.com/~r/mattiasgeniar/~4/k0Dw8TM0nJE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mattiasgeniar.be/2010/09/01/compile-a-centos-kernel-and-iptables-with-tproxy-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mattiasgeniar.be/2010/09/01/compile-a-centos-kernel-and-iptables-with-tproxy-support/</feedburner:origLink></item>
		<item>
		<title>Increase A VMware Disk Size (VMDK) Formatted As Linux LVM</title>
		<link>http://feedproxy.google.com/~r/mattiasgeniar/~3/H9jwjtE9v8M/</link>
		<comments>http://mattiasgeniar.be/2010/08/27/increase-a-vmware-disk-size-vmdk-formatted-as-linux-lvm/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 18:00:37 +0000</pubDate>
		<dc:creator>Matti</dc:creator>
				<category><![CDATA[Devops]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://mattiasgeniar.be/?p=2216</guid>
		<description><![CDATA[To increase the size of your VMware Virtual Machine, you need to do 2 major steps. First, you need to increase the disk's size in your vSphere Client or through the CLI. This will increase the "hardware" disk that your &#8230; <a href="http://mattiasgeniar.be/2010/08/27/increase-a-vmware-disk-size-vmdk-formatted-as-linux-lvm/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>To increase the size of your VMware Virtual Machine, you need to do 2 major steps. First, you need to <strong>increase the disk's size</strong> in your vSphere Client or through the CLI. This will increase the "hardware" disk that your Virtual Machine can see. Then, you need to utilize that extra space by <strong>partitioning </strong>it. If you're interested in just resizing your Linux LVM, please proceed to step 2.</p>
<p>In this example, I'm increasing a 3GB disk to a 10GB disk (so you can follow using the examples).</p>
<p>I would advise you to read the excellent documention on <a href="http://tldp.org/HOWTO/LVM-HOWTO/commontask.html" onclick="pageTracker._trackPageview('/outgoing/tldp.org/HOWTO/LVM-HOWTO/commontask.html?referer=');">Logical Volume Management on tldp.org</a>.</p>
<p>Just a small note beforehand; if your server supports hot adding new disks, you can just as easily add a new Hard Disk to your Virtual Machine. Doing so, would mean you can increase your LVM's size <strong>without having to reboot</strong>. If you increase the size of your currently attached disk (like the example below), you'll need to reboot your server at least once to re-read your partition table.<span id="more-2216"></span></p>
<h3>1) The "hardware" part, "physically" adding diskspace to your VM</h3>
<p>Increasing the disk size can be done via the vSphere Client, by editing the settings of the VM (right click &gt; Settings).</p>
<div id="attachment_2218" class="wp-caption alignnone" style="width: 310px"><a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/1_edit_settings_vm.png" rel="lightbox[2216]"><img class="size-medium wp-image-2218 " title="1_edit_settings_vm" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/1_edit_settings_vm-300x238.png" alt="" width="300" height="238" /></a><p class="wp-caption-text">Edit settings</p></div>
<p>And increasing the privisioned disk space.</p>
<div id="attachment_2219" class="wp-caption alignnone" style="width: 310px"><a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/2_increase_disk_provisioning.png" rel="lightbox[2216]"><img class="size-medium wp-image-2219 " title="2_increase_disk_provisioning" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/2_increase_disk_provisioning-300x263.png" alt="" width="300" height="263" /></a><p class="wp-caption-text">Increase disk size</p></div>
<p>If the "Provisioned Size" area (top right corner) is greyed out, consider turning off the VM first (if it does not allow "hot adding" of disks/sizes), and check if you have any snapshots made of that VM. You can not increase the disk size, as long as there are available snapshots.</p>
<p>Alternatively, you can also choose "<strong>Add...</strong>" to add new Hardware to your VM, with the desired extra space.</p>
<h3>2) Partitioning the unalloced space</h3>
<p>Once you've changed the disk's size, either boot up your VM again, or restart if it was still running. Linux needs to boot with the new disk, so it can see you've added (unallocated) disk space.</p>
<p>Once you've booted again, you can check if the extra space can be seen on the disk.</p>
<blockquote><p>lb02.lab.mojah.be ~ $ <strong>fdisk -l</strong></p>
<p><strong>Disk /dev/sda: 10.7 GB</strong>, 10737418240 bytes<br />
255 heads, 63 sectors/track, 1305 cylinders<br />
Units = cylinders of 16065 * 512 = 8225280 bytes</p>
<p>Device Boot      Start         End      Blocks   Id  System<br />
/dev/sda1   *           1          13      104391   83  Linux<br />
/dev/sda2              14         391     3036285   8e  Linux LVM</p></blockquote>
<p>So the server can now see the 10GB hard disk. Let's create a partition, by start fdisk for the /dev/sda device.</p>
<blockquote><p>lb02.lab.mojah.be ~ $ <strong>fdisk /dev/sda</strong></p>
<p>The number of cylinders for this disk is set to 1305.<br />
There is nothing wrong with that, but this is larger than 1024,<br />
and could in certain setups cause problems with:<br />
1) software that runs at boot time (e.g., old versions of LILO)<br />
2) booting and partitioning software from other OSs<br />
(e.g., DOS FDISK, OS/2 FDISK)</p>
<p>Command (m for help): <strong>n</strong></p></blockquote>
<p>Now enter 'n', to create a new partition.</p>
<blockquote><p>Command action<br />
e   extended<br />
p   primary partition (1-4)<br />
<strong> p</strong></p></blockquote>
<p>Now choose "<strong>p</strong>" to create a new primary partition. Please note, your system can only have 4 primary partitions on this disk! If you've already reached this limit, create an extended partition.</p>
<blockquote><p>Partition number (1-4): <strong>3</strong></p></blockquote>
<p>Choose your partition number. Since I already had <strong>/dev/sda1</strong> and <strong>/dev/sda2</strong>, the logical number would be <strong>3</strong>.</p>
<blockquote><p>First cylinder (392-1305, default 392): <strong>&lt;enter&gt;</strong><br />
Using default value 392<br />
Last cylinder or +size or +sizeM or +sizeK (392-1305, default 1305): <strong>&lt;enter&gt;</strong><br />
Using default value 1305</p></blockquote>
<p>Note; the cylinder values will vary on your system. It should be safe to just hint enter, as fdisk will give you a default value for the first and last cylinder (and for this, it will use the newly added diskspace).</p>
<blockquote><p>Command (m for help): <strong>t</strong><br />
Partition number (1-4): <strong>3<br />
</strong>Hex code (type L to list codes): <strong>8e</strong><br />
Changed system type of partition 3 to 8e (Linux LVM)</p></blockquote>
<p>Now type <strong>t</strong> to change the partition type. When prompted, enter the number of the partition you've just created in the previous steps. When you're asked to enter the "Hex code", enter <strong>8e</strong>, and confirm by hitting enter.</p>
<blockquote><p>Command (m for help): <strong>w</strong></p></blockquote>
<p>Once you get back to the main command within fdisk, type <strong>w</strong> to write your partitions to the disk. You'll get a message about the kernel still using the old partition table, and to <strong>reboot to use the new table</strong>. Please obey kindly, and reboot the virtual machine.</p>
<p>After you've rebooted, you can see the newly created partition with fdisk.</p>
<blockquote><p>lb02.lab.mojah.be ~ $ <strong>fdisk -l</strong></p>
<p>Disk /dev/sda: 10.7 GB, 10737418240 bytes<br />
255 heads, 63 sectors/track, 1305 cylinders<br />
Units = cylinders of 16065 * 512 = 8225280 bytes</p>
<p>Device Boot      Start         End      Blocks   Id  System<br />
/dev/sda1   *           1          13      104391   83  Linux<br />
/dev/sda2              14         391     3036285   8e  Linux LVM<br />
<strong>/dev/sda3             392        1305     7341705   8e  Linux LVM</strong></p></blockquote>
<p>Now, create the physical volume as a basis for your LVM. Please replace <strong>/dev/sda3</strong> with the newly created partition.</p>
<blockquote><p>lb02.lab.mojah.be ~ $ <strong>pvcreate /dev/sda3</strong><br />
Physical volume "/dev/sda3" successfully created</p></blockquote>
<p>Now find out how your Volume Group is called.</p>
<blockquote><p>lb02.lab.mojah.be ~ $ <strong>vgdisplay</strong><br />
--- Volume group ---<br />
VG Name               <strong>VolGroup00</strong><br />
...</p></blockquote>
<p>Let's extend that Volume Group by adding the newly created physical volume to it.</p>
<blockquote><p>lb02.lab.mojah.be ~ $ <strong>vgextend VolGroup00 /dev/sda3</strong><br />
Volume group "VolGroup00" successfully extended</p></blockquote>
<p>With pvscan, we can see our newly added physical volume, and the usable space (7GB in this case).</p>
<blockquote><p>lb02.lab.mojah.be ~ $ <strong>pvscan</strong><br />
PV /dev/sda2   VG VolGroup00   lvm2 [2.88 GB / 0    free]<br />
PV /dev/sda3   VG VolGroup00   lvm2 [7.00 GB / <strong>7.00 GB</strong> free]<br />
Total: 2 [9.88 GB] / in use: 2 [9.88 GB] / in no VG: 0 [0   ]</p></blockquote>
<p>Now we can extend Logical Volume (as opposed to the Physical Volume we added to the group earlier). The command is "<em>lvextend -L+[SIZE] /dev/VolGroupxx</em>".</p>
<blockquote><p>lb02.lab.mojah.be ~ $ <strong>lvextend -L+7GB /dev/VolGroup00/LogVol00</strong><br />
Extending logical volume LogVol00 to 9.38 GB<br />
Logical volume LogVol00 successfully resized</p></blockquote>
<p>If you're running this on Ubuntu, use the following.</p>
<blockquote><p>lb02.lab.mojah.be ~ $ <strong>lvextend -L+7GB /dev/mapper/vg-name</strong></p></blockquote>
<p>All that remains now, it to resize the file system to the volume group, so we can use the space. Replace the path to the correct /dev device if you're on ubuntu/debian like systems.</p>
<blockquote><p>lb02.lab.mojah.be ~ $ <strong>resize2fs /dev/VolGroup00/LogVol00</strong><br />
resize2fs 1.39 (29-May-2006)<br />
Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required<br />
Performing an on-line resize of /dev/VolGroup00/LogVol00 to 2457600 (4k) blocks.<br />
The filesystem on /dev/VolGroup00/LogVol00 is now 2457600 blocks long.</p></blockquote>
<p>And we're good to go!</p>
<blockquote><p>lb02.lab.mojah.be ~ $ <strong>df -h</strong><br />
Filesystem            Size  Used Avail Use% Mounted on<br />
/dev/mapper/VolGroup00-LogVol00<strong> 9.1G</strong> 1.8G  6.9G  21% /<br />
/dev/sda1              99M   18M   77M  19% /boot<br />
tmpfs                 125M     0  125M   0% /dev/shm</p></blockquote>
<img src="http://feeds.feedburner.com/~r/mattiasgeniar/~4/H9jwjtE9v8M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mattiasgeniar.be/2010/08/27/increase-a-vmware-disk-size-vmdk-formatted-as-linux-lvm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mattiasgeniar.be/2010/08/27/increase-a-vmware-disk-size-vmdk-formatted-as-linux-lvm/</feedburner:origLink></item>
		<item>
		<title>Compiling, Running and Cursing on Chromium OS – Getting It To Work</title>
		<link>http://feedproxy.google.com/~r/mattiasgeniar/~3/LzcAEmro8Vk/</link>
		<comments>http://mattiasgeniar.be/2010/08/27/compiling-running-and-cursing-on-chromium-os-getting-it-to-work/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 23:05:06 +0000</pubDate>
		<dc:creator>Matti</dc:creator>
				<category><![CDATA[Devops]]></category>
		<category><![CDATA[chromium]]></category>
		<category><![CDATA[compile]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://mattiasgeniar.be/?p=2170</guid>
		<description><![CDATA[Here's how to get started on compiling Chromium OS from source, and running the operating system inside a virtual machine. The cursing part is mainly to set it all up, as it's quite cumbersome. In order to inspire you to &#8230; <a href="http://mattiasgeniar.be/2010/08/27/compiling-running-and-cursing-on-chromium-os-getting-it-to-work/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Here's how to get started on <strong>compiling Chromium OS from source</strong>, and running the operating system inside a virtual machine. The cursing part is mainly to set it all up, as it's quite cumbersome.</p>
<p>In order to inspire you to try the same (ahum), here are some screenshots of the developer build made at Thursday, August 26th 2010.</p>
<p><a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/01_welcome_setup.png" rel="lightbox[2170]"><img class="alignnone size-thumbnail wp-image-2352" title="01_welcome_setup" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/01_welcome_setup-150x150.png" alt="" width="150" height="150" /></a> <a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/02_chromium_updates.png" rel="lightbox[2170]"><img class="alignnone size-thumbnail wp-image-2353" title="02_chromium_updates" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/02_chromium_updates-150x150.png" alt="" width="150" height="150" /></a> <a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/03_login.png" rel="lightbox[2170]"><img class="alignnone size-thumbnail wp-image-2354" title="03_login" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/03_login-150x150.png" alt="" width="150" height="150" /></a> <a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/04_profile_image.png" rel="lightbox[2170]"><img class="alignnone size-thumbnail wp-image-2355" title="04_profile_image" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/04_profile_image-150x150.png" alt="" width="150" height="150" /></a></p>
<p><a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/05_home_screen.png" rel="lightbox[2170]"><img class="alignnone size-thumbnail wp-image-2358" title="05_home_screen" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/05_home_screen-150x150.png" alt="" width="150" height="150" /></a> <a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/06_relog_after_reboot.png" rel="lightbox[2170]"><img class="alignnone size-thumbnail wp-image-2359" title="06_relog_after_reboot" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/06_relog_after_reboot-150x150.png" alt="" width="150" height="150" /></a> <a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/07_bug_reports.png" rel="lightbox[2170]"><img class="alignnone size-thumbnail wp-image-2360" title="07_bug_reports" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/07_bug_reports-150x150.png" alt="" width="150" height="150" /></a> <a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/08_browsing.png" rel="lightbox[2170]"><img class="alignnone size-thumbnail wp-image-2361" title="08_browsing" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/08_browsing-150x150.png" alt="" width="150" height="150" /></a></p>
<p><a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/09_ethernet_settings.png" rel="lightbox[2170]"><img class="alignnone size-thumbnail wp-image-2362" title="09_ethernet_settings" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/09_ethernet_settings-150x150.png" alt="" width="150" height="150" /></a> <a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/10_security_information.png" rel="lightbox[2170]"><img class="alignnone size-thumbnail wp-image-2363" title="10_security_information" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/10_security_information-150x150.png" alt="" width="150" height="150" /></a> <a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/10b_use_side_tabs.png" rel="lightbox[2170]"><img class="alignnone size-thumbnail wp-image-2364" title="10b_use_side_tabs" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/10b_use_side_tabs-150x150.png" alt="" width="150" height="150" /></a> <a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/11_options_system.png" rel="lightbox[2170]"><img class="alignnone size-thumbnail wp-image-2365" title="11_options_system" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/11_options_system-150x150.png" alt="" width="150" height="150" /></a></p>
<p><a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/12_options_internet.png" rel="lightbox[2170]"><img class="alignnone size-thumbnail wp-image-2366" title="12_options_internet" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/12_options_internet-150x150.png" alt="" width="150" height="150" /></a> <a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/13_options_basics.png" rel="lightbox[2170]"><img class="alignnone size-thumbnail wp-image-2367" title="13_options_basics" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/13_options_basics-150x150.png" alt="" width="150" height="150" /></a> <a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/14_options_personal_stuff.png" rel="lightbox[2170]"><img class="alignnone size-thumbnail wp-image-2368" title="14_options_personal_stuff" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/14_options_personal_stuff-150x150.png" alt="" width="150" height="150" /></a> <a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/15_options_under_the_hood.png" rel="lightbox[2170]"><img class="alignnone size-thumbnail wp-image-2369" title="15_options_under_the_hood" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/15_options_under_the_hood-150x150.png" alt="" width="150" height="150" /></a></p>
<p>There are still some nasty bugs in the OS (especially in a VMware environment) which drop your screen/video from time to time to a black image, and there don't seem to be any apps available yet. So errr ...  it's only a quick-booting (8 seconds!) crashing "browser", but hey - it's cool, amiright?!</p>
<p><span id="more-2170"></span></p>
<h3>1) Get <strong>Ubuntu 10.04</strong>, 64-bit, and install it.</h3>
<p>You'll need around <strong>40GB </strong>of free space, and root privileges (through sudo) on your system.</p>
<h3>2) Run the following to <a href="http://code.google.com/p/chromium/wiki/LinuxBuildInstructionsPrerequisites#Ubuntu_Setup" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/chromium/wiki/LinuxBuildInstructionsPrerequisites_Ubuntu_Setup?referer=');">install the <strong>pre-requisites</strong></a>.</h3>
<blockquote><p>$ sudo apt-get install bison fakeroot flex g++ g++-multilib gperf   libapache2-mod-php5 libasound2-dev libbz2-dev libcairo2-dev   libdbus-glib-1-dev libgconf2-dev libgl1-mesa-dev libglu1-mesa-dev   libglib2.0-dev libgtk2.0-dev libjpeg62-dev libnspr4-dev libnss3-dev   libpam0g-dev libsqlite3-dev libxslt1-dev libxss-dev   mesa-common-dev msttcorefonts patch perl pkg-config python   python-old-doctools rpm subversion libcupsys2-dev libgnome-keyring-dev   libcurl4-gnutls-dev libcupsys2-dev</p></blockquote>
<p>Or you can download the <strong><a href="http://src.chromium.org/svn/trunk/src/build/install-build-deps.sh" onclick="pageTracker._trackPageview('/outgoing/src.chromium.org/svn/trunk/src/build/install-build-deps.sh?referer=');">install-build-deps.sh</a></strong> and run it, to have it download automatically. It'll do some additional config as well, so I do prefer this method.</p>
<blockquote><p>$<strong><strong> </strong></strong>wget <a href="http://src.chromium.org/svn/trunk/src/build/install-build-deps.sh" onclick="pageTracker._trackPageview('/outgoing/src.chromium.org/svn/trunk/src/build/install-build-deps.sh?referer=');">http://src.chromium.org/svn/trunk/src/build/install-build-deps.sh</a><br />
$<strong><strong> </strong></strong>sudo chmod +x install-build-deps.sh<br />
$ sudo ./install-build-deps.sh</p></blockquote>
<p>That'll probably take a while, it should download around 200MB worth of extra software.</p>
<h3>3) Install the depot_tools (optional)</h3>
<blockquote><p>$ cd /usr/local/src/<br />
$ svn co http://src.chromium.org/svn/trunk/tools/depot_tools<br />
$ export PATH=`pwd`/depot_tools:"$PATH"</p></blockquote>
<p>This will install the <a href="http://code.google.com/p/gclient/" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/gclient/?referer=');"><strong>gclient</strong></a> binary. While it's part of the deprecated way of retrieving source code, it's still a valid tool to use.</p>
<h3>4) Get git and repo</h3>
<blockquote><p>$ sudo apt-get install git-core subversion</p></blockquote>
<p>The repo tool as its install instructions <a href="http://source.android.com/source/git-repo.html" onclick="pageTracker._trackPageview('/outgoing/source.android.com/source/git-repo.html?referer=');">here</a>:</p>
<blockquote><p>$ wget http://android.git.kernel.org/repo -O /usr/bin/repo<br />
$ sudo chmod a+x /usr/bin/repo</p></blockquote>
<h3>5) Get the <a href="http://dev.chromium.org/chromium-os/building-chromium-os/getting-the-chromium-os-source-code" onclick="pageTracker._trackPageview('/outgoing/dev.chromium.org/chromium-os/building-chromium-os/getting-the-chromium-os-source-code?referer=');">Chromium OS source</a></h3>
<p>Make sure you run this as a <strong>non-root</strong> user. Alle steps following this one, should be done as a normal user. This user needs to have sudo-powers.</p>
<blockquote><p>$ cd /usr/local/src/<br />
$ mkdir chromiumos<br />
$ cd chromiumos/<br />
$ repo init -u http://src.chromium.org/git/manifest -m minilayout.xml</p></blockquote>
<p>Running the <em>repo init</em> will prompt you for your name and e-mail address, together with a question to enable color display for that user account.</p>
<blockquote><p>Your Name [root]: <strong>Name</strong><br />
Your Email [root@server.(none)]: <strong>name@email.com</strong><br />
Your identity is: <strong>Name &lt;name@mail.com&gt;</strong><br />
is this correct [y/n]? <strong>y</strong><br />
Enable color display in this user account (y/n)? <strong>y</strong></p></blockquote>
<p>Afterwards, you can start the code sync by running:</p>
<blockquote><p>$ repo sync</p></blockquote>
<p>That will download a lot of source code. At the time of writing, it exists of ~93 projects varying in size, for a total of <strong>2GB</strong>. So yes, this will take a while.</p>
<p>If you're getting "<a href="http://mattiasgeniar.be/2010/08/19/chromium-os-error-rpc-failed-result22-http-code-502/">error: RPC failed; result=22, HTTP code = 502</a>" error codes while it's syncing, have a <a href="http://mattiasgeniar.be/2010/08/19/chromium-os-error-rpc-failed-result22-http-code-502/">look here</a> for possible fixes.</p>
<h3>6) Start <a href="http://www.chromium.org/chromium-os/building-chromium-os/using-cros_workon#TOC-Create-a-chroot" onclick="pageTracker._trackPageview('/outgoing/www.chromium.org/chromium-os/building-chromium-os/using-cros_workon_TOC-Create-a-chroot?referer=');">building Chromium OS</a></h3>
<p>This is fun part. I'll cover this briefly since it lacks some fine-grain explanations on the Project's Wiki: <a href="http://www.chromium.org/chromium-os/building-chromium-os/using-cros_workon#TOC-Create-a-chroot" onclick="pageTracker._trackPageview('/outgoing/www.chromium.org/chromium-os/building-chromium-os/using-cros_workon_TOC-Create-a-chroot?referer=');">Building a Chromium-Based OS</a>. Again, be sure to follow those steps as a <strong>non-root</strong> user, with normal privileges.</p>
<blockquote><p>$ ln -s /usr/local/src/chromiumos/ ~/chromiumos<br />
$ cd ~/chromiumos/src/scripts/<br />
$ ./make_chroot</p></blockquote>
<p>This will make the chroot-environment, in which Chromium will be built. On commodity hardware, this'll take anywhere between 10-30 minutes.</p>
<p>Now, enter the chroot.</p>
<blockquote><p>$ cd ~/chromiumos/src/scripts/<br />
$ ./enter_chroot.sh</p></blockquote>
<p>And set up board for your system.</p>
<blockquote><p>(cros-chroot) $ cd ~/trunk/src/scripts/<br />
(cros-chroot) $ ./setup_board --board=x86-generic</p></blockquote>
<p>Build the Chromium packages.</p>
<blockquote><p>(cros-chroot) $ cd ~/trunk/src/scripts/<br />
(cros-chroot) $ ./build_packages --board=x86-generic</p></blockquote>
<p>And build the Chromium image for your board.</p>
<blockquote><p>(cros-chroot) $ ./build_image --board=x86-generic</p></blockquote>
<p>This will have generated a unique image for you.</p>
<blockquote><p>(cros-chroot) $ ls -alh ~/trunk/src/build/images/x86-generic<br />
total 16K<br />
drwxr-xr-x 4 mattias root 4.0K Aug 26 23:22 .<br />
drwxr-xr-x 3 mattias root 4.0K Aug 26 20:45 ..<br />
drwxr-xr-x 2 mattias eng  4.0K Aug 26 23:22 0.8.69.2010_08_26_2313-a1<br />
lrwxrwxrwx 1 mattias eng    25 Aug 26 23:22 latest -&gt; 0.8.69.2010_08_26_2313-a1</p></blockquote>
<p>Now, to easily test your image, you can convert it to a VMware VMDK file using the built-in convert script.</p>
<blockquote><p>(cros-chroot) $ cd ~/trunk/src/scripts/<br />
(cros-chroot) $ ./image_to_vm.sh --from=../build/images/x86-generic/latest/ --board=x86-generic --make_vmx --format vmware --vmdk chromium_os_x86-generic.vmdk --vmx chromium_os_x86-generic.vmx</p></blockquote>
<p>This will try to generate the VMware image, but changes are you'll run into the following error.</p>
<blockquote><p>./image_to_vm.sh: line 236: qemu-img: command not found</p></blockquote>
<p>You can solve this by first installing the necessary "qemu-img" package.</p>
<blockquote><p>(cros-chroot) $ sudo emerge app-emulation/qemu-softmmu</p></blockquote>
<p>And re-generating your VMware image.</p>
<blockquote><p>(cros-chroot) $ ./image_to_vm.sh --from=../build/images/x86-generic/latest/ --board=x86-generic --make_vmx --format vmware --vmdk chromium_os_x86-generic.vmdk --vmx chromium_os_x86-generic.vmx</p></blockquote>
<p>And you'll find your VMware files in the following directory.</p>
<blockquote><p>(cros-chroot) $ ls -alh ~/trunk/src/build/images/x86-generic/latest/<br />
drwxr-xr-x 5 mattias eng  4.0K Aug 27 00:07 .<br />
drwxr-xr-x 4 mattias root 4.0K Aug 26 23:22 ..<br />
-rw-r--r-- 1 mattias eng   191 Aug 27 00:06 boot.config<br />
-rw-r--r-- 1 mattias eng   834 Aug 26 23:13 boot.desc<br />
-rw-r--r-- 1 mattias eng  675M Aug 27 00:07 chromium_os_x86-generic.<strong>vmdk</strong><br />
-rw-r--r-- 1 mattias eng   381 Aug 27 00:07 chromium_os_x86-generic.<strong>vmx</strong></p></blockquote>
<p>Now exit the chrooted environment, and copy the VMware files found in the following location to your local computer.</p>
<blockquote><p>$ ls -alh ~/chromiumos/src/build/images/x86-generic/latest/</p></blockquote>
<p>Fire up ye old <a href="http://www.vmware.com/products/converter/" onclick="pageTracker._trackPageview('/outgoing/www.vmware.com/products/converter/?referer=');">VMware vCenter Converter</a>, choose the "VMware Workstation or VMware Virtual Machine" as source, and browse to your .VMX file.</p>
<div id="attachment_2350" class="wp-caption aligncenter" style="width: 310px"><a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/vmware_converter_image.png" rel="lightbox[2170]"><img class="size-medium wp-image-2350" title="vmware_converter_image" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/vmware_converter_image-300x233.png" alt="" width="300" height="233" /></a><p class="wp-caption-text">VMware Converter</p></div>
<p>Proceed with the wizard, crank up the assigned memory a bit (defaults to 32MB), and boot up your Virtual Machine.</p>
<p>Have fun!</p>
<img src="http://feeds.feedburner.com/~r/mattiasgeniar/~4/LzcAEmro8Vk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mattiasgeniar.be/2010/08/27/compiling-running-and-cursing-on-chromium-os-getting-it-to-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mattiasgeniar.be/2010/08/27/compiling-running-and-cursing-on-chromium-os-getting-it-to-work/</feedburner:origLink></item>
		<item>
		<title>Exclude Local Networks Via Juniper NetScreen-Remote VPN</title>
		<link>http://feedproxy.google.com/~r/mattiasgeniar/~3/KLWmO3VfR00/</link>
		<comments>http://mattiasgeniar.be/2010/08/26/exclude-local-networks-via-juniper-netscreen-remote-vpn/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 17:57:51 +0000</pubDate>
		<dc:creator>Matti</dc:creator>
				<category><![CDATA[Devops]]></category>
		<category><![CDATA[juniper]]></category>
		<category><![CDATA[vpn]]></category>

		<guid isPermaLink="false">http://mattiasgeniar.be/?p=2328</guid>
		<description><![CDATA[If you've configured your Juniper NetScreen-Remote VPN to route all your traffic through your VPN tunnel, you'll find you get stuck when accessing local IPs on your (home) network, such as a NAS, printers, computer shares, ... This is usually &#8230; <a href="http://mattiasgeniar.be/2010/08/26/exclude-local-networks-via-juniper-netscreen-remote-vpn/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you've configured your Juniper NetScreen-Remote VPN to route all your traffic through your VPN tunnel, you'll find you get stuck when accessing local IPs on your (home) network, such as a NAS, printers, computer shares, ...</p>
<p>This is usually how it's configured in the Security Policy Editor.</p>
<div id="attachment_2329" class="wp-caption aligncenter" style="width: 460px"><a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/01_juniper_netscreen_remote_default.png" rel="lightbox[2328]"><img class="size-full wp-image-2329" title="01_juniper_netscreen_remote_default" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/01_juniper_netscreen_remote_default.png" alt="" width="450" height="330" /></a><p class="wp-caption-text">NetScreen-Remote: IP Subnet/Mask 0.0.0.0</p></div>
<p>If you want to keep having access to your local IP range(s), create a new connection under "My Connections" and add it as follows.</p>
<div id="attachment_2330" class="wp-caption aligncenter" style="width: 602px"><a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/02_juniper_netscreen_remote_unsecure.png" rel="lightbox[2328]"><img class="size-full wp-image-2330" title="02_juniper_netscreen_remote_unsecure" src="http://mattiasgeniar.be/wp-content/uploads/2010/08/02_juniper_netscreen_remote_unsecure.png" alt="" width="592" height="336" /></a><p class="wp-caption-text">NetScreen-Remote: Local Network Exception(s)</p></div>
<p>Choose the following configuration settings.</p>
<ul>
<li>Connection Security: <strong>Non-secure</strong></li>
<li>ID Type: <strong>IP Subnet</strong></li>
<li>Subnet: <strong>172.16.0.0</strong></li>
<li>Mask: <strong>255.255.255.0</strong></li>
<li>Protocol: <strong>All</strong></li>
<li>Interface Name: <strong>Any</strong></li>
</ul>
<p>It goes without saying you you replace "172.16.0.0" with the IP range you want to have direct access to. Credits to <a href="http://davidgeens.be/" onclick="pageTracker._trackPageview('/outgoing/davidgeens.be/?referer=');">David Geens</a> for pointing it out!</p>
<img src="http://feeds.feedburner.com/~r/mattiasgeniar/~4/KLWmO3VfR00" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mattiasgeniar.be/2010/08/26/exclude-local-networks-via-juniper-netscreen-remote-vpn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mattiasgeniar.be/2010/08/26/exclude-local-networks-via-juniper-netscreen-remote-vpn/</feedburner:origLink></item>
		<item>
		<title>WordPress v3.x: Don’t Replace (Double &amp; Single) Dashes &amp; (Double &amp; Single) Quotes!</title>
		<link>http://feedproxy.google.com/~r/mattiasgeniar/~3/VQrzOYEnJG8/</link>
		<comments>http://mattiasgeniar.be/2010/08/23/wordpress-dont-replace-double-single-dash-quotes/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 18:00:41 +0000</pubDate>
		<dc:creator>Matti</dc:creator>
				<category><![CDATA[Devops]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://mattiasgeniar.be/?p=2262</guid>
		<description><![CDATA[WordPress has a built-in feature that will replace a double dash (noted as "--") with a single, but slighly longer, dash. This is great if you're a writer or reporter, but it's damn annoying if you're trying to write Linux &#8230; <a href="http://mattiasgeniar.be/2010/08/23/wordpress-dont-replace-double-single-dash-quotes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>WordPress has a built-in feature that will replace a double dash (noted as "--") with a single, but slighly longer, dash. This is great if you're a writer or reporter, but it's damn annoying if you're trying to write Linux commands, or any other form of code, where you need the -- characters to remain in place. The same applies to quotes (single ' or double "), being replaced with more stylish forward ticks.</p>
<p>So, let's fix that.<span id="more-2262"></span></p>
<p>Open up <strong>/wp-includes/formatting.php</strong> and find the lines around 56 and 57 (this will vary depending on your WordPress version), which start with:</p>
<blockquote><p>$static_characters = array_merge(array('---', ' -- ', '--', ' - ', ...<br />
$static_replacements = array_merge(array('&amp;#8212;', ' &amp;#8212; ', '&amp;#8211;', ' &amp;#8211; ', ...</p></blockquote>
<p>These lines effectively translate your double dashes (--) to the HTML character of a single dash. Remove the third element from every array there, so it looks something like this (please note the line continues, so just remove only the 3rd element from each array).</p>
<blockquote><p>$static_characters = array_merge(array('---', ' -- ', ' - ', ...<br />
$static_replacements = array_merge(array('&amp;#8212;', ' &amp;#8212; ', ' &amp;#8211; ', ...</p></blockquote>
<p>You can now happily write double dashes again!</p>
<blockquote><p># ./fix_wordpress.sh --without-silly-dashes --with-something-else</p></blockquote>
<p>If you want to prevent the single &amp; double quotes as being replaced automatically, open up your <strong>functions.php</strong> file in your /wp-includes/themes/&lt;themename&gt;/ folder. Create the file if doesn't exist. And add the following line of code all the way at the bottom.</p>
<blockquote><p># Custom: remove (single &amp; double) quote replacements in posts<br />
remove_filter('the_content', 'wptexturize');</p></blockquote>
<p>This will remove the filter defined in WordPress, so it will no longer replace your single &amp; double quotes.</p>
<img src="http://feeds.feedburner.com/~r/mattiasgeniar/~4/VQrzOYEnJG8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mattiasgeniar.be/2010/08/23/wordpress-dont-replace-double-single-dash-quotes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mattiasgeniar.be/2010/08/23/wordpress-dont-replace-double-single-dash-quotes/</feedburner:origLink></item>
		<item>
		<title>Chromium OS: error: RPC failed; result=22, HTTP code = 502</title>
		<link>http://feedproxy.google.com/~r/mattiasgeniar/~3/vdT23PBqSPQ/</link>
		<comments>http://mattiasgeniar.be/2010/08/19/chromium-os-error-rpc-failed-result22-http-code-502/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 20:39:32 +0000</pubDate>
		<dc:creator>Matti</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[chromium]]></category>

		<guid isPermaLink="false">http://mattiasgeniar.be/?p=2188</guid>
		<description><![CDATA[If you're trying to checkout the Chromium OS source code, you could run into the following problem that prevents you from getting any more source. Allthough it's normal to see 502 errors from time to time (the git server proxy &#8230; <a href="http://mattiasgeniar.be/2010/08/19/chromium-os-error-rpc-failed-result22-http-code-502/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you're trying to checkout the Chromium OS source code, you could run into the following problem that prevents you from getting any more source. Allthough it's normal to see <a href="http://www.chromium.org/chromium-os/building-chromium-os/using-cros_workon#TOC-I-see-rpc-502-errors.-What-do-I-do-" onclick="pageTracker._trackPageview('/outgoing/www.chromium.org/chromium-os/building-chromium-os/using-cros_workon_TOC-I-see-rpc-502-errors.-What-do-I-do-?referer=');">502 errors from time to time</a> (the git server proxy that's screwing things up), it is annoying.</p>
<blockquote><p>root@server: # <strong>gclient sync </strong><br />
Syncing projects:  27% (26/93)<br />
Initialized empty Git repository in /usr/local/src/chromiumos/chromiumos.git/src/third_party/chromiumos-overlay/.git/<br />
<strong>error: RPC failed; result=22, HTTP code = 502</strong></p></blockquote>
<p>After which the <strong>gclient</strong> would hang. Here's a quick work-around to at least get the rest of the source code, while Google fixes this git-problem.</p>
<blockquote><p>root@server: # <strong>gclient sync -j 2</strong></p></blockquote>
<p>That will continue the sync, but while running multiple commands in parallel. So while 1 command hangs on the checkout, the others will continue to checkout the rest of the (gigantic) source code. As of yet, there's <a href="http://code.google.com/p/chromium/issues/detail?id=52619#c0" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/chromium/issues/detail?id=52619_c0&amp;referer=');">a bug report</a> for this, but no solution yet.</p>
<p>It should be noted that <strong>gclient is now deprecated</strong>, and you might consider switching over to "repo" as a Git overlay tool. This doesn't seem affected by this problem. More info is on "<a href="http://www.chromium.org/chromium-os/building-chromium-os/using-cros_workon#TOC-Get-the-Source" onclick="pageTracker._trackPageview('/outgoing/www.chromium.org/chromium-os/building-chromium-os/using-cros_workon_TOC-Get-the-Source?referer=');">How to get the Chromium Source</a>" wiki-article, which will let you <a href="http://source.android.com/source/git-repo.html" onclick="pageTracker._trackPageview('/outgoing/source.android.com/source/git-repo.html?referer=');">install repo</a>.</p>
<img src="http://feeds.feedburner.com/~r/mattiasgeniar/~4/vdT23PBqSPQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mattiasgeniar.be/2010/08/19/chromium-os-error-rpc-failed-result22-http-code-502/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://mattiasgeniar.be/2010/08/19/chromium-os-error-rpc-failed-result22-http-code-502/</feedburner:origLink></item>
		<item>
		<title>VMware: internal error – vmodl.fault.HostCommunication</title>
		<link>http://feedproxy.google.com/~r/mattiasgeniar/~3/w6y0HkztbEE/</link>
		<comments>http://mattiasgeniar.be/2010/08/17/vmware-internal-error-vmodl-fault-hostcommunication/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 22:39:52 +0000</pubDate>
		<dc:creator>Matti</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://mattiasgeniar.be/?p=2160</guid>
		<description><![CDATA[If you're adding an ESX 4.1 host to a vCenter Server 4.0 installation (or anything lower than vCenter 4.1 for that matter), you'll run into the following error message, which prevents managing the ESX 4.1 host through vCenter. The initial &#8230; <a href="http://mattiasgeniar.be/2010/08/17/vmware-internal-error-vmodl-fault-hostcommunication/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you're adding an <strong>ESX 4.1</strong> host to a <strong>vCenter Server 4.0</strong> installation (or anything lower than vCenter 4.1 for that matter), you'll run into the following error message, which prevents managing the ESX 4.1 host through vCenter. The initial connection will work, it will start to deploy the agent, but afterwards you'll get this:</p>
<blockquote><p>A general system error occured: internal server error: <strong>vmodl.fault.HostCommunication</strong></p></blockquote>
<p>You might be prompted to <a href="http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&amp;cmd=displayKC&amp;externalId=1012154" onclick="pageTracker._trackPageview('/outgoing/kb.vmware.com/selfservice/microsites/search.do?language=en_US_amp_cmd=displayKC_amp_externalId=1012154&amp;referer=');">blame DNS resolution or Date/Time settings</a>, but if you're running the previous version of vCenter Server, <strong>you won't be able to add the new ESX 4.1 host to your existing vCenter 4.0</strong>.</p>
<p>Solution, so far, is to either upgrade your vCenter Server installation, or downgrade / reinstall your ESX host. If you're going to upgrade your vCenter, read the <a href="http://www.vmware.com/pdf/vsphere4/r41/vsp_41_upgrade_guide.pdf" onclick="pageTracker._trackPageview('/outgoing/www.vmware.com/pdf/vsphere4/r41/vsp_41_upgrade_guide.pdf?referer=');">vSphere Upgrade Guide</a>. Also note that vCenter 4.1 is <strong>x64 only</strong>, there's no longer a 32-bit version.</p>
<p>Once you've upgraded vCenter, <strong>remove </strong>the host from the inventory, and <strong>re-add it</strong>. Choosing "connect" from the right-click dropdown menu on the host, likely won't solve it. The host needs to be removed first.</p>
<img src="http://feeds.feedburner.com/~r/mattiasgeniar/~4/w6y0HkztbEE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mattiasgeniar.be/2010/08/17/vmware-internal-error-vmodl-fault-hostcommunication/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://mattiasgeniar.be/2010/08/17/vmware-internal-error-vmodl-fault-hostcommunication/</feedburner:origLink></item>
		<item>
		<title>Facebook’s Techtalks Worth Watching</title>
		<link>http://feedproxy.google.com/~r/mattiasgeniar/~3/EHVTHWVD76E/</link>
		<comments>http://mattiasgeniar.be/2010/08/14/facebooks-techtalks-worth-watching/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 18:00:00 +0000</pubDate>
		<dc:creator>Matti</dc:creator>
				<category><![CDATA[Devops]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[techtalk]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://mattiasgeniar.be/?p=2063</guid>
		<description><![CDATA[I'm a huge Facebook fan. Both from a personal, and a technical point-of-view. And they give some pretty interesting techtalks, to demonstrate why they  deserve my glory (yes, only for that reason). Front End Tech Talk (1h:08m:40s): presentation about Javascript, &#8230; <a href="http://mattiasgeniar.be/2010/08/14/facebooks-techtalks-worth-watching/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I'm a huge Facebook fan. Both from a personal, and a technical point-of-view. And they give some pretty interesting techtalks, to demonstrate why they  deserve my glory (yes, only for <em>that </em>reason).</p>
<ul>
<li><a href="http://www.facebook.com/video/video.php?v=596368660334&amp;ref=mf" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/video/video.php?v=596368660334_amp_ref=mf&amp;referer=');"><strong>Front End Tech Talk</strong> (1h:08m:40s)</a>: presentation about Javascript, optimization, performance, usability, ... Interesting to see how they used Bootloader (on-demand loading), <a href="http://www.slideshare.net/makinde/javascript-primer" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/makinde/javascript-primer?referer=');">Primer</a>, Haste (packaging &amp; dependency management), <a href="http://github.com/epriestley/javelin" onclick="pageTracker._trackPageview('/outgoing/github.com/epriestley/javelin?referer=');">Javelin</a>, <a href="http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919?referer=');">BigPipe</a>, Pagelets, ... to optimize their javascript. Bit of PHP info on their backend as well.</li>
<li><a href="http://www.facebook.com/video/video.php?v=208561675468" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/video/video.php?v=208561675468&amp;referer=');"><strong>Rethinking Servers &amp; Datacenters</strong> (44m:46s)</a>: Datacenter optimization, infrastructure, ... Very good introduction in power usage/supply in datacenters, traditional cooling, <a href="http://en.wikipedia.org/wiki/Power_usage_effectiveness" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Power_usage_effectiveness?referer=');">PUE</a>. Some good alternatives as well.</li>
<li><a href="http://www.facebook.com/video/video.php?v=151887435468&amp;ref=mf" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/video/video.php?v=151887435468_amp_ref=mf&amp;referer=');"><strong>Design Tech Talk</strong> (1h:02m:22s)</a>: quick iterations, small teams &amp; much creativity. How to walk through design processes, get interactions, get comments, ... using tools like <a href="http://www.pixelcloud.co.uk/" onclick="pageTracker._trackPageview('/outgoing/www.pixelcloud.co.uk/?referer=');">Pixelcloud</a>,</li>
<li><a href="http://www.facebook.com/video/video.php?v=432864835468" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/video/video.php?v=432864835468&amp;referer=');"><strong>Typeahead Search</strong> Tech Talk (51m:13s)</a>: using intuitive search results as you type with <a href="http://www.facebook.com/note.php?note_id=389105248919" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/note.php?note_id=389105248919&amp;referer=');">Typeahead</a>. Both front- and backend consequences for introducing it. Also read the <a href="http://www.facebook.com/note.php?note_id=365915113919" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/note.php?note_id=365915113919&amp;referer=');">"classic" Facebook Search</a>, the Social Role that was integrated in displaying wanted results.</li>
</ul>
<p>Want more? Lucky you, there's an entire <a href="http://www.facebook.com/video/?id=32508286546" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/video/?id=32508286546&amp;referer=');">Facebook Techtalk</a> page for those movies!</p>
<img src="http://feeds.feedburner.com/~r/mattiasgeniar/~4/EHVTHWVD76E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mattiasgeniar.be/2010/08/14/facebooks-techtalks-worth-watching/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mattiasgeniar.be/2010/08/14/facebooks-techtalks-worth-watching/</feedburner:origLink></item>
		<item>
		<title>MySQL Upgrade To 5.1: Database Name Prefix #mysql50#</title>
		<link>http://feedproxy.google.com/~r/mattiasgeniar/~3/pForrGAw1os/</link>
		<comments>http://mattiasgeniar.be/2010/08/07/mysql-upgrade-to-5-1-database-name-prefix-mysql50/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 18:00:53 +0000</pubDate>
		<dc:creator>Matti</dc:creator>
				<category><![CDATA[Devops]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://mattiasgeniar.be/?p=2039</guid>
		<description><![CDATA[If you've upgraded from a MySQL version prior to 5.1, to a MySQL version of 5.1 or later, you might find some of your databases have their names altered to "#mysql50#dbname", where it used to be just "dbname". This is &#8230; <a href="http://mattiasgeniar.be/2010/08/07/mysql-upgrade-to-5-1-database-name-prefix-mysql50/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you've upgraded from a MySQL version prior to 5.1, to a MySQL version of 5.1 or later, you might find some of your databases have their names altered to "<strong>#mysql50#dbname</strong>", where it used to be just "<strong>dbname</strong>".</p>
<p>This is because in MySQL 5.1 the data directory structure changed.</p>
<p>You can either alter your queries, so you retrieve from the database "#mysql50#dbname", or you can be sane and do the following query to upgrade the data directory structure. <em>Note; this assumes you have shell access to the server with enough privileges! If you don't, please contact your server administrator</em>.</p>
<blockquote><p>mysql &gt; <strong>ALTER DATABASE `#mysql50#dbname` UPGRADE DATA DIRECTORY NAME;</strong></p></blockquote>
<p>Note the backticks (`), that's not a single quote.</p>
<p>You might run into the following error when you first do so:</p>
<blockquote><p><strong>ERROR 1558 (HY000): Column count of mysql.proc is wrong. Expected 20, found 16. Created with MySQL 50077, now running 50148. Please use mysql_upgrade to fix this error.</strong></p></blockquote>
<p>To fix this, run the following on the server's command line.</p>
<blockquote><p>srv # <strong>mysql_upgrade -h localhost -u root -p</strong><br />
# For Plesk environments, you can use<br />
srv # <strong>mysql_upgrade -h localhost -u admin -p`cat /etc/psa/.psa.shadow `</strong></p></blockquote>
<p>This will update the necessary database entries to the latest version of MySQL. Chances are, this will even have fixed the '#mysql50#' database prefix for you. If it hasn't, return to the first step here.</p>
<p>More information can be found at the bottom of <a href="http://dev.mysql.com/doc/refman/5.1/en/alter-database.html" onclick="pageTracker._trackPageview('/outgoing/dev.mysql.com/doc/refman/5.1/en/alter-database.html?referer=');">MySQL's Documentation on the ALTER DATABASE command.</a></p>
<img src="http://feeds.feedburner.com/~r/mattiasgeniar/~4/pForrGAw1os" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mattiasgeniar.be/2010/08/07/mysql-upgrade-to-5-1-database-name-prefix-mysql50/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://mattiasgeniar.be/2010/08/07/mysql-upgrade-to-5-1-database-name-prefix-mysql50/</feedburner:origLink></item>
		<item>
		<title>Deploying Undersea Cables: Laying The Internet’s Backbone</title>
		<link>http://feedproxy.google.com/~r/mattiasgeniar/~3/6yP1g9T88ac/</link>
		<comments>http://mattiasgeniar.be/2010/07/31/deploying-undersea-cables-laying-the-internets-backbone/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 20:00:07 +0000</pubDate>
		<dc:creator>Matti</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[undersea]]></category>

		<guid isPermaLink="false">http://mattiasgeniar.be/?p=1977</guid>
		<description><![CDATA[Every now and then, you'll hear reports of undersea cables getting hit by a ship's anchor, destroying landline connectivity between continents. More than often, you'll also hear the "terrorist" term being mentioned. Not unreasonable, seeing as how vulnerable our Internet's &#8230; <a href="http://mattiasgeniar.be/2010/07/31/deploying-undersea-cables-laying-the-internets-backbone/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Every now and then, you'll hear reports of undersea cables getting hit by a ship's anchor, destroying landline connectivity between continents. More than often, you'll also hear the "<em>terrorist</em>" term being mentioned. Not unreasonable, seeing as how vulnerable our Internet's Backbone really is. The following image shows the layout of nearly all undersea cables.</p>
<p><a href="http://mattiasgeniar.be/wp-content/uploads/2010/07/SeaCableHi.jpg" rel="lightbox[1977]"><img class="aligncenter size-medium wp-image-1978" title="Undersea Cables" src="http://mattiasgeniar.be/wp-content/uploads/2010/07/SeaCableHi-300x182.jpg" alt="" width="300" height="182" /></a>Very fragible ... There <strong>was</strong> a very interesting video round-up by Discovery Channel, on how those cables are being deployed (in this case, for <a href="http://www.globalcrossing.com/" onclick="pageTracker._trackPageview('/outgoing/www.globalcrossing.com/?referer=');">Global Crossing</a>). It <strong>_was_</strong> worth a watch, before they deleted it -_-.</p>
<img src="http://feeds.feedburner.com/~r/mattiasgeniar/~4/6yP1g9T88ac" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mattiasgeniar.be/2010/07/31/deploying-undersea-cables-laying-the-internets-backbone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mattiasgeniar.be/2010/07/31/deploying-undersea-cables-laying-the-internets-backbone/</feedburner:origLink></item>
		<item>
		<title>System Administrator Appreciation Day 2010 @ Nucleus</title>
		<link>http://feedproxy.google.com/~r/mattiasgeniar/~3/bqrIsZjdJww/</link>
		<comments>http://mattiasgeniar.be/2010/07/30/system-administrator-appreciation-day-2010-nucleus/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 08:06:00 +0000</pubDate>
		<dc:creator>Matti</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[cake]]></category>
		<category><![CDATA[nucleus]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[sysadminday]]></category>

		<guid isPermaLink="false">http://mattiasgeniar.be/?p=2050</guid>
		<description><![CDATA[Every year we count the remaining days. And every year, it's worth it. This is our 2010 System Administrator Appreciation Day gift! In 2009 we had pretty cakes as well! And if you need a reminder for why we deserve &#8230; <a href="http://mattiasgeniar.be/2010/07/30/system-administrator-appreciation-day-2010-nucleus/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Every year we count the remaining days. And every year, it's worth it. This is our 2010 <a href="http://www.sysadminday.com/" onclick="pageTracker._trackPageview('/outgoing/www.sysadminday.com/?referer=');">System Administrator Appreciation Day</a> gift! In 2009 we had <a href="http://mattiasgeniar.be/2009/07/31/system-administrator-appreciation-day-nucleus-win/">pretty cakes</a> as well! And if you need a reminder for <em>why</em> we deserve this day, have a look <a href="http://mattiasgeniar.be/2009/07/30/why-we-deserve-our-system-administration-appreciation-day/">here</a>.</p>
<p><a href="http://mattiasgeniar.be/wp-content/uploads/2010/07/photo-5.jpg" rel="lightbox[2050]"><img class="alignnone size-medium wp-image-2051" title="photo 5" src="http://mattiasgeniar.be/wp-content/uploads/2010/07/photo-5-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://mattiasgeniar.be/wp-content/uploads/2010/07/photo-2.jpg" rel="lightbox[2050]"><img class="alignnone size-medium wp-image-2053" title="photo 2" src="http://mattiasgeniar.be/wp-content/uploads/2010/07/photo-2-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://mattiasgeniar.be/wp-content/uploads/2010/07/photo-3.jpg" rel="lightbox[2050]"><img class="alignnone size-medium wp-image-2054" title="photo 3" src="http://mattiasgeniar.be/wp-content/uploads/2010/07/photo-3-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://mattiasgeniar.be/wp-content/uploads/2010/07/photo-4.jpg" rel="lightbox[2050]"><img class="alignnone size-medium wp-image-2055" title="photo 4" src="http://mattiasgeniar.be/wp-content/uploads/2010/07/photo-4-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://mattiasgeniar.be/wp-content/uploads/2010/07/photo-1.jpg" rel="lightbox[2050]"><img class="alignnone size-medium wp-image-2052" title="photo 1" src="http://mattiasgeniar.be/wp-content/uploads/2010/07/photo-1-225x300.jpg" alt="" width="225" height="300" /></a></p>
<p>I love being <a href="http://www.nucleus.be/en/" onclick="pageTracker._trackPageview('/outgoing/www.nucleus.be/en/?referer=');">in IT.</a> :-)</p>
<img src="http://feeds.feedburner.com/~r/mattiasgeniar/~4/bqrIsZjdJww" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mattiasgeniar.be/2010/07/30/system-administrator-appreciation-day-2010-nucleus/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://mattiasgeniar.be/2010/07/30/system-administrator-appreciation-day-2010-nucleus/</feedburner:origLink></item>
		<item>
		<title>phpsh: Running An Interactive PHP Shell (Python)</title>
		<link>http://feedproxy.google.com/~r/mattiasgeniar/~3/fJY3p99ihtY/</link>
		<comments>http://mattiasgeniar.be/2010/07/22/phpsh-running-an-interactive-php-shell-python/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 20:00:50 +0000</pubDate>
		<dc:creator>Matti</dc:creator>
				<category><![CDATA[Devops]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpsh]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://mattiasgeniar.be/?p=1958</guid>
		<description><![CDATA[If you haven't heard of it yet, there's a very intersting tool available called phpsh, a python implementation to a PHP shell - but better. Installing phpsh SSH into your server, and download, build &#38; install the binaries. This assumes &#8230; <a href="http://mattiasgeniar.be/2010/07/22/phpsh-running-an-interactive-php-shell-python/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you haven't heard of it yet, there's a very intersting tool available called <a href="http://www.phpsh.org/" onclick="pageTracker._trackPageview('/outgoing/www.phpsh.org/?referer=');">phpsh</a>, a python implementation to a PHP shell - but better.</p>
<p><strong>Installing phpsh</strong></p>
<p>SSH into your server, and <a href="http://github.com/facebook/phpsh/tarball/master" onclick="pageTracker._trackPageview('/outgoing/github.com/facebook/phpsh/tarball/master?referer=');">download</a>, build &amp; install the binaries. This assumes you've downloaded the .tar.gz version.</p>
<blockquote><p># wget http://github.com/facebook/phpsh/tarball/master<br />
# tar xzf facebook-phpsh-1bc1c01.tar.gz<br />
# cd facebook-phpsh-1bc1c01/<br />
# python setup.py build<br />
# python setup.py install<br />
# phpsh</p></blockquote>
<p>As simple as that.</p>
<p><strong>How do I use it?</strong></p>
<p>Even more simple. Once the install is done, execute <strong>phpsh</strong> on the CLI, and get started writing PHP code.</p>
<blockquote><p>srv ~ # <strong>phpsh </strong><br />
Starting php<br />
type 'h' or 'help' to see instructions &amp; features<br />
php&gt;<br />
php&gt;<br />
php&gt; <strong>echo "Testing this new PHPSH";</strong><br />
Testing this new PHPSH<br />
php&gt;<br />
php&gt;<br />
php&gt; <strong>$dbconn = mysql_connect('localhost', 'user', 'pass');</strong><br />
PHP Warning:  mysql_connect(): Access denied for user 'user'@'localhost' (using password: YES) in /usr/lib/python2.4/site-packages/phpsh/phpsh.php(534) : eval()'d code on line 1<br />
php&gt;<br />
php&gt;<br />
php&gt; exit;</p></blockquote>
<p>This can help to easily test or debug some PHP code. It has syntax highlighting, <strong>tab completion</strong> (!!), manual pages, ... Still not convinced? Have a look at <a href="http://techchorus.net/10-examples-inspire-you-use-php-interactive-shell" onclick="pageTracker._trackPageview('/outgoing/techchorus.net/10-examples-inspire-you-use-php-interactive-shell?referer=');">some real-life examples for a PHP interface shell</a>.  Seriously, awesome tool.</p>
<img src="http://feeds.feedburner.com/~r/mattiasgeniar/~4/fJY3p99ihtY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mattiasgeniar.be/2010/07/22/phpsh-running-an-interactive-php-shell-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mattiasgeniar.be/2010/07/22/phpsh-running-an-interactive-php-shell-python/</feedburner:origLink></item>
		<item>
		<title>Implementing &amp; Maintaining DNSSEC On Bind9 Nameservers</title>
		<link>http://feedproxy.google.com/~r/mattiasgeniar/~3/PnwiX8JCUPc/</link>
		<comments>http://mattiasgeniar.be/2010/07/12/implementing-maintaining-dnssec-on-bind9-nameservers/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 15:00:06 +0000</pubDate>
		<dc:creator>Matti</dc:creator>
				<category><![CDATA[Devops]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[dnssec]]></category>
		<category><![CDATA[key]]></category>
		<category><![CDATA[zone]]></category>

		<guid isPermaLink="false">http://mattiasgeniar.be/?p=1987</guid>
		<description><![CDATA[I won't be going into detail what DNSSEC is, and what it does. This only covers the implementation (deployment) and maintenance that accompanies DNSSEC. Here's the small index of topics I'll cover. What is DNSSEC? Enabling DNSSEC in your environment &#8230; <a href="http://mattiasgeniar.be/2010/07/12/implementing-maintaining-dnssec-on-bind9-nameservers/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I won't be going into detail what DNSSEC is, and what it does. This only covers the implementation (deployment) and maintenance that accompanies DNSSEC. Here's the small index of topics I'll cover.</p>
<ol>
<li><strong>What </strong>is DNSSEC?</li>
<li><strong>Enabling DNSSEC </strong>in your environment</li>
<li><strong>Generating your keys</strong>: Key Signing Key (KSK) and Zone Signing Key (ZSK)</li>
<li><strong>Adding </strong>the public keys <strong>to your zone</strong></li>
<li><strong>Signing </strong>the zone</li>
<li>Key <strong>rotation</strong>, zone <strong>maintenance</strong></li>
<li><strong>Summary</strong></li>
<li>Links, Articles &amp; Video</li>
</ol>
<p>There are a few assumptions throughout this article, mostly related to directory structures as I like to keep things organized. Another method would be to create a directory per zone, and store all data within that directory.</p>
<ol>
<li>I'm doing the signing for the dummy host "<strong>dns.org</strong>"</li>
<li>I have my zonefiles stored in <em>/var/named/<strong>zones</strong>/</em></li>
<li>I have my Key Signing Keys stored in <em>/var/named/<strong>KSK</strong></em></li>
<li>I have my Zone Signing Keys stored in <em>/var/named/<strong>ZSK</strong></em></li>
<li>I have my Delegation Signer and Keyset stored in <em>/var/named/<strong>SET</strong></em></li>
</ol>
<p><strong><span id="more-1987"></span>1) What is DNSSEC?</strong></p>
<p>Here are a few links that very accurately explain DNSSEC.</p>
<ul>
<li><a href="http://blog.techscrawl.com/2009/01/06/dnssec-101/" onclick="pageTracker._trackPageview('/outgoing/blog.techscrawl.com/2009/01/06/dnssec-101/?referer=');">http://blog.techscrawl.com/2009/01/06/dnssec-101/</a></li>
<li><a href="http://en.wikipedia.org/wiki/DNSSec" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/DNSSec?referer=');">http://en.wikipedia.org/wiki/DNSSec</a></li>
<li><a href="http://www.dnssec.net/" onclick="pageTracker._trackPageview('/outgoing/www.dnssec.net/?referer=');">http://www.dnssec.net/</a></li>
<li><a href="http://www.icann.org/en/announcements/dnssec-qaa-09oct08-en.htm" onclick="pageTracker._trackPageview('/outgoing/www.icann.org/en/announcements/dnssec-qaa-09oct08-en.htm?referer=');">http://www.icann.org/en/announcements/dnssec-qaa-09oct08-en.htm</a></li>
</ul>
<p><strong>2) Enabling DNSSEC in your environment</strong></p>
<p>For my examples, I'll be signing the zone "<strong>dns.org</strong>", for which my nameserver has been configured to be authoritive. To enable DNSSEC, you'll need to add the following to your <strong>/etc/named.conf</strong> file. Note; this is only supported in Bind version 9.3 and upwards.</p>
<blockquote><p># named -v<br />
BIND <strong>9.3.6</strong>-P1-RedHat-9.3.6-4.P1.el5_4.2</p></blockquote>
<p>So, edit the file <strong>/etc/named.conf</strong> and add the lines in bold to the <strong>options</strong>-section.</p>
<blockquote><p>options {<br />
...<br />
// DNSSEC<br />
<strong>dnssec-enable yes;</strong><br />
};</p></blockquote>
<p><strong>3) Generating your keys: Key Signing Key (KSK) and Zone Signing Key (ZSK)</strong></p>
<p>Just a small clarification on what the KSK and ZSK actually are.<br />
<strong>ZSK: Z</strong>one <strong>S</strong>igning <strong>K</strong>ey - this key will sign your records in your zonefile.<br />
<strong>KSK: K</strong>ey <strong>S</strong>igning <strong>K</strong>ey - this key will sign your Zone Signing Key. This is generally a key with greater key size.</p>
<p>In my set-up, I have all my zones in seperate files located in /var/named/zones/*. I'll be storing my keys in seperate folders, to keep the overview.</p>
<ul>
<li>/var/named/ZSK: all zone signing keys</li>
<li>/var/named/KSK: all key signing keys</li>
</ul>
<p><em>Note; ideally, you would want to store your keys on a offline machine, sign your zones there, and transfer them to your online nameserver. However, in set-ups where zones are reconfigured daily, this would cause too much overhead.</em></p>
<p>First, we'll generate the <strong>Zone Signing Key</strong> for <strong>dns.org:</strong></p>
<blockquote><p># cd /var/named/ZSK<br />
# dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE dns.org</p></blockquote>
<p>This will generate 2 files, using the same naming format: <strong>K</strong>&lt;zone&gt;.&lt;id&gt;.key <em>(ie:  Kdns.org.+005+03486.key)</em><em> </em>and <strong>K</strong>&lt;zone&gt;.&lt;id&gt;.private <em>(ie: Kdns.org.+005+03486.private)</em>. The first file holds the public key, and the .private file holds our private key.</p>
<p>Now, to generate the <strong>Key Signing Key </strong>for <strong>dns.org</strong>:</p>
<blockquote><p># cd /var/named/KSK<br />
# dnssec-keygen -r /dev/urandom -a RSASHA1 -b 4096 -n ZONE -f KSK dns.org</p></blockquote>
<p>This will also generate 2 files, using the same naming format as the ZSK.</p>
<p><em>Note; every time you generate a KSK or a ZSK, it will assign a new random ID to the filename.</em></p>
<p><strong>4) Adding the public keys to your zone</strong></p>
<p>After having generated the KSK and ZSK, we need to add the public key of each file to the zone. In my environment (using the folders described above), this would mean:</p>
<blockquote><p># cat /var/named/ZSK/Kdns.org.*.key &gt;&gt; /var/named/zones/dns.org<br />
# cat /var/named/KSK/Kdns.org.*.key &gt;&gt; /var/named/zones/dns.org</p></blockquote>
<p>This will add the appropriate public key to my zone. I've used the wildcard "Kdns.org.*.key" because we can't predict the ID. However, if you regenerate your keys, you'll have multiple files that would be added with that wildcard (as there are multiple public keys), so be cautious to remove the "old" public and private keys first.</p>
<p>If you take a look at your zonefile now, you'll see there are now 2 extra <strong>DNSKEY</strong> records which have been added.</p>
<blockquote><p><em>dns.org. IN DNSKEY 256 3 5 "random chars"<br />
dns.org. IN DNSKEY 257 3 5 "random chars"</em></p></blockquote>
<p>The first DNSKEY, with the number "256", is the smaller <strong>Zone Signing Key</strong>, with the actual key appended at the back. The second DNSKEY with number "257" is the larger <strong>Key Signing Key</strong> with the actual key at the end.</p>
<p>After you've restarted your nameserver (to activate the newly updated zone) you can check if the records were added OK by trying to query for them:</p>
<blockquote><p><em># dig @localhost DNSKEY dns.org</em></p></blockquote>
<p>The ANSWER SECTION should give you 2 DNSKEY's.</p>
<p><strong>5) Signing the zone</strong></p>
<p>To sign the zone, we need the command to point at the zonefile, the ZSK and KSK.</p>
<blockquote><p># cd /var/named/SET<br />
# dnssec-signzone -o dns.org -k /var/named/KSK/Kdns.org.+005+48967.key /var/named/zones/dns.org /var/named/ZSK/Kdns.org.+005+03486.key</p></blockquote>
<p>Let's break this down. The first parameter, "<strong>- 0</strong>", tells us which zone to sign (in this case, dns.org). The second parameter, "<strong>- k</strong>", allows us to point at the Key Signing Key. Next up is the location of our zonefile, followed by the location of the Zone Signing Key.</p>
<p><em>Note; the IDs in the filenames will vary for your set-up.</em></p>
<p>Afterwards, you'll notice there are now 2 extra files generated in the /var/named/SET directory. First is "dsset-dns.org.", followed by "keyset-dns.org.". I've placed these in a seperate directory on purpose, to keep the overview in the /var/named/zones directory.</p>
<p>You'll also notice that in /var/named/zones, beside the already existing "dns.org" file, there is now also a file called "dns.org.signed" which holds the signed version of the zonefile. It's also <strong>much larger</strong> than the original zonefile, because all RRs (Resource Records) are now signed. For reference, here is <a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/dns.org_.original.txt">the original zonefile</a>, <a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/dns.org_.txt">the zonefile with dnskey</a>, and the <a href="http://mattiasgeniar.be/wp-content/uploads/2010/08/dns.org_.signed.txt">fully signed zonefile</a>.</p>
<p>Now we can change our named.conf to point at the ".signed" version to load this signed zone.</p>
<blockquote><p>zone "dns.org" IN {<br />
type master;<br />
file "/var/named/zones/dns.org.signed";<br />
};</p></blockquote>
<p>And reload your nameserver to test the newly signed zone.</p>
<blockquote><p><em># dig @localhost dns.org +dnssec</em></p></blockquote>
<p>You'll notice every record is now accompanied by a <strong>RRSIG</strong> Resource Record as well, which holds the signed version of that Resource Record you requested.</p>
<p><strong>6) Key rotation, zone maintenance<br />
</strong></p>
<p><strong>A)</strong> Once a zone has been signed, the <strong>RRSIG</strong>'s will have a lifespan of 30 days. After these 30 days, the signatures will expire and cause zones to no longer validate. The only method to "reset" that 30 day timer, is to <strong>resign</strong> your zones (see step 5 above).</p>
<p><strong>B) </strong>Whenever you modify the zone, to add/modify/remove records, you will also have to <strong>resign</strong> the original zonefile, to re-generate the .signed version.</p>
<p><strong>C) </strong>You should <strong>re-generate your KSK and ZSK on time</strong>. It's advised to re-generate the KSK every year, and the ZSK every 3 months. The longer the key has been in existance, the greater the chance it's been "compromised". To do so, delete the old key (public &amp; private), and re-generate using step 3 of this article.</p>
<p><strong>7) Summary</strong></p>
<p>All in all, enabling DNSSEC for one zone comes down to:</p>
<ol>
<li><strong>Generate </strong>a ZSK and KSK (per zone) using <em>dnssec-keygen</em></li>
<li><strong>Include </strong>those keys into your zonefile</li>
<li><strong>Sign </strong>the zone using <em>dnssec-signzone</em></li>
<li><strong>Load</strong> your signed zonefile</li>
<li><strong>Reload</strong> the zone or nameserver</li>
</ol>
<p><strong>8) Links, Articles &amp; Video</strong></p>
<p>I managed to implement DNSSEC fairly simply, because the following information was made available on the web which explained it very well.</p>
<ul>
<li><a href="http://www.isc.org/files/DNSSEC_in_6_minutes.pdf" onclick="pageTracker._trackPageview('/outgoing/www.isc.org/files/DNSSEC_in_6_minutes.pdf?referer=');">DNSSEC In 6 minutes</a> (PDF)</li>
<li><a href="http://www.xtdnet.nl/paul/dnssec/" onclick="pageTracker._trackPageview('/outgoing/www.xtdnet.nl/paul/dnssec/?referer=');">DNSSEC Mini Howto</a> (html)</li>
<li><a href="http://www.youtube.com/watch?v=qk-Cj_jjhoA&amp;playnext_from=TL&amp;videos=i-C8_4Wy8vM" onclick="pageTracker._trackPageview('/outgoing/www.youtube.com/watch?v=qk-Cj_jjhoA_amp_playnext_from=TL_amp_videos=i-C8_4Wy8vM&amp;referer=');">Erik Berls - Deploying DNSSEC - LayerOne 2009</a> (Youtube video, 55min)</li>
<li><a href="http://blog.techscrawl.com/2009/01/13/enabling-dnssec-on-bind/" onclick="pageTracker._trackPageview('/outgoing/blog.techscrawl.com/2009/01/13/enabling-dnssec-on-bind/?referer=');">Enabling DNSSEC On Bind</a> (html)</li>
<li><a href="http://www.dnssec.net/practical-documents" onclick="pageTracker._trackPageview('/outgoing/www.dnssec.net/practical-documents?referer=');">Practical DNS Setup: How To Implement DNSSEC</a> (practical documents)</li>
<li><a href="http://www.dyndns.com/support/kb/implementing_dnssec.html" onclick="pageTracker._trackPageview('/outgoing/www.dyndns.com/support/kb/implementing_dnssec.html?referer=');">Implementing DNSSEC (dyndns)</a></li>
</ul>
<p>If you'd like to add something, please use the comments below. If I've missed some vital information, or published some awful mistake, please let me know.</p>
<blockquote>
<blockquote>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 413px; width: 1px; height: 1px; overflow: hidden;">options {<br />
...<br />
// DNSSEC<br />
dnssec-enable yes;<br />
};</p>
</div>
</blockquote>
</blockquote>
<img src="http://feeds.feedburner.com/~r/mattiasgeniar/~4/PnwiX8JCUPc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mattiasgeniar.be/2010/07/12/implementing-maintaining-dnssec-on-bind9-nameservers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mattiasgeniar.be/2010/07/12/implementing-maintaining-dnssec-on-bind9-nameservers/</feedburner:origLink></item>
		<item>
		<title>How, What and Why – On Scalability, Availability &amp; Manageability (Facebook)</title>
		<link>http://feedproxy.google.com/~r/mattiasgeniar/~3/s3_8lJyQPNM/</link>
		<comments>http://mattiasgeniar.be/2010/07/06/how-what-and-why-on-scalability-availability-manageability-facebook/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 20:09:05 +0000</pubDate>
		<dc:creator>Matti</dc:creator>
				<category><![CDATA[Devops]]></category>
		<category><![CDATA[cfengine]]></category>
		<category><![CDATA[dsh]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[hiphop]]></category>
		<category><![CDATA[memcached]]></category>

		<guid isPermaLink="false">http://mattiasgeniar.be/?p=1947</guid>
		<description><![CDATA[Since I've not updated this blog in quite a while, I'll share a very interesting video and mention its highlights. Video: A Day In The Life Of A Facebook Engineer Obviously, Facebook has seen amongst the most impressive scalability problems &#8230; <a href="http://mattiasgeniar.be/2010/07/06/how-what-and-why-on-scalability-availability-manageability-facebook/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Since I've not updated this blog in quite a while, I'll share a very interesting video and mention its highlights.</p>
<p>Video: <a href="http://www.youtube.com/watch?v=T-Xr_PJdNmQ" onclick="pageTracker._trackPageview('/outgoing/www.youtube.com/watch?v=T-Xr_PJdNmQ&amp;referer=');">A Day In The Life Of A Facebook Engineer</a></p>
<p>Obviously, Facebook has seen amongst the most impressive scalability problems ever. And here are some of the interesting bits, which can be used to manage and tune high traffic &amp; high availability websites.</p>
<ul>
<li><a href="http://developers.facebook.com/blog/post/358" onclick="pageTracker._trackPageview('/outgoing/developers.facebook.com/blog/post/358?referer=');">HipHop for PHP</a>: transforms PHP code to optimized C++ code, for greater CPU efficiency. Started as a "hack" on one of <a href="http://www.facebook.com/video/video.php?v=124728580468&amp;ref=mf" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/video/video.php?v=124728580468_amp_ref=mf&amp;referer=');">Facebook's Hackaton</a><a href="http://memcached.org/" onclick="pageTracker._trackPageview('/outgoing/memcached.org/?referer=');">s.</a></li>
<li><a href="http://memcached.org/" onclick="pageTracker._trackPageview('/outgoing/memcached.org/?referer=');">Memcached</a>: duh ... only downside is it requires some PHP recoding to make use of it (but shouldn't be much if you're already using frameworks or database classes).</li>
<li>Services: seperate key systems, make them independant of each other (news feed, photos, video, ... - allows you to disable one service, and keep the rest going)</li>
<li><a href="http://www.cfengine.org/" onclick="pageTracker._trackPageview('/outgoing/www.cfengine.org/?referer=');">CFEngine</a>: automating sysadmin tasks (alternatives: <a href="http://www.puppetlabs.com/" onclick="pageTracker._trackPageview('/outgoing/www.puppetlabs.com/?referer=');">Puppet</a>, <a href="http://www.opscode.com/chef" onclick="pageTracker._trackPageview('/outgoing/www.opscode.com/chef?referer=');">Chef</a>). Ideal in "clone" environments, a cloud of servers running a similar configuration. I have my doubts on highly customized environments, where each server is configured individually to specifics needs.</li>
<li><a href="http://www.netfort.gr.jp/~dancer/software/dsh.html.en" onclick="pageTracker._trackPageview('/outgoing/www.netfort.gr.jp/_dancer/software/dsh.html.en?referer=');">dsh</a>: distributed shell, run commands on any set of hosts in your network</li>
</ul>
<p>Monitoring will be needed to keep an eye on your infrastructure:</p>
<ul>
<li><a href="http://ganglia.sourceforge.net/" onclick="pageTracker._trackPageview('/outgoing/ganglia.sourceforge.net/?referer=');">Ganglia</a>: outdated, but very fast</li>
<li><a href="http://www.nagios.org/" onclick="pageTracker._trackPageview('/outgoing/www.nagios.org/?referer=');">Nagios</a></li>
</ul>
<p>Take a look at other<a href="http://developers.facebook.com/opensource/" onclick="pageTracker._trackPageview('/outgoing/developers.facebook.com/opensource/?referer=');"> Open Source contributions</a> made by Facebook's Team!</p>
<img src="http://feeds.feedburner.com/~r/mattiasgeniar/~4/s3_8lJyQPNM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mattiasgeniar.be/2010/07/06/how-what-and-why-on-scalability-availability-manageability-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mattiasgeniar.be/2010/07/06/how-what-and-why-on-scalability-availability-manageability-facebook/</feedburner:origLink></item>
		<item>
		<title>Selling A Classic Mini British Open (Special Edition)</title>
		<link>http://feedproxy.google.com/~r/mattiasgeniar/~3/rrbFubxO7HU/</link>
		<comments>http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/#comments</comments>
		<pubDate>Sun, 30 May 2010 23:13:06 +0000</pubDate>
		<dc:creator>Matti</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[classic mlini]]></category>
		<category><![CDATA[on sale]]></category>

		<guid isPermaLink="false">http://mattiasgeniar.be/?p=1925</guid>
		<description><![CDATA[Not tech-related, at all. But since I can use the extra promotion in selling it ... For sale: Classic Mini, British Open (Special Edition). This version was created in limited stock. Only 1.000 in the UK, and 2.000 more in &#8230; <a href="http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Not tech-related, at all. But since I can use the extra promotion in selling it ...</p>
<p>For sale: <strong>Classic Mini, British Open </strong>(Special Edition). This version was created in limited stock. Only 1.000 in the UK, and 2.000 more in Europe.</p>
<p><a href="http://mattiasgeniar.be/wp-content/uploads/2010/05/britishopenad.jpg" rel="lightbox[1925]"><img class="aligncenter size-medium wp-image-1940" title="Mini British Open: Paper Ad" src="http://mattiasgeniar.be/wp-content/uploads/2010/05/britishopenad-206x300.jpg" alt="" width="206" height="300" /></a>It features an electric sunroof, 1.3l petrol engine, and the driving experience of a lifetime. It's on sale since I lack the time to fully enjoy it. It's among the best preserved British Open's I've ever seen, fully restored by it's previous owner.</p>

<a href='http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/mini-1/' title='mini (1)'><img width="150" height="150" src="http://mattiasgeniar.be/wp-content/uploads/2010/05/mini-1-150x150.jpg" class="attachment-thumbnail" alt="mini (1)" title="mini (1)" /></a>
<a href='http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/mini-10/' title='mini (10)'><img width="150" height="150" src="http://mattiasgeniar.be/wp-content/uploads/2010/05/mini-10-150x150.jpg" class="attachment-thumbnail" alt="mini (10)" title="mini (10)" /></a>
<a href='http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/mini-11/' title='mini (11)'><img width="150" height="150" src="http://mattiasgeniar.be/wp-content/uploads/2010/05/mini-11-150x150.jpg" class="attachment-thumbnail" alt="mini (11)" title="mini (11)" /></a>
<a href='http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/mini-12/' title='mini (12)'><img width="150" height="150" src="http://mattiasgeniar.be/wp-content/uploads/2010/05/mini-12-150x150.jpg" class="attachment-thumbnail" alt="mini (12)" title="mini (12)" /></a>
<a href='http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/mini-2/' title='mini (2)'><img width="150" height="150" src="http://mattiasgeniar.be/wp-content/uploads/2010/05/mini-2-150x150.jpg" class="attachment-thumbnail" alt="mini (2)" title="mini (2)" /></a>
<a href='http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/mini-3/' title='mini (3)'><img width="150" height="150" src="http://mattiasgeniar.be/wp-content/uploads/2010/05/mini-3-150x150.jpg" class="attachment-thumbnail" alt="mini (3)" title="mini (3)" /></a>
<a href='http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/mini-4/' title='mini (4)'><img width="150" height="150" src="http://mattiasgeniar.be/wp-content/uploads/2010/05/mini-4-150x150.jpg" class="attachment-thumbnail" alt="mini (4)" title="mini (4)" /></a>
<a href='http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/mini-5/' title='mini (5)'><img width="150" height="150" src="http://mattiasgeniar.be/wp-content/uploads/2010/05/mini-5-150x150.jpg" class="attachment-thumbnail" alt="mini (5)" title="mini (5)" /></a>
<a href='http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/mini-6/' title='mini (6)'><img width="150" height="150" src="http://mattiasgeniar.be/wp-content/uploads/2010/05/mini-6-150x150.jpg" class="attachment-thumbnail" alt="mini (6)" title="mini (6)" /></a>
<a href='http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/mini-7/' title='mini (7)'><img width="150" height="150" src="http://mattiasgeniar.be/wp-content/uploads/2010/05/mini-7-150x150.jpg" class="attachment-thumbnail" alt="mini (7)" title="mini (7)" /></a>
<a href='http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/mini-8/' title='mini (8)'><img width="150" height="150" src="http://mattiasgeniar.be/wp-content/uploads/2010/05/mini-8-150x150.jpg" class="attachment-thumbnail" alt="mini (8)" title="mini (8)" /></a>
<a href='http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/mini-9/' title='mini (9)'><img width="150" height="150" src="http://mattiasgeniar.be/wp-content/uploads/2010/05/mini-9-150x150.jpg" class="attachment-thumbnail" alt="mini (9)" title="mini (9)" /></a>
<a href='http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/britishopenad/' title='Mini British Open: Paper Ad'><img width="150" height="150" src="http://mattiasgeniar.be/wp-content/uploads/2010/05/britishopenad-150x150.jpg" class="attachment-thumbnail" alt="Mini British Open: Paper Ad" title="Mini British Open: Paper Ad" /></a>

<p>It's located on several dealer-sites:</p>
<ul>
<li><a href="http://www.2dehands.be/autos/autos/rover/classic-mini-british-open-92-73153723.html" onclick="pageTracker._trackPageview('/outgoing/www.2dehands.be/autos/autos/rover/classic-mini-british-open-92-73153723.html?referer=');">2dehands.be</a></li>
<li><a href="http://www.hebbes.be/Auto/mijn-hebbes/mijn-auto-zoekers/actief/1/30" onclick="pageTracker._trackPageview('/outgoing/www.hebbes.be/Auto/mijn-hebbes/mijn-auto-zoekers/actief/1/30?referer=');">hebbes.be</a></li>
<li><a href="http://www.kapaza.be/detail/27237045/" onclick="pageTracker._trackPageview('/outgoing/www.kapaza.be/detail/27237045/?referer=');">kapaza.be</a></li>
<li><a href="http://www.vlanauto.be/nl/tweedehands-auto/Rover/MINI/1.3i_British_Open-4113357-te-koop?id=4113357" onclick="pageTracker._trackPageview('/outgoing/www.vlanauto.be/nl/tweedehands-auto/Rover/MINI/1.3i_British_Open-4113357-te-koop?id=4113357&amp;referer=');">vlanauto.be</a></li>
<li><a href="http://nl.autoscout24.be/Details.aspx?id=177054025" onclick="pageTracker._trackPageview('/outgoing/nl.autoscout24.be/Details.aspx?id=177054025&amp;referer=');">autoscout24.be</a></li>
<li><a href="http://www.autozone.be/rover_mini_british-open/auto/detail.jsp?zoekId=3662896&amp;locale=nl_BE" onclick="pageTracker._trackPageview('/outgoing/www.autozone.be/rover_mini_british-open/auto/detail.jsp?zoekId=3662896_amp_locale=nl_BE&amp;referer=');">autozone.be</a></li>
</ul>
<p>And if you're up for some mild reading, I would recommend: <a href="http://www.miniworld.co.uk/new_to_the_scene/history/" onclick="pageTracker._trackPageview('/outgoing/www.miniworld.co.uk/new_to_the_scene/history/?referer=');">The History of Mini</a>. Some more info on the car <a href="http://minimatti.be/mini-british-open-92/" onclick="pageTracker._trackPageview('/outgoing/minimatti.be/mini-british-open-92/?referer=');">can be found here</a>.</p>
<img src="http://feeds.feedburner.com/~r/mattiasgeniar/~4/rrbFubxO7HU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mattiasgeniar.be/2010/05/30/selling-a-classic-mini-british-open-special-edition/</feedburner:origLink></item>
	</channel>
</rss>
