Hvordan jeg byggede min slimserver

Planlægningen

Krav til maskinen: RAID diske, mulighed for at køre Slimserver, fleksibilitet, lavt strømforbrug, lav pris.

Operativsystem: FreeBSD
Motherboard - Intel chipset fordi det siges at give færrest problemer med Open Source OSes.
Valget faldt på Gigabyte GA-965GM-S2 micro-ATX MB med Intel ICH8 south-bridge, 4 SATA-300 controllere, ATA controller til OS-disk og indbygget video (og lyd).
Jeg troede fejlagtigt at der var en RAID-5 controller på motherboardet. Det er kun en RAID-1 controller.
889 kr.

Processor - ingen specielle krav. Valgte 2,66 GHz Celeron D 331 fordi den var den billigste jeg kunne finde.
263 kr.

CPU-køler og køle-pasta.
119 kr.

RAM - 2 x 512 MB 533 MHz Kingston valueram. Igen valgt p.gr.a. pris og fordi den passer i MB.
2 x 149 kr.

Kabinet - Antec NSK4480. Valgt fordi det har 5 x 3,5" og 3 x 5,25" drive bays. Det er også rimeligt pænt, billigt og har en indbygget 380 W strømforsyning. Jeg havde oprindeligt valgt NSK4400 modellen indtil det gik op for mig at den kun har 2 SATA strømstik. NSK4480 har 4.
682 kr.

Netkort - Netgear WG311T trådløst netkort. Valgt fordi jeg fandt det på en liste over trådløse netkort der virker med FreeBSD. Trådløse netkort er stadig ikke super-godt understøttede, så jeg synes at det var vigtigt at få et der havde en høj chance for at fungere.
339 kr.

Harddisk - En aflagt 60 GB Maxtor disk. Skulle senere vise sig at blive et dårligt valg :)
0 kr.

CD-ROM drev - Et Plextor drev jeg pillede ud af min arbejds-PC. Jeg havde det siddende som et ekstra drev ud over min NEC brænder, men jeg brugte det aldrig. Hvis jeg senere får brug for det kan jeg flytte det tilbage. Jeg skulle kun bruge det i serveren under installationen.
0 kr.

RAID diske - 4 Seagate 7200.10 500GB SATA-300 drev. Valgt p.gr.a. godt kapacitet/pris forhold.
4 x 769 kr.

Samling af PCen

Alle delene, mens de endnu er i kasser.

CPUen monteres på motherboardet

CPU-køleren monteret ovenpå CPUen. Bemærk en meget vigtig ting i baggrunden: Tappsy lakrids/skumbamser. Uden Tappsy går det bare ikke.

RAMmen monteret. Stikkene i forgrunden er det ene strømstik på motherboardet (det hvide stik), floppy-controller stikket (det sorte) og IDE-controller stikket (det grønne).

Det hele er monteret og der er strøm på. Bemærk lyset i power-knappen. Et stort øjeblik.

BIOSen konfigureres.

FreeBSD installeres.

Installation

Jeg havde store problemer med at få Maxtor disken genkendt. BIOSen så den fint, men FreeBSD så den slet ikke eller også brokkede den sig over ulovlig geometri. Jeg prøvede et par installationer, men de fejlede som regel med noget der lignede diskfejl.
Til sidst satte jeg en jumper på drevet der fik det til at opføre sig som et 32 GB drev og så virkede alt!

FreeBSD 6.2 RELEASE installeret som standard-installation. 'hans' oprettet som almindelig bruger. Under installationen har jeg sagt ja til at den skal starte sshd og usbd. Det er 'daemons' - eller serverprogrammer - til hhv. ssh og usb.

Jeg editerer filer med 'vi'. Skriv 'vi <filnavn>' for at starte den. Den er lidt kryptisk. Man kan være i edit mode eller i kommando mode. Når den starter er man i kommando mode. Man skifter til edit mode ved at trykke 'a' (after) eller 'i' (insert). Man skifter tilbage til kommando mode med Esc.
Nyttige vi kommandoer er

   :w     - gem filen
   :q     - quit
   :q!    - quit uden at gemme ændring
   dd     - slet linie

Andre nyttige kommandoer, hvis man aldrig har arbejdet med Unix før:

   ls              - list filer.
   df              - vis mountede filsystemer.
   ifconfig ath0   - vis informationer om det trådløse netkort.
   man             - vis manualsiden til en givet kommando.
su - skift til super-user (root) status

Alt det efterfølgende foregår som root useren.

Drivere til netkort loades ved at rette /boot/loader.conf og tilføje

   if_ath_load="YES"
   wlan_wep_load="YES"
   wlan_ccmp_load="YES"
   wlan_tkip_load="YES"

Parametre til netkortet tilføjes i /etc/rc.conf:

 ifconfig_ath0="ssid Kilian mode 11g wepmode on weptxkey 1 wepkey 0x9999999999999999999999999 DHCP"

0x9999999... ovenfor skal erstattes af WEP-nøglen fra dit trådløse net.

Reboot serveren med

   shutdown -r now

og check at netkortet kommer ordentligt op og at der er forbindelse ud i verden. Fx ved at køre

   ping www.google.com

fra serveren.

DHCP serveren i min Netgear router blev konfigureret til altid at give serveren IP adresse 192.168.0.20 ud fra serverens MAC adresse.

Normale brugere kan ikke umiddelbart skifte til super-user, selv om de kan root passwordet. Man skal være tilknyttet brugergruppen 'wheel' for at kunne blive super-user. Da root brugeren ikke kan logge ind via ssh, er man nødt til at have en almindelig bruger, der kan skifte til super-user.

   pw usermod hans -G wheel

Tilføj hostname i /etc/rc.conf

   hostname="botero"

Tilføj servernavnet i /etc/hosts

   192.168.0.20     botero

Hvis man også tilføjer ovenstående linie til hosts-filen på ens Windows-maskine kan man bruge server-navnet i stedet for IP-adressen fra Windows-maskinen. Hosts-filen hedder c:\windows\system32\drivers\etc\hosts under Windows. Ret den med notepad eller en anden editor.

Nu da vi kan komme i kontakt med serveren gennem netkortet, er det ikke nødvendigt at have skærm og tastatur forbundet til den længere. Jeg har stillet min op i mit køkken uden skærm eller tastatur og al administration foregår nu via ssh (secure shell).
Jeg bruger PuTTY som ssh klient: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html


Den første logon via ssh

En 'port' er en betegnelse for en software pakke til FreeBSD. De ligger under /usr/ports og er meget nemme at installere.

Opdater ports samlingen så vi har de seneste versioner af al softwaren til FreeBSD

   portsnap fetch

Man kan efterfølgende (som led i almindeligt vedligehold) opdatere ports samlingen med

   portsnap fetch update

og se hvilke ports der er kommet opdateringer til med

   pkg_version -v

Installer Slimserver

   cd /usr/ports/audio/slimserver
   make install clean

FreeBSD installerer automatisk krævet software som Perl, MySQL, flac, lame og mere end 40 andre software pakker. Installationen tog over en time for mig.
Sørg for at mdnsd, mysql og slimserver starter op automatisk ved at tilføje

   mdnsd_enable="YES"
   mysql_enable="YES"
   slimserver_enable="YES"

til /etc/rc.conf. Startup-scriptene ligger i /usr/local/etc/rc.d.

Reboot med

   shutdown -r now

Verificer at slimserver kører ved at starte en browser og gå til port 9000 på serveren. Fx http://192.168.0.20:9000/. Du kan bruge http://botero:9000/ hvis du har tilrettet hosts-filen under Windows.

Installer Apache

Jeg har installeret Apache (en webserver) for at kunne lege webserver. Apache er ikke nødvendig for at kunne køre slimserver, så du kan roligt springe det over, hvis du ikke vil have det på din maskine

   cd /usr/ports/www/apache22
   make install clean 

Ret servernavn i /usr/local/etc/apache22/httpd.conf

   ServerName botero:80

Sørg for at Apache startes op automatisk ved at tilføje

   apache22_enable="YES"

til /etc/rc.conf. Og reboot

   shutdown -r now

Verificer at webserveren kører ved at gå til

   http://192.168.0.20/

Software RAID

Mit motherboard havde ikke RAID-5 som jeg troede. Så derfor valgte jeg at køre RAID-5 i software med vinum

Installation af 4 x 500GB harddiske gik problemfrit.

Installation af software RAID-5 med vinum efter en opskrift fundet her: http://phaq.phunsites.net/2006/05/27/freebsd-gvinum-raid5-on-sparc64/

   bsdlabel -w /dev/ad10 auto
   bsdlabel -w /dev/ad12 auto
   bsdlabel -w /dev/ad14 auto
   bsdlabel -w /dev/ad16 auto

Editer /tmp/raid5.conf (med flg. indhold)

   drive vol1_disk1 device /dev/ad10a
   drive vol1_disk2 device /dev/ad12a
   drive vol1_disk3 device /dev/ad14a
   drive vol1_disk4 device /dev/ad16a
   volume raid5_vol1
   plex org raid5 261k
   sd drive vol1_disk1
   sd drive vol1_disk2
   sd drive vol1_disk3
   sd drive vol1_disk4 

Lav RAID-5 plexet og gem konfigurationen:

   gvinum create /tmp/raid5.conf
   gvinum saveconfig

Formater drevet

   newfs /dev/gvinum/raid5_vol1

Sørg for at vinum driveren loades ved startup. Tilføjet til /boot/loader.conf:

   geom_vinum_load="YES"

Lav et mountpoint

   mkdir /raid

Tilføj drevet til /etc/fstab med flg. linie:

   /dev/gvinum/raid5_vol1  /raid   ufs   rw   2   2

Reboot

   shutdown -r now

IT'S ALIVE!

	botero# df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad8s1a 507630 36854 430166 8% /
devfs 1 1 0 100% /dev
/dev/ad8s1e 507630 14 467006 0% /tmp
/dev/ad8s1f 26972140 888610 23925760 4% /usr
/dev/ad8s1d 2004526 114734 1729430 6% /var
/dev/gvinum/raid5_vol1 1419056622 4 1305532090 0% /raid

Samba

Samba er en software-pakke der kan dele drev og printere over nettet med SMB-protokollen. Det arbejder fint sammen med Windows og er meget udbredt.

Installer

   cd /usr/ports/net/samba3
   make install clean

Lav configurationsfil i /usr/local/etc/smb.conf

   [global]
      workgroup = WORKGROUP
      netbios name = BOTERO
      security = SHARE
   [raid]
      path = /raid
      read only = no
      guest ok = yes

Sørg for at alle kan læse og skrive i /raid

   chmod 777 /raid

Tilføj flg. linie i /etc/rc.conf

   samba_enable = "YES"

Reboot

   shutdown -r now

Check at det virker ved at taste \\botero\raid i en Stifinder i Windows og at du kan kopiere filer over på serveren.

Server nedlukning fra Squeezeboxen

Squeezebox softwaren er open source og det giver mulighed for at tilrette den hvis man har specielle ønsker. Jeg vil gerne kunne lukke min server pænt ned når jeg er færdig med at høre musik. Normalt ville jeg skulle starte en PC, logge på med SSH og udstede en shutdown kommando. Men det er jo smartere hvis man tilføjer et menupunkt på Squeezeboxen og kan lukke ned derfra.

Slimserver softwaren kører under en bruger der hedder slimserv. Denne bruger har ikke lov at køre shutdown kommandoen. For at kunne give den lov til det uden at give den fuld super-user adgang installerede jeg sudo:

   cd /usr/ports/security/sudo
   make install clean

Adgangen gives ved at tilføje flg. linie i /usr/local/etc/sudoers:

   slimserv localhost = NOPASSWD: /sbin/shutdown

Derefter lægges flg. plugin i /usr/local/slimserver/Plugins/ShutdownServer.pm:

package Plugins::ShutdownServer;

use strict;

my %functions = (
    'left' => sub {
        my $client = shift;
        Slim::Buttons::Common::popModeRight($client);
    },
    'right' => sub {
        my $client = shift;
        $client->bumpRight();
    },
    'up' => sub {
        my $client = shift;
        $client->bumpUp();
    },
    'down' => sub {
        my $client = shift;
        $client->bumpDown();
    },
    'play' => sub {
        my $client = shift;
        my $line1 = "Shut down server";
        my $line2 = "Shutting down the server";
        $client->showBriefly( { 'line' => [ $line1, $line2 ] } );
        `/usr/local/bin/sudo /sbin/shutdown -p now`;
    },
);

sub lines
{
    my $client = shift;

    return ("Shut down server", "Press Play to shut down server");
}

sub setMode
{
    my $client = shift;
    $client->lines(\&lines);
    $client->update();
}

sub getFunctions
{
    \%functions;
}

sub getDisplayName
{
    return 'PLUGIN_DISPLAY_FILE_NAME';
}

sub strings
{
    return '
PLUGIN_DISPLAY_FILE_NAME
        EN      Shut down server
';
}

1;

Reboot serveren, for at få plugin'en loadet i Slimserver:

   shutdown -r now

CD kopiering

Så mangler jeg kun at få lagt mine 400+ CD'ere over på serveren. Normalt ville jeg nok vælge mp3-formatet, men der er plads nok på serveren, så jeg har valgt at komprimere lydfilerne uden tab med Flac i stedet. Det betyder at hver CD fylder 350-450 MB. Men så lyder det forhåbentligt også en anelse bedre.

Jeg bruger Exact Audio Copy (EAC) til kopieringen. Det har den fordel at det kan tilrettes på mange måde og fx kalde et eksternt program for at komprimere de wav-filer den kopierer fra CD'erne. Jeg bruger Flac til komprimeringen.

Jeg har sat EAC til at navngive mine musikfiler som "<track> - <kunstner> - <album> - <sang>". Som man kan se, kan man få det som man vil have det.

EAC er konfigureret til at bruge Flac til komprimering. Feltet til "additional command line options" indeholder -T "artist=%a" -T "title=%t" -T "album=%g" -T "date=%y" -T "tracknumber=%n" -T "genre=%m" %s

Når jeg kopierer er arbejdsgangen at trykke Alt-G for at slå CD'en op i FreeDB. Så trykker jeg Ctrl-A for at markere alle sangene og derefter Shift-F5 for at kopiere sangene i komprimeret format. Det tager omkring 6 minutter at kopiere en CD med det CD-ROM drev jeg har. Så det kommer til at tage over 40 timer at kopiere alle 400...