IT-Service GmbH 


Allgemeines zu Debian 8.0 Jessie

Debian 8.0 Jessie, benötige Perl- und PHPModule

dazu die Pakete, die aptitude automatisch ausgewählt. Grau hinterlegte sind optional!
+ perlmodule  (unter nicht-installiert -> perl)
	libarchive-zip-perl
	libclass-dbi-mysql-perl
	libclass-dbi-perl
	libconvert-ber
	libcrypt-gpg-perl
	libcrypt-unixcrypt-perl
	libdbd-mysql-perl
	libimage-exif-perl
	libimage-exiftool-perl
	libimage-size-perl
	libio-string
	libio-stty-perl
	libmime-lite-perl
	libmime-tools-perl
	libmp3-info-perl
	libmp3-tag-perl
	libnet-ssh-perl
	libsys-cpuload-perl
	libtext-csv-perl
	liburi-find-perl
+ php5			bei Jessie und PHP5 sind viele vorausgewählt
	php5-cli (default)
	php5-curl
	php5-gd (default)
	php5-imagick
	php5-imap
	php5-ldap
	php5-mcrypt (default)
	php5-mysql (default)
	libphp-phpmailer

Rechner umbenennen oder IP Adresse ändern

bei Namensänderungen oder Domainänderungen müssen folgende Dateien angepasst werden:
/etc/hosts
/etc/hostname
/etc/mailname
/etc/exim4/update-exim4.conf.conf
/etc/resolv.conf
/etc/network/interfaces
bei Änderungen der Domain eines NFS Servers muss die neue Domain in der /etc/idmapd.conf eingetragen werden
Falls ein Proxy verwendet werden soll, auch in den Browser Einstellungen und in
/etc/apt/apt.conf
Will man eine Platte in einem anderen Rechner verwenden, die ohne daß sich die Netzwerkinterfaces ändern, muss man die entsprechende Zeile aus der /etc/udev/rules.d/70-persistent-net.rules löschen.
Thats it!

Konfiguration von Grub 2 aktualisieren

# update-grub2
# grub-mkconfig 

Platte > 2 TB partitionieren

das von mir bisher verwendete fdisk kann nur Platten bis 2 Terabyte partitionieren. Für größere Platten verwende ich parted. Z.B. zum Einrichten einer einzigen großen Partition auf /dev/sdf
# parted /dev/sdf
(parted) mklabel gpt                                                      
(parted) mkpart primary ext4 0% 100%                                      
(parted) quit                                                             

System klonen / Grub nachträglich installieren

die Zielplatte via USB anhägen oder in den 2.Wechselrahmen einstecken.
Bei den Workstations: 256GB SSD mit 80GB/16GB/160GB partitionieren, bei 128GB 64GB/16GB/38GB. Die erste Partition wird /, die zweite SWAP und die dritte /local Bei den Servern: 16GB SSD mit 15GB/1GB ohne /local partitionieren. Der Swapspace muss wegen dem S4 Ruhezustand (hibernation) auf den Workstations mindestens so gross wie der installierte Arbeitsspeicher sein. Typ der 2.Partition auf 83h ändern. Sei die neue Platte /dev/sdb, dann folgendende Dateisysteme anlegen:
# mkfs.ext4 /dev/sdb1
# mkswap /dev/sdb2
# mkfs.ext4 /dev/sdb3
Platte mounten und das gerade in Betrieb befindliche System kopieren:
# mount /dev/sdb1 /mnt
# cd /
# rsync -avtHAX --exclude /mnt --exclude /proc --exclude /sys --exclude /dev --exclude /home --exclude /local / /mnt
Das Verzeichnis /local ist eine Spezialität von mir und /home wird bei mir vom Server gemountet. /local wird anschliessend genauso kopiert
Die kopierte /boot/grub/grub.cfg und /etc/fstab müssen vor der grub Installation angepasst werden. Notfalls kann man aber auch die UUID der neuen Platte aufschreiben und beim Booten im Grub als "root" bei UUID=... eingeben. Falls man das auch vergessen hat, bekommt man die UUID raus, indem man die Platte in einen anderen Rechner einbaut und
# blkid -o value /dev/PARTITION
aufruft.
Dann die alte UUID in /etc/fstab mit der richtigen UUID ersetzen. am einfachsten im vi:
# vi /mnt/etc/fstab
:
%s/UUIDOLD/UUIDNEW/g
:wq!
so wird das Vorkommen der alten UUID durch die neue ersetzt. Ziel ist dann etwa:
UUID=UUIDNEW / ext4 defaults,errors=remount-ro 0 1
Ebenso muss die UUID in den Dateien /etc/uswsusp.conf und /etc/initramfs-tools/conf.d/resume angepasst werden, wenn man "Suspend to Disk" verwenden will. anschliessend das Kommando
# update-initramfs -u
ausführen. Vergisst man das, kein Beinbruch, man muss beim Booten nur ca 5 Minuten warten, bis der Fehler "Could not stat the resume device file '/dev/disk...'" kommt und das system mit <ENTER> bootet.
Langer Rede, kurzer Sinn, am Zielsystem sind 4 Dateien anzupassen:
/MOUNTPOINT/etc/fstab
/MOUNTPOINT/boot/grub/grub.cfg
/MOUNTPOINT/etc/uswsusp.conf
/MOUNTPOINT/etc/initramfs-tools/conf.d/resume
Achtung #1: Beliebter Fehler vi /etc/fstab statt vi /mnt/etc/fstab, man zerschiesst das Quellsystem!!!
Achtung #2: Auch SWAP oder andere Partitionen in der /mnt/etc/fstab ersetzen.
Ebenso wird jedes Vorkommen der alten UUID in der /mnt/boot/grub/grub.cfg ersetzt.
Dann kann man entweder von der jessie Boot-CD booten, "erweiterte Optionen - Rettungsystem" wählen, Sprachangaben ec weiterklicken und dann grub im MBR der kopierten Platte (im Beispiel /dev/sdb) installieren.
oder einfach:
 
# grub-install --root-directory=MOUNTPOINT DEVICE
Beispiel: zu installierende Platte: /dev/sdb, das root-Filessytem (/dev/sdb1) mit /boot/grub wurde gemountet nach /mnt
 
# grub-install --root-directory=/mnt /dev/sdb
Der Device bezeichnet dabei das Ziel der Grub Installation, also KEINE Partition, sondern die Platte selbst.
Bei meiner ersten Kopie sah nach dem Booten alles gut aus, leider konnte ich mich am Desktop nicht anmelden, der Anmeldebildschirm kam immer wieder. Letztendlich fand ich den Fehler: Ich hatte /tmp nicht kopiert sondern als root angelegt mit den Rechten 755, was das Beschreiben durch normale User verhindert. Also
# chmod 777 /tmp
und das System funktioniert.
Ist das alte Dateisystem noch ext3, kann man das mit den folgenden Kommandos in ext4 konvertieren (sei /dev/sdb1 das neue, nicht gemountete Dateisystem):
# tune2fs -O extents,uninit_bg,dir_index /dev/sdb1
# fsck -fCVD /dev/sdb1
Den Eintrag in der /mnt/etc/fstab kontrollieren, dieser muß dann auch auf ext4 gestellt werden. bei mir ist er das wegen dem kopierten System sowieso.

Grub neu installieren

Bootplatte in einen anderen Rechner mit der selben Betriebssytemversion (sonst gibts error incompatible license) via USB anschliessen. Diese Platte mounten, dann folgendes Kommando ausführen
 
# grub-install --root-directory=MOUNTPOINT DEVICE
Beispiel: zu installierende Platte: /dev/sdf, das root-Filessytem (/dev/sdf1) mit /boot/grub wurde gemountet nach /mnt
 
# grub-install --root-directory=/mnt /dev/sdf
Der Device bezeichnet dabei das Ziel der Grub Installation, also KEINE Partition, sondern die Platte selbst. Die Platte kann dann ohne weiteres wieder als Bootplatte verwendet werden.

Paketlisten aus- und einlesen

Damit man die Pakete nicht manuell auswählen muß, kann man diese aus einem installierten Rechner auslesen und auf einmal am Zielrechner auswählen und installieren. Dies passiert nach der Installation des Grundsystems, nachdem der neue Rechner schon von der Systemplatte gebootet hat.
Dazu am Quellrechner die Paketliste erstellen und mit scp auf den Zielrechner kopieren:
# dpkg --get-selections > pakete.txt
# scp pakete.txt root@spica:/root
Am Zielrechner:
# dpkg --set-selections < pakete.txt
# apt-get dselect-upgrade

RAID mit mdadm:

Im System eingebaute RAID-Systeme und Komponenten finden:
# mdadm --examine --scan
Im System eingebaute RAID-Systeme anhand dieser Daten zusammenbauen
# mdadm --assemble --scan
Falls nur eine Platte des Spiegels noch läuft, im Beispiel läuft /dev/sdd1 noch und /dev/sdc1 ist ausgefallen:
# mdadm --assemble --run /dev/md1 /dev/sdd1
oder RAID1 /dev/md1 mit nur einer Platte neu anlegen:
# mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdd1
normalerweise steht statt missing der 2. Device des Spiegels da. Ist auf der einwandfreienen Partition ein Dateisystem mit Daten vorhanden, kann dies anschliessend direkt gemounted werden. Um als Ersatz für die im Beispiel ausgefallene Platte /dev/sdc mit der Partition /dev/sdc1 einzuhängen, kopiert man am besten die Partitionsdaten der noch vorhandenen Platte auf eine neue leere, die gleich gross oder grösser ist. In letzterem Fall bleibt ein Teil unpartitioniert. Bei Platten > 2 TB muß das mit parted gemacht werden!
# sfdisk -d /dev/sdd | sfdisk /dev/sdc
Ausgefallene Partition einbinden:
# mdadm /dev/md1 --manage --add /dev/sdc1
Mit folgendem Kommando auf einer anderen Konsole kann man den Fortschritt verfolgen:
# watch cat /proc/mdstat

RAID mit mdadm: Booten bei Ausfall einer Platte

In Debian jessie ist (Stand 10.12.2015) ein Bug:
Bei Ausfall einer Disk des RAID 1 Root-Arrays /dev/md0 bootet jessie nicht und bleibt auf der initramfs-Konsole stehen. An dieser kann der RAID Array manuell gestartet werden: An der Konsole bei (initramfs) eingeben:
(initramfs): mdadm --run /dev/md0
(initramfs): exit
nun bootet der Array, das automatische Failover funktioniert aber bei Debian jessie ohne Eingriff in das Bootskript nicht. Im Internet bin ich bei serverfault.com dazu auf einen genialen Tip gestossen: Man kopiert das Skript /usr/share/initramfs-tools/scripts/local-top/mdadm, fügt für den Fehlerfall den Einzelstart der RAID-Arrays ein und verwendet das in /etc/initramfs-tools/scripts/local-top. Also:
# cd /etc/initramfs-tools/scripts/local-top
# cp /usr/share/initramfs-tools/scripts/local-top/mdadm .
Im vi habe ich die Zeile log_failure_msg "failed to assemble all arrays." durch folgenden Codeblock ersetzt:
  log_warning_msg "failed to assemble all arrays...attempting individual starts"
  for dev in $(cat /proc/mdstat | grep md | cut -d ' ' -f 1); do
    log_begin_msg "attempting mdadm --run $dev"
    if $MDADM --run $dev; then
      verbose && log_success_msg "started $dev"
    else
      log_failure_msg "failed to start $dev"
    fi
  done
Anschliessend initramfs aktualisieren und testhalber mit einer ausgesteckten Platte booten ... voila, funktioniert!
# update-initramfs -u
# reboot

Tastaturlayout ändern

Da ich eine verschiedene Ländervarianten der X40/X41 habe, ist das öfters nach Plattenkopieren nötig:
# dpkg-reconfigure keyboard-configuration

Startdatei in rc.n

bereits in squeeze wurde die Reihenfolge der Bootskripte auf abhänigkeitsgesteuerte Bootskripte geändert. Diese sind komplizierter aufgebaut und nüssen ihre Abhänigkeiten und "start","stop" Zweige enthalten. Ist das Startskript, im Beispiel /etc/init.d/obi1 fertig, wird es in den Bootablauf eingebunden. Hierzu wird im Verzeichnis /etc/init.d folgendes Kommando ausgeführt:
# update-rc.d obi1 defaults

TrueType Fonts (.ttf) installierern

Die Fontdateien nach usr/share/fonts/truetype/ kopieren und dann mit dem font-manager (unter X11) bekanntmachen. Das alte System mit defoma-hints,defoma-font und defoma-reconfigure gibt es nicht mehr.
Zur Verwendung unter X11 müssen die Fonts nicht unter /usr/share/fonts/truetype/ liegen, für apache-FOP schon, sonst gibts eine Exception!


xfce4 Keine Buchstaben sichtbar, nur Platzhalter

schon beim Anmelden ist keine Schrift erkennbar, nur rechteckige Rahmen statt Buchstaben, in der LOG-Datei /home/USERNAME/.xsession-errors
(xfwm4:6988): Pango-WARNING **: failed to create cairo scaled font, expect ugly output. the offending font is 'DejaVu Sans 10'
die defekten Fonts habe ich aus /usr/share/fonts gelöscht. Daraufhin funktionierte der xfce4 wieder. Später kopierte ich das Fontverzeichnis von einer anderen Jessie Maschine, daraufhin waren alle Schriften wieder verwendbar.

xcfe4 Desktop ist leer, es kann auch nichts neu angelegt werden

der Ordner $HOME/.config/autostart war leer.
Zur Behebung die Datei xfce4-settings-helper-autostart.desktop von einem anderen Rechner kopieren und im oben genannten Ordner ablegen.

Windowmanager/Greeter neu starten

# service lightdm stop
# service lightdm start

X41 / X41T BIOS Update

Viele meiner Rechner sind alte IBM X41 Subnotebooks, wegen deren problemlosem Einsatz mit Debian, zuverlässiger Hardware und geringem Stromverbrauch von ca 20 Watt mit 2TB USB ohne Display. Allerdings kann man ohne Änderungen am BIOS oft keine andere Festplatte einbauen, dieses Problem ist als "2010 Error" bekannt.
Beim Booten des Rechners bleiben deshalb viele X41 wegen der nicht zugelassenen SSD beim Booten stehen. Ein anderer X41 (polaris) meckert zwar bei der SSD ebenfalls, bootet aber nach ein paar Sekunden. Da ein nach dem Booten ewig auf Tastendruck wartender Server nicht akzeptabel schien, suchte ich im Internet nach einer Lösung. Hier ist sie, der Großteil der Infos stammt von thinkwiki.de/2010_Error_umgehen. Ich musste ausserdem erst eine Ersatzplatte und eine uralte Windows XP CD herauskramen, da das Flashen des Controllers und des BIOS nur unter Windows funktioniert. Hier die Anleitung zum Flashen in Kurzform:
Original BIOS Update
Auf einem der X41 war BIOS 1.17a, bei Lenovo gibt es die Version 2.09 (Stand 26.04.2014) zum Download. Vor Flashen des Controllers muß das neueste BIOS eingespielt werden! Das von Lenovo geladene BIOS-Update Programm ausführen und den Anweisungen folgen.
Embedded Controller Update
Vor dem Update auf das modifizierte BIOS muß die aktuellste Version des Embedded Controllers installiert werden. Kontrolle auf der Startseite des BIOS mit der letzten Version im Lenovo Downloadbereich. Bei mir war meist Embedded Controller 1.00 auf dem X41, bei Lenovo 1.02 (Stand 26.04.2014) zum Download. Nach Einspielen des modifizierten BIOS kann kein Embedded Controller Update mehr durchgeführt werden! Wenn man die Wartezeit von 5 Sekunden akzeptieren kann und die entsprechende Option (Continue after Error) im BIOS auswählt, kann mann auf das im Folgenden beschriebene Update auch verzichten.
NO 2010 BIOS Update
BIOS im Intenet suchen (oder Notfalls eine eMail an mich, Adresse siehe Impressum)
Das BIOS ISO wird auf eine CD gebrannt.
Beim Booten von CD startet der BIOS-Updater automatisch, mit "Y" beginnt der Flashvorgang.
Nach Beendigung des Flash-Vorganges wird eine Warnmeldung ausgegeben, die sinngemäß "BIOS Update fehlgeschlagen" lautet. Dies ist normal und kann ignoriert werden. X41 durch langes Drücken des Power-Schalters ausschalten.
Neu booten und dabei <F1> drücken, um ins BIOS zu gelangen.
Dort im Hauptmenü mittels <F9> Default-Werte laden ("Setup Defaults").
BIOS speichern und verlassen (<F10> "Save and Exit") ohne andere Einstellungen vorzunehmen.
Neu booten, jetzt kann man die BIOS-Einstellungen wieder anpassen.

Anhang Dateien

/etc/sudoers

Wichtig, um einige Skripte aus usr/local/bin/ auch als User go starten zu können:
root	ALL=(ALL) ALL
go	ALL=/bin/mount
go	ALL=/sbin/ifconfig
go	ALL=/sbin/cryptsetup
go	ALL=/sbin/losetup	
go	ALL=/bin/umount
go	ALL=/sbin/shutdown
go	ALL=/bin/fuser

08.10.2014 Update Bash wegen ShellShock 2.

am 30.9. gab es wohl eine neue Lücke. Test:
# bash -c "f() { x() { _;}; x() { _;} <<a; }" 2>/dev/null || echo vulnerable
Was bei mir
Segmentation fault
vulnerable
ergab. Da das in jessie noch nicht gefixt ist, habe ich es aus den Quellen und Patches des GNU Projektes selber compiliert:
# apt-get install gcc make bison
# cd ~/
# mkdir bash
# cd bash
# wget https://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
# while [ true ]; do i=`expr $i + 1`; wget -N https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$(printf '%03g' $i); if [ $? -ne 0 ]; then break; fi; done
# tar zxvf bash-4.3.tar.gz
# cd bash-4.3
# for p in `ls ../bash43-[0-9][0-9][0-9]`; do patch -p0 < $p; done
# ./configure && make && make install
Neu anmelden und testen, keine Textausgabe, also ist auch der Exploit CVE-2014-6277 gefixt.