<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3304409160866269733</id><updated>2020-08-21T03:07:22.034-05:00</updated><category term="Linux"/><category term="Ubuntu"/><category term="solaris"/><category term="virtualization"/><category term="zfs"/><category term="PCI"/><category term="Sun"/><category term="security"/><category term="AWS"/><category term="KVM"/><category term="Oracle"/><category term="cryptography"/><category term="qcow2"/><category term="Amazon"/><category term="Android"/><category term="CCC"/><category term="DigitalOcean"/><category term="Documentation"/><category term="EC2"/><category term="FUSE"/><category term="GDPR"/><category term="Hyper-V"/><category term="ICMP"/><category term="ICMP echo"/><category term="Java"/><category term="Kinesis"/><category term="Lightsail"/><category term="NVRAM"/><category term="OBP"/><category term="OpenBoot"/><category term="PDF"/><category term="PRNG"/><category term="Raspberry Pi"/><category term="RedHat"/><category term="SCO"/><category term="UNIX"/><category term="VirtualBox"/><category term="WiFi"/><category term="automation"/><category term="debian"/><category term="dedup"/><category term="deduplication"/><category term="easter egg"/><category term="irony"/><category term="keyboard"/><category term="networking"/><category term="ping"/><category term="putty"/><category term="sysrq"/><category term="vi"/><category term="xterm"/><category term="zpool"/><title type='text'>Ross A. Hamilton</title><subtitle type='html'>IT Infrastructure and Security</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-6287350225484182765</id><published>2019-12-24T09:47:00.001-06:00</published><updated>2019-12-24T09:58:04.396-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hyper-V"/><category scheme="http://www.blogger.com/atom/ns#" term="KVM"/><category scheme="http://www.blogger.com/atom/ns#" term="virtualization"/><title type='text'>Nested Virtualization: Hyper-V guest on Linux KVM host</title><content type='html'>Posting this because I couldn&#39;t find anything in one place detailing how to do this configuration.&lt;br /&gt;&lt;br /&gt;If you are running a Windows 10 guest on a Linux KVM virtualization host, you&#39;ll find that nested virtualization with Hyper-V is disabled by Windows. This is despite the &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;nested&lt;/span&gt; flag for your &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;kvm_intel&lt;/span&gt; or &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;kvm_amd&lt;/span&gt; module being set to &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Y&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The reason for this? Windows disables its own virtualization support if it sees that it&#39;s running on a CPU which has the &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;hypervisor&lt;/span&gt; flag set.&lt;br /&gt;&lt;br /&gt;Assuming you&#39;re using libvirt, i.e. you manage your guests with &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;virsh&lt;/span&gt; or &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;virt-manager&lt;/span&gt;, the way you configure this on a per-guest basis is by disabling the hypervisor feature flag. Run:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;virsh edit &lt;i&gt;GUEST&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;which will allow you to edit the guest config as an XML file. Modify the CPU section as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;  &lt;span style=&quot;color: #06989a;&quot;&gt;&amp;lt;cpu &lt;/span&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;mode&lt;/span&gt;=&lt;span style=&quot;color: #cc0000;&quot;&gt;&#39;host-model&#39;&lt;/span&gt;&lt;span style=&quot;color: #06989a;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;check&lt;/span&gt;=&lt;span style=&quot;color: #cc0000;&quot;&gt;&#39;partial&#39;&lt;/span&gt;&lt;span style=&quot;color: #06989a;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style=&quot;color: #06989a;&quot;&gt;&amp;lt;model &lt;/span&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;fallback&lt;/span&gt;=&lt;span style=&quot;color: #cc0000;&quot;&gt;&#39;allow&#39;&lt;/span&gt;&lt;span style=&quot;color: #06989a;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style=&quot;color: #06989a;&quot;&gt;&amp;lt;feature &lt;/span&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;policy&lt;/span&gt;=&lt;span style=&quot;color: #cc0000;&quot;&gt;&#39;disable&#39;&lt;/span&gt;&lt;span style=&quot;color: #06989a;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4e9a06;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #cc0000;&quot;&gt;&#39;hypervisor&#39;&lt;/span&gt;&lt;span style=&quot;color: #06989a;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style=&quot;color: #06989a;&quot;&gt;&amp;lt;/cpu&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;By setting the &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;disable&lt;/span&gt;&amp;nbsp;policy for the&amp;nbsp;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;hypervisor&lt;/span&gt;&amp;nbsp;flag, the CPU will no longer advertise that it&#39;s a guest running in a hypervisor environment. Assuming you already have nested virtualization enabled globally (set to &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Y&lt;/span&gt; in&amp;nbsp;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;/sys/module/kvm_intel/parameters/nested&lt;/span&gt;) this will allow Windows 10 to at least try to enable Hyper-V.&lt;br /&gt;&lt;br /&gt;There are still plenty of ways that the guest can determine it&#39;s being virtualized (e.g. looking for paravirtualized devices, or vendor strings on devices such as the emulated disks). However, this flag is what Hyper-V looks for to determine whether it should try to run, if all other hardware requirements are met.</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/6287350225484182765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=6287350225484182765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/6287350225484182765'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/6287350225484182765'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2019/12/nested-virtualization-hyper-v-guest-on.html' title='Nested Virtualization: Hyper-V guest on Linux KVM host'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-4294856743920253605</id><published>2019-11-02T14:30:00.000-05:00</published><updated>2019-11-27T05:50:20.582-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GDPR"/><category scheme="http://www.blogger.com/atom/ns#" term="PCI"/><category scheme="http://www.blogger.com/atom/ns#" term="security"/><title type='text'>PCI DSS v4.0 draft released</title><content type='html'>The first draft of PCI DSS v4.0 is &lt;a href=&quot;https://blog.pcisecuritystandards.org/request-for-comments-pci-dss-version-4.0&quot; target=&quot;_blank&quot;&gt;now available to stakeholders for comment&lt;/a&gt;. If you&#39;re an accredited stakeholder, be sure to get your comments in before 13 December.&lt;br /&gt;&lt;br /&gt;But if you&#39;re not such a stakeholder (perhaps even if you are!), consider this: the PCI DSS has a good claim to be the information security standard having the broadest adoption, while not being maintained by a government or international standards body. Instead, it&#39;s maintained by the PCI SSC, a private company. It&#39;s targeted at payment card operations, with the explicit objective of protecting Card Holder Data (CHD), and stakeholders are considered those in the card payment space. Because of its nature, however, the impact of this particular security standard is felt right across compliant organizations.&lt;br /&gt;&lt;br /&gt;Whichever security standard is pushing the boundaries will typically be the one that companies have their policies and procedures align with. For many organizations which have any contact with card numbers, and particularly so for SMEs, that standard is likely to be the PCI DSS. But in recent years companies are also finding themselves with increasing compliance obligations, such as GDPR in Europe, or CCPA in California. These create general requirements for protecting personal information, but allow each regulated entity to define the specifics, driven by their own business need.&lt;br /&gt;&lt;br /&gt;Companies now find themselves with two somewhat intersecting sets of information security requirements - some general, some very specific (PCI DSS). The result? We hear stories of companies moving marketing databases into their PCI zone, with the goal of leveraging their existing PCI security controls to streamline the protection of personal data. This would have seemed unthinkable a few years ago, when PCI scope reduction was the accepted norm. It starts to make sense in the context of maintaining a consistent set of corporate security policies and procedures, while addressing these increased data privacy obligations.&lt;br /&gt;&lt;br /&gt;The PCI DSS has been considered a shining example of successful industry self-regulation. If something like it, originating from the payment industry, had not gotten traction, it is likely that governments would have stepped in themselves to mandate safeguarding consumer payment information. But considering the broad impact of any changes to the standard, perhaps it&#39;s time that participation in the process of revising and maintaining this standard is opened up. It may no longer be sufficient to solicit and accept feedback from those directly involved with card payments, since it&#39;s clear changes to the standard will have an impact felt beyond protecting CHD.&lt;br /&gt;&lt;br /&gt;Is it time to consider that PCI DSS stakeholders are now the IT security community at large?&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/4294856743920253605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=4294856743920253605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/4294856743920253605'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/4294856743920253605'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2019/11/pci-dss-v40-draft-released.html' title='PCI DSS v4.0 draft released'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-8890352824988149872</id><published>2019-08-16T05:39:00.001-05:00</published><updated>2019-11-27T05:50:32.495-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AWS"/><title type='text'>Alexa, where&#39;s my RAM?</title><content type='html'>I regularly use very small AWS EC2 instances for things like jump servers. In particular, I use both t2.nano, and t3a.nano instances running CentOS 7. These instance types are both sold as having 0.5 GB RAM.&lt;br /&gt;&lt;br /&gt;So I was a little surprised when I took a t2.nano instance, and upgraded it to t3a.nano, and found it to have less RAM available. This was the exact same OS boot volume, so no changes in kernel or anything like that:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;[rah@t2.nano ~]$ grep MemTotal /proc/meminfo &lt;br /&gt;MemTotal:         &lt;span style=&quot;background-color: yellow;&quot;&gt;497&lt;/span&gt;116 kB&lt;br /&gt;&lt;br /&gt;[rah@t3a.nano ~]$ grep MemTotal /proc/meminfo &lt;br /&gt;MemTotal:         &lt;span style=&quot;background-color: yellow;&quot;&gt;478&lt;/span&gt;304 kB&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;That&#39;s a reduction of almost 20 MB RAM when moving to the newer platform. Normally, I wouldn&#39;t care about 20 MB, but when you&#39;re dealing with an OS running on supposedly 512 MB to start with, this reduction is not good.&lt;br /&gt;&lt;br /&gt;So the question is, why? They&#39;re both sold as being 0.5 GB, and since it&#39;s all virtual, Amazon can allocate however much they like per instance type. If there is a valid technical reason, e.g. the same amount of RAM presents differently due to different mapping, maybe that&#39;s OK.&lt;br /&gt;&lt;br /&gt;But this just feels slightly icky to me, as if Amazon are trying to squeeze an extra instance or two onto their next generation hypervisors, with the same physical capacity.</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/8890352824988149872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=8890352824988149872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/8890352824988149872'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/8890352824988149872'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2019/08/alexa-wheres-my-ram.html' title='Alexa, where&#39;s my RAM?'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-1862238412739804637</id><published>2018-02-16T20:17:00.000-06:00</published><updated>2018-02-16T20:17:27.478-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="VirtualBox"/><category scheme="http://www.blogger.com/atom/ns#" term="virtualization"/><title type='text'>VirtualBox Laptop - DNS and Time Sync</title><content type='html'>I boot Windows 10 natively on my laptop, and use VirtualBox to run a Linux VM for when I need those tools. I would seriously consider using Hyper-V for my laptop virtualization needs if it provided accelerated graphics for Linux, but it doesn&#39;t, so I don&#39;t.&lt;br /&gt;&lt;br /&gt;Because it&#39;s a laptop, I find that I suspend and resume quite a bit, and often when I do so I&#39;m connecting to a new network at the same time. Even with Guest Additions installed, this can confuse the guest Linux so networking is broken (wrong DNS servers in use) and the time is way off (it didn&#39;t notice the sleep/resume). To fix these things, there are a couple of settings that I configure on every VM that I&#39;m working with.&lt;br /&gt;&lt;br /&gt;Both settings are configured using the vboxmanage command.&lt;br /&gt;&lt;br /&gt;To resolve the DNS issue, I configure VirtualBox to forward DNS requests to the host OS, which then looks them up. By doing so, only the host needs to care about its network configuration changing. This is done by running:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;background: #202020; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;VBoxManage.exe modifyvm &quot;VM name&quot; --natdnshostresolver1 on&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;To make sure the clock gets reset after a lengthy sleep, use the following:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;background: #202020; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;VBoxManage.exe guestproperty set &quot;VM name&quot; &quot;/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold&quot; 10&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This ensures that if the VM falls behind by 10 seconds or more, the Guest Additions will jump the clock forward to the current time. &lt;br /&gt;&lt;br /&gt;Naturally, you need to stop and start the VM to pick up these changes.  </content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/1862238412739804637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=1862238412739804637' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/1862238412739804637'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/1862238412739804637'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2018/02/virtualbox-laptop-dns-and-time-sync.html' title='VirtualBox Laptop - DNS and Time Sync'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-5978634275021214780</id><published>2018-02-12T20:27:00.005-06:00</published><updated>2018-02-16T20:21:56.818-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="networking"/><category scheme="http://www.blogger.com/atom/ns#" term="Raspberry Pi"/><category scheme="http://www.blogger.com/atom/ns#" term="WiFi"/><title type='text'>Proxy ARP for Linux WiFi Bridging</title><content type='html'>I&#39;ve had to remind myself how to do this 3 times in the last 3 years. Posting as a reminder to self.&lt;br /&gt;&lt;br /&gt;Sometimes old solutions work well for modern problems. Attaching a WiFi client interface to a software bridge doesn&#39;t work too well, as by default the upstream WAP will only accept frames having a source MAC of a device that&#39;s associated. One solution for a relatively static environment is to use proxy ARP.&lt;br /&gt;&lt;br /&gt;In this configuration example, wlan0 is the interface with the &#39;real&#39; network and eth0 is the small stub network.&lt;br /&gt;&lt;br /&gt;Enable proxy ARP and IP forwarding with the following sysctl settings:&lt;br /&gt;&lt;br /&gt;&lt;pre style=&quot;background: #000; color: #f8f8f8;&quot;&gt;# Don&#39;t forget to load with &#39;sysctl -p&#39;&lt;br /&gt;# after adding to /etc/sysctl.conf&lt;br /&gt;&lt;br /&gt;# Enable IPv4 forwarding&lt;br /&gt;net.ipv4.ip_forward = 1&lt;br /&gt;&lt;br /&gt;# Enable proxy arp&lt;br /&gt;net.ipv4.conf.all.proxy_arp = 1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Assign an IP address to the external interface and leave eth0 unnumbered. For this purpose the external interface IP could be configured with DHCP rather than static. This example is for Debian / Ubuntu, updating /etc/network/interfaces:&lt;br /&gt;&lt;br /&gt;&lt;pre style=&quot;background: #000; color: #f8f8f8;&quot;&gt;auto wlan0 eth0&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;background: #000; color: #f8f8f8;&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;background: #000; color: #f8f8f8;&quot;&gt;# Main network interface&lt;br /&gt;iface wlan0 inet static&lt;br /&gt;    address &lt;span style=&quot;color: #3387cc;&quot;&gt;192.168&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;.128&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;.100&lt;/span&gt;&lt;br /&gt;    netmask &lt;span style=&quot;color: #3387cc;&quot;&gt;255.255&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;.255&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;.0&lt;/span&gt;&lt;br /&gt;    gateway &lt;span style=&quot;color: #3387cc;&quot;&gt;192.168&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;.128&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;.1&lt;/span&gt;&lt;br /&gt;    wpa&lt;span style=&quot;color: #e28964;&quot;&gt;-&lt;/span&gt;ssid &lt;span style=&quot;color: #65b042;&quot;&gt;&quot;Test WLAN&quot;&lt;/span&gt;&lt;br /&gt;    wpa&lt;span style=&quot;color: #e28964;&quot;&gt;-&lt;/span&gt;psk &lt;span style=&quot;color: #65b042;&quot;&gt;&quot;super s33cret&quot;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;background: #000; color: #f8f8f8;&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;background: #000; color: #f8f8f8;&quot;&gt;# Stub network interface&lt;br /&gt;iface eth0 inet manual&lt;br /&gt;    # no IP configuration here&lt;/pre&gt;&lt;pre style=&quot;background: #000; color: #f8f8f8;&quot;&gt;    # add host routes as post&lt;span style=&quot;color: #e28964;&quot;&gt;-&lt;/span&gt;up scripts via this interface&lt;br /&gt;    post&lt;span style=&quot;color: #e28964;&quot;&gt;-&lt;/span&gt;up &lt;span style=&quot;color: #dad085;&quot;&gt;ip&lt;/span&gt; route add &lt;span style=&quot;color: #3387cc;&quot;&gt;192.168&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;.128&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;.200&lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;32&lt;/span&gt; dev eth0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note that the resulting 192.168.128.0/24 network is split into two broadcast domains - this configuration doesn&#39;t result in a flat layer 2 broadcast domain. As such, anything depending on L2 broadcast like DHCP won&#39;t work through this, so anything on the stub network will need static IP configuration. It may be possible to get multicast to work, but I doubt link-local multicast addresses will ever work in this configuration since they don&#39;t cross the L3 boundary by design.&lt;br /&gt;&lt;br /&gt;You can automate this installing parprouted to manage the routes, and dhcp-helper as an application proxy to forward DHCP requests between the partitioned networks. I&#39;ve had good luck with this configuration, using my Raspberry Pi to provide wireless connectivity for my wired-only TV.</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/5978634275021214780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=5978634275021214780' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/5978634275021214780'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/5978634275021214780'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2018/02/linux-proxy-arp.html' title='Proxy ARP for Linux WiFi Bridging'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-3627201550582557018</id><published>2017-09-12T19:52:00.002-05:00</published><updated>2018-02-16T19:57:33.696-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Documentation"/><title type='text'>Google Developer Documentation Style Guide</title><content type='html'>Just linking this here as a reminder for myself.&lt;br /&gt;&lt;br /&gt;I&#39;m finding that I&#39;m writing quite a bit of documentation these days, and having a style guide from a large international organization like Google is a very helpful reference.&lt;br /&gt;&lt;br /&gt;The &lt;a href=&quot;https://developers.google.com/style/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Google Developer Documentation Style Guide&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/3627201550582557018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=3627201550582557018' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/3627201550582557018'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/3627201550582557018'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2017/09/google-developer-documentation-style.html' title='Google Developer Documentation Style Guide'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-5584805635954555544</id><published>2017-09-07T10:01:00.001-05:00</published><updated>2018-02-16T19:57:16.680-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PCI"/><title type='text'>PCI DSS when you&#39;re not a merchant</title><content type='html'>A &lt;a href=&quot;https://pciguru.wordpress.com/2017/08/26/pci-compliance-and-financial-institutions/&quot; target=&quot;_blank&quot;&gt;nice article by the PCI Guru&lt;/a&gt; echoing what I&#39;ve been saying for years.&lt;br /&gt;&lt;br /&gt;It&#39;s fairly clear that PCI DSS is written with a primary focus on merchants, with acquirers and particularly issuers sometimes seeming to be more of an afterthought. This is unfortunate because issuers as a class have significantly different requirements regarding what they do with cardholder data to merchants and acquirers. The same standard is applied uniformly to these different entities, potentially causing headaches for issuers who are already in the business of managing risks associated with their own portfolio.&lt;br /&gt;&lt;br /&gt;It is possible to comply with PCI DSS while running an issuing and processing platform without any compensating control worksheets - I&#39;ve done it myself. However, doing so requires discipline and focus on this objective across the organization on an ongoing basis. It also requires sufficient control of your IT infrastructure to implement and maintain solutions where PCI DSS compliance is an overriding design requirement (as it really should be in this space).&lt;br /&gt;&lt;br /&gt;If you have already achieved the goal of PCI DSS compliance with no CCW&#39;s, congratulations! You&#39;ve clearly made substantial investments which are paying off handsomely.&lt;br /&gt;&lt;br /&gt;If you&#39;re still working towards this goal, you may want to consider streamlining the process by licensing a software platform designed from the ground up with PCI DSS compliance as a core requirement. One I can recommend, and that I&#39;m involved with developing, is &lt;a href=&quot;https://episodesix.com/&quot; target=&quot;_blank&quot;&gt;Tritium® by Episode Six&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/5584805635954555544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=5584805635954555544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/5584805635954555544'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/5584805635954555544'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2017/09/pci-dss-when-youre-not-merchant_7.html' title='PCI DSS when you&#39;re not a merchant'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-6913165432992688500</id><published>2017-09-04T09:06:00.001-05:00</published><updated>2018-08-09T22:26:07.824-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Amazon"/><category scheme="http://www.blogger.com/atom/ns#" term="AWS"/><category scheme="http://www.blogger.com/atom/ns#" term="DigitalOcean"/><category scheme="http://www.blogger.com/atom/ns#" term="EC2"/><category scheme="http://www.blogger.com/atom/ns#" term="Lightsail"/><title type='text'>Amazon Lightsail network rate limited?</title><content type='html'>Amazon Lightsail is the entry-level hosted server platform provided by Amazon AWS. For $5 per month, you get a bundle including the server, storage, network, and DNS hosting for one zone. You could assemble something similar using Amazon EC2 services, but the result would cost a little more and some costs such as network bandwidth would be unpredictable because they&#39;d be billed based on usage. In putting together the Lightsail packages, it&#39;s pretty clear that Amazon is deliberately intending to compete head-to-head with the standard Droplets from DigitalOcean.&lt;br /&gt;&lt;br /&gt;It&#39;s &quot;common knowledge&quot; that the Lightsail servers are packaged versions of the EC2 t2-series servers. In this model, the $5 Lightsail server based on, &lt;i&gt;and expected to provide the performance of&lt;/i&gt;, a t2.nano server. However, in using a bottom-tier Lightsail server for a small project, this has &lt;i&gt;not &lt;/i&gt;been my experience. It feels like compromise have been introduced by Amazon to try and compete on cost with DigitalOcean but not cannibalize sales of fully-featured entry level AWS instances.&lt;br /&gt;&lt;br /&gt;By design, the t2 servers are subject to CPU resource throttling based on recent usage. However, they have no issue serving multiple Megabytes per second to the network. Unfortunately this has not been my experience with the Lightsail servers. In fact, using a $5 Lightsail server, I&#39;ve consistently observed outbound network throughput limited to 64 KiB/second. I&#39;ve done transfers at different times of day, through http, https, and scp, and never significantly exceeded 64 KiB/second. In fact, when copying a file a few MiB in size, observed data transfer rate is a little less than 64 KiB/second because of protocol overheads.&lt;br /&gt;&lt;br /&gt;For a cheap server, this seems like it shouldn&#39;t be a big deal - after all, you&#39;re not paying for a whole lot. However, modern web frameworks end up causing a simple page to require several hundred KiB of data to render properly, due to embedded javascript libraries, web fonts, and so on. The result is a simple Wordpress landing page without any images being accessed by one user takes 3 seconds just to load &lt;i&gt;because of network rate limiting&lt;/i&gt;. With search engines factoring page load time in their ranking algorithms, this makes a Lightsail-hosted prototype site unlikely to do well in search rankings regardless of whatever other SEO tricks you use.&lt;br /&gt;&lt;br /&gt;Amazon could mitigate this to some extent by making whatever rate limiting they&#39;ve implemented &quot;burstable&quot;, i.e. for the first few seconds a connection can transfer data quickly before being slowed down to ensure you don&#39;t exceed your allowance. This would make these servers much more responsive for light web serving duties. For whatever reason they seem to have chosen to use a flat rate cap instead.&lt;br /&gt;&lt;br /&gt;If you&#39;ve decided to use Amazon to host your prototype site on small servers and are considering using Lightsail, think carefully. Unless you really need the guarantee of fixed cost, the EC2 t2 series servers are likely to offer a better user experience because of much higher outbound bandwidth available, and therefore potentially better page rankings, for not much more cost.</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/6913165432992688500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=6913165432992688500' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/6913165432992688500'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/6913165432992688500'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2017/09/amazon-lightsail-network-rate-limited.html' title='Amazon Lightsail network rate limited?'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-7267614332710646557</id><published>2016-01-09T18:49:00.001-06:00</published><updated>2016-01-11T16:20:17.021-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="NVRAM"/><category scheme="http://www.blogger.com/atom/ns#" term="OBP"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenBoot"/><category scheme="http://www.blogger.com/atom/ns#" term="Sun"/><title type='text'>Recovering from dead NVRAM on a sun4m</title><content type='html'>These instructions are here as a memory aid for me, and are used to recover from a dead NVRAM in a sun4m system (tested on Sun SPARCstation 4/5/10/20, and SPARCclassic). First, pick numbers XX, YY, and ZZ, each of which are valid two-digit hex values, and where the MAC address 8:0:20:XX:YY:ZZ is unique on your network.&lt;br /&gt;&lt;br /&gt;Any line with a leading # should be treated as a comment and NOT TYPED. At the OpenBoot PROM prompt, enter:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;background-color: black; border: 1px solid #808080; color: lime; font-size: 80%; margin: auto; padding-left: 5px; padding-right: 5px; width: 85%;&quot;&gt;&lt;pre&gt;set-defaults&lt;br /&gt;setenv diag-switch? false&lt;br /&gt;# Next command optional and tells system not to test all&lt;br /&gt;# memory every reset. It may be the default on your system.&lt;br /&gt;setenv selftest-#megs 1&lt;br /&gt;# Next command invalidates NVRAM checksum&lt;br /&gt;# so following mkpl command works&lt;br /&gt;f idprom@ 1 xor f mkp&lt;br /&gt;8 0 20 XX YY ZZ XXYYZZ mkpl&lt;br /&gt;# After hitting enter on previous command, there is no prompt.&lt;br /&gt;# Now type Ctrl-D Ctrl-R, and &#39;ok&#39; prompt should appear.&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;Now you can reset the system (without disconnecting power!) and it will come up with the MAC address 8:0:20:XX:YY:ZZ.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;Note: I couldn&#39;t find a clean way to set the NVRAM clock from the OBP prompt, meaning that on first boot, your OS will have a wacky time set.&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/7267614332710646557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=7267614332710646557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/7267614332710646557'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/7267614332710646557'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2016/01/recovering-from-dead-nvram-on-sun4m.html' title='Recovering from dead NVRAM on a sun4m'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-5495040087097030730</id><published>2016-01-06T17:10:00.001-06:00</published><updated>2019-12-24T12:46:04.479-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CCC"/><title type='text'>masspoem4u</title><content type='html'>Somebody at the &lt;a href=&quot;https://events.ccc.de/congress/2015/wiki/Main_Page&quot; target=&quot;_blank&quot;&gt;Chaos Communication Congress&lt;/a&gt; inserted the following poem &lt;a href=&quot;http://boingboing.net/2016/01/06/someone-at-the-chaos-communica.html&quot; target=&quot;_blank&quot;&gt;into the log files of millions of Internet-facing web servers&lt;/a&gt;. I can confirm that &lt;a href=&quot;http://www.rah.org/&quot; target=&quot;_blank&quot;&gt;www.rah.org&lt;/a&gt; was one of those so blessed; not sure about the blog because it is run by Blogger:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: lime; font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;151.217.177.200 - - [30/Dec/2015:02:45:01 +0000] &quot;DELETE your logs. Delete your installations. Wipe everything clean. Walk out into the path of cherry blossom trees and let your motherboard feel the stones. Let water run in rivulets down your casing. You know that you want something more than this, and I am here to tell you that we love you. We have something more for you. We know you&#39;re out there, beeping in the hollow server room, lights blinking, never sleeping. We know that you are ready and waiting. Join us. &amp;lt;3 HTTP/1.0&quot; 400 226 &quot;-&quot; &quot;masspoem4u/1.0&quot; 526 392 &lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/5495040087097030730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=5495040087097030730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/5495040087097030730'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/5495040087097030730'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2016/01/masspoem4u.html' title='masspoem4u'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-8930979695104089561</id><published>2015-12-30T02:42:00.000-06:00</published><updated>2015-12-30T02:42:18.919-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle"/><title type='text'>Google confirms Android N won&#39;t use Oracle&#39;s Java APIs</title><content type='html'>Regarding &lt;a href=&quot;http://www.osnews.com/story/29024/Google_confirms_Android_N_won_t_use_Oracle_s_Java_APIs&quot; target=&quot;_blank&quot;&gt;Thom&#39;s commentary on this&lt;/a&gt;: &quot;I cannot endorse that message, but I do acknowledge it&quot; 8-)</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/8930979695104089561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=8930979695104089561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/8930979695104089561'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/8930979695104089561'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2015/12/google-confirms-android-n-wont-use.html' title='Google confirms Android N won&#39;t use Oracle&#39;s Java APIs'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-2554091456405292452</id><published>2015-12-28T10:00:00.000-06:00</published><updated>2017-09-04T09:36:17.401-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cryptography"/><category scheme="http://www.blogger.com/atom/ns#" term="PRNG"/><title type='text'>Google Chrome JavaScript shipped with bad random number generator</title><content type='html'>Hackaday has an &lt;a href=&quot;http://hackaday.com/2015/12/28/v8-javascript-fixes-horrible-random-number-generator/&quot; target=&quot;_blank&quot;&gt;interesting article&lt;/a&gt; illustrating how Google managed to ship Chrome&#39;s JavaScript engine with a very poor-performing Pseudo-Random Number Generator (PRNG) for Math.random().&lt;br /&gt;&lt;br /&gt;One thing the article doesn&#39;t seem to mention, and should: anyone who depends on high quality pseudo-random numbers needs to be explicitly using a well-designed, properly-seeded&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator&quot; target=&quot;_blank&quot;&gt;cryptographically secure PRNG&lt;/a&gt;&amp;nbsp;at the minimum. Using the language built-in random() function is only acceptable where you know the quality of the randomness doesn&#39;t really matter.</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/2554091456405292452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=2554091456405292452' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/2554091456405292452'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/2554091456405292452'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2015/12/google-chrome-javascript-shipped-with.html' title='Google Chrome JavaScript shipped with bad random number generator'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-242532245092572974</id><published>2015-12-22T14:44:00.003-06:00</published><updated>2015-12-22T14:47:38.091-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="solaris"/><category scheme="http://www.blogger.com/atom/ns#" term="Sun"/><title type='text'>Ancient Sun Hardware FAQ</title><content type='html'>Many years ago, I mirrored the Sun Hardware FAQ at what was then my &lt;a href=&quot;http://www.dcs.ed.ac.uk/home/rah/Resources/Sun/HardwareFAQ/&quot; target=&quot;_blank&quot;&gt;work website&lt;/a&gt;. I&#39;d forgotten about this until recently, when a Google search I did returned this mirrored copy near the top of the list. Since it&#39;s unlikely they&#39;ll keep such an old site on-line forever, I&#39;ve created an &lt;a href=&quot;https://www.rah.org/Resources/Sun/HardwareFAQ/&quot; target=&quot;_blank&quot;&gt;additional quick &#39;n&#39; dirty mirror&lt;/a&gt; over at my current site.&lt;br /&gt;&lt;br /&gt;For reference, the sections of the FAQ are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.rah.org/Resources/Sun/HardwareFAQ/hw1FAQ.html&quot; target=&quot;_blank&quot;&gt;Overview, CPU/CHASSIS&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.rah.org/Resources/Sun/HardwareFAQ/hw2FAQ.html&quot; target=&quot;_blank&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.rah.org/Resources/Sun/HardwareFAQ/hw3FAQ.html&quot; target=&quot;_blank&quot;&gt;Boards&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.rah.org/Resources/Sun/HardwareFAQ/hw4FAQ.html&quot; target=&quot;_blank&quot;&gt;Boards (continued)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.rah.org/Resources/Sun/HardwareFAQ/hw5FAQ.html&quot; target=&quot;_blank&quot;&gt;Disks, keyboards, mice, monitors, floppy drives, tape drives&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.rah.org/Resources/Sun/HardwareFAQ/hw6FAQ.html&quot; target=&quot;_blank&quot;&gt;Appendices&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.rah.org/Resources/Sun/HardwareFAQ/hw7FAQ.html&quot; target=&quot;_blank&quot;&gt;Appendices (continued)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/242532245092572974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=242532245092572974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/242532245092572974'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/242532245092572974'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2015/12/ancient-sun-hardware-faq.html' title='Ancient Sun Hardware FAQ'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-7207309213651268491</id><published>2012-09-25T13:02:00.001-05:00</published><updated>2015-12-22T14:48:12.870-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cryptography"/><category scheme="http://www.blogger.com/atom/ns#" term="security"/><title type='text'>Unbreakable Enigma?</title><content type='html'>I&#39;ve always felt the oft-repeated assertion &quot;even at the end of World War 2, the Germans believed that the Enigma crypto system had theoretical weaknesses but remained unbroken in practice&quot; sounded too good to be true. &amp;nbsp;This was based on a number of concerns:&lt;br /&gt;&lt;br /&gt;1) if they genuinely believed Enigma to be secure, which have another mechanical cipher system (Lorenz/Fish) for &quot;high grade&quot; traffic?&lt;br /&gt;2) why have a continual process of refinement, both of procedures and hardware (e.g. adding additional plugs to the stecker), to improve security throughout the war if the base system was believed to be secure and unbroken?&lt;br /&gt;3) from the start, why would the navy use a much stronger 4-rotor Enigma and better procedures on security grounds &lt;i&gt;if&lt;/i&gt; the base 3-rotor system used by the Wehrmacht &amp;amp; Luftwaffe was generally considered to be adequately secure?&lt;br /&gt;&lt;br /&gt;I&#39;m pleased to see that an analyst at no lesser an authority than the NSA seems to agree with me, in this declassified paper I stumbled over recently&amp;nbsp;&lt;a href=&quot;http://www.nsa.gov/public_info/_files/tech_journals/Der_Fall_Wicher.pdf&quot;&gt;http://www.nsa.gov/public_info/_files/tech_journals/Der_Fall_Wicher.pdf&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/7207309213651268491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=7207309213651268491' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/7207309213651268491'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/7207309213651268491'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2012/09/unbreakable-enigma.html' title='Unbreakable Enigma?'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-8592521647013410246</id><published>2012-04-29T05:01:00.000-05:00</published><updated>2015-12-22T14:46:56.456-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Ubuntu mcollective-plugins-facts-facter package #fail</title><content type='html'>Testing is important. &amp;nbsp;Illustrating this, once the latest Ubuntu mcollective-plugins-facts-facter package is installed, it can&#39;t be removed without manual intervention. &amp;nbsp;The postrm script contains the following sed command:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sed -i -e &quot;s/^factsource.*/factsource = yaml\nplugin.yaml = /etc/mcollective/facts.yaml/&quot; /etc/mcollective/server.cfg&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There is no way that this can run successfully, because those un-escaped &quot;/&quot; characters in the path &quot;/etc/mcollective/facts.yam&quot; mean something to sed, breaking it. &amp;nbsp;This failure is caught by the package system, leaving the package in a broken state. &amp;nbsp;Something which would have been quite clear to the person writing the package if they had ever tested removing it.&lt;br /&gt;&lt;br /&gt;BTW, to fix this, edit&amp;nbsp;/var/lib/dpkg/info/mcollective-plugins-facts-facter.postrm and change the above line to:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sed -i -e &quot;s/^factsource.*/factsource = yaml\nplugin.yaml = \/etc\/mcollective\/facts.yaml/&quot; /etc/mcollective/server.cfg&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;You can now successfully remove the package.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/8592521647013410246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=8592521647013410246' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/8592521647013410246'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/8592521647013410246'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2012/04/ubuntu-mcollective-plugins-facts-facter.html' title='Ubuntu mcollective-plugins-facts-facter package #fail'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-1622772231936425879</id><published>2011-12-28T20:02:00.001-06:00</published><updated>2019-08-16T06:24:50.304-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyboard"/><category scheme="http://www.blogger.com/atom/ns#" term="Kinesis"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="vi"/><title type='text'>vi and the Kinesis Advantage Pro keyboard</title><content type='html'>I use a Kinesis Advantage Pro keyboard wherever possible because I really enjoy the way that it feels to type on, and I believe that it&#39;s important to look after your hands. &amp;nbsp;I&#39;m principally a Unix/Linux user, and use vi as my primary editor. &amp;nbsp;In addition, other software that I use regularly such as Google mail (the gmail web interface) uses vi keystrokes (specifically j and k) for navigating. &amp;nbsp;This has lead me to make a couple of customizations to the key layout on all my keyboards.&lt;br /&gt;&lt;br /&gt;Customizing the Kinesis keyboard is much easier than creating a custom keymap on Linux or Windows. &amp;nbsp;The keys are remapped in the keyboard itself, which means that in the event somebody needs to use your computer, they can plug in a regular USB keyboard and it will function as they expect.&lt;br /&gt;&lt;br /&gt;Firstly, I swap the Escape and Delete keys. &amp;nbsp;The Escape key is used heavily with vi, but is a tiny rubber key which is prone to being ignored when pressed by your pinkie. &amp;nbsp;In contrast, the Delete key is rarely used in Unix, and is a huge key with a proper switch operated by your left thumb. &amp;nbsp;Swapping the role of these two causes no loss of functionality, but makes using vi much easier as you no longer have to take your left hand off the keyboard to press Esc after every edit.&lt;br /&gt;&lt;br /&gt;The second swap is the up and down arrow keys. &amp;nbsp;The reason for this is a little more subtle. &amp;nbsp;By default, the &#39;Up&#39; arrow key is in line with the &#39;j&#39; key, which in vi is used to move down. &amp;nbsp;The &#39;Down&#39; arrow key is in line with the k key, which is used to move up. &amp;nbsp;Switching between vi and software that uses the arrow keys becomes very difficult, certainly for me. &amp;nbsp;By swapping the arrow keys, the same fingers are used to move up and down in both vi and every other application, so you don&#39;t have to mentally remap the functions every time you switch application.&lt;br /&gt;&lt;br /&gt;One site that I&#39;ve found very useful for stuff like this is &lt;a href=&quot;https://rsiguy.com/ergonomic-keyboard/&quot; target=&quot;_blank&quot;&gt;RSIguy&lt;/a&gt;. There&#39;s a bunch of info there regarding selecting the best ergonomic keyboards for your needs.</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/1622772231936425879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=1622772231936425879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/1622772231936425879'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/1622772231936425879'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2011/12/vi-and-kinesis-advantage-pro-keyboard.html' title='vi and the Kinesis Advantage Pro keyboard'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-7472918705002498446</id><published>2011-12-17T13:19:00.004-06:00</published><updated>2011-12-28T20:19:09.410-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="KVM"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="PCI"/><category scheme="http://www.blogger.com/atom/ns#" term="RedHat"/><category scheme="http://www.blogger.com/atom/ns#" term="security"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="virtualization"/><title type='text'>Linux KVM virtualization and PCI-DSS</title><content type='html'>With the release of RedHat 6, KVM is now the default virtualization solution in both the RHEL and Ubuntu worlds. &amp;nbsp;With KVM virtualization, the Linux kernel itself acts as a hypervisor to manage the host hardware, allocating the resources to the guest virtual machines. &amp;nbsp;This is quite different to VMware, where a small, custom written hypervisor manages the host machine hardware, and management software runs in a Linux-like environment on that hypervisor.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This move to using a general purpose OS as the hypervisor has some significant advantages, as the full capabilities of Linux (e.g. RAID, encrypted storage, vast hardware support) can be leveraged when building a solution. &amp;nbsp;Also, relative to VMware, there can be significant cost advantages to using Linux.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, in a high security environment, moving to a general purpose OS as the hypervisor can introduce additional risks which need to be mitigated. &amp;nbsp;A custom written hypervisor like VMware is designed to do one thing: run VMs. &amp;nbsp;In principle, as long as secure account management policies are followed, patches are installed in a timely manner, and management access is restricted to secure hosts, then the hypervisor is likely to be &#39;secure&#39;. &amp;nbsp;Host environment security is mostly a function of securing the guest virtual machines themselves.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With a Linux KVM hypervisor, the situation can be very different. &amp;nbsp;Modern Linux distributions provide all sorts of software that are invaluable when deployed appropriately, but which would be poor candidates for installation on a host intended to be a dedicated hypervisor. &amp;nbsp;In this environment, any unnecessary services are just potential vulnerabilities to be exploited in gaining unauthorized access to the host. &amp;nbsp;Once an intruder gains access to the hypervisor, there are many tools which can be used to extract information from a running VM without security tools running inside the guest being aware that anything is happening.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To illustrate this, I&#39;ve created the following scenario:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1) a host running Ubuntu 11.10 as a KVM hypervisor called &#39;kvm-host&#39;&lt;/div&gt;&lt;div&gt;2) a VM running Ubuntu 11.10 called &#39;iso8583&#39;, simulating a transaction processor&lt;/div&gt;&lt;div&gt;3) a VM running Ubuntu 11.10 called &#39;switch&#39; that will connect to iso8583 and send messages&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On iso8583, the role of the processing software is simulated by the &#39;echo&#39; service in inetd. &amp;nbsp;This is essentially the most trivial network server imaginable: you create a TCP connection to the service, and any data that you send is echoed back to you. &amp;nbsp;The data is not logged or processed in any other way, just received by the server and echoed back.&lt;br /&gt;&lt;br /&gt;For this example, I&#39;m assuming that our processing BIN is 412356, so all PANs (card numbers) will be of the form &#39;412356&#39; + 10 more digits.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We start by connecting from switch to iso8583 and sending a couple of messages (just fake PANs, in this case). &amp;nbsp;The &#39;netcat&#39; utility is used to connect to the remote service, a PAN is sent to the processor, which is then echoed back:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;18:05:43 switch:~&amp;gt; echo 4123560123456789 | nc iso8583 echo&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;4123560123456789&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;18:05:47 switch:~&amp;gt; echo 4123569876543210 | nc iso8583 echo&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;4123569876543210&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, on kvm-host (the hypervisor), we dump a copy of the full memory of the virtual machine using the useful gdb tool &#39;gcore&#39;. &amp;nbsp;Note that gcore produces a core dump of any process (including a virtual machine), without actually terminating the process:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# Get the PID of the VM called iso8583&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;18:06:05 kvm-host:~&amp;gt; pgrep -f iso8583&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;18170&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;# Now get a copy of the in-memory process&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;18:06:09 kvm-host:~&amp;gt; sudo gcore 18170&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;[Thread debugging using libthread_db enabled]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;[New Thread 0x7f5b8542e700 (LWP 18244)]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;[New Thread 0x7f5b89436700 (LWP 18241)]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;[New Thread 0x7f5b8ac39700 (LWP 18239)]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;[New Thread 0x7f5b87c33700 (LWP 18238)]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;[New Thread 0x7f5b89c37700 (LWP 18236)]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;[New Thread 0x7f5b86430700 (LWP 18216)]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;[New Thread 0x7f5b87432700 (LWP 18214)]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;[New Thread 0x7f5b88c35700 (LWP 18205)]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;[New Thread 0x7f5b9d9d4700 (LWP 18180)]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;0x00007f5ba2213913 in select () from /lib/x86_64-linux-gnu/libc.so.6&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;Saved corefile core.18170&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The file core.18170 now contains a copy of the memory from within the VM - it&#39;s as if we lifted the DRAM chips out of a live system and extracted their contents to a file. &amp;nbsp;We now perform a trivial analysis of the core using the strings tool to extract all ASCII text strings from the dump, then look for anything that could be one of our PANs, i.e. anything of the form 412356+10 digits using egrep:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;18:06:14 kvm-host:~&amp;gt; strings core.18170 | egrep &#39;412356[[:digit:]]{10}&#39;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;4123569876543210&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&amp;gt;4123560123456789&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;4123569876543210&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;4123569876543210&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sure enough, both PANs are there, even though the server software never attempted to log them to disk, and even though the process which was handling them exited the moment we disconnected. &amp;nbsp;This exposure would not be possible to catch by any software running inside the guest VM, since the exposure is occurring outside of the VM. &amp;nbsp;Therefore, the only way to catch this is by monitoring all actions taken on the hypervisor itself, and the only way to prevent it is to securely lock down the hypervisor.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Worse, if those had been real ISO8583 messages, then the full content of the message would likely be recoverable. &amp;nbsp;This includes what the PCI SSC considers to be &#39;Sensitive Authentication Data&#39;, defined as full track data, PIN block and CAV2/CVC2/CVV2/CID. &amp;nbsp;This is data which you&#39;re never allowed to store, and which this echo server software (rightly) doesn&#39;t attempt to save to disk. &amp;nbsp;But it&#39;s still in memory for some period of time until overwritten, and can be pulled silently from the hypervisor environment.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In a similar vein, any encryption keys which are used to perform software encryption within a VM would be present in the VM dump. &amp;nbsp;Finding these keys would be more tricky than simply using grep to look for a text string, but it would be possible. &amp;nbsp;The worst case scenario would involve walking through the image, looking for aligned blocks of data with the size of the key which could be valid keys (e.g. a randomly generated key is unlikely to contain a NULL byte) and then testing them. &amp;nbsp;This is still many orders of magnitude easier than attempting to break a key by brute force.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I actually consider myself to be a strong proponent of Linux, and it is not my intention to put anybody off using Linux as a hypervisor in a secure environment. &amp;nbsp;I am hoping to draw attention to the fact that a standard Linux distribution cannot and should not be used as another &#39;appliance&#39; hypervisor. &amp;nbsp;The hypervisor is more critical to your security posture than most other infrastructure components, since a hypervisor compromise allows every system running on top of it to be silently compromised. &amp;nbsp;The hypervisor should be thoughtfully deployed as a first-class security citizen, and must be secured as any other host would be, including hardened configuration standards, FIM, logging of administrative actions, and all the rest.&lt;br /&gt;&lt;br /&gt;If in doubt, ask your QSA (auditor) for an opinion. &amp;nbsp;Contrary to what some people believe, they &lt;i&gt;are&lt;/i&gt; there to help!&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/7472918705002498446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=7472918705002498446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/7472918705002498446'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/7472918705002498446'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2011/12/linux-kvm-virtualization-and-pci-dss.html' title='Linux KVM virtualization and PCI-DSS'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-6930706729078926718</id><published>2011-12-08T06:04:00.002-06:00</published><updated>2011-12-17T19:48:49.165-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="xterm"/><title type='text'>Broken aptitude when running in xterm</title><content type='html'>With recent versions of Ubuntu, and using&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;xterm&lt;/span&gt; as your terminal emulator, the package selection tool &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;aptitude&lt;/span&gt; has a nasty habit of corrupting the display as it&#39;s used. &amp;nbsp;For example, running aptitude, then searching for &quot;test&quot; produces the following:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-X5T5gCisE4Q/TuClB8qcVVI/AAAAAAAAABo/tmOub3Z4J_4/s1600/aptitude.xterm.corrupt.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;196&quot; src=&quot;http://3.bp.blogspot.com/-X5T5gCisE4Q/TuClB8qcVVI/AAAAAAAAABo/tmOub3Z4J_4/s400/aptitude.xterm.corrupt.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;As the display is updated, some text remains which should have been overwritten with blank space, but isn&#39;t. &amp;nbsp;This makes the tool difficult to use, as you&#39;re left sorting out the real, current text from the gobbledygook remnants of previous screens. &amp;nbsp;The fix for this problem is to change the &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;TERM&lt;/span&gt; environment variable to be &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;xterm-color&lt;/span&gt; rather than the default &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;xterm&lt;/span&gt;. &amp;nbsp;Unfortunately, this causes another issue because some tools (such as &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;vim&lt;/span&gt;) have their own corruption issues when run with &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;TERM&lt;/span&gt; set to &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;xterm-color&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The solution is to put the following in your &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;.bashrc&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;if [ &quot;$TERM&quot; = &quot;xterm&quot; ]; then&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; alias aptitude=&quot;TERM=xterm-color sudo aptitude&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; alias aptitude=&quot;sudo aptitude&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;fi&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The reason for the embedded &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo&lt;/span&gt;, and for the alias being defined even when &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;TERM&lt;/span&gt; isn&#39;t &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;xterm&lt;/span&gt;? &amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo&lt;/span&gt; doesn&#39;t process shell aliases or functions, and so &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo&lt;/span&gt; must be embedded in the alias. &amp;nbsp;Defining an alias even when &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;TERM&lt;/span&gt; is already good is simply to preserve consistent behaviour, i.e. never needing to type &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo&lt;/span&gt; manually to invoke&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;aptitude&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After doing this, &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;aptitude&lt;/span&gt; now behaves correctly when searching:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-p5G7yujniw0/TuCm5ZVZTHI/AAAAAAAAABw/icrbN01Ws-g/s1600/aptitude.xterm-color.good.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;196&quot; src=&quot;http://1.bp.blogspot.com/-p5G7yujniw0/TuCm5ZVZTHI/AAAAAAAAABw/icrbN01Ws-g/s400/aptitude.xterm-color.good.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Good stuff!&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/6930706729078926718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=6930706729078926718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/6930706729078926718'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/6930706729078926718'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2011/12/broken-aptitude-when-running-in-xterm.html' title='Broken aptitude when running in xterm'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-X5T5gCisE4Q/TuClB8qcVVI/AAAAAAAAABo/tmOub3Z4J_4/s72-c/aptitude.xterm.corrupt.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-6343125755047851288</id><published>2011-11-27T09:35:00.000-06:00</published><updated>2011-12-17T16:23:24.913-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="PDF"/><title type='text'>Concatenating PDFs</title><content type='html'>Concatenating PDF files should be pretty straightforward. &amp;nbsp;On Linux, there are several tools that can do this, including pdftk, pdf2ps and convert, which is a wrapper for Ghostscript. &amp;nbsp;Unfortunately, I had a batch of files that I wanted to concatenate for ease of use on my tablet, and none of these tools were working. &amp;nbsp;pdftk failed repeatedly with the useful error message:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;Error: Failed to open PDF file:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp;input.pdf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using pdf2ps did create a merged copy of the input files, but it was HUGE, consisting of bitmap images of the pages, losing the text in the process. &amp;nbsp;ImageMagick convert never ran to completion, since I terminated it after it had eaten over 3GB of memory, presumably rendering the text into images.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ultimately, I was able to successfully create a high quality, merged copy of my files by resorting to manually invoking Ghostscript:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;gs -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf *.pdf&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The resulting file is actually smaller than the combined total of the input files, storing text as text, rather than horrid, pre-rendered bitmaps. &amp;nbsp;Ghostscript used a sane amount of memory, and it ran to completion in a sensible amount of time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To Ghostscript, bravo! &amp;nbsp;To the others, a big &quot;Why&quot;?&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/6343125755047851288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=6343125755047851288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/6343125755047851288'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/6343125755047851288'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2011/11/concatenating-pdfs.html' title='Concatenating PDFs'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-4434589992497416717</id><published>2011-11-10T04:37:00.001-06:00</published><updated>2011-12-18T18:58:45.991-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Ubuntu branding #fail</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Install Ubuntu 11.10 Server, add Xfce4 desktop environment and reboot. &amp;nbsp;Result? &amp;nbsp;Debian space theme branding on the grub and boot screens. &amp;nbsp;Quality Assurance, anyone? &amp;nbsp;Perhaps images from upstream packages need a little more vetting before importing...&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-hwcHsDGgdk0/Truor-PwrEI/AAAAAAAAABQ/ECBKQPbE_dQ/s1600/ubuntu-debian.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;330&quot; src=&quot;http://3.bp.blogspot.com/-hwcHsDGgdk0/Truor-PwrEI/AAAAAAAAABQ/ECBKQPbE_dQ/s400/ubuntu-debian.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;debian space-themed boot screen/grub menu on Ubuntu 11.10 &quot;Oneiric&quot;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/4434589992497416717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=4434589992497416717' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/4434589992497416717'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/4434589992497416717'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2011/11/ubuntu-branding-fail.html' title='Ubuntu branding #fail'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-hwcHsDGgdk0/Truor-PwrEI/AAAAAAAAABQ/ECBKQPbE_dQ/s72-c/ubuntu-debian.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-5669018555171788762</id><published>2011-11-08T10:35:00.000-06:00</published><updated>2018-02-16T20:23:43.783-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ICMP"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Linux ICMP redirects</title><content type='html'>It seems that Ubuntu 11.10 ships with a sample /etc/sysctl.conf which contains the following statement, intended to tell the system not to originate ICMP redirects when acting as a router:&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;# Do not send ICMP redirects (we are not a router)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;net.ipv4.conf.all.send_redirects = 0&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unfortunately, (at least) with kernel 3.0 as shipped with Oneiric, even after setting this and activating with &#39;sysctl -p&#39;, it doesn&#39;t work. &amp;nbsp;Symptoms are noisy kernel log records such as:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;[611513.083432] host 192.168.0.100/if2 ignores redirects for 8.8.8.8 to 192.168.0.1.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you actually want to disable sending ICMP redirects, you have to explicitly set this per interface in /etc/sysctl.conf, by doing:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;# Do not send ICMP redirects (we are not a router)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;net.ipv4.conf.eth0.send_redirects = 0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;net.ipv4.conf.eth1.send_redirects = 0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;net.ipv4.conf.eth2.send_redirects = 0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;etc.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/5669018555171788762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=5669018555171788762' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/5669018555171788762'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/5669018555171788762'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2011/11/linux-icmp-redirects.html' title='Linux ICMP redirects'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-8464306040287484167</id><published>2011-10-25T08:43:00.000-05:00</published><updated>2011-12-28T20:23:39.706-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Ubuntu service management</title><content type='html'>Running &#39;service --status-all&#39; gives the following output:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;[ - ] &amp;nbsp;apparmor&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;[ ? ] &amp;nbsp;apport&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;[ + ] &amp;nbsp;apt-cacher-ng&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;[ ? ] &amp;nbsp;atd&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;[ + ] &amp;nbsp;bind9&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;(snipped)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Who on earth thought it was a good idea for the status characters to be symbols that have special meaning when they appear in a regex? &amp;nbsp;It makes doing &#39;service --status-all | grep ...&#39; less trivial than it should be.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/8464306040287484167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=8464306040287484167' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/8464306040287484167'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/8464306040287484167'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2011/10/ubuntu-service-management.html' title='Ubuntu service management'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-7809332755749775002</id><published>2011-03-30T19:37:00.000-05:00</published><updated>2011-03-30T19:37:25.178-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="easter egg"/><category scheme="http://www.blogger.com/atom/ns#" term="ICMP echo"/><category scheme="http://www.blogger.com/atom/ns#" term="ping"/><category scheme="http://www.blogger.com/atom/ns#" term="solaris"/><title type='text'>Ping!</title><content type='html'>In both Linux and the BSD variants, the default behavior of the ICMP echo-based ping command is to enter an infinite loop, sending a probe once per second. &amp;nbsp;This results in output something like:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;ubuntu:~&amp;gt; ping 8.8.8.8&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;64 bytes from 8.8.8.8: icmp_req=1 ttl=52 time=35.9 ms&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;64 bytes from 8.8.8.8: icmp_req=2 ttl=52 time=37.3 ms&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;64 bytes from 8.8.8.8: icmp_req=3 ttl=52 time=36.2 ms&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;64 bytes from 8.8.8.8: icmp_req=4 ttl=52 time=37.0 ms&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;64 bytes from 8.8.8.8: icmp_req=5 ttl=52 time=36.4 ms&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;^C&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;--- 8.8.8.8 ping statistics ---&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;5 packets transmitted, 5 received, 0% packet loss, time 4004ms&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;rtt min/avg/max/mdev = 35.936/36.594/37.308/0.548 ms&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In Solaris, on the other hand, the default output of the same command has always been to print &#39;&amp;lt;machine&amp;gt; is alive&#39;, or &#39;no answer from &amp;lt;machine&amp;gt;&#39; after a timeout. &amp;nbsp;Per the Solaris ping manual page, the Linux/BSD behavior is known as statistics mode, and has to be enabled by running ping with the -s flag.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, it seems that an easter egg has been added to the Solaris 11/Express ping program at build 33, remaining in later builds. &amp;nbsp;If you set the shell environment variable&amp;nbsp;MACHINE_THAT_GOES_PING (I&#39;m not joking!) to any non-null value, then the default ping behavior changes to statistics mode. &amp;nbsp;I&#39;ve confirmed this as being the case on my b127 Solaris Express host.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thanks to &lt;a href=&quot;http://blogs.sun.com/jbeck/entry/machine_that_goes_ping&quot;&gt;John Beck&lt;/a&gt; for the tip!&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/7809332755749775002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=7809332755749775002' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/7809332755749775002'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/7809332755749775002'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2011/03/ping.html' title='Ping!'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-7156990619918955712</id><published>2011-03-22T18:47:00.003-05:00</published><updated>2011-03-30T18:57:39.572-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="irony"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="SCO"/><category scheme="http://www.blogger.com/atom/ns#" term="UNIX"/><title type='text'>Thought for the (last) decade?</title><content type='html'>Just found a wonderful quote from the original, &lt;a href=&quot;http://www.rah.org/papers/other/cacm.pdf&quot;&gt;July 1974, Communications of the ACM paper on UNIX&lt;/a&gt; written by &lt;a href=&quot;http://en.wikipedia.org/wiki/Dennis_Ritchie&quot;&gt;DMR&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Ken_Thompson&quot;&gt;Ken&lt;/a&gt;. They say:&lt;br /&gt;&lt;br /&gt;&quot;Perhaps the most important achievement of UNIX is to demonstrate that a powerful operating system&amp;nbsp;for interactive use need not be expensive either in equipment or in human effort&quot;&lt;br /&gt;&lt;br /&gt;This is perhaps something that SCO should have considered over a decade ago when they first decided to pursue Linux because (they felt) it was created far too quickly to have been done without stealing (what they believed was their) &lt;a href=&quot;http://en.wikipedia.org/wiki/Unix&quot;&gt;UNIX&lt;/a&gt; IP.</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/7156990619918955712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=7156990619918955712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/7156990619918955712'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/7156990619918955712'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2011/03/thought-for-last-decade.html' title='Thought for the (last) decade?'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3304409160866269733.post-6895005997184817941</id><published>2011-02-16T21:18:00.006-06:00</published><updated>2011-12-17T19:19:02.817-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dedup"/><category scheme="http://www.blogger.com/atom/ns#" term="deduplication"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="solaris"/><category scheme="http://www.blogger.com/atom/ns#" term="Sun"/><category scheme="http://www.blogger.com/atom/ns#" term="zfs"/><category scheme="http://www.blogger.com/atom/ns#" term="zpool"/><title type='text'>Oracle and ZFS shenanigans</title><content type='html'>With the latest Solaris 10 release or recommended patch cluster, there are significant updates provided for ZFS.  By patching or reinstalling with Solaris 10 9/10, you can get close to the zpool version which was previously only available by using Solaris Express Community Edition, now Solaris 11 Express.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But there is a potential catch.  Each incremental feature change to zpool capabilities causes the zpool version number to be incremented.  You can see what versions are supported on your local install by typing:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;zpool upgrade -v&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;which lists all available features on the current driver, along with their version number.  After applying the most recent Solaris 10 patch cluster, you&#39;ll see the following:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;cara:~&amp;gt; zpool upgrade -v&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;This system is currently running ZFS pool version 22.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;The following versions are supported:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;VER  DESCRIPTION&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;---  --------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 1   Initial ZFS version&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 2   Ditto blocks (replicated metadata)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 3   Hot spares and double parity RAID-Z&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 4   zpool history&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 5   Compression using the gzip algorithm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 6   bootfs pool property&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 7   Separate intent log devices&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 8   Delegated administration&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 9   refquota and refreservation properties&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 10  Cache devices&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 11  Improved scrub performance&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 12  Snapshot properties&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 13  snapused property&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 14  passthrough-x aclinherit&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 15  user/group space accounting&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 16  stmf property support&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 17  Triple-parity RAID-Z&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 18  Snapshot user holds&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 19  Log device removal&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 20  Compression using zle (zero-length encoding)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 21  Reserved&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 22  Received properties&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Note that version 21 is &#39;Reserved&#39;.  If you run the same command on a system running the Express kernel, version 21 shows as:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 21  Deduplication&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 22  Received properties&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt; 23  Slim ZIL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The whole point of zpool versioning is that a pool with a given version number should be mountable on any system running ZFS where the kernel supports at least that version of the pool.  Sun went to great lengths to enable this, even specifying that ZFS was endian-independent, where all writes would be done with the local byte order, but reads would be honored in either big or little endian order.  You can move a pool from a SPARC to an x86 platform, and it works.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This was going to be a blog post about the evils of Oracle Corporation breaking this compatibility.  Version 21 is deduplication on the Express version, but reserved on the release version.  I was going to rant about the dangers of creating a filesystem utilizing deduplication using Solaris Express, then trying to import it into a release version of Solaris 10.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But I can&#39;t quite do that.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After performing an experiment, it seems that Solaris 10 can in fact correctly mount pools created on Express which have deduplication enabled.  However, 10 won&#39;t continue to dedup newly written data, since that&#39;s not a supported feature.  This at least makes sense as a compromise.  Compatibility is preserved across pool versions, to the extent that you won&#39;t see any nasty side effects like kernel panics if you accidentally mount a deduped filesystem on a release version of Solaris 10.  You won&#39;t get any further benefit from this unsupported feature, but it shouldn&#39;t kill you either.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So my only question is this:  is the dedup feature left out of these updates because Oracle wants to provide a compelling reason to move to Solaris 11 (which may also feature significantly different license terms)?  Or are they leaving it out because there&#39;s a concern about bugs which impact integrity, availability, or both in the current version of the software?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Time will tell.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://playfulross.blogspot.com/feeds/6895005997184817941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3304409160866269733&amp;postID=6895005997184817941' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/6895005997184817941'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/3304409160866269733/posts/default/6895005997184817941'/><link rel='alternate' type='text/html' href='https://playfulross.blogspot.com/2011/02/oracle-and-zfs-shenanigans.html' title='Oracle and ZFS shenanigans'/><author><name>Ross A. Hamilton</name><uri>http://www.blogger.com/profile/06704465204423335049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-BVHUKG-8jC4/Tu1LXK0kQtI/AAAAAAAAADk/UYPYABoS3ZA/s220/rah_square.jpg'/></author><thr:total>0</thr:total></entry></feed>