Twitter Cards in Hugo

Twitter Cards sind diese seltsamen kurzen Vorschauen die einem auf Twitter bei geposteten Links angezeigt werden.

Bei den meisten Zeilen werden nur statische Dinge aus dem Hugo Context oder der Konfiguration angezogen. Die einzige interessante Zeile ist wohl der twitter:title. Damit nicht nur einzelne Blogposts sondern auch Seiten wie Archiv oder Home mit dem richtigen Seitentitel bestückt werden ist die if/else Unterscheidung nötig.

<!-- Twitter Cards -->
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="{{ .Site.Params.Twitter }}">
<meta name="twitter:creator" content="{{ .Site.Params.Twitter }}">
<meta name="twitter:title" content="{{ $isHomePage := eq .Title .Site.Title }}{{ .Title }}{{ if eq $isHomePage false }} - {{ .Site.Title }}{{ end }}">
<meta name="twitter:url" content="{{ .Permalink }}">
<meta name="twitter:image" content="{{ .Site.BaseURL }}/images/noqqe_square.png">
<meta name="twitter:description" content="{{if .IsPage}}{{ .Summary }}{{else}}{{.Site.Params.Description}}{{end}}">

Die sonstigen Inhalte werden aus der config.yaml geholt.

params:
 Description: "No advertising, no support, no bug fixes, payment in advance."
 Author: "Florian Baumann"
 Twitter: "@noqqe"

Tor & 32c3

Man kommt sich wieder vor wie 14. Damals, als man sich in der Schule freute am Internet zu sitzen und nach Lycos und Yahoo nicht mehr wusste, wohin man eigentlich surfen soll. Zumindest hatte ich dieses Gefühl am 32c3, als ich mich mal etwas besser umsah innerhalb der Darkweb^WCyber^WHidden Services mit den (jetzt per RFC gesicherten) .onion Adressen.

Wo steht eigentlich Tor? Wer hat davon etwas? Wenn ich nicht gerade als Whistle-Blower irgendwelche Dokumente in einen SecureDrop einwerfen will oder auf einer bestimmten Site Materialien erwerben möchte, ist das richtig schwer zu beantworten. Klar jetzt werden wieder allerhand Stereotypen bedient, aber mal ehrlich.

Was tut man? Man altavistat! Ich scheine nicht allein zu sein mit dem Problem nichts wirklich zu finden. Sowohl im wörtlichen als auch im übertragenen Sinne. Es gibt unzählige Index-Seiten, Tor Suchmaschinen, Quora Fragen usw.

Man klickt sich durch anonyme Chats, Beichtseiten, diverse Imageboards (dt&en) und zu meiner Überraschung auch interessante Sachen wie The Tor BSD Diversity Project

Leider ist die Ahnungslosigkeit innerhalb des Schul-Deja vu nicht das einzige das sich wiederholt. Auch die Web-Design sieht original so aus, als wäre man in der Zeit zurückgereist.

Im Talk am 32c3 war das Thema einfach mehr Sites in das Onion Network zu kriegen.

Sogar ein Blog bei dem es total Sinn befreit sie in Netzwerk anzulegen. So wie diesen hier. Trotzdem hab ich es mal getan. Unter gtn6uc5wbeavcda3.onion kann man diesen Blog nun abrufen.

OpenBSD Upgrade Guidelines

OpenBSD ist eine der am Besten dokumentierten Betriebssysteme überhaupt. Nichts, aber auch garnichts, führt an der offiziellen Upgrade Dokumentation vorbei, da diese jedes mal auch ein wenig anders ist.

Trotz allem Pflege ich so meine eigene kleine Anleitung in cmddocs um die vier Kisten unter meiner “Obhut” unfallfrei durch das Upgrade zu führen. Vor allem da nicht alle Aspekte in der offiziellen Anleitung ausgeführt werden. Seit 6 Releases mach ich das jetzt so.

Pre-Upgrade

  • Upgrade Manual auf http://www.openbsd.org/faq/upgrade5X.html genauestens durchlesen
  • Downtime im Monitoring eintragen
  • root Login direkt über sshd sicherstellen
  • Sicherstellen dass root eine /bin/ksh zugewiesen hat
  • Verifizieren dass die letzten Backups liefen

Upgrade

  • Von einem Host dediziert als root user einloggen, pur, nicht über sudo
  • Sicherstellen ob der Mirror, den man benutzt schon gesynct ist.
  • Base Sets und Kernel und Signaturen ziehen.
VER=5.8
ARCH=$(uname -m)
wget -r --no-parent -A.tgz http://openbsd.cs.fau.de/pub/OpenBSD/$VER/$ARCH/
cd openbsd.cs.fau.de/pub/OpenBSD/$VER/$ARCH/
wget http://openbsd.cs.fau.de/pub/OpenBSD/$VER/$ARCH/bsd
wget http://openbsd.cs.fau.de/pub/OpenBSD/$VER/$ARCH/bsd.rd
wget http://openbsd.cs.fau.de/pub/OpenBSD/$VER/$ARCH/bsd.mp
wget http://openbsd.cs.fau.de/pub/OpenBSD/$VER/$ARCH/bsd.sp
wget http://openbsd.cs.fau.de/pub/OpenBSD/$VER/$ARCH/SHA256
wget http://openbsd.cs.fau.de/pub/OpenBSD/$VER/$ARCH/SHA256.sig
  • Schritten aus der Anleitung zum Einspielen auf openbsd.org folgen
  • Reboot
  • Auf Package- / Base-Changes im Tutorial achten.

Packages und Ports

  • Packages: PKG_PATH in ksh/bash aktualisieren und updaten

    export PKG_PATH=http://openbsd.cs.fau.de/pub/OpenBSD/$(uname -r)/packages/$(uname -m)/
    pkg_add -u
    
  • CVS src Tree updaten

    cd /usr
    cvs -qd anoncvs@openbsd.cs.fau.de:/cvs get -rOPENBSD_5_X -P src
    
  • CVS ports Tree updaten

    cd /usr
    cvs -qd anoncvs@openbsd.cs.fau.de:/cvs get -rOPENBSD_5_X -P ports
    

Errata

Da oftmals Errata publik werden nachdem das eigentliche Release schon im freeze ist, am besten gleich nach dem Upgrade schauen, ob schon Errata verfügbar sind. Ich benutze hierfür Binpatching via openup

PKG_PATH_MAIN=http://openbsd.cs.fau.de/pub/OpenBSD/5.X/packages/amd64/
./openup

3rd Party Software

Sicher treffen diese Punkte nicht auf jeden zu, aber um ein Bild zu verschaffen um was es geht:

  • pip Packages neu installieren
  • gem Packages neu installieren
  • go Software neu bauen
  • Selbst kompilierte Software neu bauen (taskwarrior, tarsnap)

Post-Upgrade

  • sshd root login deaktivieren
  • Default Shell auf Bash zurückstellen (falls nötig)

Eventuell ist das für Neulinge oder Andere nützlich. Mir hilft es jedes mal wieder. Und wenn es nur darum geht mir sicher zu sein, nichts vergessen zu haben.

Als ich begann die Wikipedia zu editieren.

Ich begann vor kurzer Zeit, die Wikipedia zu editieren.

Der OpenBSD Artikel

Ich hab vorher noch nie irgendwas in die Wikipedia eingetragen. Und ich kann auch nicht sagen warum ich das jetzt mal machen wollte. Spieltrieb vielleicht.

Es begann mit dem Einfügen der Versionstabelle in den OpenBSD Artikel. Ich klaute mir eine Vorlage zu einer Versionstabelle aus einem Artikel, an den ich mich nicht mehr erinnern kann, editierte ein bisschen und am Ende kam das heraus was jetzt ersichtlich ist.

Alles verlief recht angenehm. Der Eintrag wurde gesichtet und freigegeben. Ganz nett eigentlich. Das war mein erster Beitrag und obwohl ich mit allem Möglichen rechnete, blieb er bestehen.

Der OpenSMTPD Artikel

Im Zuge der Ergänzung von Software Projekten die aus OpenBSD entspringen im Hauptartikel, fiel mir auf dass es für OpenSMTPD und OpenIKED keine Einträge gab.

Wie schwer konnte das wohl sein, einen neuen Artikel einzureichen? Schliesslich machen das auch andere Menschen. Ich kopierte also den Inhalt von OpenNTPD und schrieb ihn ein wenig um. Drückte auf Speichern.

Was dann passiert war vorerst normal. Wegen fehlender Relevanz sollte der Artikel gelöscht werden.

Löschanträge

Ich war mir erst unsicher ob das vielleicht immer so ist. Aber nach etwas stöbern und lesen, wurde mir klar dass es für soetwas “Einzelnachweise” braucht. Irgendeine Nutzungsstatistik oder einen Nachweis für signifikanten Marktanteil der das Subjekt relevant genug macht um in der Wikipedia genannt zu werden.

Zuerst bezog ich mich aber auf die Wikipedia Einträge anderer OpenBSD Software wie OpenBGPD und OpenNTPD. Den Eintrag hatte ich ja sogar als Vorlage benutzt. Das hatte lustiger Weise zur Folge das auch diese Artikel einen Löschantrag aufgebrummt bekamen. Ein Gefühl von “Das hast du ja jetzt ganz toll gemacht” machte sich breit.

Ich teile die Ansicht nicht, dass Relevanz erst bewiesen werden muss. Gerade bei OpenBSD gibt es nur sehr wenig Nutzerzahlen oder Projekte wie popcon. Wohingegen man aber sonst die Grenze zieht, ohne das jedes Github Projekt seinen eigenen Artikel bekommt, bin ich mir auch nicht ganz schlüssig.

Logos und Urheberrechte

Weder das OpenBSD noch OpenSMTPD haben klare Lizenzen auf ihren Artworks wie Banner oder Logos. In der englischen Wikipedia sind all diese Logos eingebunden. Das OpenBSD Logo dort weisst sogar spezifische Informationen über die Herkunft und eingeräumten Nutzungsrechte auf.

The holder of the copyright (Theo de Raadt) mentions on the artwork website the following “license”: Most images provided here are copyright by OpenBSD, by Theo de Raadt, or by other members or developers of the OpenBSD group. However, it is our intent that anyone be able to use these images to represent OpenBSD in a positive light. So enjoy them and let the world see them, if that is your wish. Theo de Raadt is aware of the use of this svg file for the wikipedia article.

Ich lud also mit einer ähnlichen Übersetzung das Logo in die deutsche Wikipedia. Wurde auch prompt wegen ungeklärten Nutzungsrechten wieder gelöscht.

Wahrscheinlich hängt das mit deutscher Gesetzgebung zusammen. Da geht es wohl vor, die Organisation zu schützen statt schöne Artikel zu haben.

Ende

Ein bisschen in all das einzutauchen, Vorgänge und Gepflogenheiten dieses “speziellen” Ökosystems zu verstehen war interessant. Ich weiss nicht wie all das ausgehen wird. Wahrscheinlich wird es aber von diesem Ausgang abhängen, ob ich weiterhin ab und zu mal Artikel ergänze oder einfach nur ein weiterer vergraulter Wikipedianer werde dem Mühe zunichte gemacht wurde.

vim für alle Gelegenheiten

Ich benutze vim für so gut wie alles. Blogposts, Mails, Notizen, Dokumentation, Skripte und Code. Doch egal wie sehr ich diesen wunderbaren Editor auch konfiguriere, es kommen immer wieder Situationen auf, in denen das ein oder andere Setting keinen Sinn ergibt.

Spelling, Textwidth und Wrapping sind zum Beispiel solche Settings. Über einen Blogpost über Vim mit Markdown stiess ich dann auf ein Plugin, welches sich um Soft-/Hard-Wrapping kümmert.

Im README befand sich ein Beispiel, in dem für verschiedene FileTypes unterschiedliche Optionen gesetzt werden.

augroup pencil
  autocmd!
  autocmd Filetype *      call pencil#init({'wrap': 'soft', 'textwidth': 75})
                            \ | setl textwidth=0 wrapmargin=0 wrap
  autocmd Filetype mail   call pencil#init({'wrap': 'soft', 'textwidth': 75})
                            \ | setl sw=2 ts=2 noai nonu nornu
                            \ | setl tw=100
                            \ | setl fdo+=search
  autocmd FileType markdown call pencil#init({'wrap': 'soft', 'textwidth': 80})
                            \ | setl spell spelllang=de,en fdl=4 noru nonu nornu
                            \ | setl tw=100
                            \ | setl fdo+=search
  autocmd FileType text   call pencil#init({'wrap': 'soft', 'textwidth': 75})
                            \ | setl spell spelllang=de,en fdl=4 noru nonu nornu
                            \ | setl tw=75
                            \ | setl fdo+=search
augroup END

Für die meisten vim User dürfte das nichts neues sein. Gerade Textwidth und Wrapping haben bei mir auch erstmal Versteh-Bedarf gehabt. Ich kann jetzt auch die Tagbar (für Variablen und Funktionen) nur für bestimmte Filetypes öffnen. Außerdem hab ich noch ein paar weitere Plugins gefunden.

Plugin 'tpope/vim-fugitive' " Git Wrapper
Plugin 'tpope/vim-commentary' " auto commenting with keybinding gc
Plugin 'airblade/vim-gitgutter' " git diff line next to line numbers
Plugin 'junegunn/goyo.vim'  " writer fullscreen mode
Plugin 'reedes/vim-pencil'  " Soft-, Hard-Wrapping
Plugin 'ntpeters/vim-better-whitespace' " highlightning for whitespace

So sieht mein vim wenn ich ein .markdown File öffne, komplett anders aus als bei Puppet oder Python. Kontextabhängiger Editor. So. gut. Ich werde da noch weiter rumbasteln, denke ich mal sehr.

Multi User Dungeons

MUDs sind textbasierte RPGs aus der ganz frühen Zeit der Videospiele. Man verbindet sich ganz altmodisch per telnet auf Port 23 und es kann los gehen.

Ich habe das vor Jahren mal ausprobiert, aber gleich wieder verworfen. Vor ein paar Wochen musste ich aber wieder daran denken und angefangen das MorgenGrauen zu spielen.

Typischerweise befindet man sich in Räumen bzw Feldern, die mit einem 3-4 Zeilen langem Beschreibungstext die Umgebung spezifizieren. Das Reicht vom Hobbit Wald zur Drachenhöhle, über den Sumpf der Orks, bis hin zur Zwergenhochburg im Gebirge. Darin können sich allerhand Sachen befinden. NPCs, Tische, Tümpel, ein Strauch, ein abgetrennter Trollkopf oder verzauberte Kochlöffel. Danach hat man meist ein paar Möglichkeiten. Man untersucht Details im Raum, spricht mit NPCs, tötet irgendetwas oder verlässt den Raum in eine Himmelsrichtung.

Man bewegt sich also von Raum zu Raum. Am Anfang geht das noch und man fängt Stück für Stück an die Welt zu erforschen aber schnell merkt man, dass die Welt einfach zu groß ist um durch fiese Wälder zu tollen und sich alle Wege zu merken. Deshalb macht man einfach ein paar Skizzen und Notizen.

Charm hat auch Stufenpunkte System. Statt World of Warcraft like pausenlos auf dem immer gleichen Mob zu kloppen um EPs zu grinden, setzt sich das Levelsystem aus einem komplexen Mix allerhand Indikatoren zusammen. Natürlich gibt es EP, aber es gibt auch separate Punkte für Quests, gefundene Zaubertränke (die Stats erhöhen), geführte Dialoge, Besuche in Orten der Weltkarte und und und. Alles ist darauf abgezielt die Erfahrung des Spielers in allen Bereichen des Spiels im Level widerzuspiegeln.

TinTin++

Mit der Zeit ergeben sich aber natürlich Schwächen von einfachem Telnet. Kein Zurück, keine History, Text des flappt einfach zwischen dem Getippten usw. Dabei bietet so ein einfaches Textinterface do so viel potiential für Tooling!

  • Autocomplete
  • History
  • Alias
  • Loops
  • Highlights für Farben
  • Actions
  • Reverse Search a la Bash
  • Path Recording (was ich noch nicht nutze)
  • Prompts

Es gibt wirklich eine Menge Clients. Das Meiste davon ist totaler Bullshit. Einer aber hat meinen Geschmack recht gut getroffen. Ncurses Interface und sau schön skriptbar. Tintin++. Er kann so ziemlich alles was man sich wünschen kann.

Ein Auszug der Konfiguration von Tintin++

#HIGHLIGHT  {%w teilt Dir mit: %*}  {light green}  {5}
#HIGHLIGHT  {Du teilst %w mit: %*}  {light green}  {5}
#HIGHLIGHT  {Es gibt %w sichtbaren Ausgang:}  {light blue}  {5}
#HIGHLIGHT  {Es gibt %w sichtbare Ausgaenge:}  {light blue}  {5}
#HIGHLIGHT  {^[%w:%*]%*}  {green}  {5}
#SPLIT      {bottom row}
#TAB        {steinschlag}
#TAB        {unt}
#TAB        {info}
#TAB        {frage}
#TAB        {kurzinfo}
#ALIAS      {k} {kurzinfo} {5}
#ALIAS      {u} {unt} {5}
#ALIAS      {tmo} {tm ootato} {5}
#ALIAS      {ZT} {zaubertraenke} {5}
#ACTION     {Eine Stechmuecke kommt an} {toete muecke} {5}
#SESSION    MorgenGrauen mg.mud.de 23

Un noch einiges mehr. Wenn ich zum Beispiel in einer alten Scheune befinde und 50 Kisten zum Untersuchen habe, löse ich das auch öfters mal mit einer For-Loop

#loop 1 50 x {ziehe kiste $x ; oeffne kiste}

Oder ähnliches. Es macht Spass im Moment einen kleinen Zwerg durch die Gegend schicken. Ich werde da wohl noch die eine oder andere Stunde verbringen :)

Bildquelle: VT-100 von Wikipedia

NixOS

Ja, tatsächlich mal wieder Linux. Der neue Server der K4CG läuft mit NixOS. Habe ich damit vorher schonmal was gemacht? Nö. Aber das Konzept ist vielversprechend.

NixOS ist nicht wie jede andere Distro. Sie besteht aus dem Paket-Manager nix und einer einzigen deklarativen Config die mit Modulen benutzt wird. Verschiedene Versionen von Libraries oder andere Software koexistieren auf dem System. So ist es auch möglich das User ihre eigenen Programme installieren ohne das System zu beeinflussen.

NixOS Config

Um den sshd im OS zu konfigurieren, sieht die /etc/nixos/configuration.nix unter anderem so aus..

# SSH
services.openssh = {
  enable = true;
  allowSFTP = false;
  forwardX11 = false;
  permitRootLogin = "no";
  passwordAuthentication = false;
  challengeResponseAuthentication = false;
};

oder einen neuen Benutzer anlegen

users.extraUsers.noqqe = {
  isNormalUser = true;
  extraGroups = [ "wheel" "networkmanager"];
  uid = 1000;
  openssh.authorizedKeys.keys = [ "ssh-rsa AAAAB..." ];
};

oder ein Tor Relay aufsetzen

services.tor.relay = {
  nickname = "nixe.k4cg.org";
  portSpec = 9001;
  exitPolicy = "reject *:*";
  isExit = false;
  bandwidthRate = "200000" ; # 200kb
  bandwidthBurst = "300000" ; # 300kb
  accountingStart = "day 00:00"; # reset daily
  accountingMax = "4 GB" ;
};

Alles funktioniert eigentlich ziemlich ähnlich. Ein bewährtes Vorgehen ist, einfach auf nixos.org Options nachsehen ob es den gewollten Service bereits als Modul gibt. Siehe mehr Beispiele aus dem K4CG Server hier

Obacht: Nur weil es ein Paket in nix gibt, heisst das nicht immer, dass es auch ein Modul gibt.

NixOS System Commands

Um getätigte Changes am System live zu schalten

vim /etc/nixos/configuration.nix
nixos-rebuild switch

Einen Rollback zur letzten Version machen

nixos-rebuild switch --rollback

Nix Paket Manager

Alle Paket-Befehle beziehen sich nur auf den aktuellen Benutzer. Installiere ich also als noqqe ne historisch wertvolle Version von Firefox, interessiert das (außer mich) keinen auf dem System. Dieses Konstrukt ist über ein nixos-profile geregelt. Im Endeffekt Symlinks und ein bisschen im PATH rumfummeln.

Ein kleines Cheatsheet:

Nach einem Paket suchen

nix-env -qa | grep firefox
nix-env -qas

Paket installieren/entfernen

nix-env -i firefox
nix-env -e firefox

Update aller Paket des aktuellen Users

nix-env -u
nix-env -u --dry-run

Na klar. Die ganzen Versionen und parallel Installationen verursachen ein bisschen dramatisch angestiegene Diskspace Usage. Auch dafür soll gesorgt sein.

nix-env --delete-generations old
nix-collect-garbage -d
nix-store --gc --print-dead

Mit diesen Commands werden alle unreferenzierten Versionen von zB. netcat entfernt.

Probleme

Alle möglichen Sachen laufen auf dem K4CG Server. Die ein Webserver, Mediawiki, MariaDB, IRC Bouncer und auch die Mailingliste.

Für die Mailingliste mit mlmmj war die Erfahrung bzgl. NixOS aber ziemlich enttäuschend. Das Modul ist scheinbar seit ziemlich langer Zeit nicht mehr gepflegt worden. So musste ich da erstmal etwas herumpatchen und postfix Config updaten.

Um ein IPv6 Gateway zu hinterlegen, reicht die momentane stable Version 14.12 nicht aus. Dafür muss man dem Unstable Channel folgen.

Zusammenfassung: Ist schön, macht Spass, macht Sinn, ob es sich durchsetzt keine Ahnung. Ob es auf einem produktiven System Sinn macht? Wir sind nun mal ein Hackerspace.

Photos auf Google Maps

Seit iPhoto mit “Photos” generalüberholt wurde ist die Kartenübersicht mit GPS Koordinaten sehr schlecht geworden.

Informationen werden beim Zoom verschluckt, die Karte ist entweder winzig klein oder nur ein Subset aus allen Bildern.

exiftool

Die wundervolle Software exiftool lässt Meta Daten aus Bildern lesen und schreiben. Mit folgender Zeile werden für alle Bilder die GPS Längen- und Breitengrade in Dezimalkodierung ausgegeben.

exiftool -gpslongitude -gpslatitude -n -T /Users/noqqe/Pictures/Photos\ Library.photoslibrary/Masters/ -r

Google Maps

Bisher hab ich nur die Koordinaten. Wie ich die in Google Maps reinfülle, hab ich per Stackoverflow herausgefunden

Koordinaten konvertieren

Ich muss also

7.42793055555556 43.7407694444444

zu

["Bild", 43.7370305555556, 7.42133888888889, 3598],

konvertieren. Wobei es aber zwingend erforderlich ist, dass die letzte ID eindeutig und von 1 an fortlaufend ist. Diese zwei Zeilen bewerkstelligen den ganzen Arbeitsablauf.

$ exiftool -gpslongitude -gpslatitude -n -T /Users/noqqe/Pictures/Photos\ Library.photoslibrary/Masters/ -r  | uniq | awk '{print $2" "$1}' > /tmp/foo

$ grep -v -- "- -" /tmp/foo | gsed -e 's/\s/, /' -e 's/^/["Bild", /' | gawk '{print $0 ", " FNR "],"}'']'

Danach hab ich einfach alles in das File aus Stackoverflow pastiert und fertig. maps.html im Browser aufgerufen.

Allgemein gefragt, gibt es eine self-Hosted, Webinterface Anwendung für Fotos die Gesichtserkennung, ACLs und Kartenvisualisierung kann? Ich will sowas.

Ansible - Mein neues Pssh

pssh

pssh war für eine Menge Tätigkeiten lange Tool der Wahl. Deployments, Services restarten, Files verteilen, User löschen, Hotfixes usw.

pssh -h ~/Code/mongoserver.txt -l root -t 350 -i "/etc/init.d/mongodb restart"

Der Nachteil ist aber allerdings, dass bei pssh Listen mit Hostnamen in Form von Files gepflegt werden müssen. Das wird schnell unübersichtlich und aufwändig.

Ansible Hosts

Deshalb bin ich vor ca. einem Monat zu Ansible gewechselt. Vorrangig wegen des Host-Matchings.

[mongodb]
mongodb01.example.org
mongodb02.example.org
mongodb03.example.org

[li]
li-jmp-prod
li-jmp-dev
li-jmp-stage

[n0q]
noc.n0q.org ansible_python_interpreter=/usr/local/bin/python
aax.n0q.org ansible_python_interpreter=/usr/local/bin/python

[work:children]
li
mongodb

Hosts in diesem File können mit Regex, Excludes und Gruppen von Ansible aus direkt angesprochen werden. Auch Gruppen die andere Gruppen enthalten sind möglich. Für Details hier.

Ansible als pssh Ersatz

Auch wenn ich ansible nicht so nutze wie die Meisten (nämlich als full-blown Config Management) so ist es doch extrem handlich.

Zum Beispiel einen User auf allen Servern der Gruppe “work” löschen

ansible work -m user -a 'name=alice state=absent remove=yes'

Wie oben im Beispiel alle MongoDB Prozesse neustarten

ansible mongodb -m service -a 'name=puppet state=restarted'
ansible mongodb -m service -a 'name=mongodb state=restarted'

Oder einen nrpe-Check mittels Shell Command bearbeiten:

ansible n0q -m shell -a 'sed -i "s#plugins/check_mem#plugins/check_mem -C#" /etc/nrpe.cfg'

Oder ein bestimmtes File von allen angegebenen Hosts herunterladen

ansible n0q -m fetch -a 'src=/etc/bashrc dest=/tmp/fetched'

Es fühlt sich ein bisschen an, wie die UNIX-API für alles was man so braucht.

Tarsnap Backups einer alten Maschine löschen

Seit einiger Zeit verwende ich tarsnap als Backup auf meinen VMs. Die Crypto, der Preis, das System. Gefällt mir. Nun habe ich vor ein paar Wochen ein Stück Hardware gegen eine kleine VM ausgetauscht. Die Backups auf Tarsnap habe ich vorher noch nicht gelöscht.

Da die Maschine nicht mehr existent ist, die Backups aber maschinen-gebunden, muss ich diese noch loswerden um nicht jeden Monat dafür mit zuzahlen. Nicht dass es sonderlich teuer wäre, aber trotzdem.

Dafür erforderlich ist natürlich der Key der Maschine.

Die Config erzeugen ist der erste Schritt.

cachedir /tmp/tarsnapc
keyfile /tmp/key
humanize-numbers
print-stats
totals
normalmem

Danach ein mkdir /tmp/tarnsapc und den Key nach /tmp/key kopieren. Bevor das eigentliche löschen losgeht, muss das Cacheverzeichnis mit den Metadaten befüllt werden:

$ tarsnap --config conf --fsck
Phase 1: Verifying metadata validity
Phase 2: Verifying metadata/metaindex consistency
Phase 3: Reading chunk list
Phase 4: Verifying archive completeness
  Archive 1/56...
  Archive 2/56...
  Archive 3/56...
  [...]
  Archive 56/56...
Phase 5: Identifying unreferenced chunks

Jetzt können die Backups des alten Servers die sich noch bei Tarsnap befinden angeschaut werden.

$ tarsnap --config conf --list-archives
20150402-001026-daily-/home
20150404-001026-daily-/home
20150316-001024-weekly-/etc
20150401-001024-monthly-/etc
20150330-001026-weekly-/root
[...]

Um die Backups zu entfernen, eine einfache for-Loop über alle gefundenen

for x in $(tarsnap --config conf --list-archives); do
  tarsnap --config conf -d -f $x
done

Geld gespart.