Archiv des Autors: Alex W

Mails von der bash senden

Einfache Emails von der bash aus schicken bzw. mittels shellscripts:

   $ mail root < /tmp/db_reorg.log
   $ echo "Komme zum Abendessen!" | mail sylvia@home.de
   $ echo "Heinz kommt auch mit" |
       mail -c johana -s "Aw:Komme zum Abendessen!" sylvia@home.de

Das Mail Kommendo akzeptiert die folgenden Parameter,

-s subject Betreff

-c address sendet eine Kopie der Email an Benutzer X

-b address sendet eine blind carbon copy der Email an Benutzer X

 

Datei Anhänge

uuencode

Binärdateien per Mail zu senden ist nicht sinnvoll, man könnte zwar eine Datei als Anhang so versenden,

mail -s "bild vom Abendessen" sylvia@home.de < essen.jpeg

aber die Wahrscheinlichkeit, dass diese unbrauchbar ankommt ist sehr hoch.
Beim versenden der Emails werden diese von einen Server zum nächsten gereicht. Jeder davon verändert die Email, d.h. entfernen von Null Bytes (ASCII code 0), umwandeln der end-of-line character LF (“line-feed”, ASCII code 12) in ein lokal passendes Format (e.g. CR LF), oder es werden anführende Leerzeichen und TABS entfernt.

Da nur sehr wenige Zeichen sicher nicht verändert werden, ist die traditionelle Lösung die Email vom Binärformat in ein Textformat für die sichere Übertragung umzuwandeln. Das Programm welches dafür benutzt wird heist uuencode (“UNIX to UNIX encoding”), zum decodieren der Emailheist das Programm uudecode.

 

$ uuencode essen.jpeg essen.jpeg | mail sylvia@home.de

Mit Text und Betreff:

$ (cat mailtext; uuencode essen.jpeg essen.jpeg) |mail -s "bild vom Abendessen" sylvia@home.de

ACHTUNG: Der Dateiname essen.jpeg erscheint zweimal in dem uuencode Befehl: der erse spezifiziert die Input Datei, die zweite ist für die Gegenseite.

mime

Vorteile:

  • vielseitige Dateimöglichkeiten, u.a. Bilder, Audio Dateien
  • mehr als ein Anhang pro Email
  • multi-part Nachrichten

Mutt ist ein interaktiver textbasierender Emailclient.

$ mutt -s "Geburtstags Feier" -a citymap.jpg all@freunde.de < einladung.txt
  • Den Empfänger (“all@freunde.de”)
  • Den Body der Email (gelesen von der Standard Eingabe, hier umgeleitet von der Datei “einladung.txt”)
  • Ein Anhang (mit Option -a)
  • Den Betreff (option -s)

Der interessanteste Teil ist die Option -a, welche für den Anhang verantwortlich ist. Die option -a kann mehrfach angehängt werden.

Wenn nur ein Anhang ohne Betreff gesendet werden soll kann man folgendermassen vorgehen:

$ mutt -a syslogs.tar.gz admin@domain.org < /dev/null

oder

$ echo | mutt -a syslogs.tar.gz admin@domain.org

Automatische Email Benachrichtigung für Updates auf Debian-Ubuntu

Installation

Dazu müssen wir folgende Schritte durchführen:

apt-get install apticron apt-listbug

apt-get install apticron apt-listbugs apt-listchanges

Nach der Installation konfigurieren wir apticron.

dpkg-reconfigure apticron

Hier geben wir einfach die Emailadresse an an welche wir die Update Benachrichtigung senden lassen wollen.

apticron

Testen

Zum Testen rufen wir einfach apticron in der Konsole auf.
MTA installiern konfigurieren

Bei der Installation der oben genanten Pakete wird auch das Paket mailx mit installiert. Wer z.B. Postfix lieber benutzten will installiert dies einfach nach.
apt-get install postfix
dpkg-reconfigure postf

apt-get install postfix

dpkg-reconfigure postfix

Wobei wir nun das Ganze als Satelitensystem konfigurieren. Mit der Option relay_host werden die Update Emails nun zu unserem Emailserver geschickt.
Die Email Benachrichtigungen sehen in etwas so aus:

apticron report [Wed, 03 Jun 2009 20:47:03 +0200]
========================================================================

apticron has detected that some packages need upgrading on:

localhost
[ 127.0.0.1 192.168.0.1 ]

The following packages are currently pending an upgrade:

cupsys 1.3.7-1ubuntu3.5
cupsys-bsd 1.3.7-1ubuntu3.5
cupsys-client 1.3.7-1ubuntu3.5
cupsys-common 1.3.7-1ubuntu3.5
libcupsimage2 1.3.7-1ubuntu3.5
libcupsys2 1.3.7-1ubuntu3.5

========================================================================

Package Details:

Lese Changelogs…
— Änderungen für cupsys (cupsys cupsys-bsd cupsys-client cupsys-common libcupsimage2 libcupsys2) —
cupsys (1.3.7-1ubuntu3.5) hardy-security; urgency=low

* SECURITY UPDATE: Remote denial-of-service via IPP_TAG_UNSUPPORTED tags.
– debian/patches/CVE-2009-0949.dpatch: make sure the name field exists
in scheduler/ipp.c.
– CVE-2009-0949

— Marc Deslauriers <marc.deslauriers@ubuntu.com> Mon, 01 Jun 2009 10:32:52 -0400

========================================================================

You can perform the upgrade by issuing the command:

aptitude dist-upgrade

as root on localhost

It is recommended that you simulate the upgrade first to confirm that
the actions that would be taken are reasonable. The upgrade may be
simulated by issuing the command:

aptitude -s -y dist-upgrade

apticron

Mit apticron haben wir nun ein vernünftiges Werkzeug um uns die tägliche Arbeit zu erleichtern, weil wir eben benachrichtigt werden wenn wichtige Updates anstehen

(m,a,c)time

mtime atim ctime Definition

  • mtime die Zeitangabe der letzten Modifikation
  • atime die Zeitangabe des letzten Zugrifes
  • ctime die Zeitangabe der letzten Änderung der Inode

mtime

Die mtime ist der Zeitpunkt zu dem die Datei oder das Verzeichniss zuletzt medifiziert wurde. Sie wird jedesmal vom Filessystem jedesmal updated, wenn etwas eine Änderung stattgefunden hat.

Um die mtime einer Datei anzuzeigen:

ls -l <filename>

atime

Die atime ist der Zeitpunkt an dem die Datei oder das Verzeichniss zuletzt aufgerufen wurde. Sie wird jedesmal aktualisiert, wenn eine Datei oder ein Verzeichniss mit einem Read oder Write Befehl aufgerufen wird.

Um die atime einer Datei anzuzeigen:

ls -lu <filename>

ctime

Die ctime ist der Zeitpunkt an dem die Datei oder das Verzeichniss zuletzt aufgerufen wurde und dabei die inode geändert wurde. Sie wird jedesmal aktualisiert, wenn eine Datei oder ein Verzeichniss mit einem permision, own, set link Befehl aufgerufen wird.

Um die ctime einer Datei anzuzeigen:

ls -lc <filename>

Mount.nfs: Stale NFS file handle

Um das Problem mit dem NFS Share zu beheben helfen folgende Schritte:

  • umount, remounten des Filesystems mit der Option -o

Aus der Man Page: -O Overlay mount. Allow the file system to be mounted over an existing mount point, making the underlying file system inaccessible. If a mount is attempted on a pre-existing mount point without setting this flag, the mount will fail,

             		 producing the error "device busy".

 

  • Killen oder Neustarten des NFS Prozesses
  • Einen neuen Mountpoint erstellen und das NFS Share dort einhängen
  • Client rebooten
  • umount -f /mount/point, danach remount

ZFS Pools verwalten

Erstellen

Aneinander gereihte Platten

#zpool create [pool-name] [component]

Mit Raid1 Spiegel

#zpool create [pool-name ] mirror [components]

Mit RaidZ (verbesseertes raid5)

#zpool create [pool-name] raidz [components]

Löschen

#zpool destroy [pool-name]

Hinzufügen

#zpool add [pool-name] [ | mirror | raidz ][components]

Man sollte darauf achten, nur meta devices mit einem gleichen oder hoeheren Redundanzlevel hinzuzufuegen.
Also nur Raid 1 zu einem Raid 1, Raid 1 oder Raid Z zu einem Raid Z und jede Moeglichkeit zu einzelnen Devices.
Der ganze pool ist nur so sicher wie das schlechteste meta device im Pool.

  1. zpool attach [pool-name] [existent-component] [new-component]

So erweitert man ein einzelnes Meta Device und behaelt das Redundanzlevel bei.
Aus einem 2- fachen Raid 1 Spiegel wird ein 3- facher, ein Raid Z device oder einzelne Platten werden vergrößert.

Entfernen

#zpool detach [pool-name] [component]

Es muessen mindestens genuegend Devices bleiben, um die Daten zu zu verstauen.
Ein Raid 1 braucht mindestens ein Device, ein Raid Z benoetigt genug Platz. Sonst schlaegt dieser Befehl fehl.

Ersetzen

#zpool replace [pool-name] [old-device] [new-device]

Das neue device muss mindestens so gross sein wie das alte.

Anzeigen

#zpool list

ZFS Dateisystem

Erstellen

#zfs create /[pool-name]/[device-name]

Das Filesystem wird automatisch gemounted

#zfs create /[pool-name]/[device-name]/[new-device-name]

Man kann so Hierarchien erstellen wie mit Verzeichnissen
Man kann ein ZFS Filesystem sofort verwenden und muss nicht erst ein Filesystem darauf anlegen, wie das bei LVM und SVM der Fall ist.

Löschen

#zfs destroy /[pool-name]/[device-name]

Reservierungen

#zfs set reservation=2048m [pool-name]/[device-name]

Free BSD Shell Variablen setzen

Um die gesetzten Shellvariablen zu sehen in der Shell folgenden Befehl eingeben:

#setenv
SHELL=/usr/local/bin/csh
USER=root
PAGER=more
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin
MAIL=/var/mail/root
BLOCKSIZE=K
PWD=/root
SHLVL=2
HOME=/root
LOGNAME=root
HOSTTYPE=FreeBSD
MACHTYPE=unknown
GROUP=wheel
HOST=bsdtest.service.tld
REMOTEHOST=
EDITOR=vi

Um eine Shellvariable zu exportieren:

#setenv name value

Bsp.

#setenv EDITOR /usr/bin/vim

Man kann die Variablen in der Datei /root/.cshrc – csh Resourcenscript, dass bei der Ausführung der Shell eingelesen wird, schreiben.

alias h         history 25
alias j         jobs -l
alias la        ls -a
alias lf        ls -FA
alias ll        ls -lA

# A righteous umask
umask 22

set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin $HOME/bin)

setenv  EDITOR  vim
setenv  PAGER   less
setenv  BLOCKSIZE       M

if ($?prompt) then
        # An interactive shell -- set some stuff up
       set prompt = "`/bin/hostname -s`# "
       set filec
       set history = 100
       set savehist = 100
       set mail = (/var/mail/$USER)
       if ( $?tcsh ) then
               bindkey "^W" backward-delete-word
               bindkey -k up history-search-backward
               bindkey -k down history-search-forward
       endif
endif

Um zum Bespiel Free BSD hinter einem Proxy benutzen zu können, muss man diesen mittels der Variable http_proxy über setenv in der Shell oder in die .cshrc eintragen.

#setenv http_proxy some.proxy.tld

Free BSD updatedb und locate

Unter FreeBSD kann man das Update der Locate Datenbank von hand starten:

#/usr/libexec/locate.updatedb

Danach kann man wie bei anderen Linuxen/Unixen locate ausführen:

#locate irgendwas

 

Free BSD zfs nutzen

#echo zfs_enable="YES" >>/etc/rc.conf
#zpool create poolname raidz da1 da2 da3
#zfs create poolname/test
#zfs set sharenfs=on poolname/test

NFS Einstellungen in der /etc/rc.conf für Option sharenfs:

nfs_reserved_port_only=”YES”

portmap_enable=”YES”

nfs_server_enable=”YES”

mountd_flags=”-r”
Prüfen auf dem Server mit

#showmount -e

Auf dem Client dann nur noch mounten

#mount -t nfs bsd-test:/poolname/test /home/bsdtester/test

Zpool auf USB Platten:

#zpool create extpool /dev/da0
#zpool status 
#zfs list

Vor dem Entfernen der Festplatte

#zpool export extpool

Nachdem die Platte wieder angeschlossen ist:

#zpool import extpool

Journal rollforward failed: journal out of synch with zone

Wenn der named Server den Start verweigert mit der folgenden Meldung in den Logs:

Nov 11 09:15:11 fodns named[20264]: zone domain.com/IN: journal rollforward failed: journal out of sync with zone

Nov 11 09:19:45 fodns named[20291]: zone domain.com/IN: journal rollforward failed: journal out of sync with zone

lösche die /var/named/domain.tld.jnl file und starte bind/named neu!

SRV Ressource Records

Mittels SRV (Service) Resource Records kann per Domain Name System propagiert werden, welche IP-basierenden Dienste (Services) in einer Domain (z. B. Firma) angeboten werden. Zu jedem Dienst werden weitere Informationen geliefert, wie zum Beispiel der Server-Name, der diesen Dienst bereitstellt.

Ein Dienst wird durch den Namen und das mit einem Punkt angehängte Protokoll bezeichnet. Beiden Komponenten wird ein underscore vorangestellt, um Verwechslungen mit anderen Domain-Namen zu verhindern.

Aufbau

Service 
Dienst + Protokoll + Domain
TTL 
gibt an, wie lange dieser RR im Cache gehalten werden darf
IN 
Internet
SRV
Priorität 
falls mehrere identische Dienste angeboten werden, hat die niedrigste Priorität Vorrang
Gewicht 
bei gleicher Priorität hat das höhere Gewicht Vorrang
Port 
Transmission Control Protocol – oder User Datagram Protocol -Portnummer
Server 
Server, der diesen Dienst bereitstellt (dabei darf es sich nicht um einen Alias, also eine Domain mit einem CNAME RR, handeln)

Beispiel

_ldap._tcp.example.com.  3600  IN  SRV  10  0  389  ldap01.example.com.

_jabber._tcp.example.com. 3600 IN SRV 10 0 5222 talk.example.com.

Ein Client kann in diesem Beispiel per DNS ermitteln, dass in der DNS-Domain example.com der Lightweight Directory Access Protocol-Server ldap01 existiert, der über TCP Port 389 erreichbar ist.

Verwendung

SRV-RRs werden häufig von Microsoft-Windows 2000-Clients verwendet, um für einen benötigten Dienst den zuständigen Domain Controller zu ermitteln.

Weiter sind SRV-Einträge üblich bei folgenden standardisierten Protokollen:

  • Extensible Messaging and Presence Protocol
  • Session Initiation Protocol
  • Lightweight Directory Access Protocol
  • Kerberos