<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" 
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
  <channel>
    <title>Digital Sanctum</title>
    <link>http://www.digitalsanctum.com</link>
    <language>en</language>
    <webMaster>shane@digitalsanctum.com (Shane Witbeck)</webMaster>
    <pubDate>2016-08-01T21:34:42+00:00</pubDate>
    <copyright>Shane Witbeck</copyright>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
    <ttl>60</ttl>
    <description>Software development and other square topics</description>
    
    <item>
      <title>How to Install OpenStack Heat</title>
      <link>http://www.digitalsanctum.com/2013/05/01/how-to-install-openstack-heat/</link>
      <pubDate>2013-05-01 00:00:00 +0000</pubDate>
      <guid>http://www.digitalsanctum.com/2013/05/01/how-to-install-openstack-heat/</guid>
      <description>&lt;p&gt;If you&#39;d like to get up and running and hacking on OpenStack Heat this guide is for you. In this post I&#39;ll describe how to get up and running quickly with the goal of creating a fully functional environment that&#39;s easy to hack on (not for production use).&lt;/p&gt;

&lt;h2&gt;What is OpenStack?&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://wiki.openstack.org/wiki/OpenStack&quot;&gt;OpenStack&lt;/a&gt; is open source software for building public and private clouds.&lt;/p&gt;

&lt;blockquote&gt;
The OpenStack Open Source Cloud Mission: to produce the ubiquitous Open Source Cloud Computing platform that will meet the needs of public and private clouds regardless of size, by being simple to implement and massively scalable.
&lt;/blockquote&gt;


&lt;h2&gt;What is Heat?&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://wiki.openstack.org/wiki/Heat&quot;&gt;Heat&lt;/a&gt; is a service to orchestrate multiple composite cloud applications using the &lt;a href=&quot;http://docs.amazonwebservices.com/AWSCloudFormation/latest/APIReference/Welcome.html?r=7078&quot;&gt;AWS CloudFormation&lt;/a&gt; template format, through both an OpenStack-native ReST API and a CloudFormation-compatible Query API.&lt;/p&gt;

&lt;h2&gt;Install devstack&lt;/h2&gt;

&lt;p&gt;As a convenience, we&#39;ll use &lt;a href=&quot;http://devstack.org/&quot;&gt;devstack&lt;/a&gt; which is basically a shell script maintained by the OpenStack developer community to build a complete OpenStack environment.&lt;/p&gt;

&lt;p&gt;First, if you haven&#39;t done so already create a fresh install of a recent Ubuntu or Fedora linux distro on a machine with a decent amount of resources. I recommend at least 8GB of RAM and 250GB of disk space. I&#39;ve tested with Ubuntu 12.04 and Fedora 18 so ymmv.&lt;/p&gt;

&lt;p&gt;Second, ssh to the machine and install devstack by running the following commands:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo apt-get install git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git clone git://github.com/openstack-dev/devstack.git&lt;/code&gt; (I simply clone this to ~/devstack)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd devstack&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;./stack.sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;you&#39;ll be prompted several times for a password. I recommend just making all the passwords the same for the sake of simplicity.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;After several minutes, the script will eventually stop and you&#39;ll be presented with output similar to the following:&lt;/p&gt;

&lt;!-- start code snippet --&gt;


&lt;pre&gt;
Horizon is now available at http://172.16.8.33/
Keystone is serving at http://172.16.8.33:5000/v2.0/
Examples on using novaclient command line is in exercise.sh
The default users are: admin and demo
The password: password
This is your host ip: 172.16.8.33
stack.sh completed in 514 seconds.
&lt;/pre&gt;


&lt;!-- end code snippet --&gt;


&lt;h2&gt;Enabling Heat&lt;/h2&gt;

&lt;p&gt;Heat is included in devstack but it must be enabled by adding the following to &lt;code&gt;~/devstack/localrc&lt;/code&gt;:&lt;/p&gt;

&lt;!-- start code snippet --&gt;


&lt;pre&gt;
ENABLED_SERVICES+=,heat,h-api,h-api-cfn,h-api-cw,h-eng
IMAGE_URLS+=&quot;,http://fedorapeople.org/groups/heat/prebuilt-jeos-images/F16-x86_64-cfntools.qcow2,http://fedorapeople.org/groups/heat/prebuilt-jeos-images/F16-i386-cfntools.qcow2&quot;
&lt;/pre&gt;


&lt;!-- end code snippet --&gt;


&lt;p&gt;Now, restart OpenStack with &lt;code&gt;./unstack.sh&lt;/code&gt;, then &lt;code&gt;./stack.sh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;After several minutes (depending on your internet connection speed and the number of images specified above), you should have a working OpenStack/Heat installation.&lt;/p&gt;
</description>      
			<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
    </item>
    
    <item>
      <title>How to Create ISO Storage on XenServer</title>
      <link>http://www.digitalsanctum.com/2013/04/30/how-to-create-iso-storage-on-xenserver/</link>
      <pubDate>2013-04-30 00:00:00 +0000</pubDate>
      <guid>http://www.digitalsanctum.com/2013/04/30/how-to-create-iso-storage-on-xenserver/</guid>
      <description>&lt;p&gt;This post walks you through how to create local volume on a &lt;a href=&quot;http://www.citrix.com/products/xenserver&quot;&gt;XenServer&lt;/a&gt; host to serve as &lt;a href=&quot;http://en.wikipedia.org/wiki/ISO_image&quot;&gt;ISO&lt;/a&gt; repo.&lt;/p&gt;

&lt;h4&gt;1. ssh to the XenServer host&lt;/h4&gt;

&lt;h4&gt;2. Check free local disk space:&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;df -h&lt;/code&gt;&lt;/p&gt;

&lt;!-- start code snippet --&gt;


&lt;pre&gt;
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1              4127440   1976852   1940924  51% /
none                    381120         4    381116   1% /dev/shm
/opt/xensource/packages/iso/XenCenter.iso
                         52408     52408         0 100% /var/xen/xc-install 
&lt;/pre&gt;


&lt;!-- end code snippet --&gt;


&lt;h4&gt;3. Check available physical disk space:&lt;/h4&gt;

&lt;!-- start code snippet --&gt;


&lt;pre&gt;
[root@Host1 ~]# pvs
  PV         VG                                                 Fmt  Attr PSize   PFree  
  /dev/sda3  VG_XenStorage-43851e54-d3bf-0602-5e84-93629cfe7851 lvm2 a-   457.75G 457.75G
&lt;/pre&gt;


&lt;!-- end code snippet --&gt;


&lt;h4&gt;4. Check volume groups:&lt;/h4&gt;

&lt;!-- start code snippet --&gt;


&lt;pre&gt;
[root@Host1 ~]# vgs
  VG                                                 #PV #LV #SN Attr   VSize   VFree  
  VG_XenStorage-43851e54-d3bf-0602-5e84-93629cfe7851   1   1   0 wz--n- 457.75G 457.75G
&lt;/pre&gt;


&lt;!-- end code snippet --&gt;


&lt;h4&gt;5. Create the new LV (Logical Volume) in the available VG:&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;lvcreate -L 10G -n iso-images VG_XenStorage-43851e54-d3bf-0602-5e84-93629cfe7851&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;6. list:&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;lvscan&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;7. make a filesystem on this new LV:&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;mkfs.ext3 /dev/VG_XenStorage-43851e54-d3bf-0602-5e84-93629cfe7851/iso-images&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;8. create a mount point:&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;mkdir /mnt/iso-images&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;9. make the LV in the VG known to the kernel:&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;vgchange -a y&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;10. create the repository:&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;xe sr-create name-label=iso-images type=iso device-config:location=/mnt/iso-images/ device-config:legacy_mode=true content-type=iso&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;11. confirm new repository listed in XenServer:&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;xe sr-list&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;12. mount the new FS:&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;mount /dev/VG_XenStorage-43851e54-d3bf-0602-5e84-93629cfe7851/iso-images /mnt/iso-images/&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;13. [OPTIONAL] edit /etc/fstab to mount at boot&lt;/h4&gt;

&lt;p&gt;&lt;br/&gt;
After following these steps, you can now use something like wget to download ISO images to the /mnt/iso-images mount and have them available to XenServer.&lt;/p&gt;
</description>      
			<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
    </item>
    
    <item>
      <title>OpenStack Summit 2013</title>
      <link>http://www.digitalsanctum.com/2013/04/23/openstack-summit-2013/</link>
      <pubDate>2013-04-23 00:00:00 +0000</pubDate>
      <guid>http://www.digitalsanctum.com/2013/04/23/openstack-summit-2013/</guid>
      <description>&lt;p&gt;Last week I attended &lt;b&gt;&lt;a href=&quot;https://www.openstack.org/summit/portland-2013/&quot;&gt;OpenStack Summit&lt;/a&gt;&lt;/b&gt; along with almost 3,000 other geeks in my favorite city, &lt;a href=&quot;http://en.wikipedia.org/wiki/Portland,_Oregon&quot;&gt;Portland, Oregon&lt;/a&gt;. I&#39;ve been to a few conferences over the last several years but this one was especially good. Not because of the host city, the venue or the parties (although &lt;a href=&quot;http://www.castawayportland.com/&quot;&gt;they&lt;/a&gt; were good too) but because of the &lt;a href=&quot;http://www.openstack.org/&quot;&gt;OpenStack&lt;/a&gt; community.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://static.digitalsanctum.com/images/openstack.jpg&quot; alt=&quot;OpenStack Summit&quot; width=&quot;640&quot; height=&quot;428&quot; /&gt;&lt;/p&gt;

&lt;h2&gt;The NSA and OpenStack&lt;/h2&gt;


&lt;p&gt;Where else can you hear about how the &lt;a href=&quot;http://www.nsa.gov/&quot;&gt;NSA&lt;/a&gt; leverages OpenStack for their internal cloud to run &quot;mission&quot; apps:&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/NgahKksMZis&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;




&lt;h2&gt;Design Sessions&lt;/h2&gt;


&lt;p&gt;There were also many sessions in which the audience was integral in helping to shape the future of OpenStack by participating in design sessions. The design sessions were great for both newcomers wanting to know more about how to hack on OpenStack as well as veterans who were able to present problems and ask and answer questions. While these sessions occurred, &lt;a href=&quot;https://etherpad.openstack.org/&quot;&gt;etherpad&lt;/a&gt; was actively used to present issues and design questions as well as document decisions and solutions. An example is &lt;a href=&quot;https://etherpad.openstack.org/heat-multiple-engines&quot;&gt;this one&lt;/a&gt; which supported the &lt;a href=&quot;http://openstacksummitapril2013.sched.org/event/0dc73bfa48b7b9b0062bab95d37857bc#.UXa19itAR5U&quot;&gt;&quot;How to run multiple heat engines and scaling&quot;&lt;/a&gt; session. This was nice because your time wasn&#39;t monopolized by trying to take notes while trying to follow and participate in the lively discussions.&lt;/p&gt;

&lt;h2&gt;State of the Stack&lt;/h2&gt;


&lt;p&gt;One of my favorite sessions, &lt;a href=&quot;http://www.slideshare.net/randybias/state-of-the-stack-april-2013&quot;&gt;&quot;State of the Stack&quot;&lt;/a&gt;, was presented by &lt;a href=&quot;https://twitter.com/randybias&quot;&gt;Randy Bias&lt;/a&gt;, CTO of &lt;a href=&quot;http://cloudscaling.com/&quot;&gt;Cloudscaling&lt;/a&gt; in which he gave a great overview of the history and momentum of OpenStack followed by some opinionated thoughts on each major component of the OpenStack architecture. Randy also had some great slides on who the players are in the OpenStack ecosystem and what their motivations are. In closing, he claims that OpenStack is the clear winner among competitors such as Cloudstack, Eucalyptus, and vCloud. Perhaps the best illustration of this session is this slide:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://static.digitalsanctum.com/images/state_of_stack.png&quot; alt=&quot;state of the stack&quot;/&gt;&lt;/p&gt;

&lt;h2&gt;Curvature and Donabe&lt;/h2&gt;


&lt;p&gt;Perhaps the shiniest, &quot;ooh and ahh&quot; session of the conference was the demo of a project by a group of &lt;a href=&quot;http://www.kent.ac.uk/&quot;&gt;University of Kent&lt;/a&gt; undergrad students slash &lt;a href=&quot;http://www.cisco.com/&quot;&gt;Cisco&lt;/a&gt; engineers. &lt;b&gt;&lt;a href=&quot;http://docwiki.cisco.com/wiki/Curvature_for_OpenStack&quot;&gt;Curvature&lt;/a&gt;&lt;/b&gt;, which is &quot;an interactive visual orchestration tool for applications on OpenStack&quot;, was demoed first and illustrated a deviation from the tab and grid ui elements of Horizon, to a fluidy, floating representation of an application topology.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://static.digitalsanctum.com/images/curvature.png&quot; alt=&quot;curvature&quot;/&gt;&lt;/p&gt;

&lt;blockquote&gt;&quot;Users draw their desired application topology on a canvas using a toolset of Quantum L2/L3 components and virtual machine images. This topology can then be deployed onto a running OpenStack environment at the click of a button – with Curvature handling all of the orchestration necessary for provisioning the workload, i.e. the Quantum networks and Nova VMs.&quot;&lt;/blockquote&gt;


&lt;p&gt;&lt;b&gt;&lt;a href=&quot;http://docwiki.cisco.com/wiki/Donabe_for_OpenStack&quot;&gt;Donabe&lt;/a&gt;&lt;/b&gt; is a &quot;recursive container service&quot; which is loosely coupled with Curvature and can be run indendently. Although Donabe seems like a nice companion to Curvature, it seems to have a lot of overlap with the official OpenStack orchestration project, &lt;a href=&quot;https://wiki.openstack.org/wiki/Heat&quot;&gt;Heat&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;While the source for the project is to be open sourced in the near future, they mention the backend was built using &lt;a href=&quot;http://rubyonrails.org/&quot;&gt;Ruby on Rails&lt;/a&gt; and the front end used SVG. It should be interesting to see what happens after it&#39;s released into the wild and perhaps integrated with Heat.&lt;/p&gt;

&lt;h2&gt;Common Themes&lt;/h2&gt;


&lt;p&gt;Perhaps one the the best outcomes of a conference like this is that it allows you to identify common themes across all of the OpenStack components. Naturally, one of these themes in a cloud architure is &quot;how to scale&quot;. I saw this theme repeated in at least three different areas: Heat, Nova and Ceilometer.&lt;/p&gt;

&lt;p&gt;In &lt;b&gt;Heat&lt;/b&gt; design discussions, there was talk about how best to &lt;a href=&quot;http://openstacksummitapril2013.sched.org/event/0dc73bfa48b7b9b0062bab95d37857bc#.UXa19itAR5U&quot;&gt;horizontally scale&lt;/a&gt; the &quot;heat-engine&quot; component as well as discussion about &lt;a href=&quot;http://openstacksummitapril2013.sched.org/event/3e81b70c1d79244d17e36b439fb5d731#.UXbJ5itAR5U&quot;&gt;concurrent resource scheduling&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In &lt;b&gt;Nova/Cinder/Networking&lt;/b&gt;, or perhaps in OpenStack as a whole, there seemed to be a need for an overall &quot;task/workflow system&quot;. While different projects have taken different approaches based on needs at the time, there&#39;s increased potential to leverage a common service/library to be used by all. &lt;a href=&quot;http://openstacksummitapril2013.sched.org/?s=orchestration&quot;&gt;Several sessions&lt;/a&gt; related to &quot;orchestration&quot; underscores the momentum.&lt;/p&gt;

&lt;p&gt;The newest project, &lt;b&gt;Ceilometer&lt;/b&gt;, has the extraordinary challenge of orchestrating data measurements and aggregation in OpenStack and easily sharing that data to suit a variety of use cases including customer billing. Among the Ceilometer sessions, which spanned all four days of the summit, in &lt;a href=&quot;http://openstacksummitapril2013.sched.org/event/38ecf0c1c860965dc71f75f6c8670bf1#.UXbGTStAR5U&quot;&gt;&quot;Feedback from Ceilometer users&quot;&lt;/a&gt; sought to learn and improve from users&#39; pains and successes.&lt;/p&gt;

&lt;h2&gt;Summary&lt;/h2&gt;


&lt;p&gt;To me, the summit is a testament to how well the OpenStack community...is a community...and works well together to solve common problems and create new features at a break-neck three month development cycle. Compare this with the six months (or longer) cycle of older, but not necessarily more mature competitors such as Cloudstack (which is currently a month past their last deadline). As a relative newcomer to OpenStack, I&#39;m thrilled to have had the opportunity to attend the summit and look forward to being a part of the community and contributing to it&#39;s success.&lt;/p&gt;
</description>      
			<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
    </item>
    
    <item>
      <title>How to Copy File Contents From a Remote Machine to Local Clipboard</title>
      <link>http://www.digitalsanctum.com/2013/03/27/how-to-copy-file-contents-from-a-remote-machine-to-local-clipboard/</link>
      <pubDate>2013-03-27 00:00:00 +0000</pubDate>
      <guid>http://www.digitalsanctum.com/2013/03/27/how-to-copy-file-contents-from-a-remote-machine-to-local-clipboard/</guid>
      <description>&lt;p&gt;I use ssh to gain access to several remote servers and have always wondered how to copy the contents from remote files to my local clipboard. I use a mac as my desktop so ymmv:&lt;/p&gt;

&lt;p&gt;Assuming you&#39;re logged into a remote machine,&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cat /path/to/remote/file | ssh YOUR_DESKTOP_IP pbcopy
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note that this assumes that your desktop is reachable from the remote machine and that your desktop allows remote access.&lt;/p&gt;
</description>      
			<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
    </item>
    
    <item>
      <title>How to Setup a PXE Server on Ubuntu</title>
      <link>http://www.digitalsanctum.com/2013/03/22/how-to-setup-a-pxe-server-on-ubuntu/</link>
      <pubDate>2013-03-22 00:00:00 +0000</pubDate>
      <guid>http://www.digitalsanctum.com/2013/03/22/how-to-setup-a-pxe-server-on-ubuntu/</guid>
      <description>&lt;p&gt;This post shows you how to setup a &lt;a href=&quot;http://en.wikipedia.org/wiki/Preboot_Execution_Environment&quot;&gt;PXE (Preboot execution environment)&lt;/a&gt; server on Ubuntu. It assumes a fresh install of Ubuntu 12.04 and at least two machines. One acting as the PXE server and another as the client with a PXE-supported firmware. The following will be installed on the server:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;tftp-hpa&lt;/strong&gt; - (trivial file transfer protocol) is used in conjunction with dhcp for the automated transfer of bootstrap/configuration files.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dhcp&lt;/strong&gt; - used to locate the appropriate boot server&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;nginx&lt;/strong&gt; - serves the kickstart file and install files for one or more client(s)&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;tftp-hpa setup&lt;/h2&gt;

&lt;p&gt;install:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo apt-get update
sudo apt-get -y install tftpd-hpa
sudo /etc/init.d/openbsd-inetd stop
sudo update-rc.d -f openbsd-inetd remove
sudo sed -i s/no/yes/ /etc/default/tftpd-hpa
sudo /etc/init.d/tftpd-hpa start
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;add the following to &lt;code&gt;/etc/default/tftpd-hpa&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;RUN_DAEMON=&quot;yes&quot;
OPTIONS=&quot;-l -s /var/lib/tftpboot&quot; 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;now restart tftpd-hpa&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo /etc/init.d/tftpd-hpa restart
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;dhcp setup&lt;/h2&gt;

&lt;p&gt;install dhcp server:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo apt-get -y install dhcp3-server
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;edit &lt;code&gt;/etc/dhcp/dhcpd.conf&lt;/code&gt; and add the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.221 192.168.1.241;
  filename &quot;pxelinux.0&quot;;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For the purposes of this tutorial, the following are used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IP address of the PXE server: &lt;strong&gt;192.168.1.6&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;IP range that the DHCP server will use to assign to client(s): &lt;strong&gt;192.168.1.221 - 192.168.1.241&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;start the dhcp server:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo service isc-dhcp-server start
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;inetd setup&lt;/h2&gt;

&lt;p&gt;install:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo apt-get install inetutils-inetd
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;edit &lt;code&gt;/etc/inetd.conf&lt;/code&gt; and add the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;tftp    dgram   udp    wait    root    /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You may need to change &lt;code&gt;udp&lt;/code&gt; to &lt;code&gt;udp4&lt;/code&gt; above if you&#39;re using IPv6.&lt;/p&gt;

&lt;h2&gt;copy install files&lt;/h2&gt;

&lt;p&gt;Now it&#39;s time to copy the files from the Ubuntu install disk. In my case, I&#39;m using a thumb drive so I install the &lt;code&gt;usbmount&lt;/code&gt; package in order to have the thumb drive automatically mounted with I plug it in:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo apt-get install usbmount
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;At this point, I plug in the thumb drive and it should be available at &lt;code&gt;/media/usb&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo cp -r /media/usb/install/netboot/* /var/lib/tftpboot/
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;nginx&lt;/h2&gt;

&lt;p&gt;install:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo apt-get install nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I had an issue with installs until I commented the following line in the nginx configuration:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to index.html
    # comment this --&amp;gt; try_files $uri $uri/ /index.html;
    # Uncomment to enable naxsi on this location
    # include /etc/nginx/naxsi.rules
}   
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;By commenting the &lt;code&gt;try_files $uri $url/ /index.html;&lt;/code&gt; line above, nginx will return a 404 instead of falling back to &lt;code&gt;/index.html&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The default document root will be: &lt;code&gt;/usr/share/nginx/www&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Create a directory for ubuntu and copy the install files from the thumb drive:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mkdir -p /usr/share/nginx/www/ubuntu
cp -r /media/usb/* /usr/share/nginx/www/ubuntu/
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;customizing via kickstart&lt;/h2&gt;

&lt;p&gt;create &lt;code&gt;/usr/share/nginx/www/ks.cfg&lt;/code&gt; with the following contents:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;install
url --url http://192.168.1.6/ubuntu/
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The above is a minimal kickstart configuration and you can augment it to fully automate installs.&lt;/p&gt;

&lt;p&gt;create/edit &lt;code&gt;/var/lib/tftpboot/pxelinux.cfg/default&lt;/code&gt; and add the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;default linux
prompt 0
timeout 60

label linux
    menu default
    menu label Linux
    kernel ubuntu-installer/amd64/linux
    append ks=http://192.168.1.6/ks.cfg vga=normal initrd=ubuntu-installer/amd64/initrd.gz ramdisk_size=16432 root=/dev/rd/0 rw  --
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You should now be able to start a client machine up, hit something like F12 to boot via PXE and be on your way!&lt;/p&gt;

&lt;h3&gt;References&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://serverfault.com/questions/414120/how-to-get-usb-devices-to-automount-in-ubuntu-12-04-server&quot;&gt;http://serverfault.com/questions/414120/how-to-get-usb-devices-to-automount-in-ubuntu-12-04-server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://help.ubuntu.com/community/PXEInstallServer&quot;&gt;https://help.ubuntu.com/community/PXEInstallServer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://help.ubuntu.com/community/PXEInstallMultiDistro&quot;&gt;https://help.ubuntu.com/community/PXEInstallMultiDistro&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>      
			<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
    </item>
    
    <item>
      <title>How to Setup VNC Between a Mac and Ubuntu</title>
      <link>http://www.digitalsanctum.com/2013/03/13/how-to-setup-vnc-between-a-mac-and-ubuntu/</link>
      <pubDate>2013-03-13 00:00:00 +0000</pubDate>
      <guid>http://www.digitalsanctum.com/2013/03/13/how-to-setup-vnc-between-a-mac-and-ubuntu/</guid>
      <description>&lt;p&gt;This tutorial instructs you how to quickly &lt;a href=&quot;http://en.wikipedia.org/wiki/Virtual_Network_Computing&quot;&gt;VNC&lt;/a&gt; into a &lt;a href=&quot;http://en.wikipedia.org/wiki/Headless_system&quot;&gt;headless&lt;/a&gt; Ubuntu server. It&#39;s assumed that you have a server running somewhere and for whatever reason you need access to a graphical environment or browser instead of just SSH. Of course, all of the normal security precautions apply here. Tested on Ubuntu 12.04.1 server (64-bit).&lt;/p&gt;

&lt;h2&gt;On the Server&lt;/h2&gt;

&lt;p&gt;SSH into the server and run the following:&lt;/p&gt;

&lt;pre&gt;$ sudo apt-get update &amp;&amp; sudo apt-get install vnc4server&lt;/pre&gt;


&lt;p&gt;Now start up vncserver temporarily so it generates files it needs to run (this will only happen on the initial run)&lt;/p&gt;

&lt;pre&gt;$ vncserver&lt;/pre&gt;


&lt;p&gt;You will get prompted for a password that will be used to connect via VNC. Note that anything that&#39;s over 8 characters will be truncated so I suggest using something shorter (between 6 and 8 characters).&lt;/p&gt;

&lt;p&gt;When the setup is complete, shutdown the vncserver so we can make some changes:&lt;/p&gt;

&lt;pre&gt;$ vncserver -kill :1&lt;/pre&gt;


&lt;p&gt;Now you&#39;re ready to perform &lt;strong&gt;one&lt;/strong&gt; of the following steps depending on your needs:&lt;/p&gt;

&lt;h3&gt;1. Minimal Gnome desktop:&lt;/h3&gt;

&lt;pre&gt;$ sudo apt-get install --no-install-recommends gnome-core gnome-session-fallback&lt;/pre&gt;


&lt;p&gt;Edit the generated ~/.vnc/xstartup:&lt;/p&gt;

&lt;!-- start code snippet --&gt;


&lt;pre&gt;
#!/bin/sh

# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
gnome-session –session=gnome-classic &amp;


[ -x /etc/vnc/xstartup ] &amp;&amp; exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] &amp;&amp; xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &amp;
#x-terminal-emulator -geometry 80x24+10+10 -ls -title &quot;$VNCDESKTOP Desktop&quot; &amp;
#x-window-manager &amp;
&lt;/pre&gt;


&lt;!-- end code snippet --&gt;


&lt;h3&gt;2. Minimal Ubuntu desktop:&lt;/h3&gt;

&lt;pre&gt;$ sudo apt-get install --no-install-recommends ubuntu-desktop&lt;/pre&gt;


&lt;p&gt;Edit the generated ~/.vnc/xstartup:&lt;/p&gt;

&lt;!-- start code snippet --&gt;


&lt;pre&gt;
#!/bin/sh

# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
. /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] &amp;&amp; exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] &amp;&amp; xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &amp;
#x-terminal-emulator -geometry 80x24+10+10 -ls -title &quot;$VNCDESKTOP Desktop&quot; &amp;
#x-window-manager &amp;
&lt;/pre&gt;


&lt;!-- end code snippet --&gt;


&lt;h3&gt;3. Firefox only (the most light weight solution if you just need access to a browser):&lt;/h3&gt;

&lt;pre&gt;$ sudo apt-get install firefox&lt;/pre&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Edit the generated ~/.vnc/xstartup:&lt;/p&gt;

&lt;!-- start code snippet --&gt;


&lt;pre&gt;
#!/bin/sh

# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
. /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] &amp;&amp; exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] &amp;&amp; xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &amp;
#x-terminal-emulator -geometry 80x24+10+10 -ls -title &quot;$VNCDESKTOP Desktop&quot; &amp;
#x-window-manager &amp;
&lt;/pre&gt;


&lt;!-- end code snippet --&gt;


&lt;p&gt;Once you&#39;ve installed one&lt;/p&gt;

&lt;h2&gt;On the Mac&lt;/h2&gt;

&lt;p&gt;Open the &quot;Screen Sharing&quot; app via command line:&lt;/p&gt;

&lt;pre&gt;$ open vnc://your_ip:your_vnc_display_number&lt;/pre&gt;


&lt;p&gt;For example:&lt;/p&gt;

&lt;pre&gt;$ open vnc://192.168.0.99:5901&lt;/pre&gt;


&lt;p&gt;You can also accomplish the above by opening Finder &gt; Go &gt; Connect to server...&lt;/p&gt;

&lt;h2&gt;References&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ubuntugeek.com/how-to-install-gui-on-ubuntu-12-04-precise-server.html&quot;&gt;http://www.ubuntugeek.com/how-to-install-gui-on-ubuntu-12-04-precise-server.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>      
			<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
    </item>
    
    <item>
      <title>How to allow sudo without a password</title>
      <link>http://www.digitalsanctum.com/2013/01/03/how-to-allow-sudo-without-a-password/</link>
      <pubDate>2013-01-03 00:00:00 +0000</pubDate>
      <guid>http://www.digitalsanctum.com/2013/01/03/how-to-allow-sudo-without-a-password/</guid>
      <description>&lt;p&gt;Suppose you&#39;re setting up an automated task or something similar and it would be nice not to worry about entering a password for sudo.&lt;/p&gt;

&lt;p&gt;Here&#39;s how to allow sudo without a password for a specific user (tested on Ubuntu 11.10):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;sudo visudo&lt;/li&gt;
&lt;li&gt;add the following line at the end of the file: &lt;code&gt;someuser ALL=NOPASSWD: ALL&lt;/code&gt; and exit&lt;/li&gt;
&lt;li&gt;now test with something like &lt;code&gt;sudo ls&lt;/code&gt; and you should not get prompted for a password&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;For completeness, here&#39;s what the sudoers file should look like (Ubuntu 11.10) when your done with the edit above:&lt;/p&gt;

&lt;pre&gt;
# This file MUST be edited with the &#39;visudo&#39; command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#

Defaults

    env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

shane ALL=NOPASSWD: ALL

#includedir /etc/sudoers.d
&lt;/pre&gt;



</description>      
			<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
    </item>
    
    <item>
      <title>Killing Multiple Instances of a Process on Mac OS X</title>
      <link>http://www.digitalsanctum.com/2013/01/01/killing-multiple-instances-of-a-process-on-mac-os-x/</link>
      <pubDate>2013-01-01 00:00:00 +0000</pubDate>
      <guid>http://www.digitalsanctum.com/2013/01/01/killing-multiple-instances-of-a-process-on-mac-os-x/</guid>
      <description>&lt;p&gt;In this post, I&#39;ll outline a couple ways to kill multiple running instances of a process on OS X.&lt;/p&gt;

&lt;p&gt;A handy program to have is &lt;a href=&quot;http://en.wikipedia.org/wiki/Pidof&quot;&gt;pidof&lt;/a&gt;, which is a utility that returns the &lt;a href=&quot;http://en.wikipedia.org/wiki/Process_identifier&quot;&gt;process identifier (PID)&lt;/a&gt; of a running process or processes.&lt;/p&gt;

&lt;p&gt;Since it&#39;s not available by default on Mac, you can use &lt;a href=&quot;http://mxcl.github.com/homebrew/&quot;&gt;homebrew&lt;/a&gt;: &lt;code&gt;brew install pidof&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now, you can easily find the PIDs for a process, for example to see the PIDs associated with all running instances of nginx, run &lt;code&gt;pidof nginx&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To kill all running instances of nginx use &lt;code&gt;kill $(pidof nginx)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Sometimes using pidof won&#39;t work because the processes don&#39;t have an accurate name associated with them. An example is if you&#39;re running a program with a runtime such as java.&lt;/p&gt;

&lt;p&gt;In this case you can first find the processes with something like &lt;code&gt;ps aux |grep tomcat&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can exclude the grep process and pipe them to awk and kill them:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;kill `ps aux | grep tomcat | grep -v grep | awk &#39;{print $2}&#39;`
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;kill `ps aux | grep &#39;[t]omcat&#39; | awk &#39;{print $2}&#39;`
&lt;/code&gt;&lt;/pre&gt;
</description>      
			<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
    </item>
    
    <item>
      <title>How to Install Java 7 on Mountain Lion</title>
      <link>http://www.digitalsanctum.com/2012/12/20/how-to-install-java-7-on-mountain-lion/</link>
      <pubDate>2012-12-20 00:00:00 +0000</pubDate>
      <guid>http://www.digitalsanctum.com/2012/12/20/how-to-install-java-7-on-mountain-lion/</guid>
      <description>&lt;p&gt;To start, download and install the latest release of Java 7 from Oracle.com &lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After the install is complete you should have it here: &lt;code&gt;/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Since Apple has done away with the Java Preferences application which allowed you to easily switch between versions of Java, this is now a manual process.&lt;/p&gt;

&lt;p&gt;Assuming you&#39;re using the default Java version you first move it out of the way:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
sudo mv /System/Library/Java/JavaVirtualMachines/1.6.0.jdk /System/Library/Java/JavaVirtualMachines/1.6.0.jdk-orig
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now create a symlink from the old 1.6 jdk path to the new 1.7 path:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk /System/Library/Java/JavaVirtualMachines/1.6.0.jdk
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and verify with &lt;code&gt;java -version&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;
java version &quot;1.7.0_10&quot;
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)
&lt;/pre&gt;



</description>      
			<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
    </item>
    
    <item>
      <title>Top 10 Java Companies and Projects to Follow on GitHub</title>
      <link>http://www.digitalsanctum.com/2012/12/02/top-10-companies-using-java-to-follow-on-github/</link>
      <pubDate>2012-12-02 00:00:00 +0000</pubDate>
      <guid>http://www.digitalsanctum.com/2012/12/02/top-10-companies-using-java-to-follow-on-github/</guid>
      <description>&lt;p&gt;Java is the fourth most popular language on &lt;a href=&quot;http://www.github.com&quot;&gt;Github&lt;/a&gt; so naturally here&#39;s my hand-picked top 10 companies and projects to follow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ning&quot;&gt;Ning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.simple.com&quot;&gt;Simple&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/square&quot;&gt;Square&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/springsource&quot;&gt;SpringSource&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/typesafehub&quot;&gt;Typesafe, Inc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eclipse&quot;&gt;Eclipse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/elasticsearch&quot;&gt;ElasticSearch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Netflix&quot;&gt;Netflix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/codahale/dropwizard&quot;&gt;DropWizard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nathanmarz/storm&quot;&gt;Storm&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>      
			<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
    </item>
    
  </channel>
</rss>