Ansible-NAS installeren op Ubuntu Server
Wil je een flexibele nas, dan leent Ubuntu Server zich daar goed voor. Ook omdat je met Docker eenvoudig allerlei extra diensten kunt draaien. Ansible-NAS maakt zowel het bestanden delen als extra diensten draaien op Ubuntu Server extra eenvoudig, inclusief dashboard. Hoe jeAnsible-NAS installeren kunt op je Ubuntu Server, lees je hier.
Ansible-NAS is voortgekomen uit de frustratie van David Stephens over FreeNAS, waarvan een upgrade bij hem vaak misliep. En laat dat nou precies de reden zijn waarom ik zelf ook Ansible-NAS ontdekt heb: FreeNAS is een geweldig opensource besturingssysteem om een nas bij je thuis te draaien, maar na de zoveelste keer dat ik een toetsenbord en scherm op mijn nas moest aansluiten om een problematische upgrade op te lossen, was ik het beu.
Ik zocht naar een alternatief en vond Ansible-NAS. Ik installeerde eerst Ubuntu Server en dan Ansible-NAS. Sindsdien ben ik heel tevreden. Ik draai er ondertussen zelfs meer diensten op dan ik ooit op FreeNAS deed.
Hardware-benodigdheden
Allereerst dien je na te denken over de hardware waarop je Ansible-NAS wilt draaien. In principe volstaat elke Intel-compatibele 64bit-processor waarop Ubuntu Server draait. De hoeveelheid intern geheugen en je opslagcapaciteit hangt uiteraard af van wat je er precies mee wilt doen en hoeveel bestanden je hebt. De processor is vooral belangrijk als je van plan bent veel extra diensten op je nas te draaien. De meeste mensen hebben echt geen supersnelle machine nodig. Zelf gebruik ik al jaren de compacte Dell PowerEdge T110 II-towerserver met FreeNAS, en met Ubuntu Server draait hij even vlot. David Stephens test Ansible-NAS op een HP Proliant Microserver N54L.
Ansible-NAS gaat ervan uit dat je voor je dataschijven het bestandssysteem ZFS gebruikt, dat heel betrouwbaar is. Het is niet per se nodig, maar in mijn geval waren mijn dataschijven al van ZFS voorzien, omdat FreeNAS dat bestandssysteem ook gebruikt. Ik kon ze dan ook eenvoudig importeren in Ubuntu Server. Werk je met ZFS, dan is minimaal 8 GB ram wel aan te raden, al kan het ook met minder.
Voor een nas is het zeker aan te raden om wat redundantie in te voeren voor extra veiligheid als er een schijf uitvalt. De eenvoudigste manier is twee dataschijven in een spiegelconfiguratie op te stellen (oftewel raid 1): twee even grote schijven die elkaars kopie vormen. Met ZFS is dat eenvoudig te creëren. Het besturingssysteem zelf installeer je het best op een afzonderlijke kleinere schijf.
Ubuntu Server installeren
Ansible-NAS is geen nas-besturingssysteem zoals FreeNAS, maar dien je eerder als een nas-configuratie van een Ubuntu-server te beschouwen. Je moet dus eerst Ubuntu Server installeren. Ansible-NAS ondersteunt de huidige LTS-versie, Ubuntu 18.04 LTS. Download het image van de website van Ubuntu en schijf het naar een usb-stick of dvd-rw.
De installatie verloopt vergelijkbaar aan die van Ubuntu Desktop, maar zonder grafische interface: in plaats daarvan worden de stappen in opeenvolgende tekstvensters getoond. Kies je toetsenbordindeling en selecteer dan Install Ubuntu. Daarna wordt normaal automatisch een netwerkverbinding opgezet als je dhcp in je netwerk gebruikt. In de stap erna kies je je opslag. Selecteer Use An Entire Disk en kies de schijf waarop je Ubuntu wilt installeren. Bevestig de voorgestelde partitionering (standaard gebruikt Ubuntu het bestandssysteem ext4, wat prima is voor de opstartschijf) met Done en bevestig nog eens met Continue. Daarna wordt de gekozen schijf gewist en begint de installatie.
Vervolgens vul je enkele gegevens in, zoals de naam van de server, je gebruikersnaam en wachtwoord. Daarna is het wachten tot de installatie voltooid is. Omdat Ubuntu Server alleen software installeert die nuttig is voor servers, gaat dat sneller dan bij Ubuntu Desktop. Verwijder daarna het installatiemedium en kies Reboot Now. Daarna start je nas opnieuw op en draai je Ubuntu Server.
©PXimport
Ubuntu Server heeft geen grafische interface, dus je zult allerlei opdrachten moeten invoeren. Dat kun je via het toetsenbord en scherm doen dat je tijdens de installatie aangesloten hebt, maar het kan ook zonder, namelijk via ssh (secure shell) vanaf een andere computer op het netwerk. Draai je een Windows-versie van vóór april 2018, dan dien je het programma PuTTY te installeren.
Heb je een nieuwere versie van Windows 10, dan kun je de ingebouwde ssh-client gebruiken. Ga daarvoor eerst naar Instellingen / Apps / Optionele onderdelen en klik dan op Een onderdeel toevoegen. Kies OpenSSH-client en herstart je computer. Daarna kun je in de Opdrachtprompt van Windows op je Ubuntu-server inloggen met de opdracht ssh gebruikersnaam@server. Bevestig met yes dat je de vingerafdruk vertrouwt en vul je wachtwoord in. Linux en macOS hebben overigens standaard al een ssh-client geïnstalleerd, dus daarmee kun je onmiddellijk aan de slag.
Dataschijven klaarmaken
We gaan er in deze masterclass van uit dat je voor je dataschijven ZFS gebruikt. Installeer de benodigde tools met:
sudo apt install zfsutils
Daarna willen we een ZFS-bestandssysteem op twee schijven in een spiegelconfiguratie aanmaken. Bekijk eerst met de opdracht lsblk welke schijven Ubuntu kent. Waarschijnlijk heet je opstartschijf sda en je twee andere schijven sdb en sdc. Creëer nu op die twee laatste een nieuwe partitietabel:
sudo parted /dev/sdb
(parted) mklabel gpt
(parted) quit
sudo parted /dev/sdc
(parted) mklabel gpt
(parted) quit
Bekijk wat de ID’s van je twee dataschijven zijn:
ls -l /dev/disk/by-id/
De namen blijven immers niet gegarandeerd hetzelfde; de ID’s wel. Een ID ziet er bijvoorbeeld uit als ata-SAMSUNG_HD204UI_S2H7J9JB712549. Daarna dien je nog de sectorgrootte van je harde schijven te weten. Voor moderne harde schijven is dat 4 kilobyte, maar sommige liegen en geven 512 bytes weer als je het vraagt, omdat Windows XP problemen heeft met 4 kilobyte.
©PXimport
ZFS-pool aanmaken
Met al deze informatie kunnen we nu een ‘pool’ aanmaken op de twee schijven:
sudo zpool create -o ashift=12 tank mirror
ata-SAMSUNG_HD204UI_S2H7J9JB712549 ata-SAMSUNG_HD204UI_S2H7J9JB712552 <xmp>
(aan elkaar). De tekst ashift=12 wijst op de sectorgrootte van 4 kilobyte (2^12); tank is de naam van de pool. Het is traditie om daarvoor namen van personages uit de film The Matrix te kiezen, zoals tank, dozer of ash, maar je kunt ze ook gewoon data noemen. Maak het gewoon niet te lang, zodat het handig blijft om in te typen.
Daarna bekijk je met zpool list al je pools, met zpool status de status van al je pools en met zfs list al je ZFS-bestandssystemen. Standaard maakt de opdracht zpool create een bestandssysteem aan met dezelfde naam als je pool en koppelt die aan onder je rootpartitie. Je pool genaamd tank wordt dus aangekoppeld onder /tank.
Het is de gewoonte om onder je pool nog meerdere ZFS-bestandssystemen aan te maken, omdat je per bestandssysteem kunt instellen of je bijvoorbeeld compressie wilt gebruiken, of bestanden uitvoerbaar zijn enzovoort. Bekijk daarvoor de tips voor de ZFS-configuratie op de website van Ansible-NAS.
Ansible-NAS installeren
Nu de basis klaar is, kunnen we Ansible-NAS installeren. Eerst dienen we nog een repository in te schakelen met de opdracht:
sudo add-apt-repository universe
Daarna installeren we Ansible:
sudo apt install ansible
Ansible is automatiseringssoftware waarmee je automatisch je Linux-systemen kunt configureren. Ansible-NAS is eigenlijk gewoon een in de taal van Ansible voorgedefinieerde configuratie (een ‘playbook’) om van je Ubuntu-server een nas te maken. Ansible-NAS installeren komt er dus op neer om gewoonweg die configuratie van GitHub te downloaden:
git clone https://github.com/davestephens/ansible-nas.git
Ga daarna naar de directory die Ansible-NAS bevat:
cd ansible-nas
Ansible-NAS configureren
Ansible-NAS komt met een standaardconfiguratie in group_vars/all.yml.dist. Kopieer die eerst, zodat je je eigen configuratie kunt aanpassen:
cp group_vars/all.yml.dist group_vars/all.yml
Open dit laatste bestand met de editor nano:
nano group_vars/all.yml
De volledige configuratie van Ansible-NAS gebeurt in dit ene bestand. Regels die met # beginnen, zijn commentaarregels. Die staan overal in het bestand om uitleg te geven. Zo kun je elke gedefinieerde dienst inschakelen door false naar true te veranderen.
Maar eerst dien je onder General enkele belangrijke zaken in te stellen, zoals de hostname van je Ubuntu-server, je tijdzone en de gebruikersnaam waaronder je Ansible-NAS wilt draaien. Vul verder ook het pad in waaronder Docker zijn containergegevens opslaat.
Onder Samba staat de configuratie van je bestandsdeling. Hier stel je het pad in waaronder al je bestanden komen te staan die je wilt delen. Daaronder definieert Ansible-NAS allerlei submappen voor je downloads, films, series, torrents, muziek, podcasts enzovoort. Voor elk van die shares kun je instellen of ze publiek beschikbaar zijn en dergelijke.
Sla je wijzigingen op met Ctrl+O en sluit nano dan af met Ctrl+X.
©PXimport
Kopieer dan nog één bestand met:
cp inventory.dist inventory
En haal daar het hekje weg voor de tweede regel, zodat die er als volgt uitziet:
localhost ansible_connection=local
Sla het bestand op en installeer daarna nog enkele afhankelijkheden:
ansible-galaxy install -r requirements.yml
Pas tot slot je configuratie van Ansible-NAS toe met:
ansible-playbook -i inventory nas.yml -b -K
Ansible-NAS upgraden
Ansible-NAS wordt actief onderhouden en er komen dan ook continu nieuwe diensten bij. Maar omdat Ansible-NAS geen programma is maar een verzameling configuratiebestanden, verloopt het upgraden wat atypisch. Je gaat daarvoor in de directory van Ansible-NAS en haalt dan de nieuwste wijzigingen van GitHub binnen met de opdracht git pull. Daarna dien je alle nieuwe configuratiesecties in het bestand group_vars/all.yml.dist te kopiëren naar jouw eigen versie group_vars/all.yml.
Een handige manier om die wijzigingen te bekijken is als volgt: kijk in de uitvoer van git pull naar een regel zoals 84e0c96..7860ab5 master -> origin/master. Voer dan de volgende opdracht uit om de verschillen te tonen:
git diff 84e0c96:group_vars/all.yml.dist 7860ab5:group_vars/all.yml.dist
In het groen zie je de nieuwe regels, in het rood verwijderde regels. Voer die wijzigingen dan door in group_vars/all.yml. Pas daarna de configuratie opnieuw toe met:
ansible-playbook -i inventory nas.yml -b -K
Ansible-NAS dashboard leren kennen
Vanaf nu deelt je nas de ingestelde mappen op je netwerk. In Windows heb je er dan ook eenvoudig toegang tot in Windows Verkenner. Maar wat kun je verder nog met Ansible-NAS? Het eerste wat je het best doet, is alle extra diensten die je in het configuratiebestand van Ansible-NAS ingesteld hebt, toevoegen aan het dashboard van Heimdall.
Het concept van Heimdall klinkt misschien wat simpel en nutteloos: het is een eenvoudige webserver met één webpagina waaraan je icoontjes van webapplicaties kunt toevoegen. Meer niet. Maar als je zoals in het geval van Ansible-NAS allerlei diensten installeert die elk hun eigen webinterface hebben, verlies je al gauw het overzicht als je niet één plaats hebt waarvandaan je ze allemaal kunt bereiken. Daarin blinkt Heimdall uit, dat standaard op poort 10080 van je nas draait.
©PXimport
Open het dashboard daarom in je webbrowser (http://IPADRESNAS:10080) en klik rechtsonder op het icoontje met de drie horizontale streepjes. Klik op Add en vul dan een naam en url in van de dienst die je wilt toevoegen. Als de dienst door Heimdall ondersteund is, verschijnt de naam van de dienst ook bij Application Type, waar je overigens zelf ook het type kunt instellen als je bijvoorbeeld je OPNsense-router liever ‘router’ noemt in je dashboard. Je kunt ook nog een icoontje of achtergrondkleur instellen. Controleer tot slot nog of bovenaan Pinned ingeschakeld staat en klik op Save om de dienst aan je dashboard toe te voegen.
Doe dit nu voor alle diensten van Ansible-NAS, waarvan je de poortnummers in de documentatie van Ansible-NAS vindt. Je kunt overigens ook prima andere websites toevoegen, zoals je webmail of andere websites die je vaak gebruikt.
Docker-containers
Ansible-NAS installeert alle diensten (behalve het bestandsbeheer) in Docker-containers. Een container is een soort virtuele machine, maar die dezelfde kernel als het onderliggende besturingssysteem gebruikt. Door elke dienst in een afzonderlijke container te isoleren, garandeer je dat ze elkaar niet in de weg zitten en tot incompatibiliteitsproblemen leiden.
Voor gewoon gebruik hoef je je daar niets van aan te trekken, maar als je wat geavanceerdere configuratietaken wilt uitvoeren of zelfs extra diensten wilt installeren die Ansible-NAS standaard niet ondersteunt, dan komt het wel van pas dat je met Docker kunt werken. Zie daarvoor het kader ‘Containers beheren met Portainer’.
Ansible-NAS bevat talloze extra diensten die je kunt installeren. Bij vele volstaat het om in het bestand group_vars/all.yml een variabele met de naam van de dienst en dan _enabled op true te zetten om de dienst in te schakelen. Extra configuratiemogelijkheden zoals gebruikersnamen, directory’s enzovoort voor die specifieke dienst vind je onderaan het configuratiebestand. Bekijk ook zeker de online documentatie van Ansible-NAS, want daarin staat voor een deel van de diensten nog wat extra uitleg.
Elke keer nadat je het configuratiebestand aangepast hebt, dien je de Ansible-configuratie toe te passen:
https://www.docker.com/
Dat installeert de benodigde Docker-container en stelt je configuratie in.
Een gebruiksvriendelijke webinterface voor Docker is Portainer. Het is naast Heimdall de enige andere dienst die Ansible-NAS standaard inschakelt, precies omdat beide diensten zo handig zijn. Je vindt Portainer op poort 9000. Log in je webbrowser in met de gebruikersnaam die je voor je Ubuntu-server aangemaakt hebt en het bijbehorende wachtwoord. Klik daarna op Containers om je containers te zien. Elke container kun je stoppen, herstarten, pauzeren, verwijderen enzovoort.
Maar let op als je een container verwijdert: de volgende keer dat je de configuratie van Ansible-NAS toepast, wordt de container opnieuw aangemaakt als je die niet uitgeschakeld hebt in het bestand group_vars/all.yml. Met een klik op Add container kun je overigens extra diensten installeren die Ansible-NAS niet voorziet. Typ daarvoor bij Image de naam in van een image dat op Docker Hub staat.
©PXimport
Interessante diensten op je nas
Het zou te ver gaan om op alle diensten van Ansible-NAS in te gaan, maar we noemen enkele interessante diensten. Watchtower is interessant omdat die dagelijks van al je containers de nieuwste versie downloadt en ze herstart met die nieuwe versie als er een update is. Cloudflare Dynamic DNS Updater werkt je dynamische dns bij Cloudflare bij. Traefik kan externe toegang tot al je diensten mogelijk maken, inclusief een tls-certificaat voor elke dienst via Let’s Encrypt.
Verder heb je ook allerlei diensten om multimedia te downloaden, zoals Transmission voor BitTorrent en NZBGet voor Usenet. Ook een Time Machine-dienst voor back-ups van je Macs, een DLNA-server, Plex Media Server en zelfs Nextcloud om je bestanden met anderen te delen. Kortom, met Ansible-NAS maak je veel meer van je nas.