Skip navigation

I’ve always had one or more servers at my disposal as I’ve worked on various projects. Over the last few years I’ve been heavily involved with work projects and haven’t had much time for anything personal. But I’m trying to change that a bit and keep myself sharp on new technologies.

Cloud is everywhere, and it’s one of those terms that everyone says but few people really understand. At it’s core you could say cloud just means “the Internet”, as in “my files are stored in the cloud”. And maybe it originally did. These days now cloud refers more to a kind of highly-scaleable, highly-available virtualized infrastructure that is hosted by someone else. Amazon Web Services is probably the most well known, but there are lots of other players out there.

The general concept is you pay based on usage, like you would your electric bill. It’s really pretty fair. So if you use 10 virtualized servers for 5 hours in a day, and scale back to just one for the rest of the day, you only pay for that usage. However even at the lowest tier on AWS, you end up paying about $10 a month if you wanted to run one server continuously, so creating a real infrastructure for fun can end up being costly (to the hobbyist). Naturally the costs are fine for an actual company who is profiting from it.

So what’s a hobbyist to do? I still have one bare metal server left these days, a rack with a Xeon 5160 and 12GB RAM. I decided to purchase a second Xeon, 8GB more RAM, and will be installing VMWare’s vSphere Hypervisor (ESXi) on it, which is free. It has limits, but nothing I’m going to run up against (>8 vCPUs, more advanced monitoring, etc). I plan to create a few micro instances on it to run basic services, and want to start using infrastructure automation tools to manage the instances. Things like Packer, Consul, and other really interesting things from HashiCorp that I’ve always wanted to play with.

I still plan to have fun with AWS instances for now, experimenting with launching and killing infrastructures, given I’m in the free year/tier on AWS. But most of my persisting fun will be happening on my rack, which won’t cost me anything.

As I go through this transition and process, I plan to document some learnings and examples back here.

You might be seeing non-working audio output and the following tricky bits in your subsonic log:

Error in jukebox: javax.sound.sampled.LineUnavailableException: Audio Device Unavailable

First thing is to make sure you’re running the Sun JDK and not OpenJDK or something else. Apparently there are things that don’t play well with non-Sun.

If you’ve done this, restarted Tomcat and still have no audio when using Subsonic with Gentoo and Tomcat, remember to add Tomcat to the relevant groups:

groupmems -g pulse -a tomcat

groupmems -g pulse-access -a tomcat

groupmems -g audio -a tomcat

groupmems -g plugdev -a tomcat

To be fair I’m not sure if they’re all necessary, but it works for me. You’ll need to restart Tomcat afterward to make it work.

sudo /etc/init.d/tomcat-6 restart

So I setup OpenVZ a few months ago in an environment where my Host had two NICs, one on a local “office” network, and another hooked directly up to a WiFi AP that had VLAN’d SSIDs. That part’s not too important, but what is important is the VLANs. It seemed real easy when I did it back then.

However, having to re-do it again for various reasons without the source config, it was not so easy. In fact, I wasted nearly half a day until I figured out you need to add the veth device and the Host adapter to a bridge to even route the traffic properly. The key understanding is that the veth device for OpenVZ has absolutely no relation to any network adapter on the HN. Understand that and you’ll be OK. All it does is create an interface on the HN whose other side is on the VE.

So to save myself some hellish boot configuration, I modified vznetaddbr (below) to create the bridges and bring everything up real nice for me. The key bits are that you defined your veth device with a bridge parameter called ‘vlan###’ where ### is the vlan ID. You’ll also need to change the line near the top that says dev=eth1, unless eth1 is your VLAN’d NIC.

Really, hopefully this helps someone. Should be self-explanatory, but be sure you have brctl and vconfig installed.

# create this file somewhere, and add it to
# /etc/vz/vznet.conf as:
# be sure to chmod +x both
NETIFLIST=$(printf %s "$NETIF" |tr ';' '\n')
ip link set dev "$dev" up
if [ -z "$NETIFLIST" ]; then
   echo >&2 "According to $CONFIGFILE, CT$VEID has no veth interface configured."
   exit 1
for iface in $NETIFLIST; do
    for str in $(printf %s "$iface" |tr ',' '\n'); do
        case "$str" in
                eval "${str%%=*}=\${str#*=}" ;;
#    [ "$host_ifname" = "$3" ] ||
#       continue
    [ -n "$bridge" ] ||
    vlan=`echo "$bridge" | sed s/vlan//`
    echo "Creating $bridge on CT0"
    brctl addbr "$bridge"
    echo "Adding interface $host_ifname to bridge $bridge on CT0 for CT$VEID"
    ip link set dev "$host_ifname" up
    brctl addif "$bridge" "$host_ifname"
    echo 1 >"/proc/sys/net/ipv4/conf/$host_ifname/proxy_arp"
    echo 1 >"/proc/sys/net/ipv4/conf/$host_ifname/forwarding"
    echo "Creating interface $target_if on CT0 for CT$VEID"
    vconfig add "$dev" "$vlan"
    echo "Adding interface $host_ifname to bridge $bridge on CT0 for CT$VEID"
    ip link set dev "$target_if" up
    brctl addif "$bridge" "$target_if"
    echo 1 >"/proc/sys/net/ipv4/conf/$target_if/proxy_arp"
    echo 1 >"/proc/sys/net/ipv4/conf/$target_if/forwarding"
    ip link set dev "$bridge" up
exit 0

If you get hangs in Nautilus when attempting to view file properties, do the following:

rm -rf ~/.thumbnails
killall nautilus

Should be good after that!

grep -rl matchstring somedir/ | xargs sed -i 's/string1/string2/g'

The Source