Vagrant, OpenBSD und Ansible

Ich verwende Vagrant1 jetzt seit zirka 2 Jahren…
Unfassbar dass ich hier noch nix zu geschrieben habe…

Ein kleinen wenig später hab ich angefangen eigene Boxen zu erstellen und bei app.vagrantup.com hoch zu laden. Hauptsächlich OpenBSD Boxen, auch regelmässig die Snapshots. Heute wurde z.B. die erste Beta von OpenBSD 6.4 mit den Snapshots veröffentlicht. Ich habe damit eine Box erstellt und hochgeladen: OpenBSD 6.4-beta Box
Wer sich das Vagrant drum rum sparen will braucht aber nicht zwangsläufig auf die Box bzw. den Inhalt zu verzichten. Die Boxen sind nur .tgz-Dateien mit anderem Suffix und können auch via wget heruntergeladen werden z.B. mit der Zeile:

wget https://app.vagrantup.com/SierraX/boxes/openbsd-snapshot/versions/2018.08.11/providers/virtualbox.box
Username Password
root vagrant
vagrant vagrant

Wenn man sich doch für die Verwendung von vagrant entscheidet benötigt man einen Ordner mit einem Vagrantfile darin. In diesem Arbeitsverzeichnis lässt sich dann mit dem Befehl vagrant up die Maschine bzw. Umgebung starten.
Hier das von mir erstellte und angepasste Vagrantfile um mein aktuelles Image zu starten, und automatisiert Ansible per pip zu installieren:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "SierraX/openbsd-snapshot"
  config.ssh.sudo_command = "doas env %c"
  config.vm.box_check_update = false

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  # config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #   # Customize the amount of memory on the VM:
  #   vb.memory = "1024"
  # end

  # Enable provisioning with a shell script. Additional provisioners such as
  # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
  # documentation for more information about their specific syntax and use.
  config.vm.provision "shell", inline: <<-SHELL
  #   # OpenBSD changed at 6.1 to /etc/installurl.
  #   # The pkg_* commands and the new syspatch command using it.
  #   # be sure the /etc/installurl is set to your favorite mirror.
  #   echo "https://ftp.openbsd.org/pub/OpenBSD" > /etc/installurl
    echo "http://ftp.openbsd.org/pub/OpenBSD" > /etc/installurl
    pkg_add -Dsnap -Iz py-cryptography sshpass nmap
    pip2.7 install --upgrade pip
    pip2.7 install ansible
  SHELL
end

Es dauert ein paar Minuten bis die Box dann hochgefahren, angepasst und fertig zum erreichen mit vagrant ssh ist.

Zu OpenBSD und Ansible brauch ich, glaub ich nicht mehr viel zu schreiben. Naja zu Ansible2 vielleicht weil ich glauben bisher nur mit Ansible Zeilen ummernander geworfen habe, ohne wirklich zu schreiben was Ansible macht oder bringt. Das reicht aber imho auch in einer Fussnote2.

Da ich Ansible (zwar leider zu selten aber immerhin) auch bei der Arbeit verwende, bin ich ganz gerne auf dem neusten Stand. Und da MacOS ein immer noch bescheuerteres Verhalten für Hardware,Sprachen und Programme die nicht aus dem eigenen Haus kommen an den Tag legt, weiche ich damit lieber auf virtuelle Maschinen aus.
Ich will auch meine Testumgebung damit Verwalten, gerade was Wiederaufbau nach fehlgeschlagenen Tests oder der Wechsel zurück zu OpenBSD wenn man mal was anderes darauf verwendet hat.
Um ein paar Kleinigkeiten an Handarbeit kommt man nicht herum, die Liste sollte aber nicht all zu lang werden.

  • Installation Betriebsystem (kann man auch weitläufig scripten. Man siehe die Packerscripte die ich zum erstellen der Boxen verwende)
  • Anlegen einer sudoers/doas Gruppe die ohne Passwort als root agieren darf (ginge glaub auch mit Passwort ist aber umständlicher in der täglichen Arbeit)
  • Anlegen eines User’s in dieser Gruppe
  • Herstellen einer Netzwerk/SSH Verbindung zum verwaltenden Rechner
  • Damit kann man schon mal arbeiten.

    Man braucht auf dem verwaltenden Rechner (nennen wir den jetzt einfach mal „Controller“ bei „verwaltenden“ und „zu verwaltenden“ wird man ja mit der Zeit kirre) mindestens eine Inventar Datei… sonst kann man nur seine lokale Maschine damit verwalten. Kann für manche Anwendungen auch reizvoll sein, aber in meinem Anwendungsfall brauch ich eine Inventar Datei.
    Für meine Umgebung

    schaut diese Inventar Datei wie folgt aus:

    [raspis]
    raspi-lab-1 ansible_host=172.16.65.102
    raspi-lab-2 ansible_host=172.16.79.2
    
    [puffys]
    puffy-lab-1 ansible_host=172.16.71.1
    puffy-lab-2 ansible_host=172.16.71.2
    puffy-lab-3 ansible_host=172.16.71.3
    
    
    [raspbian:children]
    raspis
    
    [openbsd:children]
    puffys
    
    [raspbian:vars]
    ansible_user=pi
    
    [openbsd:vars]
    ansible_python_interpreter=/usr/local/bin/python2.7
    ansible_user=ansible
    ansible_become_method=doas
    

    … to be continued

    1 für den der es nicht kennt: Vagrant verwendet die API’s der gängigsten Virtualisierungsprogramme um Festplatten Sicherungen (dort so genannte Boxen) vorinstallierter Betriebssysteme automatisiert anzupassen. Durch erstellen einer Konfigurationsdatei kann man so einzelne Virtuelle Rechner oder ganze Umgebungen durch den Computer selbst erstellen lassen, ohne sich um das Betriebssystem oder jede Virtuelle Maschine einzeln kümmern zu müssen während des Aufbaus.
    Nach einer imho recht kurzen Phase des Einlernens hat man so die Möglichkeit sich Stunden der Installationsarbeit zu ersparen und hat auch noch die Vorteile ganze Umgebungen verwerfen zu können wenn sie nicht mehr gebraucht werden und sie mit eine kleinen ASCIIfile portabel sowie reproduzierbar zu machen. Grosse Cloudanbieter wie etwa Amazon verwenden sehr ähnliche Techniken.

    2 Ansible ist ein so genanntes Provisioning Program und stellt mit Hilfe eines so genannten playbooks (wie so eine Art Regieanweisungen) den gewünschten Endzustand einer Verteilungsfolge für die Maschinen her. Ähnlich dem provisioning im dargestellten Vagrantfile bloss nicht so stark begrenzt.
    Anders als Puppet, Chef und Salt benötigt aber Ansible keinen eigenen Agenten auf der zu verwaltenden Maschine sondern kommt dort mit einer Python Installation ab 2.6 aus. Da die zumindest auf den meisten Linux Maschinen bereits vorhanden ist und für die meisten Betriebssystem zur Verfügung steht kann man damit ohne viel zusätzliche Handarbeit, Konfigurationen und Dateien verteilen.

    Dieser Beitrag wurde unter Ansible, OpenBSD, vagrant veröffentlicht. Setze ein Lesezeichen auf den Permalink.