|
Handleiding NSLU2 met Debian
Deel 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.
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 ( 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.
- 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)
-
Debian installeren op de Linksys NSLU 2 met Windows XP/Vista/7 (in het
Nederlands!)
- Installing
Debian on the Linksys NSLU2, ook een goed overzicht van de
installatie
-
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)
- Debian
NSLU2 post-install part 1, wat te doen als je debian op je NSLU2
geïnstalleerd hebt
- 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
- Debian
on a Linksys NSLU2 ('Slug'), ook een overzicht met installatie en
tips
- Debian on
NSLU2 - part 3, installeren van een SAMBA file server, web
server, etc
-
Linksys NSLU2 - Network Storage Link for USB 2.0 Disk Drives heeft ook
veel tips
- De NSLU2 DEBIAN GUIDE
SOURCE met diverse guides, zoals ntfs-3g
Met deze sites moet het toch gaan lukken.

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
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
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 .
Ik 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. ⇒ 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?
|