Handleiding NSLU2 met Debian

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, en met SSH ook een veilige centrale gateway voor remote access vanaf het onveilige internet.

New! I2C uitbreidingspoorten (I/O)

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

De software daarop heb ik vervangen door een 'open versie', de linux uNSLUng variant. uNSLUng is helaas nogal een gestripte linux, en ik ben nu aan het experimenteren met 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 wel mee werk.

Nadelen zijn er ook, er is bijvoorbeeld niet meer de gebruiksvriendelijke web-based LinkSys interface, je moet het beheer op de linux-manier met SSH en een command prompt (shell) doen. Ook is het interne geheugen beperkt (32 Mbyte), dus het is een beetje oppassen wat je er allemaal op zet.

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 houd ik vrij voor de USB harde schijf waar de files op komen (Updated! 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 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 communitie 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!)
  3. Installing Debian on the Linksys NSLU2, ook een goed overzicht van de installatie
  4. 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)
  5. Debian NSLU2 post-install part 1, wat te doen als je debian op je NSLU2 geïnstalleerd hebt
  6. 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
  7. Debian on a Linksys NSLU2 ('Slug'), ook een overzicht met installatie en tips
  8. Debian on NSLU2 - part 3, installeren van een SAMBA file server, web server, etc
  9. Linksys NSLU2 - Network Storage Link for USB 2.0 Disk Drives heeft ook veel tips
  10. De NSLU2 DEBIAN GUIDE SOURCE 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 deel van de installatie wordt gedownload vanaf 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, 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: rebooten (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 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 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.

  • 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

Updated! 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 geen schrijfacties op swap (netjes), een paar op /boot (??, remount met noatime), en voor het plaatsen van de /var/log files best veel acties op de normale '/' werkpartitie (zo'n 10K per week).

Met de bovengenoemde tips 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 kopiëer 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 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 label (/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).

Disk er in (USB poort met label 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 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 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...

Samba File server

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

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 (nmbd en smbd).

Vergeet niet de (in linux bestaande) users aan samba toe te voegen met smbpasswd -a <user>

Add Linux user:
useradd -m <user>; usermod -g users <user>; passwd <user>; chfn -f "full name" <user>

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

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:

[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/

En, ik kan er nu vanuit Windows al bij (als \\192.168.1.9\shared, of als \\netdisk2\shared). Goed, moet nog wat netter geconfigureerd (zie ook bijvoorbeeld \\netdisk2\printers, moet nog verwijderd), maar het werkt.

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. 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.

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. Zie mijn deel 1 over het opzetten van de SSH server (en gebruik van key files in plaats van passwords en zo). Wel wil ik vermoedelijk 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).

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 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 uizetten 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).

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.

X server forwarding via SSH gateway

Dit hoofdstuk is verhuisd naar mijn SSH pagina...

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

Updated! 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

New! 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 doe 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 bezig 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. Updated! ⇒ en uiteindelijk is de toestand rond de led controller PCA9634 (wegens verkrijgbaarheid) een project op zich geworden...

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?

Valid HTML 4.01 Transitional
Top of page Opmerkingen, commentaar, feedback: mail naar , of stuur een one-liner via:
Je email/naam:  Je reactie: 
Nuttige site? Antwoorden gevonden? Zet dan een link naar mijn site op je eigen site, hebben anderen er misschien ook wat aan!