Wissensdatenbank – Unix, Linux und Open Source Software

Inhaltsverzeichnis


FreeBSD: Intel CPU Microcode updaten

12/2019

Zuerst das Paket devcpu-data installieren.
Dann den Ladebefehl

microcode_update_enable="YES"

in /etc/rc.conf eintragen.
Entweder Rebooten oder zur Laufzeit mit service microcode_update start starten

02/2024

FreeBSD 14 hat neue Paketnamen für die Software.

cpu-microcode-amd AMD CPU microcode updates
cpu-microcode-intel Intel CPU microcode updates
cpu-microcode-rc-1.0_1 RC script for CPU microcode updates


rc.conf Parameter ist gleich geblieben.

# service microcode_update start
Updating CPU Microcode…
Done.
# tail daemon.log
Feb 13 23:43:46 server45 microcode_update[1019]: /usr/local/share/cpucontrol 06-3c-03.32: updating cpu /dev/cpuctl0 from rev 0x1a to rev 0x28… done.
Feb 13 23:43:46 server45 microcode_update[1024]: /usr/local/share/cpucontrol 06-3c-03.32: updating cpu /dev/cpuctl1 from rev 0x1a to rev 0x28… done.
Feb 13 23:43:46 server45 microcode_update[1029]: /usr/local/share/cpucontrol 06-3c-03.32: updating cpu /dev/cpuctl2 from rev 0x1a to rev 0x28… done.
Feb 13 23:43:46 server45 microcode_update[1034]: /usr/local/share/cpucontrol 06-3c-03.32: updating cpu /dev/cpuctl3 from rev 0x1a to rev 0x28… done.


Shell Beep abschalten

Januar 2019

Manchmal nervt das Piepen der Shell, vor allem die Kollegen im gleichen Büro.
So kann man es abschalten.

Bash Shell:
setterm -blength 0

Vim Editor:
:set visualbell

X-Window System:
xset b off


Vim als Anzeigeprogramm für Manpages benutzen

07.2017

Der Editor Vim eignet sich auch als Anzeigeprogramm für die Manpages. Zum Einstellen von Vim als Manpager muss die Shell Variable $MANPAGER in einer der passenden Startdateien (bspw. .bashrc) umgesetzt werden.
Die folgende Einstellung macht Vim zum Manpager:

export MANPAGER="col -b | vim -c 'set ft=man ts=8 nomod nolist nonu' -c 'nnoremap i <nop>' -"

Das ganze sieht dann so aus und ist mit der „normalen“ Navigation von vi zu bedienen:


GRML 2017.05 auf einem YUMI Bootstick einrichten

Juli 2017

Das YUMI Management Tool kommt mit dem ISO Image von GRML 2017.05 überhaupt nicht klar. Es kann aus dem Image weder mit ISOLINUX noch mit Grub eine bootfähige Konfiguration erzeugt werden. Ich habe daher den Bootprozess von YUMI und GRML analysiert und eine Konfiguration von Hand erstellt. Das hat auch noch den Vorteil, dass man sich auf das wirklich notwendige Beschränken kann und „den Rest“ gar nicht auf dem Stick hat.

Folgende Schritte sind für ein 64 Bit System notwendig:

  • Verzeichnis grml64-2017.05 im Multiboot Verzeichnis von YUMI erstellen.
  • Den Linux Kernel (vmlinuz) und die Initrd (initrd.img) aus dem Image (Pfad boot/grml64full) in das YUMI Verzeichnis /multiboot/grml64-2017.05 kopieren.
  • Das Live Filesystem (grml64-full.squashfs) und die Beschreibungsdatei (filesystem.module) aus dem Image (Pfad /live/grml64-full) in das YUMI Verzeichnis /multiboot/grml64-2017.05 kopieren.
  • Im multiboot Verzeichnis die Datei installed.txt ergänzen.
    Ergänzung in einer eigenen Zeile anhängen:

    grml64-2017.05
  • Im multiboot/menu Verzeichnis die Datei system.cfg ergänzen:
    Ergänzung am Ende anfügen

    #start grml64-2017.05
    LABEL grml64-2017.05
    MENU LABEL grml64-2017.05
    MENU INDENT 1
    CONFIG /multiboot/grml64-2017.05/default.cfg
    APPEND /multiboot/grml64-2017.05
    #end grml64-2017.05
  • Im multiboot/grml64-2017.05 Verzeichnis die Datei default.cfg mit den Bootinformationen erstellen.
    Inhalt:

    default grml
    label grml
    menu DEFAULT
    menu label grml64 2017.05 amd64
    kernel /multiboot/grml64-2017.05/vmlinuz
    append initrd=/multiboot/grml64-2017.05/initrd.img boot=live apm=power-off vga=791 nomce net.ifnames=0 live-media-path=/multiboot/grml64-2017.05/ boot=live ignore_bootid

Im Webserver Logging tauchen PHP Fehler zur Zeitzone auf

01.2017

Auf „einmal“ tauchen im Logging des Webservers Fehler zur Zeitzoneneinstellung von PHP auf.

[Thu Jan 19 08:11:47.452749 2017] [:error] [pid 41491] [client 192.168.22.10:64455] PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/local/www/apache24/data/index.php on line 202

Beheben lässt sich das durch setzen der korrekten Zeitzone in der php.ini (die der Webserver benutzt).
Dazu den vermutlich auskommentierten Eintrag date.timezone aktivieren und mit der richtigen Zeitzone konfigurieren.

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Europe/Berlin"

Jetzt muss der Webserver noch einmal neu gestartet werden und der Fehler kommt nicht mehr vor.

# service apache24 restart
Performing sanity check on apache24 configuration:
Syntax OK
Stopping apache24.
Waiting for PIDS: 1611.
Performing sanity check on apache24 configuration:
Syntax OK
Starting apache24.


Dateien unterhalb von aktiven Mountpoints erreichen

01.2017

Wenn ein Filesystem auf einem Mountpoint gemountet wurde, sind im Mountpointverzeichnis (und unterhalb davon) existierende Dateien und Verzeichnisse nicht mehr sichtbar und nutzbar.
Mit dem (neueren) mount Parameter –bind kommt man auf einem Umweg an die Dateien, indem man als Quelle Verzeichnisse angibt und keine Blockgeräte. Sinnvoll ist das beispielsweise, um im laufenden Betrieb /usr oder /var Filesysteme zu migrieren.

Angenommen /dev/sda1 ist das Rootfilesystem und ein LVM Logical Volume ist als /usr gemountet.
Man kann dann folgendermaßen an die Daten in /dev/sda1/usr/* gelangen:

# mount --bind / /mnt

Jetzt ist unterhalb von /mnt alles aus dem „echten“ Rootfilesystem (parallel) sichtbar, ohne das die Mounts etwas überlagern.

# cd /mnt/usr

# ls 
testdatei1 testdatei2 testdatei3

# df -h .
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       4.5G  3.0G  1.3G  70% /mnt

# cd /usr

# ls
bin  games  include  lib  local  lost+found  sbin  share  src

# df -h .
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/data_vg-usr_lv  2.7G  1.9G  673M  75% /usr


FreeBSD Packagemanager pkg mit Bibliothekproblem

01.2017

Wenn der Packagemager pkg nicht mehr funktioniert ist eine Änderung an der Softwareausstattung unter FreeBSD nicht mehr ohne weiteres möglich.
Beispielsweise dieses Problem hatte ich „plötzlich“:

# pkg update
Shared object "libssl.so.7" not found, required by "pkg"

Glücklicherweise haben die Macher von pkg eine statisch gelinkte Version vorgesehen, die mit auf dem System installiert ist.
So kann man pkg durch pkg selber neu auf das System installieren bzw. aktualisieren:

# pkg-static install -f pkg


HTTP Download direkt aus PHP Einzeiler

07.2016

Auf den meisten Webservern ist PHP installiert. Man kann damit auch HTTP Downloads als Einzeiler starten und auf weitere Zusatztools (wget, curl, lync, etc.) verzichten:

# php -r "readfile('http://www2.kleinboelting.de/download/testpicture.jpg');" >localpic.jpg
# file localpic.jpg
localpic.jpg: JPEG image data, EXIF standard 2.2


Im exec Teil des find Kommandos eine Pipe verwenden

04.2016

Mit dem Tool find lassen sich mächtige Konstrukte zum Auffinden von Dateien und Verzeichnissen bilden.
Der exec Parameter von find kann für jeden Fund ein Kommando ausführen. Allerdings kann man über die exec Parametrisierung keine Verkettung mit Pipes machen. Find quittiert den Versuch mit einer Fehlermeldung.

# find /tmp/ -exec ls -l {} | grep wheel \;
find: -exec: no terminating ";" or "+"
grep: ;: No such file or directory
#

Die Lösung ist der Aufruf einer Shell, die via STDIN Daten zur Verarbeitung bekommt und selber wiederum Pipes nutzen kann. Üblicherweise muss man die Shell dazu mit dem Shell Parameter -c starten.
Das ganze sieht dann beispielsweise so aus:

# find /tmp -exec sh -c "file {} | grep ASCII" \;
/tmp/samplefile: ASCII text
#


IBM AIX Einstellungen für korrekten Übergang in die Sommerzeit bzw. Winterzeit

Unter smit müssen diese Werte eingestellt sein um einen sauberen Übergang zu haben.
Vor allem einen Übergang am richtigen Datum!

                Change Time Zone

Type or select values in entry fields.
Press Enter AFTER making all desired changes.
  
                                                        [Entry Fields]
* Standard Time ID(only alpahabets)                  [NFT]
* Standard Time Offset from CUT([+|-]HH:MM:SS)       [-1]
  Day Light Savings Time ID(only alpahabets)         [DFT]
  Day Light Savings Time Offset from CUT([+|-]HH:MM: []
  SS)
  Start Daylight Savings Day([Mmm.ww.dd|Jn])         [M3.5.0]
  Start Daylight Savings Time(HH:MM:SS)              []
  Stop Daylight Savings Day([Mmm.ww.dd|Jn])          [M10.5.0]
  Stop Daylight Savings Time(HH:MM:SS)               []
      

SuSE Online Update im Textmodus und automatisch

Das SuSE Tool YaST2 kann im Textmodus laufen. Dazu mit unset DISPLAY eine event. gesetzte DISPLAY Variable löschen.
Um ein Update automatisch z.B. per cron zu starten kann man YaST2 mit den Parametern .auto.get und .auto.install aufrufen. Für jeden Parameter ist ein eigener Start von YaST2 nötig.


Sound unter Debian Woody auf einem Toshiba 320CDT

Um die Soundkarte richtig zu konfigurieren müssen die aktuellen Parameter der Hardware im BIOS des Rechners herausgefunden werden. Dazu direkt beim Einschalten ESC gedrückt halten und nach der Aufforderung mit F1 ins BIOS wechseln. Dort mit Page down in die zweite Seite wechseln und der Cursor mit den Pfeiltasten auf Sound Setup bringen.
Hier werden die Adressen für IRQ, DMA und I/O konfiguriert und angezeigt. Bitte alle Werte notieren, diese werden im Betriebssystemegebraucht. Dann das BIOS mit Taste End verlassen.
Nach dem Booten von Woddy startet man als root das Programm modconf und stellt als Soundkarte opl3sa ein. Die Parameter für den Treiber werden so angegeben:

         io=0x370 mss_io=0x530 irq=5 dma=1 dma2=0
      

Die richtigen Werte richten sich natürlich nach der vorher notierten Konfiguration des Rechners.
Desweiteren wird noch der Treiber opl eingebunden. Auch hier werden Parameter erwartet.

         io=0x388
      

Beim nächsten Booten lädt das Module

ad1848/cs4248 codec driver Copyright (C) by Hannu Savolainen 1993-1996
ad1848: No ISAPnP cards found, trying standard ones...
opl3sa2: No PnP cards found
opl3sa2: Search for a card at 0x880.
opl3sa2: chipset version = 0x5
opl3sa2: Found OPL3-SA3 (YMF715E or YMF719E)
opl3sa2: Control I/O port 0x370 not free
opl3sa2: There was a problem probing one  of the ISA PNP cards, continuing
opl3sa2: Control I/O port 0x370 not free
opl3sa2: There was a problem probing one  of the ISA PNP cards, continuing
opl3sa2: Control I/O port 0x370 not free
opl3sa2: There was a problem probing one  of the ISA PNP cards, continuing
YM3812 and OPL-3 driver Copyright (C) by Hannu Savolainen, Rob Hooft 1993-1996
      

Trotz der Fehlermeldungen wird das Modul korrekt geladen. Ich konnte mit PnP Tools die Karte auch nicht sehen. Vermutlich ist das auch der Grund für die PnP Fehler.
lsmod bringt u.a. folgende Ausgabe:

opl3                   10984   0  (unused)
opl3sa2                 7840   0  (unused)
ad1848                 20672   0  [opl3sa2]
mpu401                 18784   0  [opl3sa2]
sound                  52876   0  [opl3 opl3sa2 ad1848 mpu401]
soundcore               3236   5  [sound]
isa-pnp                27432   0  [opl3sa2 ad1848]
      

Mit z.B. XMMS kann jetzt Sound abgespielt werden.

Falls es nicht funktioniert unbefingt prüfen, ob der Benutzer in der Gruppe audio ist. Bei Debian ist der Gerätezugriff stark durch Gruppenrechte abgesichert.


Mit i4l und dynamischem Passwort eine PPP Verbindung herstellen

Um mit einem regelmässig wechselnden Passwort eine PPP Verbindung von einem Linux Router mit i4l herzustellen kann man das Interface auf manuelles Wählen einstellen und mit einem Skript die Verbindung hochziehen.

#!/bin/bash

PAPFILE="/etc/ppp/pap-secrets"
PAPUSERNAME="myusername"
TMPFILE="/etc/ppp/pap-secrets.tmp"
INTERFACE="ippp1"
EXITCODE=0
GREP="/usr/bin/grep"
MV="/bin/mv"
ISDNCTRL="/usr/sbin/isdnctrl"
SLEEP="/bin/sleep"

if [ $# -eq 1 ] ; then
  umask 177
  $GREP -v $PAPUSERNAME $PAPFILE > $TMPFILE
  echo "\"$PAPUSERNAME\"                *       \"$1\"" >> $TMPFILE
  $MV $TMPFILE $PAPFILE
  # Das Interface muss restartet werden um das neue PW zu erkennen
  /etc/init.d/i4l restart $INTERFACE > /dev/null
  $SLEEP 1
  $ISDNCTRL dial $INTERFACE
  EXITCODE=$?
else
  echo "Es muss das Passwort fuer den Zugang als Parameter uebergeben werden."
  echo "Das muss der einzige Parameter fuer das Skript sein."
  EXITCODE=1
fi

exit $EXITCODE
      

Update 23.11.2005: Vielen Dank an Holger Petersen für das Feedback zum Script. Ich habe den eq-Teil übernommen.


XTerm Titelzeile mit ksh dynamisch verändern

Mit diesem PS1 Prompt hat man in einem Xterm den User- und Hostnamen sowie das aktuelle Verzeichnis in der Fenstertitelzeile anzeigen. Das funktioniert aber auf diese Weise, wenn als Shell im Xterm die ksh benutzt wird. Andere Shells haben andere Escape Sequenzen.

case $TERM in
   xterm*)
	HOST=`hostname`
        PS1='^[]0;${USER}@${HOST}:${PWD}^G# '
        ;;
   *)
	PS1='# '
	;;
esac
      
Xterm

Achtung: Die Zeichnen ‚^[‚ und ‚^G‘ sind eigene (einzelne) Zeichen für ESC und BEL. Sie können im Emacs-Mode per

C-q ESC

bzw.

C-q C-g

generiert werden.
In vi können die Zeichen auch erstellt werden: ESC (^[) wird erstellt durch

Ctrl+v

direkt gefolgt von

Ctrl+Esc

BEL (^G) wird erstellt durch

Ctrl+g

Shellscripts SUID laufen lassen

ACHTUNG! Bitte nur machen, wenn absolut klar ist, was hier passiert. Man hat sich damit sehr schnell ein Sicherheitsloch eingebaut!
Um ein Shellscript SUID laufen zu lassen muss man einen kleinen C-Wrapper drumherumbauen. Denn die Kernel der meisten Unices droppen das SUID Bit wenn ein Programm mit #! (Programm, welches einen Interpreter braucht) startet.
Der Code für das C-Programm:

main(){
   setuid(0);
   seteuid(0);
   system("/path/filename");
}
      

Dieser Code wird dann compiliert.
Das Binary noch per chmod 4755 /path/filename SUID setzten. Falls andere Berechtigungen benutzt werden sollen muss in den Sourcen die 0 gegen die jeweilige User-ID ausgetauscht werden.


Einen Rechner als Client an einen CUPS Server anbinden

Auf dem Rechner muß nur die CUPS Clientsoftware installiert sein. Bei Debian lenny zum Beispiel das Paket cupsys-client. Andere Distributionen verwenden ähnliche Pakete.
Um den CUPS Drucker anzusprechen setzt man den Eintrag ServerName in der Datei /etc/cups/client.conf auf den richtigen Druckserver und entfernt das Kommentarzeichen.
Danach gibt z.B. lp /etc/hosts die hosts Datei auf dem entsprechenden Drucker aus.
Diese Methode benutzt keinen eigenen Spooler. Es kann also nur gedruckt werden, wenn der Druckserver eingeschaltet ist und der CUPS Server läuft.
Viele Programme benutzten zum Drucken das Kommando lpr, das wiederum auf den Druckspooler aufsetzt. Man muss diese Software
dann so konfigurieren, dass als Druckprogramm lp benutzt wird!
Besser ist natürlich, dass Drucksystem mit einem Spooler zu betreiben. Aber das ist administrativer Mehraufwand der sich nicht lohnt, wenn alle paar Wochen mal eine Konfigurationsdatei gedruckt werden muss.


/etc/sysctl.conf mit SuSE Linux 7.3 nutzen

Manche SuSE Linux Distributionen (z.B. 7.3) enthalten keine /etc/sysctl.conf. Um den Kernel einzustellen muß man so vorgehen:
Erstellen von /etc/sysctl.conf mit den passenden Einstellungen z.B.

kernel.shmmax=268435456
kernel.msgmni=1024
fs.file-max=8129
      

Danach diese Einstellung in einem Inititialisierungsscript laden. Dazu muß der Befehl sysctl -p eingebunden werden. Z.B. in das Initscript boot.local.


Mit RPM das Paket zu einem bestimmten File finden

Wenn man das Paket zu einem bestimmten File finden will kann man die RPM Datenbank mit diesem Befehle fragen:

# rpm -q -f /usr/lib/perl5/5.6.0/FindBin.pm 
perl-5.6.0-91
# 

Das bedeutet, daß das Paket perl-5.6.0-91 das entsprechende File /usr/lib/perl5/5.6.0/FindBin.pm installiert hat.

Mit DPKG das Paket zu einem bestimmten File finden

Wenn man das Paket zu einer bestimmten Datei finden will kann man die DPKG Paketdatenbank mit diesem Befehle fragen:

# dpkg -S /usr/lib/perl5/DateTime
libdatetime-perl: /usr/lib/perl5/DateTime

#

Das bedeutet, daß das Paket libdatetime-perl die entsprechende Datei /usr/lib/perl5/DateTime installiert hat.


Mit APT das Paket zu einem bestimmten File finden

Juni 2012

Wenn man das Paket zu einer bestimmten Datei finden will kann man die APT Paketdatenbank mit diesem Befehle fragen:

# apt-file search /usr/lib/libhal.so.1
libhal1: /usr/lib/libhal.so.1
libhal1: /usr/lib/libhal.so.1.0.0
# 

Das bedeutet, daß das Paket libhal1 die entsprechende Dateien /usr/lib/libhal.so.1* installiert hat.
Damit apt-file arbeiten kann muss man initial mit apt-file update die APT Quellen abfragen beziehungsweise aktualisieren.


Eine Chroot Umgebung bauen

Man legt sich ein Verzeichnis an, welches das chrooted Rootverzeichnis werden soll. Dann überlegt man, welche Tools man in der Chroot Umgebung verwenden will. Man muß die Libraries mit ldd herausfinden und alles benötigte aus /bin und /lib in lib und bin unterhalb des chroot Verzeichnissesd kopieren. Ganz wichtig ist /bin/bash und dessen libs. Sonst kann man chroot nicht starten. Danach noch chroot /pfadzumverzeichnis starten und man befindet sich im chrooted Root Verzeichnis.
Die Prozesse, die jetzt in der chrooted Umgebung gestartet werden können nicht mehr „ausbrechen“ und sehen das eigentliche Rootverzeichnis nicht.


ISO-Image von einer CD-ROM erstellen

MD5 Summe anlegen um später das Auslesen der Daten zu verifizieren.
md5sum /dev/cdrom > cd-rom.md5

Das ISO Image mit dd erstellen.
dd if=/dev/cdrom of=cd-rom.iso

Nach dem Erstellen des Images muss die MD5 Summe gleich bleiben, wenn man md5sum auf die ISO Datei anwendet. Sonst ist beim Imageerstellen etwas schiefgelaufen und man muss es wiederholen.
Wenn man das ISO Image später gebrannt hat kann man natürlich mit md5sum auf /dev/cdrom checken, ob das Brennen OK war. Die MD5 Summe darf sich nicht verändern.


Cisco WLAN Karten unter Linux in den Monitoring Mode schalten

Um die Cisco Karte in den Monitor Mode zuschalten kann man iwconfig benutzen. Gerade beim Monitormode geht das Tool aber nicht immer problemlos.
Man kann auch direkt den Treiber beglücken. Dazu einfach dieses Shellkommando absetzen.

echo "Mode: y" > /proc/driver/aironet/eth0/Config


Festplatte komplett löschen

August 2007, Juli 2017

Die komplette Festplatte (oder andere Blockdatenträger) können mit dem dd-Kommando restlos gelöscht werden.

dd if=/dev/zero of=/dev/festplatte

Alternativ mit der Anzeige, wieviel schon geschrieben wurde. Dazu muss das Tool buffer installiert sein.

dd if=/dev/zero | buffer -S 100k | dd of=/dev/festplatte

Die entsprechenden Devicenamen für /dev/festplatte kann man mit dem Kommando dmesg anzeigen lassen.

Ein Nachteil der Methode ist, dass auf diesem Weg nur Nullen auf den Datenträger geschrieben werden. Der Linux Zufallszahlengenerator /dev/urandom ist ziemlich langsam. Als Input /dev/urandom zu nutzen ist daher keine Alternative.
Eine Möglichkeit ist der Einsatz von OpenSSL. Man verschlüsselt einen Satz Nullen und nutzt einen erstellten (kleinen) Schlüssel von /dev/urandom. Dadurch kommen „schnelle Zufallszahlen“ heraus.

openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt </dev/zero >/dev/festplatte


Eine Chrootumgebung von einem installierten Linux erstellen

März 2009

Manchmal ist es nötig, eine Chrootumgebung aus einem installierten Linux zu generieren. Zum Beispiel, um Grub neu installieren.
Dafür kann GRML oder Knoppix o.ä. zum Booten benutzt werden
Zur Erstellung der Chrootumgebung sind folgenden Kommandos nötig (Angenommen das Rootfilesystem liegt auf sda6 und das Boot Filesystem liegt auf sda1):


mount /dev/sda6 /mnt

mount /dev/sda1 /mnt/boot

mount -o bind /dev /mnt/dev

mount -t proc /proc /mnt/proc

chroot /mnt /bin/bash

Jetzt kann in der gestarteten Bash Shell das System administriert werden.


Shell: Script abbrechen, wenn eine Variable nicht deklariert ist

Januar 2008

Manchmal soll ein Programm (auch in der Shell) abbrechen, wenn eine Variable benutzt wird, obwohl sie noch nicht deklariert war. Das lässt sich durch das Setzen von

set -o nounset

oder alternativ

set -u

im Script konfigurieren.

Vielen Dank an Heike C. Zimmerer für den Tipp.


Die Paketinformationen von apt automatisch aktualisieren

März 2008

Die Paketinformationen kann man automatisch aktualisieren. Dadurch kann z.B. das Monitoring feststellen, dass Updates einzuspielen sind.
Dazu in /etc/apt/apt.conf.d/ in einer entsprechenden Datei den Updatebefehl eintragen:

APT::Periodic::Update-Package-Lists "1";


Linux: Die Netzwerkkarte bekommt eine falsche Nummer zugewiesen (z.B. eth1)

Juni 2008

Bei neueren Linux Distributionen läuft die Hardwareverwaltung über udev. Diese Software baut unter anderem die eth0 bis ethn Nummern für Ethernet Netzwerkkarten zusammen.
Wenn eine neue Netzkarte installiert wird, und damit eine neue MAC in den Rechner kommt, wird das dann automatisch eine neue eth Nummer. Das passiert auch, wenn VM Maschinen geklont werden und eine neue UID (und damit eine neue MAC Adresse) bekommen.

Änderbar ist das bei Ubuntu in /etc/udev/rules/70-persistent-net.rules.
Bei Debian heisst die Datei /etc/udev/rules.d/70-persistent-net.rules.
Andere Distributionen benennen die Struktur ähnlich.

In der Datei einfach die alten Hardwarezeilen löschen und die Netzwerkkartennummern der neuen Zeile anpassen, die udev automatisch angelegt hat. Nach dem Reboot des System, oder dem Neustart von udev, ist die Nummerierung wieder OK.


Linux: IPV6 abschalten in Debian und Ubuntu

Oktober 2008

In /etc/modprobe.d/aliases

alias net-pf-10 ipv6

durch
# Disable IPV6 on this host
# alias net-pf-10 ipv6
alias net-pf-10 off

ersetzen.
Beim nächsten Neustart ist die IPv6 Adresse nicht mehr am Interface eingebunden.

tcpdump per ssh ohne die eigenen ssh Pakete

Oktober 2008

Wenn man tcpdump per remote ssh shell laufen lassen muss stören die eigenen ssh Pakete massiv. Diese Pakete werden durch die Ausgabe des tcpdump Outputs durch den ssh Tunnel generiert.


tcpdump -i eth0 not port 22

liefert alles ohne den SSH Traffic und man kann sich auf den eigentlichen Netzwerkverkehr konzentrieren.


Reboot/Halt zu einem bestimmten Zeitpunkt einplanen

Oktober 2009 und Februar 2020

Man kann den Reboot oder den Halt des Systems sehr gut mit dem AT Daemon einplanen. Andere Scripts natürlich auch.

Der folgende Aufruf plant beispielsweise den Halt für den 22.10.2009 8:58 Uhr.


# echo "/sbin/shutdown -h now" | at 8:58 22.10.2009
warning: commands will be executed using /bin/sh
job 1 at Thu Oct 22 08:58:00 2009

Der folgende Aufruf plant den Systemhalt in 15 Minuten ab jetzt ein.


# echo "/sbin/shutdown -h now" | at now + 15min
warning: commands will be executed using /bin/sh
job 1 at Tue Feb 18 18:20:00 2020

Die zu startenden Programme müssen mit einer minimalistischen Umgebung (env) zurecht kommen. Ähnlich wie bei cron laufen die Scripte im AT Daemon nicht in einer „großen“ Umgebung.


FreeBSD 8 – Englisches System und deutsche Tastatur

Januar 2011

Eigentlich will ich ja gar nicht viel. Ich will an meinem FreeBSD System komplett in Englisch arbeiten. Alles kann also Systemdefault sein.
Nur die Tastatur. Die soll deutsch eingestellt sein. Ich brauche Umlaute ziemlich oft. Wenn man Kleinbölting heisst kann man nicht gut darauf verzichten.

Der Wunsch scheint so einfach. In der Umsetzung ist er aber etwas verzwickt, da es erhebliche Neben- und Wechselwirkungen mit verschiedenen Einstellungen am Layout und den Systemsprachen gibt.
Faktisch stellt man sein System besser auf Deutsch um und nur bestimmte Sachen wieder auf Englisch „zurück“.

Hier also die Konfigurationsanleitung für alles auf Englisch und nur ein paar Kleinigkeiten auf Deutsch.

Shell Konfigurationsdateien

Als erstes checkt ihr eurer Shell Initialisierungsdateien, z.B. ~/.bashrc für die Bash.
Hier dürfen keine „Altlasten“ in Form von export LANG=... hinterlegt sein. Die stören nur. Einfach löschen, oder vorerst auskommentieren.

/etc/login.conf

Dann wird in der /etc/login.conf der default-Bereich ergänzt. Bitte auf die Notation mit den : am Zeilenende achten.
Die setenv-Zeile wird mit dieser Einstellung am Ende ergänzt:
,LC_MESSAGES=en_US.ISO8859-1
Fügt in der vorletzten Zeile im Default Bereich folgende zwei Zeilen ein:

:lang=de_DE.ISO8859-1:\
:charset=ISO-8859-1:\

/etc/rc.conf

In der /etc/rc.conf muss das richtige Layout eingestellt sein.

keymap="german.iso"

Für eine schönere Darstellung (u.a. der Umlaute) kann man noch
font8x16="iso-8x16"
font8x14="iso-8x14"
font8x8="iso-8x8"

einbauen. Das hat mit dem hier beschriebenen Umlauteproblem aber eigentlich nichts zu tun.

Auf diese Weise bekommt man ein System mit deutscher Tastatur und englischen Meldungen (auch aus der Shell).
Einige Sachen weitere Sachen sind auch noch deutsch bzw. latin1. Zum Beispiel die Sortierreihenfolge und die Darstellung von Zahlen mit Komma anstatt mit Punkt.

Wer das alles auch nicht haben möchte muß die entsprechenden LC_* Variablen auf en_US.ISO8859-1 einstellen. Im Einzelnen sind dass dann noch LC_COLLATE, LC_CTYPE und LC_NUMERIC. Dazu kann man in der setenv-Zeile der login.conf einfach hinten fortschreiben.
LC_ALL und LANG nicht verstellen oder überschreiben, da sonst die Umlaute von der Tastatus „verschwinden“ oder die Tasten andere Zeichen produzieren.


Ubuntu – Kein Passwortwechsel möglich

März 2011

Aus „irgendwelchen“ Gründen konnte unter Ubuntu mit passwd kein Passwortwechsel mehr gemacht werden. Ich konnte nicht rausfinden, warum das so ist. Ubuntu (8.04 LTS Server) hat das neue Passwort einfach nicht in die /etc/shadow eingetragen.

Um trotzdem ein Passwort zu wechseln kann man dieses Verfahren anwenden:
Als erstes das Package makepasswd installieren, wenn es noch nicht drauf ist.

echo "Ultrageheim" | makepasswd --clearfrom=- --crypt-md5

liefert das Passwort

$1$wqrfOfTk$UH3FFZjiRKbH6espQjdFc0

Diesen Hash kann man in die /etc/shadow einbauen und er gilt dann als Systempasswort für neue Anmeldungen.
Wenn man das makepasswd mehrfach startet kommen immer unterschriedliche Passwörter heraus. Das ist normal, da der Algorithmus Salt benutzt und die Hashwerte kräftig gesalzen sind.


Moderne Rechner laufen nur leise mit konfiguriertem Powermanagement Subsystem

Juli 2011

Moderne PC erzeugen unter Last sehr viel Abwärme. Dementsprechend groß sind die Lüfter dimensioniert.
Unter Linux und BSD greifen aber in der Standardinstalltion meist keine Tools in die Drehzahl der Ventilatoren ein. So lärmt der Rechner vor sind hin, obwohl er viel leiser sein könnte.
Abhilfe schafft das Paket lm-sensors. Das Paket wird installiert und kann dann über das Tool sensors-detect eingerichtet werden.
Für die Lüftersteuerung muss noch das Einrichtungstool pwmconfig gestartet werden. Das Programm fancontrol läuft als Daemon und steuert ab sofort die Drehzahlen temperaturgetrieben.
Beim Beenden von fancontrol (Shutdown) werden die Luefter kurz auf Vollgas hochgeregelt. Das kann weggescriptet werden. Ich finde es aber praktisch. Fujitsu-Siemens PC machen das beispielsweise immer beim Einschalten, um die Lager „frisch“ zu halten.


Das S.M.A.R.T System hilft beim Erkennen von Festplattenfehlern

Juli 2011

Moderne Festplatten halten ziemlich lange. Irgendwann passiert aber das unvermeidliche und die Fehlerrate geht hoch. Das SMART System
der Festplatte kann das erkennen und melden. Dazu muß auf dem System ein smartd Daemon laufen und die Informationen verwerten.
Der Smartd wird installiert und dann über die smartd.conf Datei eingerichtet.
Ich ersetze die Autoerkennung durch eine manuell gesetzte Konfiguration mit Mailbenachrichtigung an eine E-Mailadresse.
Dazu Zeile DEVICESCAN auskommentieren und pro Platte eine entsprechende Zeile setzen

/dev/DEVICENAME_DER_PLATTE -a -s L/../../7/01 -m MONITORING@EXAMPLE.COM

Wenn mehrere Festplatten verbaut und überwacht werden sollen ist eine Verteilung des Testens sinnvoll. Hier am Beispiel mit Test von sda am Sonntag um 01:00 Uhr und sdb am Samstag um 05:00 Uhr

/dev/sda -a -s L/../../7/01 -m MONITORING@EXAMPLE.COM
/dev/sdb -a -s L/../../6/05 -m MONITORING@EXAMPLE.COM

Jetzt noch den smartd Daemon starten und einen Blick in den Syslog riskieren:

Jan 11 12:00:42 server42 systemd[1]: Started Self Monitoring and Reporting Technology (SMART) Daemon.
Jan 11 12:00:42 server42 smartd[2906]: smartd 6.5 2016-01-24 r4214 [x86_64-linux-4.4.0-59-generic] (local build)
Jan 11 12:00:42 server42 smartd[2906]: Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org
Jan 11 12:00:42 server42 smartd[2906]: Opened configuration file /etc/smartd.conf
Jan 11 12:00:42 server42 smartd[2906]: Configuration file /etc/smartd.conf parsed.
Jan 11 12:00:42 server42 smartd[2906]: Device: /dev/sda, type changed from 'scsi' to 'sat'
Jan 11 12:00:42 server42 smartd[2906]: Device: /dev/sda [SAT], opened
Jan 11 12:00:42 server42 smartd[2906]: Device: /dev/sda [SAT], WDC WD30EZRX[...], S/N:WD-[...], WWN:5-[...], FW:[...], 3.00 TB
Jan 11 12:00:42 server42 smartd[2906]: Device: /dev/sda [SAT], found in smartd database: Western Digital Green
Jan 11 12:00:42 server42 smartd[2906]: Device: /dev/sda [SAT], is SMART capable. Adding to "monitor" list.
Jan 11 12:00:42 server42 smartd[2906]: Device: /dev/sda [SAT], state read from /var/lib/smartmontools/smartd.WDC_[...].ata.state
Jan 11 12:00:42 server42 smartd[2906]: Device: /dev/sdb, type changed from 'scsi' to 'sat'
Jan 11 12:00:42 server42 smartd[2906]: Device: /dev/sdb [SAT], opened
Jan 11 12:00:42 server42 smartd[2906]: Device: /dev/sdb [SAT], WDC WD30EZRX[...], S/N:WD-[...], WWN:5-[...], FW:[...], 3.00 TB
Jan 11 12:00:42 server42 smartd[2906]: Device: /dev/sdb [SAT], found in smartd database: Western Digital Green
Jan 11 12:00:43 server42 smartd[2906]: Device: /dev/sdb [SAT], is SMART capable. Adding to "monitor" list.
Jan 11 12:00:43 server42 smartd[2906]: Device: /dev/sdb [SAT], state read from /var/lib/smartmontools/smartd.WDC_[...].ata.state
Jan 11 12:00:43 server42 smartd[2906]: Monitoring 2 ATA and 0 SCSI devices
Jan 11 12:00:43 server42 smartd[2906]: Device: /dev/sda [SAT], state written to /var/lib/smartmontools/smartd.WDC_[...].ata.state
Jan 11 12:00:43 server42 smartd[2906]: Device: /dev/sdb [SAT], state written to /var/lib/smartmontools/smartd.WDC_[...].ata.state

Es ist in dem Zusammenhang wichtig, den Mailversand vom System bis zum Empfänger zu testen. Sonst kommen die SMART Fehlermeldungen nie an… 🙂


OpenBSD: Deutsche Umlaute in der Konsole anzeigen

Juli 2011

Wenn die Systemkonsole auf einem OpenBSD System keine Umlaute anzeigt kann man diese Einträge in der .inputrc setzen.

set meta-flags on
set convert-meta off
set output-meta on

Nach dem erneuten einloggen werden auch Umlaute korrekt angezeigt.


OpenBSD: Eine XDMCP Verbindung zu einem X11 Server aufbauen

Januar 2012

Um die Netzwerkfähigkeit von X11 mit XDMCP bei einem OpenBSD System auszunutzen, muss die PF Firewall auf dem System erst freigeschaltet werden.
In der Standardinstalltion von OpenBSD werden die einkommenden Ports 6000 bis 6010 blockiert. Diese Ports werden für XDMCP unbedingt benötigt.
Zum Deaktivieren in /etc/pf.conf die Firewallzeile mit dem Block von Port6000:6010 auskommentieren

# By default, do not permit remote connections to X11
# but we need it here
#block in on ! lo0 proto tcp to port 6000:6010


X11: Tastaturbelegung auf Deutsch umschalten

Januar 2012

Um innerhalb einer X11 Sitzung das Tastaturschema auf Deutsch umzustellen, kann der Befehl

setxkbmap de

in einem Terminal genutzt werden.


Zwei Bildschirme mit X11 Boardmitteln anordnen

03.2013

Zwei Monitore lassen sich unter X11 mit einem Kommando einfach anordnen.
Als erstes kann man mit xrandr nachsehen, wie die Bildschirme im System benannt sind.
Im Beispiel zwei 19″ Monitore 5:4 mit 1280×1024 Pixel Auflösung als DVI1 und VGA1.

xrandr  | grep connected
LVDS1 connected (normal left inverted right x axis y axis)
VGA1 connected 1280x1024+1280+0 (normal left inverted right x axis y axis) 376mm x 301mm
DVI1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 376mm x 301mm
	

Das folgende xrandr Kommando richtet die Bildschirme entsprechend der Aufstellung an:

xrandr --output DVI1 --mode 1280x1024 --output VGA1 --right-of DVI1 --mode 1280x1024
	

Debian – Schriftart, Codesatz und Kodierung neu konfigurieren

10.2014

Mit


dpkg-reconfigure console-setup

wird die Konsole konfiguriert.
Schriftart, Codesatz und Kodierung lassen sich einstellen.


Zwischenstand von dd Tool abrufen

02.2016

Das dd Kopierwerkzeug ist im Betrieb ziemlich schweigsam, wenn noch eine Kopieraktion läuft.
Man kann dem dd Prozess das USR1 Signal senden. Dann generiert dd einen Zwischenstand.

Hier läuft in einem Terminal der dd und kopiert Platte A auf Platte B.

# dd if=/dev/sda of=/dev/sdb
4039201+0 records in
4039201+0 records out
2068070912 bytes (2.1 GB) copied, 21.5034 s, 96.2 MB/s

10703521+0 records in
10703521+0 records out
5480202752 bytes (5.5 GB) copied, 60.1204 s, 91.2 MB/s

55824153+0 records in
55824153+0 records out
28581966336 bytes (29 GB) copied, 323.235 s, 88.4 MB/s

174301025+0 records in
174301025+0 records out
89242124800 bytes (89 GB) copied, 993.46 s, 89.8 MB/s

250069680+0 records in
250069680+0 records out
128035676160 bytes (128 GB) copied, 1423.65 s, 89.9 MB/s
#

In einem zweiten Terminal werden die entsprechenden Signale per kill an dd gesendet.
In diesem Beispiel hat der dd Prozess die Prozess ID 3911 bekommen.

# ps -ef | grep dd
root 3901 2616 29 10:44 tty1 00:00:03 dd if=/dev/sda of=/dev/sdb
root 3911 2804 0 10:45 pts/1 00:00:00 grep --color=auto dd
# kill -SIGUSR1 3901
# kill -SIGUSR1 3901
# kill -SIGUSR1 3901
# kill -SIGUSR1 3901
#

Jeder Aufruf von kill -SIGUSR1 3901 führt im anderen Terminal zur Ausgabe des Zwischenstands.


tar Archiv direkt auf ein Remote System schreiben

02.2016

Mit dem Archivwerkzeug tar können Archive auch direkt auf entfernte Server erstellt werden.
Wenn ssh-agent und SSH Keys eingesetzt werden, ist das sogar passwortlos möglich und damit voll automatisierbar.

Ein (gzip komprimiertes) tar Archiv auf einem entfernten System erstellen
tar czf - /var/www | ssh root@remoteserver "cat > /backup/wwwdata.tar.gz"

Ein (gzip komprimiertes) tar Archiv auf Band schreiben und vorher zurück spulen
tar czf - /data | ssh root@tapeserver "cat > /dev/nst0"

Ein tar Archiv zurücksichern
Achtung, die Pfaderzeugung im tar Archiv ist sehr wichtig und muss beachtet werden (Removing leading ‚/‘ from member names)
cd /
ssh root@server23 "cat /backup/wwwdata.tar.gz" | tar xzf -

Eine Verzeichnisstruktur (inkl aller Dateirechte, etc.) über tar und ssh duplizieren
tar czf - /inputdir | ssh user@otherhost "tar xzf - -C /outputdir"