Netzwerkkartenwechsel

Bei der Virtualisierung bestehender Maschinen erhalten diese in ihrer dann virtuellen Umgebung einen anderen Netzwerkkarten Typ und damit auch eine neue Schnittstellen-Bezeichnung. Dies sorgt dann für Probleme, wenn z.B. eth0 auf eine fixe IP Adresse gelegt war, sich nun die virtuelle Maschine mit der „neuen“ Karte aber so fühlt, als hätte diese nur eth1. Diese Schnittstelle ist dann nämlich nicht konfiguriert und die VM kommt nicht ins Netz.

Abhilfe schafft die Bearbeitung der Datei

/etc/udev/rules.d/70-persistent-net.rules

In diese trägt Ubuntu ein, welcher Karte es welche Schnittstellen-Bezeichnung zugewiesen hat und hier kann man dann die nicht benötigten Zuweisungen (an die nicht mehr vorhandenen Karten) löschen und die bestehenden anpassen (also eth1 durch eth0 ersetzen).

Reboot und tut.

Auch praktisch ist dieses Vorgehen auf einem IPCop, der zwei identische NICs verbaut hat. Da darf man im Setup nämlich raten, welche NIC nun welches Netz erhalten hat. Kein Drama, wenn es den IPCop in real gibt. Da steckt man schlicht die Kabel um. Wenn man jedoch einen UnCop aufgesetzt hat und ein Interface an einer Bridge hängt, dann ist das schon fummeliger, weil die Re-konfiguration im Virtualisierer erfolgen muss.

Einfacher geht es durch Anpassung dieser Datei auf dem IPCop selbst:

/var/ipcop/ethernet/settings

Nach einem Reboot klappt es dann wieder mit der Verbindung.

 

Apfeltaschen

Das folgende Rezept reicht für rund 24 Apfeltaschen – ausreichend für ein Mittagessen. Geht schnell und schmeckt lecker.

Zutaten für den Teig:

  • 250g Butter
  • 3 gehäufte Esslöffel Puderzucker
  • 1 Ei
  • 1 Päckchen Vanillezucker
  • 500g Mehl 405
  • 1 Päckchen Backpulver
  • 3 gehäufte Esslöffel Joghurt (oder auch Quark)

Zutaten für die Füllung:

  • 3-4 Äpfel
  • 1 Tl Zimt
  • Rosinen wenn gewünscht
  • evtl. etwas Amaretto
  • Zitronensaft (damit die Äpfel nicht braun werden)

Die Butter schmelzen und mit dem Puderzucker, dem Vanillezucker und dem Ei schaumig rühren. Mehl, Backpulver und Joghurt hinzugeben und kneten bis ein glatter Teig entsteht. Diesen im Kühlschrank kurz zwischenlagern.

Die Äpfel schälen, entkernen und grob reiben. Mit etwas Zitronensaft, Zimt sowie wenn gewünscht mit Amaretto und Rosinen vermischt in einem Topf köcheln. Kein Mus herstellen – die Äpfel sollten noch biss-fest sein.

Vom Teig kastaniengroße Fetzen abreißen, diese auf einem gemehlten Untergrund platt drücken und etwa einen Esslöffel der Füllung auf eine Hälfte legen. Die Taschen dann zuklappen und auf ein Blech mit Backpapier legen.

Bei 180 Grad im vorgeheizten Ofen bei Ober- und Unterhitze 20 Minuten backen. Sie sollten braune Ränder bekommen, damit die obere Teigschicht keksig wird.

Die Apfeltaschen vom Blech nehmen und auf einem Rost etwas auskühlen lassen, mit Puderzucker bestäuben und essen, so lange die Füllung noch warm ist.

VirtualBox Start Stop Script

Um auf einem Wirtsrechner mehrere Instanzen von unter Virtualbox laufenden VMs mit dem Wirt selbst zu starten und zu stoppen, brauchten wir entsprechende start-stop-Skripte. Fündig wurden wir im Forum von Virtualbox:

http://forums.virtualbox.org/viewtopic.php?f=7&t=34790

Eine Alternative sahen wir uns ebenfalls noch an, entschieden dann aber für das Skript von Nicolas Tessore. Trotzdem – wenigstens noch der Link: http://www.glump.net/howto/virtualbox_as_a_service

Das Skript von N.Tessore passten wir ein klein wenig bei Require-Start an und dokumentieren dies nun hier. Es läuft reibungslos auf einem Ubuntu Server 10.04 LTS 64 bit und Virtualbox 4.1 – für andere VBox- und Ubuntu-Versionen sollte es anpassbar sein:

#! /bin/sh
### BEGIN INIT INFO
# Provides: vbox-headless
# Required-Start: $syslog $vboxdrv $network
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start VMs in headless mode.
# Description: This script runs VMs for the default VirtualBox
# user in headless mode. Make sure all VMs are using different
#  RDP ports.
### END INIT INFO

# Author: Nicolas Tessore <n.tessore@gmail.com>

####
# VirtualBox settings
####

# The user which owns the VMs
VBOX_USER=username

# The list of VMs to run. Leave empty to run all registered VMs.
VBOX_LIST=““

# VirtualBox executables
VBOX_MANAGE=/usr/bin/vboxmanage
VBOX_HEADLESS=/usr/bin/vboxheadless

####
# End VirtualBox settings
####

# Do NOT „set -e“

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC=“VirtualBox daemon“
NAME=vbox-headless
DAEMON=$VBOX_HEADLESS
DAEMON_ARGS=““
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Exit if the package is not installed
[ -x „$DAEMON“ ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

vm_init_list()
{
# get registered VMs
LIST_VMS=`sudo -H -u $VBOX_USER $VBOX_MANAGE –nologo list vms | cut -d ‚ ‚ -f 1 | tr -d ‚“‚`

# check for list of VMs
if [ -z „$VBOX_LIST“ ]
then
# all registered VMs for user
VBOX_LIST=$LIST_VMS
else
# check that VMs exist
for VM in $VBOX_LIST
do
case $LIST_VMS in
„$VM“)
continue
;;
*)
log_failure_msg „ERROR: VM ‚$VM‘ is not registered!“
exit 1
;;
esac
done
fi
}

# get uuid for vm
vm_get_uuid()
{
vm=$1
hwuuid=`sudo -H -u $VBOX_USER $VBOX_MANAGE –nologo showvminfo –machinereadable „$vm“ | grep ‚hardwareuuid=’`
echo $hwuuid | cut -d ‚=‘ -f 2 | tr -d ‚“‚
}

# control running vm
vm_ctrl()
{
sudo -H -u $VBOX_USER $VBOX_MANAGE –nologo controlvm $1 $2 > /dev/null 2>&1
}

#
# Function that starts the daemon/service
#
do_start()
{
vm_init_list

# Return
#   0 if daemon has been started
#   1 if daemon was already running
#   2 if daemon could not be started
RETVAL=0

# Start all VMs
for VM in $VBOX_LIST
do
VM_UUID=`vm_get_uuid $VM`
VM_PIDFILE=“$PIDFILE.$VM_UUID“
VM_DAEMON=“$DAEMON“
VM_DAEMON_ARGS=“$DAEMON_ARGS –startvm $VM_UUID“

log_action_begin_msg „Starting VM ‚$VM'“

# test for running VM
USER=$VBOX_USER LOGNAME=$VBOX_USER start-stop-daemon \
–start \
–quiet \
–pidfile $VM_PIDFILE \
–startas $VM_DAEMON \
–test \
> /dev/null

# VM already running
if [ „$?“ != 0 ]
then
# report VM is running
log_warning_msg „VM ‚$VM‘ already running“
[ „$RETVAL“ = 0 ] && RETVAL=1
continue
fi

# start VM
USER=$VBOX_USER LOGNAME=$VBOX_USER start-stop-daemon \
–start \
–quiet \
–pidfile $VM_PIDFILE \
–make-pidfile \
–background \
–chuid $VBOX_USER \
–startas $VM_DAEMON \
— $VM_DAEMON_ARGS

log_action_end_msg „$?“

# check if start failed
if [ „$?“ != 0 ]
then
# report error
log_failure_msg „Error starting VM ‚$VM'“
RETVAL=2
fi
done

if [ „$RETVAL“ -lt 2 ]
then
log_daemon_msg „VirtualBox daemon started successfully“
else
log_daemon_msg „VirtualBox daemon started with errors“
fi

return „$RETVAL“
}

#
# Function that stops the daemon/service
#
do_stop()
{
vm_init_list

# Return
#   0 if daemon has been stopped
#   1 if daemon was already stopped
#   2 if daemon could not be stopped
#   other if a failure occurred
RETVAL=0

for VM in $VBOX_LIST
do
VM_UUID=`vm_get_uuid $VM`
VM_PIDFILE=“$PIDFILE.$VM_UUID“

log_action_begin_msg „Stopping VM ‚$VM'“

# try savestate halt
vm_ctrl $VM savestate

# stop daemon
USER=$VBOX_USER LOGNAME=$VBOX_USER start-stop-daemon \
–stop \
–quiet \
–retry=TERM/30/KILL/5 \
–pidfile $VM_PIDFILE

case „$?“ in
0)
log_action_end_msg 0
;;
1)
log_warning_msg „VM ‚$VM‘ already stopped“
[ „$RETVAL“ = 0 ] && RETVAL=1
;;
2)
log_action_end_msg 1
log_failure_msg „ERROR: Could not stop VM ‚$VM'“
RETVAL=2
continue
;;
esac

rm -f $VM_PIDFILE
done

if [ „$RETVAL“ -lt 2 ]
then
log_daemon_msg „VirtualBox daemon stopped successfully“
else
log_daemon_msg „VirtualBox daemon stopped with errors“
fi

return „$RETVAL“
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
#
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
#
start-stop-daemon –stop –signal 1 –quiet –pidfile $PIDFILE –name $NAME
return 0
}

case „$1“ in
start)
log_daemon_msg „Starting $DESC“ „$NAME“
do_start
case „$?“ in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
stop)
log_daemon_msg „Stopping $DESC“ „$NAME“
do_stop
case „$?“ in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
status)
status_of_proc „$DAEMON“ „$NAME“ && exit 0 || exit $?
;;
#reload|force-reload)
#
# If do_reload() is not implemented then leave this commented out
# and leave ‚force-reload‘ as an alias for ‚restart‘.
#
#log_daemon_msg „Reloading $DESC“ „$NAME“
#do_reload
#log_end_msg $?
#;;
restart|force-reload)
#
# If the „reload“ option is implemented then remove the
# ‚force-reload‘ alias
#
log_daemon_msg „Restarting $DESC“ „$NAME“
do_stop
case „$?“ in
0|1)
do_start
case „$?“ in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
#echo „Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}“ >&2
echo „Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}“ >&2
exit 3
;;
esac

:

In diesem Pastebin liegt es auch noch rum, sollte Copy and Paste aus WordPress mal wieder zickig sein:

http://pastebin.com/4i8W0FB2

Mit Hilfe von

update-rc.d  vbox-headless start 99 2 3 4 5 . stop 99 0 1 6 .

konnte das Skript dann zwar in die richtigen Ordner

/etc/rc2.d/S99vbox-headless
/etc/rc3.d/S99vbox-headless
/etc/rc4.d/S99vbox-headless
/etc/rc5.d/S99vbox-headless

eingefügt werden, aber – komisch, komisch – nicht an der 99. Stelle, sondern immer nur an der 20. Diese Anpassung musste also von Hand vorgenommen werden.

Das wirklich coole an N.Tessores Skript ist, dass es die VMs nicht herunterfährt, sondern bei einem Serverreboot schlicht pausieren lässt. So sind die VMs nach dem Start des Wirtsrechners sofort wieder da.

OpenVPN P12 Konvertierung

Um mit dem LFB Verbindung über FTP oder SSH aufnehmen zu können, benötige ich einen OpenVPN Tunnel. Mein Admin schickt mir hierzu regelmäßig eine P12 Datei (im Folgenden: domain-cert.p12) zu, die ich erst einmal zerlegen muss, damit mein Verbindungsskript reibungslos funktioniert. Da dies nur alle Monate passiert, vergesse ich in der Zwischenzeit leider immer wieder, wie ich vorgehen muss – deshalb mal für mich selbst als Gedächtnisstütze dieses Memo.

Es klappt mit den folgenden drei Schritten:

openssl pkcs12 -in domain-cert.p12 -out domain-ca.pem

openssl pkcs12 -in domain-cert.p12 -out domain-cert.pem -clcerts -nokeys

openssl pkcs12 -in domain-cert.p12 -out domain-key.pem -nocerts

Ohne Vergabe eines Passworts will die Konvertierung bei mir nicht funktionieren, was aber auch OK ist.

Ein Startskript auf dem Desktop

#!/bin/bash
cd /home/dirk/openvpn ; sudo openvpn domain.ovpn

lädt mir dann die OpenVPN Verbindung, die in der Datei domain.ovpn definiert ist:

client
proto udp
remote domain.topleveldomain
ns-cert-type server
dev tun
ca Interne-Domain-CA-cacert.pem
cert domain-cert.pem
key domain-key.pem

# Windows needs the TAP-Win32 adapter name
# from the Network Connections panel
# if you have more than one.  On XP SP2,
# you may need to disable the firewall
# for the TAP adapter.
;dev-node MyTap

# Most clients don’t need to bind to
# a specific local port number.
nobind

# Try to preserve some state across restarts.
persist-key
persist-tun

# If a tls-auth key is used on the server
# then every client must also have the key.
tls-auth tls-auth-domain.key 1

# Select a cryptographic cipher.
# If the cipher option is used on the server
# then you must also specify it here.
;cipher x

# Enable compression on the VPN link.
# Don’t enable this unless it is also
# enabled in the server config file.
comp-lzo

# Set log file verbosity.
verb 3

# Silence repeating messages
;mute 20

Abgesehen von den hier genannten Skripten und Prozessen liegen im Ordner ~/openvpn noch die Interne-Domain-CA-cacert.pem und der tls-auth-domain.key zur Domain, die im Skript oben referenziert sind.

KVM Bridging

Ein Server mit 6 Netzwerkschnittstellen und jede davon soll unter KVM einen eigenen Gast und eine eigene IP bekommen – das war die Aufgabe und am Bridging wäre es fast gescheitert, hätte ich nicht diesen Blogpost hier gefunden:

http://blog.agdunn.net/?p=416

Was bis zur Lektüre des obigen Posts nicht recht hatte klappen wollen war das richtige Erstellen der Netzwerkbrücken für die KVM Gäste. Dabei – wenn mal es mal weiß – ist es simpel: Zuerst muss ein evtl. vorhandener Netzwerkmanager runter

apt-get remove network-manager

und die erste Schnittstelle am Rechner muss händisch konfiguriert werden, damit dieser weiterhin eine Internetverbindung hat – im folgenden: Wirt. Für jede Schnittstelle (und damit also für jede IP und jeden KVM Gast) legt man sich sodann eine Netzwerkbrücke an. Der KVM Gast wiederum nutzt diese Brücke um damit ins Netz zu kommen. TUN/TAP Interfaces etc. sind nicht nötig. Will man dafür sorgen, dass zwei KVM Gäste miteinander im gleichen Netz hängen, dann verbindet man diese mit der gleichen Brücke.

Hier – genau wie für die folgenden Schritte – empfiehlt es sich, auf ein /etc/init.d/networking restart zu verzichten und lieber den ganzen Server nach Anpassungen der Netzwerkonfiguration neu zu booten. Manchmal treten sonst Merkwürdigkeiten auf.

Ich zeig das mal für zwei der NICs am Server: Für einen virtualisierten IPCop (also einen UnCop) mit zwei Netzwerkkarten (rot und grün) reichen die folgenden zusätzlichen Einträge auf dem Wirt in

/etc/network/interfaces

Dabei gehe ich davon aus, dass der Server (Wirt) über eth0 mit dem Internet verbunden ist (die IP Adressen im folgenden Beispiel sind für die eigenen Bedürfnisse anzupassen):

# The loopback network interface
auto lo
iface lo inet loopback

# Network interface links directly to Provider
auto eth0
iface eth0 inet static
address 141.11.38.149
netmask 255.255.255.248
network 141.11.38.144
broadcast 141.11.38.151
gateway 141.11.38.145
# dns-* controlled by resolvconf
dns-nameservers 129.11.2.4
dns-search my.domain

und der IPCop unter KVM die Schnittstelle eth1 (des Wirts) für Rot und eth2 (des Wirts) für Grün erhalten soll:

# KVM controlled Interfaces
# The IPCOP network interface, used by br1
# RED
auto eth1
iface eth1 inet manual
# The bridge network interface, used by kvm
auto br1
iface br1 inet manual
bridge_ports eth1
bridge_stp yes
bridge_fd 0
bridge_maxwait 0
# IPCOP network interface, used by br2
# GREEN
auto eth2
iface eth2 inet manual
# The bridge network interface, used by kvm
auto br2
iface br2 inet manual
bridge_ports eth2
bridge_stp yes
bridge_fd 0
bridge_maxwait 0

br2 ist dann die Schnittstelle, an die sich auch weitere virtualisierte Rechner anschließen lassen, um selbst über den UnCop ins Internet zu kommen. Ein Kabel in eth2 (br2) kann zu einem Switch führen und weitere, nicht virtualisierte Clients anbinden. Genau die richtige Mischung, wenn auf der grünen Karte des IPCop ein DHCP Server läuft.

LibreOffice PPA

Theoretisch versorgt einen das LibreOffice PPA mit den aktuellen Versionen der Bürosuite. Inzwischen finde ich das aber sehr theoretisch: Ich hatte bis gerade eben lokal eine 3.3.2 laufen – und aktuell wäre 3.4.2

Also hab ich zuerst das vorhandene LO deinstalliert (inklusive dem Eintrag in der sources.list):

sudo apt-get remove libreoffice
sudo apt-get remove libreoffice-*
sudo apt-get autoremove

und mir dann die DEB Pakete von den LibreOffice Seiten herunter geladen und lokal entpackt. Alle drei Ordner (LO selbst auf Englisch, die deutschen Sprachdateien und die deutsche Hilfe dazu) legte ich in einen gemeinsamen Ordner lo342 auf meinem Desktop und installierte von dort mit

sudo dpkg -iR /home/dirk/Desktop/lo342/

In Zukunft werde ich das gelegentlich von Hand machen statt wochenlang zu warten. Geht schnell, tut nicht weh und versorgt mich mit aktuellen Versionen. LO las brav meine vorhandenen Einstellungen aus dem Ordner ~/.libreoffice, so dass mir umständliches Gefummel erspart blieb.

Lovelock and deadlock

Mein Dell Vostro 1510 läuft unter Fedora 15. Wenn ich auf diesen die Daten vom heimischen Server mit Hilfe von rsync ziehe, dann friert mir regelmäßig der Desktop ein. Das Einzige, was dann noch hilft, ist ein lang anhaltender Druck auf die Ausschalten-Taste.

Ich hab schon probiert mit Hilfe der rsync Option –bwlimit=1000 oder –bwlimit=500 einen erfolgreichen Sync zu bekommen, weil ich dies als Tipp in mehreren Foren fand. Umsonst.

Was leider ebenfalls nicht funktioniert, ist, mit sudo telinit 3 F15 in den Mehrbenutzerbetrieb ohne Gnome zu versetzen und dann das Sync-Script laufen zu lassen.

Update

Inzwischen vermute ich, dass hier ein Bug im Treiber der Netzwerkkarte oder der Festplatte vorliegt. NFS könnte ebenfalls ein Kandidat für Probleme sein – aber wie rausfinden, wenn ein

sudo tail -f /var/log/messages

nix bringt, weil Gnome in den Abgrund geht, ohne jegliche Meldung?

Update

Ein dmesg liefert evtl. einen Hinweis mit der folgenden Meldung:

[  118.705871] [drm:drm_debugfs_create_files] *ERROR* Cannot create /sys/kernel/debug/dri/

Ja – die komischen Zeichen gehören zur Fehlermeldung mit dazu und nach allem, was ich bisher gefunden habe, liegt es wohl an einem Kernel Bug. Im Moment nutze ich 2.6.38.8-35.fc15.i686 und hoffe nun auf den bald erscheinenden kernel-2.6.40-4.fc15.

Nachtrag 28.08.2011

Die „komischen Zeichen“ führen leider dazu, dass der Feed über die Wupper geht. Der Feed Validator machte mich hierauf aufmerksam. Mist. Screenshot wäre besser gewesen.

Small Business Server

Ich war heute auf der Suche nach einem alten Bekannten: EBox hieß der früher mal – und nun Zentyal. Es handelt sich im Wesentlichen um eine vorkonfigurierte Packung an Paketen für Ubuntu 10.04 LTS, die einem aber extrem viel Arbeit abnimmt, will man auf die Schnelle einen zentralen Rechner im Netz haben, der auch noch Gateway und Firewall spielen soll. Die Feature-Liste ist erschlagend – hier nur eine Auswahl:

Firewall mit Filterfunktion (shalla list – deswegen für mich besonders gut geeignet) und IDS, DHCP Server, NTP Server, DNS Server, VPN Support, Proxy mit Nutzerauthentifizierung, Mail Server mit SIEVE Unterstützung und Quota, Webmailclient, eigene CA Authority, zentrale Nutzerverwaltung mit LDAP, File- und Printserver-Dienste …

Ich bräuchte für die Installation und Konfiguration eines derartigen Dienste-Blumenstraußes auf einem nackten Ubuntu Tagen oder Wochen. Arbeit, die ich mir gerne abnehmen lasse, wenn es sich nicht um eine sicherheitskritische Infrastruktur handelt. Und selbst dann …

Eine ausführliche Dokumentation auf Englisch erleichtert die ersten Schritte, ein Forum hilft bei Problemen. Wer lieber ein Buch in die Hand nimmt, findet auch das – und kann sich dann zertifizieren lassen.

Tracker

Der Firefox 5 bringt auf der Registerkarte Datenschutz in den Einstellungen eine Möglichkeit mit, Webseiten mitzuteilen, dass man nicht verfolgt werden möchte:

Schade ist, dass sich kaum eine Webseite daran hält. Dies findet man mit Hilfe des Firefox Plugins Collusion heraus, das man in einem Tab öffnet und dann im Hintergrund liegen lässt.

Hier sammelt sich dann schnell die Information, über welche Seiten man von wem beobachtet wird.

Moodle Backupproblem ungelöst

Da verwurstet moodle.org seine Zeit damit, für mobile Endgeräte eine automatische Erkennung zu basteln, damit diesen gesonderte Themes angeboten werden können, aber das wirklich kritische Problem, dass Moodle einem jede Nacht mitteilt, das Backup sei ohne Fehler durchgelaufen während nichts (im Sinne von gar nichts) gesichert wurde … darum kümmern sie sich nicht. Moodle kotzt mich gerade an.

Sachlicher ausgedrückt: Meine Backupprobleme bleiben auch bei Moodle 2.1 bestehen. Das ist ein Blocker! Wer kann, sollte bei Moodle 1.9.x bleiben.