L'idée de se projet a débuté par le bonheur d'avoir un serveur silencieux. Dans une pièce ouverte ça serait l'idéal. Puisque l'utilisation de mon serveur est pour un usage personnel (surtout pour moi). J'ai donc décidé de trouver les composants qui répondront le plus possible à mes besoins immédiats. La puissance du processeur n'étant pas vraiment un pré-requis, j'ai décidé d'utiliser un NSLU2 flashé avec un firmware différent de celui qui vient de la compagnie Linksys (Cisco).

Comme firmware de rechange, j'ai choisis Debian-NSLU2 qui offre le plus d'applications pré-compilées et dont l'installation est assez simple grâce à l'installateur Debian. Pour fin de comparaison avec d'autres firmwares consulter cette page -> NSLU2 Firmware Comparaison.

Voici une petite liste de mes besoins (services) :

  • Proxy web par tunnel SSH avec Squid
  • Client P2P, probablement rtorrent
  • Partage de fichiers multimédias, probablement avec Firefly Media Server (anciennement mt-daapd)
  • Accès aux partitions grace à Samba
  • Système de sauvegarde (backup)
  • Serveur web, probablement lighttpd
  • Depot syslog ?

Avoir un serveur qui fonctionne 24 heures sur 24, silencieux (pas de pièces mécanique : ventilateur, disque dur) et qui dispose de plusieurs gigs d'espace de stockage (plus de 100 gigs) est irréalisable sans avoir beaucoup de $$$.

J'ai donc dû faire quelques compromis. J'ai installé le système d'exploitation sur une clé USB de 2 gigs. Le proxy web qui doit toujours être fonctionnel (24/7). Pour le P2P, la musique et les copies de sauvegardes, les données seront mises sur un disque dur externe connecté par USB. De cette façon, le disque pourra être arrêté au besoin pour retrouver le silence. Je vais par contre devoir avoir une procédure d'arrêt des services qui écrivent sur ce disque externe.


Autres pages en lien avec ce texte sur le site :


1. Matériel

  • NSLU2
  • Clé USB 2 gigs
  • Boitier USB pour disque dur
  • Hub USB (optionnel)
  • Fil série + circuit RS-232 (optionnel)

2. Modifications matériels

Les possibilités de modifications matériels sur le NSLU2 sont nombreuses. Le port série et augmenter la vitesse du processeur n'en sont que deux faciles à exécuter et apporte leurs avantages. Un autre qui serait très utile, mais beaucoup plus complexe à faire est l'ajout de mémoire vive (RAM). Avec 32 megs, cette limite est assez rapidement atteinte et la mémoire cache (swap) est formement utilisé. Je ne planifie pas pour le moment de faire cette dernière.

2.1 Port série

Pour moi l'ajout d'un connecteur série est très pratique pour avoir le plein contrôle du NSLU2 au démarrage (boot).

Fait à documenter

2.2 Dé-under-clocking

Voici les informations liées au processeur une fois la résistance dessoudée :

# cat /proc/cpuinfo
Processor       : XScale-IXP42x Family rev 1 (v5l)
BogoMIPS        : 266.24
Features        : swp half fastmult edsp
CPU implementer : 0x69
CPU architecture: 5TE
CPU variant     : 0x0
CPU part        : 0x41f
CPU revision    : 1
Cache type      : undefined 5
Cache clean     : undefined 5
Cache lockdown  : undefined 5
Cache format    : Harvard
I size          : 32768
I assoc         : 32
I line length   : 32
I sets          : 32
D size          : 32768
D assoc         : 32
D line length   : 32
D sets          : 32

Hardware        : Linksys NSLU2
Revision        : 0000
Serial          : 0000000000000000

En parlant du processeur, on pense immédiatement à la charge que le système peut supporter (load average). Celle-ci peut être visualisée avec les commandes top ou uptime. Au début, je trouvais anormale que la charge sous toujours de 1.00 même s'il n'y a aucun processus qui utilise le processeur du NSLU2.

La raison et le processus en cause est celui-ci :

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1622 root      15   0     0    0    0 D  0.0  0.0   0:00.10 IxOsal 1

Ce processus est le pilote ethernet propriétaire du NSLU2. Celui-ci est en statut "D" *(uninterruptible sleep). On peut donc considérer ça normal et impossible à corriger. J'ai trouvé l'information sur cette liste de diffusion.

2.3 Démarrage automatique

À faire

3. Mise à jour du firmware

Le firmware de Linksys ne permet pas d'utiliser adéquatement le NSLU2 à sa pleine valeur. Une mise à jour s'impose d'elle même.

3.1 Téléchargement du firmware

Pour télécharger le firmware précompilé, il faut aller à l'adresse http://www.slug-firmware.net/ et télécharger le firmware "Debian/NSLU2 (debian-installer)", cliquer sur le lien "binaries".

Le fichier compressé devrait être nommer de cette façon : debian-etch-rc1-20061102.zip. Il faut ouvrir l'archive et il aura un fichier de licence et le firmware qui nous intéresse : di-nslu2.bin

3.2 Par interface web

À faire

3.3 En console et avec upslug2

Selon moi, il est fortement recommandé d'utiliser la console ou au moins de voir se qui s'y affiche. Les attentes sont plus courtes quand on voit ce qui se passe sur la console.

Il faut commencer par installer upslung2. Voici comment faire sur une distribution Gentoo :

# echo "dev-embedded/upslug2 ~*" >> /etc/portage/package.keywords
# emerge -av dev-embedded/upslug2
[...]

Le echo permet d'enlever le filtre (mask) qui empêche l'installation de upslug2.

Un petit test pour voir si le binaire compilé fonctionne et qu'il ne détecte aucun NSLU2 en mode "upgrade" sur le réseau.

# /usr/bin/upslug2
[no NSLU2 machines found in upgrade mode]

Voici comment mettre le NSLU2 en mode "upgrade" en utilisant la console

Ethernet eth0: MAC address 00:13:10:d8:f9:99
IP: 192.168.0.1/255.255.255.0, Gateway: 192.168.0.1
Default server: 0.0.0.0, DNS server IP: 0.0.0.0

RedBoot(tm) bootstrap and debug environment [ROMRAM]
Red Hat certified release, version 1.92 - built 15:16:07, Feb  3 2004

Platform: IXDP425 Development Platform (XScale)
Copyright (C) 2000, 2001, 2002, Red Hat, Inc.

RAM: 0x00000000-0x02000000, 0x000723a0-0x01ff3000 available
FLASH: 0x50000000 - 0x50800000, 64 blocks of 0x00020000 bytes each.
== Executing boot script in 2.000 seconds - enter ^C to abort
^C
RedBoot> upgrade

Maintenant, il faut vérifier si upslung2 détecte le NSLU2 qui est en mode "upgrade" (à partir de l'autre ordinateur).

# /usr/bin/upslug2
NSLU2     00:13:10:d8:f9:99 Product ID: 1 Protocol ID: 0 Firmware Version: R23V63 [0x2363]

Maintenant, on "flash" le NSLU2.

# /usr/bin/upslug2 -i di-nslu2.bin
NSLU2     00:13:10:d8:f9:ed Product ID: 1 Protocol ID: 0 Firmware Version: R23V63 [0x2363]
Upgrading LKGD8F9ED 00:13:10:d8:f9:99
    . original flash contents  * packet timed out
    ! being erased             - erased
    u being upgraded           U upgraded
    v being verified           V verified

  Display:
    <status> <address completed>+<bytes transmitted but not completed>
  Status:
    * timeout occured          + sequence error detected

  7fffff+000000 ...VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
Rebooting... done

Si tout c'est bien passé, le NSLU2 va redémarrer automatiquement et après quelques minutes d'attente, il sera possible de s'y connecter avec un client SSH pour continuer avec l'installation de Debian.

4. Debian installer

L'installation est assez simple (voir cette page pour avoir une idée des étapes à suivre. L'installation est aussi assez longue et prend plusieurs heures (surtout si votre NSLU2 fonctionne à 133 Mhz). Lors de l'installation j'ai sélectionné toutes les options par défaut qui m'étaient offerte. Ma seule erreur a été pour le partitionnement de la clé USB. Par défaut, la valeur attribuée à la partition pour la swap était trop petite (certaines applications sont très gourmandes).

Normalement, la taille de la swap doit être environ le double que la mémoire vive (RAM), mais dans le cas du NSLU2 les 32 megs qui lui sont attribués ne sont pas suffisantes pour mes besoins logiciel. J'ai dû l'augmenter en utilisant gparted. Pour cela j'ai connecté la clé USB sur mon portable pour redimensionner la partition pour la swap à 250 megs (environ 78 megs par défaut)

4.1 Démarrage après installer de Debian

Please stand by while rebooting the system.
                                           Restarting system.
.
+Ethernet eth0: MAC address 00:13:10:d8:f9:ed
IP: 192.168.0.1/255.255.255.0, Gateway: 192.168.0.1
Default server: 0.0.0.0, DNS server IP: 0.0.0.0

RedBoot(tm) bootstrap and debug environment [ROMRAM]
Red Hat certified release, version 1.92 - built 15:16:07, Feb  3 2004

Platform: IXDP425 Development Platform (XScale)
Copyright (C) 2000, 2001, 2002, Red Hat, Inc.

RAM: 0x00000000-0x02000000, 0x000723a0-0x01ff3000 available
FLASH: 0x50000000 - 0x50800000, 64 blocks of 0x00020000 bytes each.
== Executing boot script in 2.000 seconds - enter ^C to abort
RedBoot> boot;exec 0x01d00000
have eRcOmM
copy kernel code from flash to RAM
copy ramdisk file from flash to RAM
run kernel
Using base address 0x01d00000 and length 0x0001ffe0


APEX Boot Loader 1.4.7 -- Copyright (c) 2004,2005,2006 Marc Singer

APEX comes with ABSOLUTELY NO WARRANTY.  It is free software and you
are welcome to redistribute it under certain circumstances.
For details, refer to the file COPYING in the program source.

  apex => mem:0x00200000+0xa230   (41520 bytes)
  env  => nor:0x7c000+15k         (no-write)

Use the command 'help help' to get started.

# copy -s fis://kernel 0x00008000
1441760 bytes transferred
# copy -s fis://ramdisk 0x01000000
6291440 bytes transferred
# wait 10 Type ^C key to cancel autoboot.
Type ^C key to cancel autoboot.
# boot
ATAG_HEADER
ATAG_MEM: start 0x00000000  size 0x02000000
ATAG_CMDLINE: (55 bytes) 'console=ttyS0,115200 rtc-x1205.probe=0,0x6f noirqdebug'
ATAG_INITRD2: start 0x01000000  size 0x00400000
ATAG_END
Booting kernel at 0x00008000...
Uncompressing Linux......................................... done, booting the kernel.
Linux version 2.6.17-2-ixp4xx (Debian 2.6.17-9) (waldi@debian.org) (gcc version 4.1.2 
  20060901 (prerelease) (Debian 4.1.1-13)) #1 Thu Sep 14 13:29:06
CPU: XScale-IXP42x Family [690541f1] revision 1 (ARMv5TE)
Machine: Linksys NSLU2
Memory policy: ECC disabled, Data cache writeback
CPU0: D VIVT undefined 5 cache
CPU0: I cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
CPU0: D cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
Built 1 zonelists
Kernel command line: console=ttyS0,115200 rtc-x1205.probe=0,0x6f noirqdebug
PID hash table entries: 256 (order: 8, 1024 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory: 32MB = 32MB total
Memory: 25876KB available (1876K code, 480K data, 88K init)
Security Framework v1.0.0 initialized
SELinux:  Disabled at boot.
Capability LSM initialized
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
checking if image is initramfs... it is
Freeing initrd memory: 4096K
NET: Registered protocol family 16
IXP4xx: Using 16MiB expansion bus window size
PCI: IXP4xx is host
PCI: IXP4xx Using direct access for memory space
PCI: bus0: Fast back to back transfers disabled
dmabounce: registered device 0000:00:01.0 on pci bus
dmabounce: registered device 0000:00:01.1 on pci bus
dmabounce: registered device 0000:00:01.2 on pci bus
NET: Registered protocol family 2
IP route cache hash table entries: 256 (order: -2, 1024 bytes)
TCP established hash table entries: 1024 (order: 0, 4096 bytes)
TCP bind hash table entries: 512 (order: -1, 2048 bytes)
TCP: Hash tables configured (established 1024 bind 512)
TCP reno registered
NetWinder Floating Point Emulator V0.97 (double precision)
audit: initializing netlink socket (disabled)
audit(7.770:1): initialized
VFS: Disk quotas dquot_6.5.1
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
JFFS2 version 2.2. (NAND) (C) 2001-2003 Red Hat, Inc.
Initializing Cryptographic API
io scheduler noop registered
io scheduler anticipatory registered (default)
io scheduler deadline registered
io scheduler cfq registered
IXP4xx Watchdog Timer: heartbeat 60 sec
Serial: 8250/16550 driver $Revision: 1.90 $ 2 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0xc8000000 (irq = 15) is a XScale
serial8250.0: ttyS1 at MMIO 0xc8001000 (irq = 13) is a XScale
RAMDISK driver initialized: 16 RAM disks of 8192K size 1024 blocksize
IXP4XX-Flash.0: Found 1 x16 devices at 0x0 in 16-bit bank
 Intel/Sharp Extended Query Table at 0x0031
Using buffer write method
cfi_cmdset_0001: Erase suspend on write enabled
Searching for RedBoot partition table in IXP4XX-Flash.0 at offset 0x7e0000
6 RedBoot partitions found on MTD device IXP4XX-Flash.0
Creating 6 MTD partitions on "IXP4XX-Flash.0":
0x00000000-0x00040000 : "RedBoot"
NSLU2 MAC: 00:13:10:d8:f9:ed
0x00040000-0x00060000 : "SysConf"
0x00060000-0x00080000 : "Loader"
0x00080000-0x001e0000 : "Kernel"
0x001e0000-0x007e0000 : "Ramdisk"
0x007e0000-0x00800000 : "FIS directory"
mice: PS/2 mouse device common for all mice
i2c /dev entries driver
x1205 0-006f: chip found, driver version 1.0.7
x1205 0-006f: rtc core: registered x1205 as rtc0
NET: Registered protocol family 26
TCP bic registered
NET: Registered protocol family 1
NET: Registered protocol family 17
x1205 0-006f: setting the system clock to 2000-12-28 10:21:35 (977998895)
Freeing init memory: 88K
Loading, please wait...
Begin: Loading essential drivers... ...
Done.
Begin: Running /scripts/init-premount ...
usbcore: registered new driver usbfs
usbcore: registered new driver hub
PCI: enabling device 0000:00:01.2 (0140 -> 0142)
ehci_hcd 0000:00:01.2: EHCI Host Controller
ehci_hcd 0000:00:01.2: new USB bus registered, assigned bus number 1
ehci_hcd 0000:00:01.2: irq 26, io mem 0x48002000
ehci_hcd 0000:00:01.2: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 5 ports detected
PCI: enabling device 0000:00:01.0 (0140 -> 0142)
ohci_hcd 0000:00:01.0: OHCI Host Controller
ohci_hcd 0000:00:01.0: new USB bus registered, assigned bus number 2
ohci_hcd 0000:00:01.0: irq 28, io mem 0x48000000
usb usb2: configuration #1 chosen from 1 choice
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 3 ports detected
PCI: enabling device 0000:00:01.1 (0140 -> 0142)
ohci_hcd 0000:00:01.1: OHCI Host Controller
ohci_hcd 0000:00:01.1: new USB bus registered, assigned bus number 3
ohci_hcd 0000:00:01.1: irq 27, io mem 0x48001000
usb 1-1: new high speed USB device using ehci_hcd and address 2
usb usb3: configuration #1 chosen from 1 choice
hub 3-0:1.0: USB hub found
hub 3-0:1.0: 2 ports detected
usb 1-1: configuration #1 chosen from 1 choice
SCSI subsystem initialized
Initializing USB Mass Storage driver...
scsi0 : SCSI emulation for USB Mass Storage devices
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
Done.
Begin: Mounting root file system... ...
Begin: Running /scripts/local-top ...
Loading Intel IXP400 ethernet driver
ixp400: module license 'unspecified' taints kernel.
ixp400_eth: no version for "ixQMgrInit" found: kernel tainted.
ixp400_eth: Initializing IXP400 NPE Ethernet driver software v. 1.5
ixp400_eth: CPU clock speed (approx) = 133 MHz
[message] ixEthMiiPhyScan, Mii 1: Mii PHY ID 00008201
  Vendor: QUANTUM   Model: SIROCCO1700A      Rev: A01.
  Type:   Direct-Access                      ANSI SCSI revision: 00
SCSI device sda: 3335472 512-byte hdwr sectors (1708 MB)
sda: Write Protect is off
sda: assuming drive cache: write through
SCSI device sda: 3335472 512-byte hdwr sectors (1708 MB)
sda: Write Protect is off
sda: assuming drive cache: write through
 sda: sda1 sda2 < sda5 >
sd 0:0:0:0: Attached scsi disk sda
ixp400_eth: Found PHY 0 at address 1
ixp400_eth: ethernet 0 using NPEB and the PHY at address 1
ixp400_eth: Use MAC address 00:13:10:d8:f9:ed for port 0
Done.
Begin: Running /scripts/local-premount ...
Done.
kjournald starting.  Commit interval 5 seconds
EXT3-fs: mounted filesystem with ordered data mode.
Begin: Running /scripts/local-bottom ...
Done.
Done.
Begin: Running /scripts/init-bottom ...
Done.
INIT: version 2.86 booting
Starting the hotplug events dispatcher: udevd.
Synthesizing the initial hotplug events...done.
Waiting for /dev to be fully populated...done.
Activating swap...Adding 80284k swap on /dev/sda5.  Priority:-1 extents:1 across:80284k
done.
Checking root file system...fsck 1.40-WIP (02-Oct-2006)
/dev/sda1: clean, 25544/198016 files, 132890/395592 blocks
done.
EXT3 FS on sda1, internal journal
Cleaning up ifupdown....
Loading modules...done.
Loading device-mapper supportdevice-mapper: 4.6.0-ioctl (2006-02-17)
  initialised: dm-devel@redhat.com
.
Checking file systems...fsck 1.40-WIP (02-Oct-2006)
done.
Setting kernel variables...done.
Mounting local filesystems...done.
Activating swapfile swap...done.
Setting up networking....
Configuring network interfaces...done.
Starting portmap daemon....
Setting the system clock again..
Cannot access the Hardware Clock via any known method.
Use the --debug option to see the details of our search for an access method.
INIT: Entering runlevel: 2
Starting system log daemon: syslogd.
Starting kernel log daemon: klogd.
Starting portmap daemon...Already running..
Starting MTA: exim4.
Starting printer spooler: lpd.
Starting internet superserver: inetd.
Starting OpenBSD Secure Shell server: sshdNET: Registered protocol family 10
lo: Disabled Privacy Extensions
IPv6 over IPv4 tunneling driver
.
Starting NFS common utilities: statd.
Starting deferred execution scheduler: atd.
Starting periodic command scheduler: crond.

Debian GNU/Linux 4.0 slug ttyS0

slug login:

5. Configuration de base

Avant de débuter avec les configuratons de base au système d'exploitation et l'ajout de quelques applications voici l'espace utilisée par l'installation de base :

Taille après installation

slug:/# df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1              1557464    506780    971568  35% /
udev                     10240        28     10212   1% /dev
devshm                   15040         0     15040   0% /dev/shm

5.1 Hostname

Si le nom du serveur n'est pas le bon, il faut le changer dans les fichiers /etc/hostname et /etc/hosts

5.2 Changement du groupe (optionnel)

Lors de l'installation de Debian, l'usager créé (plec dans mon cas) se voit attribuer le groupe plec. Je préfère que mon usager fasse partie du groupe users (et les prochains utilisateurs aussi).

Il suffit de modifier le groupe de l'usager dans /etc/passwd de 1000 à 100:

plec:x:1000:100:plec,,,:/home/plec:/bin/bash

5.3 Mise à jour de apt-get

  • Pour être certain que le dépot et le cache d'apt-get sont synchro un petit apt-get update va faire le travail.

Note: Ajouter non-free dans /etc/apt/sources.list (j'en ai eu besoin pour un firmware de clé USB réseau)

telephone:~# apt-get update
Get:1 http://security.debian.org etch/updates Release.gpg [189B]
Get:2 http://ftp.gtlib.gatech.edu etch Release.gpg [189B]
Get:3 http://security.debian.org etch/updates Release [24.3kB]
Hit http://ftp.gtlib.gatech.edu etch Release
Err http://ftp.gtlib.gatech.edu etch Release

Ign http://security.debian.org etch/updates Release
Get:4 http://ftp.gtlib.gatech.edu etch Release [74.4kB]
Ign http://security.debian.org etch/updates/main Packages/DiffIndex
Ign http://security.debian.org etch/updates/main Sources/DiffIndex
Hit http://security.debian.org etch/updates/main Packages
Hit http://security.debian.org etch/updates/main Sources
Ign http://ftp.gtlib.gatech.edu etch Release
Hit http://ftp.gtlib.gatech.edu etch/main Packages/DiffIndex
Get:5 http://ftp.gtlib.gatech.edu etch/main Sources/DiffIndex [2023B]
Fetched 101kB in 17s (5805B/s)
Reading package lists... Done
W: GPG error: http://security.debian.org etch/updates Release: Unknown error executing gpgv
W: GPG error: http://ftp.gtlib.gatech.edu etch Release: Unknown error executing gpgv
W: You may want to run apt-get update to correct these problems

5.4 Date et heure

Si on vérifie la date, on voit rapidement que ce n'est pas la bonne qui est affichée.

slug:~# date
Sat Dec 30 23:21:37 CET 2000

En installant ntp, le serveur va pouvoir se synchroniser correctement avec un serveur de temps.

telephone:~# apt-get install ntp
Reading package lists... Done
Building dependency tree... Done
Suggested packages:
  ntp-doc
The following NEW packages will be installed:
  ntp
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 340kB of archives.
After unpacking 868kB of additional disk space will be used.
WARNING: The following packages cannot be authenticated!
  ntp
Install these packages without verification [y/N]? y
Get:1 http://ftp.gtlib.gatech.edu etch/main ntp 1:4.2.2.p4+dfsg-1 [340kB]
Fetched 340kB in 1s (327kB/s)
tar: ./postinst: time stamp 2006-10-21 21:43:22 is 183243970.293148 s in the future
tar: ./prerm: time stamp 2006-10-21 21:43:22 is 183243970.278862 s in the future
tar: ./postrm: time stamp 2006-10-21 21:43:22 is 183243970.269171 s in the future
tar: ./conffiles: time stamp 2006-10-21 21:43:22 is 183243970.259987 s in the future
tar: ./md5sums: time stamp 2006-10-21 21:44:12 is 183244020.257498 s in the future
tar: ./control: time stamp 2006-10-21 21:43:58 is 183244006.252618 s in the future
tar: .: time stamp 2006-10-21 21:44:12 is 183244020.246447 s in the future
Selecting previously deselected package ntp.
(Reading database ... 21363 files and directories currently installed.)
Unpacking ntp (from .../ntp_1%3a4.2.2.p4+dfsg-1_arm.deb) ...
Setting up ntp (4.2.2.p4+dfsg-1) ...
Starting NTP server: ntpd.

Les messages d'erreurs en lien avec "time stamp" peuvent être ignorés, ces messages ne se produiront plus lorsque la date sera à jour.

On vérifie la date ...

slug:~# date
Tue Nov 14 17:13:13 CET 2006

Hummm ... elle semble plus proche de la réalité, mais ce n'est pas encore la bonne.

En configurant, la time zone ça va régler le problème

slug:~# /usr/sbin/tzconfig
Your current time zone is set to Europe/Andorra
Do you want to change that? [n]: y

Please enter the number of the geographic area in which you live:

        1) Africa                       7) Australia
        2) America                      8) Europe
        3) US time zones                9) Indian Ocean
        4) Canada time zones            10) Pacific Ocean
        5) Asia                         11) Use System V style time zones
        6) Atlantic Ocean               12) None of the above

Then you will be shown a list of cities which represent the time zone
in which they are located. You should choose a city in your time zone.

Number: 4

Atlantic Central East-Saskatchewan Eastern Mountain Newfoundland Pacific Saskatchewan Yukon

Please enter the name of one of these cities or zones
You just need to type enough letters to resolve ambiguities
Press Enter to view all of them again
Name: [] Eastern
Your default time zone is set to 'Canada/Eastern'.
Local time is now:      Tue Nov 14 11:14:49 EST 2006.
Universal Time is now:  Tue Nov 14 16:14:49 UTC 2006.

5.5 Applications supplémentaires

apt-get install screen
apt-get install unzip

Détailler à quoi elles servent

5.6 Règles udev et automount

Lorsque je branche en USB un disque dur (ou autres bidules), j'aime bien qu'il soit reconnu et monté dans un répertoire de mon choix. Normalement, le premier composant USB se vera attribué /dev/sdb (/dev/sda étant la clé USB pour les répertoires du système), le second /dev/sdc et ainsi de suite.

La configuration des système de fichier /etc/fstab pourrait ressembler à quelque chose du genre :

# Disque dur USB pour backup
/dev/sdb1 /usbhd1 ext3 defaults,noauto,rw 0 0
# Disque dur USB pour multimédia
/dev/sdc1 /usbhd2 vfat rw,gid=100,umask=0 0 0

Jusque là tout ce tiens, mais qu'arrive-t-il si le premier disque dur (première partition sdb1 monté dans /usbhd1) est branché au port USB en second, il se verra attribué le "device" /dev/sdc (et vice versa). Donc en faisant mount /dev/sdb1, ce ne sera pas le bon disque qui sera associé au "device" habituel.

La solution consiste à créer des règles spécifiques pour ces composants dans udev. Pour plus de détails, Google est votre ami

Voici un exemple d'informations que donne udevinfo (l'affichage n'est pas complet):

# udevinfo -a -p /sys/block/sdb
[...]
  looking at device '/block/sdb':
    KERNEL=="sdb"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{stat}==" 2648896   209188 110289140 97419180   392231  1717738 16927600 16106870        0 14596530 113752250"
    ATTR{size}=="488397168"
    ATTR{removable}=="0"
    ATTR{range}=="16"
    ATTR{dev}=="8:16"

  looking at parent device '/devices/pci0000:00/0000:00:01.2/usb1/1-1/1-1.1/1-1.1:1.0/host2/target2:0:0/2:0:0:0':
    KERNELS=="2:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{ioerr_cnt}=="0x0"
    ATTRS{iodone_cnt}=="0x2e676e"
    ATTRS{iorequest_cnt}=="0x2e676e"
    ATTRS{iocounterbits}=="32"
    ATTRS{timeout}=="30"
    ATTRS{state}=="running"
    ATTRS{rev}=="20.0"
    ATTRS{model}=="00JB-00REA0     "
    ATTRS{vendor}=="WDC WD25"
    ATTRS{scsi_level}=="3"
    ATTRS{type}=="0"
    ATTRS{queue_type}=="none"
    ATTRS{queue_depth}=="1"
    ATTRS{device_blocked}=="0"
    ATTRS{max_sectors}=="240"
[...]

Pour ajouter une règle udev, j'ai utilisé l'attribut model qui est 00JB-00REA0. Il suffit de créer le fichier /etc/udev/rules.d/030_mes_regle.rules avec le contenu suivant :

BUS=="scsi", ATTRS{model}=="00JB-00REA0     ", KERNEL=="sd*", NAME="%k", SYMLINK+="usbhd%n", RUN+="/usr/local/bin/mount_usb.sh"

En se référant aux informations données par udevinfo plus haut :

  • SUBSYSTEMS est définit BUS
  • ATTRS{model} est l'information unique qui identifie le matériel
  • KERNEL est le type de device. sd* pour un device USB.
  • NAME="k est le nom du device (sda1''' par exemple)
  • SYMLINK permet de faire un lien symbolique de son choix vers le vrai device
  • RUN permet d'exécuter le script qui va faire le mount.

/usr/local/bin/mount_usb.sh

#!/bin/bash

base=$(basename $DEVNAME)

if [[ $base != sd[a-g][1-9] ]]
then
  exit
fi

SYMLINK=`ls -l /dev | grep "\-> $base" | awk '{ print $9 }' | egrep -v "[:digit:]$"`

if [ "$ACTION" == "add" ]
then
  mount /dev/$SYMLINK
fi

Référence

6. Squid

Squid doit pouvoir fonctionner en continue (24/7), au début je pensais créer son cache pour les fichiers sur la clé USB (les disques durs peuvent être éteints pour que le serveur devienne silencieux), mais après réflexion j'ai trouver plus logique de tout simplement désactiver l'écriture du cache.

6.1 Installation

Pour débuter, l'installation de squid :

slug:~# apt-get install squid
Reading package lists... Done
Building dependency tree... Done
The following extra packages will be installed:
  squid-common
Suggested packages:
  squidclient squid-cgi logcheck-database resolvconf smbclient
The following NEW packages will be installed:
  squid squid-common
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 1105kB of archives.
After unpacking 6582kB of additional disk space will be used.
Do you want to continue [Y/n]? y
WARNING: The following packages cannot be authenticated!
  squid-common squid
Install these packages without verification [y/N]? y
Get:1 http://ftp.gtlib.gatech.edu etch/main squid-common 2.6.4-2 [436kB]
Get:2 http://ftp.gtlib.gatech.edu etch/main squid 2.6.4-2 [669kB]
Fetched 1105kB in 2s (471kB/s)
Preconfiguring packages ...
Selecting previously deselected package squid-common.
(Reading database ... 21579 files and directories currently installed.)
Unpacking squid-common (from .../squid-common_2.6.4-2_all.deb) ...
Selecting previously deselected package squid.
Unpacking squid (from .../archives/squid_2.6.4-2_arm.deb) ...
Setting up squid-common (2.6.4-2) ...
Setting up squid (2.6.4-2) ...
Creating squid spool directory structure
FATAL: Could not determine fully qualified hostname.  Please set 'visible_hostname'

Squid Cache (Version 2.6.STABLE4): Terminated abnormally.
CPU Usage: 0.090 seconds = 0.060 user + 0.030 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 4
/var/lib/dpkg/info/squid.postinst: line 133: 30045 Aborted                 /usr/sbin/squid -z
Restarting Squid HTTP proxy: squid* Creating squid spool directory structure
FATAL: Could not determine fully qualified hostname.  Please set 'visible_hostname'

Squid Cache (Version 2.6.STABLE4): Terminated abnormally.
CPU Usage: 0.100 seconds = 0.050 user + 0.050 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 0
/etc/init.d/squid: line 64: 30077 Aborted                 $DAEMON -z
FATAL: Could not determine fully qualified hostname.  Please set 'visible_hostname'

Squid Cache (Version 2.6.STABLE4): Terminated abnormally.
CPU Usage: 0.120 seconds = 0.060 user + 0.060 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 0
/etc/init.d/squid: line 64: 30079 Aborted                 start-stop-daemon --quiet --start --pidfile $PIDFILE --chuid $CHUID --exec $DAEMON -- $SQUID_ARGS </dev/null

Ça semble pire que c'est, la configuration va régler facilement ce message d'erreur.

6.2 Configuration

Pour minimiser l'écriture sur la clé USB, je désactive le cache et tous les fichiers de logs. Étant le seul utilisateur du proxy, je ne vois pas l'avantage du cache et de garder des logs que je ne consulterai jamais.

Voici les ajouts/modifications que j'ai apportés au fichier de configuration /etc/squid/squid.conf.

[...]
visible_hostname slug
[...]
# cache_dir ufs /var/spool/squid 100 16 256
cache_dir null /tmp
[...]
#access_log /var/log/squid/access.log squid
access_log none
[...]
# cache_log /var/log/squid/cache.log
cache_log none
[...]
# cache_store_log /var/log/squid/store.log
cache_store_log none
[...]
acl our_networks src 192.168.1.0/24
http_access allow our_networks
[...]

Le fichier comprend d'autres lignes de configurations et commentaires, mais je ne les ai pas mis pour ne pas surcharger inutillement ce document.

6.3 Références

7. Samba

Pour l'accès aux fichiers sur les disques externes USB, y'a rien de mieux que samba (y'a aussi NFS, mais avec Windows ce n'est pas l'idéal).

7.1 Installation

slug:~# apt-get install samba
Reading package lists... Done
Building dependency tree... Done
The following extra packages will be installed:
  libcupsys2 samba-common
Suggested packages:
  cupsys-common
Recommended packages:
  smbldap-tools
The following NEW packages will be installed:
  libcupsys2 samba samba-common
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 5763kB of archives.
After unpacking 13.3MB of additional disk space will be used.
Do you want to continue [Y/n]? y
WARNING: The following packages cannot be authenticated!
  libcupsys2 samba-common samba
Install these packages without verification [y/N]? y
Get:1 http://ftp.gtlib.gatech.edu etch/main libcupsys2 1.2.5-1 [152kB]
Get:2 http://ftp.gtlib.gatech.edu etch/main samba-common 3.0.23c-3 [2351kB]
Get:3 http://ftp.gtlib.gatech.edu etch/main samba 3.0.23c-3 [3260kB]
Fetched 5763kB in 8s (676kB/s)
Preconfiguring packages ...

Package configuration

 ┌───────────────────────┤ Samba Server ├───────────────────────┐
 │ Please specify the workgroup you want this server to appear  │
 │ to be in when queried by clients. Note that this parameter   │
 │ also controls the domain name used with the security=domain  │
 │ setting.                                                     │
 │                                                              │
 │ Workgroup/Domain Name:                                       │
 │                                                              │
 │ ____________________________________________________________ │
 │                                                              │
 │                                                        <Ok>  │
 │                                                              │
 └──────────────────────────────────────────────────────────────┘

Package configuration

 ┌─────────────────────────────┤ Samba Server ├──────────────────────────────┐
 │                                                                           │
 │ If your computer gets IP address information from a DHCP server on the    │
 │ network, the DHCP server may also provide information about WINS servers  │
 │ ("NetBIOS name servers") present on the network.  This requires a change  │
 │ to your smb.conf file so that DHCP-provided WINS settings will            │
 │ automatically be read from /etc/samba/dhcp.conf.                          │
 │                                                                           │
 │ The dhcp3-client package must be installed to take advantage of this      │
 │ feature.                                                                  │
 │                                                                           │
 │ Modify smb.conf to use WINS settings from DHCP?                           │
 │                                                                           │
 │                    <Yes>                       <No>                       │
 │                                                                           │
 └───────────────────────────────────────────────────────────────────────────┘
Selecting previously deselected package libcupsys2.
(Reading database ... 21404 files and directories currently installed.)
Unpacking libcupsys2 (from .../libcupsys2_1.2.5-1_arm.deb) ...
Selecting previously deselected package samba-common.
Unpacking samba-common (from .../samba-common_3.0.23c-3_arm.deb) ...
Selecting previously deselected package samba.
Unpacking samba (from .../samba_3.0.23c-3_arm.deb) ...
Setting up libcupsys2 (1.2.5-1) ...

Setting up samba-common (3.0.23c-3) ...

Setting up samba (3.0.23c-3) ...
Generating /etc/default/samba...
tdbsam_open: Converting version 0 database to version 3.
account_policy_get: tdb_fetch_uint32 failed for field 1 (min password length), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 2 (password history), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 3 (user must logon to change 
password), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 4 (maximum password age), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 5 (minimum password age), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 6 (lockout duration), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 7 (reset count minutes), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 8 (bad lockout attempt), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 9 (disconnect time), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 10 (refuse machine password change), 
returning 0
Importing accout for root...ok
Importing accout for daemon...ok
Importing accout for bin...ok
Importing accout for sys...ok
Importing accout for sync...ok
Importing accout for games...ok
Importing accout for man...ok
Importing accout for lp...ok
Importing accout for mail...ok
Importing accout for news...ok
Importing accout for uucp...ok
Importing accout for proxy...ok
Importing accout for www-data...ok
Importing accout for backup...ok
Importing accout for list...ok
Importing accout for irc...ok
Importing accout for gnats...ok
Importing accout for nobody...ok
Importing accout for sshd...ok
Importing accout for Debian-exim...ok
Importing accout for statd...ok
Importing accout for identd...ok
Importing accout for plec...ok
Importing accout for ntp...ok
Starting Samba daemons: nmbd smbd.

7.2 Configuration

À faire

8. Améliorations

  • Les disques durs USB sont montés automatiquement, mais aucune vérification (e2fsck) n'est faite après un certain nombre de "mount".
  • Dans /etc/fstab, ajouter noatime aux filesystem sur flash pour minimiser l'écriture sur la clé USB.
  • Désactiver les services inutiles. Très pratique avec les ressources limitées du SNLU2 (CPU et mémoire)