|
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 (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.
- 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)
-
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
-
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 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 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...
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; 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. Ben aan het denken om hiervoor een proxy
op mijn NSLU te installeren (want mijn verbinding thuis vertrouw ik vrij
behoorlijk), zodat ik met SSH vanaf mijn vakantieplek een versleutelde tunnel
naar thuis kan opzetten, en dan van daar uit verder kan surfen. Dit schijnt te
kunnen 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.
Uitgegaan van de debian-installatie als beschreven op squid (met squid
2.7.3), maar wel met een aantal aanpassingen. Zo heb ik de cache naar de
data-schijf verhuisd (/mnt/data/squid/cache, owner
proxy:proxy, en de oude weggooien: rm -R
/var/spool/squid), het cache-geheugen van 8 naar 4 MB, etc. Squid
stoppen (/etc/init.d/squid stop), cache verhuizen (squid
-z), en 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).
Enige probleem: Android (op mijn phone) kent geen proxies... 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. Het idee is eerst een veilige
SSH tunnel op te zetten
(-L3128:localhost:3128) met ConnectBot, en over die tunnel dan de
proxy aan te spreken...
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 .
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 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?
|