Category Archives: Computer

Using MAAS on OpenCompute – Setting up PXE for Serial Console

This article is using Ubuntu 13.10 (Saucy) as a base install.  One of the issues with using OpenCompute nodes is the fact that it is headless.  One of the issues that generally comes up with all tools, being it Cobler, Mirantis, or MAAS, is that the pxe config is not setup to actually show the serial information.  While playing with Ubuntu MAAS, I did figure out a way to redirect the console to serial to be viewed of SOL.

The first step is to install MAAS following the directions that are posted.  In this case I actually installed MAAS on a non-OpenCompute platform, in this case a laptop that I generally use as the controller.  The reasoning is that I don’t want to waste a power OpenCompute  node on what can easily be ran on a basic computer.

We are going to need to modify the templates that are located at /etc/maas/templates/pxe so that we can setup the bootloader and the kernel params so everything gets redirected to console.  If this is not setup, the lat thing you should see before funky characters would be:

Loading amd64/generic/saucy/xinstall/linux........
Loading amd64/generic/saucy/xinstall/initrd.gz.......................

We first will need to setup the boot loader on each image to redirect to the console.  This can be done by:

# cd /etc/maas/templates/pxe/
# sed -i '1iSERIAL 0 115200n8' config.commissioning.template
# sed -i '1iSERIAL 0 115200n8' config.install.template
# sed -i '1iSERIAL 0 115200n8' config.local.amd64.template
# sed -i '1iSERIAL 0 115200n8' config.local.i386.template
# sed -i '1iSERIAL 0 115200n8' config.local.template
# sed -i '1iSERIAL 0 115200n8' config.xinstall.template

The second piece we have to fix then is having the kernel direct to console also.  This is good for when MAAS does the automated install. This step is easier and what you need to do is go to the MAAS webpage, click on the gear on the top left, and scroll down to the “Global Kernel Parameters” section. Add “console=tty0 console=ttyS4,115200n8″ in the text box and click the “Save” button.
MaasGlobalKernelParameters

Controlling a RGB LED attached to a Raspberry Pi through Android

This was a bit of a project that I used to learn some new technology.  Note: I am not an EE and I am just learning how to do this.  Proceed with caution if you want to repeat.

Project Description

I need to be able to control turning on and off an RGB LED utilizing the Raspberry Pi.  I also should be able to turn it on and off using an Android device.

Design

The design is made up to utilize three different components: Raspberry Pi / LED Hardware, Web Service, and Android device.

Raspberry Pi

All the gear that was used was:

  • Raspberry Pi – Model B
  • 5mm High Brightness Full-Color LED
  • Breadboard
  • Resistors
  • 3 x Transistors – 2N3904

Some of the constraints I also have to work with are:

  • Each of the 3.3V GPIO pins can handle a maximum current of 16mA.  They might be able to do more, but from what I read, it would not be for long.
  • The Pi takes about 700mA of the total power without anything plugged in (USB, HDMI, etc), so depending on the power adapter used, there might not be enough power.  In this case, I used a 2A plug.
  • Since each color will require more than 16mA of power to turn on, I need to utilize transistors and the 5V pin from the Pi.  I will use the GPIO to handle closing the circuit on an NPN transistor.  I believe I need to use NPN due to the fact that the LED has a common anode.

The R1 resistors are a complete bit of voodoo to me.  I just don’t know enough to do the calculations correctly, so I know they are under powered.  I also took readings and they are no where near high enough to be a concern.  The best I could come up with was that the β / H(fe) for each is about 60 or 54.  That is probably wrong though, but I’m not sure how to follow the white sheet correctly.  I also wasn’t sure what or how to find what the voltage drop is (I hear .7V or .9V), which goes into the calculation.  I checked with the multimeter afterwards and all pieces were very low.

raspberry-pi-rgb-controller

Web Service

To handle allowing an android device to turn the LED on and off, I needed to create a web service that runs on the Raspberry Pi that would allow easy operations to occur.  Due to the fact that I needed to stay a little more light weight, not to mention I wanted to learn Python, I wrote the quick REST service using Python.  To get the work done, I used the following libraries / packages:

I utilized Flask to quickly prototype up a REST service and inside that service, I’m using the gpio-python to handle turning on and off the GPIO pins.

I did go through this quick, so the REST service really isn’t pretty.  It should handle cleanup still and also considerations if it is used in a multi-threaded fashion for keeping track of resource setup, teardown, and usage.

Endpoint
Method
Description
/led/<color>GETGet the status of the current LED color (On or Off)
/led/<color>/onPUTTurn the led color on
/led/<color>/offPUTTurn the led color off
/led/<color>/togglePUTToggle the LED from off to on or vise-versa.

The LED colors are red, green, or blue.  The response code is just plain old text.

Source Code

Android Device

Nothing special here.  Just used the Android SDK and Eclipse.  I then used a Nexus 7 to handle playing with it.  Again, this should have been done a little different if real life, but for now it was quicker to use AsyncTask.  As long as I don’t turn it before I get a response (really hard to do), then I am fine.  There are different opinions on the correct way, which is either an invisible fragment or using a command system to a service running in the background (I prefer the latter, but more complex).

Results

 

 

Setting up TomatoUSB for VLANs and Ubiquiti AP

So after getting a quarter of the way through a comment to a question somebody had on my Ubiquiti APs, TomatoUSB, VLANS, and Linksys e3000 post, I realized it would probably work better as a post instead. Christoph’s question was:

How did you wire everything? I’m trying to do the same and had no luck. I only have one UAP, but if I turned on tagging for the Port I used for each bridge, I wouldn’t even get an IP.
I would like Management and Home to be one vlan, and guest another, so my setup is simpler. Maybe knowing how you wired it will help.
Thanks!

I’m going to walk essentially through what steps I remember taking to get up that far.

Assumptions

  • VLAN 2: Home / Management
  • VLAN 3: DMZ
  • UAP plugged into Port 1
  • Admin Computer plugged into Port 4
  • Management / Home network is 192.168.1.0/24
  • Guest network is 192.168.2.0/24
  • You have a VLAN edition of Toastmans TomatoUSB mode

Setting up TomatoUSB

  1. In the Tomato Web Interface, Advanced -> VLAN, make sure you have VLAN 2 and 3 setup. To add each VLAN, just click the “Add” button and fill in the VLAN and VID so they match. (Fuzzy memory alert) You want to make sure that the existing bridge, br0, is attached to VLAN 2, and make sure that Port 4 has “Yes” for LAN (br0) and Tagged is blank. I set VLAN 15 to WAN. For VLAN 3, the bridge will be set to “none”. Click Save.
  2. Now navigate to Basic -> Network. Under LAN, click to add a new bridge LAN 1 (br1). Make sure DHCP is enabled, IP address is 192.168.2.1, and netmask is 255.255.255.0. Change the IP Range to whatever range you would like the DHCP server to give out in that ip subnet (so 192.168.2.10 – 192.168.2.200). Scroll down and click Save.
  3. Now go back to Advanced -> VLAN, for the bridge for VLAN 3, now select LAN1 (br1). Click the OK button and then click the Save button at the bottom of the page.
  4. At this point, you will want to setup your ports how you want them (assigned VLAN or tagged). On port 1, you will make sure that both VLAN 2 and VLAN 3 are set as Tagged (will fix later).
  5. Now we need to telnet (or SSH if enabled) into the router to fix port 1 so that VLAN 2 is not tagged, but VLAN 3 is tagged. Follow the steps in the earlier post. Use the “# nvram show | grep vlan2ports” command to which ports are setup on VLAN 2 and with tagging. Just copy those values over into the “nvram set vlan2ports=”"” section, and then change 4t to just 4. The ports go in reverse of their name. Click enter, run “nvram commit”, and then “reboot”.
  6. When you go back into Advanced -> VLAN, you should see that Port 1 has VLAN 2 blank in tagged column, but VLAN 3 has Yes.
  7. If you want to allow access from one network to another, go to Advanced -> LAN Access. In there you basically handle a basic firewall access by allowing all access from one vlan to another, or one ip address on a vlan to another ip on another vlan or the entire vlan. Unfortunately, it does not do firewally at a port level. You will need to use the command line in Tomato to do that if you need it. This is only for firewalls between VLANs though, as port forwarding from the outside is done the traditional way.

Setting up Ubiquiti AP
When setting up Ubiquiti, your home network SSID should not be assigned to a VLAN (leave it blank). Your guest network SSID should be assigned to VLAN 3. At this point, if all went well, your AP should pick up an IP and clients on each SSID should get assigned to the correct subnet.

RocketRaid 622 Driver (rr62x) for Ubuntu Linux Kernel 3.8

More of a reference for myself so that I don’t have to go through this again, but I put together the patches people had in multiple places so that I can install rr62x-dkms on my 12.04 system. Probably a better way to do this, but I’m tired and just wanted to get the system up.

File: rr62x-dkms_1.1_all-3.8.deb

Resources Used

Sound on Dell XPS L702X in Linux

After getting the sound working on the laptop, I was still running into issues with distorted sound and the sub woofer not working. The sound chipset that is in it is Intel, as can be seen by:

00:1b.0 Audio device: Intel Corporation 6 Series/C200 Series Chipset Family High Definition Audio Controller (rev 05)

The fix was by adding some additional commands to the snd-hda-intel module:

echo "options snd-hda-intel model=ref index=0" >> /etc/modprobe.d/sound.conf
echo "options snd-hda-intel model=6stack-full" >> /etc/modprobe.d/sound.conf

Accessing your eBook collection managed by Calibre without Calibre Server

This post is about how I’ve been going about enabling access to my eBook purchases that are managed with Calibre without actually using the built in Calibre Server.  All of this is running on Linux, with my eBooks and Calibre Library sitting on a remote Linux File Share.

The reason that I’m not using the Calibre Server to do the distribution is because:

  1. I actually store all the eBooks and the Calibre database on a Linux file share that is then shared on my network using Samba.
  2. I use multiple computers to interact with that Calibre database (not at the same time).  They are all setup to open the database on the samba share.
  3. The file share is headless and does not have X installed

So to do this, the first thing I had to do was setup the directory on my file share and then setup samba to share it out to the network.  Once that was done, I then mounted the share on my client computer.  With that done, when I started Calibre for the first time, I just change the configuration to use the samba share directory.  Now whenever I open Calibre, all the eBooks and database files are now stored and shared internally on my file share.

That was great and all, but I also wanted to be able to easily browse the collection inside and outside my network.  To do that, I figured the best way is using a web browser.  After looking around very quickly, I decided to use a software called, “Calibre PHP Server“, since the file server already had Apache and PHP installed on it.  I do have to warn, it’s not the best software out there and the design choices aren’t the best, but it is functional and I was able to get it up and working without having to write it myself.

To get it working with Apache, I created a new sub-domain to put it under, something like books.domain.com.  At that point, the configuration for it was very simple.

<virtualhost *:80>
        ServerName books.somedomain.com
        DocumentRoot "/var/www/books.somedomain.com"
        <directory "/var/www/books.somedomain.com">
                AllowOverride All
                Allow from All
        </directory>
</virtualhost>

After that, I just followed the instructions that came with the software for setting it up.  I also added the optional section, which restricts who can access the books, so that only my wife and I have access to our library.  As I mentioned, the interface isn’t the best, but it is functional.  One area that I ran into issues with was the configuration files.  The first one was the “$config['smarty']” option, which when you install smarty in Ubuntu, you will use, “$config['smarty'] = ‘/usr/share/php/smarty’;”  The other issue is with the, “$config['smarty_dir']“.  I found that no matter what value you enter into it, it won’t work unless you create an additional directory by hand under it called, “smarty_templates_c”.  So for example, if you specify it as “$config['smarty_dir']=’/tmp/smarty’”, then you will then need to create the additional directory as so, “# mkdir /tmp/smarty/smarty_templates_c”.

Now my wife doesn’t have to ask me to put eBooks on her Nook Color anymore, but knows to go to that website when she wants to get one of her books and just download it that way.  It will basically work with any browser and shows all the different file contents it contains.  In our case, we have some PDF’s and epubs.  It works flawlessly.

The next step that I want to take when I have time is to come up with an additional way to use access the library with the source being a OPDS server.  There are two pieces of software that I’m currently looking at, but haven’t had time to play around with them to see which way I like best.  Until then though, this solution is working good for us both.

Ubuntu 10.10 Grub Update for OS X

This article builds upon Triple Booting Windows 7, OS X (Chameleon), and Ubuntu 9.10 (Grub2).

I recently updated my desktop to Ubuntu 10.10 and noticed that the grub commands have changed ever so slightly. With the new installation, I just needed to create the /boot/chameleon/ directory again and copy the boot0 from Chameleon 2.0-RC4 into the directory.

One thing that I noticed is that the new grub script also presents 32-bit and 64-bit options for my OS X installation now, which I’m up to 10.6.3. I take care of loading 64-bit through chameleon though. Here is my new entry for loading OS X through Cameleon.

 menuentry "Mac OS X Chameleon (on /dev/sda2)" {
     insmod hfsplus
     set root='(hd0,msdos2)'
     search --no-floppy --fs-uuid --set 62d3496cb25b59d8
     parttool (hd0,2) boot+
     chainloader (hd0,msdos4)/boot/chameleon/boot0
}

Sometimes it doesn’t copy correctly, but it should be two hyphens in front of no-floppy, fs-uuid, and set

You can find your uuid of your partitions by running blkid.

My current partition setup is:

  • /dev/sda1: Windows 7
  • /dev/sda2: OS X
  • /dev/sda3: Swap
  • /dev/sda4: Ubuntu Linux 10.10

OTA DVR Equipment Build

I’ve decided to drop cable / satellite, and create a DVR that will record programming from over the air. This first entry is just going to outline the what I wanted out of the DVR and what equipment I purchased and why. The main intention is for a DVR, and not a gaming system. In the chance that I did decide I want to go that route, I tried to purchase equipment so that I would only need to purchase a video card to allow it to play games.

Requirements

  • Quiet. Should not be audible when watching tv
  • Stream online content
  • DVR over the air content
  • Stream shows and movies from home file server (NFS or Samba)
  • Should be able to play multiple containers and formats (xvid, divx, mkv, H.264)
  • No keyboard and mouse should be required for use

Hardware Purchase

  • Case: nMEDIAPC HTPC 1000B
  • Power Supply: SeaSonic S12II 430B 430W
  • Motherboard: ASUS M4A785TD-M EVO
  • Processor: AMD Athlon II X2 250 Regor 3.0GHz
  • Memory: CORSAIR XMS3 4GB (2 x 2GB) DDR3 (PC3 10666)
  • Hard Drive: Seagate SV35.5 ST31000525SV 1TB
  • Tuner: Hauppauge WinTV-HVR-2250 Media Center Kit

Note: I also purchased the LCD that goes along with the case, but after having used it, I would not have purchased it. It is too difficult to read at a distance and it is poorly made. I thought it would be cool to have showing time and what was playing and recording, but I have to get up close to the tv to see it.

nMEDIAPC HTPC 1000B
I was looking for a good case that would fit my media center stand. This case had the identical shape of my current audio receiver and even matched it’s dimensions perfectly. There is a front panel on the front that hides one IEEE 1394 port, one e-SATA port, two HD Audio ports, one SDHC 2.0 Card Reader and three USB 2.0 ports. It does not come with a power supply. You can buy an optional lcd for the front, but as I mentioned before, I would skip on purchasing it. A Micro ATX will fit in it. It has 1 5.25″ Drive Bays and 4 3.5″ Drive Bays, but you will only probably be able to use 2 out of the 4 3.5″ Drive Bays due to things getting to tight and reducing air flow. It has 2 60mm Fans in the back and 1 90mm Fan on the side which are very quiet. I’m very pleased with this case and would highly recommend to others.

SeaSonic S12II 430B 430W
This power supply is enough power for what I need. It’s also very quiet and has excellent reviews. Unfortunately, it is not modular, but I had no problem bundling up the extra cables and putting them in one of the empty 3.5″ drive bays.

ASUS M4A785TD-M EVO
This seems to be a good motherboard. The reasons that I purchased this one in particular is that it is a Micro ATX form, allows for DDR3 memory, has both a PCI Express 2.0 x16 and PCI Express x1 slots, has a integrated ATI Radeon HD 4200 GPU with 128MB DDR3 1333 memory, has a HDMI output, and a S/PDIF Out optical out.

The reason that I wanted both a PCI Express 2.0 x16 and a PCI Express x1 slot is for the tuner card and a future video card upgrade if I choose to upgrade it to a gaming system. The HDMI out is self explanatory and I really wanted a S/PDIF optical out so that I could hook it up to my receiver.

I wanted a motherboard with the integrated ATI Radeon HD 4200 so that I could offload the video decoding of the H.264 to the video card from the CPU. With this video card, I can watch every mkv that I have with no stuttering and very little cpu usage. I also don’t have to worry about the additional heat and fan sound from having a video card in the machine, and also the price of having to buy a video card.

The only downside to this motherboard is the bios settings. It’s hard to get it just right to get in there and the bios menu leaves a lot of wanting. It does horrible for setting boot sequence since if you want to boot from usb, a bootable usb needs to be in there to set it to boot from it in the order and it only works for that particular device. Luckily, you only need to mess around with the menu once.

AMD Athlon II X2 250 Regor 3.0GHz
I bought this cpu for two reason: 1) 65 watt tdp and 2) price per performance.

I could have bought a much nicer processor that runs cooler and faster, but then it would have increased the cost of the dvr quiet a lot. This is a dual core processor, for when I’m running multiple things at once, which every computer is doing anymore. It handles everything wonderfully and without stutter. It’s also powerful enough for doing the tv re-encoding and if I want to use it for playing video games in the future. The 65 watt tdp means that it uses less power and runs cooler. The fan that comes with it is very quiet also.

CORSAIR XMS3 4GB (2 x 2GB) DDR3 (PC3 10666)
Since DDR3 is dropping in price and is getting close to the cost of DDR2, I decided to go the faster route and get DDR3. There is no special reason I bought the CORSAIR, it was just on a very good sale when I found it. I decided to go with 4 gigs, because I planned on having multiple programs running at the same time and heard that if I wanted to run Boxee, that it was a memory hog.

Seagate SV35.5 ST31000525SV 1TB
I figured a one tb drive would be more than enough to use as a dvr, since I wouldn’t be storing anymore besides recorded tv shows on it. I made sure to stick with a drive that is 7200 RPM, even though the green drives (5400 RPM) run cooler and with less power consumption. In my mind, recording two shows at once while watching another show would probably tax a 5400 drive a little too much and have some stuttering. This drive had good reviews and was designed to be used for security cameras, which matches very closely to what I’m going to be using it for. In use, this drive is super quiet and I have no complaints with it at all. Beyond that, the reason I picked this one out of the other recommended DVR drives is that it was on sale.

Hauppauge WinTV-HVR-2250 Media Center Kit
I chose this card after viewing my friends DVR that had it in there. It just has wonderful picture. That card fits a PCI-Express x1 slot. The card is a dual tuner, which means you can either watch 1 show and record another or record two shows at once. The “Media Center Kit” edition comes with a remote and ir receiver.

Triple Booting Windows 7, OS X (Chameleon), and Ubuntu 9.10 (Grub2)

So wouldn’t you know it, my video card died and I decided to get around to installing Windows 7 and Ubuntu 9.10 at the same time.  Of course, installing Windows 7 took over the booter, then installing Ubuntu 9.10 took over the booter and did a great job at identifying Windows 7 and OS X.  In fact, it did too good identifying OS X.

The new version of grub2 is able to work directly with OS X to start it up natively.  Unfortunately,  I like to try to not patch OS X as much as possibly, so I use Chameleon, which grub2 was bypassing.  I don’t know what a beautiful solution is, but I do know what a working solution is.

OS with Loaders:

  • Windows 7 (Default Boot Loader)
  • Ubuntu 9.10 (Grub2)
  • OS X 10.5.6 (Chameleon 2.0-RC4)

The first step is to install OS X however you usually do it.  Once it is installed, I chose to upgrade to the latest version of Chameleon for some of the additional video card identification that it was able to provide.  All that requires is downloading from the link above and following the directions.  Before you reboot, copy the boot0 file to removable media.

The next step is to install Windows 7.  Once this is done, Windows has now taken over the boot system and you can no longer start OS X.

Finally, it is time to install Ubuntu 9.10.   Once the install has finished, it has taken over the boot screen and you will see entries for Ubuntu, Windows, and OS X.  The only issue is, if you try to start OS X, it will bypass Chameleon and start the kernel directly.

To fix this issue, make the directory /boot/chameleon and then copy the boot0 from the removable media into that directory.  Then add or update the OS X section to the following:

menuentry "Mac OS X Chameleon (on /dev/sda2)" {
        insmod hfsplus
        set root=(hd0,2)
        parttool (hd0,2) boot+
        search –no-floppy –fs-uuid –set 88e76bb6d81f12fb
        chainloader (hd0,4)/boot/chameleon/boot0
}

The “88e76bb6d81f12fb” is the uuid of the partition. You can find the uuid by:

# user@teh-lunix:~$ ls -l /dev/disk/by-uuid/

OS X and Truemobile 1940 Issues Fixed

I currently picked up a $21 Dell Truemobile 1490 wireless card to put in my MSI Wind instead of the Realtek that’s in it. It install just fine, I got it working in Windows and Linux with no issues, but OS X was another story.

It wouldn’t connect to a wireless network at all by itself. On the menu bar it wouldn’t show any wireless networks. It did show “AirPort: Not configured”. If I opened the network preferences, it would show up as Ethernet 2 off. I would have to turn it back on each time I rebooted. I would then have to select the drop down box to pick a network because it still wouldn’t show any networks in the menu bar (and the menu bar would still say not configured). I could join my network and get an IP address, but the menu bar icon would not show any bars at all. It would be right next to the access point and I could surf the net just fine though.

Thanks to a post at InsanelyMac, I was able to finally fix this issue.

  1. Open Network Preferences
  2. Remove all devices except Firewire by highlighting the device and then clicking on the minus sign below the device list
  3. Reboot the machine
  4. Open Network Preferences
  5. Click the plus sign under the device list and select AirPort
  6. Click Apply

Since doing that, my menu bar works, networks are connected to automatically, even after reboots.