Snippets: git, aptitude, who, mysql, tcpdump, lftp

Ein Sammelsurium von diversen Kommandos die sich angesammelt haben und die ich mir eben aufschreiben musste:

  • GIT – Die Aenderungen von Commit XYZ anzeigen:
    git show COMMITHASH
  • GIT – In den git commit messages suchen:
    git log --all --grep "foo"
  • GIT – Was hab ich noch mal in dieser Datei seit dem letzten pullen geaendert?
    git diff HEAD /path/to/file
  • APTITUDE – Was ist die Abhaengigkeitskette warum dieses Paket installiert ist:
    aptitude why PACKAGENAME
  • WHO – Wann wurde das System das letzte mal neu gestartet?
    who -b
  • MYSQL – Wie erzeuge ich die Tabelle neu:
    SHOW CREATE TABLE tabellenname;
  • TYPDUMP – Mit tcpdump den Traffic mitschneiden und in einer Datei speichern um diese später mit wireshark zu analysieren:
    tcpdump -i eth0 host 192.168.1.30 -X -s0 -w /tmp/foo
  • LFTP: Verzeichnislisting rekursiv erzeugen und Ausgabe in einer Textdatei speichern:
    lftp -u user,pass -e 'find /;bye' host > file_list

Übersicht: Artikel zum Thema Puppet

Weil ich es gerade selbst brauche, hier eine Übersicht der von mir geschriebenen Blogposts zum Thema Puppet:

HowTo: Find all hardlinks to one file

  • ls -l zeigt in der zweiten Spalte die Anzahl der Hardlinks an.
  • ls -i zeigt die Indexnummer der Datei an.
  • find / -inum INDEXNUMMER findet alle Dateien mit der gleichen Indexnummer.

Beispiel:

user@host:~$ cd /tmp/
user@host:/tmp$ mkdir {foo,bar}
user@host:/tmp$ touch foo/file 
user@host:/tmp$ ln foo/file foo/file_link1
user@host:/tmp$ ln foo/file bar/file_link2
user@host:/tmp$ ls -l foo/file
-rw-r--r-- 3 user user 0 Jul 10 11:31 foo/file
user@host:/tmp$ ls -i foo/file
44302500 foo/file
user@host:/tmp$ find /tmp/ -inum 44302500
/tmp/bar/file_link2
/tmp/foo/file
/tmp/foo/file_link1
user@host:/tmp$

Puppet: Klassen mit Parameteruebergabe in Hiera

Der dritte Teil beschaeft sich damit, wie man pro Node in Hiera eine eigene Konfigurationsdatei anlegen kann sowie mit Klassen denen Parameter uebergeben werden. Er baut auf den beiden vorherigen Hiera-Blogeintraegen (1 und 2) auf. Grundsaetzlich ist vorneweg zu sagen, dass das ganze mit Puppet 3 fuer eigene Module bedeutend einfacher ist, da dort Hiera und vor allem das autolookup bereits integriert ist. In Puppet 2.7 muss man fuer die gleiche Funktionalitaet eine Kruecke bauen, doch dazu spaeter mehr.

Zuerst wird die Hiera Konfiguration erweitert, so das pro Node eine eigene Konfigurationsdatei moeglich ist. Diese sollen unter hieradata/nodes/ liegen und dafuer in der die hiera.yaml die hierarchy Sektion wie folgt erweitern:

:hierarchy:
    - common
    - nodes/%{fqdn}

Danach den neuen Ordner anlegen:

 mkdir /etc/puppet/hieradata/nodes/

In Puppet 2.7 und Puppet 3 gibt es nun Unterschiede. Das haengt mit dem automatischen Parameterlookup zusammen der in Puppet 3 integriert ist, in Puppet 2.7 aber nicht. An der Hiera Konfiguration aendert sich nichts, aber die Module die ich bisher vorgestellt hatte muessen angepasst werden. Damit sich diese unter Puppet 2.7 genauso verhalten wie unter 3, muss man wie in der verlinkten Dokumentation die Parameter mit einer Hiera-Suche und Defaultparametern modifizieren.

Wie die Anpassung geht und wie man die das ganze in Hiera abbildet moechte ich im folgenden Anhand des apt-Moduls, das ich im Blogeintrag Puppet: ein Modul mit Template, Variablen und Bedingung (/etc/apt/sources.list) vorgestellt habe., zeigen.

Die init.pp wurde wie folgt geaendert:

class apt (
  $mirror  = hiera('apt::mirror', 'http://ftp.de.debian.org'),
  $release = hiera('apt::release', 'wheezy'),
  $source  = hiera('apt::source', false),
  ) {
 
  file { '/etc/apt/sources.list':
    ensure  => 'present',
    owner   => 'root',
    group   => 'root',
    mode    => '0644',
    content => template('apt/sources.list.erb'),
    }
}

Das Modul hatte ich wie folgt im Node eingebunden:

node 'client02.example.org' inherits default {
  class { 'apt':
    mirror => 'http://debianmirror.example.org/pub/linux/debian/debian/',
    source => true
  }
}

Die Einbindung erfolgt nun ueber die Datei hieradata/nodes/client02.example.org.yaml:

---
classes: apt
apt::mirror: http://debianmirror.example.org/pub/linux/debian/debian/
apt::source: true

Danach kann die komplette Nodekonfiguration aus der site.pp geloescht werden.