1
0
mirror of https://github.com/mbirth/wiki.git synced 2024-09-20 06:33:24 +01:00
wiki.mbirth.de/know-how/hacking/_posts/2009-12-06-linksys-nslu2.md
2015-02-22 17:13:39 +01:00

157 lines
5.2 KiB
Markdown

---
title: Linksys NSLU2
layout: default
created: 2009-08-10 01:41:46 +0200
updated: 2009-12-06 14:01:10 +0100
toc: true
tags:
- know-how
- hacking
- hardware
- linksys
- nas
- storage
---
**NSLU2** means *Network Storage Link for USB 2.0 Disk Drives*. Also see [here](http://en.wikipedia.org/wiki/NSLU2).
![NSLU2]({{ site.url }}/assets/nslu2.jpg)
Custom firmwares
================
The NSLU2 supports different firmwares. The original one is rather outdated. The most used firmwares are:
* *Unslung* --- an add-on to the original firmware, keeping the web-interface and all standard features
* *SlugOS/BE* --- a firmware optimized for small devices; using `opkg` and `ipkg` you can install various applications/services
* *Debian/NSLU2* --- a stripped down Debian linux with all things you know from Debian, but packages are not optimized for small memory devices
SlugOS/BE
---------
### Bad network performance
My network consists of a WLAN repeater which bridges the network of my neighbor with mine. Access to the Internet is provided
by a gateway in my neighbor's network. The NSLU2 device has severe problems downloading files from the Internet. All downloads
stall after a few bytes. Some tests showed that my side of the network works fine but everything behind the WLAN bridge is
almost unreachable from the NSLU2. All other devices in my network can use the Internet fine.
My current solution is using [tcpwatch-httpproxy](apt://tcpwatch-httpproxy) on my Desktop-PC and a file `~/.wgetrc` on my NSLU2
with the contents:
timeout = 10
http_proxy = <my IP>:8080
Debian/NSLU2
------------
### Power button for shutdown instead of reboot
To make pushing the power button shut down the Slug instead of rebooting it, edit the file `/etc/inittab` and replace the
line
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
by
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -h now
Afterwards do a
telinit q
### Free memory
Since ARM packages from Debian are not optimized for small memory footprint, you might want to free up some memory by
deactivating several services which are not needed.
#### bash
To save even more memory, you could replace `bash` by `dash` in your `/etc/passwd` file.
#### exim4
Exim4 is a complete mail exchanger. Most people will only need a simple MTA to send some logs to the admin. So
remove `exim4` and use `ssmtp` instead.
#### getty
If you don't have/use the serial console on the NSLU2, you should disable `getty`. Edit the file `/etc/inittab` and
comment out the following line:
#T0:23:respawn:/sbin/getty -L ttyS0 115200 linux
Afterwards do a
telinit q
#### ipv6
If you don't use IPv6, you should blacklist the kernel module to save some more RAM. Add the following line
to `/etc/modprobe.d/blacklist`:
blacklist ipv6
#### sshd
If you don't use *sshfs* or some other special features of *OpenSSH*, you could replace it by `dropbear`.
### Emergency firmware
If your DebianSlug doesn't boot and the root disk is perfectly clean, you might have a firmware problem. To create
a working firmware, you'll need the files `vmlinuz-2.6.30-2-ixp4xx`, `initrd.img-2.6.30-2-ixp4xx`[^1] and the [di-nslu2.bin](http://www.slug-firmware.net/d-dls.php) (the DebianSlug installer image).
1. make sure you have installed the packages [slugimage](apt://slugimage) and [devio](apt://devio)
1. copy the `di-nslu2.bin` to an empty directory and run this:
slugimage -u -i di-nslu2.bin
1. now copy the two other files also in that directory
1. prepare the kernel image: (This will pad the file to 1441760 Bytes and then switch the [Endianess](http://en.wikipedia.org/wiki/Endianess) of the file.)
dd if=vmlinuz-2.6.30-2-ixp4xx of=vmlinuz-2.6.30-2-ixp4xx.padded ibs=1441760 conv=sync
devio "<<"vmlinuz-2.6.30-2-ixp4xx.padded > vmlinuz-2.6.30-2-ixp4xx.swapped "xp $,4"
1. prepare the initrd image:
dd if=initrd.img-2.6.30-2-ixp4xx of=initrd.img-2.6.30-2-ixp4xx.padded ibs=6291440 conv=sync
devio "<<"initrd.img-2.6.30-2-ixp4xx.padded > initrd.img-2.6.30-2-ixp4xx.swapped "xp $,4"
1. now compile the new firmware image:
slugimage -p -b RedBoot -s SysConf -L apex.bin -k vmlinuz-2.6.30-2-ixp4xx.swapped -r initrd.img-2.6.30-2-ixp4xx.swapped -t Trailer -o debianslug.bin
Finally you only have to burn the new image to the NSLU2 using [upslug2](apt://upslug2):
upslug2 -i debianslug.bin
If you want to make changes to the `initrd`, take a look at [cyrius.com](http://www.cyrius.com/debian/nslu2/repack.html).
**UPDATE:** Here is a little script which does the above in a more comfortable way. Just throw it into the directory
together with the `di-nslu2.bin`, the `initrd.img-2.xxx` and `vmlinuz-2.xxx`. Download: [emergencyfw.sh]({{ site.url }}/assets/emergencyfw.sh)
### Tools
#### iStat Server
[iStat](http://bjango.com/apps/istat/) is an app for the *iPhone* to show performance statistics of different machines.
I compiled their [iStat Server](http://code.google.com/p/istatd/) on my Slug and made a little DEB package.
![iStat]({{ site.url }}/assets/istat.png)
Download: [istatd_0.5.4_armel.deb]({{ site.url }}/assets/istatd_0.5.4_armel.deb)
[^1]: both found in `/boot` on the root partition of the NSLU2-disk