<?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>appliance Archives &#8211; Structured Procrastination</title>
	<atom:link href="https://blog.adamspiers.org/tag/appliance/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.adamspiers.org/tag/appliance/</link>
	<description>because there&#039;s always something more interesting than what you should be doing</description>
	<lastBuildDate>Thu, 18 Dec 2014 13:26:37 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://blog.adamspiers.org/wp-content/uploads/2018/12/cropped-IMG_20160907_193859-PANO-c-7-32x32.jpg</url>
	<title>appliance Archives &#8211; Structured Procrastination</title>
	<link>https://blog.adamspiers.org/tag/appliance/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>How to build an OpenStack cloud from SUSEcon&#8217;s free USB stick handouts</title>
		<link>https://blog.adamspiers.org/2014/12/11/susecon-usb-stick-howto/</link>
					<comments>https://blog.adamspiers.org/2014/12/11/susecon-usb-stick-howto/#comments</comments>
		
		<dc:creator><![CDATA[Adam]]></dc:creator>
		<pubDate>Thu, 11 Dec 2014 14:28:00 +0000</pubDate>
				<category><![CDATA[front page]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[appliance]]></category>
		<category><![CDATA[Crowbar]]></category>
		<category><![CDATA[Free Software]]></category>
		<category><![CDATA[OpenStack]]></category>
		<category><![CDATA[SLES]]></category>
		<category><![CDATA[suse]]></category>
		<category><![CDATA[SUSEcon]]></category>
		<guid isPermaLink="false">http://blog.adamspiers.org/?p=1182</guid>

					<description><![CDATA[<p>Once again, SUSEcon was a blast! Thanks to everyone who helped make it such a great success, especially all our customers and partners who attended. If you attended the final Thursday keynote, you should have been given a free USB stick preloaded with a bootable SUSE Cloud appliance. And if you missed out or couldn&#8217;t [&#8230;]</p>
<p>The post <a href="https://blog.adamspiers.org/2014/12/11/susecon-usb-stick-howto/">How to build an OpenStack cloud from SUSEcon&#8217;s free USB stick handouts</a> appeared first on <a href="https://blog.adamspiers.org">Structured Procrastination</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p> Once again, <a href="http://www.susecon.com/">SUSEcon</a> was a blast!  Thanks to everyone who helped make it such a great success, especially all our customers and partners who attended. </p>
<p> If you attended the final Thursday keynote, <a href="http://youtu.be/nulEm8wdPKw?t=1m45s">you should have been given a free USB stick preloaded with a bootable SUSE Cloud appliance</a>.  And if you missed out or couldn&#8217;t attend, <a href="http://cdn.novell.com/cached/video/2014/suse/cloud4-admin.x86_64-0.2.1-Build3.15.install.iso">download a copy here</a>!  This makes it possible for anyone to build an OpenStack cloud from scratch extremely quickly and easily.  (In fact, it&#8217;s almost identical to the appliance we used a few weeks ago to <a href="http://blog.adamspiers.org/2014/11/05/ruler-of-the-stack/">win the &#8220;Ruler of the Stack&#8221; competition at the OpenStack summit in Paris</a>.) </p>
<p> <a href="http://youtu.be/nulEm8wdPKw?t=1m45s">Erin explained on stage at a high-level what this appliance does</a>, but below are some more specific technical details which may help in case you haven&#8217;t yet tried it out. </p>
<p> The appliance can be booted on any physical or virtual 64-bit x86 machine &#x2026; but before we start! &#8211; if you would like try running the appliance in a VM using either KVM or VirtualBox, then there is an <b>even easier alternative which uses <a href="https://www.vagrantup.com/">Vagrant</a> to reduce the whole setup to a one-line command</b>.  If you like the sound of that, stop reading and <a href="https://github.com/SUSE-Cloud/suse-cloud-vagrant/blob/master/demos/README.md">go here instead</a>.  However if you want to try it on bare metal or with a different hypervisor such as VMware or HyperV, read on! </p>
<p><span id="more-1182"></span></p>
<div id="outline-container-sec-1" class="outline-2">
<h2 id="sec-1">Requirements</h2>
<div class="outline-text-2" id="text-1">
<p> You&#8217;ll need the following: </p>
<ul class="org-ul">
<li>
<p> At least three physical or virtual 64-bit x86 machines, each with at least 2GB RAM and 8GB disk, and no valuable data on any of the attached disks: </p>
<ul class="org-ul">
<li>one admin node running the Crowbar deployment tool which will provision the other nodes from scratch,
</li>
<li>at least one controller node which will run OpenStack infrastructure services, and
</li>
<li>at least one compute node which will host VM instances within the cloud.  (If this compute node is a VM, then the VM instances in the cloud will have to be run either using KVM nested virtualization, or QEMU software virtualization which is slower but good enough for &#8220;kicking the tires&#8221;.)
</li>
</ul>
</li>
<li>
<p> A private IPv4 network which all the machines must be connected to. <i>Setting this up is the only potentially tricky bit of the whole exercise.</i>  By default the network in question needs to be <code>192.168.124.0/24</code> <b>with no DHCP server enabled</b>, so: </p>
<ul class="org-ul">
<li>if you are installing the appliance in a VM, you should be able to set up a NAT or host-only virtual network and configure your hypervisor so that it does not serve DHCP on that network, or
</li>
<li>if you are installing on bare metal, ensure there is no DHCP server active on that <a href="http://en.wikipedia.org/wiki/OSI_model#Layer_2:_data_link_layer">L2 segment</a>.
</li>
</ul>
</li>
<li>
<p> Another machine (physical or virtual) with a modern web browser on the same private IPv4 network. </p>
</li>
</ul>
</div>
</div>
<div id="outline-container-sec-2" class="outline-2">
<h2 id="sec-2">Installing the appliance</h2>
<div class="outline-text-2" id="text-2">
<p> Attach the bootable USB media (physical or virtual), and boot the machine.  This will automatically install a SUSE Cloud Admin Node onto the disk.  <b>Caution: this will wipe any pre-existing OS</b>, so only use it on a spare machine or freshly-created VM, with no valuable data on any of the attached disks! </p>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-destroy-confirmation.png" style="width: 400px; margin: 0 auto; display: block;" alt="disk-destroying confirmation dialog box"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-destroy-confirmation.png" alt="disk-destroying confirmation dialog box" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<p> After confirming you are OK to wipe all existing data on the disk, the appliance will be written to disk and then booted.  Shortly after, YaST will appear, allowing you to configure: </p>
<ul class="org-ul">
<li>which keyboard layout you want,
</li>
<li>what password to use for the <code>root</code> user,
</li>
</ul>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-password.png" style="width: 300px; margin: 0 auto; display: block;" alt="root password configuration dialog box"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-password.png" alt="root password configuration dialog box" style="width: 300px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<ul class="org-ul">
<li>what hostname and domain name to use (the defaults are fine),
</li>
</ul>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-hostname.png" style="width: 300px; margin: 0 auto; display: block;" alt="hostname/DNS configuration dialog box"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-hostname.png" alt="hostname/DNS configuration dialog box" style="width: 300px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<ul class="org-ul">
<li>the network setup (the default of <code>192.168.124.10/24</code> is recommended, otherwise you will also have to configure Crowbar prior to installation),
</li>
<li>the clock and time zone, and finally
</li>
<li>the NTP configuration (supplying an upstream NTP server is recommended but not required).
</li>
</ul>
</div>
</div>
<div id="outline-container-sec-3" class="outline-2">
<h2 id="sec-3">Logging in to the Admin Node</h2>
<div class="outline-text-2" id="text-3">
<p> Log in as <code>root</code> (with the password you specified above) either on the console or via <code>ssh root@192.168.124.10</code> if you have another machine configured to be on the same subnet. </p>
<p> Press <code>q</code> and then <code>y</code> to accept the beta EULA, which highlights that the appliance is partially based on unreleased code.  Please do not use it for production deployments! </p>
</div>
</div>
<div id="outline-container-sec-4" class="outline-2">
<h2 id="sec-4">Configuring Crowbar (optional)</h2>
<div class="outline-text-2" id="text-4">
<p> Crowbar is very powerful and flexible in terms of network configuration.  If you have other traffic on the <a href="http://en.wikipedia.org/wiki/OSI_model#Layer_2:_data_link_layer">L2 network segment</a> (e.g. if you are using bare metal hardware and a physical network rather than a dedicated virtual network) then you should check that its default networks don&#8217;t conflict with your existing traffic.  To do this, type <code>yast crowbar</code>: </p>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-yast-crowbar.png" style="width: 400px; margin: 0 auto; display: block;" alt="how to launch the YaST Crowbar module"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-yast-crowbar.png" alt="how to launch the YaST Crowbar module" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<p> and select the <code>Networks</code> tab: </p>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-crowbar-net-config.png" style="width: 400px; margin: 0 auto; display: block;" alt="Crowbar network configuration dialog"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-crowbar-net-config.png" alt="Crowbar network configuration dialog" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<p> From here you can examine and change the networks Crowbar will use. Some are only used when various options are selected later on, but at a minimum, <code>admin</code>, <code>nova_fixed</code>, and <code>nova_floating</code> will all be used.  For more information, see the <a href="https://www.suse.com/documentation/suse-cloud4/book_cloud_deploy/data/sec_depl_req_network.html">Networking section of the SUSE Cloud Deployment Guide</a>. </p>
</div>
</div>
<div id="outline-container-sec-5" class="outline-2">
<h2 id="sec-5">Installing SUSE Cloud</h2>
<div class="outline-text-2" id="text-5">
<p> From the shell prompt, type <code>screen go</code> to initiate the installation of SUSE Cloud.  This will take several minutes. </p>
</div>
</div>
<div id="outline-container-sec-6" class="outline-2">
<h2 id="sec-6">Exploring the Crowbar web interface</h2>
<div class="outline-text-2" id="text-6">
<p> On another machine on the same network as the machine running the now-installed appliance, start a browser, and navigate to <a href="http://192.168.124.10:3000/">http://192.168.124.10:3000/</a> (adjust the IP accordingly if you changed the <code>admin</code> network above). </p>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-crowbar-web-UI.png" style="width: 400px; margin: 0 auto; display: block;" alt="Crowbar web UI"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-crowbar-web-UI.png" alt="Crowbar web UI" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
</div>
</div>
<div id="outline-container-sec-7" class="outline-2">
<h2 id="sec-7">PXE-boot some other nodes</h2>
<div class="outline-text-2" id="text-7">
<p> Now simply PXE-boot your other nodes.  (Typically this requires PXE-booting to be enabled in the BIOS, and/or manually selecting it from the BIOS boot menu which is often accessible by hitting the F11 key or similar during boot.) </p>
<p> This will run a small inventory ramdisk image on each one to detect its hardware and report the discovery back to Crowbar, without touching the node&#8217;s local disk(s).  Each node will then appear in the Crowbar web UI, and sit in an idle loop whilst awaiting task allocation via Crowbar: </p>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-node1-discovered.png" style="width: 400px; margin: 0 auto; display: block;" alt="Crowbar web UI with new node discovered"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-node1-discovered.png" alt="Crowbar web UI with new node discovered" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<p> Clicking on that node will show the results of the automatic hardware inventorying, and give us the option to allocate the node: </p>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-view-node1.png" style="width: 400px; margin: 0 auto; display: block;" alt="viewing the newly discovered node in Crowbar's web UI"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-view-node1.png" alt="viewing the newly discovered node in Crowbar's web UI" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<p> When editing the node, we can give it a more human-friendly alias (e.g. <code>node1</code>), and then click Allocate to install a minimal SLES OS: </p>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-edit-node1.png" style="width: 400px; margin: 0 auto; display: block;" alt="editing the newly discovered node in Crowbar's web UI"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-edit-node1.png" alt="editing the newly discovered node in Crowbar's web UI" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<p> A full OS will be automatically installed on the node via <a href="http://doc.opensuse.org/projects/autoyast/">AutoYaST</a>: </p>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-autoyast-installation.png" style="width: 400px; margin: 0 auto; display: block;" alt="autoyast installation in progress"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-autoyast-installation.png" alt="autoyast installation in progress" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<p> When OS installation has finished, the console looks like this: </p>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-autoyast-complete.png" style="width: 400px; margin: 0 auto; display: block;" alt="autoyast installation completed"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-autoyast-complete.png" alt="autoyast installation completed" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<p> and then the node turns green in the web UI indicating that it&#8217;s ready to have roles assigned to it: </p>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-node1-ready.png" style="width: 400px; margin: 0 auto; display: block;" alt="Crowbar's web UI showing node1 as ready"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-node1-ready.png" alt="Crowbar's web UI showing node1 as ready" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<p> Multiple nodes can be installed via PXE/AutoYaST at the same time. </p>
</div>
</div>
<div id="outline-container-sec-8" class="outline-2">
<h2 id="sec-8">Deploying OpenStack via Crowbar barclamps</h2>
<div class="outline-text-2" id="text-8">
<p> By this point you should have at least two freshly-installed nodes managed by Crowbar (excluding the admin node itself which Crowbar runs on), in which case you are ready to deploy OpenStack via Crowbar&#8217;s barclamps, which can be found via the <code>Barclamps</code> drop-down in Crowbar&#8217;s web interface: </p>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-show-barclamps.png" style="width: 400px; margin: 0 auto; display: block;" alt="navigating to the OpenStack barclamps in Crowbar's web UI"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-show-barclamps.png" alt="navigating to the OpenStack barclamps in Crowbar's web UI" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<p> This process is relatively straightforward, and a full explanation can be found in <a href="https://www.suse.com/documentation/suse-cloud4/book_cloud_deploy/data/cha_depl_ostack.html">the corresponding chapter of the SUSE Cloud 4 Deployment Guide</a>. </p>
<p> However, it is also possible to automate the whole deployment from this point on, using Crowbar&#8217;s <code>batch</code> subcommand and an appropriately crafted <code>.yaml</code> file.  There are three sample <code>.yaml</code> files in <code>/root</code> on the admin node.  The simplest configuration reflected by these three files is <code>simple-cloud.yaml</code>, which assumes a single controller node and a single compute node, with aliases <code>controller1</code> and <code>compute1</code> respectively: </p>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-simple-cloud-dashboard.png" style="width: 400px; margin: 0 auto; display: block;" alt="simple 2-node cloud scenario shown by Crowbar's UI"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-simple-cloud-dashboard.png" alt="simple 2-node cloud scenario shown by Crowbar's UI" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<p> In this case, assuming your nodes are given the above aliases, you could set up the entire OpenStack cloud with this single command run as <code>root</code> on the admin node: </p>
<pre class="brush: bash; title: ; notranslate">
crowbar batch --timeout 1800 build simple-cloud.yaml
</pre>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-batch-build-database.png" style="width: 400px; margin: 0 auto; display: block;" alt="starting crowbar batch build"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-batch-build-database.png" alt="starting crowbar batch build" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<p> It takes a while to apply all the barclamps, as can be seen from the timestamps whilst it&#8217;s running: </p>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-batch-build-cinder.png" style="width: 400px; margin: 0 auto; display: block;" alt="crowbar batch build on cinder"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-batch-build-cinder.png" alt="crowbar batch build on cinder" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<p> (The other two sample <code>.yaml</code> files are for a highly available control plane which assumes you have three nodes aliased <code>controller1</code>, <code>controller2</code>, and <code>compute1</code>.) </p>
<p> Once the barclamps are all applied, they should show as green in the Crowbar UI view: </p>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-barclamps-green.png" style="width: 400px; margin: 0 auto; display: block;" alt="Crowbar UI showing barclamps successfully applied"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-barclamps-green.png" alt="Crowbar UI showing barclamps successfully applied" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
</div>
</div>
<div id="outline-container-sec-9" class="outline-2">
<h2 id="sec-9">Exploring OpenStack</h2>
<div class="outline-text-2" id="text-9">
<p> From the main Nodes dashboard in the Crowbar web UI, click the <code>controller1</code> node (or whichever one you deployed OpenStack&#8217;s Dashboard to), and you will see a couple of links to the OpenStack Dashboard (a.k.a &#8220;Horizon&#8221;): </p>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-link-to-horizon.png" style="width: 400px; margin: 0 auto; display: block;" alt="Crowbar UI showing barclamps successfully applied"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-link-to-horizon.png" alt="Crowbar UI showing barclamps successfully applied" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<p> Click on <code>OpenStack Dashboard (admin)</code> and it will take you to the OpenStack Dashboard, where you can log in as the <code>admin</code> user with a password of (by default) <code>crowbar</code>: </p>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-horizon-login.png" style="width: 400px; margin: 0 auto; display: block;" alt="OpenStack Dashboard login page"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-horizon-login.png" alt="OpenStack Dashboard login page" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<div class="figure">
<p><a href="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-horizon.png" style="width: 400px; margin: 0 auto; display: block;" alt="OpenStack Dashboard compute overview page"><img decoding="async" src="http://blog.adamspiers.org/wp-content/uploads/2014/12/wpid-horizon.png" alt="OpenStack Dashboard compute overview page" style="width: 400px; margin: 0 auto; display: block;" /></a> </p>
</p></div>
<p> Congratulations!  You have set up a full OpenStack cloud from scratch! Now you can start reading the SUSE Cloud <a href="https://www.suse.com/documentation/suse-cloud4/book_cloud_admin/data/book_cloud_admin.html">Admin</a> and <a href="https://www.suse.com/documentation/suse-cloud4/book_cloud_user/data/book_cloud_user.html">End User</a> guides to learn more about how to use OpenStack. </p>
</div>
</div>
<div id="outline-container-sec-10" class="outline-2">
<h2 id="sec-10">Support</h2>
<div class="outline-text-2" id="text-10">
<p> Whilst this bootable appliance is partially based on unreleased, unsupported code, we are still very interested to hear feedback from our customers and partners.  So while we (obviously!) cannot offer unlimited free support for it, if you post any questions / issues to the <a href="https://forums.suse.com/forumdisplay.php?65-SUSE-Cloud">SUSE Cloud web forum</a>, we will try to respond on a best-effort basis.  (And of course full commercial support for the <b>released</b> version of SUSE Cloud is <a href="https://www.suse.com/products/suse-cloud/">available</a> if you want it 😉 ) </p>
<p> As we say in the SUSE world, have a lot of fun! </p>
</div>
</div>
<p><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fblog.adamspiers.org%2F2014%2F12%2F11%2Fsusecon-usb-stick-howto%2F&#038;title=How%20to%20build%20an%20OpenStack%20cloud%20from%20SUSEcon%E2%80%99s%20free%20USB%20stick%20handouts" data-a2a-url="https://blog.adamspiers.org/2014/12/11/susecon-usb-stick-howto/" data-a2a-title="How to build an OpenStack cloud from SUSEcon’s free USB stick handouts"><img src="https://static.addtoany.com/buttons/share_save_171_16.png" alt="Share"></a></p><p>The post <a href="https://blog.adamspiers.org/2014/12/11/susecon-usb-stick-howto/">How to build an OpenStack cloud from SUSEcon&#8217;s free USB stick handouts</a> appeared first on <a href="https://blog.adamspiers.org">Structured Procrastination</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.adamspiers.org/2014/12/11/susecon-usb-stick-howto/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
