johker’s blog stories about me, my life, science and my trips

1Aug/090

Wordpress Update

Habe gerade eben ein automatisches Upgrade von Version 2.7.1 auf Version 2.8.2 durchgeführt. Hat wunderbar funktioniert. Ich muss mir ganz ehrlich eingestehen, dass ich nicht gedacht hätte, dass das reibungslos funktioniert. Naja, bin ich vielleicht etwas zu sehr an Linux gewöhnt :-)

17Mar/090

Der neue Server: Teil 1 Installation und Basiskonfiguration

Seit ca. November letzten Jahres war klar, dass ein neuer Server her muss - nicht zuletzt, weil einige Leute bei ibutho ausgestiegen sind und ibutho doch etwas zu schwach ist für unsere Ansprüche. Die Planungen liefen auch schon seit Ende letzten Jahres und nun haben sie alle Gestalt angenommen. Die Domains werden alle zentral über inwx.de verwaltet. Dies hat den Vorteil, dass wir unabhängig vom Provider des Root-Servers sind und später ohne Probleme wechseln können. Beim Server haben wir uns für einen DS3000 von Hetzner entschieden. Dieser sagte uns sowohl von den Hardware-Daten als auch vom Preis-/Leistungsverhältnis zu (AMD Athlon 64 X2 5600+, 2GB RAM, 2 x 400GB Festplatte, 100MBit Anbindung ans Internet, 7 IP-Adressen, unbegrenzter Traffic).

Im Weiteren will ich auf die Grundinstallation eingehen und in den folgenden Teilen auf die beispielhafte Installation und Konfiguration verschiedenster Server-Dienste. Ich hoffe, dass diese Beiträge für den ein oder anderen nützlich sind, wenn sie ihren eigenen Server konfigurieren und absichern wollen. Ich bitte um rege Diskussionen, damit die Beiträge sinnvoll erweitert und Fehler beseitigt werden können.

Installation des Systems

Hetzner vereinfacht dem Administrator die Installation eines eigenen Betriebssystems über das Rescue-System sehr. Es wir ein Skript installimage angeboten, über welches man z.B. die Festplatte partitionieren kann, ein LVM einrichten kann oder einen Software-RAID konfigurieren kann.

Bei meiner Installation entschied ich mich für ein RAID1-System mit LVM. Für RAID1 entschied ich mich aufgrund der gesteigerten Ausfallsicherheit und der gesteigerten Lese-Performance. Für LVM entschied ich mich, da dies mehr Flexibilität mit sich bringt als ein starres Partitionsschema. Sollte man später bemerken, dass eine Volume zu groß oder zu klein ist, kann man es einfach verkleinern/vergrößern. Versierte Leser mögen sich hier fragen, warum ich nicht komplett auf ein LVM-Setup setze und dem LVM auch das Mirroring überlasse. Der Grund ist einfach: über ein Software-RAID erhalte ich höhere Leseraten (siehe auch: http://www.joshbryan.com/blog/2008/01/02/lvm2-mirrors-vs-md-raid-1/, insbesondere auch die Kommentare). Beim Dateisystem setze ich auf ext3 bzw. ext2 für "/boot", da sich ext3 im LVM problemlos im laufenden Betrieb vergrößern bzw. verkleinern lässt.

Hier mein Partitionslayout:

Mountpunkt Dateisystem Größe
/boot ext2 256M
vg0 lvm all
swap swap 2G
/ ext3 5G
/home ext3 15G
/tmp ext3 4G
/var ext3 50G

Sowohl "/boot", als auch "vg0" sind jeweils eine RAID1-Partition. Die ganze Arbeit das RAID einzurichten und danach das LVM hat mir das hetzner-Skript abgenommen.

Erste Schritte

aptitude-Mirror konfigurieren

Hetzner stellt einen eigenen aptitude-/apt-Mirror und diesen werden wir als allererstes ändern. Die Vorteile liegen auf der Hand: hohe Übertragungsraten und es handelt sich um internen Traffic, wird als nicht berechnet.

/etc/apt/sources.list:

# Packages and Security Updates from the Hetzner Debian Mirror
deb ftp://mirror.hetzner.de/debian/packages  lenny          main contrib non-free
deb ftp://mirror.hetzner.de/debian/security  lenny/updates  main contrib non-free

Und nun ein erstes Update&Upgrade:

aptitude update && aptitude dist-upgrade

postfix Installation

Da postfix der Mailserver meiner Wahl ist und ich nicht will, dass irgend ein Programm exim oder ähnliches installiert, werden wir jetzt gleich postfix installieren, jedoch noch nicht konfigurieren. Die Konfiguration folgt ausführlich in einem weiteren Teil.

aptitude install postfix

Systemtools

apticron

apticron ist ein Tool, welches einen per Mail informiert, wenn es Updates gibt. Dies ist besonders hilfreich, da das Tool die Paketquellen im Hintergrund updated, aber die Updates nicht einspielt; so bleibt es dem Administrator immer selbst überlassen, welche Pakete er einspielt und welche nicht, bzw. welche er erst ausführlicher testen will, da die Funktionalität des Systems evtl. erheblich beeinträchtigt werden könnte.

aptitude install apticron

mdadm

Mit mdadm wurde bereits das Software-RAID erstellt. Doch mdadm kann mehr: es kann den Benutzer auch per E-Mail informieren, wenn es Probleme mit dem RAID gibt. Dies wollen wir hier einstellen:

dpkg-reconfigure mdadm

smartmontools

Mit den smartmontools kann man den Status des Festplatten abfragen und bekommt E-Mails, wenn die Festplatte kurz vor ihrem Lebensende ist.

aptitude install smartmontools

/etc/default/smartmontools:

# uncomment to start smartd on system startup
start_smartd=yes
 
# uncomment to pass additional options to smartd on startup
smartd_opts="--interval=1800"

/etc/smartd.conf:

DEVICESCAN -m root -M exec /usr/share/smartmontools/smartd-runner

htop

htop ist eine erweiterte Version von top und bietet eine ncurses-Oberfläche, sowie Farben und "grafische" Anzeigen.

aptitude install htop

lsof

lsof kann anzeigen, wer gerade auf einen Ordner/Gerät zugreift. Das Tool kann nützlich sein, wenn man einen Ordner unmounten will, aber noch jemand/etwas darauf zugreift.

aptitude install lsof

mc

Wer DOS noch kennt, kennt auch den Norton Commander. mc (ausgeschrieben: midnight commander) ist ein Norton Commander-Klon und vereinfacht einem das Leben in vielen Situationen. Einfach mal ausprobieren:

aptitude install mc

locate

Mit locate kann man schnell nach Dateien suchen. Es baut einen Index über Dateien und Ordner des Dateisystems auf und aktualisiert diesen mittels eines Cronjobs regelmäßig. Sucht man eine Datei, so gibt man einfach folgendes ein:

locate <Dateiname>

Das Paket kann mit folgendem Befehl installiert werden:

aptitude install locate

Nach der Installation sollte als Erstes der Index aufgebaut werden (dies wird später automatisch gemacht):

updatedb

Benutzer anlegen

Meine Anforderung an die Home-Laufwerke der einzelnen Benutzer ist, dass sie nicht von jedem gelesen werden können, aber dass man trotzdem Ordner/Dateien unterhalb des eigenen Home-Laufwerks für andere zugänglich machen kann, um z.B. einen "Briefkasten" zu implementieren, wo andere Benutzer Dateien für einen ablegen können, aber nicht sehen können, was sich sonst noch darin befindet. Deshalb wird mit folgenden Befehl die Sichtbarkeit der Home-Verzeichnisse geändert:

dpkg-reconfigure adduser

Außerdem hätte ich gerne, dass jeder Benutzer standardmäßig in der Gruppe "users" ist (man weiß ja nie, wozu das noch gut sein könnte). Dazu fügen wir an die Datei "/etc/default/useradd" am Ende folgendes an - bzw. an die Datei "/etc/adduser.conf" (je nachdem, ob man adduser oder useradd zum Hinzufügen von Benutzern verwendet):
/etc/default/useradd:

GROUPS=users

/etc/adduser.conf:

EXTRA_GROUPS="users"
ADD_EXTRA_GROUPS=1

Die "Briefkasten"-Erweiterung:

cd /etc/skel/
mkdir public
chmod 755 public/
mkdir public/dropbox
chmod 753 public/dropbox/
chown root: public/ -R

Nun legen wir noch eigene Versionen der Dateien .vimrc, .bashrc, .bash_aliases in "/etc/skel/":
.vimrc:

sy on
se nu
set incsearch
set hlsearch
colorscheme slate

.bashrc:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
 
export PS1='\h:\w\$ '
umask 022
 
# If not running interactively, don't do anything
[ -z "$PS1" ] &amp;&amp; return
 
# don't put duplicate lines in the history. See bash(1) for more options
# don't overwrite GNU Midnight Commander's setting of `ignorespace'.
export HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredups
# ... or force ignoredups and ignorespace
export HISTCONTROL=ignoreboth
 
# append to the history file, don't overwrite it
shopt -s histappend
 
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
 
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
 
# make less more friendly for non-text input files, see lesspipe(1)
#[ -x /usr/bin/lesspipe ] &amp;&amp; eval "$(SHELL=/bin/sh lesspipe)"
 
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] &amp;&amp; [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi
 
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color) color_prompt=yes;;
esac
 
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
 
if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] &amp;&amp; tput setaf 1 &gt;&amp;/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi
 
if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
 
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac
 
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
 
if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi
 
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    eval "`dircolors -b`"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'
 
    #alias grep='grep --color=auto'
    #alias fgrep='fgrep --color=auto'
    #alias egrep='egrep --color=auto'
fi
 
# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'
 
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

.bash_aliases:

alias l='ls -lA'
alias ll='ls -l'
alias la='ls -a'
alias lla='ls -la'
alias lal='ls -la'

Zusätzlich installieren wir noch das Paket "bash-completion", um eine komplexere Code- und Befehlsvervollständigung zu bekommen (wird erst nach erneutem Anmelden an der Konsole aktiv):

aptitude install bash-completion

Nun können wir mittels adduser einen Benutzer anlegen:

adduser <Benutzername>
13Dec/080

Update auf Wordpress 2.7

Habe gerade ein Update auf Wordpress 2.7 durchgeführt. Was man nicht alles für ein bischen Ablenkung tut - so kurz vor der Klausurphase :-) . Ging absolut problemlos von statten. Ich bin schon gespannt, wie zuverlässig die Auto-Update Funktion sein wird... bei den Plugins hat das bisher ja immer wunderbar geklappt. Leider werden ja keine inkrementellen Updates gemacht, obwohl von wordpress Seite bei der Entwicklung ja schon ewig auf SVN gesetzt wird, was zuverlässige diff-Utilities bereitstellt und sowas eigentlich sehr einfach machen sollte...

Das neue Admin-Menü gefällt mir auch sehr. Ist viel übersichtlicher als das alte. Vor allem ist jetzt auf der linken Seite immer eine Menüleiste sichtbar und man kann schnell navigieren. Alles in allem Daumen hoch an das Wordpress-Team. Macht weiter so.

In nächster Zeit versuche ich auch mal wieder was Produktives zu schreiben, bevor der Blog Spinnweben ansetzt. In letzter Zeit stand hier ja alles ziemlich still.