Saturday, July 20, 2013

Low Power, Small Form Factor, and High Utility Home Server


Low Power, Small Form Factor, and High Utility
Home Server

(Be careful.  This definitely voids your warranty.)

Part I:  Results Summary - and some pics
Part II: Back Story - Why the heck would you spend your free time doing this?
Part III: Build Detail
Part IV: Future additions

Part I: Results Summary

Before and After.  Note the power and network cables out the back.
The screw tabs on either side are handy for mounting on the back side of my desk.

This project grew fairly organically from humble beginnings as a proof of concept into a mission critical home server.  My family and I use this server everyday for Network Attached Storage, Streaming Video, Movies, and Music, and Business critical phone service.

Internal layout/test fitting (before using shorter cables and before routing the power cable out the back).
Mechanical Pencil shown for scale.

NAS - Network Attached Storage - I use it mainly as a local, encrypted repository for my source code projects, business documents, etc.  (Family Photos and Videos go elsewhere).  For network file storage I use CIFS for Windows clients or SSHFS for Linux and Android clients.  Wrap in a little Deja-Dup/Duplicity, Dropbox, and a little encfs and you get encrypted backups with onsite and offsite storage.  All automatic.  Peace of mind, complete.

Streaming Media - Video and Music - Here I'm using UPnP and DLNA to stream what I want to watch or listen to - to whatever device in the house I'd like.  Additionally I can control any device from any other device in the house.  Here are a couple examples.
1)  Situation:  I'm on the couch.  It's late, I'm tired, I just want to stream a little Jazz from my home server.  No problem.  Step one: Take my phone out of my pocket and launch BubbleUPnP.  Pick the source material (what I want to watch) and the destination (where I want to watch it) and press play.  In this case, I'm going to pick a video from the server to watch, and I want to watch it on the Living room television.  Press play, and the magic of streaming 1080p HD Video is complete.  I can even pause, rewind, fast forward, seek, adjust the volume of the TV - all from my phone.

2)  Situation: The kids are watching something on the TV - Probably Handy Manny or Little Einsteins, but I want to watch a little Formula One that I've saved on the server.  No problem.  Grab my phone or iPad and stream it directly from the server to my device.

Once you get all the components setup, network included, I've found it to be fairly bullet proof.  I just make sure all the material is encoded to H.264/AAC and I can play it on any device.

Business Critical Phone Service - I recently changed jobs within my company.  This has allowed me to work from home much more often than before.  I quickly grew tired of sitting on long conference calls on my cell phone, so I decided to so something about it.  With Google Voice, Asterisk, the FreePBX web gui, and a physical SIP phone, I've got unlimited local and long distance (US/Canada) and a great speaker phone.  This also allows me to put SIP clients on our Cell Phones and use WiFi to make calls via Google Voice.  I use this phone and service every day I work from home.  I've never received a complaint about call quality.  I can't say the same about my Verizon 4G service...can you? :)

Click here to continue reading Part II: Back Story - Why the heck would you spend your free time doing this?

16 comments:

  1. Absolutely fantastic project!!! It's like someone was reading the "stuff I really want to get around to doing some day" list in my head. Wow!!! Any more posts you care to make on this project, or sources/data you wish to share would be greatly appreciated!

    ReplyDelete
    Replies
    1. Thank you for the feedback! I'm glad to hear I'm not the only crazy person out there... :)

      I've also received requests for more information and possibly building these for others. I'm not sure selling these is something I really want to take on as I could see the pain factor out of support out weighing the revenue. I am also hesitant on sharing my complete uSD card image as I'm sure I'd miss some username/password while scrubbing.

      However I have been fiddling with the idea of open sourcing the configuration files. That way it would be easier for someone to duplicate the project and make their own cash, and I would be able to review each line and replace personal values with generic values. i.e. my gmail account name with: youremail@gmail.com, etc.

      Any thoughts/suggestions on a good way to post/share that information? I'm kinda leaning toward posting the them on github...


      Delete
  2. It looks like Hack A Day picked up my project:

    http://hackaday.com/2013/07/25/android-stick-mutates-into-a-home-server/

    Since there were a few questions posed Hack a Day, I figured I'd address some of them here. See below comments:

    ReplyDelete
  3. "Dax says:
    July 25, 2013 at 9:39 am

    The USB is limiting the bandwidth more than the wifi, with all the devices connected to the same USB host."

    That is definitely a true statement; there are bottlenecks in every system.

    NAS Performance gets me around 8-10 MBytes per second (64 Mbits per sec - 80 Mbits per sec) file transfers via FTP. SCP and CIFS is a bit slower and the CPU gets a bit of a workout, probably due to the overhead in the protocols and encryption (in the case of SCP).

    iPerf (just generating traffic from the CPU out the ethernet interface) I can get 96+ Mbits per sec.

    So, if we look at power versus performance...I'm happy with this.

    ReplyDelete
  4. "randomstranger says:
    July 25, 2013 at 10:14 am
    Also, what about streaming blueray stuff? Does it choke the usb/ethernet? Does SIP still work perfectly when someone is streaming DLNA?"

    I'm streaming MP4 rips at 1080p, 30 fps. I'd have to double check the bit rate, but I set Handbrake at Constant quality RF: 20. Occasionally I get dropped frames on the stick in the living room (but that is likely due to the wifi on that stick). I don't experience dropped frames on any wired devices. Streaming to my wired laptop or desktops via VLC works great.

    SIP still works great. I've had two video streams and an audio stream going at once while on the phone. Zero voice quality issues. The 100mb nic isn't even close to 50% utilized and the CPU is typically less than 45% at any given point.

    I'm not graphing the statistics...but maybe I should install cacti (http://www.cacti.net/) and find out.... :)

    ReplyDelete
  5. "bleh says:
    July 25, 2013 at 11:00 am
    Why he wouldn’t just grab a cubieboard2 is beyond me."

    There were a couple comments like bleh's above. The main reason was that I built this from spare parts I had lying around collecting dust.

    I'm sure there's plenty of other ways to build something like this, but this way was convenient for me.

    ReplyDelete
  6. I also use an MK802, great choice but be warned, the cpu may overheat unless you add some small heat sinks like I did to mine...

    fordfasterr.dyndns.org/downloads/mk802_heat_sink.jpg

    ReplyDelete
    Replies
    1. Nice job! I have that on my to do list:
      -What are the dimensions of those heat sinks?
      -Where did you purchase them?

      Delete
    2. Update to the heat sinks question:

      I've been running the device this way for the last four months. I've had zero performance, temperature, or other problems. There's enough room in the case for the CPU/GPU to 'breathe" and the all metal construction of the case helps with head dissipation. There is one area of the case (on the bottom) near the HDD where the case gets a bit warm after prolonged streaming, but it's barely above room temperature. The case near the CPU doesn't get warm at all.

      Delete
  7. What are the chances you could post some config files for us to use as a base in our own projects?

    ReplyDelete
    Replies
    1. I can certainly do that. It'll take some time as I'll have to go through each file and scrub it of private data before posting.

      The first file is up and more to come. Watch the github repository for more config files:

      https://github.com/vloschiavo/mk802server

      Delete
  8. Watch Part III for updates and links to the github repository for the configuration files.

    ReplyDelete
  9. Love reading about these kind of projects... I've been thinking about creating such a thing so I could make calls from home via Google Voice, to save some money on mobile min (I don't have a "home phone" just mobile") but I could never find a good write up on how to get started with settings it up.. So thanks for the write up (details) you've provided as it's giving me a place to start.

    I have a PogoPlug that I've removed the horrible PogoPlug firmware and installed ArchLinuxARM (ALARM.) So far it runs great; just has MiniDLNA, SSH, and a small WebServer. Wasn't sure if the small box would handle all that and Asterisk.. but after reading all you've done without taxing your box, then I should be alright.

    Again, thank you very much for doing a write up on your project.

    Keep It Geeky!

    ReplyDelete
    Replies
    1. PogoPlug2? - it looks like you have an ARMv5 1.2Ghz. You should be good to go there for asterisk as long as you aren't serving hundreds of handsets. :)

      You're welcome! Glad you enjoyed it.

      Delete
  10. Hi Network hax,

    I have been looking to implement something similar with Asterisk and Google Voice mainly because cellphone quality isn't that great where I live.

    However, I am having trouble with the iPhone portion of the setup.
    What app do you use?

    What is the configuration for Asterisk and the app to make it work?

    Thanks!

    ReplyDelete
    Replies
    1. I haven't gotten around to testing a iOS client (still on my to do list). However, I was considering the 3CX Client. Check it out here:

      http://www.3cx.com/voip/ip-phone-help/lan-pbx/

      If you try it before I do, please let me know how well it works.

      -The Asterisk end station config is fairly simple and there are tons of guides, links, you tube videos, etc.

      If you are looking for a easy, walk through video, check this one out: http://youtu.be/u9DzN1Pu6-Q
      He goes through a lot of config, some of it is unnecessary, and some of it unwise (related to setting up *Unsecured* SIP access to the Asterisk server from the outside). But if you focus on the internal call setup portions and the google voice setup portions, you'll be good to go.

      Delete