29 April, 2016
Over the past couple of years, I have iterated over my homelab, which I covered briefly in another post1.
That the "homelab" isn't really used for anything educational is not under discussion here. It is used to store, backup and serve content, primarily movies, T.V. shows and music. The nature of the media is not the topic of this post and never will be.
To some of you, this setup may seem excessive. I recommend that you amuse yourselves over at /r/cordcutters, /r/datahoarder and /r/homelab first and then revisit this post. In my journey for finding the perfect setup, I have found people with expertise and passion that inspired me to build the setup I have today. With what I have, I can stream my content to remote devices anywhere in the world, watch basic cable and have all my media consolidated in one place. It is worth noting that this isn't the most economical of setups, though the rationale behind most hardware choices is to ensure longevity and reliability. The upfront cost of acquiring hardware necessary for the build might seem prohibitive and rightly so; I use server-grade components meant to run 24/7, which comes at a price.
Having said that, in the long run, you will have on-demand access to a library of content that is curated by you, is of the highest quality that internet has to offer and at a monthly2 cost that is still less than any bundled garbage that your cable television provider offers.
I will cover different aspects of the setup, put an dollar estimate against each one and try to point out which pieces are optional.
NAS (Network Attached Storage)
At the time of writing this post, the hardware I list below is still perfectly functional and has been for the last 2 years. Take the list of hardware and the corresponding prices with a grain of salt; you can definitely find better deals on your favorite computer hardware websites. For the motherboard, RAM and processor, I went with brand new parts. You may find success with refurbished or used parts; I encourage you to use your imagination.
The goal of my setup was to have a place to store my media, serve it and then consume it. To that end, I started with a NAS or Network Attached Storage. The choice between readymade NAS systems such as the ones manufactured by Synology or Drobo and creating your own is primarily driven by cost, willingness to spend time configuring the system to do exactly what you want. I want maximum control over the hardware and the software of the NAS, which is why I chose to build my own.
An important thing to consider is what you are going to use the NAS for the most. If you plan on streaming a lot of HD video from your NAS, you may need more than the Atom/ARM processors that most readymade NAS systems come equipped with. For transcoding3 HD video over the network, an Intel Core i3 or an i5 processor will offer vast performance gains over embedded processors.
If you plan on using the NAS for just storing and backing up data, then readymade solution is better suited to your needs.
Homelab setup as of April 30, 2016
† Each of the RAID controllers has 2 SAS ports; with a SAS to SATA breakout cable, each port supports 4 drives, so one card will support 8 HDDs. I have 10 HDDs so I need 2 cards. You can definitely save money here by starting small.
IBM ServeRAID M1015 Cards
The motherboard4, RAID controller cards5 have been reported to work perfectly by the Freenas community.
You do have to flash the firmware on the RAID controller cards to LSI firmware6 so that they appear as LSI Logic 9211.8i cards to Freenas. Most RAID controller cards add their own layer of abstraction over the HDDs that are connected to them. Freenas likes to be directly interfaced with the HDDs and many times, the proprietary software abstraction offered by the RAID controller cards can cause problems, and even loss of data.
By cross-flashing the IBM card's firmware to LSI Logic 9211.8i firmware, Freenas sees the card as a simple HBA (Host Bus Adapter) minus the abstraction.
Enclosure for your NAS
The enclosure for the NAS is highly subjective. I am not a huge fan of putting cases on the floor, so I went with a rackmount enclosure. The 2016 Norco 4220 enclosures are quite nice and have fixed problems previously reported with their backplanes. Depending on your preference for hot-swap bays, number of hard drives you wish to have and future expandability, you can opt for a smaller case with fewer hot-swap bays and save money there.
That said, I did replace the stock fans that came with the enclosure with Arctic Cooler fans, which are a lot quieter and offer sufficient cooling.
Closing thoughts on NAS Hardware
I also purchased an open rack for mounting all the equipment, so that all of the hardware has a place to live and there aren't cables running all over the place. This is entirely optional however, since this consideration is dictated by the space you have at your disposal. There are other pieces of hardware that I left out, such as a switch, firewall appliance, a UPS and a base station.
I highly recommend investing in a UPS, since power spikes or surges could damage the HDDs in the NAS and lead to data corruption, data loss or worse, mechanical failure of the HDD.
Assuming that you have acquired the hardware for the NAS, the next step is to install and configure the software. We begin with the OS (operating system.) There are as many, many choices; Freenas, Nas4Free, any flavor of Linux or even Windows Server and Mac OS. I went with Freenas owing to the fact that it is a stable NAS OS, based on FreeBSD and comes with ZFS7 support out of the box, along with many plugins that I need for media automation.
The next important piece is your media automation, which is powered by usenet. Usenet is one of the oldest existing means of exchanging information; I implore you to do your own research on usenet's history.
There are three distinct aspects of media automation—the search/cataloguing software, usenet servers and an indexer. You will have to pay a subscription fee for a decent usenet server and a couple of indexers. Usenet servers keep files for a certain period, known as retention. Most competent servers will offer 1800-2000 days of retention and offer 99% NZB completion, which is another way of saying that if a file is corrupt, the server offers enough redundant pieces to complete it.
||Astraweb and Giganews
||~$10-$12 each for a VIP membership
||Total estimate with a $60/mo Internet connection†: ~$80
† A basic 250Mbps internet plan from Comcast, Cablevision or Time Warner will run you anywhere between $60-$90 depending on the area and the device rental fee, taxes et al.
Usenet servers host the files you need to download, usenet indexers maintain an index of those files and the cataloguing software searches for the files and automatically downloads them. My setup includes Freenas running plugins to look for movies, TV shows and music and download them as they become available.
|The software on the server side is:
|Couchpotato, Sonarr, Headphones
||for automating media downloads
|Sabnzbd and Transmission
||plugins for downloading media
|Plex Server plugin
||for metadata scraping and serving content
Freenas comes with support for all of the above in the form of plugins, and it also makes configuring these plugins very straightforward. You can set up Couchpotato, Sonarr and Headphones to connect to the indexers and then send matches to Sabnzbd and Transmission. You can also configure post-processing and metadata scraping; set up notifications so that the plugins can inform you when the media has been found, downloaded and post-processed. Furthermore, you can also have these plugins send notifications to Plex so that the library is always kept updated.
I have set up Pushover, and configured all the media automation plugins to send me notifications to my phone so I know if a movie/show/album has been downloaded.
|The hardware on the frontend/consumption side:
|HTPC (Home Theater Personal Computer)
||sourced from Amazon
|HD Homerun Extend for OTA cable
|Amazon Basics Leaf Antenna
|Vizio M50-C1 4K 50" Television
|Software on the client side
|Windows 10 Home Edition
||HTPC frontend software
||Video game cataloguing software
Glossary of terms
NAS Network Attached Storage. This is a computer or a headless server with hard drives available over the local area network. To other computers on the network, this appears as a shared hard drive.
Homelab A term used to describe the cumulative hardware; including and not limited to a NAS, a firewall, a switch, a virtualization server, a packet filter and many others. This is usually done by networking or IT professionals to practice for their network certification examinations.
HTPC Home Theater Personal Computer. This is a computer; either custom-built or pre-built and is suited to be put in the living room, connected to the TV set or the projector with the sole intention of media consumption. To that end, there are many HTPCs that come in a small form factor, which allows them to be put out of view.
NZB NZB is an XML-based file format that is used to download files from usenet. It describes the data to be downloaded and where to get the different pieces from. Since headers are not downloaded, when you download data using NZBs the transfer process utilizes bandwidth in an efficient manner.
Work is underway to move this site to angularJS and MongoDB.
23 May, 2015
Kodi, formerly known as XBMC is one of the best pieces of software to manage rich media and drive your home theatre PC(HTPC). The list of configurable options is impressive and it is open-source, actively maintained and has a six monthly release cycle.
That said, one aspect of Kodi is the ability to customize the look and feel. There is a very active skinning community that maintains the Wiki dedicated to resources. However, it is very disorganized.
Begin by downloading Kodi
Head on to Kodi's download section and download the version of Kodi based on your OS. This post will focus on a Mac setup.
While I haven't had complete success with the Confluence skin, the official Skinning Wiki recommends it, so I will go along with that.
Modify the keymap
One of the very first things you want to do is add the ability to reload the skin. You will want to refresh the skin to preview changes.
You want to create the
keymap.xml file. Place this file in
/Users/<your_user_name>/Library/Application Support/Kodi/userdata/keymaps This is where Kodi on Macs reads the key bindings for keyboards and other input devices.
Grab a sample
keyboard.xml file from here and paste the contents into the file you created in step 1.
You want to place the key binding to reload the skin in the global node.
<!-- Additional keybindings -->
<!-- ... -->
Skins in Kodi use an
.xbt file which is a result of compiling all images and assets into one file. TexturePacker lets you compile your assets into that file.
Download TexturePacker for Mac here
Head on to the
/Applications/Kodi.app/Contents/Resources/Kodi/tools and unpack TexturePacker there.
Then run TexturePacker, like so:
./TexturePacker -input /Applications/Kodi.app/Contents/Resources/Kodi/addons/skin.confluence/ -output /Applications/Kodi.app/Contents/Resources/Kodi/addons/skin.confluence/media/Textures.xbt
As far as I know, the output
.xbt file should be named
So essentially, we are passing it the path to the
media folder as input and specifying the name of the
.xbt file as well as where it should be saved. If you don't want to remember path names, you can simply unpack TexturePacker in the skin folder:
/Applications/Kodi.app/Contents/Resources/Kodi/addons/skin.confluence/ and run it like so:
./TexturePacker -input ../ -output ../media/Textures.xbt
Changing fonts and font styles
Move the fonts that you wish to use in the
fonts folder of your skin.
Run Texturepacker to create a package file containing those fonts, so that your skin has access to those assets.
In your configuration, you can change the attributes that affect the font styling:
27 April, 2015
Recently, I upgraded my nVidia 780 Ti to a pair of R9 290Xs.
I purchased a PS3 with my first salary back in 2010, mostly for it's exclusives - God of War 3, Uncharted 2, Killzone 2. Actually, I solely bought it to play the God of War franchise. And now, looking back at the catalog for both the Xbox One and the PS4, I can say that God of War 3 was the Playstation franchise's swan song, at least for me. It was the single player campaign lover's reprieve before the gaming world diffused into the cacophony of MMORPGs and online-only games.
I owned an Xbox One for a couple of months, before being disillusioned by the exorbitant prices for games, the lack of any good first-party titles, the poor graphical prowess and the back-pedaling over Kinect, which I paid a premium for. The Kinect had potential, which Microsoft squandered recklessly. I traded it in with Amazon and with the money I earned I set out to build a perfect gaming PC for myself.
I started with a micro ATX case, an AMD 6300FX processor, and a GTX 760. After random reboots, blue screens of death and poor in-game performance. I switched to Intel, a Core i5 4670 and an ATX Gigabyte Gaming 7 motherboard; I also upgraded to a GTX 780 Ti. The 780 Ti opened the doors to many a 1080p/60FPS gaming sessions. It is a versatile card, and if it wasn't so expensive, I would have preferred to use another 780 Ti in a SLI configuration.
The best parts of gaming on the PC are comprehensively documented on several parts of the internet. For me, it has to be Steam; a single place for managing my entire game catalog. I am neutral on the Steam sales, because after you go on the initial buying frenzy, you do end up in a situation where you already own most, if not all of the games offered in those sales. However, the said Steam sales are a steal when they happen. As of May 2015, GoG Galaxy; a DRM-free platform for content distribution, primarily games, and an alternative to Steam launched it's open beta.
I also appreciate the bump in display resolution on the PC side of gaming. With the currently available crop of graphics cards, you can comfortably play games at 2500 x 1440 with a steady 60fps, with the graphical fidelity turned all the way up.
The entire debate in the console realm over 1080p vs 900p is a non-factor in the PC side of things.
Dual Radeon R9 290xes
With two R9 290x cards in Crossfire, my baseline resolution has moved up to 2560 x 1440. When I get a 4K (or the next reasonable evolutionary step in resolution) display, I will be able to utilize the dual card configuration in a manner appreciable to the computing power they hold.
For now, I enjoy a staggering 3200 x 1800 resolution for most of the games out there including Grand Theft Auto V as of May 2015, with the antialiasing turned down. Although sitting 6 feet away from the TV screen and a non-20/20 vision don't really help me appreciate the full extent of the visual splendor, I am able to discern details which were never achievable on consoles. This would be a moot point however, if I continue to think that my current configuration is future-proof.
The successor to 290x will be announced this year. nVidia will also announce the next card to replace the GTX 980. This is a mere six months after I bought the 780Ti, which at the time, was already a year old. To keep up with the pace at which these units are introduced and phased out would be an exercise in futility. You are better served to set your expectations accordingly and figure out what level of fidelity and frame-rate you are comfortable with. Most importantly, always consider the ratio of price to performance. It is almost never wise to go with the flagships, mostly because of the ridiculous launch price; but also because a slightly underpowered unit will launch alongside it, which will be just as performant and sufficient for your needs.
The value of researching what suits your gaming tastes can never be undermined. That said, if you are a PC gamer, you already know that.
01 April, 2015
UPDATE September 11, 2015: In
El Capitan GM (Final candidate for release) you need BrcmBluetoothInjector.kext and a kext patch.
For Bluetooth Handoff support, in
+ Replace it with
In the Hackintosh realm, there are two prominent and extensively covered methods for installing OS X:
Chameleon At a very high level, both methods are created with the intent of installing OS X on PCs while using a combination of kext patches in case of Clover and/or kext injection in case of Chameleon.
Assuming that you have done your research on the most compatible hardware, you will still be hard-pressed to get everything working out of the box. With the constantly changing landscape of Hackintosh development, you will always need to stay on top of the different ways to get your components working.
This post focuses on a couple of new features introduced in OS X Yosemite called
Facetime calling. Handoff allows you to transfer the state of activity in certain applications from your iPhone or iPad to your Mac and vice versa. Continuity refers to the ability of forwarding phone calls to your Mac or Macbook. You can also make calls from your Mac/Macbook using your iPhone connection. This way, if your phone is in another room, you can still take the call or even make a call.
Needless to say, unless you are using a first-party, Apple-certified WiFi/Bluetooth card, you have to configure Clover to make your card appear first-party. This post focuses on the
Azurewave CE123H mini PCIe WiFi/Bluetooth combo card.
In spite of the fact that I document the steps for a specific card, the concept applies to all supported1 cards. There is an excellent thread located here that covers a complete list of cards that will support Handoff and Continuity.
Before you venture any further in the process of applying kext patches in Clover, it is very important to make sure that your network interfaces are configured correctly so that
en0 refers to the first built-in network interface. This is vital to get many OS X services such as Mac App Store, iTunes and Messages among others.
Past this, you need the following kexts in your
EFI Partition > CLOVER > kexts > 10.10:
You need these kexts to firstly, enable uploading of custom firmware, and present your card to OS X as a first-party card. Once you have these in place, you need to correct the locale in order to enable all WiFi frequencies.
To achieve that, open
Clover Configurator, mount your EFI partition and import your
Then, in the
Kernel and Kext Patches section add an entry:
For the US/FCC fix, apply the following to
41 83 FC FF 74 2C 48
66 C7 06 55 53 EB 2B
For the Handoff/Continuity, apply this patch to
48 85 C0 74 5C 0F B7 48
41 BE 0F 00 00 00 EB 59
config.plist file and then rebuild your kext cache using
Reboot, and then log out of your
iCloud account on your Hackintosh as well as your
iPad and log back in.
You should have Handoff and Continuity enabled.
My FreeNAS box is down. Currently investigating. Could be hardware failure. Lost about 2TB of data.
Fruitr got DDoSed pretty badly. It will be down till I rewrite it in Python and re-deploy.
22 February, 2015
UPDATE September 11, 2015: In
El Capitan GM (Final candidate for release) the method described in this post works perfectly fine to authenticate Messages.
UPDATE: This method is confirmed to work on
El Capitan Public Beta You are not required to contact Apple to get Messages to work. Generating a new Serial Number for your Hackintosh and following the steps detailed in the guide will suffice
I built myself a mini-ITX Hackintosh for design and coding, as well as a little audio production.
This particular combination of hardware components can be quite functional and productive once you get everything working. You may find this information on other sites.1 I researched the forums on the said sites and collated information that might serve as a reference for others, with a similar configuration or help someone make a decision.
I am currently running Yosemite 10.10.2 with UEFI Clover.
Messages is working along with Handoff, Continuity, Instant hotspot and the ability to connect to my 5Ghz WiFi network.
Hackintosh with a Focusrite Scarlett 2i2 2 In/2 Out USB Recording Audio Interface
I had to order the Azurewave CE123H card separately, because the included Intel WiFi/Bluetooth combo card does not work with OS X. This card is confirmed to support the Bluetooth 4.0 LE (Low Energy) standard that is used by Handoff and Airdrop features.
Using Clover, installing OS X Yosemite is relatively painless, if you do your research2.
Once you install Yosemite, you will notice that you cannot log into Messages using your iCloud account. Either that or you will encounter an activation error. Additionally, Bluetooth won't be functional, and you won't be able to see your 5GHz WiFi network. Some additional steps are required to get that functional.
I had the following kexts in my
EFI > Clover > kexts > 10.10 to get Bluetooth and 5Ghz working. Apparently, these kexts enable the uploading of custom firmware and fake a PCI ID for OS X, so that it thinks that you are using a first-party card.
In preparation, you must first ensure that your Ethernet card is recognized as
en0 in System Profiler. The true reason behind this is to follow the BSD convention. OS X services such as Mac App Store, iTunes Store and Messages as well as iCloud all require that en0 refer to the first, built-in network interface.
Secondly, you need valid
ROM values. These are invariably essential to getting Messages to work. MLB stands for Main Logic Board; and all Mac computers - laptops and desktops have a MLB, which is uniquely identified using a number. This MLB along with a valid ROM value is used for authentication by Messages. ROM here, refers to, or rather used to refer to the Mac's Firewire MAC address. You can use your network interface's MAC address, by going to
System Preferences > Network > [Interface: WiFi or Ethernet] > Advanced
Then, open Clover Configurator and mount your EFI partition. Import your
SMBIOS section, click the magic wand and generate a SMBIOS that is closest to the configuration of your hackintosh. For example, my hackintosh has a
Haswell Core i3, so I went with a
iMac13,2. Make sure that you "shake" the values for the
week of manufacture and the
unit number fields. This will generate a random serial number, which you should check against Apple's database here. The serial number must be invalid, which indicates that it is unique.
Past that, you must take care of the
Board Serial Number,
Serial Number and
Rt Variables section, paste the MAC address (without colons) that you obtained in step 2, into the
ROM field. In the
MLB field, enter the serial number you generated in step 4, and append 5 random hexadecimal letters, so your entire serial number is seventeen digits.
Run the command
uudigen in Terminal and paste that value in
SMBIOS > SmUUID
Board Serial Number should be the same as
With this, you should enter the appropriate kext patches in Clover's
Kext and Kernel Patches to enable the correct locale for WiFi and enable 5Ghz support. I will recommend that you peruse the excellent and comprehensive guide for finding the correct patch for your wireless card here
nvram -p in your Terminal and make a note of the values. These should remain persistent even after your restart. This essentially means that the
ROM values, which are used to authenticate Messages will persist ensuring that Messages will be functional across multiple reboots.
config.plist and reboot.
XBMC/Kodi, you are awesome, but good god your skins need some work.
02 December, 2014
I recently discovered a way to play voice memos in the background on my iPhone. Why they don't display this behavior by default is baffling to say the least.
There are several published hacks to do this, and most of them involve sharing the memo with yourself via Messages.
My method is somewhat similar to this one1 and involves the least amount of intrusion.
- Open Voice memos and play the memo.
- Lock the screen.
- Wake the phone using the power button.
- Slide up to go into the Camera app.
- Press the home button to return to home screen and you will notice that the memo is playing in the background.
If you have your own method that works for you, but involves more steps, you can add this one to your list. I tested this on iOS 8.1.1 (12B435)