Tipps für Linux

Inhalt:

  1. Vorwort
  2. Literatur
  3. Serielle Verbindungen
    1. Nullmodem
    2. Modem-Verbindungen
    3. Modem-Callback
    4. PPP
    5. PPP-Server mit Telnet/Chat
    6. PPP-Server mit purem PPP
    7. PPP-Nullmodem-Verbindung
    8. Serielle Konsole
    9. USB-to-Serial-Adapter
  4. Booten
    1. Bootdisk
    2. Bootsektor kopieren
    3. LILO
    4. Init-Parameter
    5. Rechner ohne Platte booten
    6. Fehlermeldungen beim Booten
    7. NFS-Root
    8. Linux über Windows mit Loadlin booten
    9. Linux über Windows Vista oder 7 booten
    10. Windows7 mit Grub booten
  5. Kopieren und Sichern
    1. Backup und Restore
    2. Sicherungen und Kopieren
    3. Sicherungen mit Streamer
    4. Komplette Filesysteme kopieren
    5. Konvertieren (Encoding) und Kopieren
  6. Verschiedenes
    1. Disketten formatieren
    2. USB-Sticks formatieren
    3. Mount (Root ReadOnly)
    4. X11
    5. Hinzufügen von nachträglich eingeschalteten SCSI-Geräten und Reset
    6. Suid-Scripten
    7. Swap (Paging)
    8. "Zerstörte" Terminals
    9. Patch mit Diff erstellen
    10. Inode-Anzahl einstellen
    11. Tipps zu Postscript
    12. Referenzen auf eine Homepage feststellen
    13. Bemerkungen zur SuSE 6.0 Installation
    14. CD und CDRW brennen bzw. einlesen
    15. Kernel Oops analysieren
    16. Beeps ausschalten
    17. Die C-Bibliothek libc
    18. Festplatten-Tuning
    19. Konsole sperren mit vlock
    20. Domain mit whois abfragen
    21. Screen
    22. Sicheres Programmieren
    23. Festplatte löschen
    24. Festplatten-Inhalt retten
    25. Festplatten - Defekte Sektoren
    26. Bash-Tipps
    27. tiptoi
  7. Software
    1. Perl
    2. LaTeX einrichten
    3. StarOffice
    4. PovRay
    5. finddupe
    6. c't-Rom
    7. XEmacs einrichten und Tipps
    8. WGet
    9. Sound-Programme
    10. RPM
    11. Rosegarden
    12. Vacation / Procmail
    13. Mail weiterleiten mit Procmail
    14. Email: Mailen von der Kommandozeile
    15. cdda2wav
    16. PGP
    17. TCP-Wrapper
    18. SSH (Secure Shell)
    19. Faxen
    20. MGetty
    21. VGetty als Anrufbeantworter
    22. CVS
    23. Subversion
    24. GIT
    25. LaTeX2HTML
    26. Ghostscript
    27. X-Mame
    28. Firefox
    29. WindowMaker
    30. GCC (ehem. EGCS)
    31. SANE
    32. MySQL
    33. VMWare
    34. xmove
    35. VDR (Video Disk Recorder)
    36. Bildbearbeitung
    37. Video aufzeichnen
    38. Streaming
    39. Empfehlenswerte Programme nach Kategorien
    40. ICAClient
    41. OpenSSL
  8. Libraries
    1. GGI
    2. MESA
  9. Emulatoren
    1. DOSEMU
    2. Wine
    3. Bochs
    4. KVM / Virtualisierung
  10. System-Konfiguration
    1. Kernel-Einstellungen
    2. Bootvorgang / Programme starten
    3. Grundlegende Netzkonfiguration
    4. Nameserver mit Bind 8
    5. Nameserver mit Bind 9
    6. Drucker
    7. Drucker einrichten mit CUPS
    8. INETD
    9. Tastatur (Delete und Backspace)
    10. Benutzer-Einstellungen (Shell, X11)
    11. FVWM2
    12. HTTPD / WWW-Server
    13. WWW-Cache: Squid
    14. WWW-Cache: WWWOffle
    15. Sendmail
    16. Postfix
    17. Fetchmail
    18. News (INN)
    19. FTP
    20. Fonts installieren
    21. NCR53c400a-SCSI-Karte verwenden
    22. Zeitzone einstellen
    23. NTP / Chrony
    24. UMSDOS
    25. Images von Platten mit dem Loopdevice mounten (oder auch MTools)
    26. Benutzer und System-Verwalter einrichten
    27. Device-Filesystem (devfs)
    28. ALSA
    29. RAID / Multiple Devices (MD)
    30. Samba
    31. NFS (Network File System)
    32. Automounter (autofs)
    33. PAM (Pluggable Authentication Modules)
    34. IP-Masquerading / Network Address Translation (NAT)
    35. Firewall
    36. Verschlüsseltes Dateisystem
    37. Software Suspend
    38. Tipps zu Gentoo
    39. WLAN
    40. Networkmanager
    41. VPN per OpenSSH
    42. OpenVPN
    43. User Mode Linux
    44. UnionFS
    45. Universal-Plug-and-Play (UPnP)
    46. Portscan
    47. UPS/USV mit NUT überwachen
    48. Shinobi
    49. Motion
  11. Hardware
    1. USB-PCI-Karten
    2. ATX-Netzteil
  12. Meine Programme

Vorwort

Viele kennen wohl diesen Dialog zwischen einem Linux-Guru und einem Linux-Anfänger:

Anf.: Was muß ich tun, um Funktionalität XYZ zu erhalten?
Guru: Jaaaa, das läuft bei mir prima schon seit 5 Jahren. Das war auch ganz einfach, aber ich weiß jetzt nicht mehr, wie ich das damals installiert habe... Das steht aber irgendwo in der man-page oder ein einer FAQ oder HOWTO.

Deshalb habe ich beschlossen, alle meine vorgenommenen Änderungen am System zu dokumentieren. Anfangs war dieser Text nur für mich gedacht, aber da ich selbst inzwischen schon oft gefragt worden bin, wie ich nun dieses oder jenes installiert habe, habe ich mich entschlossen das Werk zu veröffentlichen.
Die Eckdaten zum System: Ich habe mit SuSE 4.2 und Kernel 1.2.13 ca. 1995 auf einem 386 mit 4MB Speicher begonnen. Den Speicher hab ich dann bald auf 8MB (Huh - so viel.) erweitert. (Für die jüngeren Leser die Anmerkung: Es sind wirklich Megabyte und nicht Gigabyte!) 1997 wurde die Suse 4.2 durch eine 4.4.1 mit Kernel 2.0.28 ersetzt. Der 386 wurde nach einem Jahr dann durch einen Pentium 200 mit 128MB abgelöst.
Seit der Erstinstallation habe ich einiges am System verändert. Dadurch kann es sein, daß manche Einstellungen für das alte Linux noch stimmen, aber für das aktuelle angepaßt werden müssen.
Dann verging eine lange Zeit mit SuSE 4.4.1 mit Kernel 2.0.33 und libc.so.5.4.7.
Bis ca. März 2001 lief dann SuSE 6.0 mit Kernel 2.0.33 und glibc.
Seit ca. März 2001 arbeite ich mit SuSE 7.1 und Kernel 2.4.6.
Der Pentium 200 verichtet immernoch brav seinen Dienst mit Suse 7.1 und inzwischen einen Kernel 2.4.25
Auf meinem VDR habe ich zwar mit Suse begonnen, aber im November 2004 auf Gentoo umgestellt und mit damit wesentlich zufriedener.
In 2005 habe ich dann noch mein altes Notebook (Celeron-500) mit Gentoo beglückt. Daher beziehen sich alle neueren Tipps auf Gentoo, aber das werden mir die Suse-Nutzer sicherlich verzeihen.
Bei Gentoo bin ich dann auch auf dem X200s Notebook geblieben.
Einen kurzen Wechsel zu Sabayon hatte ich wieder beendet und zu Gentoo zurück gewechselt.
Seit dem 1.10.2022 läuft auf meinem guten, alten X200s jetzt Arch, mit dem ich sehr zufrieden bin!
Also bitte nicht wundern, wenn in dieser Anleitung für Software-Installation diverse Kommandos auftauchen: yast, emerge, equo, pacman/yay...
Kommentare (und Fehlerberichtigungen) sind immer willkommen, am besten per Mail: loescher@gmx.de
Ich möchte allen danken, die mir bei der Installation geholfen haben und mir bei Fragen und Problemen weitergeholfen haben. Besonderer Dank geht hiermit an alle hilfsbereiten Menschen in:
de.comp.os.unix.linux.misc
de.comp.os.unix.linux.hardware
de.comp.os.unix.x11
de.comp.os.unix.networking
maus.os.linux


Literatur

In diesem Abschnitt lege ich Hyperlinks zu Dokumenten, die mehrere Themen zu Linux abdecken und nicht speziell einsortiert werden sollten.

Meine Linux-Bookmarks
ISDN und alles über Internetworking
S.u.S.E. Support-Datenbank
Linux Wegweiser für Netzwerker
Linux Wegweiser zur Installation & Konfiguration
Linux Documentation Project
Unix-Einführung
Firewall Handbuch für LINUX 2.0 und 2.2
Open Books von O'Reilly
Schlanke Distribution für alte 32-Bit Rechner: Bunsenlabs

Und natürlich das Usenet::
de.comp.os.linux.misc
de.comp.os.linux.hardware
de.comp.os.linux.x
de.comp.os.linux.networking
maus.os.linux

Serielle Verbindungen

Verbindung von zwei Rechnern per Nullmodem

Bemerkung: Sowohl mgetty, als auch getty lesen die Datei /etc/gettydefs. Diese Datei ist für mgetty notwendig!
Um den Rechner, der eine eingehende Verbindung ermöglichen soll zu konfigurieren gibt es zwei Möglichkeiten: Dann Neustart des Init: kill -HUP 1 oder init q
(Danach sollte ein login auf dem Terminal des anderen Rechners erscheinen.)

Modem-Verbindungen herstellen

1. /dev/modem sollte auf /dev/ttyS1 gelinkt werden.
2. Unter Umständen RTS/CTS einschalten:
in /sbin/init.d/boot.local eintragen: stty crtscts < /dev/modem
3. Re-Ring für Modem-Verbindungen mit nur einer Telefonleitung, die auch für Gespräche genutzt werden soll, geht mit mgetty.
Nur in /etc/initab eintragen:
mo:123:respawn:/usr/sbin/mgetty -R 60 -s 57600 modem
Man kann mgetty nicht testweise von Hand starten, sondern nur über init!
In /etc/gettydefs muß dann diese Zeile hinein:
F57600# B57600 CS8 CRTSCTS # B57600 SANE -ISTRIP HUPCL CRTSCTS #@S @L @B login: #F57600
Mgetty wartet auf Klingeln und geht nicht (!) an die Leitung, sondern wartet erst 30 Sekunden und geht dann in den nächsten 60 Sekunden an die Leitung.
Es wird sowohl FAX, als auch Datenverbindung entgegengenommen.
Zum Fehlersuchen kann eventuell "script" oder "cu" oder "echo -ne 'ATZ\r'>/dev/modem'" nützlich sein.

Modem-Callback

Für einen Verbindungsaufbau im Callback-Verfahren braucht man nur einen aktuellen mgetty. Bei diesem ist ein Programm namens callback dabei. Das kompiliert man und kopiert z.B. nach /usr/local/sbin/callback.
Man braucht dann noch diesen Eintrag in /usr/local/etc/mgetty+sendfax:
CALLBACKUSER   -   -   /usr/local/sbin/callback -S TELEFONNUMMER
Also z.B.:
loescher   -   -   /usr/local/sbin/callback -S 08912345
callback hat auch noch ein Konfigurationsfile /usr/local/etc/mgetty+sendfax/callback.config:
dialout-devices modem
retry-time 30
max-time 90
debug 9
dial-prefix ATX3DT
Dann kann man diesen Rechner anrufen und als User "loescher" eingeben. Es wird dann aufgelegt und die Telefonnummer 08912345 zurückgerufen.
Um eine PPP-Verbindung damit aufzubauen, dient dieses Chat-Script auf Clientseite als Grundlage:
ABORT BUSY
"" ATZ
OK ATDTnummer_des_callback_servers
TIMEOUT 120
CONNECT ""
ogin: callbackusername
RING ATA

PPP


PPP-Server mit Telnet/Chat einrichten

ACHTUNG: Folgende Anleitung stimmt nicht mehr! Ich bekomme vom pppd immer die Fehlermeldung: "Unauthorized remote IP address"
Zuerst konfiguriert man den mgetty um Modem-Verbindungen zu ermöglichen.
Wenn man dabei das "Auto-PPP" von mgetty aktiviert, dann ist man schon fertig. Wenn man es allerdings über einen Login-Vorgang lösen will, dann geht das so:
Dann richtet man einen PPP-Account ein (entnommen aus NAG - Network Administration Guide von Olaf Kirch):
In /etc/passwd:

ppp:x:500:200:PPP Account:/tmp:/usr/local/bin/ppplogin

(Natürlich bei Bedarf mit anderen uid und gid.)
Der User "ppp" muß evtl. auch noch in der Gruppe "dialout" sein, da er sonst den "pppd" nicht ausführen kann. Und /usr/local/bin/ppplogin:

#!/bin/sh
# ppplogin - Script startet pppd beim Login
mesg n
stty -echo
exec /usr/sbin/pppd -detach silent modem crtscts


Zum Login verwendet man ein gewöhnliches "ppp-on":
#!/bin/bash
stty 57600 cs8 pass8 crtscts </dev/modem
pppd -ipx-protocol mtu 296 debug crtscts defaultroute \
netmask 255.255.255.0 /dev/modem 57600 \
connect '/usr/sbin/chat -v -f /root/private/remote.chat'

Das Chat-Script sieht so aus:
ABORT BUSY ABORT "NO CARRIER" ""
ATZ OK
ATL1M1DPtelefonnummer TIMEOUT 90
CONNECT "" login: ppp assword: geheimes_passwort

Für den Palm-Pilot reicht ein simpler pppd-Aufruf:
/usr/sbin/pppd /dev/modem 19200 :172.16.0.100 local persist

PPP-Server mit purem PPP einrichten

Zuerst konfiguriert man den mgetty um Modem-Verbindungen zu ermöglichen.
Dann aktiviert man in /etc/mgetty+sendfax/login.config das AutoPPP, sodaß mgetty direkt PPP-Verbindungen annimmt:
/AutoPPP/ - a_ppp /usr/sbin/pppd auth -chap +pap debug 192.168.1.1:192.168.1.2
Die IP-Adressen dürfen nicht aus dem lokal und remote verwendetem Netz stammen.
In /etc/ppp/pap-secrets muß man auf dem PPP-Client eine PPP-Benutzerkennung und -Kennwort eintragen, z.B.:
ppptestuser * ppptestkennwort
Auf dem Server trägt man die gleiche Zeile ein und kann dahinter noch die IP-Adresse angeben, die der Client erhalten soll. Man kann auch "*" eintragen und damit die vom Client vorgegebene Adresse übernehmen:
ppptestuser * ppptestkennwort *
Dann kann man vom Client eine Verbindung aufbauen:
pppd lock bsdcomp 15,15 debug crtscts netmask 255.0.0.0 /dev/modem 115200 asyncmap 0 nodetach user ppptestuser

PPP-Nullmodem-Verbindung

Auf dem Server muß folgendes eingerichtet werden: Dann kann man auf dem Client die PPP-Verbindung mit diesem Kommando aufbauen:
pppd lock bsdcomp 15,15 debug crtscts netmask 255.0.0.0 /dev/nullmodem 115200 asyncmap 0 nodetach connect '/usr/sbin/chat "" "\r" ogin: ppp assword: geheimnis'
Zwei PCs mit Siemens-Gigaset verbinden:
Basisstation:
pp:23:respawn:/usr/sbin/pppd /dev/ttyS1 115200 crtscts silent nodetach local passive 10.10.10.1:10.10.10.2 mtu 296 mru 296
PC als Teilnehmer:
pp:23:respawn:/usr/sbin/pppd /dev/ttyS1 115200 crtscts nodetach local passive 10.10.10.1:10.10.10.2 mtu 296 mru 296

Serielle Konsole

Wenn man bereits den LILO über die serielle Konsole bedienen will, dann muß das in den globalen Abschnitt von /etc/lilo.conf:
serial = 0,9600n8
Dem Kernel sagt man mit diesen Parametern, daß eine serielle Konsole verwendet werden soll:
append = "console=ttyS0,9600n8 console=tty0"
(Natürlich muß dazu im Kernel CONFIG_SERIAL_CONSOLE aktiviert sein.)
Wenn man sich dann auch noch am System anmelden will, dann muß diese Zeile in die /etc/inittab:
nu:123:respawn:/usr/local/sbin/mgetty -r -s 9600 nullmodem oder
7:2345:respawn:/sbin/getty ttyS0 DT9600 Für getty braucht man evtl. noch die Ergänzungen in /etc/conf.getty.ttyS0:
DEBUG=777
CLEAR=NO
WAITFOR=\r

USB-to-Serial-Adapter

Viele dieser Adapter, die USB mit einer seriellen Schnittstelle verbinden, sind günstig und unter Linux unterstützt.
Man steckt den Adapter in den USB-Port und schaut sich erst einmal die IDs an:
lsusb -v
...
idVendor 0x1a86
idProduct 0x7523
...
cd /usr/src/linux/drivers/usb/serial
grep 0x1a86 *
Dann in der Kernel-Konfiguration (make menuconfig) das Modul eintragen:
USB Serial Converter support
-> USB Winchiphead CH341 Single Port Serial Driver
(Dieser Chip ist seit Kernel 2.6.24 unterstützt.)

Booten

Linux mit einer Boot-Disk von einer Partition starten


Bootsektor und Partitionstabelle kopieren

Sicherung des Bootsektors:
dd if=/dev/sdaX of=bootsektor bs=512 count=1
Sicherung des Master-Boot-Records (MBR):
dd if=/dev/sda of=mbr bs=512 count=1
Auf eine Floppy kopieren zum Booten:
dd if=/dev/hda of=/dev/fd0 bs=512 count=1

LILO-Installation

Wenn man von MO von der 1. Partition (/dev/sda1) booten will, dann muß LILO im MBR installiert sein. Wichtig ist dann dieser Eintrag in der lilo.conf:
boot=/dev/sda (Und nicht /dev/sda1)
Trotzdem wird im IMAGE-Abschnitt das Root angegeben:
image = /vmlinuz
root = /dev/sda1
label = Linux

Erklärungen:
install=<Bootsektor>
Lage und Bezeichnung des bootsektors. Linux verwendet als Standard /boot/boot.b
image=<Kernelimage>

Bei Problemen:
Wenn beim Booten mit lilo nur 'li' erscheint, deutet das auf einen Plattengeometriefehler hin. Auch die Warnung 'not on the first disk' deutet darauf hin, daß die Platte nicht als erste gemeldet wird, aus welchem Grund auch immer.
Also: Die Zeile 'verbose = 3' in /etc/lilo.conf einbauen und lilo aufrufen. Im Output nach einer Zeile suchen, die wie folgt aussieht:
Device 0x0808: BIOS drive 0x81, 255 heads, 522 cylinders
Das wichtige dabei ist die Bios drive number. Wenn die nicht 0x80 ist, in /etc/lilo.conf die Zeile
disk = /dev/sda bios=0x80
am Ende der 'global section', (vor der Zeile mit Image=...) einfügen und lilo erneut aufrufen. In jedem Fall die hexadezimale Notation mit 0x.. verwenden! Wenn das nichts hilft: Das Kapitel über drive geometry in user.dvi aus der lilo Dokumentation lesen (unter /usr/doc/lilo/doc oder /usr/lib/lilo/doc)

Konfiguration:
Im BIOS abgemeldete IDE-Platte, 2 SCSI Platten, Linux soll von SCSI-Disk 1 booten:

verbose=3
boot=/dev/sda
linear
read-only
delay=50
vga = normal
disk = /dev/sda bios=0x80
image = /vmlinuz
root = /dev/sda1
label = Linux

LILO kann man auch über den NT-Bootloader starten. Dazu läßt man LILO nicht direkt auf Platte schreiben, sondern in ein File:
lilo -s /tmp/linux.bin
und kopiert dieses File nach C:\. Dann muß man nur noch in die C:\boot.ini von NT im Abschnitt [Operating Systems] das eintragen:
c:\linux.bin="Linux starten"

Seit Version 21.x.x kann LILO Partitionen auch jenseits der 1024-Zylinder-Grenze booten. Man muß dazu nur das neue Schlüsselwort LBA32 in die lilo.conf eintragen.

Init-Parameter

Man kann dem Lilo oder Loadlin Parameter für Init mitgeben: 1, 2, 3, 4, 5, single oder emergency. Wenn z.B. Linux nicht richtig bootet, weil im Runlevel 2 oder 3 etwas schiefläuft, dann kann man Linux im Single-User-Mode booten:
c:\linux\loadlin c:\linux\2033 root=/dev/sda1 ro single
Oder mit Lilo:
Lilo-Prompt: Linux single
Man kann den Kernel auch veranlassen, statt Init eine Shell zu starten:
init=/bin/sh

Rechner ohne Platte booten

Ich habe es noch nicht ausprobiert, aber mir schon folgendes notiert:

Fehlermeldungen beim Booten


NFS-Root

Mit loadlin:
valerie.img root=/dev/nfs rw vga=-2 nfsroot=192.168.1.1:/mnt4/iX-Terminal/valerie,rsize=4096,wsize=4096 nfsaddrs=192.168.1.8:192.168.1.1::255.255.255.0:valerie::none
Weitere Infos: /usr/src/linux/Documentation/nfsroot.txt

Linux über Windowss mit Loadlin booten

Man kopiert einfach loadlin.exe und einen Kernel nach c:\linux\ und erstellt folgende c:\config.sys:
[Menu]
menuitem=Win95, Windows 95 starten
menuitem=Linux, Linux starten
menudefault=Win95,15

[Linux]
shell=c:linux\loadlin.exe c:\linux\2217 root=/dev/sda5 ro

[Win95]
device=C:\WINDOWS\COMMAND\display.sys con=(ega,,1)
Country=049,850,C:\WINDOWS\COMMAND\country.sys

Linux über Windows Vista oder 7 booten

Am einfachsten geht das nach dieser Anleitung bzw. nach dieser Anleitung mit EasyBCD: Damit bootet der Windows Vista oder 7 Bootloader das Linux.
Achtung: NeoGrub unterstützt keinen Linux LVM, sondern man braucht eine normale Partition, zumindest ein /boot.
Kurzfassung:
EasyBCD starten und "add a new entry" klicken, dann den NeoGrub Tab auswählen und Install klicken. Dann Configure klicken, welches die Datei C:\NST\menu.lst öffnet. Dort Folgendes eintragen:
root (hd0,4)
kernel /kernel-genkernel-x86-4.0.5-gentoo root=/dev/mapper/rootvg-root1lv dolvm
initrd /initramfs-genkernel-x86-4.0.5-gentoo
boot

Windows7 mit Grub booten

Nach dieser Anleitung geht das so:
Man bootet ein Live-Linux.
Bootloader ohne Partitionstabelle sichern:
dd if=/dev/sda of=bootloader_sicherung bs=446 count=1
MBR (Bootloader plus Partitionstabelle) sichern:
dd if=/dev/sda of=mbr_sicherung bs=512 count=1
Dann:
mount -o bind /dev /mnt/dev
mount -t proc /proc /mnt/proc
chroot /mnt /bin/bash
Dann Grub in den MBR schreiben:
grub
grub> root (hd0,1)
grub> setup (hd0)
grub> quit
und das in die /boot/grub/menu.lst:
title Windows7
rootnoverify (hd0,0)
chainloader (hd0,0)+1

Kopieren und Sichern

Backup und Restore

Alle Rechner werden durch ein an den jeweiligen Rechner angepasstes Skript gesichert, z.B.:
backup-x200
welches ein kleines Perl-Modul verwendet: slbackup.pm
Im Kern erfolgt die Sicherung aber nur durch einen rsync -avSH --delete --delete-excluded --numeric-ids ...

Für eine Außer-Haus-Sicherung bietet sich syncosync an. Es verbindet zwei Raspberry PI zu einem cloudartigen Speicher, siehe dazu auch c't 13/2022 S. 88.
Für eine Desktop-Sicherung bietet sich Duplicati an.
Und für eine Image-basiertes Full-Backup: Rescuezilla

Man kann und sollte einen Restore in einer VM testen. Dazu die VM anlegen und mit einem Boot-ISO starten:
qemu-img create -f raw restore-test.raw 50G
qemu-system-x86_64 -enable-kvm -drive if=virtio,driver=raw,node-name=hda,file=/xtemp/vms/restore-test.raw -m 2G -smp 1 -net nic -net user,hostfwd=tcp::2222-:22 -cdrom image.iso -boot once=d

Ein Restore geht grob so:
# Live-CD booten
# Mit fdisk die Partitionen anlegen und ggf. LVM einrichten.
# ACHTUNG: Darauf achten, dass die Partitions-Tabelle DOS und nicht GPT ist!
# Beispiel:
export BOOT=/dev/sda1
export SWAP=/dev/sda2
export ROOT=/dev/sda3
mkswap -L SWAP $SWAP
# Filesysteme formatieren, aber Achtung:
# Wenn man in seinem Backup einen alten grub hat (0.97), der keine Inodes größer 128 unterstützt, dann sollte man beim Formatieren "-I 128" angeben!
# Boot-Partition
mkfs.ext3 $BOOT
e2label $BOOT BOOT
# Root-Partition
mkfs.ext4 $ROOT
e2label $ROOT ROOT
tune2fs -c 0 $ROOT
tune2fs -i 400d $ROOT
mkdir /mnt/restore
mount $ROOT /mnt/restore
mkdir /mnt/restore/boot
mount $BOOT /mnt/restore/boot
cd /mnt/restore
rsync -avSH --numeric-ids server:/mnt/data/backup/fremd/backup_von_WASAUCHIMMER/. .
source .slbackup_infos/mkdirs.sh
# bzw. zumindest: mkdir proc sys mnt tmp
# fstab prüfen, ob die Geräte den richtigen Namen haben:
vi etc/fstab
# ggf. neues Netzwerk-Interface suchen und eintragen

# Für Gentoo:
ifconfig -a
vi etc/conf.d/net
cd etc/init.d
mv net.ALT net.NEU

# Für Arch:
ip link
cd etc/systemd/network
ls
# z.B.:
vi 30-ethernet-bond0.network
vi 30-wifi-bond0.network

# Dann weiter:
cd /mnt/restore
mount -t proc proc proc
mount --rbind /dev dev
mount --rbind /sys sys
chroot . /bin/bash

# Dann noch Grub, entweder der alte Grub...
grub
# root (hd0,1)
# setup (hd0)
# quit
vi boot/grub/menu.lst

# oder der neue Grub ab Version 2...
grub-install /dev/sda
# bzw.: grub-install --target=i386-pc /dev/sda
# Das root Device bei "root=UUID=..." anpassen:
vi boot/grub/grub.cfg
exit
cd
reboot
Beim Testen in einer VM, kann es sein, dass man die VM mit der Disk-Option -drive if=ide,... starten muß, weil das alte Linux noch kein virtio unterstützt!
Nach dem ersten Boot:
grub-mkconfig -o /boot/grub/grub.cfg
journalctl -p 3 -b
mkdir -p /usr/sl
cd /usr/sl
svn co svn://server/sl/trunk/bin .

Sicherungen und Kopieren

cd quelle
find . -print | cpio -pvdm /ziel

(Manche cpios brauchen auch noch den Schalter "-u".)
oder:
cd /quelle
cp -axv . /ziel

oder mit TAR:
cd /quelle
tar -cvpf - . | gzip --best > /ziel.tgz

Bedeutung:
Create, Verbose, Preserve attributes, file stdout (-)
GZIP nimmt die Ausgabe vom TAR und komprimiert nach ziel.tgz

Sicherungen über das Netzwerk:

Sicherung mit Streamer

cd /quelle
tar -cvpf /dev/tape .
(d: diff, x: extract, t: list)
Einzelfiles extrahieren: tar -xvf /dev/tape 'c:/temp/*'
Bandbewegungen:
Zurück: mt bsfm

Ungetestet:
I use a mt setblk 0, and a dd buffer of 32 KB
I do backups like:
cd /
find . -print | cpio -ovB | dd of=/dev/st2 bs=32000


Angeblich ist "-b 20" die übliche Blockgröße?!

Ungetestet:
cd /quelle
find . -print | cpio -ocvB > /dev/tape
cd /quelle
find . -print | cpio ocvC 65536 > /dev/tape
Der dd kann auch die Übertragungsrate anzeigen, wenn man dem dd das Signal USR1 schickt.

Komplette Filesysteme kopieren

Linux komplett auf anderes Medium kopieren:

Konvertieren (Encoding) und Kopieren

Sollte man Dateien mit Namen in nicht-UTF8 Encoding angelegt haben, dann hilft convmv bei der Umbenennung:
convmv --nfc -r -f utf8 -t utf8 -r .
# bzw.
convmv -r -f latin1 -t utf-8 .
Mit der Option --notest wird es dann tatsächlich ausgeführt.
Den Inhalt einer Datei kann man mit iconv von z.B. Latin-1 zu UTF-8 wandeln:
iconv -f latin1 -t utf-8 document.txt >> document_new.txt
XEmacs unterstützt UTF erst richtig ab app-editors/xemacs-21.5.34-r4

Verschiedenes

Disketten formatieren

1.44MB Disk in einem 1.2MB Laufwerk formatieren:
fdformat /dev/fd0h1440
und dann
mformat a:
Falls es dieses Device nicht gibt, dann erstellen:
mknod /dev/fd0h1440 b 2 40
MOs (Magneto-Optical-Disks) formatiere ich so:
mk.ext3 /dev/sdb && tune2fs -c 0 -i 0 -r 0 /dev/sdb && mount /dev/sdb /mnt/mo && chown loescher:users /mnt/mo/.

USB-Sticks formatieren

Testen, ob der Stick die echte Kapazität hat, oder ein "Fake"-Stick ist:
f3probe --destructive --time-ops /dev/sdX
Damit kann man auch auf Defekte (kaputte Sektoren) testen!
Geschwindigkeit testen:
mount ...
cd ...
time ( dd if=/dev/zero of=sltest.dd status=progress bs=1M count=2000 ; sync )
Das Ergebnis (z.B. 3m38.179s) dann in MB/s umrechnen:
calc '2000/(3*60+38)' ergibt ~9MB/s.
Mein schnellster USB-Stick schafft am USB2-Port hier ca. 26 MByte/s.

Formatierung mit FAT:
Zuerst mit fdisk eine primäre Partition mit Typ "c" ("W95 FAT32 (LBA)") anlegen und dann:
mkfs.vfat /dev/sdX1
fatlabel /dev/sdX1 'USB-Stick'

Formatierung mit exFAT:
Zuerst mit fdisk eine primäre Partition mit Typ "7" ("HPFS/NTFS/exFAT") anlegen und dann:
mkfs.exfat /dev/sdX1
exfatlabel /dev/sdX1 'USB-Stick'

Formatierung mit NTFS:
Zuerst mit fdisk eine primäre Partition mit Typ "7" ("HPFS/NTFS/exFAT") anlegen und dann:
mkfs.ntfs -f /dev/sdX1
ntfslabel /dev/sdX1 'USB-Stick'

Formatierung mit EXT:
Zuerst mit fdisk eine primäre Partition mit Typ "83" ("Linux") anlegen und dann:
export TARGET=/dev/sdX1
export LABEL=AUDIO
mkfs.ext3 ${TARGET}
e2label ${TARGET} ${LABEL}
tune2fs -c 0 LABEL=${LABEL}
tune2fs -i 0 LABEL=${LABEL}
tune2fs -m 0 LABEL=${LABEL}
mount -L ${LABEL} /mnt/tmp
chown loescher:users /mnt/tmp/.
umount /mnt/tmp

Mount (Root ReadOnly)

Um die Root-Partition, die aus diversen Gründen Read-Only gemountet worden ist, wieder als Read-Write zu mounten reicht dieser Befehl:
mount -w -n -o remount

X11


Hinzufügen von nachträglich eingeschalteten SCSI-Geräten und SCSI-Reset

Entnommen aus: /usr/src/linux/drivers/scsi/scsi.c:
Verwendung: echo "scsi add-single-device Host Channel Id Lun" >/proc/scsi/scsi
Also: echo "scsi add-single-device 0 0 3 0" >/proc/scsi/scsi
Damit wird das Gerät mit der SCSI-ID 3 hinzugefügt. Entfernen geht mit "remove-single-device".
In sein Skript gepackt sieht es dann so aus: scsirescan
Ich empfehle aber jedem, der externe Geräte nachträglich ein- und ausschalten muß, sich das Device-Filesystem devfs anzuschauen. Das löst alle Probleme mit den generischen SCSI-Geräten. Damit gehört die unpraktische und gefährliche Numerierung sga, sgb, sgc, ... der Vergangenheit an.

Einen SCSI-Reset (z.B. für ein hängendes Gerät) kann so ausgelöst werden:
cdrecord -reset
oder
cdrdao unlock --device 0,0,0

SUID-Scripte

Um etwas Set-UID laufen zu lassen gibt es "su1" oder "sudo".
Aber es ist unter Linux nicht möglich Scripten SUID laufen zu lassen, da es ein Sicherheitsloch darstellen würde. Das SUID-Bit (ebenso wie SGID) kann bei Shellscripten zwar gesetzt werden, hat aber keine Wirkung. Aber es gibt eine Lösung: Man kann das Script in ein C-Programm packen, das dann SUID laufen kann. Man kann z.B. folgendes C-Programm als Wrapper verwenden:
#include <stdio.h>
#define PROGPATH   "/usr/local/bin/perl"
#define PROG       "perl"
main ()
{
  execl (PROGPATH, PROG, "/usr/local/bin/MEINSCRIPT", NULL);
  fprintf (stderr, "exec %s failed\n");
}
    

Swap (Paging)

Die Swap-Partition oder ein Swap-File kann bei alten Kernels (vor 2.2.x mit x<17 (Wer weiss wann das genau geändert wurde?)) maximal 130752 Blocks groß sein!

Wenn man das Paging beschleunigen will, so kann man Striping bzw. Interleave zwischen den Swap-Spaces aktivieren. Dazu stellt man für die Swapspaces die gleiche Priorität ein, was bewirkt, daß auf diese gleichzeitig zugegriffen wird. Das macht natürlich nur bei physisch unterschiedlichen Platten Sinn.

# For interleaved swapping across multiple devices:
/dev/scsi/host1/bus0/target5/lun0/part1 swap swap pri=1 0 0
/dev/scsi/host1/bus0/target6/lun0/part1 swap swap pri=1 0 0
/dev/scsi/host1/bus0/target1/lun0/part2 swap swap pri=0 0 0

"Zerstörte" Terminals

Wenn ein XTerm oder die Konsole etwa so aussieht:
ÈccyvyéYxyPÃâ`Y0;¤zIb!+ìÀyí-prríq`
"q^,wí ÉÞð+¼qó/62øaðvÀÃkó,ªxË·1t¥eÿIÈ,Ù8³âcË
x"Öæ0`;ÇàdTÚ®ÉëYv¹!tØ,BÃtæ0È0p||=â1ÎwÈS`õå4
weil man z.B. versehentlich ein cat test.gif losgelassen hat, dann hilft das Kommando reset in diesem Terminal. Alternativ funktioniert auch "<Ctrl>-v <Esc> c <Enter>".

Patch mit Diff erstellen

Einen Patch zwischen zwei Verzeichnissen erstellt man mit:
diff -u --recursive --new-file AltesVerz NeuesVerz > patch.txt
Einen Patch zwischen zwei Files erstellt man so:
diff -u AltesFile NeuesFile > patch.txt
Anwenden kann man den Patch dann so:
patch < patch.txt
(Dabei sollten sich das zu patchende Verzeichnis oder File im aktuellen Verzeichnis befinden.)

Inode-Anzahl einstellen

Für eine Platte, die viele kleine Files aufnehmen soll, wie zum Beispiel ein News-Spool, sollte man die Inode-Anzahl erhöhen:
mke2fs -v -i 2048 /dev/sdc
Standardwert ist 4096. Je kleiner der Wert, desto mehr Inodes werden reserviert.

Tipps für Postscript


Referenzen auf eine Homepage feststellen

kann man, indem man in Altavista oder Infoseek nach folgendem sucht:
link:www.loescher-online.de
Hotbot hat diese Funktion in der "Look for"-Auswahlbox.
Auch Google kann das über die erweiterte Suche.

Bemerkungen zur SuSE 6.0 Installation


CD und CDRW brennen bzw. einlesen


Kernel Oops analysieren

Wenn der Kernel einen Oops bringt, dann versucht der klogd diesen zu analysieren, was meist fehlschlägt. Deshalb am besten in einer Testphase den klogd deaktivieren.
Wenn es dann zu einem Oops kommt, dann sitzt dieser Text noch in /proc/kmsg wo man ihn nur so herauslesen kann:
cat /proc/kmsg > /tmp/oops.txt
Nach einer kurzen Wartezeit mit CTRL-C abbrechen.
Dann kann man den Oops mit /usr/src/linux/scripts/ksymoops analysieren:
ksymoops -v vmlinux -m System.map
Wenn der make für ksymoops nicht durchläuft, dann fehlen wahrscheinlich die Libraries libiberty und lbfd, welche bei den binutils-2.9.1.0.15 dabei sind.

Beeps ausschalten

Auf der Konsole kann man die Beeps so ausschalten:
setterm -blength 0
Und unter X11 kann man es so ausschalten:
xset b off

Die C-Bibliothek

Der dynamische Linker ist ld.so.
Statische Bibliotheken enden auf .a, dynamische auf .so.
Wenn $LD_LIBRARY_PATH gesetzt ist, dann werden Bibliotheken in diesem Pfad gesucht.
Zum Debuggen kann man $LD_DEBUG auf help oder libs setzen.
ldd zeigt verwendete Bibliotheken eines Programmes an.
Die libc kann man auch am Prompt ausführen. Es wird die Version ausgegeben.
Mit $LD_PRELOAD kann man Bibliotheken laden, die Funktionen anderer Bibliotheken überschreiben, z.B.:
LD_PRELOAD=libmemusage.so /bin/ls

Festplatten-Tuning

Feststellen, ob die EIDE-Platte DMA benutzt:
hdparm -cd /dev/hda
Umstellen:
hdparm -c1 -m16 -d1 -X68 /dev/hda
für Ultra-ATA/66 oder -X66 für Ultra-ATA/33.
Die maximalen Werte für -m erfährt man mit -i.

Aktuelle (2016) Western Digital Platten arbeiten standardmäßig mit einem sehr aggressiven Stromsparverhalten.
Dazu ist der IDLE3-Timer auf 8 Sekunden eingestellt.
Das ist ganz OK für einen Desktop, aber nicht für einen Server, denn da wird der LCC-Wert sehr schnell das Maximum überschreiten und die Platte ein Garantiefall.
smartctl --all /dev/sdb | grep 193
Daher IDLE3-Timer auf z.B. 10 Minuten stellen:
idle3ctl -s150 /dev/sdb

Konsole sperren mit vlock

Mit vlock kann man die Text-Konsolen sperren.

Domain mit whois abfragen

Mit z.B.
whois -h whois.denic.de loescher-online.de
kann man den Besitzer einer Domain herausfinden.

Screen

In einem Text-Terminal kann man mit screen mehrere Sessions gleichzeitig laufen lassen und diese auch nach einem Logout und späterem Login wieder fortsetzen.
Kurzanleitung:
1. Ganz normal anmelden, willkommen in Deiner Shell.
2. "screen" aufrufen. Es kommt eine Hinweismeldung, Taste drücken und Du bist wieder in Deiner Shell (allerdings in einer neuen, wie auch pstree zeigt).
3. Arbeite einfach drauf los.
4. Stürze mit deinem Client ab :-) oder schließe einfach das Terminal.
5. Neu anmelden. Danach "screen -r" aufrufen (wenn das nicht klappt, zuvor noch ein "screen -d").
6. Voila, willkommen in Deiner alten Session.
Wenn Du eine Session "weich" in den Hintergrund schicken willst, dann drückst Du Strg-a-d. Du kannst mehrere in den Hintergrund geschickt haben, dann mußt Du bei screen -r angeben, welche Session Du wiederhaben willst.
screen ist eine Gute Sache. Du kannst Programme starten, Dich abmelden und nach einem Tag mal wieder vorbeischauen, was die so machen.

Sicheres Programmieren

Folgende Punkte sollte man unter anderem bedenken, wenn man ein sicheres Programm oder Skript schreiben will:
Core-Dumps verhindern (ulimit -c 0 oder setrlimit())
umask 077
env -i (unset %ENV)
STDOUT und andere Descriptoren etc. schließen

Festplatte löschen

Bevor man eine Festplatte zum Wertstoff-Hof trägt oder sie verkauft, sollte man sicherstellen, dass alle Daten gelöscht sind.
Dazu eignet sich "dd" oder wenn die Platte schon schwere Schreibfehler aufweist besser "dd_rescue" oder "ddrescue". Der Aufruf mit dd_rescue würde so aussehen:
dd_rescue /dev/zero /dev/sdX
Aufruf mit ddrescue so:
ddrescue --generate-mode /dev/zero /dev/sdX mapfile
ddrescue --fill-mode=+ --force /dev/zero /dev/sdX mapfile
Das einfachste und laut c't aus ausreichende ist dd:
dd if=/dev/zero of=/dev/sdX bs=10240 conv=noerror status=progress
Das braucht auf einer älteren Platte ca. 1 Minute pro GB.
Man kann die Platte auch statt mit Nullen mit Zufalls-Werten überschreiben:
dd if=/dev/urandom of=/dev/sdX bs=10240 conv=noerror status=progress
Das braucht allerdings schon ca. 7 Minuten pro GB. (Pentium-4)
Etwas schneller geht angeblich:
sdd -inull bs=1m of=/dev/sdc -noerror -pg
Noch sicherer ist shred (aus den Fileutils oder Coreutils):
shred -v -n0 -z /dev/sdX
oder DBAN.
Wenn es aber bereits sehr viele Schreibfehler gibt, dann bricht ein dd oder Vergleichbares leider immer ab.
Dann hilft nur: Ein Filesystem (ext3 oder besser XFS) anlegen und es Stück für Stück füllen, z.B.:
yes "string pattern" > /mnt/device-to-kill/file001
usw.

Bei einer SSD reicht ein einfacher dd nicht aus, da noch Daten im Overprovisioning Bereich sein könnten. Daher sollte man den Secure Erase der SDD nutzen. Das funktioniert nur kurz nach der Sromzufuhr, da sollte die Platte noch den Status "not frozen" haben sollte, was man so testet:
hdparm -I /dev/sdX | grep frozen
Dann setzt man ein Kennwort und löscht mit diesem gleich die SDD:
hdparm --user-master u --security-set-pass irgendwas /dev/sdX
hdparm --user-master u --security-erase irgendwas /dev/sdX
Alternativ müsste das funktionieren:
blkdiscard --secure /dev/sdX

Festplatten-Inhalt retten

Hier braucht man nicht weiterlesen, wenn man ein aktuelles Backup hat!
Aber auch nach einem Plattendefekt sind nicht unbedingt gleich alle Daten verloren.
Man kann mit einer Hand voll Tools noch einiges retten.
Zuerst erstellt man von der defekten Platte ein Image und arbeitet dann nur noch mit diesem Image um die defekte Platte nicht noch weiter zu belasten.
Am besten geeignet ist die GNU Variante von ddrescue.
Vorher noch Wiederholgungsversuche des Betriebssystems bei Zugriffsfehlern reduzieren:
echo 1 > /sys/block/sdX/device/eh_timeout
echo 1 > /sys/block/sdX/device/timeout
Dann kann die Image-Kopie losgehen:
equo install --ask sys-fs/ddrescue
ddrescue -b 4096 -v -d -O /dev/defekte_platte /mnt/disk.img /mnt/disk.map
(Die 4096 machen nur Sinn, bei Festplatten, wie 4K Sektoren haben!)
Mit dem Tool ddru_findbad kann man sich auflisten lassen, welche Dateien von den dekten Blöcken betroffen sind:
yay -S ddrutility
ddru_findbad /mnt/disk.img /mnt/disk.map
Zusätzlich kann man den Fortschritt mithilfe des Map-Files per ddrescueview sichtbar machen.
Bei ganz hartnäckigen Defekten kann noch das Programm OpenSuperClone helfen!
Im Idealfall kann man dieses Image einfach per loop mounten:
mount -o loop disk.img /mnt/disk
Wenn das nicht geht, dann kann man (hoffentlich) mit Autopsy hineinschauen, also:
equo install --ask app-forensics/autopsy
autopsy rechnername_auf_dem_man_per_Browser_zugreifen_will
Für den Restore von einzelnen Dateien ist das recht nett, aber für größere Menge, sollte man direkt das Sleuthkit nutzen.
equo install --ask app-forensics/sleuthkit
# Liste der Dateien mit Inodes erstellen:
fls -F -r -f ntfs -o 0 /tmp/disk.img > /tmp/filelist.txt
icat -f ntfs -o 0 /tmp/disk.img $inode
Statt nfts kann man auch z.B. fat angeben. Eine Liste der unterstützten Dateisysteme erhält man mit:
fls -f list
Für die Rettung von Fotos bietet sich aber das Programm PhotoRec an. Das findet man aber nur in Kombination mit dem Programm Testdisk, also:
emerge -avt app-admin/testdisk
photorec disk.img
Wenn man z.B. in Fehlermeldungen nur inodes vorliegen hat und wissen möchte, zu welchem File dieser gehört, dann hilft eines dieser Kommandos:
find /path/to/mountpoint -inum INODE
debugfs -R 'ncheck INODE' /dev/sdX9

Festplatten - Defekte Sektoren

Siehe: S.M.A.R.T.
Bei Verdacht auf einen Defekt sollte man die internen Tests laufen lassen:
# Kurz:
smartctl -t short /dev/device
# Lang:
smartctl -t long /dev/device
# Ergebis anschauen:
smartctl -l selftest /dev/device
Wenn hier ein defekter Sektor gefunden wird, dann kann man versuchen, dass er durch einen neuen ersetzt wird.
Aber Achtung: Im folgenden werden Daten überschrieben!
Herausfinden, welcher sector (LBA) defekt ist:
smartctl -l selftest /dev/device
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed: read failure       40%     60011         2722406032
Also: D=2722406032
Dann herausfinden, mit welcher Blocksize die Platte arbeitet:
# fdisk -l /dev/device | grep ^Sector
Sector size (logical/physical): 512 bytes / 4096 bytes
Also: L=512 und P=4096
Falls mit Partitionen gearbeitet wird, dann den Offset vom Beginn der Platte herausfinden:
# fdisk -l /dev/device
Device     Boot Start        End    Sectors  Size Id Type
/dev/sdd1        2048 3907029167 3907027120  1.8T fd Linux raid autodetect
Also: O=2048
Dann kann man den Block für dd so ausrechnen:
B = (D-O)*L/P
Hier also:
echo '(2722406032-2048)*512/4096' | bc -l
Also: B=340300498
Dann kann man den Block mit dd überschreiben (ACHTUNG: Datenverlust!):
dd if=/dev/zero of=/dev/sdX1 bs=4096 count=1 seek=340300498

Falls man herausfinden will, welche Datei auf dem defekten Block liegt, dann geht das so:
# debugfs
debugfs: open /dev/sdX1
debugfs: icheck 340300498
Block Inode number
340300498 41032
debugfs: ncheck 41032
Inode Pathname
41032 /path/to/some/file.ext

Bash-Tipps

Falls man in einer Not-Situation keinen "cp"- oder "cat"-Befehl hat und trotzdem in der laufenden Bash eine Datei kopieren muss, dann wie in dieser BashFAQ beschrieben:
IFS=
while read -d '' -r -n1 x ; do case "$x" in '') printf "\x00";; *) printf "%s" "$x";; esac; done < QUELLDATEI > ZIELDATEI
Damit können auch Binärdateien kopiert werden!

tiptoi

Für die tiptoi Stifte dann man neue Audio-Dateien und auch neue Firmware auch ganz einfach unter Linux installieren, indem man sie herunterlädt und auf den Stift per USB kopiert, siehe:
Ubuntu - Tiptoi
Tiptoi - Fragen zum händischen Download
Tiptoi - Aktualisierung der Firmware

Software

Perl

Perl ist normalerweise bereits intalliert.
Sehr empfehlenswert sind noch die folgenden Module:

Time-modules-100.010301.tar.gz
Data-Dumper-2.08.tar.gz (bereits bei 5.005_02 dabei!)
libnet-1.0901.tar.gz
MD5-1.7.tar.gz
MIME-Base64-2.12.tar.gz
URI-1.18.tar.gz
libwww-perl-5.62.tar.gz
Tk400.202.tar.gz
sha-1.2.tar.gz
MLDBM-2.00.tar.gz
HTML-Tagset-3.03.tar.gz
HTML-Parser-3.25.tar.gz
HTML-TableExtract-1.07.tar.gz

Diese können nach dem Auspacken ganz einfach installiert werden:
perl Makefile.PL
make
make test
make install

Mit diesem fork()-Trick kann man in einem Perl-Programm STDIN schliessen:
if (fork() != 0)
{
  # Im Vaterprozess
  exit;
}
else
{
  # Im Kindprozess
  close(STDIN);
}
Man sollte seinen Perl Code immer mal wieder mit Perl::Critic überprüfen:
perlcritic mein_programm.pl
sollte keine Meldungen bringen. Das kann man dann steigern mit den Schaltern: -4, -3, -2.

LaTeX einrichten

teTeX (veraltet)
Einfach als Root "texconfig" (/usr/lib/teTeX/bin/i386-linux/texconfig) starten und der Rest geht menügeführt.
Zum Beispiel habe ich mir den "MODE" auf "canonbjc" umgestellt. Bei "XDVI" habe ich "PAPER" auf "a4" umgeschaltet.
TeX Live(Nachfolger von teTeX)
Unter Gentoo ist das nach dieser Anleitung ganz einfach:
emerge -avt texlive

StarOffice 3.1 Beta 4

Die genaue Versionsnummer eines installierten SO kann man herausfinden, indem bei Hilfe->Produktionformationen STRG-SDT tippt.

Die Tar-Files in ein Verzeichnis entpacken, z.B. /usr/StarOffice3.1 und dann muß jeder Benutzer setup starten.
Man sollte /usr/StarOffice3.1/linux-x86/bin/svdaemon und /usr/StarOffice3.1/linux-x86/bin/svportmap nur einmal starten. Wenn man diese in /sbin/init.d/boot.local starten will, dann muß man vorher den Path für die Libraries definieren:
export LD_LIBRARY_PATH=/usr/X11R6/lib:/usr/StarOffice3.1/linux-x86/lib
und den Port-Mapper starten: /usr/sbin/portmap -v, wenn er nicht sowieso schon läuft.
Man kann auch noch weitere Fonts installieren.

StarOffice 4.0 Service-Pack 3 und Nachfolger (bis 5.1)

StarOffice-Dateien ins OpenOffice-Format konvertieren

Ab OpenOffice bzw. LibreOffice Version 4 gibt es keine Möglichkeit mehr StarOffice-Dokumente (sdw/sdc) zu laden.
Da hilft nur eine temporäre Installation einer 3er-Version und die Batch-Konvertierung:
emerge -avt app-office/unoconv
layman -a wish
emerge --unmerge app-office/libreoffice-l10n
ACCEPT_KEYWORDS=~x86 emerge -avt =app-office/libreoffice-bin-3.3.1
find . -name "*.sdc" | xargs -n 1 unoconv -f ods
find . -name "*.sdw" | xargs -n 1 unoconv -f odt
layman -d wish
emerge --unmerge app-office/libreoffice-bin app-office/unoconv
emerge -avt app-office/libreoffice-bin

PovRay3

  1. Man sollte den alten Povray deinstallieren:
    cd /usr/bin
    zip -m povray-old povray*
  2. Archiv auspacken und in dieses Verzeichnis wechseln. Dann:
    md /usr/local/lib/povray3
    cp -r include /usr/local/lib/povray3
    cp -r povscn /usr/local/lib/povray3
    cp -r *.ini /usr/local/lib/povray3
    cp povray.1 /usr/local/man/man1/
    cp s-povray x-povray /usr/local/bin/
    cd /usr/local/bin/
    ln -s x-povray povray
  3. Eine Demonstration starten:
    povray +W640 +H480 +A0.3 +Q9 +L/usr/local/lib/povray3/include +I/usr/local/lib/povray3/povscn/level3/chess.pov

finddupe

Am besten kann man doppelte Files finden mit:
finddupe -vv PFADE > FILE
Beispiel:finddupe -vv /mnt/disk1 /mnt/disk2 > doppelt.txt
Dann das Resultat-File mit einem Editor bearbeiten und mit diesem:
cat dupe.txt | perl -ne 'split; print "$_[1]\n";'
erhält man die doppelten Files (aus der zweiten Spalte).
Alternativ kann man auch fdupes verwenden.

c't-ROM einrichten (Alte c't-ROMs)

Beste Lösung: Das Windows-Programm mit WINE starten.

Echte UNIX-Lösung (mit Einschränkungen beim Suchen):
- Vorher httpd zum Laufen bringen (siehe HTTPD)
- ctsuch1_8.tar auspacken, CD im Laufwerk lassen und ./ctinstall starten
Antworten:
Pfadname des cgi-bin-Verzeichnisses des WWW-Servers: /httpd/cgi-bin
Pfadname des Verzeichnisses für die c`t-ROM-WWW-Seiten: /httpd/htdocs/ctrom
Auf alle Fragen mit "Ja" antworten.

XEmacs einrichten (Version 20.4) und Tipps

Installation: Meine Änderungen an den Einstellungen finden sich im ~/.emacs-File. Sehr hilfreich ist auch die XEmacs-FAQ. Umfangreiche Konfiguration und Dokumentation gibt es auf der XEmacs & Gnus Page.
Folgendes habe ich eingestellt bzw. aktiviert: Weitere Tipps:

WGet

Ein universelles und leistungsgähiges Programm zum rekursiven WWW-Download ist WGet (wget-1.4.4). Meine Einstellungen finden sich in /etc/wgetrc. Man wechselt dann in das Zielverzeichnis (z.B. /httpd/htdocs/mirror) und ruft wget z.B. so auf:
wget --level=2 http://www.sl.de
Dabei kann man die Rekursionstiefe (hier 2) angeben und die gewünschte Start-URL.
Erst mit einem WWW-Cache macht WGet (zumindest in dieser Version 1.4.4) erst Sinn. Denn wenn man WGet wie hier beschrieben betreibt, dann wird ja jede Kopie einer WWW-Seite lokal geändert (Pfade anpassen). Das hat zur Folge, daß beim nächsten WGet-Update-Lauf diese Seiten wieder geholt werden. Und so werden sie von lokalen WWW-Cache geholt. Ich habe folgende andere Programme bereits probiert, und sie haben sich für mich als unbrauchbar herausgestellt:
Nur pavuk ist noch wesentlich leistungsfähiger als wget. Damit sind z.B. auch Cookies möglich:
pavuk -fnrules F "*" "%n" -noRobots -progress -cookie_send -cookie_file ~/.netscape/cookies http:/www.....

Das modernste ist aber curl.

Aber es geht auch ganz ohne derartige Tools.
Es reicht zur Not auch telnet (für HTTP) oder OpenSSL (für HTTPS), z.B.:
echo -ne "GET /my-page.html HTTP/1.1\nHost: www.server.de\n\n" | openssl s_client -quiet -crlf -connect www.server.de:443 > /tmp/my-page.html


Sound-Programme


RPM

RPM neu einrichten (auf alten nicht-RPM-basierten Systemen):
rpm-xx.xx.xx.i386.tar.gz installieren und
mkdir -p /var/lib/rpm
rpm --initdb
Man kann auch mit rpm2cpio < filename.rpm | cpio -di das RPM in ein CPIO-Archiv verwandeln und auspacken.

Rosegarden

Wenn man den Ausdruck von Notenblättern durch Rosegarden (2.0.1) vergrößern will, dann geht das nur, indem man im TeX-File die Seitengröße reduziert, z.B. \hsize=3.5in und dann beim Ausdruck mit dvips vergrößert: dvips -x 2000 file.ps

Vacation / Procmail

Problem: Man ist im Urlaub und möchte aber auf alle Mails automatisch antworten, daß man die Mail erhalten hat, aber erst am Tag XX lesen kann. Die Lösung ist procmail. Dazu braucht man zwei Files:

Mail weiterleiten mit Procmail

Problem: Man hat zwei Accounts auf denen man Mail liest und kann sich aber auf dem jeweils anderen Account nicht von dem anderen Account aus einloggen.
Man kommt auf die naheliegende Idee zwei Forwards einzurichten, aber das erzeugt einen Mail-Loop.
Die Lösung ist procmail. Dazu braucht man zwei Files auf beiden Rechnern: Die Weiterleitung kann natürlich auch auf einen Drucker erfolgen:
# Diese .procmailrc druckt eingehende Mails aus
SHELL=/bin/sh
:0 c
| a2ps -nP -1 -p -ns -nL | lpr -Pepson
Eventuelle Konvertierungen und Umformatierungen sind dem Leser als Übung überlassen.

Mail in ein Programm füttern oder ein Programm starten:
:0w
*^(cc|to|Resent-From|X-Mailing-List):.*debian-user@lists.debian.org
| /usr/local/bin/mail2news local.debian.user
oder:
:0:
* (^Subject: backup)
| backup

Email: Mailen von der Kommandozeile

Mit email kann man z.B. Bilder von der Kommandozeile einfach wegschicken:
echo "Hier sind die Bilder..." | email -s "Bilder" -a 01.jpg,02.jpg,03.jpg ziel@adresse.de
Man muss nur diese ~/.email.conf anlegen:
SMTP_SERVER = '127.0.0.1'
SMTP_PORT = '25'
MY_NAME = 'Stephan Loescher'
MY_EMAIL = 'meine_absender_adresse@provider.de'
# REPLY_TO = ''

cdda2wav

Mit cdda2wav kann man CDs digital auslesen. Wenn die Fehlermeldung kommt:
no match: increase overlap (3) or decrease SYNC_SIZE (320).
no match: at position 9468565 from 9469740
dann sollte man in "interface.c" den Wert von "overlap" auf 4 erhöhen.

PGP (2.6.3i)

PGP (5.0i)

PGP (allgemein)


TCP-Wrapper

Ein TCP-Wrapper hängt zwischen dem inetd und den Dämonen, die Dienste anbieten. Es gibt dazu eine kurze Beschreibung des Verfahrens oder den Original-Artikel
Bei SuSe ist bereits der TCP-Wrapper (tcpd) vorinstalliert.
Falls nicht, dann geht es so: Ab nun werden alle Verbindungen in syslog(8) mitgeschrieben.

SSH (Secure Shell) (deutscher Mirror)

SSH ist ein Ersatz für die r* Berkeley-Dienste (rcp, rlogin, rsh) der wohl den besten Kompromiß zwischen Sicherheit und Praktikabilität liefert. Zusätzlich zur Verschlüsselung aller Daten kann man auch noch eine Kompression aktivieren. Das wohl interessanteste Feature ist das X11-Forwarding. Damit kann man X11-Programme remote über mehrere Rechner hindurch verwenden, ohne das DISPLAY umsetzen zu müssen oder den unsicheren xhost oder xauth zu verwenden.
Informationen: Benutzer-Installation (wenn bereits im System vorhanden): System-Installation von sshd: Tipps zur Benutzung:

Faxen

Zum Faxen braucht man ein PostScript-File.
Einen ASCII-Text kann man nach PS wandeln mit:
a2ps -nP -1 -p -F15 -ns -nL ascii.txt > fax.ps
bzw:
a2ps --no-header --portrait -1 --output=- ascii.txt > fax.ps
oder:
cat fax.test | pbmtext | pbm2g3 > fax.g3
PS nach FAX:
gs -q -dSAFER -dNOPAUSE -sDEVICE=faxg3 -sOutputFile=fax.%d.g3 input.ps -c quit
Es geht auch komfortabler mit ps2fax.
Abgesendet werden die G3-Files dann mit:
faxspool NUMMER FILES
wenn man das sendfax aus dem mgetty-Paket verwendet.
Die Fax-Queue kann man mit faxq anzeigen lassen.
Root sollte irgendwann die Queue mit faxrunq absenden.

Die Umkehrung von G3 in ein darstellbares Bild geht mit:
g32pbm fax.1.g3 > fax.pbm

Ein Fax als (evtl. mehrseitiges) TIFF kann man so in Postsrcipt umwandeln:
tiff2ps -a FAX.ifx > FAX.ps

DCX ist ein Fax-Format ähnlich PCX und kann z.B. von xnview angezeigt werden.

Wenn man sich Faxe als PDF per Mail zuschicken lassen will, dann sollte man sich dieses Skript bei mgetty einbauen:
Tipp: Eingehende Faxe als PDF per Mail
Einfach nur nach PDF konvertieren geht mit diesem Skript: fax2pdf.

MGetty

Installieren mit emerge -avt mgetty.
Dann trägt man in /etc/mgetty+sendfax/faxheader seinen Faxkopf ein, also Name und Telefonnummer.
In /etc/mgetty+sendfax/mgetty.config habe ich folgendes geändert:
fax-id 49 8142 1234567
speed 115200
# Speziell für Creatix LC144VF:
# init-chat "" \d\d\d\d\d\d+++\d\d\dATE1Q0V1 OK ATS0=0&D3&K3 OK
# switchbd 19200
# Speziell für US Robotics Message Modem:
init-chat "" ATZ OK ATE1Q0V1 OK ATS0=0&D3 OK
fax-owner root
fax-group uucp
fax-mode 0644
notify root
und in /etc/mgetty+sendfax/sendfax.config habe ich folgendes geändert:
fax-devices ttyS0
fax-id 49 8142 1234567
dial-prefix ATDT
# Speziell für Creatix LC144VF:
# modem-handshake AT&K3
Um einzelnen Benutzern das Faxen zu erlauben, trägt man diese entweder in /etc/mgetty+sendfax/fax.allow ein oder löscht diese Datei und legt eine leere Datei /etc/mgetty+sendfax/fax.deny an. Dann können alle Faxen.
Für Mails bei erfolgreichem oder fehlgeschlagenem Fax sollte man noch das in faxrunq.config eintragen:
success-send-mail y
failure-send-mail y
In /etc/mgetty+sendfax/login.config habe ich folgendes geändert, um PPP ohne vorheriges Login zu ermöglichen:
/AutoPPP/ - a_ppp /usr/sbin/pppd auth -chap +pap debug remotename auto-ppp-dialin
Zu letzterem braucht man noch diesen Eintrag in /etc/ppp/pap-secrets:
auto-ppp-dialin * geheim *
und der anrufende Client braucht eine eigene IP-Adresse. Man kann auch so ein feste IP-Adresse vergeben:
/AutoPPP/ - a_ppp /usr/sbin/pppd auth :10.3.3.99 -chap +pap debug remotename auto-ppp-dialin
Der Client muß dann beim pppd die Option "user auto-ppp-dialin" verwenden und diesen Eintrag in seiner /etc/ppp/pap-secrets haben:
auto-ppp-dialin * geheim
Zu guter letzt muß noch ein Eintrag in die /etc/inittab, um den mgetty zu starten:
# Für Modem (geht beim zweiten Klingeln an die Leitung)
mo:12345:respawn:/usr/sbin/mgetty -n 2 -s 115200 ttyS0
Und dann noch:
init q

VGetty als Anrufbeantworter

Vgetty ist im mgetty -Paket dabei. Zum Kompilieren wechselt man ins Unterverzeichnis voice und:
make
make install
cp voice.conf-dist /etc/mgetty+sendfax/voice.conf
Wichtig: VGetty liest auch die Datei /etc/mgetty+sendfax/mgetty.config ein und benutzt davon zum Beispiel die Option init-chat. In /etc/mgetty+sendfax/voice.conf habe ich dann folgendes geändert:
port_speed 115200
rings 2
dtmf_program /bin/dtmf.sh
voice_devices modem
VGetty wird einfach anstelle von megtty in initab eingetragen:
mo:123:respawn:/sbin/vgetty modem
Dann kann man eine Ansage einrichten:
voctopvf file.voc | pvftormd Rockwell 4 > /var/spool/voice/message/standard.rmd
oder
voctopvf file.voc | pvftormd US_Robotics 1 > /var/spool/voice/message/standard.rmd
Wiedergeben kann man eingegangene Anrufe in /var/spool/voice/incoming über das Modem:
vm play -s filename.rmd
oder über die Soundkarte:
rmdtopvf filename.rmd | pvfspeed -s 8000 | pvftobasic > /dev/audio
bzw. über ALSA:
rmdtopvf filename.rmd | pvfspeed -s 8000 | pvftowav | aplay -
VGetty kann auch DTMF erkennen und danach Aktionen auslösen.

CVS

Kurzanleitung (sehr kurz) zu CVS. Ausführliche Beschreibung: XEmacs C-h i g cvs.
Das CVS-Repository erstellt man mit:
cvs -d /usr/src/cvsroot init
Dann setzt man die Environmentvariable:
export CVSROOT=/usr/src/cvsroot
Dann ein Projekt-Verzeichnis anlegen mit Files und evtl. Unterverzeichnissen darin:
md projekt
cvs import -m "Anfang des Projekts" projekt loescher start
Dann kann man z.B. in ein anderes Verzeichnis wechseln (/tmp) und
cvs checkout projekt
cd projekt
Dann kann man drin Files verändern und wieder einchecken:
cvs commit file.pl
Die lokale Working-Copy kann man so updaten:
cvs update
bzw. falls man ein Update auf eine bestimmte Version gemacht hat mit
cvs update -D 2010-10-11
dann ist die Working-Copy "sticky" und man muss so updaten:
cvs update -A

Subversion

Server einrichten
emerge -avt subversion
mkdir -p /mnt/data/svn/sl
svnadmin create /mnt/data/svn/sl
chown -R apache:root /mnt/data/svn/sl
Am einfachsten ist es den svnserve-Dämon laufen zu lassen.
Erst einmal eine Gruppe und einen Benutzer dafür anlegen:
groupadd -g 777 svn
useradd svn -m -u 777 -g svn -c 'account for svnserve'
Dann erstellt man eine /etc/conf.d/svnserve:
SVNSERVE_OPTS="--root=/mnt/data/svn"
SVNSERVE_USER="svn"
SVNSERVE_GROUP="svn"
Dann trägt man in /mnt/data/svn/sl/conf/svnserve.conf das ein:
[general]
password-db = passwd
realm = SL-Repository
Dann müssen noch die User und Kennwörter in /mnt/data/svn/sl/conf/passwd eingetragen werden:
[users]
harry = geheim
Dann den Dämon starten:
/etc/init.d/svnserve start
rc-update add svnserve default
Dann kann man schon arbeiten:
mkdir test
cd test
svn co svn://server/sl .
mkdir trunk branches tags
svn add trunk branches tags
svn ci -m 'erster Check-In'
Client einrichten (Gentoo)
echo "dev-util/subversion -berkdb -dso -webdav-neon" >> /etc/portage/package.use
emerge -avt subversion
Tipps zum Umgang
Im aktuellen Verzeichnis kann man Dateien von svn auch ignorieren lassen:
svn propedit svn:ignore .
Wenn man ein Subversion von einem Server auf einen anderen umzieht, dann kann man das den ausgecheckten Working Repositories so mitteilen:
svn relocate ALTER_URI NEUER_URI
Praktischer Fall: Wenn man von unterwegs per SSH-Port-Forward seinen SVN Server auf localhost weiterleitet, dann z.B.:
svn relocate svn://server/bla/trunk/data svn://localhost/bla/trunk/data

GIT

Repository herunterladen/"klonen":
git clone git://projects.vdr-developer.org/vdr-plugin-extrecmenu.git
Wenn man einen bestimmten Stand in seinem Repository "festzurren" will, dann sucht man im git-Log nach dem gewünschten commit-Hash und setzt das Repository dann per checkout auf diesen Stand:
git log --since=2010-06-05 --until=2010-06-06 | less
# bzw.
git log | less
git checkout 66c39bab76c1b4a30a80e991d07d823e2905369b
Zurück zum aktuellsten Stand ("HEAD") kommt man mit pull:
git pull git://projects.vdr-developer.org/vdr-plugin-extrecmenu.git
Weitere Details zu git sind in c't 5/2014 S. 176 beschrieben.

LaTeX2HTML (Version 96.1 (Feb 5, 1996)

LaTeX2HTML konvertiert LaTeX-Dokumente nach HTML. Ich verwende diese alte Version, weil die aktuelle bei mir nicht funktioniert. Eine sehr gute Alternative ist tth.
Installation:
Aufruf:
latex2html -address '<A href="http://www.loescher-online.de/">Stephan L&ouml;scher</A>, 16 Jun 1998' file.tex
cd file
perl -pi -e 's(http://cbl.leeds.ac.uk/nikos/figs/)()g;' *.html
Und folgende Icons muß man noch kopieren:
contents_motif.gif next_motif.gif up_motif.gif next_motif_gr.gif up_motif_gr.gif previous_motif.gif previous_motif_gr.gif
So habe ich meine Jokes-LaTeX-Dateien umgewandelt:
md /tmp/jokes
cd /tmp/jokes
cp /home/loescher/TeX/jokes/* .
for i in *.tex ; do latex2html -no_navigation -address \
'<a href="http://www.loescher-online.de/">Stephan Löscher</A>,\
20 Nov 1998' -info '' $i; done
/bin/rm `find | grep -v 'html\|gif'` `find -size 0`
Wenn man die Stylesheets nicht benötigt, dann sollte man aus den HTML-Files die Zeilen mit den Links auf die CSS-Files löschen.

Ghostscript (Version 5.03)

Ghostscript Installation:
cd /usr/src/gs5.03
ln -s unixansi.mak makefile
unzip jpeg-6a.zip
unzip lpng096.zip
tar -zxvf zlib-1.0.4.tar.gz
mv JPEG-6A jpeg-6a
mv libpng-0.96 libpng
mv zlib-1.0.4 zlib
cd jpeg-6a ; lowercase * ; cd ..
cd libpng ; lowercase * ; cd ..
make
Für den Canon BJC-610 und 620 sollte man unbedingt den bjc620-Patch vor dem "make" einspielen. (Vielen Dank für den Patch an Gernot Zander, hifi@scorpio.in-berlin.de)

X-Mame

Der MultiArcade Machine Emulator (MAME) sucht seine CHEAT.DAT in dem Verzeichnis, das in ~/xmame/xmamerc als mamedir angegeben ist.

Firefox


Manche interessante Seiten wie z.B. der Sprechender Sprachatlas von Bayern benötigen Flash.
Abhilfe: Ruffle.

WindowMaker

Wenn man die Fensterumschaltung mit Alt-Tab wie unter MS-Windows will, dann muß man vor nach dem ./configure und vor dem Kompilieren in src/wconfig.h.in das einstellen:
#define WEENDOZE_CYCLE
Und in ~/GNUstep/Defaults/WindowMaker diese Zeile hinzufügen:
WindozeCycling = YES

GCC (ehem. EGCS)

md /usr/src/gcc-obj
cd /usr/src/gcc-obj
/usr/src/gcc-2.95.1/configure --prefix=/opt/gcc
make bootstrap-lean
make install
Dann muß man noch diesen Link legen:
/lib/cpp -> /opt/gcc/lib/gcc-lib/i586-pc-linux-gnu/2.95.1/cpp

Empfehlenswerte Optionen auf einem Pentium sind:
-O3 -fstrict-aliasing -ffast-math -funroll-loops -march=pentium -fschedule-insns2

SANE

Man braucht auf jeden Fall SANE. Sehr zu empfehlen ist auch XSANE.
Der "Server" (mit dem Scanner) wird so installiert:
USE="media-gfx/sane-backends -ipv6 xinetd"
emerge -avt media-gfx/sane-backends
cp /etc/sane.d/dll.conf /etc/sane.d/dll.conf.ORIG
# Für Netzwerk und HP Scanner reicht das:
echo -e "net\nhp" > /etc/sane.d/dll.conf
Test:
scanimage -L
Wenn man einen Scanner übers Netz freigeben will, dann muß man serverseitig das einstellen:
In /etc/sane.d/saned.conf den Namen des/der Clients eintragen.
Dann in /etc/xinetd.d ein File namens saned anlegen:
service sane-port
{
  socket_type = stream
  server = /usr/sbin/saned
  protocol = tcp
  user = root
  group = scanner
  wait = no
  disable = no
  only_from = x200 x200.sl.de
}
Wenn /dev/scanner der Gruppe scanner gehört, dann muß der User nicht root sein, sondern "saned".
Dann xinetd durchstarten.
Und auf Client-Seite:
In /etc/sane.d/net.conf muß man den Rechnernamen des Servers eintragen.
Der "Client" (mit Netzwerk-Zugriff auf den Scan-Server) wird so installiert:
emerge -avt media-gfx/xsane
cp /etc/sane.d/dll.conf /etc/sane.d/dll.conf.ORIG
# Für Netzwerk reicht das:
echo "net" > /etc/sane.d/dll.conf
Test:
scanimage -L

MySQL

shell> mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('xxx') WHERE user='root';
mysql> FLUSH PRIVILEGES;

mysql -u root -p
> CREATE DATABASE IF NOT EXISTS tele;
> use tele
> CREATE TABLE tele(name VARCHAR(130), vorwahl VARCHAR(6), nummer VARCHAR(9));
> SHOW DATABASES;
> SHOW TABLES FROM tele;
> SHOW COLUMNS FROM tele;

shell> mysqlimport --local tele tele.txt -p
shell> mysql -e 'SELECT * FROM tele' tele -p

select * from tele where name like "%löscher%";

VMWare

Wenn irgendetwas nicht funktioniert, dann mit -vv aufrufen.

xmove

Mit xmove kann man X-Clients von einem X-Server auf einen anderen verschieben. Einfaches Beispiel:
A: xmove
A: xhost +
A: DISPLAY=localhost:1 xterm &
A: DISPLAY=localhost:1 xmovectrl -list
B: xmove
B: xhost +
A: DISPLAY=localhost:1 xmovectrl -move B 1
und wieder zurück:
A: DISPLAY=localhost:1 xmovectrl -move A 1
Oder Xnest als Client von xmove starten:
DISPLAY=localhost:1 Xnest :2
DISPLAY=localhost:2 xterm &
DISPLAY=localhost:2 twm &
Wenn man die Sitzung nicht braucht, dann kann man sie auf den "Null-X-Server" Xvfb legen.
Es gibt auch ein kommerzielles Produkt von X-Software.

VDR (Video Disk Recorder)

Dieser höchst interessanten Software widme ich gerne eine eigene Seite.

Bildbearbeitung

Siehe Foto-Tipps und Bildoptimierung.

Video aufzeichnen

Zuerst muß man die TV-Karte so konfigurieren, daß diese erst einmal funktioniert und man Bild und Ton hat. Ausprobieren kann man das recht gut mit xawtv.
Bei meiner Hauppauge WinTV brauche ich nur das Modul bttv laden und den Audio-Line-Out der TV-Karte mit dem Audio-Line-In der Soundkarte per Kabel verbinden.
Vom S-VHS-Eingang (und dem Audio-Line-In) kann man z.B. so aufzeichnen:
mencoder -tv driver=v4l2:device=/dev/v4l/video2:norm=PAL:width=352:height=288:volume=100:input=2 -oac mp3lame -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=800 -vop pp=ci -endpos 00:01:00 -o video-mencoder.avi tv://
Oder das gleiche in höherer Auflösung:
mencoder -tv driver=v4l2:device=/dev/v4l/video2:norm=PAL:width=720:height=576:volume=100:input=2 -oac mp3lame -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=800 -vop pp=ci -endpos 00:01:00 -o video-mencoder.avi tv://
Oder vom TV-Eingang vom Kanal 36 aufnehmen:
mencoder -tv driver=v4l2:device=/dev/v4l/video2:norm=PAL:width=352:height=288:volume=45:input=0 -oac mp3lame -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=800 -vop pp=ci -endpos 00:01:00 -o video-mencoder.avi tv://36
Oder in besserer Qualität:
mencoder -tv driver=v4l2:device=/dev/v4l/video2:norm=PAL:width=720:height=576:volume=45:input=0 -oac mp3lame -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1500 -vop pp=ci -endpos 00:01:00 -o video-mencoder.avi tv://
Scheiden kann man die Aufzeichnungen mit avidemux.

Streaming

Um auf einfache Art eine MP3-Sammlung als HTTP-Stream auszugeben, um dies z.B. im Heimnetz nutzen zu können eignet sich am besten Icecast und ezstream wie unter Run your own online radio station with icecast2 and ezstream (howto) beschrieben. Hier die Kurzfassung:
emerge -avt icecast
vi /etc/icecast2/icecast.xml
# Kennworte unter "password" ändern!
rc-update add icecast default
/etc/init.d/icecast start
Nun kann man seinen Icecast-Server schon unter http://server:8000/ erreichen.
Dann:
echo "media-sound/ezstream ~x86" >> /etc/portage/package.keywords
echo "media-libs/libshout ~x86" >> /etc/portage/package.keywords
emerge -avt ezstream
vi /audio/ezstream_neu.xml
und z.B. das eintragen:
<ezstream>
    <url>http://localhost:8000/neu</url>
    <sourcepassword>sagichnicht</sourcepassword>
    <format>MP3</format>
    <filename>/audio/neu.m3u</filename>
    <stream_once>0</stream_once>
    <svrinfoname>Neu</svrinfoname>
    <svrinfopublic>0</svrinfopublic>
</ezstream>
und noch für den Start beim Reboot sorgen:
vi /etc/local.d/local.start
# das eintragen:
/usr/bin/ezstream -n -c /audio/ezstream_neu.xml >/dev/null 2>&1 &
Und
chmod 755 /etc/local.d/local.start
Jetzt kann man mit fast jedem MP3-Stream-Player den URL http://server:8000/neu ansteuern und hört seine MP3-Sammlung.

Eine gute Alternative dazu wäre auch noch mpd. Siehe dazu auch c't 14/2014 S. 154.

ICAClient

Durch Drücken von CTRL-F2 im ICAClient kann man den nachfolgenden Tastendruck an das Linux weitergeben.
Wenn man also z.B. im KWin für "Globale Kurzbefehle" die Aktion "Fenster Minimieren" auf CTRL-F2 legt, dann kommt man aus der Full-Screen-ICAClient-Session mit CTRL-F2 CTRL-F2 zu seinen anderen Fenstern.
Wenn die mittlere Maustaste auch in ICA-Anwendungen funktionieren soll, dann muss man in ~/.ICAClient/wfclient.ini im Abschnitt "[WFClient]" die Option
MouseSendsControlV=False
setzen.
Für eine fehlerfreie deutsche Tastatur sollte man außerdem
KeyboardLayout=GERMAN
setzen.
Um das Mikrofon zu verwenden, muß man das eintragen:
AllowAudioInput=True
Damit wird aber nur das "Standard" ALSA Mikrofon und Ausgabe verwendet.
Wenn man mehr Geräte hat (z.B. Eine USB-Freisprecheinrichtung), dann sollte man in /opt/Citrix/ICAClient/config/module.ini im Abschnitt [ClientAudio] die Option
AudioRedirectionV4=True
setzen. (Siehe dazu auch: Citrix Workspace-App für Linux - Konfigurieren)
Im ICAClient 13 muß man diese Optionen möglicherweise in /opt/Citrix/ICAClient/config/wfclient.ini eingetragen werden!
Unter Gentoo muss man nach Installation der Version 13.3.0.344519 noch das ausführen:
ln -s /opt/Citrix/ICAClient/nls/en/UTF-8/eula.txt /opt/Citrix/ICAClient/nls/en/eula.txt
Und als Benutzer:
touch ~/.ICAClient/.eula_accepted
Bei den neueren Firefox Versionen (>52) funktioniert das Citrix Plugin nicht mehr.
Man muss aber nur einstellen, dass die ICA Files mit /opt/Citrix/ICAClient/wfica geöffnet werden sollen.

OpenSSL

Wenn man z.B. nur für interne Zwecke im eigenen Netz Zertifikate verwenden will/muss, dann kann man diese auch selbst erstellen.
Ein guter Artikel dazu ist: Be your own Certificate Authority
Kurzfassung:
Die CA erstellen:
mkdir ca
cd ca
touch index.txt
echo 1000 > serial
cp /etc/pki/tls/openssl.cnf .
# das ändern:
dir = .
new_certs_dir = $dir/
certificate = $dir/meine-ca.crt
private_key = $dir/meine-ca.key
#
openssl genrsa -aes256 -out meine-ca.key 8192
openssl req -new -x509 -extensions v3_ca -key meine-ca.key -out meine-ca.crt -days 10950
Das erste Zertifikat erstellen:
openssl req -new -nodes -keyout client-privkey.pem > client.csr
openssl rsa -in client-privkey.pem -out client-key.pem
openssl ca -config openssl.cnf -out client.pem -infiles client.csr

Empfehlenswerte Programme nach Kategorien


Libraries

GGI-Lib installieren

cd ggi-devel-990111/degas/lib/libgii
./configure
make
make install
cd ggi-devel-990111/degas/lib/libggi
./configure
make
make install
ldconfig

MESA-Lib installieren

make linux-386-elf
cp -r include/* /usr/local/include
chmod 444 /usr/local/include/GL/*
cp -d lib/* /usr/local/lib
ldconfig

Emulatoren

Es gibt für Linux viele Emulatoren für alle mögliche Systeme. Es lohnt sich also ein Blick in einen SunSite-Mirror unter "sunsite.unc.edu/system/Emulators".

DOSEMU

Dosemu bildet alle PC-Ressourcen auf Linux ab und ist damit nur auf Intel-Maschinen benutzbar aber dafür auch sehr schnell.
Zur Installation im Source-Verzeichnis:
./configure ; make ; make install
Unter DOS: sys a: und auch fdisk.exe und sys.com auf eine Disk kopieren. Dann "dos -A" und mit fdisk in c: den Bootsektor schreiben und "sys c:".
Um vom Dosemu aus den XEmacs als Editor benutzen zu können verwende ich emuedit.

Wine

Wine setzt alle Windows-Systemaufrufe in X11-Aufrufe um und erreicht damit eine erstaunliche Geschwindigkeit.

Installation von Hand:
cp server/wineserver /usr/local/bin/wineserver
cp windows/x11drv/wineclipsrv /usr/local/bin/wineclipsrv
cp wine /usr/local/bin/wine
cp loader/dos/dosmod /usr/local/bin/dosmod
cd documentation
cp wine.man /usr/local/man/man1/wine.1
cp wine.conf.man /usr/local/man/man5/wine.conf.5

Für einen Fehlerreport startet man ein Programm so:
wine -debugmsg +relay xyz.exe >& /tmp/wine.debug
und postet die letzten Zeilen mit "Call" und "Return" nach comp.emulators.ms-windows.wine.

Bochs

Bochs setzt keine Systemaufrufe um wie Dosemu oder Wine, sondern emuliert einen x86-Prozessor samt Bios und anderer Hardware. Das hat den Vorteil, daß eigentlich jede Software damit funktioniert und auch Bochs nicht auf Intel-Hardware angewiesen ist, aber dafür ist Bochs auch deutlich langsamer als Dosemu oder Wine.
Konfiguration von Bochs:

KVM / Virtualisierung

modprobe kvm-intel
grep vmx /proc/cpuinfo
echo "app-emulation/qemu sdl spice" >> /etc/portage/package.use
emerge -avt qemu
ggf.
emerge -avt libvirt virt-manager
gpasswd -a mein_user kvm

Image anlegen:
qemu-img create vm1.raw 10G
Oder (besser?) als QCOW2:
qemu-img create -f qcow2 vm1.raw 10G

Betriebssystem durch einmaligen Boot von image.iso installieren:
qemu-system-x86_64 -enable-kvm -drive if=virtio,driver=raw,node-name=hda,file=vm1.raw -cdrom image.iso -boot once=d -m 4G -smp 2

So startet man dann später die VM:
qemu-system-x86_64 -enable-kvm -drive if=virtio,driver=raw,node-name=hda,file=vm1.raw -m 4G -smp 2

Wenn man sich gerne vom KVM-Host per SSH am KVM-Gast anmelden möchte, dann braucht man zusätzlich noch diese Parameter:
-net nic -net user,hostfwd=tcp::2222-:22
Dann ist der Gast vom Host per SSH auf Port 2222 erreichbar.

Um gezielt ein USB-Gerät an den Gast weiterzugeben (hier: DVB-S-Stick) nutzt man diese Optionen:
-device usb-ehci -device usb-host,vendorid=0x2013,productid=0x0258
# oder:
-device qemu-xhci -device usb-host,vendorid=0x2013,productid=0x0258
Mit "-usb" geht es nicht!
Ggf. muss man im Host noch das Gerät für den Benutzer schreibbar machen, als Quick-Hack einfach z.B. chmod auf /dev/bus/usb/002/004.
Die vendorid/productid kann man im Host mit lsusb auslesen.

Im Gast kann man den paravirtualisierten X11-Treiber QXL verwenden:
emerge -avt x11-drivers/xf86-video-qxl
qemu muss man dann nur die Option "-vga qxl" mitgeben. Das geht aber nur mit SPICE und dieses ist nicht auf 32-bit-Systemen supportet!

Falls man auf einem 32-bit-System eine 64-bit-VM laufen lassen will, dann leider ohne KVM Hardware-Unterstützung:
qemu-system-x86_64 -hda vm1.raw -cdrom image.iso -boot d -m 4G

Mit Kimchi kann man mehrere virtuelle Maschinen verwalten.
Windows7 kann man so installieren:

qemu-system-x86_64 -enable-kvm -hda windows.raw -m 2G -smp 1 -usb -device usb-kbd -device usb-mouse -device usb-audio -boot once=d -netdev user,id=mynet0 -device e1000-82545em,netdev=mynet0 -cdrom /mnt/data/isos/win7pro.iso
VirtIO für Windows:
virtio-win.iso
# Installieren des VirtIO SCSI Treibers über CDROM-E:
qemu-system-x86_64 -enable-kvm -hda windows.raw -m 2G -smp 1 -usb -device usb-kbd -device usb-mouse -device usb-audio -netdev user,id=mynet0 -device e1000-82545em,netdev=mynet0 -drive file=windows7.qcow2,index=0,media=disk,if=virtio -drive file=/mnt/data/isos/win7pro.iso,index=2,media=cdrom -drive file=/mnt/data/isos/virtio-win.iso,index=3,media=cdrom
Für Sound-Wiedergabe diese Option verwenden: -audio pa,model=hda

System-Konfiguration

Kernel-Einstellungen

Das sollte man unbedingt einschalten:
General setup:
- Networking support
- System V IPC
Networking options:
- TCP/IP networking
- IP: Drop source routed frames
- IP: Allow large windows (not recommended if <16Mb of memory)
(sonst alles aus!)
Network device support:
- Network device support
- Dummy net driver support (M)
- PPP (point-to-point) support (M)
(sonst alles aus!)
Character Devices:
- Advanced Power Management BIOS Support und "Power off on shutdown" wenn man will, daß sich der Rechner beim HALT ausschaltet.
Sound:
[*] Generic OPL2/OPL3 FM synthesizer support
[*] Support for MAD16 and/or Mozart based cards
[*] /dev/dsp and /dev/audio support
[*] MIDI interface support (Aber nur wenn man MIDI auch einsetzt!)
[*] FM synthesizer (YM3812/OPL-3) support
(530) MAD16 audio I/O base 530, 604, E80 or F40
(7) MAD16 audio IRQ 7, 9, 10 or 11
(3) MAD16 audio DMA 0, 1 or 3
(0) MAD16 second (duplex) DMA 0, 1 or 3
(0) MAD16 MIDI I/O base 300, 310, 320 or 330 (0 disables)
(9) MAD16 MIDI IRQ 5, 7, 9 or 10
(65536) Audio DMA buffer size 4096, 16384, 32768 or 65536
(sonst alles aus)

Ab Kernel 2.6.10 kann man den I/O-Scheduler online nach Block-Geräten getrennt verändern. Der aktuelle Scheduler ist der, der in /sys/block/hda/queue/scheduler in eckigen Klammern steht. Ändern kann man das ganz einfach im laufenden System:
echo cfq > /sys/block/hda/queue/scheduler

Ubuntu-Kernel-Sourcen kann man sich so herunterladen:
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-lucid.git lucid

Bootvorgang / Programme starten

Wenn man eigene Programme und Dienste beim Systemstart automatisch starten will, dann sollte man erst wissen, wie das System bootet: Es werden vom init-Prozeß den Runlevels entsprechend die Files /sbin/init.d/boot, /sbin/init.d/boot.local und dann alle Files die mit "S" beginnen in /sbin/init.d/rc2.d gestartet.
Hier erkennt man auch, daß es falsch wäre in /sbin/init.d/boot.local z.B. den squid zu starten, denn es fehlen ja noch wichtige Systemdienste, wie z.B. syslog.
Deshalb ist es ratsam in /sbin/init.d/rc2.d dafür folgende Links anzulegen:
ln -s ../local.setup S90local
ln -s ../local.setup K90local
und das File /sbin/init.d/local.setup, in dem dann alle gewünschten Programme am Ende des Bootvorgangs gestartet werden.
Darin wird ein Programm für das USR Message Modem aufgerufen:
/usr/local/bin/usr-mm-check
Und dann habe ich noch für das USR Message Modem ein Skript in /sbin/init.d, um in den autarken Modus zu schalten:
/usr/local/bin/usr-smp

Netzwerk-Konfiguration, die auch für Rechner notwendig ist, die keine Netzverbindung haben

Für Bastler: Steckerbelegung Ethernet RJ-45

Empfehlenswert ist das Buch "TCP/IP Network Administration" aus dem O'Reilly-Verlag
Auch Rechner ohne Netzverbindung oder mit einer zeitweisen Netzverbindung, wie etwa durch PPP brauchen eine korrekte Netzkonfiguration.
In c't 19/2003 beginnt eine fortlaufende Serie zum Thema "Heimserver im Eigenbau", in der auch die grundlegenden Netzdienste beschrieben sind.

Nameserver mit Bind Version 8 (veraltet)

Man braucht folgende Files:
/etc/named.boot
/var/named/named.local
/var/named/named.hosts
/var/named/named.reverse
Das habe ich nicht verändert:
/var/named/root.cache
und startet dann /usr/sbin/named.
Sollte der named nicht starten oder nur Fehlermeldungen bringen, dann ist wahrscheinlich das dummy0-Device nicht konfiguriert. (Siehe oben.)
Interessante Möglichkeit:
Man kann sich den aktuellen Cache mit dem Kommando ndc dumpdb in das File /var/tmp/named_dump.db schreiben lassen. Wenn man aus dieser Datei die SOA-Records entfernt, dann kann man beim nächsten Start diese Daten dem named als root.cache verfüttern.

Nameserver mit Bind Version 9

In /etc/bind/named.conf habe ich folgendes geändert bzw. ergänzt:
forwarders { 212.82.225.7; 212.82.225.12; };
forward only;
listen-on { 127.0.0.1; 10.3.3.200; };
Meine eigenen IP-Adressen löse ich aber per /etc/hosts auf, da das bei wenigen Rechner nicht allzu aufwändig ist.
Als Alternative zu Bind sollte man sich für das kleine Netzwerk zuhause auch Dnsmasq anschauen.

Drucker-Konfiguration (ohne apsfilter oder magicfilter oder CUPS)

(Zur Konfiguration eines Druckers mit CUPS siehe folgenden Abschnitt...)

mkdir /var/spool/lpd /var/spool/lpd/myprinter
chown lp.lp /var/spool/lpd /var/spool/lpd/myprinter
chmod ug=rwx,o=rx /var/spool/lpd /var/spool/lpd/myprinter
cd /var/spool/lpd/myprinter
touch .seq errs status lock
chown lp.lp .seq errs status lock
chmod ug=rw,o=r .seq errs status lock


Files:
Die Datei /etc/printcap (sollte "-rw-r-r-" sein.) ist selbsterklärend. (Es gibt allerdings Zeitgenossen, die alles in eine Zeile ohne Kommentare schreiben... tja...) Damit wird die Verbindung von Druckername und Filter hergestellt.
Ein Filter nimmt den Standard-Input, führt eine Aktion aus und gibt das Resultat auf Standard-Ausgabe aus. Ein Filter, der Postscript entgegen nimmt und für einen BJC-600 aufbereitet sieht so aus:
#!/bin/sh
/usr/bin/gs -q -dSAFER -dNOPAUSE -r360x360 -sDEVICE=bjc600 -sPAPERSIZE=a4 -sOutputFile=- -
Zu beachten ist noch, daß der Filter die richtigen Ausführungsrechte hat.
Bei mir: "-rwxr-xr-x root.root".
Erster Versuch:
lpd
ls -l | lpr -Pmyprinter
Wenn das klappt, dann sollte man den "lpd" beim Systemstart starten lassen.

Drucker-Konfiguration mit CUPS

Siehe auch: Gentoo Printing Guide.
Den passenden Treiber für einen Drucker findet man bei http://www.linuxprinting.org/.
Für einen HP Deskjet 840C braucht man das (In den USE-Flags sollte "cups" und "ppds" enthalten sein):
emerge -avt hpijs ghostscript cups
Für einen Canon BJC-620 oder einen Brother HL-1030 braucht man noch das:
emerge -avt foomatic
Für einen HP OfficeJet G85 braucht man noch neben USB-Printer-Support im Kernel (als Modul) das:
echo "net-print/hplip -X -qt3 cups foomaticdb parport ppds" >> /etc/portage/package.use
emerge -avt hplip
rc-update add hplip default
/etc/init.d/hplip start
/etc/init.d/cupsd restart
hp-setup
CUPS starten:
/etc/init.d/cupsd start
rc-update add cupsd default
Dann entweder mit dem lokalen Browser die Seite http://localhost:631/ ansteuern, oder wenn es auch von einem anderen Rechner aus funktionieren soll, dann in /etc/cups/cupsd.conf im Abschnitt <Location /> und <Location /admin> die Zeile
Allow From meine.ip.adresse
eintragen.
Und dann einfach unter "Adminstration" den Drucker einrichten.
Anmelden kann man sich z.B. als root.
Remote-CUPS-Print-Queues können unter dem URL ipp://SERVER/printers/DRUCKER eingerichtet werden.
Wenn man von CUPS auf eine lpd-Style-Spooler drucken will, dann muß man auf dem LPD-Server die Clients in /etc/hosts.lpd eintragen. Im CUPS muß man den Server unter lpd://servername/raw ansprechen, also im LPD eine Queue definiert haben, die rohe Druckdaten unverändert durchlässt, z.B. das in /etc/printcap:
raw:\
  :lp=/dev/lp0: \
  :sd=/var/spool/lpd/printer-spool: \
  :lf=/usr/spool/lpd/bjc620/errs: \
  :mx#0: \
  :sh: \
  :sf:
Und nicht vergessen, den Zugriff auf den lpd in der Datei /etc/hosts.lpd freizugeben, also in dieser Datei den Rechnernamen des Clients einzutragen!
Ein Fax-Gerät (Modem) kann man so als "Drucker" in CUPS einrichten:
emerge -avt fax4cups
Übers CUPS-GUI im Browser einen "Drucker" unter der URI mgetty-fax:/dev/ttyS0 eintragen.
Beim Drucken kann dann über den lpr-Schalter "-J" die Telefonnummer mitgegeben werden.
Mögliche Fehler, z.B. nach Update:
Wenn der Drucker gar nichts mehr druckt und in /var/log/cups/error_log solche Fehler kommen:
foomatic-gswrapper: gs '-sstdout=%stderr' '-dBATCH' '-dPARANOIDSAFER' '-dQUIET' '-dNOPAUSE' '-sDEVICE=bjc600' '-dBitsPerPixel=16' '-dProcessColorModel=/DeviceRGB' '-sOutputFile=%std out' '-_'
Unrecoverable error: rangecheck in .putdeviceprops
Process 1616 ending: "foomatic-gswrapper -q -dBATCH -dPARANOIDSAFER -d QUIET -dNOPAUSE -sDEVICE=bjc600 -dBitsPerPixel=16 -d..."
renderer return value: 255
renderer received signal: 255
Process dying with "The renderer command line returned an unrecognized error code 255.", exit stat: 1
error: Illegal seek (29)
Cleaning up ...
Killing process 1615 (KID4) with signal 15
Process dying with "Caught termination signal: Job canceled", exit stat: 0
error:  (0)
Cleaning up ...
KID3 exited with status 1
Renderer exit stat: 1
dann muss man im CUPS das "Color-Model" auf "Four-color CMYK" umstellen!

Für einen Canon PIXMA iP7250 braucht man unter Sabayon das, um per WLAN drucken zu können (Kein USB!):
equo install --ask net-print/cnijfilter
equo install --ask net-print/gutenprint
equo install --ask sys-devel/binutils
binutils-config -l
binutils-config 2
gcc-config -l
# den x86_64-pc-linux-gnu-5.4.0 wählen:
gcc-config 6
emerge --sync
emerge -avt net-print/cups-bjnp
systemctl restart cups
"Canon network printer" hinzufügen mit
bjnp://IP_ADRESSE_DEINES_DRUCKERS
Marke: Canon
Modell: PIXMA iP7250 - CUPS+Gutenprint v5.2.12

INETD-Konfiguration

In /etc/services stehen die Dienste, die der Rechner zur Verfügung stellt inklusive der Portnummern. In /etc/inetd.conf steht dann welches Programm der inetd starten soll, wenn jemand an einem bestimmten Port ankommt. Änderungen werden durch Neustart des inetd wirksam: kill -HUP pid

Beispiel:
/etc/services:
fortune 7777
/etc/inetd.conf:
fortune stream tcp nowait nobody /usr/bin/fortune
Und dann:
telnet localhost 7777
(Sollte prinzipiell funktionieren.)

Tastatur (Delete und Backspace)

Mit dem nachfolgenden funktionieren Backspace und Delete wie erwartet in allen (!) Applikationen, sowohl auf der Console, als auch im XTerm und auch mit Motif-Applikationen. Wenn jemand ein Gegenbeispiel findet, dann möge er sich bei mir melden!

Zum Testen der Einstellungen eignen sich:
- xmodmap -pke
- xev
- showkey
- xkeycaps (Damit kann man auch ändern!)

Einstellungen in folgenden Files:

/usr/local/bin/localkeydefinitions (In /sbin/init.d/local.setup starten)
~/.inputrc (Das ist ab SuSE 5.1 nicht mehr nötig.)
~/.Xdefaults (Müssen natürlich auch geladen werden: xrdb -merge ~/.Xdefaults)
Für SuSE 6.0 lade ich zu der Standard-.Xdefaults noch meine ~/.Xdefaults.private
~/.Xmodmap (Starten mit: xmodmap ~/.Xmodmap)
Für SuSE 6.0 verwende ich diese ~/.Xmodmap
Weitere Informationen
Umfassende Informationen

Benutzer-Einstellungen (Shell, X11)

Als normaler Benutzer verwende ich für den Systemstart folgende Dateien:
~/.Xresources
~/.bashrc
~/.profile
~/.xinitrc
~/.xserverrc
~/.xsession
Außerdem ist noch Folgendes für die Bash in meinem /etc/profile.local:
shopt -s histappend
bind '"\C-r": history-search-backward'
shopt -s cdspell

FVWM2

In /usr/X11R6/lib/X11/fvwm2/.fvwm2rc stehen die Standard-Einstellungen. Wenn aber ein ~/.fvwm2rc existiert, dann wird dieses verwendet.

HTTPD / WWW-Server konfigurieren


WWW-Cache: Squid (squid-1.1.21)

Gründe für einen lokalen WWW-Cache:
Bemerkung: Mit Squid ab Version 2 funktioniert die Offline-Funktion nicht mehr. Deshalb rate ich für diesen Zweck zu WWWOffle.

Einrichtung:
./configure --prefix=/usr/local/squid
make all
make install
Dann kann man /usr/local/squid/etc/squid.conf bei Bedarf ändern. Es muß auch noch ein User für squid und WWW-Dienste eingerichtet werden (bei mir User "www" in der Gruppe "infosys") und ein Zuständiger für den Cache (bei mir webmaster).
Schließlich wird Squid gestartet:
/usr/local/squid/bin/squid -s -D &
Wenn man eine Internet-Anbindung über einen Provider mit Firewall nutzt (das wird wohl immer so sein), dann muß man Squid so einstellen, daß alle Anfragen von dem WWW-Proxy des Providers geholt werden.
Ich habe folgende Änderungen an meiner /usr/local/squid/etc/squid.conf vorgenommen:

cache_host wwwcache.informatik.tu-muenchen.de parent 8009 3130
cache_host atrbg17.informatik.tu-muenchen.de parent 3128 3130
cache_host proxy.lrz-muenchen.de parent 8080 3130
inside_firewall none
local_domain sl.de
local_ip 172.16.0.0
neighbor_timeout 10
ftpget_program /usr/local/squid/bin/ftpget
reference_age 0
cache_mgr webmaster
cache_effective_user www infosys
refresh_pattern . 0 100 525600
negative_dns_ttl 0

Man kann auch eine WWW-Kompression mit der Secure Shell erreichen.
Die Refresh-Age-Einstellung bewirkt, daß erst Daten aus dem Cache entfernt werden, wenn das Plattenplatz-Limit erreicht ist.
Das Refresh-Pattern besagt, daß Daten ein Jahr im Cache liegen bleiben können. Der Zeitraum ist aus praktischen Gründen so lang gewählt. Wenn man sich ansieht, wie alt neu empfange Objekte sind, dann kommt man zu dieser langen Einstellung. Der Zeitstempel "Modified" gibt an, wann das Object (auf dem Server) geändert wurde und das kann schon sehr lange zurückliegen. Zum Beispiel ist meine Home-Page auch schon ca. 1 Monat alt und würde vom Squid in der Standard-Einstellung sehr bald (ca. alle 5 Tage) neu geladen werden:
180. http://www.loescher-online.de/
Verified 1W ago, Used 1W ago, Modified 1M ago, Expires NEVER,
3604 bytes, 0 accesses, 0 active clients,
STORE_OK, NOT_IN_MEMORY, SWAP_OK, PING_NONE,
0 Locks, Flags: EC,KU,HT
Mit dieser Einstellung kann man jetzt bestens offline WWW-Surfen.
Aber keine Angst: Der Squid prüft sehr wohl, ob seine Objekte noch "frisch" sind wenn er online ist!

Als Proxy müssen jetzt alle WWW-Clients localhost:3128 verwenden und am besten als "No-Proxy" den lokalen Rechner eingetragen haben.
Für Lynx muß man in /usr/lib/lynx.cfg diese Zeile eintragen:
http_proxy:http://localhost:3128/

Für die nette Zusatzfunktion "Cache-Manager" kann man man noch /usr/local/squid/bin/cachemgr.cgi nach /httpd/cgi-bin/cachemgr.cgi kopieren und sich dann per http://localhost/cgi-bin/cachemgr.cgi mit Squid "unterhalten". (Für sensible Daten sollte man aber in squid.conf Paßwörter vergeben.)

WWW-Cache: WWWOffle

Gründe für einen lokalen WWW-Cache:
Bemerkung: Wenn der Rechner immer online ist, dann empfehle ich Squid.

Zur Einrichtung braucht man nur diese Zeilen in /etc/wwwoffle/wwwoffle.conf ändern:
# Bei StartUp:
run-uid = wwwoffle
run-gid = wwwoffle
# Bei Options:
connect-retry = yes
# Bei AllowedConnectHosts die Clients eintragen:
*.sl.de
10.3.3.*
# Bei Proxy:
http://* = localhost:1300
ftp://* = localhost:1300
# Bei Purge:
max-size = 1024
Dabei ist der Proxy bereits auf einen komprimierten SSH-Tunnel eingestellt, aber das kann man auch weglassen (für direkte Verbindung ins Internet oder transparentem Proxy des Providers):
http://* =
ftp://* =
oder den Proxy des Providers eintragen:
http://* = proxy.my.provider.de:8080
ftp://* = proxy.my.provider.de:8080

Sendmail

Kurzfassung für SuSE 6.0 ohne SuSE-Automatik:
In /etc/rc.config: SENDMAIL_TYPE="no"
In /etc/mail/linux.mc:
FEATURE(`nodns')dnl
FEATURE(`nocanonify')dnl
define(`SMART_HOST', `mailrelay.informatik.tu-muenchen.de')dnl
MASQUERADE_AS(`informatik.tu-muenchen.de')dnl
FEATURE(`masquerade_envelope')dnl
und dann:
m4 /etc/mail/linux.mc > /etc/sendmail.cf

Kurzfassung für SuSE 6.0 mit SuSE-Automatik:
In /etc/rc.config:
SMTP="yes"
SENDMAIL_TYPE="yes"
SENDMAIL_SMARTHOST="mail.provider.de"
# oder für GMX: SENDMAIL_SMARTHOST="esmtp:mail.gmx.net"
SENDMAIL_LOCALHOST="localhost"
SENDMAIL_RELAY=""
SENDMAIL_ARGS="-bd -om"
SENDMAIL_EXPENSIVE="no"
SENDMAIL_NOCANONIFY="no"
# Absenderadresse soll der Domainname des Providers sein und nicht
# der des lokalen Rechners:
FROM_HEADER="gmx.de"
Die Sender-Zeile im Mailheader kann durch /etc/mail/genericstable ausgetauscht werden:
loescher       loescher@gmx.de
Das muß man unbedingt verwenden, wenn man z.B. von "root" Mails über GMX verschickt, da GMX keine Mails annimmt, die von "root" kommen. Das muß auf einen User bei GMX gemappt werden:
root       loescher@gmx.de
news       loescher@gmx.de
Abschließend immer SuSEconfig aufrufen.

Ausführliche Anleitung und Details für SuSE 4.4:
Anschließend muß man ein neues Konfigurationsfile erzeugen:
m4 /etc/sendmail.config/m4/cf.m4 /etc/sendmail.config/cf/sl.mc > /etc/sendmail.cf
Wichtig ist dann natürlich, daß man dem SuSEconfig in /etc/rc.config verbietet, die /etc/sendmail.cf zu erstellen: SENDMAIL_TYPE=no
Und nicht vergessen: Sendmail killen und neu starten! Sonst ändert sich nach den Änderungen gar nichts:
killproc -TERM /usr/sbin/sendmail
/usr/sbin/sendmail -bd -q1m -om


Zum Testen der sendmail-Konfuguration eignen sich besonders die beiden Aufrufe:
sendmail -bv <mailaddress> (Verify names)
und
sendmail -bt (Addess test)

Wem diese Info nicht reicht findet in der Sendmail-Dokumentation oder in dem Buch "Sendmail" aus dem O'Reilly-Verlag alles Wissenwerte.
Weitere Sendmail-Kurzanleitung (von Bernhard Hailer).

Postfix

emerge -aC ssmtp
echo "mail-mta/postfix sasl" >> /etc/portage/package.use/00-local
emerge -avt postfix
rc-update add postfix default
/etc/init.d/postfix start
Und optional als Kommandozeilen-Client:
emerge -avt mail-client/mailx

Fetchmail

Mit Fetchmail kann z.B. von einem POP3-Account Mail abholen. Das geht mit folgender ~/.fetchmailrc:
poll mailhost.provider.de with protocol pop3 port 995 fetchall
Man kann damit Mail auch verschlüsselt und komprimiert über einen SSH-Tunnel laufen lassen.

News (INN)


FTP

FTP für Benutzer funktioniert bereits.
Informationen gibt es per "man in.ftpd" oder "man wu.ftpd". Folgendes ist einzustellen für Anonymous-FTP:
mkdir /home/ftp
chdir /home/ftp
mkdir bin etc lib pub
chmod 444 /home/ftp bin etc lib
chmod 775 /home/ftp/pub
cp /bin/ls /home/ftp/bin
cp /etc/passwd /etc/group /etc/ld.so.cache etc
# Dann löscht man aus der Paßwort- und Gruppendatei alles heraus,
# bis auf den User "ftp" und die Gruppe "users".
cd lib
cp /lib/ld-linux.so.1 /lib/libc.so.5.2.18 .
ln -s libc.so.5.2.18 libc.so.5
chmod 111 /home/ftp/bin/ls
chmod 444 /home/ftp/etc/*
chmod 555 /home/ftp/lib/*
Wenn man den wu.ftp verwendet, dann funktioneren auch Messages und der Banner, den man in /etc/ftpaccess einstellen kann.
Welcher FTP-Dämon gestartet wird ist in /etc/inetd.conf eingetragen.

Fonts installieren


NCR53c400a-SCSI-Karte verwenden

Die NCR53c400a-SCSI-Karte, die bei HP-Scannern, wie dem HP-ScanJet IIcx mitgeliefert wird, wird nicht direkt von Linux unterstützt. Man braucht dazu erst den Patch 53c400a-patch-0.2. (Eine neue, von mir nicht getestete Version gibt es hier)
Aber das reicht auch noch nicht, denn der 53c400a muß durch bestimmte IOs freigeschaltet werden, bevor er vom normalen 53C400-Treiber erkannt wird. Das macht für Mustek-Karten der Patch, bei HP gibt es den mitgelieferten DOS-ASPI-Treiber "mini400i.sys", der das macht. Also muß man unbedingt vor dem Linux-Start unter DOS die Karte initialisieren und dann per Loadlin Linux starten.
Aber man sollte von der NCR-Karte nicht zuviel erwarten. Da sie keine Interrupts unterstützt wird Linux ziemlich unbenutzbar beim Scannen.

Zeitzone einstellen

Für Deutschland stellt man die Zeitzone CET oder MET ein.
Dazu erstellt man einen Link:
ln -s /usr/lib/zoneinfo/CET /usr/lib/zoneinfo/localtime
bzw. unter SuSe in /etc/rc.config:
TIMEZONE=CET
Desweiteren muß man in /etc/rc.config noch GMT="-u" eintragen. Die Rechneruhr stellt man auf UTC (=GMT) ein.
CET (Winterzeit) ist eine Stunde nach UTC, also Zeitzone +0100.
Also setzt man zuerst die Uhr auf GMT, indem man (in Deutschland) eine Stunde von der lokalen Zeit abzieht. Wenn es jetzt 18:00h ist, dann muß man die Uhr auf 17:00h stellen, z.B.:
date -s '1997-10-30 17:00:00' +'%Y-%M-%d %T'
Dann die CMOS-Uhr auf die aktuelle Zeit (in GMT) setzen:
clock -w
Dann kann man per clock -us die GMT-Zeit der CMOS-Uhr in lokale Systemzeit setzen lassen. Sommer-/Winterzeit-Umstellung sollte in Zukunft automatisch erfolgen.
Zum Stellen der Uhr unter Verwendung von anderen Rechnern kann man "netdate", "ntpdate" oder "xntp" benutzen. (Siehe: NTP)
Wenn man selbst als Timeserver fungieren will, dann müssen in /etc/inetd.conf die Zeilen stehen:
time stream tcp nowait root internal
time sdgram udp wait root internal
Die Zeit kann man einfach von einem anderen Rechner holen: netdate -v tcp rechnername
oder
ntpdate -v -b -u rechnername
und dann mit clock -wu oder hwclock --systohc setzen.
Es geht auch mit getdate -adjust 1 240 rechnername
Sollte die Uhr einmal verstellt sein und in der Zukunft laufen, dann entstehen Dateien, die nach der Uhr-Korrektur in der Zukunft liegen. Das führt zu unschönen Fehlermeldungen. Abhilfe:
touch /tmp/bla
find . -newer /tmp/bla -exec touch '{}' ';'

NTP / Chrony

Anleitung zu NTP.
Die Anzeige des "peers"-Befehls bei ntpq bzw. bei "ntpq -p" zeigt eine Liste von Peers des Servers und eine Zusammenfassung der Stati: Das Zeichen am linken Rand Zeit den Selektions-Prozess an:
space = discarded due to high stratum and/or failed sanity checks.
x = designated falseticker by the intersection algorithm. (konnte längere Zeit keine verlässlichen Werte liefern)
. = culled from the end of the candidate list.
- = discarded by the clustering algorithm. (bei letzter Abfrage zu weit abweichende Zeit geliefert)
+ = included in the final selection set.
# = selected for synchronization but distance exceeds maximum. (ebenfalls geeigneter Server, aber weiter hinten in der Bewertung)
* = selected for synchronization. (Aktueller Referenz-Server)
o = selected for synchronization, pps signal in use.

NTP-Server:
www.eecis.udel.edu/~mills/ntp/servers.htm,
oder
pool.ntp.org
0.pool.ntp.org
1.pool.ntp.org
2.pool.ntp.org
ntp0.freenet.de
ntp1.freenet.de
ntps1-0.cs.tu-berlin.de
ntps1-1.cs.tu-berlin.de
ntp0.fau.de
ntp1.fau.de
ntp2.fau.de
ntp3.fau.de
Man kann den Pool von ntp.org auch so nutzen:
server pool.ntp.org
server pool.ntp.org
server pool.ntp.org
Oder in Deutschland besser:
server de.pool.ntp.org
server de.pool.ntp.org
server de.pool.ntp.org

Einen eigenen NTP-Server kann man sich ganz einfach aufsetzen:
emerge -avt ntp
in /etc/ntp.conf das eintragen:
server 127.127.1.0
fudge 127.127.1.0 stratum 10
driftfile /var/lib/ntp/ntp.drift
restrict 10.0.0.0 mask 255.0.0.0 nomodify nopeer notrap
disable monitor
Damit wird die interne Uhr des Servers als Zeitquelle verwendet.
Diese interne Uhr kann man so stellen, wie bei den Clients, siehe unten.
Bei ersten Versuchen aber nicht ungeduldig werden: Selbst das Synchronisieren auf die interne Uhr braucht ca. 8 Minuten!
Wenn man dauerhaften Zugang zum Internet hat, dann kann man gleich noch richtige Server eintragen, z.B.
server 0.pool.ntp.org

Wenn man ntpd nur zum Zeit-Synchronisieren für den eigenen Rechner verwenden will, aber ntpd gar nicht als Server für andere Rechner laufen lassen will, dann ist folgende Konfiguration optimal:
server pool.ntp.org
driftfile /var/lib/ntp/ntp.drift
restrict default ignore
restrict 127.0.0.0 mask 255.0.0.0
disable monitor
Achtung: Manche Internet-DSL-Router öffnen den Port 123/UDP, wenn im Heimnetz ein NTP-Server läuft und man wird dann aus dem Internet angreifbar. Mit obigen restrict-Anweisungen bleibt der NTP-Server nur auf dem eigenen Rechner erreichbar.
Siehe: Kommt Zeit kommt DDoS Angriff.
Damit kann es aber auch sein, dass der ntpd gar keine Zeit mehr stellen kann, wenn die restrict-Anweisungen zu "scharf" sind.
Viel eingacher geht das mit Chrony, siehe unten...

Dann den ntpd noch dauerhaft starten:
/etc/init.d/ntpd start
rc-update add ntpd default

Clients sind auch ganz einfach: Nur in /etc/conf.d/ntp-client den richtigen Server eintragen:
NTPCLIENT_OPTS="-Q -b -u server"
Dann noch das Ganze dauerhaft starten:
/etc/init.d/ntp-client start
rc-update add ntp-client default

Wenn man keine dauerhafte Verbindung zu NTP-Servern hat, dann bietet sich statt xntp das Programm chrony an. Eine Konfiguration für Dial-Up-PCs könnte so aussehen:
# Alle Server sind normalerweise offline und werden erst per chronyc
# online geschaltet, wenn die Internetverbindung besteht.
server 82.219.3.1 offline
server 216.27.185.42 offline
server 216.136.10.198 offline
server 61.9.138.184 offline
server 66.115.130.4 offline
server 68.98.18.98 offline
keyfile /etc/chrony.keys
commandkey 1
driftfile /etc/chrony.drift
allow 10.3.3
# RTC als Referenzuhr verwenden, aber mit hohen Stratum:
local stratum 10
# RTC läuft mit UTC und nicht mit localtime:
rtconutc
Siehe auch die chrony Anleitung.
Wenn man online ist, dann muß man per chronyc dem chronyd mitteilen, daß er die NTP-Server nun erreichen kann:
# chronyc password sagichnicht online Das Kennwort muß man auch in /etc/chrony.keys eintragen.

Bei einer dauerhaften Internetverbindung reicht auch völlig diese /etc/chrony/chrony.conf ganz ohne allow-Zeilen:
server pool.ntp.org
server 0.gentoo.pool.ntp.org
server 1.gentoo.pool.ntp.org
server 2.gentoo.pool.ntp.org
server 3.gentoo.pool.ntp.org
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server ntp0.freenet.de
server ntp1.freenet.de
server ntps1-0.cs.tu-berlin.de
server ntps1-1.cs.tu-berlin.de
server ntp0.fau.de
server ntp1.fau.de
server ntp2.fau.de
server ntp3.fau.de
server de.pool.ntp.org
Dann:
rc-update add chronyd default
/etc/init.d/chronyd start
chronyc sources

Und wenn NTP gar nicht geht (z.B. wegen einer Firewall) dann kann man noch HTP benutzen.

Es gibt natürlich noch das einfache Time Protocol nach RFC 868. Dazu konfiguriert man z.B. den xinetd als Server durch Eintrag in /etc/xinetd.d/time-stream:
disable = no
only_from = my.client.home.de
Als Client kann man z.B. rdate verwenden:
rdate -s my.server.home.de && /sbin/hwclock --systohc

UMSDOS

Vorweg eine Warnung: Ich habe sehr schlechte Erfahrungen mit UMSDOS gemacht und verwende es nicht mehr! Es ist wirklich Beta und außerdem "Benutzer-fehlerträchtig"! Man sollte tunlichst aufpassen, daß man mit den "--linux-.---"-Files nichts durcheinanderbringt. Typische Fehler sind: Wenn jemand nur lange Dateinamen haben will, dann sollte er VFAT nehmen.
Nun aber doch das How-To:

Images von Platten mit dem Loopdevice mounten (oder auch MTools)

Zuerst muß man das loopback-Device in den Kernel eincompilieren und, z.B. ein Image einer Diskette erstellen:
dd if=/dev/fd0 ibs=512 of=/tmp/MeineDisk

Dann kann man das Image so mounten:
mount /tmp/MeineDisk /mnt/disk -t msdos -o loop

Wenn die automatische Erkennung des Mediums nicht funktioniert, dann sollte man sich mit fdisk das "Medium" mit "p" (Print partition table) anschauen:
prompt> fdisk /tmp/disk
Disk /tmp/disk: 0 heads, 0 sectors, 0 cylinders Units = cylinders of 1 * 512 bytes Device Boot Begin Start End Blocks Id System /tmp/disk1 * 1 33 444416 222192 6 DOS 16-bit >=32M
Wenn man also die erste Partition im File "/tmp/disk" mounten will, dann muß man einen Offset angeben, der sich aus "Start-1" mal "Units" berechnet, also im Beispiel: 32*512=16384. Der Aufruf lautet dann:
mount /tmp/disk /mnt/a -t msdos -o offset=16384

Wenn ich ein Bochs-HDD-Image mounten will, das so aussieht:
Disk /tmp/BochsHDD: 0 heads, 0 sectors, 0 cylinders
(Mit tatsächlich 15 heads, 17 sectors, 900 cylinders)
Units = cylinders of 1 * 512 bytes
Device          Boot   Begin    Start      End   Blocks   Id  System
/tmp/BochsHDD4     *        1       18   229245   114614    6  DOS 16-bit >=32M
    
Dann muß man einen Offset von (17*512)Bytes angeben:
mount /tmp/BochsHDD /mnt/bochs -t msdos -o offset=8704

Für die MTools reicht dann ein analoger Eintrag in ~/.mtoolsrc:
drive c: file="/tmp/BochsHDD" offset=8704

Benutzer und System-Verwalter einrichten

Es gibt täglich Aktionen, die ein (möglicherweise privilegierter) Benutzer ausführt, wozu er normalerweise nicht berechtigt ist, zum Beispiel das Mounten einer CDROM oder das Starten einer PPP-Verbindung.
Die meisten Rechte sind bei mir durch Gruppen geregelt.

Device-Filesystem (devfs)

Das Device-Filesystem stellt die Geräte in /dev nach einem neuen Namens-Schema dar.
Damit gehört die unpraktische und gefährliche Numerierung sga, sgb, sgc, ... der Vergangenheit an.
Details zu den Vorteilen gibt es in der FAQ zu devfs.
Mit devfs werden z.B. SCSI-Platten so angesprochen: /dev/scsi/host1/bus0/target6/lun0/part8, aber man kann auch praktische Links legen, was mein /etc/init.d/devfs-setup erledigt.
Außerdem kann man mit dem optionalen Dämon devfsd beim Zugriff auf Devices Aktionen definieren. Das wird einfach in /etc/devfsd.conf eingetragen.
Der devfsd ist auch wichtig, wenn man die alten Gerätenamen noch nutzen will.

ALSA - Advanced Linux Sound Architecture

Diese Anleitung bezieht sich auf Version 0.5.1a bis 0.5.7 (und evtl. höher) und den "trident"-Chipsatz in der Hoontech SoundTrack Digital 4DWave NX ( Hoontech).

RAID / Multiple Devices (MD)

Eine sehr gute Beschreibung findet man in c't 01/2009 und 02/2009.
Als erstes RAID-Unterstützung im Kernel aktivieren, aber nicht als Module bauen, da man sonst nicht davon booten kann.
emerge -avt mdadm testdisk
RAID auf sdb2 mit 2 Platten anlegen, wobei zweite Platte noch fehlt:
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb2 missing
Filesystem anlegen... Mounten... etc.
Weitere Platte dazunehmen:
mdadm /dev/md0 --add /dev/hdc2
Man kann auch die Anzahl der RAID-Devices erhöhen und so z.B. aus einem RAID1 mit zwei Platten ein RAID1 mit 3 Platten machen:
mdadm /dev/md0 --grow --raid-devices=3
Genauso kann man ein RAID5 mit 3 Platten um eine erweitern und gewinnt damit zusätzlichen Platz:
mdadm /dev/md1 --add /dev/hdc3
mdadm /dev/md1 --grow --raid-devices=4 --backup-file=/tmp/md1-grow.backup
resize2fs /dev/md1
Status anzeigen:
mdadm --detail /dev/md0

Für die Überwachung des RAID:
In /etc/conf.d/mdadm das eintragen:
MDADM_OPTS="--mail root --test"
und
/etc/init.d/mdadm start
rc-update add mdadm default
Bzw. für Arch:
pacman -S mdadm
# Für Aktivierung des mdadm-Monitoring muss in /etc/mdadm.conf in MAILADDR eine Mail-Adresse (z.B. "root") eingetragen werden!
# Testen mit: mdadm --monitor --scan --oneshot --test
# Siehe: RAID - Email notifications

RAID stoppen:
mdadm --stop /dev/md0
RAID starten:
mdadm --auto-detect
Eine Platte aus RAID entfernen:
mdadm /dev/md0 --fail /dev/hdc2
mdadm /dev/md0 --remove /dev/hdc2
mdadm --zero-superblock /dev/hdc2
RAID wieder löschen und hdc2 entfernen:
mdadm --stop /dev/md0
mdadm --zero-superblock /dev/hdc2
Ausführliche Beschreibung, wie man ein bestehendes Root-Filesystem auf ein RAID verlagert und dann davon booten kann:
Die neue leere Platte ist /dev/sda und die alte /dev/hdc.
# Die neue Platte formatieren:

Disk /dev/sda: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         125     1004031   82  Linux swap / Solaris
/dev/sda2   *         126        2558    19543072+  fd  Linux raid autodetect

# Typ ist 0xfd und Bootable!

# Swap einrichten
swapoff -a
export SWAP=/dev/sda1
dd if=/dev/zero of=$SWAP bs=1024 count=10
mkswap -L Swap0 $SWAP
# Den alten Swap auch mit einem Label versehen
export SWAP=/dev/hdc1
dd if=/dev/zero of=$SWAP bs=1024 count=10
mkswap -L Swap1 $SWAP

# RAID einrichten
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb2 missing

export DEV=/dev/md0
mkfs.ext3 $DEV
e2label $DEV Root
tune2fs -c 0 $DEV
tune2fs -i 400d $DEV
mount -L Root /mnt/newroot
rsync -aSH --numeric-ids --delete --delete-excluded --exclude /proc --exclude /sys --exclude /delwatch --exclude /cdrom --exclude /mnt --exclude /root/.ccache --exclude /var/tmp/ccache --exclude /var/spool/wwwoffle / /mnt/newroot/
cd /mnt/newroot/
touch ROOT_AUF_EXTERNER_PLATTE
rm ROOT_AUF_PLATTE
rd .reiserfs_priv
md proc sys mnt 
ln -s /mnt/disk02/delwatch .
cd mnt
md a backup cdrom centrix cf disk00 disk01 disk02 disk03 floppy gentoo old newroot test unbenutzt
cd..
vi /mnt/newroot/etc/fstab

LABEL=Root              /               ext3            defaults        0 0
LABEL=Swap0             swap            swap            sw              0 0
LABEL=Swap1             swap            swap            sw              0 0
...

vi /mnt/newroot/boot/grub/menu.lst

# Einträge auf /dev/sda1 setzen und bei externer USB-Platte rootdelay=5,
damit auch lange genug vor dem Mounten von / gewartet wird! Beispiel:

title=Linux 2.6.22.9
root (hd0,1)
kernel /boot/2.6.22.9 root=/dev/md0 vga=789 rootdelay=5

# GRUB sagen, dass /dev/sda seine erste Festplatte ist:
echo "(hd0)  /dev/sda" > /mnt/newroot/boot/grub/device.map
umount /mnt/newroot
# RAID stoppen vor der Grub-Installation!
mdadm --stop /dev/md0
mount /dev/sda2 /mnt/newroot
# Grub in die Partition installieren und nicht in den MBR, da er so vom
# RAID mitgespiegelt wird
grub --device-map=/mnt/newroot/boot/grub/device.map --config-file=/mnt/newroot/grub/menu.lst
grub> root (hd0,1)
grub> setup (hd0,1)
quit
umount /mnt/newroot

# Mit testdisk einen MBR auf /dev/sda und /dev/hdc schreiben, der die erste als
# bootable markierte Partition startet.

# Ab grub2 kann man einfach statt testdisk den Grub-Loader in beide
# Boot-Sektoren schreiben:
grub-install /dev/sda
grub-install /dev/sdb
      
# Booten!

# Dann die alte Partition als 0xfd und bootable markieren und diese zum
# RAID dazunehmen:
mdadm /dev/md0 --add /dev/hdc2
mdadm --detail /dev/md0
Zum Thema Booten von einem USB-Stick siehe auch Booten von USB.
Sollte jemand ein Performance-Problem mit RAID-5 haben, also z.B. dass zu wenig Zeit für einen wichtigen Prozess überbleibt, weil ein Kopierbefehl und der md?_raid5 alle Ressourcen brauchen, dann sollte man den Kopierbefehl mit ionice starten:
ionice -c3 cp quelle ziel
Man kann aber auch gleich den wichtigeren Befehl in einer "besseren" Klasse starten: ionice -c2 -n0 ...
Hier gibt es noch eine Anleitung zu md in der beschrieben ist, dass man z.B. in /sys/block/md0/md/sync_speed die aktuelle Geschwindigkeit des md-Resyncs auslesen kann und in /sys/block/md0/md/sync_speed_min bzw. /sys/block/md0/md/sync_speed_max, die minmale bzw. maximale Sync-Geschwindigkeit einstellen kann.
Sollte beim Booten oder im Laufenden Betrieb diese Meldung kommen:
kernel: md: kicking non-fresh sda3 from array!
dann kann man diese Platte mit diesem Befehl wieder ins RAID aufnehmen:
mdadm /dev/md1 --add /dev/sda3
(Das ist bei mir passiert, da die USB-Platte kurz mal nicht angeschlossen war.)
Wenn in einem RAID5 mehrere Platten temporär gleichzeitig ausfallen, dann kann man laut dieser Anleitung versuchen das RAID wieder zu starten:
mdadm --assemble --force ...
Etwas gefährlicher klingt schon diese Anleitung.
Sollte man einmal in einem RAID1 aus 5 Platten zwei wegen Defekt entfernen und dann das RAID1 aber nur noch mit 3 Platten weiterlaufen lassen wollen, dann sieht das ewtas unschön aus, denn man sieht, dass 2 Platten "fehlen":
    Number   Major   Minor   RaidDevice State
       0       8        2        0      active sync   /dev/sda2
       1       8       34        1      active sync   /dev/sdc2
       2       0        0        2      removed                
       3       0        0        3      removed                
       4       8       18        4      active sync   /dev/sdb2
Diese "removed"-Zeilen bekommt man dann ganz einfach so weg:
mdadm /dev/md0 --grow --raid-devices=3
Wie man ein RAID der Version 0.9 in eine höhere Version umwandelt, um Platten größer 2TB nutzen zu können, ist in c't 6/2013 S. 184 beschrieben.

Bevor man sich erhöhte Ausfall-Wahrscheinlichkeit durch RAID0 antut, sollte man darüber nachdenken die einzelnen Platten durch mhddfs (siehe auch: Wiki und README) zu verbinden. Das ist im Prinzip ein RAID0 auf logischer Ebene.

Für Grub und die /etc/fstab sollte man statt Gerätenamen besser UUIDs verwenden. Diese kann man so herausfinden:
lsblk -no NAME,UUID /dev/sda2
# oder
blkid /dev/sda2

Sollte man ein BIOS-RAID/HW-RAID ansprechen wollen, weil z.B. der PC, in dem das RAID eingrichtet wurde nicht mehr "lebt", äußert sich das zumeist so, dass der mount Befehl nur etwas bzgl. jmicron_raid_member behauptet.
Das kann man aber so ansprechen:
emerge -avt sys-fs/dmraid
dmraid -r
dmraid -ay

Wenn man von einem RAID aus sda und sdb bootet, dann kann es vorkommen, dass sich z.B. sda nicht mehr meldet und das RAID beim booten in zwei eigenständige Teile "zerfällt".
Dann stellt sich die Frage: Wie kann ich im laufenden System sda (von der gebootet wurde) quasi so entfernen, dass beim nächsten Booten von sdb gebootet wird?
Beispiel:
sda war ausgefallen und ist jetzt wieder da, bzw. das System hat von sda gebootet.
Auf sda3 ist das ROOT Filesystem ("/").
Mit fdisk die ROOT Partition löschen:
/dev/sda3 17188864 115755007 98566144 47G fd Linux raid autodetect
und booten.
Dann die Partition wieder anlegen und RAID Reste löschen:
mdadm --zero-superblock /dev/sda1
mdadm --zero-superblock /dev/sda2
Dann die frischen Partitionen wieder dazunehmen:
mdadm /dev/md123 --add /dev/sda1
mdadm /dev/md125 --add /dev/sda2
mdadm /dev/md126 --add /dev/sda3
Booten und fertig!

Typischer Fall: Eine Festplatte (sdz) ist defekt und muss getauscht werden.
mdadm /dev/md124 --fail /dev/sdz1
mdadm /dev/md124 --remove /dev/sdz1
mdadm --zero-superblock /dev/sdz1
# Defekte Platte löschen:
# dd if=/dev/zero of=/dev/sdz1
# Neue einbauen, Partition anlegen (GTP, Type "Linux RAID"), dann:
mdadm /dev/md124 --add /dev/sdz1

Arch RAID Grundlagen
Achtung: Da selbst angeblich gleich große Platten unterschiedlicher Hersteller leicht unterschiedliche Kapazität aufweisen können, sollte man für die RAID-Partition nie 100% der Größe nutzen, sondern ca. 100 MB am Ende leerlassen.
Als Partitionstabelle sollte man bei Platten größer 2TB immer GPT nutzen.
Als Partitionstyp ist "Linux RAID" zu wählen.
Vergrößern eines RAID:
Arch - RAID - Increasing size of a RAID volume

Eine Disk (das Device!) kann man aus dem laufenden Linux so entfernen:
echo 1 > /sys/block/sdX/device/delete
Wieder sichtbar machen, geht dann nur durch einen Rescan:
echo '- - -' > /sys/class/scsi_host/host0/scan

RAID Größe erweitern:
Beispiel: RAID besteht aus einer 3TB (sdc) und einer 4TB (sdd) Platte.
Auf der 3TB Platte sind aber nur 2TB für das RAID genutzt.
Jetzt soll das restliche 1 TB ebenfalls genutzt werden.
Schritte:
Die zu kleine Komponente entfernen:
mdadm /dev/md124 --fail /dev/sdc1 --remove /dev/sdc1
mdadm --zero-superblock /dev/sdc1
Dann mit fdisk die Partition neu anlegen bzw. vergrößern.
Danach wieder dem RAID hinzufügen:
mdadm /dev/md124 --add /dev/sdc1
Nach der RAID Synchronisation muss man noch das RAID erweitern:
mdadm --detail /dev/md124 | grep -e "Array Size" -e "Dev Size"
mdadm /dev/md124 --grow -z max
mdadm --detail /dev/md124 | grep -e "Array Size" -e "Dev Size"
Dann noch das Filesystem erweitern:
resize2fs /dev/md124

Regelmäßige Wartung:
Man sollte das RAID Array regelmäßig auf Lesbarkeit prüfen.
Siehe: Arch - RAID - Scrubbing
Z.B.:
echo check > /sys/block/md0/md/sync_action
Fortschritt beobachten:
watch cat /proc/mdstat

Samba (2.0.6)

Es wird normalerweise in /usr/local/samba/ installiert.
cd source
./configure --with-smbmount
make
make smbwrapper
make install
cp bin/smbsh bin/smbwrapper.so /usr/local/samba/bin
Um seinen Rechner als Samba-Client in ein NT-Netz zu integrieren und sich auch an einem WINS-Server zu melden muß man in /etc/smb.conf folgendes eintragen:
workgroup = NT-DOMÄNENNAME
netbios name = RECHNERNAME
security = domain
encrypt passwords = yes
wins server = NAME_DES_WINS_SERVERS
und in /etc/rc.config START_SMB="yes"
Ein Verzeichnis kann man so mounten:
smbmount '\\ntserver\sharename' /mnt/sonstwas -ousername=meinlogin,password=meinpasswort
Das NT-Kennwort kann man so ändern:
smbpasswd -D 3 -r name_des_NT_PDC -U mein_login_name
Man kann sich auch sehr schön mit testparm die aktiven Parameter von Samba anzeigen lassen.

Beispiel für Verzeichnisse freigeben:
[global]
workgroup = SERVER
security = user
encrypt passwords = yes

[fotos]
   comment = Fotos
   path = /fotos
   valid users = steffi
   public = no
   writable = no
   printable = no

[audio]
  comment = Audio
  path = /audio
  valid users = steffi
  public = no
  writable = no
  printable = no
und dann noch mit smbpasswd -a username ein Kennwort setzen für den Benutzer, der darauf zugreifen darf.

NFS (Network File System)

Man sollte nur den Kernel-NFS-Dämon benutzen, da nur dieser weiterentwickelt wird.
Verzeichnisse werden durch /etc/exports exportiert:
/verzeichnis host.domain.com(optionen) host2(optionen)
Bei den Rechnernamen sind "*" und "?" als Joker erlaubt.
Mit showmount -a bzw. kshowmount kann man sich die gerade im Zugriff befindlichen Verzeichnisse anschauen.
Wenn Root von Client auch auf dem Server Root sein soll, dann muß man die Option "no_root_squash" verwenden.
Beim Kernel-NFS darf die Optionenliste keine Leerzeichen enthalten!
Beim Mounten gibt es noch die Optionen "hard", "soft", "lock" und "nolock". Typischerweiser verwendet man "rw,soft,nosuid".

Automounter (autofs)

Seit Kernel 2.2 ist als Automounter das "autofs" im Kernel. Man sollte wegen diverser Probleme nicht den BSD-Automounter (amd) benutzen, sondern lieber autofs.
Zum Start muß man in /etc/rc.config die Variable START_AUTOFS auf yes setzen.
In die zentrale Konfigurationsdatei /etc/auto.master muß man die Mountpoints und die Map-Dateien eintragen, z.B.:
/mount /etc/auto.mount
Wenn man die /etc/auto.master ändert, dann muß man autofs neustarten oder mit "reload" auffrischen. Die Map-Dateien kann man im laufenden Betrieb ändern.
In der Map-Datei wird zeilenweise ein Unterverzeichnis eingetragen, das überwacht werden soll, z.B.:
cdrom -ro :/dev/cdrom
nfshome -rw,soft server:/export/home
floppy -fstype=auto,nosuid :/dev/fd0
Bei der "auto"-Option sucht Linux selbst ein passendes Filesystem nach der Liste in /etc/filesystems.
Als Besonderheit wird auch noch ein solcher Konstrukt unterstützt:
* -rw,noduid &:/transfer
Das "&" steht für jeweils aktuellen Wert von "*". So kann man sich leicht Transfer-Verzeichnisse von anderen Rechnern mounten.

PAM (Pluggable Authentication Modules)

Wenn man sich mit (trotz?) PAM als Root per rsh einloggen will, so muß man in /etc/pam.d/rlogin die Zeile
auth required /lib/security/pam_securetty.so
auskommentieren. Man öffnet damit allerdings ein paar "Scheunentore" bzgl. Sicherheit. Besser ist gleich die Verwendung von ssh.
Einziges Argument für die r-Dienste ist die Performance. Auf alten Rechnern ist ssh gerade beim Datentransfer mit scp unerträglich langsam.
Für den rsh-Dienst braucht es aber z.B. bei SuSe 9.0 noch etwas mehr:
rpm -ihv /cdrom/suse/i586/xinetd-2.3.12-27.i586.rpm /cdrom/suse/i586/tcpd-7.6-608.i586.rpm
chkconfig rsh on
chkconfig rlogin on
chkconfig xinetd on
rcxinetd start
und dann natürlich eine ~/.rhosts anlegen.

IP-Masquerading / Network Address Translation (NAT)

Am besten das IP-Masquerade-HOWTO lesen.
Kurzfassung für Kernel 2.2:
Das muß alles in den Kernel (2.2.x):
* Networking support (CONFIG_NET)
* Packet socket (CONFIG_PACKET)
* Kernel/User netlink socket (CONFIG_NETLINK) 
   ??? * Sysctl support (CONFIG_SYSCTL) 
* Network firewalls (CONFIG_FIREWALL)
* Socket Filtering (CONFIG_FILTER)
* Unix domain sockets (CONFIG_UNIX)
* TCP/IP networking (CONFIG_INET)
* IP: advanced router (CONFIG_IP_ADVANCED_ROUTER)
* IP: verbose route monitoring (CONFIG_IP_ROUTE_VERBOSE)
* IP: firewalling (CONFIG_IP_FIREWALL)
* IP: firewall packet netlink device (CONFIG_IP_FIREWALL_NETLINK)
* IP: masquerading (CONFIG_IP_MASQUERADE)
* IP: ICMP masquerading (CONFIG_IP_MASQUERADE_ICMP)
* IP: masquerading special modules support (CONFIG_IP_MASQUERADE_MOD)
* IP: ipportfw masq support (EXPERIMENTAL) (CONFIG_IP_MASQUERADE_IPPORTFW)
* IP: ip fwmark masq-forwarding support (EXPERIMENTAL) (CONFIG_IP_MASQUERADE_MFW)
* IP: optimize as router not host (CONFIG_IP_ROUTER)
* IP: TCP syncookie support (not enabled per default) (CONFIG_SYN_COOKIES)
* IP: Allow large windows (not recommended if <16Mb of memory) * (CONFIG_SKB_LARGE)
* Network device support (CONFIG_NETDEVICES)
* Dummy net driver support (CONFIG_DUMMY)
* /proc filesystem support (CONFIG_PROC_FS)
Dann IP-Forwarding einschalten:
echo "1">/proc/sys/net/ipv4/ip_forward
Und das Masquerading aktivieren:
ipchains -v -P forward DENY
ipchains -v -A forward -p tcp -s 10.0.0.0/255.0.0.0 -j MASQ
ipchains -v -A forward -p udp -s 10.0.0.0/255.0.0.0 -j MASQ
ipchains -v -A forward -p icmp -s 10.0.0.0/255.0.0.0 -j MASQ
oder einfacher:
ipchains -A forward -j MASQ -i ppp0
wobei ppp0 das Interface ist, über das die Internetverbindung besteht. Wenn man das Interface auch noch weglässt, dann wird alles überallhin ge-forwarded.
Das sicherste ist
ipchains -v -A forward -s 10.3.3.2 -j MASQ
Hier werden nur Pakete vom Rechner 10.3.3.2 weitergeleitet.
Dann muß man nur noch auf dem Client einen Nameserver in /etc/resolv.conf eintragen und einen Route legen:
route add default gw mein_ip_forwarding_rechner

Mit Kernel 2.4 oder 2.6 und iptables:
Im Kernel braucht man mindestens folgendes:
CONFIG_NETFILTER=y
CONFIG_IP_NF_CONNTRACK=m
CONFIG_IP_NF_FTP=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_NAT=m
CONFIG_IP_NF_NAT_NEEDED=y
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP_NF_TARGET_REDIRECT=m
CONFIG_IP_NF_NAT_FTP=m
Und dann:
modprobe iptable_nat
# In the NAT table (-t nat), Append a rule (-A) after routing
# (POSTROUTING) for all packets going out ppp0 (-o ppp0) which says
# to MASQUERADE the connection (-j MASQUERADE).
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# Turn on IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

Firewall

Eine ganz einfache Firewall für den Heimgrbrauch ist schnell eingrichtet. Dazu braucht man nicht einmal separate Hardware.
Es kann auch der Heimserver im Keller ins Internet gehen und gleichzeitig Firewall spielen. Das ist natürlich nichts für die ganz Paranoiden, aber immernoch besser als ins Internet ohne Firewall.
Im Kernel einfach das ganze Netfilter-System aktivieren und alles als Modul bauen. Die passenden Module werden automatisch geladen.
Hier ist ein sehr einfaches Firewall-Script:
iptables -F
iptables -A INPUT -i ppp0 -p tcp --syn -j LOG
iptables -A INPUT -i ppp0 -p tcp --syn -j DROP
In Zeile 1 werden alle Regeln gelöscht.
In Zeile 2 wird eine Regel erstellt, die alle eingehenden Pakete auf ppp0 im Syslog protokolliert.
In Zeile 3 werden alle über ppp0 eingehenden Pakete verworfen.
Das "--syn" besagt dabei aber, daß nur die Pakete von Verbindungen verworfen werden, die nicht von diesem Rechner initiiert wurden. Ohne "--syn" würden alle eingehenden Pakete verworfen und man könnte gar keine Daten mehr empfangen.
Diese Firewall blockt also alle von außen über ppp0 initiieren Verbindungen, d.h. unser Heimserver bietet damit seine Dienste nur "nach innen" und nicht dem ganzen Internet an.
Wenn doch den einen oder anderen Service vom Internet zugänglich machen will, dann z.B. so für ssh:
iptables -A INPUT -i ppp0 -p tcp --syn --destination-port 22 -j ACCEPT
Das Ganze würde dann so aussehen:
iptables -F
iptables -A INPUT -i ppp0 -p tcp --syn --destination-port 22 -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp --syn -j LOG
iptables -A INPUT -i ppp0 -p tcp --syn -j DROP
Am besten packt man das in ein Script und startet dieses Script z.B. unter Gentoo in /etc/conf.d/local.start.
Und für die, die etwas Grafisches wollen: Die meisten Router haben bereits eine Firewall eingebaut, z.B. die FritzBox. Bei dieser kann man auch eine undokumentierte Funktion nutzen, um den Netzwerk-Traffic mitzuschneiden, wie bei Tippscout beschrieben: Man ruft dazu einfach die FritzBox mit diesem URL auf: http://fritz.box/html/capture.html.
Die FritzBox kann aber im Prinzip alles mitschneiden. Dazu ruft man http://fritz.box/capture.lua auf.

Verschlüsseltes Dateisystem

Da ich nur ein Unterverzeichnis verschlüsseln möchte, fiel meine Wahl auf EncFS.
Das ist ganz leicht einzurichten:
emerge -avt encfs
modprobe fuse
mkdir -p /home/loescher/test-crypt
mkdir -p /home/loescher/test
encfs /home/loescher/test-crypt /home/loescher/test
mkdir /home/loescher/test/erstes_verzeichnis
cp /etc/* /home/loescher/test/erstes_verzeichnis
fusermount -u /home/loescher/test

Software Suspend

Ab Kernel 2.6 ist bereits alles für Software-Suspend enthalten.
Hier gibt es ein HOWTO.

Tipps zu Gentoo

Gentoo widme ich gerne eine eigene Seite.

WLAN

WLAN Reichweite erhöhen
Die optimale Methode, die WLAN Reichweite zu erhöhen ist ein zweiter Router/Accesspoint, der mit dem ersten per Kabel (oder Powerline) verbunden ist.
Folgende Einstellungen muß man auf dem zweiten Router vornehmen: Auf allen Routern / Access-Points gleiche WLAN-Einstellungen vornehmen:

Allgemeine WLAN Einrichtung
Ein paar Notizen, um einen "Netgear MA111 802.11b Wireless USB Adapter" in ein WLAN zu verbinden.
Als Software/Treiber braucht man nur das:
echo "net-wireless/linux-wlan-ng ~x86" >> /etc/portage/package.keywords
echo "net-wireless/linux-wlan-ng-modules ~x86" >> /etc/portage/package.keywords
echo "net-wireless/linux-wlan-ng-utils ~x86" >> /etc/portage/package.keywords
echo "net-wireless/linux-wlan-ng-firmware ~x86" >> /etc/portage/package.keywords
emerge -avt linux-wlan-ng
Allgemein:
modprobe prism2_pci oder prism2_usb/prism2_plx
wlanctl-ng wlan0 lnxreq_ifstate ifstate=enable
wlanctl-ng wlan0 lnxreq_autojoin ssid=<deine_SSID_hier_eintragen> authtype=opensystem
ifconfig wlan0 <deine_IP> netmask <deine_Netzmaske> broadcast <deine_Broadcast>
route add default gw <dein_Gateway>
Konkret:
modprobe prism2_usb prism2_doreset=1
wlanctl-ng wlan0 lnxreq_ifstate ifstate=enable
wlanctl-ng wlan0 lnxreq_autojoin ssid=SAGICHNICHT authtype=opensystem
Dann enteweder
pump -i wlan0
oder: dhcpcd -no wlan0
Um sein (oder andere) Netzwerke zu finden, kann man kismet nutzen.

Ein modernerer Stick, der unter Linux funktioniert ist der Longshine LCS-8131G3. Den Treiber gibt es unter http://zd1211.ath.cx/.
Ab Kernel 2.6.18 ist der Treiber bereits im enthalten.
Zum Aktivieren muss man vorher noch das im Kernel aktivieren:
Networking
---> Wireless
---> ---> Generic IEEE 802.11 Networking Stack
---> ---> ---> Software MAC add-on to the IEEE 802.11 networking stack
Ausserdem braucht man für Verschlüsselung das unter Wireless:
IEEE 802.11i CCMP support
IEEE 802.11i TKIP encryption
Dann braucht man nur noch die Firmware:
emerge -avt zd1211-firmware
Man kann für ältere Kernels auch den separaten Treiber verwenden:
echo "net-wireless/zd1211 ~x86" >> /etc/portage/package.keywords
emerge -avt zd1211
emerge -avt zd1211-firmware
Die Wireloess-Tools braucht man immer:
emerge -avt wireless-tools
Ein erster Test:
iwlist scan
Wenn das einen Fehler liefert, dann bitte prüfen, ob der Treiber den Chipsatz richtig erkannt hat (Syslog) und ob ggf. die Firmware korrekt geladen wurde!
Das iwlist sollte entweder anzeigen, dass keine WLANs in Reichweite sind, oder die gefundenen WLANs.
Manchmal ist auch noch ein
ifconfig wlan0 up
vor dem iwlist scan nötig!
Unverschlüsseltes WLAN (zum ersten Test) einrichten:
iwlist wlan0 scan
iwconfig wlan0 mode Managed essid 'LoescherWLAN' ap 00:13:07:F4:EA:1F
ifconfig wlan0 192.168.178.30
dhcpcd -dno wlan0
oder statt dem DHCP:
ifconfig wlan0 mein_rechnername
route add default gw 192.168.178.1
WPA einrichten:
emerge -avt net-wireless/wpa_supplicant
Dann in /etc/conf.d/net:
modules=( "wpa_supplicant" )
wpa_supplicant_wlan0="-Dzd1211rw"
Dan in /etc/wpa_supplicant/wpa_supplicant.conf:
ctrl_interface=/var/run/wpa_supplicant
network={
  ssid="my_WLAN_ssid"
  proto=WPA2
  key_mgmt=WPA-PSK
  pairwise=CCMP TKIP
  psk=82d3b8e...
}
Den PSK-Key konvertiert man von ASCII in Hex indem man folgendem Kommando die geheime ASCII-Passphrase des Access-Points eingibt:
wpa_passphrase my_WLAN_ssid
Dann kann man den wpa_supplicant starten:
wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf
Mit "-d" werden Debug-Infos erzeugt.
Um das dauerhaft einzurichten ist das nötig:
ln -s /etc/init.d/net.lo /etc/init.d/net.wlan0
rc-update add net.wlan0 default
/etc/init.d/net.wlan0 start

Wenn man öfters zwischen WLAN und Ethernet hin- und herwechselt, sich aber dennoch im gleichen Netz befindet, dann kann man die beiden Interfaces zu einem zusammenfassen (Bonding) und damit immer das nutzen, das gerade verfügbar ist:
In /etc/conf.d/net das eintragen:
# Siehe: /usr/share/doc/netifrc-*/net.example.bz2
dns_domain="sl.de"
dns_servers="192.168.178.1"
# Keine IP-Konfiguration fuer enp0s25
config_enp0s25="null"
modules="wpa_supplicant"
# zum Debuggen: -dd
wpa_supplicant_wls1="-Dwext -b bond0"
# Keine IP-Konfiguration fuer wlan0
config_wls1="null"
# Das bond0 besteht aus enp0s25 und wls1
slaves_bond0="enp0s25 wls1"
# Feste IP-Konfiguration des bond0
config_bond0="192.168.178.211 broadcast 192.168.178.255 netmask 255.255.255.0"
# enp0s25 wird von bond0 benoetigt und soll vorher gestartet werden
RC_NEED_bond0="net.enp0s25"
# Default Route ueber bond0
routes_bond0="default via 192.168.178.1"
Man sollte bedenken, dass für das WLAN die MAC-Adresse von eth0 verwendet wird. Also ggf. auf dem WLAN-Router freischalten!
Dann noch den Start eintragen und starten:
rc-update delete net.lo
rc-update add net.wls1 default
rc-update add net.bond0 default
/etc/init.d/net.bond0 start
/etc/init.d/net.wls1 start
Eine Alternative dazu ist der NetworkManager.

NetworkManager

Im Ubuntu Wiki über den NetworkManager ist sehr schön beschrieben, wie man den NetworkManager auf der Kommandozeile einrichtet.
So z.B. ein WLAN:
nmcli connection add ifname wlan0 type wifi ssid MY_WLAN_SSID
nmcli connection modify wifi-wlan0 mode infrastructure
nmcli connection modify wifi-wlan0 wifi-sec.key-mgmt wpa-psk
nmcli connection modify wifi-wlan0 wifi-sec.psk MY_SECRET_WLAN_KEY
nmcli connection up wifi-wlan0
Wenn man mit vi in der Konfiguration unter /etc/NetworkManager/system-connections/ etwas ändert, dann braucht man noch ein
nmcli connection reload
Bonding richtet man laut Network Bonding wie folgt ein.
Achtung: Das Bond Device darf nicht "bond0" heissen, da es das schon unter /proc/net/bonding/ gibt!
Also:
nmcli connection add type bond ifname bond333
nmcli con add type ethernet ifname enp0s25 master bond333
nmcli con add type wifi ssid LoescherWLAN ifname wls1 master bond333
nmcli connection modify bond-slave-wls1 mode infrastructure
nmcli connection modify bond-slave-wls1 wifi-sec.key-mgmt wpa-psk
nmcli connection modify bond-slave-wls1 wifi-sec.psk MY_SECRET_WLAN_KEY
nmcli connection up bond-slave-enp0s25
nmcli connection up bond-slave-wls1

VPN mit OpenSSH

Empfehlenswert ist es (allein schon wegen der besseren Performance) OpenVPN einzusetzen, es kann aber auch Gründe geben, das Ganze nur mit OpenSSH zu implementieren.
Für VPN mit OpenVPN siehe nachfolgenden Abschnitt...
Wem das allerdings zu kompliziert ist, der kann es auch per SSH machen:
Dazu ist einmalig folgendes erforderlich:
Auf RECHNER_A:
md ~/vpn
ssh-keygen -t rsa -f ~/vpn/id_rsa-vpn
scp ~/vpn/id_rsa-vpn.pub RECHNER_B:~/.ssh/
Ein Skript /root/bin/start_vpn anlegen mit diesem Inhalt:
#!/bin/bash
modprobe tun
sleep 2
ssh -f -x -w 0:0 -p 2222 -i ~/vpn/id_rsa-vpn RECHNER_B /root/bin/start_vpn
sleep 2
ifconfig tun0 10.10.10.1 pointopoint 10.10.10.2 netmask 255.255.255.252
sleep 2
route add -host RECHNER_B gw 10.10.10.2 tun0
sleep 2
echo 1 > /proc/sys/net/ipv4/ip_forward
sleep 2
Auf RECHNER_B:
cat ~/.ssh/id_rsa-vpn.pub >> ~/.ssh/authorized_keys
vi ~/.ssh/authorized_keys
und das vor dem Key einfügen:
command="/root/bin/start_vpn"
Ein Skript /root/bin/start_vpn anlegen mit diesem Inhalt:
modprobe tun
ifconfig tun0 10.10.10.2 pointopoint 10.10.10.1 netmask 255.255.255.252
route add -host RECHNER_A gw 10.10.10.1 tun0
echo 1 > /proc/sys/net/ipv4/ip_forward
Start einer SSH auf einem speziellen Port mit speziellen Optionen:
/usr/sbin/sshd -p 2222 -o 'PasswordAuthentication no' -o 'PermitRootLogin forced-commands-only' -o 'ChallengeResponseAuthentication no' -o 'PermitTunnel yes' -o 'RSAAuthentication yes' -o 'PubkeyAuthentication yes'
Für den Verbindungsaufbau ist dann nur noch auf RECHNER_A ein start_vpn nötig.

OpenVPN

Für VPN mit OpenVPN gibt es diese sehr schöne Anleitung.
Im Beispiel hat RECHNER_A die virtuelle IP 10.3.3.1 und RECHNER_B die 10.3.3.2.
emerge -avt openvpn
cd /etc/openvpn
openvpn --genkey --secret geheim.key
scp geheim.key RECHNER_B:/etc/openpvn/
Eine /etc/openvpn/openvpn.conf anlegen:
dev tun
remote RECHNER_B.dyndns.org
# ifconfig EIGENE_VIRTUELLE_ADRESSE GEGENSEITE
ifconfig 10.3.3.1 10.3.3.2
secret geheim.key
port 1194
verb 1
keepalive 30 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
log-append /var/log/openvpn.log
Auf RECHNER_B sind lediglich die beiden IP-Adressen vertauscht und natürlich remote RECHNER_A.dyndns.org.
Bei Problemen sollte man mit verb 4 starten.
Auf den beiden Routern muß man noch ein Portforwarding von Port 1194 UDP einrichten.
/etc/init.d/openvpn start
rc-update add openvpn default

User Mode Linux

Achtung: Diese Anleitung ist noch unfertig!
http://www.gentoo.org/doc/en/uml.xml

emerge -avt sys-apps/usermode-utilities
ACCEPT_KEYWORDS=~x86 emerge -avt sys-kernel/usermode-sources
modprobe tun
echo 1 > /proc/sys/net/ipv4/ip_forward

Root-Filesystem anlegen:
md /xtemp/uml
cd /xtemp/uml
dd if=/dev/zero of=swap_fs count=500 bs=1M
/sbin/mkswap -f swap_fs
dd if=/dev/zero of=root_fs seek=2048 count=1 bs=1M
/sbin/mkreiserfs -f root_fs
mount -o loop root_fs /mnt/gentoo
cd /mnt/gentoo
tar -xjpf /src/stage3-i686-2007.0.tar.bz2
cd usr
tar -xjf /src/portage-20070906.tar.bz2
mount -t proc none /mnt/gentoo/proc
chroot /mnt/gentoo /bin/bash
env-update
source /etc/profile
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
nano /etc/fstab

/dev/ubda               /               reiserfs        noatime         0 1
/dev/ubdb               none            swap            sw              0 0
shm                     /dev/shm        tmpfs           nodev,nosuid,noexec

passwd
rc-update del consolefont boot
rc-update del keymaps boot

UML-Kernel:
cd /srv/aegis/src/uml-linux
make menuconfig ARCH=um
make linux ARCH=um
cp linux /xtemp/uml/

Start:
cd /xtemp/uml
./linux ubd0=root_fs ubd1=swap_fs eth0=tuntap,,,192.168.178.209

Im UML:
ifconfig eth0 192.168.178.210
ping 192.168.178.209
# /etc/resolv.conf anlegen
route add default gw 192.168.178.1
ping www.heise.de

Nun zur Firewall.
Siehe: ~/bin/firewall-uml

noch offen: iptables forward-Regel erstellen und "swapoff -a" im Gast
bleibt hängen.

UnionFS

UnionFS-Fuse bietet sich an, um ohne Root-Privilegien ein Union-FS aufzusetzen:
emerge -avt unionfs-fuse
cd /tmp
mkdir readonly writeable mountpoint
echo "Hallo" > readonly/test
unionfs -o cow /tmp/writeable=RW:/tmp/readonly=RO /tmp/mountpoint
echo "neuer Text" >> mountpoint/test
echo "neue Datei" > mountpoint/test2
fusermount -u /tmp/mountpoint
ls -al readonly writeable
Für den Kernel gibt es auch noch das Union-FS Aufs2.


Universal-Plug-and-Play (UPnP)

Am einfachsten verwendet man ReadyMedia (MiniDLNA):
emerge -avt net-misc/minidlna
vi /etc/minidlna.conf
/etc/init.d/minidlna start
rc-update add minidlna default

Alternativ dazu:
Mediatomb:
emerge -avt mediatomb
rc-update add mediatomb default
/etc/init.d/mediatomb start
Dann im Browser http://localhost:49152/ ansteuern und Mediatomb konfigurieren.
Weitere Infos und Software: Als UPnP-Client kann man z.B. den Mediaplayer aus Wind*ws Vista oder 7 hernehmen.
Ein super Standalone-Gerät für Audio-Streaming ist der Terratec Noxon iRadio 300.

Portscan

Man sollte von Zeit zu Zeit seinen eigenen Internet-Anschluß nach offenen Ports scannen.
Entweder per Internet-Service:
Oder selbst mit NMAP:
nmap -O meine_ip
nmap -sV meine_ip
nmap -sV -sU meine_ip

UPS/USV mit NUT überwachen

Laut dieser Anleitung benötigt die USV "Eaton 3S" den Treiber usbhid-ups.
Kurzfassung folgender Anleitungen:
man - usbhid-ups
NUT Anleitung
Gentoo - NUT
echo "sys-power/nut usb ups_drivers_usbhid-ups" >> /etc/portage/package.use
emerge -avt sys-power/nut
usermod -a -G usb nut
cd /etc/nut

nut.conf:
MODE=standalone

ups.conf:
[Eaton3S]
driver=usbhid-ups
port=auto

upsd.users:
[monuser]
password = geheim
upsmon master

upsmon.conf:
MONITOR Eaton3S@localhost 1 monuser geheim master
NOTIFYFLAG ONBATT SYSLOG+EXEC
NOTIFYFLAG ONLINE SYSLOG+EXEC
NOTIFYFLAG LOWBATT SYSLOG+EXEC
NOTIFYFLAG FSD SYSLOG+EXEC
NOTIFYFLAG COMMOK SYSLOG+EXEC
NOTIFYFLAG COMMBAD SYSLOG+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+EXEC
NOTIFYFLAG REPLBATT SYSLOG+EXEC
NOTIFYFLAG NOCOMM SYSLOG+EXEC
NOTIFYCMD "/usr/sl/nut_notify"

/bin/ls -1 nut.conf ups.conf upsd.users upsmon.conf >> CHANGED-FILES
rc-update add upsdrv default
rc-update add upsd default
rc-update add upsmon default
service upsdrv start
service upsd start
service upsmon start
upsc Eaton3S

Shinobi - Network Video Recoder

Shinobi kann als Netzwerk Videorekorder für Überwachungskameras ähnlich dem Zoneminder verwendet werden.
Installation nach Arch Linux - Shinobi:
yay -S shinobi-git

pacman -S mariadb
mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
systemctl start mariadb
mariadb
# enter: CREATE DATABASE ccio; flush privileges; \q
mariadb < /usr/share/shinobi/sql/user.sql

mkdir /usr/share/shinobi/videos2
chown shinobi /usr/share/shinobi/videos2

# configure the files under "/etc/shinobi" accordingly, e.g.:
# can change your super admin password in /etc/shinobi/super.json with a new one generated with:

echo -n PASSWORD | md5sum

systemctl start shinobi.target

# access:
http://127.0.0.1:8080/super

# create new account:
-> Accounts -> +Add

# add camera:
> ONVIF Scanner
Ergebnis: Shinobi läuft, aber irgendwie bekomme ich es nicht hin, dass nur bei Bewegungserkennung das Video aufgezeichnet wird.

Motion

Erste Tests mit IPCam auf Android:
ffplay http://ip.des.smartphones:8080/video
ffmpeg -i http://ip.des.smartphones:8080/video -acodec none -vcodec copy test.mp4
# oder gleich als richtiges h264:
ffmpeg -i http://ip.des.smartphones:8080/video -y -c:v libx264 -acodec none -profile:v baseline -level 3.0 -f mp4 -s 640x368 -x264opts nocabac:level_idc=30:bframes=0:global_header:threads=auto:subq=1:frameref=6:partitions=all:trellis=1:chroma_me:me=dia:bitrate=500 test.mp4
Dann laut Objekte mit Motion per Video überwachen:
yay -S motionplus
vi /etc/motionplus/ipwebcam.conf
> device_name IP Webcam
> netcam_url http://192.168.178.32:8080/video
vi /etc/motionplus/motionplus.conf
> target_dir /tmp
> webcontrol_localhost off
> camera /etc/motionplus/ipwebcam.conf

Hardware

USB-PCI-Karten


ATX-Netzteil

Da in meinem alten Digitainer nun zum wiederholten mal das Netzteil "Medion Digitainer Fortron ATX-Netzteil 150 Watt FSP150-60MDN" defekt war, habe ich zu einem anderen (hoffentlich besserem) Modell gegriffen: Listan Be Quiet! BN220 Pure Power L8 300Watt
In das Digitainer-Gehäuse passt ein ATX-Netzteil mit diesen maximalen Maßen hinein:
Breite: 15cm
Höhe: 12,5cm
Tiefe: 16,5cm

Linux-Counter 67296

Zurück zur Hauptseite
Valid HTML 4.01 Transitional   Valid CSS!