Ubuntu: Custom Netwerk rules met UDEV

Door FireDrunk op zaterdag 1 maart 2014 21:12 - Reacties (0)
Categorie: -, Views: 1.978

Tijdens het maken van mijn vorige blogpost kwam ik er achter dat UDEV (de device manager van Linux) nogal in de war raakt van mijn setup (2 * Intel NIC's onboard, en een losse Quad poort Intel Gigabit NIC.)

Er werden twee interfaces hernoemt naar em*, 3 naar eth* en een bleef rename7 heten. Erg frustrerend, waardoor ik genoodzaakt werd om de hele zooi zelf te doen.

Wat ik gedaan heb:
Verwijder de persistent rules:

rm /etc/udev/rules.d/70-persistent-network.rules


Daarna:
nano /etc/udev/rules.d/010_netinterfaces.rules


En voeg toe:
KERNEL=="eth*", ATTR{address}=="e8:40:f2:3e:62:95", NAME="eth0"
KERNEL=="eth*", ATTR{address}=="e8:40:f2:3e:62:94", NAME="eth1"

KERNEL=="eth*", ATTR{address}=="00:1b:21:37:66:c8", NAME="vt0"
KERNEL=="eth*", ATTR{address}=="00:1b:21:37:66:c9", NAME="vt1"
KERNEL=="eth*", ATTR{address}=="00:1b:21:37:66:cc", NAME="vt2"
KERNEL=="eth*", ATTR{address}=="00:1b:21:37:66:cd", NAME="vt3"


Voila, probleem opgelost, de interfaces zijn keihard gebonden aan mac adres!

Tutorial: Ubuntu NAS/SAN All-in-one!

Door FireDrunk op zaterdag 1 maart 2014 12:00 - Reacties (10)
Categorie: -, Views: 5.678

Voorwoord:

In dit blog wil ik jullie uitleggen hoe ik mijn server heb geinstalleerd. Veel mensen vragen (mij) vaak wat de slimste manier is om zoiets te doen.
Ik wil in geen enkel opzicht beweren dat dit de beste manier is om een ZFSonLinux installatie te doen, dit is alleen hoe ik het doe...

Uiteindelijke situatie is:
Ubuntu op een losse SSD, ZFS op 4 losse schijven, een aantal SSD's met ZFS voor Virtual Machines (die ergens anders draaien), NFS shares, iSCSI shares, Samba, SabNZBd, SickBeard, CouchPotato (en misschien nog wat extra's die we onderweg tegen komen).

Hardware:
#ProductPrijsSubtotaal
1Intel Core i5 3550 Boxed§ 181,44§ 181,44
1Intel Desktop Board DQ77MK§ 0,-§ 0,-
4Seagate Desktop HDD.15 (OEM), 4TB§ 133,95§ 535,80
1Fractal Design Define XL USB 3.0 Black Pearl§ 129,95§ 129,95
1Intel PRO/1000 PT Quad Port Server Adapter (4x1000Mbps, PCI-e)§ 365,50§ 365,50
1Corsair Vengeance CML32GX3M4A1600C10§ 275,60§ 275,60
1IBM ServeRAID M1015 SAS/SATA Controller for System x§ 130,63§ 130,63
2Intel DC 2.5" S3700 200GB§ 411,30§ 822,60
4Intel Postville X25-M SSDSA2MH080G2C1 80GB§ 0,-§ 0,-
2Samsung 840 series Pro 128GB§ 103,04§ 206,08
1Sandisk U100 16GB mSATA----
Bekijk collectie
Importeer producten
Totaal§ 2.647,60


Configuratie:
mSATA + Intel X25-M SSD's gaan onboard (die zijn toch maar SATA 300)
Harde Schijven en andere SSD's gaan op de M1015.

4*80GB SSD word een Virtual Machine ZFS pool
2*840Pro 128GB word ook een Virtual Machine ZFS pool
4*4TB word gebruikt voor alle troep data die ik heb.

De 2 Intel DC SSD's worden gepartitioneerd zodat ze voor zowel ZIL als L2ARC gebruikt kunnen worden. Deze worden aan de disk pool gekoppeld. Op de disk pool komt ook nog weer een los filesystem voor Virtual Machines.

Nog een woord vooraf: BACKUP JE SPULLEN! Deze installatie kan echt een hoop kapot maken wat je lief is, en ik wil geen huilende mensen in de comments... Dus wees gewaarschuwd!

Inhoud:

  • Ubuntu Installeren
  • USB Stick, IPMI
  • Ubuntu Configureren
  • Ubuntu Updaten
  • Upgrade vs dist-upgrade
  • Netwerk & DNS
  • Extra packages (Samba, NFS)

ZFS

  • ZFS Installeren
  • ZFS Configureren (ARC)
  • ZFS in praktijk

NAS Basics

  • NFS Installeren
  • Samba Installeren

Applicaties

  • SabNZBd
  • SickBeard
  • Couchpotato
  • LaSi

SAN

  • SCST
  • Netwerk Multipathing

Ubuntu installeren:

Hoewel ik hier niet teveel aandacht aan wil besteden, toch even wat tips: Gebruik altijd AMD64, en het liefst een USB stick, IPMI is leuk, maar 100x zo traag als USB2/3. Download de -server variant en installeer zo weinig mogelijk packages (dus echt bare minimal). We willen namelijk toch van alles de nieuwste versie, en niet de versie van de CD (ISO).

Koppel ALLE schijven waar je niet op wil installeren echt fysiek los (SATA er uit, of power er uit).
Je wil niet het risico lopen dat de bootloader op de verkeerde schijf terecht komt...
Voor mensen die vanaf een ander ZFS platform migreren, haal ook even je ZIL en L2ARC devices uit je pool.
Ubuntu USB stick maken
Download de Ubuntu 13.10 AMD64 Server.
Download Universal USB Installer, kies voor Ubuntu Server Installer en browse naar je ISO.

http://tweakers.net/ext/f/NFP0xB9Njw55j1OePJXT0wqG/full.png

Omdat ik een USB3.0 stick gebruik moet ik even het vinkje aanzetten bij Show All Devices
Let op dat je niet de verkeerde disk kiest :+
Ik kies altijd voor formatteren, maar het is niet verplicht.

http://tweakers.net/ext/f/9Xf4LHfO2oigTNllV2AHsGN0/full.png

Kies ja.

http://tweakers.net/ext/f/EEokzNxDGN15YFawpid4ttMd/full.png

Even wachten...

http://tweakers.net/ext/f/LBcK355GvZELOzbAYcG14QKJ/full.png

Klaar! Plug nu de USB stick in je systeem (Let op, nogmaals: koppel alle devices die niets met de installatie te maken hebben los!)

Daar gaan we!
  • Kies English -> Install Ubuntu Server
  • Kies English -> Other -> Europe -> Netherlands
  • Default -> No -> English (US) -> English (US, with dead keys)
  • (Mocht je twee netwerkkaarten hebben, vraagt de installer welke NIC je moet hebben, kies even de goede :+ )
  • Vul je hostname in.
  • Vul je domeinnaam in (of laat leeg).
  • Netherlands -> nl.archive.ubuntu.com
  • Proxy informatie invullen
  • Full name of new user: [wat je wil]
  • Username invullen [watjewilmaardanzonderspaties]
  • Encryption: No
  • Timezone: Yes (mits hij correct is natuurlijk)
  • Guided, use entire disk (LET OP: Ubuntu maakt standaard een swap drive aan ter grootte van je RAM, heb je dus zoals ik een 16GB USB stick, en 16GB RAM, ga je een probleem hebben. Dan moet je dus even met de hand partitioneren.
  • LET OP: Zie je hier je USB stick als /dev/sda en je gewone disk als /dev/sdb, moet je straks even goed opletten bij de GRUB installatie! (Als /dev/sda gewoon je harde schijf is, is er niets aan de hand.
  • Installing base system : (even wachten...)
  • No automatic updates (Vanwege ZFS)
  • Geen extra packages
  • Boootloader: Kies NEE als je een stukje terug /dev/sdb als disk zag, kies ja als je /dev/sda als je primaire disk zag.
  • Bij nee: Kies Install GRUB Bootloader onto a harddrive en type: /dev/sdb
  • UTC: Yes
  • Klaar!
Inloggen maar!

SSH Installeren (op de console)
apt-get update
apt-get install openssh-server

Vanaf dit moment kan je met PuTTY inloggen op je machine (type ifconfig om het ip adres te achterhalen).
Log eventueel in met PuTTY:

Nu gaan we even helemaal updaten!
sudo -s
apt-get update
apt-get upgrade
[y]
apt-get dist-upgrade
[y]
reboot

Vast IP instellen (niet verplicht):
nano /etc/network/interfaces

# The primary network interface
auto em1
iface em1 inet static
address [gewenste IP]
netmask 255.255.255.0
gateway [IP van je router]
dns-nameservers [IP van je router]

Even rebooten!
reboot

ZFS Installeren

Nu gaan we ZFS installeren!
apt-get install software-properties-common
[y]
apt-add-repository ppa:zfs-native/stable
[y]
apt-get update
apt-get install build-essential
[y]
apt-get install ubuntu-zfs
[y]
Dit laatste commando kan even duren. Tijdens de installatie zie je iets als:

Check kernel versie:
First Installation: checking all kernels...
Building only for 3.11.0-17-generic
Building initial module for 3.11.0-17-generic
update-initramfs: Generating /boot/initrd.img-3.11.0-17-generic

Mocht je iets anders zien, kan je er redelijkerwijs vanuit gaan dat het niet goed gegaan is...

Testen of zfs werkt! Je hoeft niet eens te rebooten! Leuk he!
root@NAS:~# zfs list
no datasets available
root@NAS:~# poweroff

Als je dit ziet, werkt ZFS prima en kan je je schijven gaan aansluiten!
Nadat je je schijven weer aangesloten hebt, Log weer even in (via PuTTY)

Als je schijven meeneemt uit een oude installatie (bijvoorbeeld ZFSguru en/of BSD zoals in mijn geval) en je hebt netjes partitielabels opgegeven, kan je deze ook gewoon gebruiken onder Ubuntu. Via het volgende commando kan je zien of deze labels goed herkend worden:
sudo -s
ls /dev/disk/by-partlabel/

Zie je hier netjes al je schijven (labels) dan kan je verder gaan met het importeren van je ZFS pool. Zo niet, moet je ofwel je disks opnieuw labelen, of je schijven partitioneren als je dat nog niet gedaan had (duh :+). Voor Ubuntu raad ik gdisk aan, dit kan netjes met GPT partitietabellen overweg.

LET OP: Gebruikers van een M1015, bij mij werden de schijven van de M1015 gezien *VOOR* de onboard schijven. Dus na het inpluggen van mijn data array was ineens /dev/sda een 4TB data schijf.
Pas dus een beetje op :+

apt-get install gdisk
gdisk /dev/sd[letter van je schijf]

ZFS Pools importeren

Nu kunnen we onze pool(s) gaan importeren!
zpool import -d /dev/disk/by-partlabel/

Als het goed is zie je nu iets als:
root@NAS:~# zpool import -d /dev/disk/by-partlabel/
   pool: x25pool
     id: 8477699500869180871
  state: ONLINE
 action: The pool can be imported using its name or numeric identifier.
 config:

        x25pool     ONLINE
          mirror-0  ONLINE
            x25-A   ONLINE
            x25-B   ONLINE
          mirror-1  ONLINE
            x25-C   ONLINE
            x25-D   ONLINE

   pool: s840pool
     id: 17728954560403403478
  state: ONLINE
 action: The pool can be imported using its name or numeric identifier.
 config:

        s840pool      ONLINE
          mirror-0    ONLINE
            840Pro-A  ONLINE
            840Pro-B  ONLINE

   pool: datapool
     id: 10236214267539680596
  state: ONLINE
 status: The pool is formatted using a legacy on-disk version.
 action: The pool can be imported using its name or numeric identifier, though
        some features will not be available without an explicit 'zpool upgrade'.
 config:

        datapool        ONLINE
          raidz1-0      ONLINE
            datapool-A  ONLINE
            datapool-B  ONLINE
            datapool-C  ONLINE
            datapool-D  ONLINE


De Pool(s) kan je importeren door hun numerieke ID te gebruiken:
root@NAS:~# zpool import -f -d /dev/disk/by-partlabel/ 8477699500869180871
root@NAS:~# zpool import -f -d /dev/disk/by-partlabel/ 17728954560403403478
root@NAS:~# zpool import -f -d /dev/disk/by-partlabel/ 10236214267539680596

Mocht je een foutmelding krijgen in de trant van:
cannot share 'datapool': share(1M) failed

Komt dat omdat je nog geen NFS server geinstalleerd hebt, maar wel de sharenfs property gezet hebt op je dataset/filesystem.

ZFS Tuning

Het is verstandig om het geheugen gebruik van ZFS' ARC (Adaptive Replacement Cache) een beetje aan banden te leggen. Vooral als je ook nog Virtual Machines wil draaien.

De waardes zijn in bytes, dus het voorbeeld is minimaal 2GB en maximaal 8GB voor ZFS (mijn server heeft 16GB momenteel)
nano /etc/modprobe.d/zfs.conf

Voer hier in:
options zfs zfs_arc_min=2147483648
options zfs zfs_arc_max=8589934592

NFS Installeren

Installatie van NFS doe je door:
apt-get install nfs-kernel-server
[y]

Je ziet iets als:
Creating config file /etc/default/nfs-kernel-server with new version
 * Not starting NFS kernel daemon: no exports.

Dit klopt, er word nog niets geshared.

Ik wijzig altijd zelf mijn /etc/exports, in theorie kan ZFS dit, maar onder Linux vind ik dit nog niet zo betrouwbaar.
nano /etc/exports

Voer hier in (vervang datapool voor je eigen pool).
In het voorbeeld heb ik 2 filesystems welke ik wil sharen.
no_subtree_check wil zeggen dat elke subdirectory direct gemount mag worden door de andere partij. no_root_squash is nodig voor ESXi.

Vervang uiteraard eventueel het netwerk voor je eigen netwerk.
/datapool/data  192.168.1.0/255.255.255.0(rw,no_subtree_check,no_root_squash)
/datapool/lagelanden_4k 192.168.1.0/255.255.255.0(rw,no_subtree_check,no_root_squash)


Even NFS (her)starten:
root@NAS:~# service nfs-kernel-server restart
 * Stopping NFS kernel daemon                       
 * Unexporting directories for NFS kernel daemon...              
 * Exporting directories for NFS kernel daemon...                
 * Starting NFS kernel daemon  

Testen of je shares actief zijn kan via:
showmount -e

Samba Installeren

Samba installatie:
apt-get install samba
[y]

Even de voorbeeld configuratie hernoemen (ding staat vol met onzin):
mv /etc/samba/smb.conf /etc/samba/smb.conf.old

Configuratie aanpassen:
nano /etc/samba/smb.conf

Voeg in (bijvoorbeeld):
[global]
        netbios name = NAS
        workgroup = CRAVU
        security = user

[data]
        path = /datapool/data
        public = yes
        browseable = yes
        writeable = yes
        create mask = 0777
        directory mask = 0777

[backups]
        path = /datapool/backups
        public = yes
        browseable = yes
        writeable = yes
        create mask = 0777
        directory mask = 0777

Toevoegen Samba gebruiker(s):
Vervang thijs met je eigen username.
smbpasswd -a thijs

Even samba herstarten om de wijzigingen toe te passen:
service samba restart

Wil je nieuwe gebruikers toevoegen, moet je eerst een Linux account voor ze aanmaken met:
adduser [username]

Daarna kan je met smbpasswd -a [username] hun smb wachtwoord wijzigen.
Leuk feitje: Je kan users toevoegen met een verschillend password. Wil je dat mensen niet in kunnen loggen op je syteem, maar wel toegang hebben via Samba, kan je het volgende doen:
nano /etc/passwd

Zoek hier de regel op van de user die je de toegang wil ontzeggen, bijvoorbeeld:
test:x:1001:1001:test user,,,:/home/test:/bin/bash

Verander dit in:
test:x:1001:1001:test user,,,:/home/test:/bin/nologin

Et voila! De user kan niet meer inloggen!

ZFS Sleep Fix

Tijdens het maken van deze handleiding (en de installatie van mijn eigen server), kwam ik erachter dat er een nasty bug zit in Ubuntu icm ZFS en een LSI HBA (Zoals de IBM M1015).
Omdat deze controllers tijdens het booten pas de schijven aanbieden aan het OS, kan het zijn dat Ubuntu het ZFS gedeelte al aan het laden is terwijl de controller nog niet klaar is met het uitlezen van de schijven (en hun informatie). Hierdoor is het nodig om een sleep in te bouwen zodat de kernel even rustig wacht tot al je devices aanwezig zijn:

Volg in deze guide de tweede oplossing (met het stukje devicewait code). Deze code hoeft helemaal niet in /root, ik heb hem in /etc/init.d/ gezet, dat vond ik iets netter. Het uiteindelijke commando wordt dan ook /etc/init.d/devicewait.

https://github.com/zfsonl...l-FAQ-and-troubleshooting

Herstart je server om de wijziging toe te passen!
reboot

Extra applicaties

LaSi (Lazy Admin System Installer), is een geweldige tool om een hele batterij aan mooie applicaties te installeren, waaronder SabNZBd, SickBeard en CouchPotato.

Download de installer:
cd /root
wget http://dl.dropbox.com/u/18712538/LaSi/LaSi.sh

Maak deze uitvoerbaar:
chmod +x LaSi.sh

Voer het daarna uit:
./LaSi.sh

In dit menu:
Lazy admin Scripted installers ------------------------
                    ___           ___
                   /\  \         /\__\
                  /::\  \       /:/ _/_       ___
                 /:/\:\  \     /:/ /\  \     /\__\
  ___     ___   /:/ /::\  \   /:/ /::\  \   /:/__/
 /\  \   /\__\ /:/_/:/\:\__\ /:/_/:/\:\__\ /::\  \
 \:\  \ /:/  / \:\/:/  \/__/ \:\/:/ /:/  / \/\:\  \__
  \:\  /:/  /   \::/__/       \::/ /:/  /     \:\/\__\
   \:\/:/  /     \:\  \        \/_/:/  /       \::/  /
    \::/  /       \:\__\         /:/  /        /:/  /
     \/__/         \/__/         \/__/         \/__/

------------------------------------------------ Mar2zz
Make a choice to see info or install these apps...
1. Beets                  6. SickBeard
2. CouchPotato (V2)       7. Spotweb
3. Headphones             8. Subliminal
4. Maraschino             9. Tranmission
5. Sabnzbdplus           10. XBMC (desktop)

Tip: Type LaSi.sh --help for more install options!

Q. Quit

Kan je naar harte lust alle apps installeren die je wil!

SAN (SCST) installatie

Eerst SCST installeren:
apt-get install subversion
[y]
cd /root
svn checkout svn://svn.code.sf.net/p/scst/svn/branches/2.2.x/ scst-svn
cd scst-svn
make extraclean
make debug2perf
make scst scst_install scstadm_install iscsi iscsi_install scst_local scst_local_install usr

Je krijgt tijdens het compileren wat foutmeldingen over de kernel, dit komt omdat we geen custom kernel hebben gemaakt welke de speciale patches bevat voor SCST.

Config aanpassen:
nano /etc/scst.conf

Voorbeeld:
HANDLER vdisk_fileio {
        DEVICE lun0 {
                filename /dev/zvol/datapool/lagelanden_4k/lun0
        }
        DEVICE lun1 {
                filename /dev/zvol/s840pool/lun0
        }
        DEVICE lun2 {
                filename /dev/zvol/x25pool/lun0
        }
}

TARGET_DRIVER iscsi {
        enabled 1
        TARGET iqn.2014-02.NAS:tgt {
                enabled 1
                LUN 0 lun0
                LUN 1 lun1
                LUN 2 lun2
        }
}

Service automatisch laten starten:
update-rc.d scst defaults

Even rebooten:
reboot


En klaar!