Handleiding NSLU2 met Debian

Augustus 2012: Beste lezer; ik ga over op de Raspberry Pi als home server, en daarmee zijn deze pagina's dus verouderd (worden niet meer bijgewerkt)...

NSLU2Deel 2 (april 2010): Zoals in deel 1 beschreven heb ik een Linksys NSLU2 in mijn lokale netwerkje hangen. Dit kastje is een 'Netwerk Storage Link Unit', een interface tussen een losse USB2 harde schijf en mijn lokale ethernet netwerk. Heel geschikt als centrale file server (niet meer met usb-sticks van de ene naar de andere computer), en met SSH ook een veilige centrale gateway voor 'toegang op afstand' via het onveilige internet.

Op mijn Linux en Windows file uitwisseling-pagina de informatie over samba, veilig toegang vanaf het internet via een ssh-tunnel (en een squid proxy), etc...

De software op de NSLU2 had ik vervangen door een 'open versie', de linux uNSLUng variant. uNSLUng is helaas een nogal gestripte Linux, en daarom ben ik uiteindelijk over naar een meer volledige variant, gebaseerd op de Debian distributie.

Voordelen zijn dat dit een meer standaard Linux distributie is (en dat dus bijvoorbeeld de startup files etc op de te verwachten plaatsen staan, zie Linux policies), er veel meer pakketten voor zijn, en de Debian distributie ook de basis is voor Ubuntu, waar ik op de PC mee werk.

Nadelen zijn er ook, er is bijvoorbeeld niet meer de gebruiksvriendelijke web-based LinkSys interface, en je moet het beheer op de linux-manier met SSH en een command prompt (shell) doen.

Let op: enige Linux basiskennis is wel handig! Gehele proces is op eigen risico!

Om dit te doen zonder mijn huidige file server uit de lucht te halen heb ik een tweede NSLU gekregen (bedankt, Math) (ook een hebben? € 40..50 op marktplaats). Hier steek ik een USB-stick in (4 GB), om daar Debian 5.0 (Lenny) op te installeren. De tweede USB poort hield ik vrij voor de USB harde schijf waar de files op komen. Ondertussen heb ik de USB stick op de interne poort 3 aangesloten en in de behuizing ingebouwd, en heb ik de twee externe disk ports weer vrij...

Maar, zo je iets nieuws willen kopen, dan zou ik eens naar bijvoorbeeld de Sheeva-plug (of Guru-plug) kijken... ~$99 (=€129 ?? via importeur) resp. $129 (=€169 ??), krachtiger processor, meer geheugen, etc.

Kennis verzamelen

Eerst maar eens kijken wat hier zoal al over geschreven is. Nuttige websites die ik zoal gevonden heb:

Pas op, sommige webpages zijn verouderd. Een aantal problemen die beschreven worden, zijn in de huidige installer en de 5.0.4 Lenny release (kernel 2.6.26-2-ixp4xx) opgelost!

Zo is het mij prima gelukt om in een keer op een USB-stick te installeren.

  1. Startpunt is de uNSLUng community web site, met veel info over de NSLU2 software (en hardware), ook over de NSLU2 Debian variant (gebaseerd op 5.0 Lenny)
  2. Debian installeren op de Linksys NSLU 2 met Windows XP/Vista/7 (in het Nederlands!), en Installing Debian on the Linksys NSLU2, ook een goed overzicht van de installatie
  3. NSLU2OsInstallMiserableFailure, over wat er zoal mis kan gaan (vooral met het instellen van het IP adres, en hoe dan weer verder te komen). Hier zijn verhaal over hoe het wel moest: Debian Linux on the NSLU2 (slug)
  4. Debian NSLU2 post-install part 1, wat te doen als je Debian op je NSLU2 geïnstalleerd hebt
  5. My Debian Linux on the NSLU2 installation and configuration guide, met tips voor na de installatie op USB flash stick (ivm verminderen slijtage door overbodige schrijfacties) en lichtgewicht web server met PHP
  6. Debian on a Linksys NSLU2 ('Slug'), ook een overzicht met installatie en tips
  7. Debian on NSLU2 - part 3, installeren van een SAMBA file server, web server, etc
  8. Linksys NSLU2 - Network Storage Link for USB 2.0 Disk Drives heeft ook veel tips
  9. De NSLU2 Debian Guide met diverse guides, zoals ntfs-3g

Met deze sites moet het toch gaan lukken.

Bijgewerkte NSLU2
De bijgewerkte NSLU2, met I2C, interne 4G USB-stick
(binnenwerk, met dubbelzijdig plakband vastgezet),
en overklok tot 266 MHz

De Debian-Linux installatie

Wat heb je nodig

Voorbereiding: wat heb je zoal nodig?

  • Natuurlijk een NSLU2, verbonden aan je lokale netwerk
  • Een USB disk of grote USB stick (flash), minimaal 2 Gbyte, in de Disk2-poort van de NSLU2
  • Een werkende netwerkverbinding (een groot deel van de installatie wordt gedownload door de NSLU)
  • De debian installer binary di-nslu2.bin, te downloaden als debian-armel-5.0.4.zip op Debian/NSLU2 Downloads
  • Een PC met SSH client (bijvoorbeeld een PC met Ubuntu Linux, of een Windows PC met PuTTY geïnstalleerd). Voor een aantal stappen is Linux echt het handigst, je kunt bijvoorbeeld een Ubuntu Live CD gebruiken als je alleen Windows op je PC hebt.
  • Veel geduld (de totale eerste installatie duurt tot 4 uur, afhankelijk van je NSLU2 en internetverbinding)

Instellen IP adres

Uiteindelijk belanden deze gegevens in drie files: de ip gegevens in /etc/network/interfaces en de hostname in /etc/hostname en /etc/hosts

Het is van belang voor de installatie gegevens als IP-adres en dergelijken goed in te stellen (dus nog vanuit de LinkSys web interface). Deze gegevens gaan door de Debian installer overgenomen worden als vast IP adres. Staan deze niet goed ingesteld, dan gaat Debian over op automatische IP toewijzing (DHCP) en is het maar afwachten op welk IP adres je NSLU opduikt (al is'ie dan ook wel terug te vinden, zie Angry IP Scanner).

Instellen in de Administration tab van de LinkSys web interface. Gegevens zijn natuurlijk afhankelijk van je eigen netwerk, maar bij mij: naam netdisk2, IP adres (standaard is 192.168.1.77, maar ik heb hem op 192.168.1.9), network mask (255.255.255.0), gateway (192.168.1.1) en DNS (bij mij ook 192.168.1.1, wordt door de router afgehandeld)!

De Installer downloaden en installeren

Je hebt een aangepaste versie van de Debian installer nodig. De reden hiervoor is dat een deel van de netwerksoftware geen 'open source' is en dus niet standaard in Debian meegeleverd kan worden. De versie die nodig is, is di-nslu2.bin (8 Mbyte), te downloaden als debian-armel-5.0.4.zip op Debian/NSLU2 Downloads.

Vanuit Linux kan je ook de UpSlug2 utility gebruiken, zie de uNSLUng UpSlug2 documentatie.

Voor Windows kan het soortgelijk (bijvoorbeeld na problemen met upgraden: zet je NSLU in upgrade mode, en dan de nieuwe binary uploaden met de upgrade utility (WinXP). Vista/Windows 7: lees eerst deze upgrade pagina!

Via de standaard LinkSys NLSU2 web interface kan je nu de NSLU upgraden, door vanuit het upgrade menu (Administration --> Advanced --> Upgrade) naar deze .bin file to bladeren (uitgebreide handleiding op Cyrius). Druk op 'Start Upgrade', druk op 'OK', enkele minuten geduld, en nogmaals 'OK'. Bij een standaard installatie vanuit een nieuwe LinkSys NSLU2 heb je dus geen aparte Upgrade Utility nodig, of zo.

Nadat de installer is geflasht in het interne NSLU2 geheugen, zal de NLSU2 opnieuw opstarten met de Debian installer. Normaal zou de Debian installer via een beeldscherm of seriële lijn communiceren, maar de NSLU2 heeft die mogelijkheden niet standaard en gebruikt daarom een SSH-verbinding via je lokale netwerk. Als de installer opgestart is (kan 5 .. 15 minuten duren, afhankelijk van de snelheid van je NSLU, niet schrikken als de leds een tijdje allemaal uit zijn, ze gaan weer aan) wordt de status LED groen, en piept de NSLU drie keer. Vanaf dat moment kan je met SSH inloggen op de NSLU, met gebruikersnaam 'installer', en wachtwoord 'install', op Windows met PuTTY of in Linux met

ssh installer@192.168.1.9

Als het je niet lukt om met de NSLU te communiceren, is vermoedelijk het IP adres niet correct. Probeer de NSLU te vinden, bijvoorbeeld (windows) met de Angry IP Scanner (zie vorige hoofdstuk, instellen IP adres)...

Het kiezen van USA als standplaats, tijdzone (Eastern) en zo lijkt de minste problemen te geven met installeren, zie de Debian installeren op de Linksys NSLU 2 pagina. Kan je later goed zetten op onze eigen tijd.

De eigenlijke installatie

De eigenlijke installatie neemt er de tijd voor... Afhankelijk van je internetverbinding is dit rond de 3..4 uur. Helaas worden er nu en dan tijdens dit proces vragen gesteld (zie Debian installeren op de Linksys NSLU 2 voor de vragen en antwoorden; alleen de partitionering heb ik wat anders gedaan, zie hiernaast), zoals het root-wachtwoord na zo'n 1.5 uur en nog wat vragen 1 en 2 kwartier later. Loop dus niet te ver uit de buurt, elk kwartier even checken kan geen kwaad.

De USB stick heb ik door de installer laten formatteren (keuze: guided met alle disk space, en alle data in een partitie; maakt dan automatisch de drie benodigde partities aan: sda1=boot, sda2=/ (root) en sda5=swap). Voor root heb ik gewoon ext3 filesystem aangehouden.

Aan het einde van de installatie krijg je een bevestiging dat de installatie klaar is. Druk op OK, wacht tot de installer helemaal klaar is en je SSH sessie afbreekt, wacht nog enkele minuten, en als het goed is kan je dan weer met SSH inloggen, maar dan met je nieuwe user naam/wachtwoord of root & root-wachtwoord.

Herstarten

Voordat je opnieuw opstart: check of in de file /etc/default/rcS de regel FSCKFIX=yes voorkomt, en voeg toe als dit niet het geval is om te voorkomen dat fsck (checkdisk) blijft hangen op een vraag waarop 'y' geantwoord moet worden... Bij mij OK, gaat vermoedelijk alleen fout in vorige versies en is nu gecorrigeerd.

Controleer ook of de klok ongeveer goed staat (date), gaat soms mis en dan kan het booten meer dan een uur gaan duren... Alternatief (denk zeker als je later toch ntp installeert) is cd /etc/rcS.d && mv S11hwclock.sh dont_S11hwclock_sh

Dan: opnieuw opstarten (met power switch of het reboot commando)! Dit om te zorgen dat een aantal files correct herladen wordt (zoals de package repositories). Booten duurt ongeveer een tot twee minuten, dan weer met SSH inloggen.

Problemen: boot log aanzetten, zet in /etc/default/bootlogd de waarde van BOOTLOGD_ENABLE op Yes en kijk in /var/log/boot

Bij checken geheugengebruik van het kale systeem met het free commando: 29.5 Mbyte geheugen beschikbaar waarvan 5..7 Mbyte vrij (1..2 M buffers); 249 Mbyte swap waarvan alles nog vrij (13M cached). Op de USB-stick root partitie is zo'n 1 Gbyte in gebruik (al na package updates etc).

Anders dan bij uNSLUng zijn een aantal nuttige pakketten al voorgeïnstalleerd, zoals SSH en de editor nano. screen is helaas nog niet geïnstalleerd (zie ook deel 1); apt-get install screen

De eerste wijzigingen

En hier wat ik zoal gewijzigd heb na de installatie (voor deze keer maar inloggen als root):

Package repository up-to-date maken

Zoals gebruikelijk: zorg dat de software en de database met packages up-to-date is...

apt-get update && apt-get dist-upgrade

Tijdzone instellen op Nederland

Installatie gaat bij voorkeur met Amerikaanse time setting (waarom eigenlijk), maar toch goed om nu je eigen time zone (Europa --> Amsterdam) weer te selecteren, niet meer met tzconfig maar met: dpkg-reconfigure tzdata

Daarnaast is het nuttig ntp te installeren, deze synchroniseert regelmatig de clock met echte time servers: apt-get install ntp

SFTP met FileZilla

Soms is het voldoende om in een PuTTY/SSH window te werken. Maar om snel in het filesysteem te kunnen bladeren, is een explorer-achtige view toch handiger. Kan bijvoorbeeld met SFTP via de FileZilla FTP client.

Aan/uit schakelaar

Standaard doet de aan/uit switch in deze installatie een reboot, en geen power down... Verander met nano /etc/inittab in de regel ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now de -r in een -h (halt in plaats van reboot).

Hergenereer de SSH-keys

Vermoedelijk al niet meer nodig, maar vanwege mogelijke zwakke keys met oudere ssh-keygen versies de keys opnieuw genereren (let op, SSH/puTTY zal wel opnieuw de fingerprint willen checken bij de volgende keer inloggen):

cd /etc/ssh/
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ''

De USB Geheugenstick

USB Flash wear (slijtage)

Flash geheugen (als in een USB-stick) moet niet teveel geschreven worden; de levensduur is beperkt. Voorkom dus zo veel mogelijk onnodig schrijven naar de USB-stick. Uitleg op bijvoorbeeld Tips for running Linux on a flash device.

Swap op harde schijf?

Als je ook de swap niet op de USB-disk wilt: zie verderop het stukje over Disk checken na een storing. Maar, moet er al wel een harde schijf aanhangen...

  • Laat het systeem niet te vaak de ext3 meta-data bijwerken: pas /etc/fstab voor root ( / ) aan (equivalent commando van de command line, alleen werkzaam gedurende de lopende sessie: mount -o remount,noatime,commit=120 / )
  • Laat het systeem weten dat je flash gebruikt: maak een file .ext3flash aan in de root folder met touch /.ext3flash
  • Verminder het swap-gedrag met echo "0" > /proc/sys/vm/swappiness (zie het kernel-params script op de bovengenoemde pagina voor meer instellingen)
  • rsyslogd maakt al geen regelmatige MARK messages in de standaard installatie (zie config file /etc/rsyslog.conf ), dus geen wijziging nodig hier. Maar, wat wil ik wel en wat niet gelogd hebben? Later...
  • Log files, locks etc kunnen het beste op een RAM-disk staan, tenminste als je het niet erg vind dat deze bij een crash verloren gaan... Zie Using tmpfs to Minimize Disk IO, en hieronder.
  • en zo voort (zie link), maar pas op: sommige tips zijn outdated (zoals de syslog MARK verwijzing)

df -h geeft je een lijstje van gebruikte ruimte per file systeem, ook van tmpfs. tmpfs neemt alleen de werkelijk gebruikte ruimte in!

Move /var/log naar ram disk: zie mijn log2tmpfs.sh (kan als init.d script automatisch gestart en gestopt)

Vind alle files nieuwer dan bijvoorbeeld marker.txt: find /var/ -newer marker.txt -print

In de gaten houden van een partitie? Check een keer per minuut met:
while [ 1 ]; do cat /proc/diskstats | grep sdb2; sleep 60; done
met sdb2 de root-partitie; vind dit met:
ls -al /dev/disk/by-label

Het voorkomen van het schrijven van logfiles etc is best even lastig. Checken hoe vaak naar flash geschreven wordt (zowel swap als normaal) kan door analyse van /proc/diskstats, snelle controle gaf bij mij geen schrijfacties op swap (netjes), enkele op /boot (??, remount met noatime), en voor het verplaatsen van de /var/log files best veel acties op de normale '/' werkpartitie (zo'n 10K per week).

Met de Using tmpfs to Minimize Disk IO over log files heb ik /var/run en /var/lock nu naar een RAM-disk (tmpfs) doorgestuurd, en met mijn script hiernaast ook /var/log/, maar er zitten nog enkele files in /var die regelmatig bijgewerkt worden (ongeveer elke 10 minuten?), in mijn geval met name /var/lib/ntp/ntp.drift en /var/cache/samba/browse.dat

Om de hele /var directory in tmpfs te zetten heb ik niet genoeg geheugen (en dan zou'ie dus gaan swappen, naar... juist: USB). De ntp file is via /etc/ntp.conf op een andere plek te krijgen (nu in /var/log/ntpstats/), samba heb ik via een soft link ook naar /var/log verwezen. Logfiles naar een RAM-disk (tmpfs) verhuizen heeft wel als nadeel dat ze na een crash weg zijn. Ach, crashes komen bij mij niet voor... En bij een nette shut-down kopieer ik de zaak weer terug naar USB (zie ook log2tmpfs.sh).

En nu wordt er inderdaad bij gebruik als file server niets meer naar de USB geschreven. Alleen bij afsluiten worden de logfiles teruggekopiëerd, en worden natuurlijk bij wijzigingen in de configuratie of eventueel op de usb staande /home directories wel naar de usb geschreven. Maar bij gewoon gebruik: niets!

NSLU2-Flash Image backup

De installatie staat grotendeels op de USB-stick. Haal die uit je NSLU en stop die in een PC met Linux (Ubuntu): er worden twee partities gemount (boot en root), en je kan makkelijk bij alle files zoals de log files in /var/log om problemen te zoeken, en bij de configuratiefiles (voor het herstellen van fatale foutieve instellingen).

Nu eerst maar eens een backup, voor als in de configuratie iets mis gaat (bijvoorbeeld inloggen lukt niet meer) en het systeem niet meer te bereiken is...

Backup van de USB-stick: ruim eerst op wat niet meer nodig is (zoals oude log files, en de 100+ Mbyte cache van apt-get: apt-get clean ). Daarna heb ik de USB-stick in een PC met Ubuntu gestopt, waarbij automatisch de partities herkend worden (onder wat vreemde namen). Ik heb de lege ruimte met nullen gevuld, zodat compressie lekker efficiënt gaat (zip). Check met mount welke devices de root en boot partitie bevatten (in mijn geval sdg1 en sdg2), ga daar heen met cd, en wis ze (ieder met sudo cat /dev/zero > zero.fill;sync;sleep 1;sync;rm -f zero.fill;sync , kan even duren). Daarna het hele device (bij mij dus sdg, zonder cijfer) naar file kopiëren met sudo dd if=/dev/sdg of=nslu_usb.bin. De hele gezipte 4 Gbyte USB stick past nu in een 500 Mbyte zip file.

De zo gegenereerde .bin file is een kopie van de hele USB, met meerdere partities. Om een partitie uit deze .bin in Ubuntu te mounten moet je bij het mounten de offset (start sector * bytes/sector) naar het begin van de gewenste partitie opgeven (uitleg hier, start sector opvragen kan met fdisk -lu <file>):

mount -o loop,offset=<offset> nslu2_usb.bin /media/nslu2_usb

Naast de backup van de USB-stick heb je ook een image van het 8 MB flashgeheugen in de NSLU2 nodig. Dump het flashgeheugen naar file met cat /dev/mtdblock* > flash_image.bin, en kopieer dan deze file naar de PC met bijvoorbeeld (linux; met windows kan je WinSCP of FileZilla gebruiken) scp root@ipaddr:flash_image.bin flash_image.bin

Harde Schijf en File Server

Harde Schijf en Disk-volgorde

Blijkbaar is bij USB de volgorde van detectie van de disks wel eens wisselend... Met als gevolg dat als je er nog een disk op aansluit, het booten mis kan gaan omdat er op de verkeerde disk wordt gekeken (sda en sdb wisselen om). Beter is het de partities een naam (label) te geven. Ik heb dit vanaf een PC met Ubuntu gedaan, en niet op de NSLU zelf. Dit werkt prima: sudo mkswap -L swap /dev/sdg5; sudo tune2fs -L boot /dev/sdg1; sudo tune2fs -L root /dev/sdg2 (kijk even bij de backup sectie hoe ik aan de sdg kom). Mounten kan nu op naam (/etc/fstab aanpassen) in plaats van op device&partitienummer. Meer uitleg op How to mount disks by label.

Een ongebruikte USB harde schijf heb ik opnieuw geformatteerd, met twee partities: een grote ext3 partitie voor de files (label 'data'), en nog een kleintje (linux-swap; label 'hdswap') voor als ik de swappartitie van de USB-stick naar de harde schijf wil verhuizen (als ik merk dat er veel geswapt wordt en de USB-stick te veel zou gaan slijten, zie het swapon commando, en het stukje verderop over disk check).

Disk er in (USB poort met naam DISK1), nslu aanzetten: boot niet... Vermoedelijk omdat ik het booten op label nog niet gedaan heb, alleen het mounten. Dan de disks maar eens wisselen (USB in DISK1, HD in DISK2). Na een minuutje gaan de disk-leds branden, en nog even later de andere leds ook: contact, kan weer inloggen. Wel oplossen voordat ik de USB stick inbouw op USB poort 3...

Op naam (label) booten kan door de kernel command line aan te passen met apex-env. Ik heb ook een vertraging toegevoegd wegens mogelijk trage USB schijf, commando werd dus apex-env setenv cmdline 'console=ttyS0,115200 rtc-x1205.probe=0,0x6f noirqdebug root=/dev/disk/by-label/root rootdelay=10'. Vervolgens de opstartcode in initramfs laten bijwerken (update-initramfs -k all -u), dit commando flasht automatisch ook de kernel en de initramfs (even geduld hebben, en na herstarten: gelukkig, de zaak start op...). Disks omdraaien: ja, boot ook netjes!

Beep beep

Soms handig bij testen van automatische scripts etc: het 'beep'-commando (apt-get install beep). Mooi piepje is beep -l 200 -f 20

beep -l <10..1000> -f <1..130> -r <n> -d <10..1000> -n <next_seq>

De HD wordt niet automatisch gemount maar wordt wel herkend (ook bij later inpluggen): als ik kijk in /dev/disk/by-label zijn daar keurig data en hdswap toegevoegd. Automatisch mounten via fstab is misschien ook niet aan te raden; als de schijf er een keer niet in zit boot je systeem ook niet.

Ik heb /etc/fstab uitgebreid met de regel /dev/disk/by-label/data /mnt/data ext3 noauto,noexec,errors=remount-ro 0 0 (merk op: ik heb ook noexec aangezet, dat wil zeggen dat executables op deze schijf niet op de NSLU gestart kunnen worden, en heb de fsck parameter op nul staan); niet vergeten eenmalig van te voren een mount-point aan te maken: mkdir /mnt/data; mount /dev/disk/by-label/data.

Mounten (en file system check) doe ik nu automatisch bij opstarten via een eigen init.d script mount_data.sh, en wel alleen als de schijf er aan hangt (nog te doen: kan ook automatisch bij inpluggen met udev script?? Ziet er moeilijk uit. Dit USB hotplug script? Info van USBSlotsAndBuses?). Check disk (e2fsck -p <device>) duurt wel zo'n 20 minuten voor 150 GB data, dus dit is via een configuratiefile ook uit te schakelen (handig bij testen).

Samba File server

Let op: de client-kant van samba (ook b.v. samba via ssh) staat beschreven op mijn samba pagina...

Netbios is niet echt veilig... Kan je uitschakelen met in de global sectie op te nemen:

[global]
disable netbios = yes
smb ports = 445

Daar ging het eigenlijk (ook) om: de file server. Er staat een beknopte uitleg van het installeren van de SAMBA server (en andere programma's als web server en midnight commander, een file browser) op Debian on NSLU2 - samba. Andere uitleg: SambaOnLinux. Installatie is simpel (apt-get install samba; apt-get install smbclient), de twee deamons worden automatisch gestart (smbd, en als je Netbios nog aan hebt staan nmbd).

Het tricky deel is de configuratie (via /etc/samba/smb.conf), zie daarvoor de zojuist genoemde links, en bijvoorbeeld Samba.org en de Samba Setup Guide for Linux. Vergeet niet na een aanpassing in de configuratie samba te herstarten (hoewel, samba herlaadt de .conf file elke 60 seconden?): /etc/init.d/samba restart De globale share verwijst naar een public directory op mijn harde schijf, en is gedefinieerd als:

Vergeet niet de (in linux al bestaande!) users aan samba toe te voegen met smbpasswd -a <user> (lijst bestaande users: pdbedit -w -L )

Toevoegen Linux user (evt met --uid <100?>):
adduser <user>; usermod -g users <user>

Wil je zonder wachtwoord in kunnen loggen? Zie Samba: How to share files without user/password

[shared]
    comment = Gezamenlijke files
    path=/mnt/data/public
    force group = users
    wide links = no
    create mask = 0660
    force create mode = 0660
    create directory = 0770
    force directory mode = 0770  
    writable = yes
    browsable = yes

Bij een al in gebruik zijnde NSLU2 disk kan het nodig zijn bijvoorbeeld de owner/groep van de bestaande files in public bij te werken met

chown -R <user>:users /mnt/data/public/

Verder heb ik alles in [printers] en [print$] uitgecommentarieerd en bij printing ook even printing = bsd en printcap name = /dev/null gezet; voorkomt traagheid en foutmeldingen in de logs. security = user aangezet, en in de [homes] sectie browseable = no gezet zodat alleen de shared groep zichtbaar is. En, ik kan er nu vanuit Windows al bij (als \\192.168.1.9\shared, of als \\netdisk2\shared).

Transfer rate: 5 MB/s upload (40 mbit/s), >6 MB/s download (50 mbit/s), 20% beter dan bij uNSLUng. Denk dat dit met name door mijn lokale netwerk bepaald wordt (100 mbit/s). Via de SSH gateway (dus met encryptie, zie hierna) gaat dit uiteraard naar beneden; een download was nu 800 KB/s met een 80% cpu load voor dropbear (de encryptie, denk ik zo); en 10% voor smbd (en 10% voor de rest van het systeem). Ach, naar buiten heb ik toch een nog trager abonnement, dus who cares...

NTFS support

Installeren NTFS support (niet standaard aanwezig, vfat wel) kan met ntfs-3g zodat ik er ook grote Windows-disks aan kan hangen. Mount met (uid 1000 is mijn default non-root user; gid 100 is group 'users', zie ntfs-3g documentatie):

mount -t ntfs-3g -o noauto,noexec,errors=remount-ro,uid=1000,gid=100,fmask=113,dmask=002 /dev/sda1 /mnt/windows

Spin Down van de harde schijf

Kijk, dat lijkt er meer op. Na opzetten dropbear en uitschakelen van de openssh server, en wat andere optimalisaties: free geeft nu (inclusief buffers/cache) 20 MByte vrij (van de 29 beschikbaar)... Nu zal de swapfile op de USB stick niet meer veel gebruikt worden.

En met draaiende sftp-server en een mount onder Windows nog steeds 10+M vrij.

Gedurende een e2fsck disk check (boot) wordt wel tijdelijk geswapt.

Om power te besparen wil ik de disk in stand-by mode (spin-down) laten gaan als deze enige tijd (bijvoorbeeld 20 minuten) niet aangesproken wordt; mijn disk doet dit niet vanzelf. Er zijn hiervoor kant-en-klare programma´s, zoals Spindown 0.4.0 (moet wel gecompileerd), maar ik heb zelf wat met scripts in elkaar gezet. Disk-aktiviteit kan je checken in de pseudo-file /proc/diskstats, door te kijken of de statistics van de data disk veranderen. Als dit een tijdje niet het geval is kan je de schijf in stand-by zetten. Hiervoor heb je de sg3-utils module nodig, voorbeeld:

apt-get install sg3-utils
/usr/bin/sg_start –-stop /dev/sdb

Ik heb dit gecombineerd met mijn init.d/mount_data.sh script dat hiervoor een achtergrondproces start, nog niet op de site gezet maar hier is voorbeeld-code om te testen: spindown_deamon.sh (met config file in /etc/mount_data.conf). De disk start vanzelf weer op; maar uiteraard geeft dit wat vertraging.

De disk checken na een storing

De stroom is even uitgevallen, en ik wil graag de disk checken op problemen: e2fsck /dev/disk/by-label/data; maar na een aantal seconden gaf deze er de brui aan, gelukkig (achteraf gezien) zonder de disk te beschadigen. Maar, wat was hier aan de hand? Waarom klapte e2fsck er uit? Het commando nog eens gedraaid (met de -n parameter: e2fsck mag niets echt op disk doen), en met behulp van het top commando gekeken naar CPU en geheugen-gebruik: ik liep uit het geheugen, en de swap op de USB stick was ook niet groot genoeg...

Gelukkig had ik ook een partitie op de schijf vrij gemaakt om als extra swap-ruimte te dienen (een partitie met label 'hdswap'). Maar, hoe schakel ik die nu in, en de usb-swap uit? Wat zoekwerk gaf de volgende resultaten, gebaseerd op het swapon commando:

# Eenmalig de swap-partitie op schijf initialiseren:
mkswap -c -L hdswap /dev/disk/by-label/hdswap
# --> Setting up swapspace version 1, size = 2582732 kB
# --> LABEL=hdswap, UUID=b1669877-929a-41d1-9e9b-2e191bfb2536
# deze nieuwe swap file activeren:
swapon -p 5 -v -L hdswap
# --> swapon on /dev/sda3
# de USB swap er uit gooien
swapoff /dev/sdb5
# en eens kijken hoe het er nu uit ziet:
swapon -s
# --> Filename     Type       Size    Used    Priority
# --> /dev/sda3    partition  2522196 0       5

Jawel, dat ziet er beter uit. Ook in het top commando is de swap-ruimte nu duidelijk groter. Nog een keer e2fsck opstarten om alleen te checken (let op, wil je echt checken én repareren, eerst de betreffende disk unmounten!!!): e2fsck -n -v /dev/sda2 Duurt overigens wel even, bij een grote schijf... Mijn geheugengebruik nu (met het 'top' commando):

Tasks:  41 total,   1 running,  40 sleeping,   0 stopped,   0 zombie
Mem:     29508k total,    28544k used,      964k free,      728k buffers
Swap:  2522196k total,      396k used,  2521800k free,    15080k cached

SSH gateway (ook voor samba)

Ik wil de NSLU ook als veilige SSH gateway van het externe internet naar mijn lokale netwerk en filesysteem kunnen gebruiken (bijvoorbeeld omdat mijn zoon vanaf zijn studentenkamer in Nijmegen ook bij de disk wil kunnen, voor bijvoorbeeld backups). Zie mijn deel 1 over het opzetten van de SSH server (en gebruik van key files in plaats van passwords en zo). Wel ben ik vanwege geheugengebruik over van de grote openssh-server naar de meer lichtgewicht dropbear server (gebruikt 1 Mbyte, in plaats van de 9 MB die openssh gebruikt; op 32 Mbyte totaal telt dat toch hard aan en ik wil zo min mogelijk swappen).

Eerst de openssh server naar een andere poort, bijvoorbeeld 22222. Vreemd, er zijn twee config files, /etc/ssh/sshd_config en /etc/ssh/ssh_config ? De eerste, met 'sshd'... Herstarten: /etc/init.d/ssh restart

Blijkbaar ondersteund dropbear toch wel SFTP!! Mits de openssh-server geïnstalleerd is (maar hoeft niet te draaien); dropbear gebruikt namelijk de sftp-server van openssh...

Documentatie loopt zeker hier en daar wat achter

Dan dropbear installeren, configureren (/etc/default/dropbear, zet NO_START=0) en testen (/etc/init.d/dropbear start) , en dan pas openssh uitschakelen, zie verderop. Enige nadeel: volgens de documentatie ondersteunt dropbear geen sftp (dus geen support voor FileZilla), alleen scp. Hoewel???

Maar, ik ga toch access doen via samba. Dit kan ik ook veilig via het internet benaderen: via een SSH tunnel. Meer uitleg hierover heb ik verhuisd naar mijn nieuwe samba pagina...

Nu nog af van inloggen via ssh met wachtwoorden, en in plaats daarvan keyfiles gebruiken (veiliger); zie deel 1. Wat ik heb gedaan is simpelweg de keys van de oude NSLU2 (die van deel 1) via de PC gekopieerd naar de nieuwe NSLU2 met Debian (directory /root/.ssh met daarin de authorized_keys file, plus eventuele user directories /home/<user>/.ssh). Ik had paegant (het windows-equivalent van ssh-agent) toevallig al geladen wegens gebruik FileZilla met SFTP op de oude NSLU: bij inloggen als root zorgde paegant keurig voor de authenticatie, zowel bij ssh als bij dropbear.

Vergeet niet op je router de ssh-poort (bv 22222) naar de juiste computer te forwarden! Zie ook mijn server-pagina's.

Dan klassieke autenticatie met wachtwoord uitzetten in de config files: dropbear heeft daarvoor de -s parameter (zet DROPBEAR_EXTRA_ARGS=-s in de config file). Nu kan de openssh-server echt uitgezet ( /etc/init.d/ssh stop; mv /etc/init.d/ssh /etc/init.d/ssh_old; echo "#! /bin/sh" > /etc/init.d/ssh; zo kan ik makkelijk in noodgevallen via mijn PC ssh terugzetten door terug te renamen op de USB-stick).

Veilig browsen op vakantie

Ook op vakantie wil ik veilig kunnen browsen, zonder dat anderen op hotspots mijn verbinding af kunnen luisteren. Het idee is een veilige SSH tunnel op te zetten (waarbij je de poort naar de proxy als port-forwarding opzet, -L3128:localhost:3128) en over die tunnel dan de proxy te gebruiken om te surfen etc. Dit kan per programma door in het programma een proxy in te stellen (bijvoorbeeld bij Firefox browser), of door dit globaal op je systeem als proxy in te stellen (afhankelijk van je systeem). Dit kan met squid, een proxy-pakket. Wel moet voor de goede werking op de NSLU de configuratie worden aangepast, omdat'ie anders te veel resources gebruikt. Hier nog een (niet-NSLU2) link naar het opzetten van squid (nog een configuratie-site). En de officiële squid website.

Ik ben uitgegaan van de debian-installatie als beschreven op squid (met squid 2.7.3), maar wel met een aantal aanpassingen in /etc/squid/squid.conf. Eerst squid stoppen (/etc/init.d/squid stop). Zo heb ik de cache naar de data-schijf verhuisd (/mnt/data/squid/cache, owner proxy:proxy), de oude weggegooid rm -R /var/spool/squid), en squid -z uitgevoerd om de nieuwe cache aan te maken. Ook het cache-geheugen van 8 naar 4 MB verkleind, etc.  Squid weer starten, zou nu moeten lopen (kijk met ps -A). In firefox de proxy-instelling goed zetten (<ipadres>:3128), en... ik heb nog steeds internet. Squid stoppen: weg internet... WERKT! (ook nog een cache-rule instellen dat movies etc niet gecached maar gestreamd worden).

Hoe weet je of squid goed werkt? Om dit echt te testen moet je dus op een ander netwerk dan je normale netwerk zitten. (bijvoorbeeld op je werk), en een SSH-verbinding op te zetten. Ga naar je browser en stel deze zo in (via opties -> netwerk) dat deze via de proxy naar het internet gaat, en check dan met bijvoorbeeld WhatIsMyIP wat je IP-adres is (en hier via https): dit zou het IP adres van je huisnetwerk (waar je raspberry staat) moeten zijn, en niet van het netwerk vanaf waar je test... 

Enige probleem: Android (op mijn phone) kent standaard geen proxies, in ieder geval niet voor versie 3... En dat voor een Linux-based OS, slordig; hebben meer mensen al over geklaagd maar geen antwoord van Google. Firefox op Android kan er wel mee overweg; en met de Proxy Mobile extensie is er redelijk snel te wisselen. Om alle Android apps via de proxy te laten lopen moet je een proxy-app als ProxyDroid hebben, en daarvoor heb je wel een geroote Android nodig. Hopelijk wordt dat ooit nog verbeterd.Ps: SSH tunnel opzetten gaat handig met het gratis ConnectBot.

X server forwarding via SSH gateway

Dit hoofdstuk is verhuisd naar mijn SSH pagina...

En verder...

Reductie geheugengebruik

Processor speed

Is de NSLU2 al op snelheid, of moet je nog overklokken (zie ook mijn deel 1)? Check de huidige clock speed met onderstaand commando, zou ongeveer 266 MHz moeten opleveren, maar op oude NSLU2-versies kan dit ook 133 MHz zijn...

cat /proc/cpuinfo | grep BogoMIPS

Tips for reducing memory usage (voorbeeld: to disable IPv6: nano /etc/modprobe.d/aliases and change alias net-pf-10 ipv6 to alias net-pf-10 off ; seriële poort uitzetten door in /etc/inittab de regel T0:23:respawn:/sbin/getty ... uit te commentariëren), My Debian Linux on the NSLU2 installation and configuration guide, exim4 (sendmail replacement) stoppen/removen (als openssh-server)? En zie de vervanging van openssh door dropbear hierboven. Al met al toch zo'n 20 Mbyte vrij (incl buffers/cache; zie free commando).

Andere tip die ik gelezen heb, nfs service (drive sharing; /etc/init.d/nfs-common) stoppen, had bij mij het effect dat samba niet meer goed draaide.

Lichtgewicht web server

Om mijn foto-albums via web te kunnen bekijken, bijvoorbeeld op de Wii (heb al web-pages van elk album)... Ik gebruik de Lighttp lichtgewicht web server, op dit moment nog zonder de PHP extensies. Let er wel op dat je het pad (en de eigenlijke files) world-readable zet, anders krijg je een 403 access denied error.

Meer security: chroot jail

User in jail: jk_lsh (limited shell) of jk_chrootsh (basic shell), zie de doc voor het opzetten van de .ini files

Een programmagroep kopiëren naar de jail: zie jk_init (typische groepen voor mij: basicshell, editors, terminfo, scp, sftp, ssh). Individuele programma's (incl libraries) kunnen met jk_cp gekopiëerd.

Om ook nano te laten werken in de chroot jail: voeg env = TERM toe in de [DEFAULT] sectie in /etc/jailkit/jk_chrootsh.ini

Gedaan: Om te voorkomen dat gebruikers overal bij het systeem kunnen na met ssh te hebben ingelogd heb ik een chroot jail opgezet. Ik gebruik hiervoor het Jailkit script van Olivier Sessink: download en extract, ga naar jailkit directory; installeer development tools (C compiler nodig; apt-get install gcc libc6-dev make) en daarna komt ./configure er goed doorheen; zie verder de install.txt.

Een bestaande user eventueel naar de jail schuiven (zie jailkit howto) gaat met jk_jailuser -m -j /home/jail <user>. Daarna even /home/jail/etc/passwd bewerken (gebruiker voorzien van de goede shell, /bin/bash). De standaard limited jk_lsh is namelijk bruikbaar voor sftp/scp én voor remote samba mounten, maar niet voor een interactieve ssh shell. Wel jk_lsh.ini danwel jk_chrootsh.ini invullen (zie b.v. jk_lsh doc)!

Nu kan een jailed user natuurlijk niet uit de jail, en dus ook niet bij de harde schijf... En, je kan geen link leggen naar een map buiten de jail. Moet dus anders (zie ook de jailkit FAQ): mount als root de disk (of map) binnen de jail... In mijn geval (maakt voor de jail user een map /public zichtbaar): mkdir /home/jail/public; mount -o bind /mnt/data/public /home/jail/public

I2C voor hardware besturing

Op de NSLU2 zit (zoals op zo veel systemen) een I2C bus (vergelijkbaar met de SMB bus), in dit geval voor aansturing van de real-time clock chip. Op deze 2-pins (plus ground/voeding) multi-master bus kan je ook je eigen hardware aansluiten; het is een ideale manier om bijvoorbeeld extra I/O pinnen te krijgen met behulp van een PCF8574 chip (8 extra I/O pinnen). De basis I²C driver zit in de Debian software (zoals gebruikelijk in Linux als file driver, zie /dev/i2c-0 ). Extra I²C tools zijn te installeren via apt-get install i2c-tools .

I2C testschakeling met PCF8574AIk heb een connector aangebracht (flatcable), zie ook deze NSLU2 I²C Interface pagina (met software voorbeeld), en de NSLU2 I²C pagina. Hierop om te testen een PCF8574A (€ 2.10 bij Dick Best) met twee LEDs en een switch, zie schema hiernaast. Was nog even lastig de PCF te 'vinden' op de bus; het adres op de bus was een bit naar rechts verschoven t.o.v. de documentatie van de PCF8574A; was geloceerd op 0x38 in plaats van 0x70. Dank zij i2cdetect -r 0 (uit i2c-tools) was hij echter snel gevonden.

Met het commando i2cget 0 0x38 0xFF (ook uit i2c-tools) worden de uitgangen op 0xFF (allemaal hoog) gezet, en vervolgens teruggelezen. Afhankelijk van de toestand van de switch komt er nu 0x7F (ingedrukt) of 0xFF (los) terug. Ook een eigen simpel C programma'tje i2c_pcf8574a.c kan waarden naar de PCF sturen en teruglezen; zo kan ik eenvoudig de LEDs aan en uitschakelen en de schakelaar uitlezen.

Deze setup is de basis voor verdere besturingen, wil ook aan de slag met de 8-bit PWM led controller PCA9634. Zijn nog veel meer I²C chips (op PC borden worden bijvoorbeeld I²C temperatuursensoren gebruikt). Op de bus kunnen meerdere devices worden aangesloten (bijvoorbeeld 8 stuks 8574A, voor 64 I/O pinnen). En op de NSLU2 zijn er bijvoorbeeld al gebruikers die er een LCD display mee aansturen. Overigens, uiteindelijk is de toestand rond de led controller PCA9634 (wegens verkrijgbaarheid en hanteerbaarheid) een project op zich geworden...

Media streaming met mediatomb

Wil ook muziek naar mijn media systeem (TV) kunnen streamen; daarvoor naar mediatomb aan het kijken. Is ook beschikbaar voor de NSLU2. Nog even zoeken; configuratie staat in /etc/mediatomb/config.xml en /etc/default/mediatomb; na wijzigen herstarten met /etc/init.d/mediatomb restart.

De mediatomb web interface voor het toevoegen van media is standaard bereikbaar op poort 49152; via die interface kan je mappen toevoegen aan de data die via de streamer toegankelijk mag zijn (standaard is deze verzameling leeg). Mijn apparaat kan geen wma files aan: omzetten naar MP3 met wma2mp3. En ja, ik zie mijn audio-verzameling!

Verdere plannen

Kijken of ik de hele configuratie (flash en USB backup) op een andere NSLU2 kan zetten zonder weer 4 uur te hoeven installeren? Oops, werkte niet. Misschien toch subtiele verschillen tussen verschillende NSLU versies (denk maar aan de clock-speed).

pkg-nslu2-utils? Extra USB support?