Installation of Debian 5.0 (lenny) on linksys NSLU2
Ok, for anyone who wondered why my site has been down for 8 days and for those who want to install armel on NSLU2, here are my installation notes.
On Saturday last I intended to install armel (Debian 5.03), a task I assumed would take 4-12 hours. Because this is a very low volume site I did not mind that this task would mean being offline for the entire time. How wrong I was.
I did a little googling and settled on instructions on Martin Michlmayr's site. I started by backing up my data and then writing out my installed packages with dpkg --get-selections > file
in effect partially following these instructions. So after downloading debian-armel-5.0.3.zip from http://www.slug-firmware.net/d-dls.php I unzipped and used upslug2 to write to flash. Everything fine.
Then I ran into my first problem. The installer defaulted to a static IP, this is fine for anyone with a gateway 192.168.1.1, but it meant I encountered a red screen when trying to download the release. I got around this by logging in and running dhclient.
Log into a second install terminal with ssh installer@192.168.1.77
once logged in use installer (expert mode)
then select execute a shell
and manually run dhclient
.
> route
Destination Gateway Genmask Flags Metric Ref Use Iface localnet * 255.255.255.0 U 0 0 0 eth0 default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0> dhclient
... DHCPACK from 192.168.1.100 bound to 192.168.1.77 -- renewal in 17121 seconds.> route
Destination Gateway Genmask Flags Metric Ref Use Iface localnet * 255.255.255.0 U 0 0 0 eth0 default 192.168.1.100 0.0.0.0 UG 0 0 0 eth0
I then followed the steps to download the release and setup my partitions. I used a single partition of ext3 and placed a swapfile on that drive. I made sure that is had the bootable flag on, mount point / on and ext3. Partitioned and allowed the installer to mount the disk. I then started a swapfile before continuing to the next step. I decided to run a swapfile rather than a swap partition. This is especially good on a USB flash drive as you can set up a cron job to move the swapfile either each week or month. In the shell on the second terminal enter
> dd if=/dev/zero of=/target/swapfile bs=1024 count=262144
> mkswap /target/swapfile
> swapon /target/swapfile
and you can check this with free
the swap values should be something other than 0 0 0. This assumes the installation drive is already mounted under /target/. Make sure the swap is in /etc/fstab
before you restart the NSLU2.
I then followed the installer until restart. Restarted the slug and horror, the disk flashed for 20 seconds, ethernet LED went off and everything seemed to stop. Waited about 2 minutes and decided that the install had borked. Tried to ssh in and had a no route to host
. Turned off the NSLU2 and mounted the USB stick to check syslog. No /var/log/syslog
file! Then spent the next 2 days retrying to install. Monday morning! Did some more research and there was no mention of this problem. Retried with the zipped fs and flash, tried again, reformatted the USB, checked the USB disk for corruption, etc. etc. etc.
Finally on Sunday, 8 days after I started I set the debconf level to critical and went out. Came back hit some options, went to sleep, woke up and the NSLU2 was working! checked syslog and the kernel had no entries between 0 and 42949372.960000. For me the first startup was very long. I think my battery on the slug is dead/weak, the RTC timed out when finishing the installer. Whatever happened, the NSLU2 works now without a hitch. The system now boots in about 1 minute.
Dec 12 22:18:53 sarsen kernel: [ 0.000000] IRQ lockup detection disabled Dec 12 22:18:53 sarsen kernel: [ 0.000000] PID hash table entries: 128 (order: 7, 512 bytes) Dec 12 22:18:53 sarsen kernel: [42949372.960000] Console: colour dummy device 80x30 Dec 12 22:18:53 sarsen kernel: [42949372.960000] Dentry cache hash table entries: 4096 (order: 2, 16384 bytes) Dec 12 22:18:53 sarsen kernel: [42949372.960000] Inode-cache hash table entries: 2048 (order: 1, 8192 bytes) Dec 12 22:18:53 sarsen kernel: [42949372.960000] Memory: 32MB = 32MB total Dec 12 22:18:53 sarsen kernel: [42949372.960000] Memory: 23248KB available (2640K code, 290K data, 116K init)
Later the time is reset by a week, so something is wrong with the initial time setup or RTC access. My clock slew is not that bad. The reset happens as soon as I install ntpd. The full syslog and dmesg are available on request.
Dec 13 02:34:39 sarsen kernel: [42967540.180000] warning: `ntpd' uses 32-bit capabilities (legacy support in use) Dec 13 02:34:47 sarsen ntpd[9774]: synchronized to 192.189.54.33, stratum 2 Dec 19 11:47:25 sarsen ntpd[9774]: time reset +551558.287407 s Dec 19 11:50:41 sarsen ntpd[9774]: synchronized to 192.189.54.33, stratum 2
Other things I did was to reinstall all the packages I had previously by reloading the listing of my packages dpkg --set-selections < file
check it with apt-get --no-act dselect-upgrade
then run the apt-get dselect-upgrade
I then went through and configured the slug with suggestion from these pages.
First I downloaded and ran this script.
***Edit 20100322, The above script values work great until you try an apt-get update
then it runs VERY SLOW (2% in 30 minutes!) with far too much swapping. My modifications to that script.This leaves a reasonable amount in memory (30%) and has a lower time to starting to swap out (30 as opposed to 120 seconds.)
I then followed almost all the steps on Not a blog (a great summary site).
These covered most of the stop writing straight to flash and reduce memory usage requirements of the NSLU2.
To finish I edited 2 things I have not found elsewhere. By default I got a static IP, I would like my ADSL router to give me dhcp, so > pico /etc/network/interfaces
and edited to add dhcp and comment out the static information.
# The primary network interface allow-hotplug eth0 iface eth0 inet dhcp #iface eth0 inet static # address 192.168.1.77 # netmask 255.255.255.0 # network 192.168.1.0 # broadcast 192.168.1.255 # gateway 192.168.1.1 # # dns-* options are implemented by the resolvconf package, if installed
I then wanted to use the new init sequencing but beep was not working at all? Turned out that while beep has the code to integrate with the new system, # Required-Start: $local_fs $all
was missing the $local_fs $all
. This meant that beep was getting a S01 and beeping way early, so early that the sound was not working yet. So I edited /etc/init.d/beep
and changed the top to
#! /bin/sh # /etc/init.d/beep # # Written by ? # Modified by Michael Tomkins <michft at gmail> ### BEGIN INIT INFO # Provides: beep # Required-Start: $local_fs $all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Beeps that indicate startup and shutdown ### END INIT INFO
Then ran > update-rc.d beep defaults
to get S19 for starts and S01 for shutdowns.
The NSLU2 has been working nicely for over a week now and other tweaks and such are in the works.
00:17:06 up 9 days, 14:13, 1 user, load average: 0.32, 0.07, 0.02 total used free shared buffers cached Mem: 29640 28596 1044 0 976 9108 -/+ buffers/cache: 18512 11128 Swap: 240932 7020 233912
Michael 20091231