Note: I recently purchased a Synology DiskStation DS411j & I’m putting up posts about things I figure out. This is part of that series.

The Synology DiskStation comes with a pretty darn complete collection of services & software that you can access & use through the DSM, the DiskStation Manager GUI. As I’ve been mentioning, though, you can also SSH into the DiskStation CLI (Command Line Interface) & run commands there. The DiskStation comes with a large assortment of commands already present, but you can install others as well, which is what I’ll focus on here.

You could download source code & compile it, of course, but I’m not going to cover that here (maybe in a later post). When I can, I like to take the easy route & install pre-compiled software packages. Fortunately, you can find, install, & manage a very large collection of pre-compiled software packages for your Synology DiskStation using a very cool command line tool called ipkg.

If you’re familiar with APT on Debian, you’ll find ipkg to be instantly understandable. For those of you not in the know, ipkg is a package manager: it’s software that connects to a repository, a large collection of software packages, & then makes it easy for you to download, install, update, & remote packages on your Linux box1.

So let’s install ipkg so we can then install other software on the Synology DiskStation!

Start by finding out which CPU your Synology DiskStation uses.

Now find out which ipkg bootstrap you should get at this page, located on the Synology wiki: Overview on modifying the Synology Server, bootstrap, ipkg etc2. In my case, the Marvell Kirkwood mv6281 wants this one: http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/syno-mvkw-bootstrap_1.2-7_arm.xsh.

Log in to the DiskStation as root.

cd to the temp directory on volume1:

> cd /volume1/@tmp

Use wget to download the bootstrap:

> wget http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/syno-mvkw-bootstrap_1.2-7_arm.xsh

Make the downloaded bootstrap executable:

> chmod 755 syno-mvkw-bootstrap_1.2-7_arm.xsh

Run the bootstrap:

> ./syno-mvkw-bootstrap_1.2-7_arm.xsh

Delete the bootstrap, as it’s no longer needed:

> rm syno-mvkw-bootstrap_1.2-7_arm.xsh

Reboot the DiskStation using the GUI or the CLI. With the GUI, click on the Main Menu (Synology’s term, not mine) & choose Restart. If you’re logged in to the CLI, enter:

> restart

When the DiskStation comes back up, log in as root & update the ipkg repository:

> ipkg update

This will give you results like this:

Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/Packages.gz
Inflating http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/Packages.gz
Updated list of available packages in /opt/lib/ipkg/lists/cross
Successfully terminated.

Now you can see the (very long) list of installable software:

> ipkg list

I saw a lot of things I’d like to install in that list, including these:

  • apache
  • asterisk
  • autossh
  • avahi
  • bash-completion
  • cdrtools
  • clamav
  • coreutils
  • cron
  • dhcp
  • diffutils
  • dokuwiki
  • fetchmail
  • ffmpeg
  • file
  • findutils
  • flac
  • gawk
  • gcc
  • git
  • gnupg
  • grep
  • gzip
  • hdparm
  • htop
  • id3lib
  • imagemagick
  • ipkg-web (A web frontend for ipkg)
  • jabberd
  • lame
  • less
  • links2
  • lsof
  • make
  • man
  • mc
  • mediawiki
  • memcached
  • mlocate
  • mp3info
  • mpd
  • ncmpc
  • net-tools
  • netatalk
  • netcat
  • nginx
  • nmap
  • ntfs-3g
  • rsync
  • ruby
  • rubygems
  • screen
  • sed
  • sqlite
  • sudo
  • tar
  • tcpdump
  • tesseract-ocr
  • textutils
  • tmux
  • tor
  • transmission
  • util-linux
  • vim
  • vlc

So here’s what it’s like to install vim3. Find the package in the list, and then enter the following:

> ipkg install vim

You’ll see output like this:

Installing vim (7.3-2) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/vim_7.3-2_arm.ipk
Installing ncurses (5.7-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/ncurses_5.7-1_arm.ipk
Configuring ncurses
update-alternatives: Linking //opt/bin/clear to /opt/bin/ncurses-clear
Configuring vim
Successfully terminated.

Let’s see where ipkg installed vim:

> which vim

It’s here:

/opt/bin/vim

It worked4!

After installing a few packages, you might want to find out what you’ve already installed:

> ipkg list_installed
file - 5.09-1 - Ubiquitous file identification utility.
ncurses - 5.7-1 - NCurses libraries
vim - 7.3-2 - Yet another version of the vi editor.
wget - 1.12-2 - A network utility to retrieve files from the Web
zlib - 1.2.5-1 - zlib is a library implementing the 'deflate' compression system.

To upgrade packages you’ve already installed, use this command:

> ipkg upgrade

Finally, if you ever want to get rid of an installed package:

> ipkg remove PACKAGE-NAME

There’s a lot more you can do with ipkg; to find out the full list, run:

> ipkg

ipkg will complain but then show you a list of all its options. Read over that list, as there’s a lot of good, useful stuff there.

Now, if you’ll excuse me, I’m off to install some software on my Synology DiskStation!

  1. Mac users, think of it as the App Store, but typically for everything on your computer, not just the stuff that Apple has approved. Windows users, think of it as the promised App Store that Microsoft says it’s going to include in Windows 8. 

  2. I’m giving you the page name because it looks to me like a really crappy page name that somebody typed out on a wiki after about four seconds of thought, meaning that someone else who has more of a clue is going to come along & change the name to something better later. If the link is ever broken, head over to the Synology wiki & search for “install ipkg”. That should find it. 

  3. vi comes on the Synology DiskStation by default (it comes on every UNIX by default!), but I vastly prefer vim, as do all right-thinking people everywhere. 

  4. Just typing vim works, as /opt/bin is in your path. You can see yours easily; type this:

    echo $PATH
    

    Which gives this:

    /opt/bin:/opt/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/syno/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin
    

    I didn’t monitor it, but I presume the ipkg bootstrap must have been what added it in /etc/profile, where you will find:

    PATH=/opt/bin:/opt/sbin:$PATH