I already have existing servers, but I figured it would be best to build an entire Media System which stands alone and try to make it as small, efficient and automated as possible. This way, the system can be replicated and used at friends houses etc as a relatively plug-n-play solution. Plus, the simpler I keep it with as much automation as possible the easier it is to explain how to use it to other members of my family and friends.
- So the top requirements are:
- Small form factor
- Energy efficient
- Cheap to build
- Large storage capacity
- Network connectivity
The project comprises of multiple distinctly separate functional components, which fit and work together as a whole. Each component listed below requires a certain level of knowledge about either hardware, electronics, programming, Linux OS, carpentry/woodworking or a combination. As a whole I would say the difficulty of the project would be somewhere between ‘Intermediate’ and ‘Advanced’ but only because the knowledge required is across a wider scope than many of my other projects. Each separate components difficulty I would rate at only around ‘Intermediate’ at most. These components are listed below with what I consider the level of required knowledge:
- Hardware [1/5]
- Networking [1/5]
- Linux OS [4/5]
- BASH Scripting [3/5]
- Building simple electronic circuits [2/5]
- Arduino programming [3/5]
- Chassis building [3/5]
Once all the pieces are cobbled together we will have a device which:
- Runs Transmission. A BitTorrent downloader
- Runs CouchPotato. A movie downloading front-end to search and manage downloads
- Runs SickBeard. A TV series downloading front-end to search and manage downloads
- Runs MiniDLNA. A service which streams all media content to any compatible device
- Runs OpenVPN. This instance runs as a client to a server I have in USA, allowing us to stream USA-only services like Netflix (click here for related blog entry)
- Runs Squid Proxy. Used for any devices on the network to proxy their traffic through which is then source-routed through the VPN tunnel to USA
- Runs OpenVPN. This instance runs as a server to allow remote connections to the network. This isn’t needed for media services, but is handy to have
- Networking configured so that certain services are accessible from the local network and/or internet
- Monitors temperature of the machine and triggers a fan if temperature passes a threshold
- Uses an LCD screen to show temperature, running service status and other alarms
For the hardware I needed something small and efficient to run Linux. There are plenty of ARM-based solutions in the market with the Raspberry Pi being the most popular. Unfortunately though, the RasPi doesn’t have SATA support nor does it possess the amount of power I would like.
Ultimately, I settled on using a UDOO (www.udoo.org).
For $135USD (plus shipping) I received this small form factor ARM-based quad-core board with built-in SATA and wired/wireless network. It also has Arduino built-in and you can communicate via a serial connection in both directions between the ARM and Arduino processors, which is pretty darn awesome when you think about it (more on that later!).
UDOO started off as a Kickstarter project not long ago and has made huge progress. However, I would still consider it a bleeding edge technology; which is to say that although the UDOO community exists, it is still in its infancy and you may need to do some of your own hacking to get some things working.
If you have any hardware experience at all, then you will find the UDOO mostly straight-forward. The tricky part is powering up your hard drive. At first I had a 2.5″ (smaller) hard drive which only requires 5v which is obtained from the red/black wires you see on the left side of the picture below. I later changed the disk to a larger capacity 3.5″ (larger) hard drive. These require 12v and 5v. The 12v is obtained from the yellow/black wires on the right side of the same picture. Don’t know how to wire up a SATA power plug? click here (note: You do not need to supply the 3.3v wire at all)