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

<channel>
	<title>CatN</title>
	<atom:link href="http://catn.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://catn.com</link>
	<description>UK Cloud Hosting</description>
	<lastBuildDate>Mon, 20 May 2013 08:18:02 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Is G-Cloud selling services or knowledge?</title>
		<link>http://catn.com/2013/05/20/what-are-people-buying-on-g-cloud/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=what-are-people-buying-on-g-cloud</link>
		<comments>http://catn.com/2013/05/20/what-are-people-buying-on-g-cloud/#comments</comments>
		<pubDate>Mon, 20 May 2013 07:45:21 +0000</pubDate>
		<dc:creator>Joe Gardiner</dc:creator>
				<category><![CDATA[Government]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Consultancy]]></category>
		<category><![CDATA[G-Cloud]]></category>

		<guid isPermaLink="false">http://catn.com/?p=14470</guid>
		<description><![CDATA[With a revised framework (version 3), a new cloud store approaching launch, and sales figures that are now being described as &#8220;exponential&#8221;, it is getting harder for industry analysts to continue to...]]></description>
				<content:encoded><![CDATA[<p class="first">With a revised framework (version 3), a new cloud store approaching launch, and sales figures that are now being described as &#8220;exponential&#8221;, it is getting harder for industry analysts to continue to claim that G-Cloud is a failure (although they keep trying).</p>
<p>The G-Cloud team proudly tweeted some excellent sales figures for March, and the best thing is that the pool of suppliers making sales is growing and becoming more diverse.</p>
<blockquote class="twitter-tweet" width="500"><p>*drum roll*&#8230;..and the sales figures to the end of March are&#8230;&#8230;. £18.2m <a href="http://t.co/VT2loPLWkw" title="http://bit.ly/KBVcI6">bit.ly/KBVcI6</a> <a href="https://twitter.com/search/%23GCloudJoinin">#GCloudJoinin</a></p>
<p>&mdash; G-Cloud (@G_Cloud_UK) <a href="https://twitter.com/G_Cloud_UK/status/324868670646022146">April 18, 2013</a></p></blockquote>
<p><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>I raise this point because in the early days there were a couple of companies making large sales which bumped the figures up, but this did not necessarily make G-Cloud a success with a core of companies winning all the business.</p>
<p><span id="more-14470"></span></p>
			<div class="post-advert horizontal">
				<div class="content">
					<img class="alignnone size-full wp-image-14281" alt="vCluster Logo" src="http://catn.com/wp-content/uploads/2013/04/vcluster-auto-scale.png" width="82" height="82" />The G-Cloud assured vCluster PHP platform is available on the government Cloud Store now!<a class="button" href="/vcluster">Find out more</a>				</div>
			</div>
			
<h2>Healthy growth</h2>
<p>Here you can see the growth in sales from the end of 2012 to now. This data is taken from the published <a title="GCloud Sales Information" href="http://gcloud.civilservice.gov.uk/about/sales-information/" target="_blank">sales information on the G-Cloud website</a>.</p>
<p><a href="http://catn.com/wp-content/uploads/2013/04/GCloud-Monthly-Sales-Totals.png"><img class="aligncenter size-medium wp-image-14478" alt="GCloud Monthly Sales Totals" src="http://catn.com/wp-content/uploads/2013/04/GCloud-Monthly-Sales-Totals-590x343.png" width="590" height="343" /></a></p>
<p>Impressive looking figures, and equally encouraging is that fact that the government customers are diverse i.e. there isn&#8217;t a small camp in central government buying from G-Cloud. It seems as though adoption of cloud services has taken place a cross a wide range of central and local government &#8211; I&#8217;m sure that this trend will help G-Cloud continue to grow in the future.</p>
<h2>What can I buy?</h2>
<p>Now for the services being bought: what are customers actually buying? Let&#8217;s start off by looking at the different Service Lots used to define services on the framework. This text has been taken from <a title="GCloud Definitions " href="http://gcloud.civilservice.gov.uk/supplier-zone/assurance/g-cloud-definitions/" target="_blank">the G-Cloud website</a>.</p>
<h3>Lot 1 &#8211; IaaS</h3>
<p>The capability provided to the consumer is to provision processing, storage, networks, and other fundamental computing resources where the consumer is able to deploy and run arbitrary software, which can include operating systems and applications. The consumer does not manage or control the underlying cloud infrastructure but has control over operating systems, storage, deployed applications, and possibly limited control of select networking components (e.g., host firewalls).</p>
<h3>Lot 2 &#8211; PaaS</h3>
<p>The capability provided to the consumer is to deploy onto the cloud infrastructure consumer-created or acquired applications created using programming languages and tools supported by the provider. The consumer does not manage or control the underlying cloud infrastructure including network, servers, operating systems, or storage, but has control over the deployed applications and possibly application hosting environment configurations.</p>
<h3>Lot 3 &#8211; SaaS</h3>
<p>The capability provided to the consumer is to use the provider’s applications running on a cloud infrastructure. The applications are accessible from various client devices through a thin client interface such as a web browser (e.g., web-based email). The consumer does not manage or control the underlying cloud infrastructure including network, servers, operating systems, storage, or even individual application capabilities, with the possible exception of limited user-specific application configuration settings.</p>
<h3>Lot 4 &#8211; Specialist Cloud Services</h3>
<p>In addition to the NIST definitions, the G-Cloud requires support services associated with the different cloud service models. These may include services to transfer data/configuration between G-Cloud providers, management and support of applications (workloads) operating on G-Cloud services, multi supplier service integration services and cloud strategy and implementation services.</p>
<p><em>View all <a title="GCloud Definitions" href="http://gcloud.civilservice.gov.uk/supplier-zone/assurance/g-cloud-definitions/" target="_blank">G-Cloud definitions on the G-Cloud website</a>.</em></p>
<p>On G-Cloud 1 the focus seemed to be on the adoption of on-demand, &#8216;as a service&#8217; resources by government buyers. The focus seemes to have changed as the framework has developed and grown. Take a look at the sales info for the last few months broken down by the Lots being purchased.</p>
<table class="spaced">
<tbody>
<tr>
<th rowspan="4">November 2012</th>
<td>IaaS</td>
<td>£14,550.21</td>
</tr>
<tr>
<td>PaaS</td>
<td>£70.00</td>
</tr>
<tr>
<td>SaaS</td>
<td>£208,719.57</td>
</tr>
<tr>
<td>Special Cloud Services</td>
<td><span style="color: #339966;"><strong>£672,425.69</strong></span></td>
</tr>
<tr>
<th rowspan="4">December 2012</th>
<td>IaaS</td>
<td>£98,234.06</td>
</tr>
<tr>
<td>PaaS</td>
<td>£120,272.32</td>
</tr>
<tr>
<td>SaaS</td>
<td>£367,895.00</td>
</tr>
<tr>
<td>Special Cloud Services</td>
<td><span style="color: #339966;"><strong>£957,549.27</strong></span></td>
</tr>
<tr>
<th rowspan="4">January 2013</th>
<td>IaaS</td>
<td>£87,725.96</td>
</tr>
<tr>
<td>PaaS</td>
<td>£65,169.00</td>
</tr>
<tr>
<td>SaaS</td>
<td>£129,434.26</td>
</tr>
<tr>
<td>Special Cloud Services</td>
<td><span style="color: #339966;"><strong>£2,053,921.26</strong></span></td>
</tr>
<tr>
<th rowspan="4">February 2013</th>
<td>IaaS</td>
<td>£202,405.24</td>
</tr>
<tr>
<td>PaaS</td>
<td>£3,691.00</td>
</tr>
<tr>
<td>SaaS</td>
<td>£208,951.59</td>
</tr>
<tr>
<td>Special Cloud Services</td>
<td><span style="color: #339966;"><strong>£1,651,017.20</strong></span></td>
</tr>
<tr>
<th rowspan="4">March 2013</th>
<td>IaaS</td>
<td>£125,226.23</td>
</tr>
<tr>
<td>PaaS</td>
<td>£93,583.13</td>
</tr>
<tr>
<td>SaaS</td>
<td>£2,701,802.42</td>
</tr>
<tr>
<td>Special Cloud Services</td>
<td><span style="color: #339966;"><strong>£3,581,782.81</strong></span></td>
</tr>
</tbody>
</table>
<p>Clearly the largest spend has consistently been on the Lot 4 &#8211; specialist cloud services offerings. This is even clearer when visualising the data and comparing side by side with other Lot sales.</p>
<p><a href="http://catn.com/wp-content/uploads/2013/04/Cloud-Services-Spend.png"><img class="aligncenter size-medium wp-image-14511" alt="GCloud Lot Expenditure Compared" src="http://catn.com/wp-content/uploads/2013/04/Cloud-Services-Spend-590x425.png" width="590" height="425" /></a></p>
<h3>A Learning Process</h3>
<p>Initially this data could be interpreted as a negative for the hosting, infrastructure and software companies on the framework.</p>
<p>Of course there have been some big IaaS and PaaS sales, but clearly the money as a supplier is in consultancy and project management at the moment. However, this investment in consultancy and training shows a hunger in the public sector to understand the cloud services available and how they can benefit form them.</p>
<p>I think that Lot 1 to 3 suppliers should be encouraged by this. If G-Cloud was going to fail and government were not going to adopt cloud technologies then there would be no need for external assistance from consultants, trainers and project managers. The fact that millions has been spent suggests an impending, if not already current, shift in mindset about cloud computing.</p>
			<div class="post-advert horizontal">
				<div class="content">
					<img class="alignnone size-full wp-image-14684" alt="CatN Enterprise" src="http://catn.com/wp-content/uploads/2013/05/catn-enterprise-logo-80x80.png" width="80" height="80" />Talk to our team about IL2 and 3 private cloud hosting solutions.<a class="button" href="/vcluster">Learn more</a>				</div>
			</div>
			
<p>Following this investment in specialist cloud services, the onus is now on the cloud suppliers to build relationships with government buyers and build upon the foundations laid by consultants. Having said that, consultants now have a huge responsibility to continue the good work they have done and collaborate with SMEs or consortiums to aid uptake.</p>
<p>There is no better way for a consultant to justify their fees than to continue to deliver successfully. G-Cloud suppliers have shown that they are capable of consistently delivering high quality services albeit in relative terms with smaller sale value. Taking all of this into account, has there ever been a better time for collaboration between infrastructure and cloud service suppliers and consultants? They share a similar goal: <strong>to encourage cloud computing growth in government</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://catn.com/2013/05/20/what-are-people-buying-on-g-cloud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SEO friendly web hosting. How friendly can it be?</title>
		<link>http://catn.com/2013/05/13/seo-friendly-web-hosting/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=seo-friendly-web-hosting</link>
		<comments>http://catn.com/2013/05/13/seo-friendly-web-hosting/#comments</comments>
		<pubDate>Mon, 13 May 2013 07:47:50 +0000</pubDate>
		<dc:creator>Jurga Sefton</dc:creator>
				<category><![CDATA[Web Hosting]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Domains]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://catn.com/?p=14663</guid>
		<description><![CDATA[One of the many considerations when choosing a web hosting service should be the impact it will have on the SEO of your website or a blog. We met up with Laurence...]]></description>
				<content:encoded><![CDATA[<p class="first">One of the many considerations when choosing a web hosting service should be the impact it will have on the SEO of your website or a blog.</p>
<div id="attachment_14673" class="wp-caption alignright" style="width: 241px"><img class="size-full wp-image-14673 " alt="Laurence O'Toole - Analytics SEO " src="http://catn.com/wp-content/uploads/2013/05/laurence.png" width="231" height="267" /><p class="wp-caption-text">Laurence O&#8217;Toole &#8211; Founder of Analytics SEO</p></div>
<p>We met up with <a href="https://plus.google.com/u/0/101122920555397820958/posts" target="_blank">Laurence O’Toole</a>, the founder and CEO of <a href="http://www.analyticsseo.com/" target="_blank">Analytics SEO</a>, developers of an online SEO management software, to talk about the importance of hosting.</p>
<p><strong>Do you agree with the term ‘SEO friendly hosting’? Is it correct to label some hosting as SEO unfriendly, and what are the signals that hosting alone will have a massively positive/negative effect on the SEO aspect of your online project?</strong></p>
<p>That’s just a marketing ploy. A host could choose not to host dodgy or spammy sites, adult sites or any other type of site that is seen to be negative. In terms of hosting options, they could make configuring the server an easy task, as well as making sure it’s as fast as possible. They could also offer unique C class IPs as standard. But even if all those boxes were ticked, it doesn’t mean to say it’s “SEO friendly” as such. Short answer, it’s marketing fluff.</p>
<p><span id="more-14663"></span></p>
<p><strong>What is the checklist of items to consider when talking about SEO and hosting?</strong></p>
<ol>
<li>Ideally you want servers located in the right territory to match your top level domain, e.g. notwithstanding technical limitations that your organisation might have, if I was targeting users in France, I’d ideally locate the server in France and use a .fr domain.</li>
<li>Being able to manipulate server settings to aid in configuring URLs, URL re-writing and various other set-up options.</li>
<li>Good bandwidth capacity as standard to handle a possible overflow of traffic.</li>
<li>Load balancing facilities to make sure the site is live at all times.</li>
<li>99.9% uptime from your provider minimum.</li>
<li>Fast processors to aid in PHP and other script executions so that dynamically database driven sites perform at a decent pace.</li>
</ol>
<p><strong>How important is down time and server response? What down time would be considered crucial and have a negative impact?</strong></p>
<p>As far as Google is concerned any downtime is bad. When Google tries to re-crawl a page and cannot find that page, it will usually remove that page from its index. In terms of the length of time that the site is down for, this would have a bigger impact on traffic numbers and visitors as opposed to search engines. Less downtime simply means there is a reduced risk of Google crawling a dead end.</p>
<p><strong>If your site is down for whatever reason what should the server return? What is the best practice?</strong></p>
<p>You want to tell users and search engines that your site is unavailable, why it is unavailable and when it will be back online again. Create a ‘Service Unavailable’ page that returns a 503 status code.</p>
<p>Something like this would suffice: “Hi, thanks for stopping by! Sorry, but you’ve caught us in the middle of our routine maintenance window (what rotten luck!). Normally, we’d have hundreds of great pages about SEO software to show you. But not to worry, if everything goes well (and it usually does) then we’ll be back online by 08:00 GMT”.</p>
<p>You want to ensure that your web server gives a 503 Service Unavailable HTTP status code – this will tell search engines that the site is currently unavailable and it is a temporary state. You can even include a retry time in the file returned. You can also modify your .htaccess file to use 302 redirects to temporarily redirect all your current indexed pages to the 503 page.</p>
			<div class="post-advert horizontal">
				<div class="content">
					<img class="alignnone size-full wp-image-13619" alt="graph" src="http://catn.com/wp-content/uploads/2012/10/graph.png" width="82" height="82" />SEO friendly, UK based hosting with a dedicated IP from £5 per month.<a class="button" href="/vCluster">Read more</a>				</div>
			</div>
			
<p><strong>What if your host does not give a server status of 503 for scheduled maintenance?</strong></p>
<p>In terms of SEO? Pages that were crawled within that session will get removed from the index.</p>
<p>Googlebot&#8217;s crawling rate will fall when it sees a spike in 503 headers. This is unavoidable but as long as the site is down for a short period of time, it shouldn&#8217;t cause any long-term problems and the crawl rate will recover fairly quickly to the pre-maintenance downtime rate.</p>
<p><strong>How important is the IP location?</strong></p>
<p>Very. It could be the difference between ranking locally or globally. Being on the wrong IP could associate your site with a bad neighbourhood, or the wrong region. If in doubt use any IP checker <a href="http://www.iplocation.net/" target="_blank">online to check the location for your IP</a> and also <a href="http://www.my-ip-neighbors.com/" target="_blank">who else is hosted on your IP</a>.</p>
<p><strong>How important is the page load speed?</strong></p>
<p>It is very important to users and for that reason search engines. The search engines want to return the best possible experience for their users and if your site is slow to load (compared to your competitors in the SERPs) then you are going to negatively impact your rankings. There are lots of things you can do to get your site to load faster; these include caching static content, using CDNs, using PHP accelerators, optimizing your databases, compressing images, reducing the number of simultaneous HTTP requests. Start by using browser plugins such as <a href="http://developer.yahoo.com/yslow/" target="_blank">Yahoo Slow</a> and <a href="https://developers.google.com/speed/pagespeed/" target="_blank">Google Speed</a> to grade your site and work out what you need to do.</p>
<p><strong>Some hosting packages are offered alongside site builders; what’s the advantage / disadvantage of using them from SEO perspective?</strong></p>
<p>None. It simply helps you build a site more quickly, such as having WordPress or Joomla pre-installed.</p>
<p><strong>There has been loads of talk about ‘bad neighbourhood’. What neighbours hosted by the same host should be avoided? What’s the best way to check if there are some naughty neighbours?</strong></p>
<p>Any spammy sites or sites and IPs owned by the same person or company usually smell fishy to Google. However one can safely purchase their own unique IP address and host in the same server as spammy sites and this is perfectly safe. IPs are the problem, not the actual server. There are a multitude of tools that you can use online to check if you are in a bad neighbourhood.</p>
<p><!--more--></p>
<p><strong>How important is it to be able to use permanent and temporary redirects (mod_rewrite) with your hosting company from an SEO perspective?</strong></p>
<p>This gives you the control you need, so it’s important. Permanent redirects are essential when migrating sites or using multiple domains. Temporary redirects can cause harm in SEO if used the wrong way, but that’s a different story.</p>
<p><strong>What impact do different types of hosting (shared, VMs, dedicated) have on SEO?</strong></p>
<p>None. It’s all about server speed, uptime and load balancing. So long as your IP address is unique, sharing a host with a spammy site should not be a problem.</p>
<p><strong>What do you think people should be aware of from an SEO perspective when using some of the super cheap or free hosting options out there?</strong></p>
<p>The obvious. They will probably be within bad neighborhoods. Cheap or free hosts are used by spammers and malicious sites for various uses.</p>
<p><strong>Anything else you’d like to mention?</strong></p>
<p>It’s well worth paying for a good server and IP address. Even better, a dedicated host means you have full control over your site.</p>
<blockquote><p>Thank you Laurence! You can <a href="https://twitter.com/analyticsseo" target="_blank">follow Analytics SEO on Twitter</a> or <a href="http://catn.com/contact/">get in touch with CatN</a> to explore cloud hosting opportunities and how we could help addressing some of the issues mentioned above.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://catn.com/2013/05/13/seo-friendly-web-hosting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Top posts on CatN.com</title>
		<link>http://catn.com/2013/05/06/top-posts-on-catn-com/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=top-posts-on-catn-com</link>
		<comments>http://catn.com/2013/05/06/top-posts-on-catn-com/#comments</comments>
		<pubDate>Mon, 06 May 2013 07:45:39 +0000</pubDate>
		<dc:creator>Joe Gardiner</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[popular]]></category>
		<category><![CDATA[stats]]></category>
		<category><![CDATA[top]]></category>

		<guid isPermaLink="false">http://catn.com/?p=14158</guid>
		<description><![CDATA[With the CatN website and blog just over four years old, we have reviewed all of our content to find the top five most popular posts over the last four years. We&#8217;ll...]]></description>
				<content:encoded><![CDATA[<p class="first">With the CatN website and blog just over four years old, we have reviewed all of our content to find the top five most popular posts over the last four years.</p>
<p>We&#8217;ll start with number 5 on the list. The 5th most popular post is&#8230;</p>
<ol reversed="reversed">
<li><a href="/2010/01/28/securing-mod-php/">Securing mod_php – without the vasectomy</a><br />
Mark Sutton wrote this post in the early days of CatN. He explains the basic insecurities of mod_php in a multi-tenant environment and goes on the consider all of the options available for improving security. This post is a cornerstone of the vCluster stack and gives an insight into some of the thought behind the cloud platform in the early days of CatN.</li>
<li><a href="/2012/08/30/p2v-migration-a-live-centos-server-to-a-kvm-guest/">P2V migration – a live CentOS server to a KVM guest</a><br />
Linux Engineer Dawid Golunski explains the process of migrating a physical live Centos server to a KVM guest. The key to this article is that he completes the clone and migration live with no downtime for the origin physical server.</li>
<li><a href="/2009/03/23/preparing-procurve-switches-for-production/">Preparing Procurve Switches for Production</a><br />
Here CTO Mark Sutton takes users through the required steps to make a pair of Procurve switches production ready. We took delivery of these switches for our cloud platform and during the build Mark took notes to share with our readers.</li>
<li><a href="/2012/10/16/t-minus-1-year-and-counting-is-your-router-about-to-go-boom‽/">T minus 1 year and counting – is your router about to go boom‽</a><br />
Another one from Mark Sutton here, identifying a potential issue to do with global routing table capacity. He conservatively predicted that in approximately 12 months time when the global routing table reaches 512,000 prefixes a large number of routers across the internet would be affected.</li>
<li><a href="/2012/05/11/openindiana-vs-nexentastor-vs-freenas/">Openindiana vs Nexentastor vs FreeNAS</a><br />
Written by storage expert Alex, he looked into why we initially chose OpenIndiana over the other operating systems offering ZFS support. The results are interesting and he has included some insightful performance analysis supporting the decision.</li>
</ol>
<p><span id="more-14158"></span></p>
			<div class="post-advert horizontal">
				<div class="content">
					<img class="alignnone size-full wp-image-14711" alt="vCluster Logo" src="http://catn.com/wp-content/uploads/2013/05/vcluster-80-x-80.png" width="80" height="80" />Instantly scaling PHP cloud hosting. Deploy your PHP applications on the vCluster platform.<a class="button" href="/vcluster">Find out more</a>				</div>
			</div>
			
<p>We&#8217;re looking forward to another successful four years filled with excellent content popping up on the blog. It&#8217;s interesting to see that the most successful blogs are technical and offer advice and guidance for advanced actions. Let&#8217;s see if this changes as we release more services over the coming months and our user base develops.</p>
]]></content:encoded>
			<wfw:commentRss>http://catn.com/2013/05/06/top-posts-on-catn-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Access Control &#8211; Are you in or out?</title>
		<link>http://catn.com/2013/04/29/access-control-are-you-in-or-out/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=access-control-are-you-in-or-out</link>
		<comments>http://catn.com/2013/04/29/access-control-are-you-in-or-out/#comments</comments>
		<pubDate>Mon, 29 Apr 2013 07:34:17 +0000</pubDate>
		<dc:creator>Steve Whiteley</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[access]]></category>
		<category><![CDATA[iso27001]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[touch]]></category>

		<guid isPermaLink="false">http://catn.com/?p=14188</guid>
		<description><![CDATA[As CatN continue on our journey towards ISO 27001 accreditation, part of the information security policy requires that we have an active and enforced security model in place at our office location....]]></description>
				<content:encoded><![CDATA[<p class="first">As CatN continue on our journey towards ISO 27001 accreditation, part of the information security policy requires that we have an active and enforced security model in place at our office location.</p>
<p>Since introducing an access control system in June 2010, all employees have been required to tap in and out of the office using <acronym title="Radio-frequency identification">RFID</acronym> technology, however the process for keeping track of guests coming in and out of the building has been very much a manual process.</p>
<p><span id="more-14188"></span><img class="aligncenter size-medium wp-image-14197" alt="access-control-book" src="http://catn.com/wp-content/uploads/2013/04/access-control-book-590x442.jpg" width="590" height="442" /></p>
<p>As we are a company working in the technology industry, using a pen and paper solution seemed highly inadequate. Because of this I embarked on a week long mini solo project to design and build a touch screen terminal to interface with a pre-existing API written by <a title="Jonathon Wardman" href="http://catn.com/author/jonathon/" target="_blank">Jonathon</a>. This would allow us to keep track of visitors using the same system currently in use to manage employee access.</p>
<p><img class="aligncenter size-medium wp-image-14192" alt="access-control-ideas-sketch" src="http://catn.com/wp-content/uploads/2013/04/access-control-ideas-sketch-e1365429394924-442x590.jpeg" width="442" height="590" /></p>
<p>After discussing the requirements, I threw together some very quick sketches of immediate thoughts on how to achieve an end result in the time available and any features that should be considered. It was decided that the interface should be web based and include the following:</p>
<ul>
<li>Instruction to inform visitors and delivery drivers how to use the reception desk phone.</li>
<li>A list of every person currently registered in the system.</li>
<li>Optimisation for a 1920&#215;1080 touch screen display.</li>
<li>Filtering of registered users by initial, and potentially current status (Logged in / out).</li>
<li>Visual display of the current time (and date).</li>
<li>Functionality to register new users by storing their name, company and photo.</li>
<li>Interaction with the security camera in reception to take a profile photo.</li>
<li>Ability to sign users in and out using their assigned pin number if required.</li>
</ul>
<p><img class="aligncenter size-medium wp-image-14191" alt="access-control-login-sketch" src="http://catn.com/wp-content/uploads/2013/04/access-control-login-sketch-590x442.jpeg" width="590" height="442" /></p>
<p>Admittedly I do very little design work these days, leaving most of the pixel pushing to our in house designer <a title="Nick Haines" href="http://catn.com/author/nick/" target="_blank">Nick</a>, so this project provided something a little different to normal day to day activities. With the time restrictions in place there was some pressure to complete the concept design in order to allow for the interface to be written and working by the end of the week.</p>
			<div class="post-advert horizontal">
				<div class="content">
					<img src="http://catn.com/wp-content/uploads/2012/10/shared-secure.png" alt="Shared and Secure" width="82" height="82" class="alignnone size-full wp-image-610" />Secure e-commerce hosting solutions for Enterprise deployed in a scalable, cloud environment.<a class="button" href="/enterprise">Learn more</a>				</div>
			</div>
			
<p>Shown here are the stages I went through turning the initial sketch into a finished concept design. Despite including a similar look and feel from the first idea to the final design, you probably agree that there was sufficient improvements made in the short period of time allocated to designing the interface &#8211; just a single day.</p>
<div id="attachment_14208" class="wp-caption aligncenter" style="width: 600px"><img class="size-medium wp-image-14208" alt="Design Idea One" src="http://catn.com/wp-content/uploads/2013/04/access-control-design-idea-1-590x214.jpg" width="590" height="214" /><p class="wp-caption-text">Listing the users with the inclusion of small profile photos.</p></div>
<div id="attachment_14207" class="wp-caption aligncenter" style="width: 600px"><img class="size-medium wp-image-14207" alt="Design Idea Two" src="http://catn.com/wp-content/uploads/2013/04/access-control-design-idea-2-590x380.jpg" width="590" height="380" /><p class="wp-caption-text">Removed the profile photos and added the footer bar.</p></div>
<div id="attachment_14206" class="wp-caption aligncenter" style="width: 600px"><img class="size-medium wp-image-14206" alt="Design Idea Three" src="http://catn.com/wp-content/uploads/2013/04/access-control-design-idea-3-590x354.jpg" width="590" height="354" /><p class="wp-caption-text">Idea for including pagination and an A-Z list to filter users.</p></div>
<div id="attachment_14209" class="wp-caption aligncenter" style="width: 600px"><img class="size-medium wp-image-14209" alt="Design Idea Four" src="http://catn.com/wp-content/uploads/2013/04/access-control-design-idea-4-590x354.jpg" width="590" height="354" /><p class="wp-caption-text">Brightened it up a little using a more colourful background.</p></div>
<div id="attachment_14210" class="wp-caption aligncenter" style="width: 600px"><img class="size-medium wp-image-14210" alt="Final Design" src="http://catn.com/wp-content/uploads/2013/04/access-control-design-idea-5-590x331.jpg" width="590" height="331" /><p class="wp-caption-text">Additions include the display of the current date and options to filter by status.</p></div>
<p>In future, when visiting the CatN office you will be presented with the following display to guide you through the process of signing in an out of the office.</p>
<p><img class="aligncenter size-medium wp-image-14190" alt="access-control-touch-screen" src="http://catn.com/wp-content/uploads/2013/04/access-control-touch-screen-590x442.jpg" width="590" height="442" /></p>
]]></content:encoded>
			<wfw:commentRss>http://catn.com/2013/04/29/access-control-are-you-in-or-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create an OpenStack instance with just Curl</title>
		<link>http://catn.com/2013/04/23/create-an-openstack-instance-with-just-curl/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=create-an-openstack-instance-with-just-curl</link>
		<comments>http://catn.com/2013/04/23/create-an-openstack-instance-with-just-curl/#comments</comments>
		<pubDate>Tue, 23 Apr 2013 08:35:27 +0000</pubDate>
		<dc:creator>Damion Parry</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[OpenStack]]></category>

		<guid isPermaLink="false">http://catn.com/?p=14376</guid>
		<description><![CDATA[For some reason, the idea of direct interaction with the various OpenStack components seemed like a good idea. The aim was to create an instance, set sane security rules, and add a...]]></description>
				<content:encoded><![CDATA[<p class="first">For some reason, the idea of direct interaction with the various OpenStack components seemed like a good idea. The aim was to create an instance, set sane security rules, and add a public key all through the API.</p>
<p>I struggled with the documentation. It was a little hard to find, and what I did find seemed a little thin. However with the &#8211;debug option on the cli clients, which prints out all of the calls made to the various API endpoints as it goes along, it was game on.</p>
<p>First things first, we need an OpenStack environment to play with. RedHat with their newly released RDO comes to the rescue here. Out of all the one click OpenStack tools I&#8217;ve tried, RDO has been the simplest by far. Just three simple steps. Well, if you don&#8217;t include step 0 of course: <a title="Quickstart guide" href="http://openstack.redhat.com/Quickstart" target="_blank">http://openstack.redhat.com/Quickstart</a> . We also installed a machine image through the dashboard to make life a little easier.</p>
<p><span id="more-14376"></span></p>
			<div class="post-advert horizontal">
				<div class="content">
					<img class="alignnone size-full wp-image-14687" alt="OpenStack Logo" src="http://catn.com/wp-content/uploads/2013/05/openstack-logo-80x80.png" width="80" height="80" />Migrate to the cloud! Talk to use about OpenStack powered, private cloud deployments. <a class="button" href="/enterprise">Find out more</a>				</div>
			</div>
			
<p>With a successful deployment we end up with the following credentials for our testbed (yes I know creating instances as admin is bad, and if we were using quantum we would all be going to hell, but bare with me):</p>
<pre class="notice">user: admin
tenant name: admin
password: 0002472e1ab140f2</pre>
<p>Second thing second, piping the output from curl through the python JSON module made life a lot easier, no longer starting cross eyed at the screen trying to follow the curly brace nesting.</p>
<p>Where to start? OpenStack uses a component called Keystone for all authentication, this is documented well and in numerous places, so for this I&#8217;ll simply state that before we can do anything we need to obtain an authentication token for the user &amp; project that the instance will belong to. This simply requires a POST to the Keystone server with the following JSON structure:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">&quot;auth&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">&quot;tenantName&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;admin&quot;</span><span style="color: #339933;">,</span> 
        <span style="color: #0000ff;">&quot;passwordCredentials&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">&quot;username&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;admin&quot;</span><span style="color: #339933;">,</span> 
            <span style="color: #0000ff;">&quot;password&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;0002472e1ab140f2&quot;</span> 
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Which will result in the following command (the keystone endpoint in my case is at http://10.199.0.250:35357/v2.0 and we are after a token):</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">curl http:<span style="color: #000000; font-weight: bold;">//</span>10.199.0.250:<span style="color: #000000;">35357</span><span style="color: #000000; font-weight: bold;">/</span>v2.0<span style="color: #000000; font-weight: bold;">/</span>tokens \
<span style="color: #660033;">-X</span> POST <span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;Content-Type: application/json&quot;</span> \
<span style="color: #660033;">-d</span> <span style="color: #ff0000;">'{&quot;auth&quot;: {&quot;tenantName&quot;: &quot;admin&quot;, &quot;passwordCredentials&quot;: {&quot;username&quot;: &quot;admin&quot;, &quot;password&quot;: &quot;0002472e1ab140f2&quot;}}}'</span></pre></td></tr></table></div>

<p>Which will return the following mess:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;access&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;token&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;issued_at&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;2013-04-18T14:40:23.299903&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;expires&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;2013-04-19T14:40:23Z&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;4c5ef01f52c7404fb5324c520d25d1fe&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;tenant&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;description&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;admin tenant&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;enabled&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;admin&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;serviceCatalog&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;endpoints&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;adminURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8774/v2/51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;region&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RegionOne&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;internalURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8774/v2/51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;9869f55f0de2490685676b6ec27f6097&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;publicURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8774/v2/51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;endpoints_links&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;type&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;compute&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;nova&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;endpoints&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;adminURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8080&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;region&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RegionOne&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;internalURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8080&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;321601d827ba4bbbb6de1df69fd43a1c&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;publicURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8080&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;endpoints_links&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;type&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;s3&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;swift_s3&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;endpoints&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;adminURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:9292&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;region&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RegionOne&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;internalURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:9292&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;cca7d7a24dbe45b6ae08da2c023b0d82&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;publicURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:9292&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;endpoints_links&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;type&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;image&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;glance&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;endpoints&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;adminURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8776/v1/51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;region&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RegionOne&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;internalURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8776/v1/51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;14773153229d4e7f80e47cf7b1dd2d15&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;publicURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8776/v1/51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;endpoints_links&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;type&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;volume&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;cinder&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;endpoints&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;adminURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8773/services/Admin&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;region&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RegionOne&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;internalURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8773/services/Cloud&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;064df72a67f54dffa68c07b8fc400bdb&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;publicURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8773/services/Cloud&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;endpoints_links&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;type&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;ec2&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;nova_ec2&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;endpoints&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;adminURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8080/&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;region&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RegionOne&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;internalURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8080/v1/AUTH_51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;194df182a8c043e48175a40fb615064e&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;publicURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8080/v1/AUTH_51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;endpoints_links&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;type&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;object-store&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;swift&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;endpoints&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;adminURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:35357/v2.0&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;region&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RegionOne&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;internalURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:5000/v2.0&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;34db74b5f32f4121932725b1146a1701&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;publicURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:5000/v2.0&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;endpoints_links&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;type&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;identity&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;keystone&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;user&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;username&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;admin&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;roles_links&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;b5902682120742baa150945d8a37ff47&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;roles&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;admin&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;admin&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;metadata&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;is_admin&quot;</span><span style="color: #339933;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;roles&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;9aa2eb385f4e4a8e80ad5002c212e76b&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>but with a little help from Python, by piping it through the json module, it can be turned into:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">&quot;access&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">&quot;metadata&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">&quot;is_admin&quot;</span><span style="color: #339933;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> 
            <span style="color: #0000ff;">&quot;roles&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
                <span style="color: #0000ff;">&quot;9aa2eb385f4e4a8e80ad5002c212e76b&quot;</span>
            <span style="color: #009900;">&#93;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
        <span style="color: #0000ff;">&quot;serviceCatalog&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
            <span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">&quot;endpoints&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
                    <span style="color: #009900;">&#123;</span>
                        <span style="color: #0000ff;">&quot;adminURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8774/v2/51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;9869f55f0de2490685676b6ec27f6097&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;internalURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8774/v2/51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;publicURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8774/v2/51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;region&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RegionOne&quot;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;endpoints_links&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;nova&quot;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;type&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;compute&quot;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
            <span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">&quot;endpoints&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
                    <span style="color: #009900;">&#123;</span>
                        <span style="color: #0000ff;">&quot;adminURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8080&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;321601d827ba4bbbb6de1df69fd43a1c&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;internalURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8080&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;publicURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8080&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;region&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RegionOne&quot;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;endpoints_links&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;swift_s3&quot;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;type&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;s3&quot;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
            <span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">&quot;endpoints&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
                    <span style="color: #009900;">&#123;</span>
                        <span style="color: #0000ff;">&quot;adminURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:9292&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;cca7d7a24dbe45b6ae08da2c023b0d82&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;internalURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:9292&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;publicURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:9292&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;region&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RegionOne&quot;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;endpoints_links&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;glance&quot;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;type&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;image&quot;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
            <span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">&quot;endpoints&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
                    <span style="color: #009900;">&#123;</span>
                        <span style="color: #0000ff;">&quot;adminURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8776/v1/51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;14773153229d4e7f80e47cf7b1dd2d15&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;internalURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8776/v1/51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;publicURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8776/v1/51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;region&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RegionOne&quot;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;endpoints_links&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;cinder&quot;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;type&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;volume&quot;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
            <span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">&quot;endpoints&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
                    <span style="color: #009900;">&#123;</span>
                        <span style="color: #0000ff;">&quot;adminURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8773/services/Admin&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;064df72a67f54dffa68c07b8fc400bdb&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;internalURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8773/services/Cloud&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;publicURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8773/services/Cloud&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;region&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RegionOne&quot;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;endpoints_links&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;nova_ec2&quot;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;type&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;ec2&quot;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
            <span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">&quot;endpoints&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
                    <span style="color: #009900;">&#123;</span>
                        <span style="color: #0000ff;">&quot;adminURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8080/&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;194df182a8c043e48175a40fb615064e&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;internalURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8080/v1/AUTH_51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;publicURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:8080/v1/AUTH_51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;region&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RegionOne&quot;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;endpoints_links&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;swift&quot;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;type&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;object-store&quot;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
            <span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">&quot;endpoints&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
                    <span style="color: #009900;">&#123;</span>
                        <span style="color: #0000ff;">&quot;adminURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:35357/v2.0&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;34db74b5f32f4121932725b1146a1701&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;internalURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:5000/v2.0&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;publicURL&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://10.199.0.250:5000/v2.0&quot;</span><span style="color: #339933;">,</span> 
                        <span style="color: #0000ff;">&quot;region&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RegionOne&quot;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;endpoints_links&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;keystone&quot;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;type&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;identity&quot;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
        <span style="color: #0000ff;">&quot;token&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">&quot;expires&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;2013-04-19T14:43:25Z&quot;</span><span style="color: #339933;">,</span> 
            <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;94ad2a44098444baa0550528f2662c57&quot;</span><span style="color: #339933;">,</span> 
            <span style="color: #0000ff;">&quot;issued_at&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;2013-04-18T14:43:25.396925&quot;</span><span style="color: #339933;">,</span> 
            <span style="color: #0000ff;">&quot;tenant&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">&quot;description&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;admin tenant&quot;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;enabled&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;51ad87714b86442d9a74537d6f890060&quot;</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;admin&quot;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
        <span style="color: #0000ff;">&quot;user&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;b5902682120742baa150945d8a37ff47&quot;</span><span style="color: #339933;">,</span> 
            <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;admin&quot;</span><span style="color: #339933;">,</span> 
            <span style="color: #0000ff;">&quot;roles&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
                <span style="color: #009900;">&#123;</span>
                    <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;admin&quot;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
            <span style="color: #0000ff;">&quot;roles_links&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
            <span style="color: #0000ff;">&quot;username&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;admin&quot;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>We&#8217;re only really interested in the unique identifier for the authentication token:</p>
<pre class="notice">token.id: "94ad2a44098444baa0550528f2662c57"</pre>
<p>and the tenant id:</p>
<pre class="notice">token.id.tenant.id: "51ad87714b86442d9a74537d6f890060"</pre>
<p>With these two ids we&#8217;re now pretty much set.</p>
<p>Before I forget, lets open up the firewall to allow SSH access. You can get the existing security group rules with the following, note the project id in the url, as well as the two headers including the tenant id and authentication token:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">curl <span style="color: #660033;">-s</span> http:<span style="color: #000000; font-weight: bold;">//</span>10.199.0.250:<span style="color: #000000;">8774</span><span style="color: #000000; font-weight: bold;">/</span>v2<span style="color: #000000; font-weight: bold;">/</span>51ad87714b86442d9a74537d6f890060<span style="color: #000000; font-weight: bold;">/</span>os-security-groups \
<span style="color: #660033;">-X</span> GET \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;X-Auth-Project-Id: admin&quot;</span> \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;Accept: application/json&quot;</span> \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;X-Auth-Token: 9d88f6c9f40a4890aa8612fda095bccb&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> python -mjson.tool</pre></td></tr></table></div>

<p>To add port 22 to the list of allowed, we need to provide the following data structure:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;"> <span style="color: #0000ff;">&quot;security_group_rule&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">&quot;from_port&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;22&quot;</span><span style="color: #339933;">,</span> 
    <span style="color: #0000ff;">&quot;ip_protocol&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;tcp&quot;</span><span style="color: #339933;">,</span> 
    <span style="color: #0000ff;">&quot;to_port&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;22&quot;</span><span style="color: #339933;">,</span> 
    <span style="color: #0000ff;">&quot;parent_group_id&quot;</span><span style="color: #339933;">:</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> 
    <span style="color: #0000ff;">&quot;cidr&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;0.0.0.0/0&quot;</span><span style="color: #339933;">,</span> 
    <span style="color: #0000ff;">&quot;group_id&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">null</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>so the curl command would look like:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">curl <span style="color: #660033;">-s</span> http:<span style="color: #000000; font-weight: bold;">//</span>10.199.0.250:<span style="color: #000000;">8774</span><span style="color: #000000; font-weight: bold;">/</span>v2<span style="color: #000000; font-weight: bold;">/</span>51ad87714b86442d9a74537d6f890060<span style="color: #000000; font-weight: bold;">/</span>os-security-group-rules \
<span style="color: #660033;">-X</span> POST <span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;X-Auth-Project-Id: admin&quot;</span> \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;Content-Type: application/json&quot;</span> \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;Accept: application/json&quot;</span> \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;X-Auth-Token: 9d88f6c9f40a4890aa8612fda095bccb&quot;</span> \
<span style="color: #660033;">-d</span> <span style="color: #ff0000;">'{&quot;security_group_rule&quot;: {&quot;from_port&quot;: &quot;22&quot;, &quot;ip_protocol&quot;: &quot;tcp&quot;, &quot;to_port&quot;: &quot;22&quot;, &quot;parent_group_id&quot;: 1, &quot;cidr&quot;: &quot;0.0.0.0/0&quot;, &quot;group_id&quot;: null}}'</span> <span style="color: #000000; font-weight: bold;">|</span> python -mjson.tool</pre></td></tr></table></div>

<p>Next is to import an SSH key so that we can log in:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">curl <span style="color: #660033;">-i</span> http:<span style="color: #000000; font-weight: bold;">//</span>10.199.0.250:<span style="color: #000000;">8774</span><span style="color: #000000; font-weight: bold;">/</span>v2<span style="color: #000000; font-weight: bold;">/</span>51ad87714b86442d9a74537d6f890060<span style="color: #000000; font-weight: bold;">/</span>os-keypairs \
<span style="color: #660033;">-X</span> POST <span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;X-Auth-Project-Id: admin&quot;</span> \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;Content-Type: application/json&quot;</span> \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;Accept: application/json&quot;</span> <span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;X-Auth-Token: 4521d6dd1ece458f89f0c056442765b0&quot;</span> \
<span style="color: #660033;">-d</span> <span style="color: #ff0000;">'{&quot;keypair&quot;: {&quot;public_key&quot;: &quot;YOUR SSH PUBLIC KEY HERE&quot;, &quot;name&quot;: &quot;test-key&quot;}}'</span></pre></td></tr></table></div>

<p>Woohoo, nearly there. So, with that all set up, we can now launch an instance by providing the following object:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #0000ff;">&quot;server&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;instance1&quot;</span><span style="color: #339933;">,</span> 
    <span style="color: #0000ff;">&quot;imageRef&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;992f5732-af50-40fc-987f-25951cbce943&quot;</span><span style="color: #339933;">,</span> 
    <span style="color: #0000ff;">&quot;key_name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;test-key&quot;</span><span style="color: #339933;">,</span> 
    <span style="color: #0000ff;">&quot;flavorRef&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;3&quot;</span><span style="color: #339933;">,</span> 
    <span style="color: #0000ff;">&quot;max_count&quot;</span><span style="color: #339933;">:</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> 
    <span style="color: #0000ff;">&quot;min_count&quot;</span><span style="color: #339933;">:</span> <span style="color: #cc66cc;">1</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>The two magic numbers in there are the imageRef and the flavorRef which relate to the unique id for the machine image we created earlier and the number of the instance size we wich to use. These can be obtained via the API with the following two calls:</p>
			<div class="post-advert horizontal">
				<div class="content">
					<img class="alignnone size-full wp-image-14684" alt="CatN Enterprise" src="http://catn.com/wp-content/uploads/2013/05/catn-enterprise-logo-80x80.png" width="80" height="80" />Find out how cloud innovation can drive efficiencies in your business.<a class="button" href="/enterprise">Find out more</a>				</div>
			</div>
			
<p>Available images:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">curl <span style="color: #660033;">-s</span> http:<span style="color: #000000; font-weight: bold;">//</span>10.199.0.250:<span style="color: #000000;">8774</span><span style="color: #000000; font-weight: bold;">/</span>v2<span style="color: #000000; font-weight: bold;">/</span>51ad87714b86442d9a74537d6f890060<span style="color: #000000; font-weight: bold;">/</span>images \
<span style="color: #660033;">-X</span> GET \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;X-Auth-Project-Id: admin&quot;</span> \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;Accept: application/json&quot;</span> \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;X-Auth-Token: 6083193874684f38865b086a8a5f4b7b&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> python -mjson.tool</pre></td></tr></table></div>

<p>Available flavors:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">curl <span style="color: #660033;">-s</span> http:<span style="color: #000000; font-weight: bold;">//</span>10.199.0.250:<span style="color: #000000;">8774</span><span style="color: #000000; font-weight: bold;">/</span>v2<span style="color: #000000; font-weight: bold;">/</span>51ad87714b86442d9a74537d6f890060<span style="color: #000000; font-weight: bold;">/</span>flavors \
<span style="color: #660033;">-X</span> GET \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;X-Auth-Project-Id: admin&quot;</span> \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;Accept: application/json&quot;</span> \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;X-Auth-Token: 6083193874684f38865b086a8a5f4b7b&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> python -mjson.tool</pre></td></tr></table></div>

<p>Which result in the following call to actually create the instance:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">curl <span style="color: #660033;">-i</span> http:<span style="color: #000000; font-weight: bold;">//</span>10.199.0.250:<span style="color: #000000;">8774</span><span style="color: #000000; font-weight: bold;">/</span>v2<span style="color: #000000; font-weight: bold;">/</span>51ad87714b86442d9a74537d6f890060<span style="color: #000000; font-weight: bold;">/</span>servers \
<span style="color: #660033;">-X</span> POST <span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;X-Auth-Project-Id: admin&quot;</span> \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;Content-Type: application/json&quot;</span> \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;Accept: application/json&quot;</span> \
<span style="color: #660033;">-H</span> <span style="color: #ff0000;">&quot;X-Auth-Token: 6083193874684f38865b086a8a5f4b7b&quot;</span> \
<span style="color: #660033;">-d</span> <span style="color: #ff0000;">'{&quot;server&quot;: {&quot;name&quot;: &quot;instance1&quot;, &quot;imageRef&quot;: &quot;992f5732-af50-40fc-987f-25951cbce943&quot;, &quot;key_name&quot;: &quot;damion-flybook&quot;, &quot;flavorRef&quot;: &quot;3&quot;, &quot;max_count&quot;: 1, &quot;min_count&quot;: 1}}'</span></pre></td></tr></table></div>

<p>Job done.</p>
]]></content:encoded>
			<wfw:commentRss>http://catn.com/2013/04/23/create-an-openstack-instance-with-just-curl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building a virtual machine image for CentOS</title>
		<link>http://catn.com/2013/04/18/building-a-virtual-machine-image-for-centos/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=building-a-virtual-machine-image-for-centos</link>
		<comments>http://catn.com/2013/04/18/building-a-virtual-machine-image-for-centos/#comments</comments>
		<pubDate>Thu, 18 Apr 2013 15:46:57 +0000</pubDate>
		<dc:creator>Joe Gardiner</dc:creator>
				<category><![CDATA[CentOS Images]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[VM]]></category>

		<guid isPermaLink="false">http://catn.com/?p=14345</guid>
		<description><![CDATA[This post describes the process of creating a CentOS virtual machine image. Creating a base or master image is incredibly useful in a cloud environment as it allows the creation of multiple...]]></description>
				<content:encoded><![CDATA[<p class="first">This post describes the process of creating a CentOS virtual machine image. Creating a base or master image is incredibly useful in a cloud environment as it allows the creation of multiple nodes / VMs or guests based on the original template.</p>
<p>We have an existing CatN Labs project where we are hosting pre-built CentOS golden master images for use when deploying multiple nodes. You can read about the project on the <a title="CentOS Images" href="http://catn.com/labs/centos-images/">CatN Labs CentOS Images </a>page.</p>
<p>The base image is a static template of software including OS which is mounted when the VM runs and referenced by further clone nodes. To get started on the base template you will need to have some tools installed on your Linux node. Adapt the following commands for your distribution of choice!</p>
<p><span id="more-14345"></span></p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">yum groupinstall &quot;Virtualization Tools&quot;
yum install virt-manager libvirt libvirt-python python-virtinst virt-top libguestfs-tools
reboot</pre></td></tr></table></div>

			<div class="post-advert horizontal">
				<div class="content">
					<img class="alignnone size-full wp-image-14280" alt="host-unlimited" src="http://catn.com/wp-content/uploads/2013/04/host-unlimited.png" width="82" height="82" />CatN experts are on hand to discuss your cloud hosting requirements today. Get in touch to discuss migrating to the cloud.<a class="button" href="/contact">Find out more</a>				</div>
			</div>
			
<h2>Testing an installation</h2>
<p>Now that Virtualisation tools have been installed you can test a simple CentOS installation using a remote kickstart file. With the following commands you can create a local VM without using a CD/DVD or ISO.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">virt-install \&lt;img class=&quot;alignnone size-full wp-image-14687&quot; alt=&quot;OpenStack Logo&quot; src=&quot;http://catn.com/wp-content/uploads/2013/05/openstack-logo-80x80.png&quot; width=&quot;80&quot; height=&quot;80&quot; /&gt;
--name &quot;centos6x-vm-gpt&quot; \
--ram 1024 \
--nographics \
--os-type=linux \
--os-variant=rhel6 \
--location=http://mirror.catn.com/pub/centos/6/os/x86_64 \
--extra-args=&quot;ks=http://catn.com/wp-content/uploads/2013/04/kickstart-centos6x-vm-gpt-selinux.cfg text console=tty0 utf8 console=ttyS0,115200&quot; \
--disk path=/var/lib/libvirt/images/centos6x-vm-gpt.img,size=10,bus=virtio,format=qcow2</pre></td></tr></table></div>

<p>The above command runs a text based installation of the most recent version of CentOS (from the CatN mirror) from a public HTTP mirror. As you can see the VM will be created with the given settings in the command. The output of the installation will be sent to your terminal.</p>
<pre class="success">Starting install...
Retrieving file .treeinfo...                                                     |  798 B     00:00 ...
Retrieving file vmlinuz...                                                       | 7.7 MB     00:00 ...
Retrieving file initrd.img...                                                    |  62 MB     00:01 ...
Allocating 'centos6x-vm-gpt.img'                                                 |  10 GB     00:00
Creating domain...                                                               |    0 B     00:00
Connected to domain centos6x-vm-gpt
Escape character is ^]
...</pre>
<p>When installation is complete you can then connect to the console of the VM and interact with it in the usual way.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">virsh console centos6x-vm-gpt</pre></td></tr></table></div>

<p>When you are happy that the installation completed successfully, and that you can access the VM you can delete to free up resources in the following way.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">virsh destroy centos6x-vm-gpt
virsh undefine centos6x-vm-gpt
rm /var/lib/libvirt/images/centos6x-vm-gpt.img</pre></td></tr></table></div>

<h2>Creating the CentOS master image</h2>
<p>Now that we have tested an installation, it&#8217;s time to create the master image. We can reuse the command from the previous section to create a VM.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">virt-install \
--name &quot;centos6x-vm-gpt&quot; \
--ram 1024 \
--nographics \
--os-type=linux \
--os-variant=rhel6 \
--location=http://mirror.catn.com/pub/centos/6/os/x86_64 \
--extra-args=&quot;ks=http://catn.com/wp-content/uploads/2013/04/kickstart-centos6x-vm-gpt-selinux.cfg text console=tty0 utf8 console=ttyS0,115200&quot; \
--disk path=/var/lib/libvirt/images/centos6.3-gold.img,size=10,bus=virtio,format=qcow2</pre></td></tr></table></div>

<p>Then, once again, reuse the command to connect to the console on the new guest.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">virsh console centos6x-vm-gpt</pre></td></tr></table></div>

<p>Once on the VM&#8217;s console make sure you update and apply the latest packages using yum (or the relevant package manager).</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">yum -y update
reboot</pre></td></tr></table></div>

<p>When the guest has completed the reboot login again. It is a good idea to free up space by removing any old kernels as we want this master image to be as lean as possible to avoid resource waste when rolling out multiple nodes. Assuming that the kernal was updated during the yum update carried out in the previous step, it would have output something similar to the following in the updates list.</p>
<pre class="notice">...
Installing : kernel-2.6.32-358.2.1.el6.x86_64
...</pre>
<p>To remove all of the old kernals run:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">yum remove $(rpm -q kernel | fgrep -v `uname -r`)</pre></td></tr></table></div>

<h3>libguestfs-tools</h3>
<p>At this point you need to check the version of <code>libguestfs-tools</code> that you are using.</p>
<ol style="list-style: lower-alpha;">
<li>If you are using CentOS 6.3 on your hypervisor and therefore a newer version of <code>libguestfs-tools</code> then shutdown the guest and run the following commands.

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">shutdown -h now
virt-sysprep -d centos6x-vm-gpt</pre></td></tr></table></div>

</li>
<li>On older versions of CentOS you will have an older version of <code>libguestfs-tools</code>. If this is the case you will need to run our Gold Master bash script on the guest to remove any references to MAC addresses.

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">wget https://raw.github.com/fubralimited/CentOS-KVM-Image-Tools/master/scripts/create-gold-master.sh;
bash create-gold-master.sh
shutdown -h now</pre></td></tr></table></div>

</li>
</ol>
<p>Exit from a guest console back to the hypervisor if you are still in one (you shouldn&#8217;t be!) Back in the hypervisor you need to sparsify and compress the VM image; again we want to make the VM as resource lean as possible. First of all change to the VM image directory.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">cd /var/lib/libvirt/images/</pre></td></tr></table></div>

<p>Now fire off the sparsify command.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">virt-sparsify --format qcow2 --convert qcow2 centos6x-vm-gpt.img centos6x-vm-gpt.img-sparsified
qemu-img convert -c -p -f qcow2 -O qcow2 centos6x-vm-gpt.img-sparsified centos6x-vm-gpt-gold-master.img</pre></td></tr></table></div>

<p>You may notice that in the above command we are using the &#8211;format and &#8211;convert arguments. In theory these should not be required to preserve the format, however in some cases auto-detection does not always work. From our experiments we have found that auto-detection does work on Ubuntu Precise, but not on Centos 6.3.</p>
			<div class="post-advert horizontal">
				<div class="content">
					<img class="alignnone size-full wp-image-14684" alt="CatN Enterprise" src="http://catn.com/wp-content/uploads/2013/05/catn-enterprise-logo-80x80.png" width="80" height="80" />Deploy a private cloud in your business with CatN Enterprise and OpenStack.<a class="button" href="/enterprise">Find out more</a>				</div>
			</div>
			
<h2>Create a guest using the golden image</h2>
<p>Great success! It is time to create a guest using a copy of the golden image we have just created. The first step is to copy the image to make sure we preserve the original.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">cp centos6x-vm-gpt-gold-master.img centos6x-vm-gpt-gold-copy1-nobacking.img</pre></td></tr></table></div>

<p>When the copy is complete, we use that old create command again, but this time reference the copy of the image in the &#8211;disk argument.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">virt-install \
--name &quot;centos6x-vm-gpt-gold-copy1-nobacking.img&quot; \
--ram 1024 \
--os-type=linux \
--os-variant=rhel6 \
--disk path=/var/lib/libvirt/images/centos6x-vm-gpt-gold-copy1-nobacking.img \
--import</pre></td></tr></table></div>

<p>You can now log in to this VM using the previous command again. Make sure you use the new guest name.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">virsh console centos6x-vm-gpt-gold-copy1-nobacking.img</pre></td></tr></table></div>

<h2>Create a guest using the golden master as a backing image</h2>
<p>You can use the golden master as a backing image in order to save disk space on a hypervisor where there are lots of similar nodes with minor differences.</p>
<p>To do this you need to create a new image specifying the master as a backing image using qemu-img.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">qemu-img create -f qcow2 -b /var/lib/libvirt/images/centos6x-vm-gpt-gold-master.img /var/lib/libvirt/images/centos6x-vm-gpt-gold-copy2-master-backed.img</pre></td></tr></table></div>

<p>Example output:</p>
<pre class="success">Formatting '/var/lib/libvirt/images/centos6x-vm-gpt-gold-copy2-master-backed.img', fmt=qcow2 size=10737418240 backing_file='//var/lib/libvirt/images/centos6x-vm-gpt-gold-master.img' encryption=off cluster_size=65536</pre>
<p>Now use the create command again, but this time use the import argument.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="shell" style="font-family:monospace;">virt-install \
--name centos6.3-gold-copy2-master-backed \
--ram 1024 \
--os-type=linux \
--os-variant=rhel6 \
--disk path=/var/lib/libvirt/images/centos6x-vm-gpt-gold-copy2-master-backed.img \
--import</pre></td></tr></table></div>

<p>Note that incorrectly referencing the disk path here may result in the following error.</p>
<pre class="error">ERROR    Error with storage parameters: Size must be specified for non existent volume path '/var/lib/libvirt/images/centos6x-vm-gpt-gold-copy2-master-backed-incorrect.img'</pre>
]]></content:encoded>
			<wfw:commentRss>http://catn.com/2013/04/18/building-a-virtual-machine-image-for-centos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CatN goes to CentOS Dojo Antwerp</title>
		<link>http://catn.com/2013/04/12/catn-goes-to-centos-dojo-antwerp/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=catn-goes-to-centos-dojo-antwerp</link>
		<comments>http://catn.com/2013/04/12/catn-goes-to-centos-dojo-antwerp/#comments</comments>
		<pubDate>Fri, 12 Apr 2013 10:51:33 +0000</pubDate>
		<dc:creator>Mark Sutton</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[KVM]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Red Hat]]></category>
		<category><![CDATA[RHCE]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://catn.com/?p=14253</guid>
		<description><![CDATA[It’s no secret that we use a lot of CentOS at CatN, in fact we have deployed thousands of instances over time on both physical and virtual machines, and we have 4...]]></description>
				<content:encoded><![CDATA[<p class="first">It’s no secret that we use a lot of CentOS at CatN, in fact we have deployed thousands of instances over time on both physical and virtual machines, and we have 4 Red Hat Certified Engineers (soon to be 6) on staff.</p>
<p>As a company with deep expertise and experience with CentOS it makes complete sense that we understand where our software comes from. You only have to look at the state of our food chain to see that interest in your upstream makes a lot of sense. At the end of the day we have to trust the food [software] that we eat [install]!</p>
<p>Getting to events like this is a great way to get a feel for a community, meet people and potentially find a way to contribute back into the ecosystem as well. What’s not to like about that?</p>
<p><span id="more-14253"></span></p>
<h2>Day at the Dojo</h2>
<p>The location was great, a well-catered affair at a technical college in the South of the city called Don Bosco [<a href="http://www.donboscowilrijk.be/site/">http://www.donboscowilrijk.be/site/</a>]. Outside was an awesome climbing rig where communications engineers (riggers?) were learning to climb safely.</p>
<p><a href="http://catn.com/wp-content/uploads/2013/04/pngbase6453c3b4c13207d93a.png"><img class="aligncenter size-medium wp-image-14261" alt="Comms engineer climbing wall" src="http://catn.com/wp-content/uploads/2013/04/pngbase6453c3b4c13207d93a-442x590.png" width="442" height="590" /></a></p>
<p>How cool is that! If the day hadn’t been so tightly packed with presentations I might have been tempted to sneak up there.</p>
<p>On to the matter in hand. The day was split up into eight separate talks punctuated by a couple of breaks and lunch consisting of a delicious veal stew cooked with Belgian beer!</p>
<h2>Talk #1 &#8211; Performance Tuning Xen &#8211; Roger Pau Monne</h2>
<p>Though we don’t really use Xen at CatN, it is close to the heart of many CentOS users, especially since Redhat discontinued distribution of the Xen Dom0 kernel in RHEL 6. This is just one of the areas where CentOS has added value above and beyond the redistribution of RHEL by creating an effort to re-integrate Xen into the Centos 6 distribution.</p>
<p>More information is available at the following link: <a href="http://wiki.centos.org/QaWiki/Xen4">http://wiki.centos.org/QaWiki/Xen4</a></p>
<p>The full slide deck from this presentation can be found at <a href="http://blog.xen.org/index.php/2013/04/09/impressions-of-the-centos-dojo-antwerp-2013/">http://blog.xen.org/index.php/2013/04/09/impressions-of-the-centos-dojo-antwerp-2013/</a></p>
<h2>Talk #2 &#8211; DNS Servers &#8211; Jan-Piet Mens</h2>
<p>“How could a presentation on DNS Servers possibly be interesting?”, I hear you ask!</p>
<p>Believe it or not, it was quite interesting. Clearly Jan was well-known to most people in the room, and propagation of the “Everything is a f***ing DNS problem” meme drew several roars of laughter.</p>
<p>The presentation went on to discuss the various good/bad points of nine different open source DNS servers, both authoritative and recursive. For me the highlights were revelations around bind 10 being a complete rewrite with *cough* modern features such as a RESTful API, and the fact that MyDNS was missing from the discussion.</p>
<p>The latter was addressed by Jan at the end of the talk, and he was correct in stating that MyDNS is no longer maintained and the spin-off projects lack coherence.</p>
<p>For those who are interested to find out more, the slide deck is available here <a href="https://speakerdeck.com/jpmens/multiple-choice-dns-servers-on-centos">https://speakerdeck.com/jpmens/multiple-choice-dns-servers-on-centos</a></p>
<p>Jan also has a great book on DNS, available here <a href="http://mens.de/:/book">http://mens.de/:/book</a></p>
<h2>Talk #3 &#8211; KVM Optimisation &#8211; Jaime Melis</h2>
<p>Now to a subject close to our heart at CatN&#8230; We use KVM a lot, and have found a fair few performance tweaks along the way.</p>
<p>There were several highlights for me:</p>
<ul>
<li>Beware of fs sync() if you use qcow2 images &#8211; be sure to use the <em>sync</em> command after shutting down guests to ensure all data is committed to permanent storage!</li>
<li>Be prepared to fiddle with the storage cache settings to suit your workload</li>
<li>Make use of CPU pinning for guests running single-process workloads, and don’t use it for general purpose guests running many different processes</li>
<li>Don’t forget to mount cgroup filesystems if you want to make use of libvirt’s scheduling controls</li>
<li>For best performance use bridged networking without STP</li>
</ul>
<p>Towards the end of the presentation Jaime talked about the challenges faced by cloud providers, which was quite interesting.</p>
<p dir="ltr">You can find Jaime’s slides here <a href="http://www.slideshare.net/opennebula/kvm-optimizations">http://www.slideshare.net/opennebula/kvm-optimizations</a> and his blog here <a href="http://blog.opennebula.org/?author=21">http://blog.opennebula.org/?author=21</a></p>
<h2>Talk #4 &#8211; oVirt &#8211; Vincent Van Der Kussen</h2>
<p>The oVirt talk was very interesting. Vincent had a demonstration installation of the oVirt platform and demonstrated many of it’s features to the room.</p>
<p>If you didn’t know, oVirt is the open source project underpinning the Redhat RHEV 3 product. To the trained eye is is easy to see how the deployment model is exactly the same as RHEV, though it should be said that oVirt is not a cloud platform as such.</p>
<p>Instead oVirt provides a “Virtualisation Management Platform” which is designed to simplify the management of KVM guests at scale.</p>
<p>oVirt can be installed from the following yum repository: <a href="http://www.ovirt.org/Yum_repo_file">http://www.ovirt.org/Yum_repo_file</a></p>
<p>You can find Vincent’s slides here <a href="https://speakerdeck.com/vincentvdk/ovirt-introduction-and-overview?slide=1">https://speakerdeck.com/vincentvdk/ovirt-introduction-and-overview?slide=1</a></p>
<h2>Talk #5 &#8211; Spacewalk &#8211; Geert Gossens</h2>
<p>Geert gave an insightful introduction to Spacewalk, the open source project underlying the Redhat Satellite product.</p>
<p>Though we’re not users of Spacewalk at CatN, the talk was very interesting. I learned how the Oracle DB dependency has now been widened to support PostgreSQL as well, which might make the F/OSS-ers take a second look.</p>
<p>Special mention also to Geert for driving me back to Antwerp city centre after the Dojo and selecting an excellent 9% Belgian beer over which to discuss the inability of English people to drink responsibly. Fortunately I managed to stay on my feet and do my bit to undo the reputation of Brits on the continent!</p>
<h2>Talk #6 &#8211; Deploying Software &#8211; Kris Buytaert</h2>
<p>Kris was an accomplished speaker, and the presentation well practised. This talk was centred around best practises for devops, and continuous-[integration, delivery, deployment].</p>
<p>He talked about creating a good devops culture, keeping things lean, automating as much as possible, collecting metrics around the development process and sharing of information within the team.</p>
<p>All of this is great advice, you can find the full slidedeck at <a href="http://www.slideshare.net/KrisBuytaert/deploying-software">http://www.slideshare.net/KrisBuytaert/deploying-software</a> along with 42 other excellent presentations along the DevOps theme.</p>
<p>EDIT: Apparently the talk was not practised at all but written during the Dojo!</p>
<blockquote class="twitter-tweet" width="500"><p>@<a href="https://twitter.com/complexmind">complexmind</a> if you&#8217;d wached closely you&#8217;d have seen me writing those slides during JP&#8217;s talk ..</p>
<p>&mdash; Kris Buytaert (@KrisBuytaert) <a href="https://twitter.com/KrisBuytaert/status/323528572125982722">April 14, 2013</a></p></blockquote>
<p><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<h2>Talk #7 &#8211; Yum Tricks &#8211; Karanbir Singh</h2>
<p>Anyone who maintains a Redhat/CentOS-based system will be familiar with the yum command. If you aren’t, then the chances are that you aren’t maintaining it properly, and probably aren’t using it in any meaningful manner!</p>
<p>Hyperbole aside, this presentation was excellent and taught this lazy, jaded admin a thing or two about yum and it’s supporting tools!</p>
<p>For example did you ever stop to consider that the rpm command is little more than a file manager, whereas yum is truly the package manager? It’s not quite as black and white as that but the statement holds some truth at least.</p>
<p>Did you know that if you are going to be running a few yum commands then you can speed things up by running <em>yum makecache</em> and then <em>yum -C &#8230;.</em> to speed things up significantly. Did you know about the <em>yum history</em> command?</p>
<p>Did you know about the plethora of yum plugins available to enhance yum itself? My favourite is probably the yum-plugin-fs-snapshot plugin which can be used to create snapshots of all affected filesystems before running a transaction, giving you the ability to roll back cleanly in case of problems. Note that you will need to be using LVM and have 18% of disk space free on the LVM VolumeGroup to do this, though this value can be tweaked via configuration.</p>
<p>Thanks to Karanbir, my use of yum will be far more sophisticated in future&#8230;</p>
<h2>Talk #8 &#8211; Selinux &#8211; Toshaan Bharvani</h2>
<p>Finally, a subject very close to my heart &#8211; SELinux (aka Marmite!). You either love it or you hate it &#8211; typically those that take the time to figure it out love it, and those that don’t hate it!</p>
<p>I have personally gone to great lengths at CatN to ensure that we make use of SELinux as much as possible, especially in our forthcoming vCluster platform v2.0 release. It just makes so much sense on Internet-facing systems such as web servers, and is a great tool for hardening those systems.</p>
<p>Toshaan went through the various use models of SELinux, and did a good job of de-mystifying it’s various facets for new and seasoned users. He even briefly touched upon some more advanced topics such as MLS.</p>
<p>The most recent version of the slides that I could find online are here: <a href="http://programm.froscon.de/2012/system/attachments/220/original/presentation.pdf">http://programm.froscon.de/2012/system/attachments/220/original/presentation.pdf</a></p>
<p>Quote of the day also goes to Karanbir for this gem:</p>
<blockquote><p>One foot in boiling water, one foot on ice. Statistically, you&#8217;re very comfortable.</p></blockquote>
			<div class="post-advert horizontal">
				<div class="content">
					<img src="http://catn.com/wp-content/uploads/2013/04/host-unlimited.png" alt="host-unlimited" width="82" height="82" class="alignnone size-full wp-image-14280" />Host multiple sites and apps on the Linux powered PHP cloud &#8211; vCluster.<a class="button" href="/vcluster">Find out more</a>				</div>
			</div>
			
<h2>Open Forum</h2>
<p>The final act of the day was an open forum. This began with a couple of lightning talks:</p>
<p>First came Joost Ringoot telling us how CentOS is used by the Belgian Meteorological department.<br />
Second came a presentation on Dogtag server in Centos by Daniel Paulus.<br />
There were some final closing matters discussed by the community, providing some clarifications on the packaging and build infrastructure at CentOS, and the recent restructuring of the core team.</p>
<p>Afterwards there was an hour or so of networking outside the venue, with a hardcore of 8 people finally making it to a restaurant for food and beer.</p>
<p>Journey of the year clearly goes to <a href="https://twitter.com/bazy84" target="_blank">@bazy84</a> for driving 1600km to the Dojo!</p>
<blockquote class="twitter-tweet" width="500"><p>@<a href="https://twitter.com/fvollero">fvollero</a> @<a href="https://twitter.com/kbsingh">kbsingh</a> I got home safe. It&#8217;s the first time I get applause for doing something crazy <a href="http://t.co/FPnv8jEvPg" title="http://goo.gl/maps/TZU1s">goo.gl/maps/TZU1s</a> at <a href="https://twitter.com/search/%23CentOSDojo">#CentOSDojo</a></p>
<p>&mdash; Nic Criţu (@bazy84) <a href="https://twitter.com/bazy84/status/321913811437223936">April 10, 2013</a></p></blockquote>
<p><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>Glad you got home safely Nic!</p>
<p>In closing, it’s great to go to Open Source meetups. Despite the complete lack of women in the scene, I find them far less testosterone and bravado-fuelled than vendor-focussed events and conferences. Come on ladies, the Open Source world needs you as well &#8211; even if we are a little awkward and introverted!</p>
<h2>Mojo for the Dojo</h2>
<p>For the record CatN would love to sponsor a Dojo in future. I’m interested to hear from people in the UK who would like to come and meet to get excited about Open Source and in particular CentOS. Who knows, perhaps next time I might even get up on the stage myself <img src='http://catn.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://catn.com/2013/04/12/catn-goes-to-centos-dojo-antwerp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Advanced PHP error handling in the cloud</title>
		<link>http://catn.com/2013/04/08/php-error-handling-in-the-cloud/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=php-error-handling-in-the-cloud</link>
		<comments>http://catn.com/2013/04/08/php-error-handling-in-the-cloud/#comments</comments>
		<pubDate>Mon, 08 Apr 2013 08:57:28 +0000</pubDate>
		<dc:creator>Nicola Asuni</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[LogPipe]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[vCluster]]></category>
		<category><![CDATA[CustomLog]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[ErrorLog]]></category>
		<category><![CDATA[errors]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[module]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[pipe]]></category>

		<guid isPermaLink="false">http://catn.com/?p=14167</guid>
		<description><![CDATA[LogPipe is a PHP extension module that extends the default PHP error messages with additional information and allows you to pipe the logs to an external program or write them to a...]]></description>
				<content:encoded><![CDATA[<p class="first"><a title="custom PHP error handling module extension" href="https://github.com/fubralimited/LogPipe">LogPipe</a> is a PHP extension module that extends the default PHP error messages with additional information and allows you to pipe the logs to an external program or write them to a syslog facility.</p>
<p>When a user connects to a PHP website hosted on a cloud platform like vCluster, the response may come from different web servers running on different virtual and physical machines. This introduced the problem of needing to aggregate the PHP error logs from different cluster nodes and then split them up again based on the virtual host. Unfortunately the default PHP error message handler does not provide the information or ability to pipe the error logs to an external program, unlike the CustomLog directive in Apache does.</p>
<p><span id="more-14167"></span></p>
			<div class="post-advert horizontal">
				<div class="content">
					<img class="alignnone size-full wp-image-14711" alt="vCluster Logo" src="http://catn.com/wp-content/uploads/2013/05/vcluster-80-x-80.png" width="80" height="80" />The vCluster platform provides automatically scalable cloud hosting starting at just £5 per month. <a class="button" href="/vcluster">Find out more</a>				</div>
			</div>
			
<p>Here at CatN, we have already solved the problem of web log file processing on the cloud using <a title="TCPWebLog – Collecting and Aggregating Web Logs on the Cloud" href="http://catn.com/2012/06/15/tcpweblog-collecting-and-aggregating-web-logs-on-the-cloud/">TCPWebLog</a> but the default PHP error handling does not provide enough information to feed this system, nor does it allow logs to be directly piped into it.</p>
<p>In order to overcome these issues I decided to create <a title="custom PHP error handling module extension" href="https://github.com/fubralimited/LogPipe">LogPipe</a>, an Open Source PHP extension module. Once loaded, when a PHP error is triggered, LogPipe prefixes the error message with the IP and hostname of the virtual host. It then adds the IP of the client before piping the output to and external program (i.e. <a title="TCPWebLog – Collecting and Aggregating Web Logs on the Cloud" href="http://catn.com/2012/06/15/tcpweblog-collecting-and-aggregating-web-logs-on-the-cloud/">TCPWebLog</a>) or sending it to a syslog facility. Then the default PHP error handler is called.</p>
<p>The new LogPipe PHP error log format is:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">VHOST_IP VHOST_NAME <span style="color: #7a0874; font-weight: bold;">&#91;</span>LOG_TIME_STR<span style="color: #7a0874; font-weight: bold;">&#93;</span> PHP ERROR_TYPE_DESC: ERROR_DESC <span style="color: #000000; font-weight: bold;">in</span> ERROR_FILENAME on line ERROR_LINENO <span style="color: #7a0874; font-weight: bold;">&#91;</span>client CLIENT_IP</pre></td></tr></table></div>

<p>where:</p>
<ul>
<li><strong>VHOST_IP</strong> : ($_SERVER['SERVER_ADDR']) the IP address of the server (virtual host) under which the current script is executing.</li>
<li><strong>VHOST_NAME</strong> : ($_SERVER['HTTP_HOST']) the host name of the server (virtual host) under which the current script is executing.</li>
<li><strong>CLIENT_IP</strong> : ($_SERVER['REMOTE_ADDR']) the client IP address.</li>
<li><strong>LOG_TIME_STR</strong>: log date-time.</li>
<li><strong>ERROR_TYPE_DESC</strong>: type of error.</li>
<li><strong>ERROR_DESC</strong>: error description.</li>
<li><strong>ERROR_FILENAME</strong>: the current php script file name were the error originated.</li>
<li><strong>ERROR_LINENO</strong>: number of the line on the current php script file were the error originated.</li>
</ul>
<p>For example:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">12.34.56.78 example.com <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">10</span>-Apr-<span style="color: #000000;">2013</span> <span style="color: #000000;">12</span>:<span style="color: #000000;">34</span>:<span style="color: #000000;">56</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> PHP Notice:  Undefined variable: x <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>test.php on line <span style="color: #000000;">6</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>client 1.2.3.4<span style="color: #7a0874; font-weight: bold;">&#93;</span></pre></td></tr></table></div>

<h2>COMPILE AND INSTALL</h2>
<p>Before you start, make sure you have the PHP development package installed in your system:<br />
on RHEL-like systems:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">yum install</span> php-devel</pre></td></tr></table></div>

<p>on Debian-like systems:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> php5-dev</pre></td></tr></table></div>

<p>Note: on the examples below the file paths are relative to a RHEL Operating System, so they may vary depending by the OS you are using.</p>
<p>1. get the LogPipe source code:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ~
<span style="color: #c20cb9; font-weight: bold;">git clone</span> git:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>fubralimited<span style="color: #000000; font-weight: bold;">/</span>LogPipe.git</pre></td></tr></table></div>

<p>2. compile the LogPipe module:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>LogPipe
phpize
.<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--enable-logpipe</span>
<span style="color: #c20cb9; font-weight: bold;">make</span></pre></td></tr></table></div>

<p>3. copy the LogPipe module on the PHP module directory:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cp</span> .<span style="color: #000000; font-weight: bold;">/</span>modules<span style="color: #000000; font-weight: bold;">/</span>logpipe.so <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib64<span style="color: #000000; font-weight: bold;">/</span>php<span style="color: #000000; font-weight: bold;">/</span>modules<span style="color: #000000; font-weight: bold;">/</span></pre></td></tr></table></div>

<p>4. copy and edit the LogPipe configuration INI file:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cp</span> logpipe.ini <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php.d<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #c20cb9; font-weight: bold;">vi</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php.d<span style="color: #000000; font-weight: bold;">/</span>logpipe.ini</pre></td></tr></table></div>

<p>Configuration examples:</p>
<p>disable the module:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">; MODULE DISABLED
<span style="color: #007800;">extension</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib64<span style="color: #000000; font-weight: bold;">/</span>php<span style="color: #000000; font-weight: bold;">/</span>modules<span style="color: #000000; font-weight: bold;">/</span>logpipe.so
logpipe.mode=<span style="color: #000000;">0</span>
logpipe.command=<span style="color: #ff0000;">&quot;&quot;</span></pre></td></tr></table></div>

<p>send logs to syslog:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">; SYSLOG
<span style="color: #007800;">extension</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib64<span style="color: #000000; font-weight: bold;">/</span>php<span style="color: #000000; font-weight: bold;">/</span>modules<span style="color: #000000; font-weight: bold;">/</span>logpipe.so
logpipe.mode=<span style="color: #000000;">1</span>
logpipe.command=<span style="color: #ff0000;">&quot;local4&quot;</span></pre></td></tr></table></div>

<p>pipe logs to TCPWebLog:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">; TCPWEBLOG <span style="color: #7a0874; font-weight: bold;">&#40;</span>check the TCPWebLog documentation <span style="color: #000000; font-weight: bold;">for</span> the correct parameters<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #007800;">extension</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib64<span style="color: #000000; font-weight: bold;">/</span>php<span style="color: #000000; font-weight: bold;">/</span>modules<span style="color: #000000; font-weight: bold;">/</span>logpipe.so
logpipe.mode=<span style="color: #000000;">2</span>
logpipe.command=<span style="color: #ff0000;">&quot;/usr/bin/tcpweblog_client.bin 10.0.2.15 9940 /var/log/tcpweblog_cache.log php.log 1 - -&quot;</span></pre></td></tr></table></div>

<p>The PHP reporting level can be set as usual using the php.ini directive <a title="php manual error_reporting" href="http://www.php.net/manual/en/errorfunc.configuration.php">error_reporting</a>.</p>
<p>5. Restart syslog-ng (only if you are using the syslog mode):</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">service syslog-ng restart</pre></td></tr></table></div>

<p>6. Restart Apache:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apachectl restart</span></pre></td></tr></table></div>

			<div class="post-advert horizontal">
				<div class="content">
					<img class="alignnone size-full wp-image-14283" alt="WordPress Boxed" src="http://catn.com/wp-content/uploads/2013/04/wordpress-unboxed.png" width="82" height="82" />The vCluster PHP hosting platform is perfect for WordPress and other bespoke PHP applications.<a class="button" href="/vcluster">Read more</a>				</div>
			</div>
			
<p>For additional information on this project please visit the <a title="LogPipe project - PHP extension module for error handling" href="https://github.com/fubralimited/LogPipe">LogPipe project on GitHub</a> repository.<br />
Feel free to try this extension module and leave your comments and suggestions here to help develop the project further.</p>
]]></content:encoded>
			<wfw:commentRss>http://catn.com/2013/04/08/php-error-handling-in-the-cloud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Theme from a (fri)day at CatN</title>
		<link>http://catn.com/2013/03/28/theme-from-a-friday-at-catn/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=theme-from-a-friday-at-catn</link>
		<comments>http://catn.com/2013/03/28/theme-from-a-friday-at-catn/#comments</comments>
		<pubDate>Thu, 28 Mar 2013 10:00:53 +0000</pubDate>
		<dc:creator>Huw Davies</dc:creator>
				<category><![CDATA[Team]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[playlist]]></category>

		<guid isPermaLink="false">http://catn.com/?p=14110</guid>
		<description><![CDATA[Following on from Joe&#8217;s recent post &#8216;Ultimate storms beware, you CatN touch this&#8216; we&#8217;ve carried on the theme of misspelling CatN by creating a tenuously linked playlist. A bit of friday afternoon...]]></description>
				<content:encoded><![CDATA[<p class="first">Following on from Joe&#8217;s recent post &#8216;<a href="http://wp.me/p2P0EC-3Ck">Ultimate storms beware, you CatN touch this</a>&#8216; we&#8217;ve carried on the theme of misspelling CatN by creating a tenuously linked playlist.</p>
<p>A bit of friday afternoon fun, we decided to create a CatN playlist with all our favourite songs which had &#8216;Cat&#8217; or &#8216;Can&#8217;t&#8217; in either the song title or artist name and share it with the world!</p>
<p>Let us know your favourite songs which we&#8217;ve missed, and why they should be included - if we like your suggestion then you could be made (in)famous for all time by your song being included in the privileged &#8220;CatN top 20&#8243; list.</p>
<p><span id="more-14110"></span></p>
<p><iframe src="https://embed.spotify.com/?uri=spotify:user:joegardiner11:playlist:3X0tVoXXTD7NB7FQ5e73JM&#038;theme=white" width="600" height="680" frameborder="0" allowtransparency="true"></iframe></p>
<p>Today, Spotify, tomorrow, the world!</p>
]]></content:encoded>
			<wfw:commentRss>http://catn.com/2013/03/28/theme-from-a-friday-at-catn/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ultimate storms beware, you CatN touch this</title>
		<link>http://catn.com/2013/03/25/ultimate-storms-beware-you-catn-touch-this/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ultimate-storms-beware-you-catn-touch-this</link>
		<comments>http://catn.com/2013/03/25/ultimate-storms-beware-you-catn-touch-this/#comments</comments>
		<pubDate>Mon, 25 Mar 2013 10:38:06 +0000</pubDate>
		<dc:creator>Joe Gardiner</dc:creator>
				<category><![CDATA[Team]]></category>
		<category><![CDATA[Branding]]></category>
		<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://catn.com/?p=13908</guid>
		<description><![CDATA[Branding a product can be tough. Tougher still is branding the company or division behind a range of products. I often get asked why we are called CatN. I also often hear...]]></description>
				<content:encoded><![CDATA[<p class="first">Branding a product can be tough. Tougher still is branding the company or division behind a range of products. I often get asked why we are called CatN. I also often hear the name pronounced incorrectly &#8211; Cap&#8217;n, Cat&#8217;n, C-A-T-N and various others. For the record it is pronounced &#8216;Cat En&#8217;!</p>
<p>The decision to go with CatN as a business name is based on the initial project vision to provide products that sit in the platform-as-a-service space.</p>
<p><span id="more-13908"></span></p>
<p>Let&#8217;s start from the beginning. Ask anyone who buys hosting, one of the most important things about a hosting service is that it is stable and doesn&#8217;t keep going down. This is an important part of our hosting products and it was a message we wanted to convey in the early days before the name CatN had been selected.</p>
<p>This led to the concept of a solid hosting platform, allowing us to start to think about how to visualise this. We knew we wanted to try and get a short &#8211; hopefully four letter &#8211; domain to build a strong brand around. A few years ago there were very few four letter domains remaining which actually made any sense, but the CatN.com domain fitted in perfectly with the solid platform concept.</p>
<p>CatN is short for &#8216;Category N&#8217; the ultimate storm. We used the <a href="http://en.wikipedia.org/wiki/Saffir%E2%80%93Simpson_hurricane_wind_scale" target="_blank">Saffir-Simpson hurricane scale</a> for inspiration.</p>
<p>Combining the idea of a rock solid platform with a category N storm led to the design above. The first ever design of the CatN website was based around this visualisation. Our hosting products are like the resilient oil rig withstanding the ultimate, category N storm. CatN was born!</p>
]]></content:encoded>
			<wfw:commentRss>http://catn.com/2013/03/25/ultimate-storms-beware-you-catn-touch-this/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
