Archiv der Kategorie: Memo

Umbenennen

Die wie immer üble Ausgangslage, wenn ich Materialienlieferungen für den LFB erhalte:

Auf der Suche nach einem ordentlichen Skript für das Umbenennen von Datei- und Verzeichnisnamen bin ich hier über die Arbeit von Andi Latte gestolpert, die ich nur unwesentlich für meine Bedürfnisse anpassen musste:


#!/bin/bash
# Ersetzt Zeichen im Dateinamen rekursiv
# Vorlage: http://www.linux-community.de/Community/Fragen/Bash-Rename-Skript
# Aufruf des Skriptes auf Korrektheit pruefen
if [ -z $1 ];then echo Verwendung: umbenennen "/PFAD" ; exit 0;fi
# Meldung ungueltige Kodierung bearbeiten
convmv -f iso-8859-15 -t utf8 -r "$1" --notest
#
# Skript Start
#
find "$1" -depth -name "*" | while read file ; do
directory=$(dirname "$file")
oldfilename=$(basename "$file")
# sed und tr als Mittel der Bearbeitung
# Befehle sind so aufgestellt, dass einzelne Aktionen
# leicht durch Loeschen zwischen den Pipes
# veraendert werden koennen
newfilename=$(echo "$oldfilename" | tr "'" "_" | tr '!@#+ ' '_____' | tr '[]{}' '()()()' | sed -e 's/[\`\´\"\]//g' | sed -e 's/\&/and/g' | sed -e 's/[àáâãäå]/ae/g;s/[ÀÁÂÃÄÅ]/Ae/g;s/[éëêè]/e/g;s/[ÈÉÊË€]/E/g;s/[ìíîï]/i/g;s/[ÌÍÎÏ¡]/I/g;s/[òóôõöø]/oe/g;s/[ÒÓÔÕÖ]/Oe/g;s/[ùúûü]/ue/g;s/[ÙÚÛÜ]/Ue/g;s/[ÿý?]/y/g;s/[ÝŸ]/Y/g;s/[æ]/ae/g;s/[Æ]/AE/g;s/[碩]/c/g;s/[Ç]/C/g;s/[ßš]/s/g;s/[$§Š]/S/g;s/[=¦#:~*¿·¸°¯\%";+^˜‰…‡†???•]/_/g;s/[²]/2/g;s/[³]/3/g' | sed -e 's/[^\(\)\.\/\_a-zA-Z0-9-]//g' | tr [:upper:] [:lower:])
# Katastrophenpotential einschraenken
if [ "$oldfilename" != "$newfilename" ]; then
# Umbenennen beginnen
mv -i "$directory/$oldfilename" "$directory/$newfilename"
# Benutzer informieren
echo ""$directory/$oldfilename" ---> "$directory/$newfilename""
#echo "$directory"
#echo "$oldfilename"
#echo "$newfilename"
#echo
fi
done
exit 0

Das nun erträgliche Ergebnis, das eine automatisierte Weiterverarbeitung bei der Umsetzung nach HTML erlaubt:

Da WordPress sicherlich aus dem Skript oben wieder einmal Wurstsalat macht, hier das Skript für den Download: umbenennen_v2.zip und zur Sicherheit auch noch mal bei pastebin.

Nachteil des Skriptes: Der Backslash wird nicht berücksichtigt. Außerdem wäre ein iconv -t ascii nicht schlecht, um die exotischen Zeichen mit zu erwischen, die nicht im Skript selbst auftauchen. Ein paar Dummheiten sind außerdem auch noch drin: Z.B. wird ? am Ende durch _ ersetzt, dabei ist es da schon lange ein y.

Das Grundgerüst steht aber.

Faxen

Ich hatte noch eine AVM A1 ISDN [Fritz] (rev 02) herumliegen, die seit ewigen Zeiten nicht mehr verbaut war, weil inzwischen selbst mein Kaff DSL hat. Heute habe ich diese versuchsweise als Fax-Karte in einen Altrechner gesteckt, folgte für die Installation dieser Anleitung im Ubuntuusers Wiki und konnte nach ein wenig Gefummel die Karte dann auch unter Lucid 32 Bit in Betrieb nehmen. Ich notiere mir hier einmal die nötigen Schritte, weil nun bei jedem Kernelupdate neu kompiliert werden muss.

Vorarbeiten

Zuerst die benötigten Pakete installieren:

sudo apt-get install build-essential capiutils libcapi20-3 libcapi20-dev pppdcapiplugin

Das Paket pppdcapiplugin ist nicht unbedingt nötig – aber wer weiß, wie stabil DSL am Albrand läuft. Außerdem hab ich mir noch die folgenden Pakete geholt:

sudo apt-get install sffview mutt mailutils capisuite

Postfix, der mitgezogen wird, habe ich nur für den lokalen Betrieb eingerichtet. Meine Mails lese ich mit mutt, meine empfangenen Faxe mit sffview aus dem Verzeichnis

/var/spool/capisuite/users/dirk/received/

Modul einrichten

Aber nun zur eigentlichen Installation des Fax Gerätes:

https://belug.de/~lutz/pub/fcpci/fritz-fcpci-src-2.6.31_untested.tar.bz2 herunterladen und entpacken (bei mir nach ~/fritzcard). Dann in

~/fritzcard/fritz-fcpci-src-2.6.31_untested/fcpci_src

den Compiler anwerfen (und das nach jedem Kernelupdate erneut – seufz):

sudo make clean
sudo make all

Wie im Wiki beschrieben folgt nun das Kopieren der Module in das zum Kernel passende Verzeichnis sowie das Einrichten mit depmod:

sudo mkdir /lib/modules/`uname -r`/extra
sudo cp fcpci.ko /lib/modules/`uname -r`/extra/
sudo depmod -a

Das Modul nun entladen und wieder neu laden:

sudo modprobe -rf fcpci
sudo modprobe -v fcpci

Da es bei mir zu Fehlermeldungen kam, das Modul avmfritz blacklisten:

/etc/modprobe.d/blacklist-avmfritz.conf

anlegen und hier den Eintrag

blacklist avmfritz

hineinschreiben. Neu booten.

Capi einrichten

Einmalig ist nun die Einrichtung von capi vorzunehmen – der meiner Meinung nach pfriemeligere Teil, als das Comilieren und Kopieren von Kernelmodulen.

In der Datei

/etc/isdn/capi.conf

die Fritzcard durch Entfernen des # aktivieren. Das ist die Zeile

fcpci        –        –    –    –    –    –

Nun die Datei

/etc/modules

um die folgenden Einträge ergänzen:

capidrv
capi
fcpci

Jetzt nachschauen, ob capi läuft:

sudo capiinit
capiinfo

Die Ausgabe von capiinfo vergleichen mit capiinfo.txt oder mit dem ensprechendem Eintrag im Ubuntuusers-Wiki.

Weiter geht es dann mit der Einrichtung der Capi-Suite nach diesem Artikel im Ubuntuusers-Wiki:

In der Datei

/etc/capisuite/fax.conf

im Bereich user settings die entsprechenden Einstellungen vornehmen:

[dirk]
fax_numbers=“12345″
fax_stationID=“+49 7473 12345″
fax_headline=“Sent by CapiSuite from Ubuntu Lucid 10.04 LTS“
fax_email=“dirk“
fax_action=“MailAndSave“

Die Zeile fax_numbers habe ich zu Beginn falsch verstanden. Ich dachte hier müsse entweder die interne Rufnummer meiner ISDN Anlage hin (eine Zahl zwischen 11 und 14) oder meine vollständige Rufnummer – also wie unter fax_stationID. Es muss jedoch die MSN, auf die das Faxgerät hören soll, sein. Hierauf kam ich erst auf Grund der folgenden Meldungen in /var/log/capisuite.log

Connection object created for incoming call PLCI 257 from 9876 to 12345 CIP 0x4
call from 9876 to 12345 ignoring
rejecting with cause 1
Connection object deleted

Ein weiterer Grund, warum der Faxempfang auf die Nase fallen kann: In der Datei

/usr/lib/capisuite/incoming.py

nach einer Zeile mit einem ü suchen (ist ziemlich am Ende zu finden) und dieses durch ue ersetzen (Das ergibt dann „problems on Redhat, thx to Herbert Huebner for reporting“).

Nun capi als Dienst starten, indem in

/etc/default/capisuite

der folgende Eintrag vorgenommen wird:

run_capisuite_daemon=y

Dann den Dienst insgesamt neu starten:

sudo /etc/init.d/capisuite restart

Faxen – aus OOo und über die Shell

Für OOo noch einen Faxdrucker hinzufügen (das geht nicht über ssh, sondern nur direkt auf dem Fax-Rechner mit einer grafischen Oberfläche), durch den Befehl

/usr/lib/openoffice/program/spadmin

Hier dann „Neuer Drucker“, „eine Faxlösung anbinden“, „Standardtreiber“ und den Eintrag

/usr/bin/capisuitefax -q -d „(PHONE)“ „(TMP)“

ablegen. Das Fensterchen schließen und fertig.

Gefaxt wird nun über die Shell mit

capisuitefax -d Faxnummer_Zielgerät Datei(en)_im_PDF_Format

Mit

tail -f /var/log/capisuite.log
tail -f /var/log/capisuite.error

kann verfolgt werden, was genau beim Faxen passiert.

Gut, wer ein Internetfax oder eine helfende Hand mit funktionierendem Faxgerät zur Verfügung hat, um die Konfiguration nun auszuprobieren.

dhcp trouble

Meinem IPCop schienen die IPs ausgegangen zu sein und er weigerte sich, einem neuen Gerät eine IP aus der Liste der „verfallenen dynamischen Zuordnungen“ zu geben – warum auch immer.

Also bearbeitete ich auf dem IPCop die Datei

/var/state/dhcp/dhcpd.leases

und löschte eine (der nur scheinbar freien) IP händisch heraus, dann klappt wieder alles: Einstöpseln und das Neugerät bekommt einen Platz im Heimnetz.

Quelle: Hier gefunden und hier wird ausgeführt, dass das keine gute Idee ist.

Tastenkürzel bei Hardy

Ubuntu Hardy setze ich noch im Schulnetz ein und leider bringt dieses keine komfortable, auf den ersten Blick erkennbare Funktion in der grafischen Oberfläche mit, mit deren Hilfe man Tastenkürzel anlegen könnte. Neuere Ubuntu-Versionen besitzen unter /System /Einstellungen /Tastenkombinationen eine entsprechende Schaltfläche – ich glaube „Hinzufügen“. Hardy kann das trotzdem:

In der Shell den folgenden Aufruf eingeben:

gconf-editor

Derselbige startet dann.

Im Bereich /apps /metacity /global-keybindings wird im Bereich run_command_zahl eine Tastenkombination eingegeben.

Dann unter /keybindung_commands den auszuführenden Befehl eintragen.

OOo Mysql Connect mit ODBC (64 Bit)

Der Unterschied bei 64 Bit Clients zu der Konfiguration von 32 Bit Clients ist minimal und eigentlich ergibt sich dieser aus der odbcinst.ini selbst:

[MYSQL]
Description    = MYSQL
Driver        = /usr/lib
Driver64    = /usr/lib/odbc/libmyodbc.so
Setup        = /usr/lib
Setup64        = /usr/lib/odbc/libodbcmyS.so
UsageCount    =
CPTimeout    =
CPReuse        =
FileUsage    = 1

Wie leicht zu sehen ist wurden die Zeilen Driver und Driver64 sowie Setup und Setup64 vertauscht. Jetzt gilt es, die Zeichensatzprobleme in den Griff zu bekommen.

OOo Mysql Connect mit ODBC (32 Bit)

Für 32 Bit Systeme hatte ich den Zugriff eines lokalen OpenOffice Base als Client auf eine entfernte Mysql DB schon vor einiger Zeit mit Hilfe einiger Anleitungen konfiguriert bekommen. Aber nachdem viel Wasser den Neckar hinunter lief, war die Erinnerung schlicht weg. Hier die Wiederholung:

sudo apt-get install libmyodbc odbcinst unixodbc

Für den Komfort und Wohlfühlfaktor:

sudo apt-get install unixodbc-bin

Damit geht dann alles grafisch mit Hilfe von

sudo ODBCConfig

Aber das wäre ja öde. Also von Hand:

sudo vi /etc/odbc.ini

Hier dann die folgenden Einträge vornehmen:

[Name der Verbindung]
Description     = Beschreibung der Verbindung
Driver          = MYSQL
Server          = ip.adresse.mysql.server
Database    = datenbankname
Port              = 3306
Socket          =
Option         =
Stmt              =
PWD            = supergeheim
UID             = username

Dann die zweite Datei anlegen (sie existiert noch nicht):

sudo vi /etc/odbcinst.ini

Diese mit folgendem Eintrag füllen:

[MYSQL]
Description = MYSQL
Driver            = /usr/lib/odbc/libmyodbc.so
Driver64       = /usr/lib
Setup             = /usr/lib/odbc/libodbcmyS.so
Setup64        = /usr/lib
UsageCount    =
CPTimeout       =
CPReuse            =
FileUsage          = 1

Erstaunlich fand ich, dass Lucid 32 Bit hier die Angaben zu Driver64 und Setup64 wollte. Vorher kam bei mir keine Verbindung zustande.

Jetzt konnte ich eine Verbindung von OpenOffice.org Base zum entfernten MySQL Server herstellen. Ach ja: Derartige Spielchen mit entfernten MySQL Servern sind sicherlich ein Sicherheitsrisiko, wenn der Datenbankserver offen im Netz hängt. Die Lösung ist ein Tunnel mit Hilfe von OpenVPN, der hier aber nicht beschrieben ist.

Im nächsten Eintrag das Gleiche zum Thema 64 Bit – wenn es denn Unterschiede geben sollte.

Trafficverfolgung

Auf der Suche nach einem Progrämmchen, mit dem sich der Netzwerktraffic auf einer bestimmten Karte „mitlesen“ lässt, bin ich über das praktische, kleine Tool watch gestolpert. Der folgende Befehl reicht aus, um der ersten Netzwerkkarte hinterher zu schauen:

watch ifconfig eth0

Dabei blendet watch andere Angaben auf der Shell aus:

Selbstverständlich lassen sich damit auch die üblichen ps aux und grep Kombinationen einrichten – man muss hierzu lediglich die Befehlskombination in Anführungszeichen verpacken:

watch ‚ps aux | grep foo‘

Im default mode liest watch alle 2 Sekunden. Wer andere Zeiten will, kann diese mit -n angeben. Mehr hierzu in der man Page: http://ss64.com/bash/watch.html

Backup

Bisher nutzte ich rsync bzw. grsync für ein von Hand angestoßenes Backup meines /home Verzeichnisses auf ein über NFS gemountetes Volume auf meinem heimischen Backupserver.

Jetzt hab ich mir zusätzlich, für die tägliche Praxis, noch rsnapshot installiert und bin mehr als zufrieden.

sudo apt-get install rsnapshot

Konfiguration

Dann wird die zentrale Konfigurationsdatei angepasst. Hierbei muss als Trennzeichen immer Tab verwendet werden und nicht Space:

sudo vi /etc/rsnapshot.conf

Hier habe ich eine USB Festplatte als Backupmedium definiert, nachdem ich das Verzeichnis auf dieser angelegt hatte,

snapshot_root   /media/trekstore/rsnapshot/

und dann dafür gesorgt, dass rsnapshot nur arbeitet, wenn die Platte auch angeschlossen ist:

no_create_root  1

Im Bereich Interval wird angegeben, wie viele Backups jeweils gespeichert werden sollen:

interval        daily   7
interval        weekly  4
interval        monthly 6

Am Ende dieser Konfigurationsdatei können dann die Verzeichnisse (und auch Dateien sowie auszuschließende Dateien etc.) definiert werden, die in das Backup geschrieben werden:

backup  /home/dirk/.evolution/  localhost/
backup  /home/dirk/.mozilla/    localhost/
backup  /home/dirk/.ssh/        localhost/
backup  /home/dirk/MyPDA/       localhost/
backup  /home/dirk/openvpn/     localhost/
backup  /home/dirk/Dokumente/   localhost/
backup  /home/dirk/Public/      localhost/
backup  /home/dirk/Bilder/      localhost/
backup  /home/dirk/Desktop/     localhost/
backup  /home/dirk/Vorlagen/    localhost/

Der trailing Slash ist ebenso Pflicht wie die Angabe von localhost.

Ob man bei der Syntax etwas verbockt hat, zeigt ein

sudo rsnapshot configtest

Syntax OK sollte als Antwort kommen – oder die Zeilennummer mit dem Fehler.

Starten

Für den ersten Aufruf könnte man noch den Verbose Level in der Konfigurationsdatei höher einstellen, damit man nicht nur warten darf, sondern auch was sehen kann:

verbose         3

Per Hand gestartet mit

sudo rsnapshot daily

fängt das Programm nun an zu werkeln.

Da händisch anzustoßende Backups aber immer wieder in Vergessenheit geraten, sollten Backupjobs eigentlich über cron bzw. anacron gestartet werden. Zumindest war das meine Motivation bei der Installation von rsnapshot. Ich wählte für meinem Desktoprechner anacron – wer weiß, wann der läuft;  anacron holt dann vergessene Jobs nach.

Hierzu wird im Ordner

/etc/cron.daily

mit Rootrechten eine Datei mit dem Namen rsnapshot angelegt,

sudo vi /etc/cron.daily/rsnapshot

die den folgenden Inhalt hat:

#!/bin/sh
/usr/bin/rsnapshot daily

Für die Verzeichnisse

/etc/cron.weekly
/etc/cron.monthly

wird der Vorgang wiederholt und der Aufruf von rsnapshot entsprechend angepasst.

Mit

sudo su –

nun in den Rootaccount gewechselt und

crontab -e

aufgerufen. Das startet nano als Editor, womit jeder zu Recht kommen sollte.

Hier wurden dann die Aufrufzeiten für die Backups eingetragen:

# m h  dom mon dow   command
30 8,12,18 * * *      /usr/bin/rsnapshot daily
30 15           * * 0     /usr/bin/rsnapshot weekly
30 19         1 * *       /usr/bin/rsnapshot monthly

Wichtig ist, dass zwischen daily, weekly und monthly zeitlich genug Platz ist, sollten die Jobs durch einen dummen Zufall sich an einem Tag „zeitlich kreuzen“ und sich so gegenseitig behindern. rsnapshot würde in einem solchen Fall einen der Jobs schlicht auslassen.

Die Wirkung des eigenen Eintrags in die crontab kann man auf dieser Seite gut testen: http://www.hxpi.com/cron_sandbox.php und so sicher stellen, dass man keinen Mist einträgt.

Das war’s.

Der erste Aufruf von rsnapshot nimmt etwas Zeit in Anspruch – danach rast das Backup meiner rund 200GB zu sichernden Daten in weniger als 3 Minuten durch, weil nur veränderte Dateien geschrieben werden. Alle anderen Dateien werden nur als Hardlinks angelegt. rsnapshot spart mit diesem Verfahren ziemlich Platz und ich kann unterbrechungsfrei weiter arbeiten.

Weiter: Nachtrag zum Thema „Wo ist denn nun meine weekly.0 Sicherung?“

64 Bit Papierformat

US Letter PDF Dokumente so auszudrucken, dass diese zentriert auf DIN A4 erscheinen ist nicht nicht so trivial, wie ich dachte. Klar – es gibt die Möglichkeit den Job an Acrobat zu übergeben, das auch im Partner Repo von Ubuntu zu finden ist. Acrobat zentriert von sich aus, ist für 64 Bit Hardy aber nicht nativ zu haben. Das Gefummel mit getlibs wollte ich mir sparen.

Also dann halt mit evince.Theoretisch sollte der folgende Ansatz zum Erfolg führen:

Evince ignoriert die Angaben in /etc/papersize und auch in /usr/share/ghostscript/8.61/lib/gs_init.ps. Auf Teufel komm raus will das Ding die Angaben in /etc/environment haben und dort als

LC_PAPER=“de_DE.UTF-8″

dann sieht evince – so die Theorie – endlich ein, dass es sich auf einem deutschen Rechner befindet und behandelt PDFs dementsprechend.

Auf meinem 64 Bit Hardy ist dem nicht so. Ich konnte im Druckdialog von evince zwar A4 einstellen – aber das US Letter Dokument wurde nicht zentriert und der Druck sah schwer danach aus, also wäre US Letter schlicht auf ein zu großes Blatt gepresst worden.

Was ich dann probierte, war eine Umwandlung von US Letter nach DIN A4 mit psresize. Theoretisch klappt das wie folgt:

psresize -w279mm -h216mm -W297mm -H21cm -q input.pdf output.pdf

psresize kennt auch einige Kurzformen, die in der Manpage dokumentiert sind und dann wie folgt zu schreiben wären:

psresize -Pletter -pA4 in.pdf out.pdf

Installiert wird das Paket psresize unter Hardy mit

sudo apt-get install psutils

Leider war das aber auch nur pure Theorie: Hardy 64 Bit wandelt nicht – das PDF bleibt im Format US Letter.

Die einzige Lösung, die ich dann noch hatte, war der Druck mit gv – das dann endlich das Papier zentrierte und zwar offensichtlich gleich von sich aus, als default.

find ig

Zuerst ging es gerade darum, in einem Verzeichnisbaum heraus zu finden, wer dort alles was auch immer an Verzeichnissen sein eigenen nennt, wenn er in der Gruppe bsuser ist:

find /srv/www/bs -group bsuser -type d -ls

Dann mussten Verzeichnisrechte geändert, aber Dateirechte erhalten bleiben – und umgekehrt.

Dies ging mit find für die Ordner so:

find /pfad/zum/ordner -type d -exec chmod 770 {} \;

Und für die Dateien sah das dann so aus:

find /pfad/zum/ordner -type f -exec chmod 640 {} \;