Archive for category DIY

Homemade NAS Box Redux

In 2012 I took my old PowerMac G4, slapped in a SATA card, some hard drives, and turned it into a server for storing media and computer backups. Then in 2013 I upgraded my MacBookPro to OS X 10.9 and lost the ability to do Time Machine backups to AFP shares from OS X 10.5. What to do, what to do? Solution: turn the PowerMac into a true server by running Linux. The results? Totally awesome.

The Hardware:

Full details at

  • 2001 Qucksilver PowerMac G4
  • FirmTek SeriTek/1V4 SATA PCI-X controller
  • 2x 2TB Western Digital Caviar Green 3.5” hard drives (3Gb/s)
  • 1x 320GB Western Digital Scorpio 2.5” hard drive
  • 1x 120GB PATA hard drive (more on this later)

The OS:

I did a lot of research on what operating system to pick for the PowerMac. PPC was been officially dead in Apples eyes back in 2007 with the WWDC announcement of OSX moving to Intel. Coupled with the PS3 loosing “Other OS” boot capability in 2010 [link], many Linux distros dropped official PPC support years ago. The only officially support non-OS X operating system I could find for PPC was FreeBSD, which I had played with in the past when looking at building a FreeNAS box.

Ultimately I decided to settle on Ubuntu 14.04 Server Edition for my OS. Canonical officially dropped PPC support in Ubuntu back in 2007 with the release of 7.04 [link], but the community has been maintaining unofficial builds of every release. The binary repository for Ubuntu PPC is large and mostly up to date, which makes installing software much easier than compiling from source. Also, there is a Java runtime package available for Ubuntu PPC, which makes running some applications I use actually possible.

The OS Installation Saga:

So I picked my variant of Linux and burned the ISO to a DVD. The next few steps should had been pretty straightforward.

  1. Boot computer from DVD
  2. Install OS onto 320GB SATA hard drive
    • turn on SSH and SAMBA
  3. Reboot computer
  4. See computer sitting at login prompt

Only, there was an issue. After installing Ubuntu on the hard drive and rebooting yaboot couldn’t find the OS. I did a week worth of research and different versions of Ubuntu, FreeBSD, and other non-OSX operating systems, but none of them could boot from my SATA drive. Finally I discovered a solution to the problem: Install the OS on the master PATA drive. I don’t know if this was a limitation of yaboot or PPC’s OpenFirmware, but the only way I got Linux to boot was by making sure it was installed on the very first hard drive. Crisis averted, on to the next set of steps. This same rule applied to G5 PowerMacs and their SATA drives in testing. Linux had to be installed on the top drive.

Network Shares:

To get network sharing back I had to completely redo my hard drive formatting with EXT3/4 and setup Samba/Netatalk. At least with these packages I didn’t have to do any crazy GPEdit or PLIST editing to get network backups to work. NOTE: there is a bug in the PPC build of FDISK that causes it not to properly report the sector size of a hard drive. If you need to partition a hard drive use DDISK instead.

I installed Samba during the initial OS installation so all that was left was setting up the config file.

security = user
comment = Home Directories
browseable = no
read only = no
create mask = 0755
directory mask = 0755

comment = Archive Location
path = /shares/Data1
browsable = yes
guest ok = no
read only = no

comment = Media Location
path = /shares/Media
browsable = yes
guest ok = no
read only = no

path = /shares/Data1/TM_backup
browseable = yes
read only = no
guest ok = no
comment = System Backups

After that I made sure Samba was configured to run on startup and restarted the service

sudo update-rc.d samba defaults
sudo service samba restart

The package of Netatalk in the Ubuntu repositories wasn’t up to date, only being at v2.X. This meant that I had to build/install Netatalk from source to get all the latest features and bug fixes (especially for Time Machine backups). Overall the process was pretty easy. Netatalk had a wiki page detailing the exact steps needed to build the software.

sudo apt-get install avahi-daemon build-essential libssl-dev libgcrypt11-dev \
   libkrb5-dev libpam0g-dev libwrap0-dev libdb-dev libmysqlclient-dev libavahi-client-dev \
   libacl1-dev libldap2-dev libcrack2-dev systemtap-sdt-dev libdbus-1-dev libdbus-glib-1-dev \
   libglib2.0-dev tracker libtracker-sparql-0.16-dev libtracker-miner-0.16-dev

./configure \
--with-init-style=debian-sysv \
--with-cracklib \
--enable-krbV-uam \
--with-pam-confdir=/etc/pam.d \
--with-dbus-sysconf-dir=/etc/dbus-1/system.d \
sudo make install

The configuration file for Netatalk was just simple as the Samba one.

nano /usr/local/etc/afpd.conf


; Netatalk 3.x configuration file

; Global server settings

basedir regex = /home

path = /shares/Data1

path = /shares/Media

path = /shares/Data1/TM_backup
time machine = yes

All that was left was to start the service and configure it to run on startup.

sudo service avahi-daemon start
sudo service netatalk start
sudo update-rc.d avahi-daemon defaults
sudo update-rc.d netatalk defaults

With all of the network sharing setup it was time to move on re-installing the applications I used.

Media Streaming/Playback

Over the past 3 years the playback needs I had morphed and changed. I caved and signed up for cable TV server from Insight (now Time Warner) so I could keep up with F1, IndyCar, Grand-AM/Unites SportsCar, and other forms of racing. Instead of getting the cable company provided set-top box I chose to rent a cableCARD and purchase a TiVo instead. Way back in 2005 I purchased my mother a TiVo Series 2 to replace the VCR she had and had fun using its dual tuners. Since that time TiVo released their Series3/HD and Series4/Premiere boxes, both which supported CableCARD.That was a long, roundabout way of saying I started using my PS3 less for streaming playback and wanted to use the TiVo instead.


The first application I got installed on the server was Streambaby. This application allowed me to stream (not transfer) mp4 and mp2 videos to the Tivo with minimal effort. If the formatting was correct then Streambaby didn’t have to transcode the video. A developer recently started developing the application again and added new features like playing mp2/mp4 mkvs without transcoding and more. Setup was simple only requiring the Jave runtime engine and FFMPEG to be installed.

As I said earlier, there is a package of Java’s JRE for PPC Linux from Ubuntu which is why I chose that distribution. FFMPEG, however, required being compile from source. Originally I tried using the deb-multimedia repository for FFMPEG, but I found many package conflicts when trying to install other media packages, such as Handbrake.

Install FFMPEG

Installed dependencies:

sudo apt-get -y --force-yes install autoconf automake build-essential libass-dev \
   libfreetype6-dev libgpac-dev libtheora-dev libtool libvorbis-dev pkg-config texi2html zlib1g-dev
mkdir ~/ffmpeg_sources

Compiled libx264-dev

cd ~/ffmpeg_sources
tar xjvf last_x264.tar.bz2
cd x264-snapshot*
./configure --enable-static
sudo make install

Compiled fdk-aac

sudo apt-get install unzip
cd ~/ffmpeg_sources
wget -O
cd mstorsjo-fdk-aac*
autoreconf -fiv
./configure --disable-shared
sudo make install

Compiled lamemp3

sudo apt-get install nasm
cd ~/ffmpeg_sources
tar xzvf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure --prefix="$HOME/ffmpeg_build" --enable-nasm --disable-shared
sudo make install

Compiled FFMPEG

cd ~/ffmpeg_sources
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
./configure \
  --pkg-config-flags="--static" \
  --enable-gpl \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libtheora \
  --enable-libvorbis \
  --enable-libx264 \
sudo make install
Install Streambaby

Installed Java JRE

sudo apt-get install wget unzip openjdk-7-jre-headless

Downloaded Streambaby from

Moved app to a folder under /opt

sudo unzip streambaby*.zip -d /opt/
sudo mv /opt/streambaby* /opt/streambaby

Configured the Streambay config file

sudo nano /opt/streambaby/streambaby.ini


# ./streambaby --help for more configuration file options

dir.2=/shares/Media/TV/ Gear

Created a service daemon and register it

sudo nano /etc/init.d/streambaby

# Provides: streambaby
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# required-start:
# required-stop:



DESC="My daemon description"

case "$1" in
printf "%-50s" "Starting $NAME..."
PID=`java -Xmx256m -jar ./jbin/$DAEMON.jar $DAEMONOPTS > /var/log/%NAME.log 2>&1 & echo $!`
#echo "Saving PID" $PID " to " $PIDFILE
if [ -z $PID ]; then
printf "%s\n" "Fail"
echo $PID > $PIDFILE
printf "%s\n" "Ok"
printf "%-50s" "Checking $NAME..."
if [ -f $PIDFILE ]; then
if [ -z "`ps axf | grep ${PID} | grep -v grep`" ]; then
printf "%s\n" "Process dead but pidfile exists"
echo "Running"
printf "%s\n" "Service not running"
printf "%-50s" "Stopping $NAME"
if [ -f $PIDFILE ]; then
kill -HUP $PID
printf "%s\n" "Ok"
rm -f $PIDFILE
printf "%s\n" "pidfile not found"

$0 stop
$0 start

echo "Usage: $0 {status|start|stop|restart}"
exit 1


sudo chmod +x /etc/init.d/streambaby
sudo update-rc.d streambaby defaults

Transmission BitTorrent Client

Azureus was a good BitTorrent client for OS X a few years ago, but it got re-branded, added features that didn’t I need, dropped PPC support, and felt slow and bloated on old hardware. For the PPC Linux build I needed a client that was lightweight, but customizable. That basically left two options: rTorrent and Tranmission. I looked closely at both applications and test both for a few days and ultimately went with Transmission for the following reasons: web gui, supported by flexget as an output, easy to use. Don’t get me wrong, I got rTorrent running and doing everything I wanted with the highly customizable config file. I just didn’t enjoy using the cli interface.

Install Transmission
sudo apt-get install transmission-cli transmission-daemon

Reconfigure Transmissions settings

sudo service stop transmission-daemon
sudo adduser transmission-daemon sharing


sudo nano /etc/transmission-daemon/settings.json
    "alt-speed-down": 50,
    "alt-speed-enabled": false,
    "alt-speed-time-begin": 540,
    "alt-speed-time-day": 127,
    "alt-speed-time-enabled": false,
    "alt-speed-time-end": 1020,
    "alt-speed-up": 50,
    "bind-address-ipv4": "",
    "bind-address-ipv6": "::",
    "blocklist-enabled": false,
    "blocklist-url": "",
    "cache-size-mb": 4,
    "dht-enabled": true,
    "download-dir": "/shares/Media/Transmission",
    "download-limit": 100,
    "download-limit-enabled": 0,
    "download-queue-enabled": true,
    "download-queue-size": 5,
    "encryption": 1,
    "idle-seeding-limit": 30,
    "idle-seeding-limit-enabled": false,
    "incomplete-dir": "/home/debian-transmission/Downloads",
    "incomplete-dir-enabled": false,
    "lpd-enabled": false,
    "max-peers-global": 200,
    "message-level": 2,
    "peer-congestion-algorithm": "",
    "peer-id-ttl-hours": 6,
    "peer-limit-global": 200,
    "peer-limit-per-torrent": 50,
    "peer-port": 51413,
    "peer-port-random-high": 65535,
    "peer-port-random-low": 49152,
    "peer-port-random-on-start": false,
    "peer-socket-tos": "default",
    "pex-enabled": true,
    "port-forwarding-enabled": false,
    "preallocation": 1,
    "prefetch-enabled": 1,
    "queue-stalled-enabled": true,
    "queue-stalled-minutes": 30,
    "ratio-limit": 2,
    "ratio-limit-enabled": true,
    "rename-partial-files": true,
    "rpc-authentication-required": false, #Yes, I know I shouldn't do this.
    "rpc-bind-address": "",
    "rpc-enabled": true,
    "rpc-password": "{c0d7e4133acba8e3a02d2428d044ef2277138ae9YXpmBleN",
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "transmission",
    "rpc-whitelist": "",
    "rpc-whitelist-enabled": false,
    "scrape-paused-torrents-enabled": true,
    "script-torrent-done-enabled": false,
    "script-torrent-done-filename": "",
    "seed-queue-enabled": false,
    "seed-queue-size": 10,
    "speed-limit-down": 768,
    "speed-limit-down-enabled": true,
    "speed-limit-up": 256,
    "speed-limit-up-enabled": true,
    "start-added-torrents": true,
    "trash-original-torrent-files": false,
    "umask": 18,
    "upload-limit": 100,
    "upload-limit-enabled": 0,
    "upload-slots-per-torrent": 14,
    "utp-enabled": true

Restart Transmission

sudo service transmission-daemon start
sudo update-rc.d transmission-daemon defaults

Install FlexGet

I figured out a better setup for FlexGet and properly set it up as a service on the system

sudo apt-get install python-pip
sudo pip install flexget
sudo pip install transmissionrpc
sudo adduser --system --shell /bin/false --no-create-home --group flexget
sudo adduser flexget sharing
sudo adduser flexget syslog
sudo mkdir /usr/loca/etc/flexget
sudo chown flexget:flexget /usr/local/etc/flexget
sudo pip install --upgrade six>=1.70 #only required for Ubuntu 14.04

Create a config file. Right now I am using FlexGet to download podcasts.

sudo nano /usr/local/etc/flexget/config.yml
      - rss:
    accept_all: yes
    download: /shares/Media/Streams/TekThing
      - rss:
      - Before You Buy
      - Know How
    download: /shares/Media/Streams/{{series_name}}
      host: localhost
      port: 9091
      transmission_seed_limits: yes

Create the FlexGet Daemon.

sudo nano /etc/default/flexget

# Configuration for /etc/init.d/flexget

# User to run flexget as.
# Daemon will not start if left empty.

# Full path to the flexget config.yml file to use.
# Defaults to FGUSER $HOME/.flexget/config.yml

# Path to the directory where flexget should log. Do not add trailing slash.
# Defaults to the FGUSER $HOME/.flexget directory

# Log verbosity
# Available options : none critical error warning info verbose debug trace
# Defaults to info

And create the FlexGet daemon script

sudo nano /etc/init.d/flexget


# Provides:          flexget
# Required-Start:    $network $remote_fs
# Required-Stop:     $network $remote_fs
# Should-Start:      
# Should-Stop:       
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Flexget
# Description:       FlexGet is a multipurpose automation tool 
#                    for content like torrents, nzbs, podcasts,
#                    comics, series, movies, etc.

# Author: Antoine Joubert, 19/01/2014



set -e

. /lib/lsb/init-functions


# Exit if flexget not installed
if [ ! -x "$DAEMON" ]; then
        log_action_msg "$DESC: Could not find flexget executable. Exiting."
        exit 2

# Read configuration variables
if [ -r /etc/default/$NAME ]; then
        . /etc/default/$NAME
        log_action_msg "$DESC: /etc/default/$NAME not found. Exiting."
        exit 2

# Exit if FGUSER has not been set in /etc/default/flexget
if [ -z $FGUSER ]; then
        log_action_msg "$DESC: FGUSER not set in /etc/default/$NAME. Exiting."
        exit 2

# Function to verify if flexget is already running
run_check() {
        if [ -e $PIDFILE ]; then
               status_of_proc -p $PIDFILE $DAEMON $NAME > /dev/null && RETVAL=0 || RETVAL="$?"

end_log() {
        if [ $RETVAL -eq 0 ]; then
                log_end_msg 0
                return 0
                log_end_msg 1
                exit 1

# Function to define config file, log file and log level
conf_check() {
        if [ -z $CONFIG ]; then
                OPTIONS="-c $CONFIG"
        if [ -z $LOG ]; then
                OPTIONS="$OPTIONS -l $LOG/flexget.log"
                if [ ! -d $LOG ]; then 
                        mkdir -p -m 750 $LOG
                        chown $FGUSER $LOG

        if [ -z $LEVEL ]; then
                OPTIONS="$OPTIONS -L $LEVEL"

start_flexget() {
        if [ $RETVAL = 0 ]; then
                log_action_msg "$DESC: Already running with PID $(cat $PIDFILE). Aborting."
                exit 2
                log_daemon_msg "$DESC: Starting the daemon."
                start-stop-daemon --start --background --quiet --pidfile $PIDFILE --make-pidfile --chuid $FGUSER \
                --user $FGUSER --exec $DAEMON -- $OPTIONS daemon start

stop_flexget() {
        if [ $RETVAL = 0 ]; then
                log_daemon_msg "$DESC: Stopping the daemon."
                start-stop-daemon --stop --quiet --chuid "$FGUSER" --pidfile "$PIDFILE" --retry 30
                [ -e "$PIDFILE" ] && rm -f "$PIDFILE"
                log_action_msg "$DESC: Not currently running. Aborting."
                exit 2

status_flexget() {
        if [ $RETVAL = 0 ]; then
                log_action_msg "$DESC: Currently running with PID $(cat $PIDFILE)."
                log_action_msg "$DESC: Not currently running."
        exit $RETVAL

case "$1" in
                stop_flexget && sleep 2 && start_flexget
                echo "Usage: $0 {start|stop|restart|status}"

exit 0 

And make the script executable

sudo chmod +x /etc/init.d/flexget
sudo update-rc.d flexget defaults


And that is mostly it. All the functionality I had under OS X is recreated using Ubuntu. I’ve continued to add functionality to the server, which I hope to expand upon in other posts.

Until then, have fun.

, ,

No Comments

Homemade NAS Box Part 3

Bittorrent Server

DISCLAIMER: Do not use file sharing to download copyrighted material.

Not much to say here. I installed μTorrent so that I would have a way to download media off bittorrent. Transmission was also a great choice for bittorrent client.

UPnP Server

The coolest thing I’ve did with this project was setup a UPnP media server. The concept was simple: music, pictures, and videos are stored on the server and shared over the UPnP network protocol. Devices, such as a PS3, can see the content on the server and play it without having to download and save locally. There are several commercial products available that allows you create a UPnP server including MediaLink, EyeConnect, and Twonky. Being the person who liked to take the hard route sometimes I decided to skip all of those and go straight to MediaTomb, the open source alternative.

  1. Install the XCode Development tools from Apple
  2. Download and install MacPorts
  3. Open a Terminal window and run all of the following commands as either “su” or “sudo”
  4. port selfupdate
  5. port install mediatomb
  6. Wait for MediaTomb and all of its dependencies to finish compiling
  7. Once compiling is complete you can start MediaTomb by running the command “mediatomb” (no su/sudo required)
  8. The output from the command will give you the web address to MediaTomb’s web interface. Using Safari or your browser of choice you can select what content you share with your media devices

For my setup I wanted to stream content to my PS3. To do that there was a change I had to make to MediaTomb’s config file that was located in ~/.mediatomb. All I had to do was uncomment the line that said <protocolInfo extend="yes"/>. I also decided to disable the ability of my PS3 to see every folder on the server. That required changing <pc-directory upnp-hide="no"/> to <pc-directory upnp-hide="yes"/>.

With MediaTomb I could also enable the use of on-the-fly media transcoding. In the event I had a file the PS3 could not play, a rule could be setup in the config file that would automatically convert the media to a more compatible format. Using this feature required a lot of testing to work out settings the PowerMac could handle. Also, because the media files are being transcoded in real time I lost the ability to pause, fast forward, and rewind on the PS3. In the end I decided to take a different approach and setup folder actions to convert only files I wanted.

MediaTomb Transcoding

I mentioned earlier that I had developed an alternative to MediaTomb’s built in transcoding feature for media files that didn’t play on the PS3. I stole the idea from Vuze, another bittorent client, which added its own UPnP server. In the event Vuze downloaded a file that wasn’t compatible with the PS3 it would re-encode the file completely and then share the new version instead of the non-compatible version.

I was able to accomplish almost the same functionality using FFMPEG, folder actions, and MediaTomb’s built-in directory scan feature. If I had a file that did not work then I moved it to a folder called “convert”. Attached to that folder was an Applescript action that would tell FFMPEG to covert the file to a new format and save it in another folder called “compatible”. I then configured MediaTomb to scan the “compatible” folder every hour for new files and make them available to the PS3. For everything to work I had to rebuild FFMPEG to include codecs for aac, mp3, x264, and xvid. Below is the commands for MacPortsid

port deactivate ffmpeg
port install -f ffmpeg +nonfree

Below are the applescripts I wrote for the folder actions. When a file dropped into a folder the action would initiate the script and start processing the file through FFMPEG. Based on testing I had done some video files only needed the audio re-encoded for the PS3. Others required a complete re-encode. I’ll admit the PowerMac didn’t have the power to re-encode at realtime speeds, but I normally let it take care of files during the night or while I was at work.

Re-encoding only audio of a video file example:

on adding folder items to this_folder after receiving these_items
repeat with i in these_items
set {name:Nm} to (info for i)
set Nm to quoted form of Nm as string
set vFolder to quoted form of POSIX path of this_folder as string
set vSource to quoted form of POSIX path of i as string
do shell script "/opt/local/bin/ffmpeg -y -i " & vSource & " -vn -f mp3 -ab 192k -ac 2 -ar 44100 " & vFolder & "converted/" & Nm & ".mp3"
on error
display dialog "There was an error when re-encoding " & Nm
end try
end repeat
end adding folder items to

Re-encoding Audio and video example:

on adding folder items to this_folder after receiving these_items
repeat with i in these_items
set {name:Nm} to (info for i)
set Nm to quoted form of Nm as string
set vFolder to quoted form of POSIX path of this_folder as string
set vSource to quoted form of POSIX path of i as string
do shell script "/opt/local/bin/ffmpeg -y -i " & vSource & " -vcodec libxvid -vb 1000k -acodec libmp3lame -ar 44100 -ab 128k -ac 2 " & vFolder & "converted/" & Nm & ".avi"
on error
display dialog "There was an error when re-encoding " & Nm
end try
end repeat
end adding folder items to

Starting Meidatomb during startup:

  1. Created a plain text file with the command /opt/local/bin/mediatomb -d
  2. Save the file as mediatomb.command
  3. Open a terminal window
  4. Run the command chmod +x _folder_location_/mediatomb.command
  5. Open System Preferences and go to Accounts
  6. Select the account that auto logs in and select Login Items
  7. Add mediatomb.command

With enough time and patience I could create a start lauch daemon to take care of starting MediaTomb up as a service, but I took the lazy man’s approach.

Next time: Other odds and things

, , , , , , , , ,

No Comments

Homemade NAS Box Part 2

it may have took more than 6 months but I am finally going to finish documenting my build of the homemade NAS Box. The project so far has turned out well. Right now I have it providing four main functions: Time Machine and Windows 7 backup, Bittorrent server, UPnP media server, and proxy server. In future posts I will provide more details.

OS Configuration

I decided to keep the partition layout in OS X simple. The OS would live on the 320GB hard drive. The 2TB drives would not have any special RAID configuration. Just one partition on each drive. Ideally I would have used 3x 2TB hard drives and configured them into a hardware RAID 5 configuration. That would have gave me 4TB of total storage with redundancy in the event one of the hard drives failed. Sadly the FirmTek SATA controller didn’t support any kind of hardware RAID and OS X didn’t support software RAID 5.

Backup Server

Creating a backup server was the easiest part to setup. On the server all I had to do was open up the Sharing System Preferences and enable AFP/SMB file sharing. Now the drives were available to other systems in my network. To get my Mac and Windows systems to use the network storage for backup required configuration on their end.

Open up a terminal window and enter the following command.
defaults write TMShowUnsupportedNetworkVolumes 1
Using network shares other than an Apple Time Capsule is completely unsupported by Apple. Users previously reported issues when a drive filled up, which caused their entire Time Machine backup to become corrupt. I’m uncertain if the the issues were ever resolved in 10.6 but to test I followed the advice of some and added a disk quota for the backup’s sparse bundle. Right now I’ve yet to hit the limit so I don’t know what to expect when I do.

Windows 7:
Windows Vista/7 came with a built in backup utility that allowed for the use of network shares as a storage location. That is great if it wasn’t for the fact Vista/7 also broke authentication when connecting to Windows shares hosted on OS X 10.5. The problem was remedied by making an edit to the system with “gpedit.msc”. Information was found at the following link: With the authentication issues sorted out it was possible to configure Windows 7 to perform a full backup of the system drive on a regular basis.

Next Post: Media Sharing

, , , ,

No Comments

Homemade NAS Box

So back in 2008 I started on a project to build a media/storage server. The whole thing was for a senior capstone project with lots of research, hours of configuring/testing, and finally presenting. Using Windows Home Server and FreeNAS I showed the pros and cons of each. Unfortunately I lived on campus so setting up a real server was frowned upon. Instead, everything was simulated using Windows Virtual Server running on my now gaming PC.

This year I thought it was time to finally build a physical media server and move all of my music, videos, and old documents off my PCs. The original plan was to build a server using a mini-ITX motherboard with 4 SATA ports, and 3x 2 terabyte hard drives in a RAID 5 configuration, stuffed inside the smallest case possible. The system, in theory, would sit behind my TV and share everything out using FreeNAS.

Unfortunately, those plans have not worked out so now I’m falling back on an alternative. Why not take an old computer I already have and turn it into the storage I want?
Read the rest of this entry »

, , , , , , , , ,


Controlling a Cinema Display from XP

With the DVI to ADC adapter a success I’ve run into a new issue with the Apple monitor I salvaged. There are no physical controls for the brightness and I can’t turn the monitor off. The power button on the ACD is designed to control the monitor as well as the Mac it’s connected to. Pin 13 on the ADC spec is listed as “soft power” so I assume that is where the functionality comes from. While there is a brightness button on the front of the display, its function is to open of the display preferences in OS X so you can adjust the settings there.

All of that is great if you are using a Mac with an ADC video card or even an ADC adapter (the brightness controls are controlled through the USB connection), but there is no way to control the monitor from a Windows PC natively. Luckily there is the Internet and the great world of open source software. A few years ago a guy by the name of Laurent Morichetti wrote an application called WinACD. The function of the program was simple; give Windows XP users the same control over their ACD monitors as Mac users have.

The installation process is simple.

  1. Download WinACD from
  2. With the monitor’s USB cable disconnected, run the WinACD installer.
  3. If any popups appear saying the drivers are not signed click “Continue Anyway”.
  4. Once the installation is finished plug in the USB cable from the monitor.

Controlling the monitor settings is as simple on XP as they are on a Mac now. When looking at the advanced display settings a new tab is available. Under it there are controls for the brightness and monitor buttons. There is also an option to control the monitor’s brightness using shortcut keys.

There are a few issues with WinACD. There has been no development on the program since 2006 so it does not support any of the new LED Cinema Displays. WinACD doesn’t work on any 64-bit version of Windows. Also, as you can see my screenshots I cannot change any of the settings for the monitor buttons. That is probably just specific to monitor I am using. If you can over look those issues then WinACD is a great application for anybody using an Apple Cinema Display.

, , , , , , ,

1 Comment

DIY ADC Adapter

It’s been a while since I added a blog entry, but this is worth it. This time I am building a DVI to ADC adapter so I can connect an old Apple Cinema Display to a PC.

The Backstory:
The PR department at the college I work for was going through some old stuff. They came across some Mac equipment they no longer wanted and asked my office, the Help Desk, to dispose of it properly. What came back were some Apple video cables and one 20″ Apple Cinema Display. It wasn’t the aluminum version, but the older white one that looked like an easel. Of course, this display couldn’t be connected to any regular computer because it used an ADC connector. Apple specially engineered the ADC connector so that power, video, and USB were carried along a single cable. While this was great for reducing the amount of cabling you had, it also meant you had to have either a PowerMac with a compatible video card or a DVI to ADC adapter. That originally cost an $130. Oh, don’t forget your computer had to have a DVI.

The Idea:
If you fast forward to today you can buy a DVI to ADC adapter for $75 from That would be the quick solution for connecting the monitor to a computer, but I have an idea: why not build my own? The ADC standard is basically the same as DVI with extra wires for power and USB ports. The pinout on the connectors between DVI and ADC are a little different, but shouldn’t be too hard to over come.

Read the rest of this entry »

, , , , , , , , , ,