NSLU2 Debian Installation Notes

As promised, what follows are my installation notes for debian on the NSLU2.

These are pretty much just a dump of everything I did to get things working.  Hopefully these may be of use to someone as a good reference guide!

Apologies that this isn’t structure too well, I just wanted to get it all down for posterity 😀

Having said that…. here comes the mega post – try not to fall asleep 🙄



  • Should be able to SSH into NSLU2 shortly after
    • Username: installer
    • Password: install
  • If connecting via putty in windows, change to the UTF8 conversion mode – console looks much better.
  • Follow through installation – takes about 4 hours!
  • Nearing end of installation it asks for server type.  I chose the following
    • Standard pre selected
    • Selected file server as additional

This is enough to install Debian, so then it’s onto all the optional and more useful parts!



apt-get install sudo
vi /etc/sudoers

Add to file below root entry:
user    ALL=(ALL) ALL

Save and Close.

exit from root user


Time Server

sudo apt-get install ntp


Additional Users

Create group

groupadd groupname

Add user
adduser username

Add user to group
usermod -g groupname useruser



Colour code


apt-get install vim
cp /usr/share/vim/vimrc ~user/.vimrc
vi ~user/.vimrc

Remove “ from
"syntax on


Test working by

vi /etc/init.d/zleds


Remove non required packages

Install RCC Conf

apt-get install rcconf

Remove Netatalk & NFS

Uncheck netatalk and 2 nfs services


Change SSH boot priority

Move SSH starter from rc2.d(?) to rcS.d just after networking


Change power button shutdown

Replace the line the /etc/inittab




telinit q

to reload the file


Melody Beep on startup/shutdown

<span style="font-size: small;">apt-get install beep</span>
vi /etc/init.d/beep


Enter/paste following in vi editor

#! /bin/sh
# Provides:          beep
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      S 0 1 6
# Short-Description: Beeps that indicate startup and shutdown

# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
MELODY_START="-f 65.4064 -l 100 -n -f 130.813 -l 100 -n -f 261.626 -l 100 -n -f 523.251  ←
              -l 100 -n -f 1046.50 -l 100 -n -f 2093.00 -l 100 -n -f 4186.01 -l 100"
MELODY_STOP="-f 523.251 -l 100 -D 100 -n -f 391.995 -l 100 -D 100 -n -f 329.628          ←
             -l 100 -D 100 -n -f 261.626 -l 200"
ARGS="-e /dev/input/event0"

# Exit if the package is not installed
[ -x "$BEEP" ] || exit 0

case "$1" in
# Do nothing
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" &gt;&amp;2
exit 3
esac<strong> </strong>

Save and close file



chmod 755 beep

cd /etc/rcS.d

ln -s /etc/init.d/beep S99beep

cd /etc/rc0.d

ln -s /etc/init.d/beep S89beep



apt-get install htop


Disable getty (unless you have a serial port)

In /etc/inittab
Comment out:

T0:23:respawn:/sbin/getty -L ttyS0 115200 linux

Then run
telinit q


Disable IP6

if  not using IPv6, you can prevent the module from being automatically loaded by adding the line

blacklist ipv6



Native Development

apt-get install<strong> </strong>build-essential


Drive sleep/spindown

apt-get install sg3-utils

mkdir ~user/tmp
cd ~user/tmp
wget <a href="http://spindown.googlecode.com/files/spindown-0.2.2.tar.gz">http://spindown.googlecode.com/files/spindown-0.2.2.tar.gz</a>
tar xvzf spindown-0.2.2.tar.gz
cd spindown-0.2.2
make install

Find ID of disk
ls -l /dev/disk/by-id/

Note ID of disk
lrwxrwxrwx 1 root root  9 May  5 21:07 usb-Seagate_External_Drive_SW063423123-0:0 -&gt; ../../sda

lrwxrwxrwx 1 root root 10 May  5 21:07 usb-Seagate_External_Drive_SW063423123-0:0-part1 -&gt; ../../sda1

lrwxrwxrwx 1 root root 10 May  5 21:07 usb-Seagate_External_Drive_SW063423123-0:0-part2 -&gt; ../../sda2

lrwxrwxrwx 1 root root 10 May  5 21:07 usb-Seagate_External_Drive_SW063423123-0:0-part3 -&gt; ../../sda3

lrwxrwxrwx 1 root root 10 May  5 21:07 usb-Seagate_External_Drive_SW063423123-0:0-part5 -&gt; ../../sda5

e.g. id is = usb-Seagate_External_Drive_SW063423123-0:0

Add noted disk id into the config file

nano /etc/spindown.conf

# Number of seconds between cycles.

cycle-time = 60

 # The time in seconds a disk has to be idle before it is spundown.
# Do not use a value that is to small (less than 3600) unless you
# know what you are doing.
idle-time = 3600

 # Turn this on if you want spindown to log messages using syslog.
# You will not want to turn this on if you are trying to spindown
# the disk with the root filesystem on.
syslog = 0

 [Disk 0]
id = usb-Seagate_External_Drive_SW063423123-0:0
spindown = 1
command = sg_start --stop


Disable Cron Hourly Parts (Prevent disk writes!)

Edit /etc/crontab

Comment out the hourly run-parts



sudo vi /usr/share/samba/smb.conf


edit following:

workgroup = <em>NETWORK</em>

Read only = no

Save and close
sudo smbpasswd -a user

sudo /etc/init.d/samba restart

Open browser on PC and connect to:
http://&lt;ip address&gt;:901/



Install telnet as temporary Backup just in case SSH goes awry!

sudo apt-get install telnetd

Create SSH Banner (optional)

sudo vi /etc/ssh/ssh_banner
sudo vi /etc/sshd/sshd_config

Banner /etc/ssh/ssh_banner<em><strong> </strong></em>

Restart SSH


/etc/init.d/sshd restart

Add in SSH Certificates
mkdir ~user/.ssh

add authorized_keys file
vi /etc/ssh/sshd_config


uncomment and change to no…

PasswordAuthentication no<em><strong> </strong></em>

Restart SSH


/etc/init.d/sshd restart

Test, then remove telnet if succesful!
<strong>sudo apt-get remove telnetd </strong>



Twonky requires old LIBC version – easiest way to get this running is to install an etch environment, as follows.

apt-get install unzip

sudo apt-get install debootstrap

<del>sudo debootstrap --arch=arm etch /etch-root <a href="http://ftp.de.debian.org/debian/">http://ftp.de.debian.org/debian/</a></del>

sudo debootstrap -–arch=arm etch /etch-root <a href="http://archive.debian.org/debian/" rel="nofollow">http://archive.debian.org/debian/</a>

mkdir /etch-root/usr/local/twonkymedia
cd /etch-root/usr/local/twonkymedia
unzip /root/twonkymedia-armel-glibc-2.2.5-4.4.11-20090108.zip
chmod 700 twonky* cgi-bin/* plugins/*
cd /root




vi /etc/init.d/twonkyStartEtch

set -e

case "$action" in
mount | grep -q " on /etch-root/proc " || mount --bind /proc /etch-root/proc
#    mount | grep -q " on /etch-root/home " || mount --bind /home /etch-root/home

chroot /etch-root /usr/local/twonkymedia/twonkymedia.sh $action || true

case "$action" in
mount | grep -q " on /etch-root/proc " &amp;&amp; umount /etch-root/proc
#    mount | grep -q " on /etch-root/home " &amp;&amp; umount /etch-root/home

Esac<strong> </strong>

Save and Close
chmod +x twonkyStartEtch

cd /etc/rcS.d/

ln -s /etc/init.d/twonkyStartEtch S97twonky

cd /etc/rc0.d/

ln -s /etc/init.d/twonkyStartEtch S19twonky

cd /etc/rc6.d/

ln -s /etc/init.d/twonkyStartEtch S19twonky



Apache 2 already installed – use aptitude to remove all apache packages


apt-get install lighttpd
sudo apt-get install php5 php5-cli php5-common php5-cgi


server.modules = (



fastcgi.server = ( ".php" =&gt; ((
"bin-path" =&gt; "/usr/bin/php5-cgi",
"socket" =&gt; "/tmp/php.socket",


# cgi.fix_pathinfo = 0

 cgi.fix_pathinfo = 1


Restart lighttpd

/etc/init.d/lighttpd restart


Check PHP is working by creating a php info page in /var/www with content like:


Install SQL Lite database
sudo apt-get install sqlite

sudo apt-get install php5-sqlite


Deny Hosts

sudo apt-get install denyhosts

Add in local network so you don’t get locked out!
vi /var/lib/denyhosts/allowed-hosts
# Allowed hosts
#local network


NTFS Drive Access


sudo apt-get install ntfs-3g

test mount
sudo mount -t ntfs-3g /dev/sda1 /mnt/windows -o umask=0,nls=utf8

if successful edit etc/fstab
/dev/sda1 /mnt/windows ntfs-3g umask=0,nls=utf8 0 0


NSLU2 Dead Disk

So for the second time, something has happened to my NSLU2s primary disk – it scans ok, and there doesn’t appear to be any errors, though debian is refusing to boot right now and it’s a real pain to try and work out what is going on when there is no console and I’m getting next to nothing in the logs!

I’ve decided I’m going back to uNSLUng as it did everything I need, and caused me less pain….. that’s my task for this weekend!

I’ve got a document which describes everything I did to get debian up and running. I’ll edit and post this later in the week so it’s available to all who want to try debian on the NSLU2.

NSLU2 Debian Installed

The installer completed successfully after around 5 hours.

I’m now going through the painful process of getting everything back up and running, but I’m making notes as I go and I’ll post these here when I get the chance. There’s loads of good debian NSLU2 information out there – some has been invaluable!

NSLU2 Hard Drive Crash

My main 500GB hard drive that was plugged into the slug decided to stop working last week  causing my slug to freeze and crash on every reboot.

I’ve purchased a new hard disk and have begun installing Debian onto the NSLU2 – I’ll keep you posted 🙂

Debian Installer

NSLU2 DNS Server

I’m toying with the idea of installing dnsmasq on my NSLU2… I don’t want the DHCP part as I’d rather leave my router doing that but I like the idea of having the DNS stuff running now there are a few machines on my LAN.

It’s a pain managing multiple host files..

If I take the plunge – I’ll report back 🙂