Freitag, 21. November 2008

nwal003 [printserver unter slugos - cups]

während cups [common unix printing system] quasi out-of-the-box seit mehr als einem halben jahr bei mit unter unslung gelaufen ist, war es zeit diese software entsprechend auf slugos zu portieren. die nachteile von unslung habe ich ja bereits ausführlich erörtert, zudem wollte ich weg von dem heterogenen gemisch, hin zu einem einheitlichen standard meiner nslu2 devices.
vorab sei gesagt, daß die schwierigkeit der implementierung dieser software unter slugos lediglich darauf zu führen ist, daß unterschiedliche installations-anleitungen im internet zu verfügung stehen. es hilft hier nichts einen leitfaden für cups unter unslung oder openslug oder debian zu folgen, vielmehr sind die hinweise aller howto’s entsprechend zu beachten. im folgenden eine anleitung und eine auflistung möglicher fallen wie der druckserver unter slugos von mir implementiert wurde, mit einem augenmerk auf vorhandene anleitungen und deren entscheidenden abweichungen zu slugos.
cups steht als package [ipkg] in den meisten distributionen zur verfügung. Während aber unter unslung ein ‚ipkg install cups’ bereits das fundament darstellt, muß unter slugos zunächst einmal gepatcht werden [optware]. es gibt leider kein ‚stable package cups’, dennoch wird man auch für slugos im ‚optware feed’ fündig. cups [version 1.3.9-1] kann hier [http://ftp.easysw.com/pub/cups/1.3.9/cups-1.3.9-source.tar.bz2] downgeloadet werden. damit aber die ‚package chain’ [abhängigkeiten zu anderen packages] berücksichtigt wird, sollte zunächst ipkg einem manuellen bootstrap unterzogen werden. ipkg in der grundinstallation bietet ‚considered stable packages’ als feed an. ‚ipkg update’ hält unter /var/lib/ipkg listen der angebotenen packete zur verfügung. will man aber auf optware repositories [ /opt/lib/ipkg/lists/ ] zugreifen muß man eben ipkg patchen. die grundanleitung gibt es hier.
somit können wir von nun an lediglich durch setzten der path-variable steuern ob wir ipkg mit stable oder eben unstable [optware ] feeds ausführen wollen. beginnend mit
#export PATH=/opt/bin:/opt/sbin:$PATH
setzten wir entsprechend ipkg auf optware-feed [ /opt/bin/ipkg wird nun zuerst berücksichtigt]. weiter der anleitung folgend:
#ipkg install cups
#ipkg install cups-doc [ die statischen html-seiten des web-guis ]
die abhängigen packages libjpeg, libpng, libtiff, openssl, zlib, openldap-libs werden ohne zutun automatisch installiert! wir wechseln in das konfigurations-directory /opt/etc/cups und erkennen die entscheidende config-datei cupsd.conf . [diese ist sehr groß gehalten, und für den ersten schnellen erfolg ungeeignet – security probleme, basic authentication und location directiven werden hier zur ersten unüberwindlichen hürde !!] wir erstellen eine minimalistische cupsd.conf:

cupsd.conf

[!achtung! – es hat sich herausgestellt, daß eine default policy zieht, falls nicht bestückt wird, die seines zeichen auf basic-authentication beruht. man sieht das sehr schön, wenn man cups hochfährt im error-log.


I [21/Nov/2008:10:14:00 +0100] Creating CUPS default administrative policy:
I [21/Nov/2008:10:14:00 +0100] <Policy default>
I [21/Nov/2008:10:14:00 +0100] <Limit Send-Document Send-URI Cancel-Job Hold-Job Release-Job Restart-Job Purge-Jobs Set-
I [21/Nov/2008:10:14:00 +0100] Order Deny,Allow
I [21/Nov/2008:10:14:00 +0100] Require user @OWNER @SYSTEM
I [21/Nov/2008:10:14:00 +0100] </Limit>
I [21/Nov/2008:10:14:00 +0100] <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer Disable-Printer
I [21/Nov/2008:10:14:00 +0100] Order Deny,Allow
I [21/Nov/2008:10:14:00 +0100] AuthType Default
I [21/Nov/2008:10:14:00 +0100] Require user @SYSTEM
I [21/Nov/2008:10:14:00 +0100] </Limit>

wir wollen aber diese erste falle vermeiden und definieren eben schön eine policy mit AuthType None !]
damit ist die cupsd.conf konfiguration abgeschlossen und wir widmen uns der eigentlichen printer-installation und treiberdefinition. der mit cups mitgelieferte printers.conf in /opt/etc/cups/ weist einen hp990c drucker aus. dieser ist natürlich nicht meiner, ich verwende vielmehr einen hp deskjet f2100. wesentlich ist aber die device definition unter slugos. wir werden /dev/lp0 als standard drucker device verwenden, obwohl wir eigentlich keinen lp0 – also eine parallele schnittstelle – haben. unter unslung funktionierte derselbe drucker unter /dev/usb/lp0. für die korrekte umsetzung des notwendigen devices wird ein weiteres kernel module zuständig sein. [! achtung ! ipkg feed ist nun cross oder stable – wir entfernen /opt/bin:/opt/sbin aus dem pfad ]


#export PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
#ipkg install kernel-module-usblp
#depmod –a /lib/modules/2.6.21.7/kernel/drivers/usb/class/usblp.ko

und editieren unser printers.conf folgedermassen:
printers.conf

jetzt schreiben wir noch ein startskript damit alles richtig zusammenspielt, dabei verwenden wir das mit cups mitgelieferte template /opt/doc/cups/S88cups.
zwei kleine adaptionen sind hierbei notwendig:

  • ersetzten der printertreiber-definition
    if ( !(lsmod | grep "^printer" -q) ); then
    insmod /opt/lib/modules/printer.o
    fi

    mit siehe [ http://www.nslu2-linux.org/wiki/OpenSlug/InstallCups ]

    if ( !(lsmod | grep "^usblp" -q) ); then
    modprobe usblp
    fi

  • ein vollständiges /etc/init.d/cups.sh script erstellen
    [! Bei einem boot wird das device /dev/lp0 zurückgesetzt auf root:root – wir benötigen aber lp:users ]… somit das vollständige script
    /etc/init.d/cups.sh


und die entsprechende verlinkung
#cd /etc/rc3.d
#ln –s ../init.d/cups.sh S88cups
#ln –s ../init.d/cups.sh K11cups

wir starten cups mittels /etc/init.d/cups.sh start
und testen mit einem browser das web-gui http://nwal003:631 – die cupsoberfläche erscheint.
da ich aber primär über windows drucke, werde ich nicht auf das web-gui eingehen, es soll lediglich einen ersten eindruck ergeben.
unter windows installiere ich den druckertreiber, wir haben kein .ppd file in cups hinterlegt [der printer dient quasi als raw device]. Wir definieren ihn als gültigen tcp-netzwerkdrucker und können ab sofort die druckersteuerung vom druckmanager ausführen.

Mittwoch, 19. November 2008

nwal002 [mounting samba share mittels cifs]

nachdem ein samba server [nwal001 unter slugos] erfolgreich seine dienste anbietet, und verschiedene windows clients in meinem haushalt bereits darauf zugreifen, war es an der zeit das gemeinsame storage auch an die übrigen nslu2-devices anzubinden. meine wahl fiel, da für slugos bereits kernel-module verfügbar sind, auf cifs [common internet file system].


folgende zusätzliche überlegungen sind hierfür zu beachten
  • welches gemeinsame character set unterliegt der server-client kommunikation?
  • welche daten werden eingebunden und welcher security unterliegen diese?

somit ergibt sich folgender installationsplan:
das characterset des samba-servers [siehe /etc/samba/smb.conf] ist wie folgt definiert

# charset settings
unix charset = ISO-8859-1

damit sollte auf der client-machine [nwal002] zuminderst dieses charset als nls [national language support] kernel-module installiert werden. locale und language settings sollten entsprechend im environment gesetzt sein.

#ipkg install kernel-module-nls-iso8859-1
#export LC_ALL= de_AT.iso885915
#export LANG= de_AT.iso885915


[bem. 8859-1 ist eine untermenge von 8859-15, welches zudem noch das euro-zeichen beinhaltet…] wie die locale als solches unter slugos erzeugt wird habe ich schon in diesem thread abgehandelt.


die eigentliche träger-software [cifs] wird wie folgt installiert.
#ipkg install cifs
#ipkg install cifs-doc
#ipkg install kernel-module-cifs

weitere konfigurationen entfallen und wir können unseren ersten mount-versuch machen.
[/data wird unser mount-point, und data ist unser share am samba server]



#mkdir /data
#mount -t cifs -o username=xxxx,password=xxxx,workgroup=nwal001_smb //samba_server_ip_address/data /data

die workgroup [netbios name] kann ebenfalls aus der samba[server] konfiguration entnommen werden. im falle eines fehlers wird sowohl stdout/stderr bedient, dmesg gibt über dies entsprechende fehlermeldungen.
im success fall, kann nun ein automatismus in /etc/fstab eingeführt werden, in dem auch bereits das charset berücksichtigt ist, und der mount nach einem reboot durchgeführt wird. [eintrag innerhalb /etc/fstab]
//192.168.0.40/data /data cifs user=xxxx,password=xxxx,iocharset=iso8859-1 0 0

auf der server-seite kann man nun mittels smbstatus –v die verbindung überprüfen.

smbstatus -v


hinweis:
da die anbindung über kernel-module erfolgt [cifsoplockd], [cifsdnotifyd], [cifsd] ist ein trace mittels lsmod, depmod –a, modprobe der entsprechenden module zu empfehlen.

Freitag, 14. November 2008

nwal001 [success with slugos] – part 3

“slugos from the scratch” – vorbereitung einer nlsu2 für samba und twonkymedia server [teil 3]


  • twonkymedia installation
    die architektur spezifischen downloads findet man unter twonkymedia. wir werden den twonky server unter dem user twonky installieren für die architektur ‚arm big endian’. [tinylogin stellt das utility dar, mit welchen man user, gruppen, etc. verwaltet.]
    #ipkg install tinylogin
    #mkdir /home/twonky
    #adduser –h /home/twonky –s /bin/sh –g twonkymedia twonky
    #chown –R twonky /home/twonky

  • jetzt übrprüfen wir, ob die vorhandenen bibliotheken [gnu c library] den prerequisites gehorchen.
    #ipkg list_installed |grep –i glibc
    wir erhalten ‚glibc-dbg - 2.5-r8 - GNU C Library’, somit können wir folgendes package downloaden.
    #su - twonky
    #wget http://www.twonkyvision.com/Download/4.4.9/twonkymedia-armeb-glibc-2.2.5-20081002.zip
    #unzip twonkymedia-armeb-glibc-2.2.5-20081002.zip

  • im ~/twonkymedia.sh script muss lediglich folgendes angepasst werden...
    WORKDIR1=“/home/twonky“
    PIDFILE=“/home/twonky/twonky.pid“

  • jetzt können wir den server das erste mal starten [!immer mit usage - full qualified path]
    #/home/twonky/twonkymedia.sh start
    #ps –fu twonky
    #netstat –an | grep 9000
    letztere 2 commands überprüfen den erfolg des serverstarts [der twonkyserver lauscht default mäßig auf port 9000]

  • die eigentliche konfiguration des servers erflogt nun bequem im browser. [ http://your_slug_ip:9000/config ]
    registrationskey eingeben bzw. unter dem menüpunkt freigaben [sharing / je nach gewählter sprache] kann man die medienverzeichnisse, welche gescannt werden angeben. der default ist das wurzelverzeichnis / . achtung: der user twonky muß lese-rechte auf dieses verzeichnis [bzw. unterverzeichnisse] haben, sonst wird nichts gefunden.

  • einrichtung des automatischen startes bei boot
    unter /etc/init.d ein wrapper script twonkymedia.sh einrichten [sudo]
    #!/bin/sh
    case "$1" in
    'start')
    sudo -u twonky /home/twonky/twonkymedia.sh start
    ;;
    'stop')
    sudo -u twonky /home/twonky/twonkymedia.sh stop
    ;;
    'restart')
    sudo -u twonky /home/twonky/twonkymedia.sh restart
    ;;
    'status')
    sudo -u twonky /home/twonky/twonkymedia.sh status
    ;;
    esac

    dannach
    #cd /etc/rc3.d
    #ln –s ../init.d/twonkymedia.sh S44twonky
    #ln –s ../init.d/twonkymedia.sh K46twonky

  • als twonkymedia – client läuft in meinem badezimmer ein noxon i-radio



enjoy :)

Donnerstag, 13. November 2008

nwal001 [success with slugos] – part 2

“slugos from the scratch” – vorbereitung einer nlsu2 für samba und twonkymedia server [teil 2]


  • die richtige timezone setzten
    #ipkg install tzdata
    #ipkg install tzdata-europe
    #ln -s /usr/share/zoneinfo/Europe/Vienna /etc/localtime
    #unset TZ

  • locale specific
    samba speichert default-mässig dateien im utf8-format, daher möchte ich auch dieses format als locale specific haben. [da der österreichische zeichensatz bereits im ISO-8859-1 abgebildet ist, soll lediglich die locale de_AT mit ISO-8859-15 gebaut werden]
    #ipkg install glibc-localedata-en-us
    #ipkg install glibc-localedata-de-at+euro
    #ipkg install glibc-charmap-iso-8859-15
    #ipkg install glibc-charmap-utf-8
    #mkdir /usr/lib/locale
    #localedef -i de_AT -f ISO-8859-15 de_AT

  • install additional software packages [crontab, timeserver, perl]
    #ipkg install cron
    #ipkg install ntp
    #ipkg install perl
    perl unter slugos ist ein kapitel für sich und ich werde einen eigenen blog darüber verfassen.

  • ein bißchen memory sparen. wir haben kein serielles terminal angeschlossen, da die slug auch keine serielle schnittstelle hat. wir können problemlos /sbin/getty killen. auskommentieren von S:2345:respawn:/sbin/getty 115200 ttyS0 in /etc/inittab
    #telinit q

  • samba installation und anpassen der konfiguration /etc/samba/smb.conf
    #ipkg install samba
    #ipkg install cifs-doc
    #ipkg install cifs
    meine veränderten settings zum default template

    [global]
    workgroup = myWorkGroupName
    server string = myServerString
    security = user
    hosts allow = myNetwork [192.168.0 127.], also mein gesamtes 192.168.0 netz und localhost
    load printers = no
    printcap name = /dev/null
    guest account = guest
    local master = no
    unix charset = ISO-8859-1

    … und dann meine share definitions [hier eines exemplarisch]
    [p003876]
    comment = p003876's home
    valid users = p003876
    path = /home/p003876
    public = no
    writable = yes
    printable = no

    achtung: da security user, muß der user sowohl betriebssystemseitig [/etc/passwd] als auch im samba [/usr/bin/smbpasswd] angelegt sein.

    unter /etc/init.d liegt das controlscript samba, das mittels stop | start | etc. gesteuert werden kann.



nwal001 [success with slugos] - part 1


“slugos from the scratch” – vorbereitung einer nlsu2 für samba und twonkymedia server [teil 1]

unslung war dennoch nicht meine wahl für meine erste slug, denn diese sollte zuminderst mehr als 2 festplatten verwalten können [zumal ein port bereits von einem memory stick, auf dem die root partition liegt, belegt ist]. Meine wahl fiel auf slugos/be [nachfolger von openslug], da hier bereits eine unterstützung von usb2.0 hubs im kernel [linux 2.6.21.7] gewährleistet ist. So ergibt sich folgendes hardware-layout für die portzuteilung der nlsu.< br/>
disk2 port: usb-stick, 8gb, transcend jetflash v10 [r:10mb/s, w:3mbyte/s]
disk1 port: dlink dub-h7/e hub


die installations prozedur im detail:

  • beginnend mit #upslug2 wird die firmware slugos 4.8-beta release geflasht. [ssh ist bereits teil der firmware]

  • nach erfolgtem reboot – partitionierung des boot-devices [memory stick an port2]
    /dev/sda1 wird träger des rootfs, /dev/sda2 wird swap bereich, /dev/sda3 user-data
    fdisk


  • disk initialisierung und rootfs-migration
    #mkfs.ext3 /dev/sda1
    #mkswap /dev/sda2
    #swapon /dev/sda2
    #mkfs.ext3 /dev/sda3
    #turnup memstick –i /dev/sda1 –t ext3
    [die option memstick wurde aus dem grunde gewählt, damit keine unnötigen logging zugriffe i/o waits durch den langsamen memory stick verursachen. das /var und /tmp filesystem liegt zur gänze im ram bereich!]

  • editieren der /etc/fstab
    fstab


  • reboot – ein vollständiges slugos system steht zur verfügung, und additional software-packages können installiert werden.

  • anpassung /etc/hosts und /etc/resolv.conf

  • installation von udev [automatisches mounten von usb-devices hinter dem usb hub]
    #ipkg install udev
    [usb-hub wird an port disk1 angehängt, jetzt kann ich dahinter bis zu sieben usb devices verwalten. 3 vorhanden ext3-formatierte hdisks werden attached.]
    um den nachteil vom automatischen mount [zuteilung device und fs-mountpoint] und deren willkürlichkeit zu umgehen, entscheide ich mich für den einsatz von uuids.

  • #/lib/udev/vol_id –u devicename
    liefert eine unique uuid, die im /etc/fstab berücksichtigt wird. das automatische mounten mittels eintrag von sd[b-z][1-9]$ in /etc/udev/mount.blacklist verhindern. somit ergibt sich eine starre zuordnung von /dev/sdb1, /dev/sdc1 und /dev/sdd1 an die mountpoints /backup, /multimedia und /data. damit ergibt sich die neue fstab
    uuid

nslu2 firmware aspekte [linksys vs. unslung]

wie verwalte ich meine usb festplatten?


wir haben jetzt ein computer device mit einem schnellen 266 mhz prozessor, und mit dem vorhandenen microcode v2.3r63/a5 (etsi) von linksys läßt sich sehr schnell einen gewissen erfolg erzielen, jedoch stoßt man ebenso schnell an die grenzen dieses kernels. der hauptgrund sich auf die suche einer alternativen firmware zu begeben war aber das black-box modell von linksys, das sich gewissermassen hinter einer web-applikation versteckt. die festplatten können zwar formatiert werden [partitionen werden nicht unterstützt], die wahl des zugrunde liegenden filesystems wird schon wieder kompliziert [fat, fat32, ntfs, ext2, ext3, raiserfs, etc...]. logische datenträger-verwaltung [raid verbände] werden zur gänze ignoriert. die verwaltung des built-in samba und das dahinterliegende benutzerschema mehr als kompliziert.


irgendwann stößt man auf nslu2-linux.org, das forum schlecht hin, wenn es um die slug geht, und schon vollziehe ich mein erstes firmware-flash [unslung 6.8 beta]. Die funktionalität des linksys-kernels bleibt bei diesem microcode vollständig erhalten, die zu erwähnenden additonal capabilities sind:


  • ntfs volumes werden unterstützt
  • ext3 filesysteme an beiden usb ports
  • ein gewisser support von usb hubs [ubs 1.0]
  • möglichkeit zur installation von samba 3
  • software-package installation [ipkg]
  • telnet zugang zur slug

auf grund der internen 32mbyte speicher begrenzung stellt sich sehr schnell die frage, wie und wann die rootfs [das, dem kernel zugrunde liegende root filesystem] auf einen externen datenträger [usb memory stick, hard disk, nfs, etc.] ausgelagert werden kann. die neu geflashte unslung firmware bietet hier bereits abhilfe. usb-stick an port2 angeschlossen, formatiert [ext3 fs], telnet aktiviert [http://your_slug_ip/Management/telnet.cgi] und schon gelangt man mittels telnet-client als user root [pwd: uNSLUng] auf die box. endlich wird es spannend, unter /sbin liegt ein shell script namens unsling, denn so wird auch der vorgang des auslagerns der rootfs genannt. dem trivialen argument [disk1/2 – wohin soll ausgelagert werden] kann auch ein [-nopw] folgen, das eine mandatory änderung des root passwords im script ablauf verhindert. „/sbin/unsling disk2“ wird in meinem fall ausgeführt, das im memory liegende jffs2 [journalling flash file system version 2] wird an /initrd unter /dev/sda1 gemountet. nach erfolgtem reboot erkennt man zunächst unter http://your_slug_ip einen status in der fuß-zeile [unslung to disk2, /dev/sda1] und im header die aktuelle firmare version [v2.3r63-uNSLUng-6.8-beta]. das offensichtlich neue unslung logo erhält man auch bereits ohne auf ein externes device ungeslingt zu haben.


erneut wird telnet aktiviert und nach erfolgtem root zustieg wird als erstes software package ssh installiert. „ipkg install openssh“ – wir wollen in der zukunft keinen browser mehr öffnen müssen und den zugang zur slug lediglich mittels ssh abwickeln.


network storage link for usb 2.0 disk drives [nslu2]



in der zwischenzeit verlasse ich mich bereits auf die stabilität und zuverlässigkeit von drei dieser kleinen devices. anfänglich als billiges nas zur verwaltung meiner daten gedacht, stoßt man ziemlich schnell an die grenzen der out-of-the-box firmware von linksys. zu viele verlockende software packages werden in alternativen firmware kernels propagiert, zumal ein 24x7 betrieb wirtschaftlich deutlich kostengünstiger abschneidet als ein fetter server. mit einem stromverbrauch von gerade mal 5-20 watt [je nach angeschlossener peripherie ~ drucker, festplatten, usb-devices, etc.] kostet der einsatz einer box gerade mal ~35 euro per anno. im folgenden die technischen success stories der devices.