This page will serve as a placeholder for user developed custom software packages for the QNAP Turbostation family. Feel free to add your own solutions: but make the effort to validate them first!

GPL Firmware Downloads

QNAP currently provide GPL packages for the systems indicated below. Old versions do not seem to be listed. Note: Internet Explorer has problems downloading .tar.gz files (you will need to rename the downloaded file to replace the lost 'gz' suffix); ideally use Firefox, Opera or similar.

System Firmware Links Comments
TS-101 1.2.1 Page or File Same as TS201?
TS-201 1.0.0 Page or File Same as TS101?
TS-109 1.1.0 Page or File 276 Mb
TS-209 1.1.0 Page or File 276 Mb
TS-401T 1.1.0 Page or File
TS-411U 1.0.0 Page or File

The above-mentioned files are by now old firmware versions. Newest versions can be found here:

Missing Files

Unfortunately QNAP have been a bit selective about what to include in their GPL. Most things are there but the following appear to be absent:

  • qraid1 kernel module and associated daemon
  • /dev/pic device driver and associated daemon
  • MTD physmap partitioning (easily reverse engineered from console boot output)
  • U-Boot source (although this has been provided on request).

At this time it is not clear if this is deliberate or just a case of poor organisation. We can only hope that their customer support people will eventually respond.


The firmware for the TS-101 (and its cousin, the TS-201) is based on uClibc ( and BusyBox ( There are pre-built PowerPC rootfs available for download from the uClibc site that contains a number of ready-to-run utilities not included in the TS-101 firmware; including gcc and dropbear ssh.

However if you wish to roll your own and want to make sure you are using matching versions of the kernel headers and gcc, instructions for creating your own cross-toolchain are provided below.

Creating a Cross Compiler

A cross compiler is generally necessary to produce code to run on the PowerPC603 core. Linux users can generally follow the instructions below. Windows users can install Cygwin or CoLinuxwhich provides simple Linux commands on a Windows platform, however consider installing a Linux distribution (for example Ubuntu) within VMWare to setup the cross compiler there instead of using cygwin or CoLinux, less problems are expected when both the host and target are Linux.

Windows installation of Cygwin

Windows users can download Cygwin and execute the Setup.exe file. This brings up a Windows programme which requires further network access to install the necessary components.

Generally it is safer and quicker to install from Internet, the default option. Choose a suitable installation directory (e.g. c:\cygwin), and package directory (where the downloaded packages are stored). After choosing your connection method, you can select your favorite download site.

Default package view of Cygwin

Expanded package view of Cygwin

It is necessary to install the packages listed below. The best way to find them is to click the 'View' button until it displays 'All' or 'Full'. You can also drag the edge of the dialog box to display more information.

To install the package, select the corresponding 'Skip' item, it should toggle to the default version. Other dependancy packages will also be auto-selected. Multiple clicks will toggle the versions or return the package to 'skip'.

  • automake
  • bison
  • flex
  • gcc
  • gettext-devel
  • libncurses-devel
  • make
  • patchutils
  • python
  • subversion
  • wget

Once fully installed, you can start cygwin from the c:\cygwin\cygwin.bat file. You can specify your username and start directory by creating a windows environment variable called HOME, and setting it to c:\cygwin\home\<username>. This can be done entering Control Panel-> System -> Advanced -> Environment Variables, and selecting 'New'.

You should also check your $PATH environment variable doesn't have any weird and wonderful entries, especially directories with spaces! Since Cygwin generally parses your Windows PATH variable it is useful to 'overwrite' it. This can be done in the ${HOME}/.bash_rc file. After the #Set PATH..... #fi comments you can add a line like...


Cygwin has a 'rxvt' terminal that runs in native Windows (i.e. no X-server is required) which is more convenient than using the 'cmd.exe' based shell. See for details on how to setup this.

Cygwin case sensitivity

There are issues with cygwin not being case sensitive; and for shared uclibc support it is necessary :( .This patch aims to correct this. Place it in the buildroot\toolchain\uClibc directory. Note you need version 2 of the file.

Windows installation of CoLinux

Use the instructions here or here (recommended) for installing CoLinux. Make sure you also follow the instructions for configuring network access - it is needed by buildroot!. Once installed and working, follow the instructions for Linux users below. Debian seems to be a safe option for installing.

Linux (and CoLinux) Users

Linux (and CoLinux) users should make sure they have the packages identified in the Cygwin installation list (above). If not they need to be installed. E.g. under debian use apt-get update followed by apt-get install package where package can be wget etc.

Download Buildroot Snapshot

Download the latest Buildroot snapshot from here and untar it to wherever you wish to build your cross toolchain.

tar -xvjf buildroot-snapshot.tar.bz2
  • Cygwin users: Use the cygwin-tar!!! Although packages like Winzip, Winrar and 7Zip may be able to unpack the tarball; they do not correctly deal with symbolic links, and this could generate later errors!

Alternatively you can use subversion to do this for you...

svn co svn://
  • Note this will install into your current directory.

Run make menuconfig

Cd into the buildroot directory and run 'make menuconfig' to choose what to build.

  • Target Architecture - choose powerpc
  • Build Options - defaults are fine
  • Toolchain options - select the 2.6.12 kernel headers and gcc 3.4.3 [Option : 3.4.6 also works]
  • Package Selection - uncheck Busybox
  • Target options - defaults
  • Board Support - defaults

Then exit and when prompted save your configuration.

Run make

Then just run 'make' to build the toolchain. You will be prompted for some answers to questions - select the default (i.e. press enter). If you are doing the compilation under Cygwin you may have a bit of a wait (1 to 7 hours) - it depends upon configuration, antivirus activity etc. However under native Linux it doesn't take that long.

There may be a couple of errors. Firstly - in compiling bin-utils link.h is not found. For some reason it is not correctly linked in during compilation of readelf.c (this might change in the future). As yet we have not found the cause; but you can safely copy the link.h file from




The second error appears to be related to problems compiling, and moving it to libgcc_s_nof_so.1. However by this point your cross tools should have been compiled.

The cross tools are created in the directory buildroot/build_powerpc/staging_dir/bin and are all prefixed power-pc-linux- or power-pc-linux-uclibc. The option for the uclibc is in the BR2_GNU_TARGET_SUFFIX section of the file; or through 'target' options of menuconfig

Under Cygwin you may receive an error like "/bin/sh: line 1: Files/PC: No such file or directory". This results from the PATH environment variable containing blanks, most likely entries that refer to a subdirectory of C:\Program Files. The solution is to set the PATH to contain only the Cygwin directories, not the Windows ones (which aren't needed for the build anyway). Use the command "export PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin" (or similar, check with your Cygwin installation).

Build more stuff

Now either just use the cross tools directly for your own projects or go back and configure in a few packages to build from the 'Package Selection' list.

C++ Support

It should be possible to enable C++ support for the powerpc options; however the obvious trick of enabling C++ for build options does not seem to work :( After digging a little, it appears necessary to set BR2_PACKAGE_GCC_TARGET=y which can be done by entering the menuconfig, selecting packages, and selecting 'Native Toolchain in Filesystem'. This is the same as adding the line above to the file.

Running make generates another error about cctype.h and cannot convert `const __ctype_touplow_t*' to `const int*'. The fix can be found in the patch file associated with Download the patch and save it to buildroot\toolchain\gcc\3.4.6. Note you will need to change the filename to 3.4.6; and also change the internal filenames from



  • NOTE: This patch file currently fails automatic installation (i.e. do manual changes); any guru's out there willing to fix it?

Alternatively download the updated patch file from OpenTurbostation/Files

Run make; and go for a cup of tea, do some shopping or surfing... After 1-2 hours (system dependant) you will find powerpc-linux-c++ and powerpc-linux-g++ have appeared in staging_dir/bin; and an error about ln trying to link .exe files to themselves... But it works!!!!

Note use the C++ / G++ programmes when attempting to compile C++; and not the gcc extension.

Some further information on using Buildroot can be found here

Buildroot, packages and Cygwin Version Quirks

Buildroot and cygwin have many quirks - and some of the known issues are detailed below...

Main Build

  • Buildroot [05/01/07], uclibc 0.2.98, binutils, kernel 2.6.12, gcc 3.4.x : WORKS (with patches above)
  • Buildroot [05/01/07], uclibc 0.2.98, binutils, kernel 2.6.12, gcc 4.x.x : Errors about cc-dummy not existing.


  • Buildroot [05/01/07], Gettext Package needs this patch

Working Cygwin / Buildroot Configs Various Buildroot .config files have been uploaded to the Group files section. These can be copied to /buildroot/.config and used to generate a working buildroot system. Before copying make sure you clean any previous installation with

make clean
make distclean
make dirclean

Assuming the patches above work, you will end up (upto 7 hours later) with a directory structure like...

/buildroot/build_powerpc/<lots of packages>
/buildroot/build_powerpc/root/<new PowerPC compiled root filesystem>
/buildroot/build_powerpc/staging_dir/bin/<new cross compiler tools>
/buildroot/build_powerpc/staging_dir/include/<new cross compiler include files>
/buildroot/build_powerpc/staging_dir/lib/<new cross compiler library files>

Using your Qnap as a Compiler

It is possible to download the precompiled uclibc sources which are matched to powerpc, uclibc0.9.27 (the same as used in the Qnap). Following the installation instructions wont work easily since there is no loop mount point on the Qnap :( However it is possible to mount the .ext2 file on another linux system and copy the files out into a tarball; and copy this into a Qnap share directory (e.g. Qweb).

Update: Loopback devices are supported by the kernel, at least in 2.0.1 Build 0302T, all you need to do is

mknod -m 600 /dev/loop0 b 7 0
mount -o loop <ext2 image> <mount point>
mount -t proc none <mount point>/proc
chroot <mount point> /bin/bash

Installing new uclibc environment

  1. Download the tarball for TS-101/201 from here
  2. Copy the tarball to a Qnap share directory (e.g. Qweb)
  3. Telnet in as administrator
  4. Unpack the tarball tar -xvjf ppc.rootfs.tar.bz2
  5. Mount the new directory mount -t proc none loopmount/proc
  6. Now log into the new filesystem chroot loopmount /bin/bash

You should now have a fully functional build environment which also includes C/C++, awk etc. This can be used to build packages, with the correct shared library support. Once you have built your code, it can be used in the normal Qnap environment. However; currently the Qnap runs its OS in Ram drive; so any changes are lost at reboot! To return to the environment it is necessary relogin as administrator, and re-issue the mount and chroot commands.

Packages successfully compiled (and run!) so far

Perl v5.8.8 / libxml2-devel-2.6.26-1 / flex_2.5.31 / MySQL v4.0.21 / Httpd v2.2.4 / Apache 1.3.37 / PHP 5.2.1 / fdupes 1.40

As far as PHP5+Apache are concerned, I still have to find out why the Apache's LoadModule directive doesn't work (it says "File not found" but module is definitely there).

Update: problem not solved but workaround found. Just compiled Apache with PHP 5.2.2 as a static module. That's why I had to stick with Apache v1.3.37 (2.0 does accept dynamic modules loading only). Now everything works like a charm!

Linux Libraries you might be needing

For those of you having libraries issues (i.e. libraries not found or incorrect versions), please try to download this package. Then follow the procedure below (in the root dir of the buildroot environment):

  1. Extract the archive and put the lib directory in /usr/local, keeping the directories structure (you should end up with your files in /usr/local/lib)
  2. create a file in /etc (or change it, if existing already) named adding the line /usr/local/lib
  3. issue the command ldconfig to set up the correct links for the shared binaries and rebuild the cache

That should do the trick.

Any doubts feel free to let me know (

MLDonkey 2.x.x

New Update for TS-109/209 (ARM-equipped)

I got a pre-compiled ARM binary for MLDonkey 2.9.1 CVS to work on my TS-209 (FW 1.1.2 Build 0928T). You can find it here.

To get it to work you have to decompress the archive and create a symbolic link: "ln -s PATHMLDONKEY /root/.mldonkey" where PATHMLDONKEY is the path to the mldonkey folder. After that, you can run MLDonkey with: ./mlnet &

Update for TS-109/209 (ARM-equipped)

Please find here the ARM pre-compiled binaries for MLDonkey 2.9.0.

Just decompress the archive and run MLDonkey with:

./mlnet.byte &

Please consider that I don't have a TS-109/209 so I cannot guarantee that the binaries actually work. If you want, kindly let me know (

Other Mldonkey CVS compiled cores (monthly updated) for TS-109/209 (ARM-equipped)

Cores are compiled as ARM native-code(quick) on a Linux box. They have been tested with success. You can pick them at first post, I hardly suggest to read thread discussions and post poistive/negative feedback in there.

For those of you interested in running ML

For those of you interested in running MLDonkey, well, I must say it runs like a charm on the QNAP TS-201 (I don't know the TS-101, but it should). Writing a tutorial is pretty time-consuming, so in the meantime I just provide you with the binaries. Please note that the procedure needs you to telnet to the QNAP.

First of all chroot in the buildroot environment following the directions as described in the chapter Using your Qnap as a Compiler.

Download my file from here. Then:

  1. After you've chrooted in the buildroot environment (see above) you're actually into the "loopmount" directory
  2. Unpack the ZIP file wherever on the QNAP (es. /share/Public/)
  3. Unpack the TAR file while in the root directory of buildroot (where you are after the chroot command) with: tar -xf /share/Public/[filename] (filename should be "mldonkey-2.8.4.tar" if you used my binaries)

Note: do unpack the .tar archive telnetting to the QNAP and issuing a "tar" command! Windows does not handle UNIX files correctly!!!

Doing that you'll be merging the content of two dirs:

  1. usr/local/lib
  2. usr/src/mldonkey-2.8.7

Now issue:

  1. cd /usr/src/mldonkey-2.8.7
  2. rm -f users.ini
  3. ./mlnet &
  4. press return to get back to the prompt.

To administer it:

  1. HTTP connect to QNAP port 4080, user/pass = admin/[blank] or
  2. Telnet to port 4000, user/pass = admin/[blank] (please note that Windows telnet doesn't work. Use PuTTy with the Terminal option set to "Implicit CR in every LF" and the Connection --> Telnet option "Return key sends telnet New Line instead of ^M" unchecked)
  3. change the admin password: useradd admin [new password]
  4. go leeching something and...
  5., if you want, close the shell (exit), shut the PC down and let the QNAP download everything for you... 8-P

If you want a great user interface try Sancho.

DNS problems (cannot resolve names): if your MLDonkey complains about the QNAP not being able to resolve the servers names, do that:

  1. find out your connection's default gateway (open a Windows DOS shell and type "ipconfig")
  2. create a text file named "resolv.conf" in /etc
  3. enter the string "nameserver [IP of your default gateway]" (w/out quotes, e.g. "nameserver")
  4. save
  5. kill the mlnet process and refire it

That should do the trick.

If someone else is willing to provide me with some additional reliable web space please kindly let me know (

Perl v5.8.8

Please find the Perl v5.8.8 PPC Linux compiled binaries here.

Unrar 3.70 beta 4

Please find the UnRAR 3.70 beta 4 PPC Linux compiled binaries here (rename it as "unrar").

Tar v1.16.1 (latest build)

Please find the Tar v1.16.1 PPC Linux compiled binaries here.

Lynx v2.8.6

Lynx, the abandonware WWW-surfing experience. That's how it begun, on a VT100 terminal, many many years ago. Surf the Web with your QNAP TS-101/201!

Enjoy Lynx.

Usage is rather straightforward: lynx [URL]

Must be installed in the buildroot environment.

Mt-daapd v0.2.4

From the Firefly website: "Welcome to the Firefly Media Server project, previously known as "mt-daapd". The purpose of this project is built the best server software to serve digital music to the Roku Soundbridge and iTunes; to be able to serve the widest variety of digital music content over the widest range of devices. Current stable releases have been reported to run on Linux, all the BSDs, Solaris, AIX, and a variety of embedded devices such as the Linksys NSLU2, the Maxtor MSS, and the Buffalo Linkstation, to name but a few."

I would say on the QNAP TS-201 as well... 8-P


  1. Support for on-the-fly transcoding of OGG, FLAC, Apple Lossless, and WMA (beta versions)
  2. Web-based configuration
  3. Support for user-created smart playlists (beta versions)
  4. Integrates with iTunes library including reading playlists
  5. Supports serving streaming radio stations

Please find the PPC Linux pre-compiled binaries here.

  1. Don't forget to copy the mt-daapd.conf file from the contrib directory to the /etc directory and adapt it to suit your needs. File comments should be pretty self-explanatory
  2. Be sure you chrooted into the buildroot environment
  3. Fire the mt-daapd daemon entering the src dir and issuing "./mt-daapd &".
  4. HTTP connect to port 3689 (provided you kept the standard port value) and start customizing...

Any doubts feel free to let me know (

VIM improved telnet text editor

Hi, I see that some of you is having problems with the mighty-but-rough VI telnet text editor. You can find an improved VI version here (VIM) precompiled for the QNAP NAS:

  1. download and copy it wherever you like (e.g. to Public)
  2. download the library from here
  3. telnet in and copy the library to /usr/local/lib
  4. issue "ldconfig"
  5. run vim

Go check the docs out here: It doesn't need the buildroot environment and should be running fine on a vanilla QNAP. Please note that steps 3 and 4 have to be completed after every reboot though.

Any doubts feel free to let me know (

Fully populated buildroot environment (Apache, PHP, MySQL & misc)

Please find here the fully populated buildroot environment (huge, uncompressed size is around 450MB).

It contains:

  1. Apache v1.3.37 (with PHP 5 module statically compiled)
  2. MySQL 4.0.21
  3. PHP 5.2.2
  4. Perl v5.8.8
  5. MLDonkey v2.8.3 (v2.8.4 here)
  6. Misc stuff (go find it... 8-P )


  1. unzip the archive and extract the tar file (using Windows is ok)
  2. Telnet in and change dir to the location you saved the tar file to
  3. Untar the Apache_PHP_MySQL.tar file: tar -xvf Apache_PHP_MySQL.tar
  4. Mount the new directory: mount -t proc none loopmount/proc
  5. Log into the new filesystem: chroot loopmount /bin/bash
  6. Read below the instructions for each package you might want to use

Note: do unpack the .tar archive telnetting to the QNAP and issuing a "tar" command! Windows does not handle UNIX files correctly!!!

Start/stop Apache:

  1. /wwwroot/bin/apachectl start
  2. /wwwroot/bin/apachectl stop

Apache ServerRoot/DocsRoot:

  1. /wwwroot
  2. /wwwroot/htdocs

Please note that Apache HTTP port is set to 6667, since port 80 is already taken by the QNAP webserver. Change the "httpd.conf" file (in /usr/local/apache/conf) to customize the Apache daemon.

Start/stop MySQL:

  1. /usr/local/mysql/bin/mysqld_safe &
  2. killall mysqld

MySQL privileges setup:


  1. /usr/local/mysql/bin/mysql -u root -p (password = new_password)

And then at the mysql> prompt:

  1. grant all privileges on *.* to root@[your IP] identified by "new_password";<-- don't forget the semicolon!!
  2. exit

Please note that [your IP] is the IP you want to connect from.

PHP dir:


Chmode stuff:

Don't forget to "chmode" some dirs:

  1. chmode 777 /wwwroot/htdocs
  2. chmode 777 /tmp

Chances are that I'll be adding details as soon as people will need them, so keep checking this section. Any doubts feel free to let me know (

TCPDUMP v3.7.1

For those of you interested in network debugging using your beloved TS-101/201, here you find the PPC-compiled version of TCPDUMP.

TCPDUMP is a common computer network debugging tool that runs under the command line. It allows the user to intercept and display TCP/IP and other packets being transmitted or received over a network to which the computer is attached. It is also possible to use TCPDUMP for the specific purpose of intercepting and displaying the communications of another user or computer. A user with the necessary privileges on a system acting as a router or gateway through which unencrypted traffic such as TELNET or HTTP passes can use tcpdump to view login IDs, passwords, the URLs and content of websites being viewed, or any other unencrypted information.

Please find the binaries here.

TCPDUMP's typical output:

[root@QNAP-TS-201 tcpdump-3.7.1]# ./tcpdump----

tcpdump: listening on eth0----

16:36:37.246795 > . ack 2364924406 win 63949 (DF)----

16:36:37.252530 > P 1:29(28) ack 0 win 1460 (DF)----

16:36:37.455664 > . ack 29 win 63946 (DF) 16:36:37.455751 > P 29:206(177) ack 0 win 1460 (DF)----

16:36:37.657795 > . ack 206 win 63924 (DF) 16:36:37.657877 > P 206:378(172) ack 0 win 1460 (DF)----


Prerequisites used for binaries compilation:

  1. bison-2.3
  2. flex-2.5.33
  3. libpcap-0.7.1
Community content is available under CC-BY-SA unless otherwise noted.