Posts Tagged ‘Shell’

Samstag, 21. Mai 2011

Kodierung von Windows-Dateinamen unter Linux anpassen

Heute hiess es ernst: Auf einem meiner Teilzeitstellen wurde der Dateiserver migriert: Die Nutzerdaten wurden von einem uralten Dell-Server auf einen neueren HP-Server kopiert. Auf der Dell-Kiste lief Samba 2.2, auf dem HP-Server Samba 3.2.

Wie es die Samba-Konfiguration des alten Server so wollte, waren alle Datei- und Ordnernamen mit der Windows-Codepage 850 abgelegt. Erst seit Version 3 legt Samba Dateien intern mit UTF-8-Kodierung ab (falls nicht anders eingestellt).

Zehntausende von Dateien von Hand umzubenennen wäre hirnverrückt gewesen — doch wofür gibt es das Tool convmv?

Installation

Nachdem der Quelltext heruntergeladen worden war, konnte ich das Tool folgendermassen installieren:

# wget "http://www.j3e.de/linux/convmv/convmv-1.14.tar.gz"
# tar xvzf convmv-1.14.tar.gz
# cd convmv-1.14
# make
# make install

Anwendung

Anschliessend startete ich das Tool unter /home/public:

# convmv -f cp850 -t utf8 -r .

Nachdem ich mich an Hand der Testausgabe abgesichert hatte, dass die Sonderzeichen in den Dateinamen tatsächlich korrekt nach UTF-8 übertragen wurden, führte ich den Befehl noch einmal aus — doch dieses Mal wurden die Dateinamen auch wirklich angepasst:

# convmv -f cp850 -t utf8 -r --notest .

Tags: , , , , ,
Labels: Linux

1 Kommentar | neuen Kommentar verfassen

Samstag, 12. März 2011

IMAP-Mailbox lokal sichern

Am 23. März 2011 ist es soweit: Ich erhalte endlich das Diplom zu meinem Studienabschluss in die Hand gedrückt. Da ich seit dem 31. Januar 2011 von der Universität Bern exmatrikuliert bin, ist es nur eine Frage der Zeit, bis mein Mailkonto mario.aeby@students.unibe.ch aufgehoben wird.

Damit ich ein vollständiges und sicheres Backup meines gesamten E-Mail-Verkehrs auf meiner lokalen Festplatte ablegen kann, verwende ich mit imapbackup.py ein frei aus dem Internet verfügbares Python-Script, welches — einmal aufgerufen — standardkonforme .mbox-Dateien im aktuellen Verzeichnis ablegt.

Nachdem man das Script heruntergeladen und vorzugsweise im eigenen Home-Verzeichnis abgelegt hat, geht man folgendermassen vor:

$ python ~/imapbackup.py -s mail.unibe.ch -u ma02i093

Tags: , , , ,
Labels: Allgemein

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 9. Januar 2011

Digitaler Mitschnitt eines Telefonanrufs unter Mac OS X

Soeben packte mich der Reiz, einen Telefonanruf (auf eine nicht mehr gültige Rufnummer, notabene) mitzuschneiden und zwecks Belustigung an meine Kollegen zu versenden.

Unter Mac OS X absolut kein Problem. Man benötigt:

Nachdem man sowohl Skype wie auch Audio Hijack installiert hat, startet man zuerst Audio Hijack und eröffnet eine neue Session, die auf die Applikation „Skype“ zeigt. Ein Klick auf den Knopf Hijack startet Skype und macht Audio Hijack bereit für den Mitschnitt.

Nachdem man die Handy-Nummer in das Wählfeld von Skype eingegeben hat (aber noch ohne den Wählen-Knopf zu drücken), muss man die Audio Hijack-Aufnahme mittels Record starten. Anschliessend wechselt man umgehend zurück nach Skype und wählt die Nummer.

Die Audiodaten, die über den Lautsprecher ertönen, werden im Hintergrund digital mitgeschnitten und im Session-Profil angegeben Ordner im AIFF-Format abgelegt.

Nachdem die Aufnahme abgeschlossen wurde, konvertiert man sich die übergrosse AIFF-Datei ins MP3-Format, damit die Mailserver sich nicht verschlucken:

$ ffmpeg -i Skype\ 20110109\ 1702.aiff -f mp3 -ab 192k -ar 44100 41790000000-2011-01-09.mp3

Es erschien bei mir zwar die Fehlermeldung

[libmp3lame @ 0x189ac00]lame: output buffer too small (buffer index: 8777, free bytes: 1015)
Audio encoding failed

doch das MP3 liess sich mit VLC problemlos abspielen.

Tags: , , , , , , , ,
Labels: Allgemein

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 22. Dezember 2010

.bashrc wird beim Login nicht gelesen/ausgeführt

Da habe ich also all die nützlichen Anweisungen in meine ~/.bashrc eingefügt, damit beim Shellzugriff auf einen Linux-Server einerseits die Listings schön farbig ausgegeben werden, andererseits Nachfragen beim Löschen und Verschieben von Dateien erscheinen und so sicherstellen, dass ich aus Flüchtigkeit keine Dummheiten begehe:

...
export CLICOLOR=1
export LSCOLORS=DxGxcxdxCxegedabagacad
 
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
 
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

Doch was ist los? Nach einem Login bleiben die Terminalfarben bei einem Listing eines Verzeichnisses … weiss auf schwarz!

Ein kurzer Test mittels

$ . ~/.bashrc

Quelle: Kurztipp: bash neustarten und .bashrc neu einlesen

zeigt dann aber rasch, dass die Farben wirklich erscheinen — wenn denn .bashrc auch beim Login geladen werden würde.

Ein Vergleich mit einem anderen, ordungsgemäss funktionierenden Debian GNU/Linux zeigt das Problem umgehend auf: Es fehlt die ~/.profile. Nachdem ich diese Datei erstellt und mit folgenden Zeilen gefüllt habe, funktioniert das Farbfernsehen per SSH dann auch ab dem ersten Login:

# ~/.profile: executed by Bourne-compatible login shells.

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

mesg n

Quelle: bashrc not getting read at login

Tags: , ,
Labels: IT, Linux

2 Kommentare | neuen Kommentar verfassen

Samstag, 11. Dezember 2010

realpath() des aktuellen Verzeichnisses in der Linux Shell

readlink -f .

Quelle: Bash equivalent for PHP realpath() | Andy Skelton

Tags: ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Samstag, 14. August 2010

E-Mails mit imapfilter serverseitig ablegen

Seit vielen Jahren verwende ich das IMAP-Protokoll zum Zugriff auf alle meine Mail-Adressen. Doch leider nimmt die Mailflut immer mehr zu, und das stört.

Bis zum heutigen Tag habe ich mich „Regeln“ in Apple Mail beholfen, um Mails beim Eintreffen in die entsprechenden Unterordner abzulegen. Seit ich aber einen Laptop und ein iPhone besitze und zunehmend auch unterwegs Mails abrufe, wäre es äusserst nützlich, wenn ich eingehende Mails vollständig automatisch serverseitig vorsortieren und in Unterordner ablegen könnte.

Bisher war ich dazu genötigt, die Regeln von Apple Mail auf meiner Workstation zu Hause auf den Laptop zu übertragen. Immer wieder habe ich mir dabei vorgenommen, diese Redundanz aufzuheben. Heute ist es nun soweit!

Was tun? Wer einen dedizierten Mailserver im Keller stehen hat, wird sich auf procmail-Scripts stützen (ich habe auch schon darüber berichtet), die eingehende E-Mails nach bestimmten Kriterien in Unterordner verschieben. Dies ist für mich keine Option, weil mein von Genotec betriebener Mailserver keinen Shellzugriff bietet. Auch bietet der Hoster keine anständige Möglichkeit an, serverbasierte Filter einzurichten.

Heute nun bin ich via einer diesbezüglichen Frage auf der Community Serverfault auf imapfilter gestossen.

Installation

Zuerst installiert man sich das Paket unter Debian auf einem ans Internet angeschlossenen Server, der nonstopp läuft:

apt-get install imapfilter

Filterregeln erstellen

Anschliessend schreibt man sich mit der Sprache Lua (vgl. die Beispiele Rotating email into your inbox using imapfilter sowie sample.config.lua.txt) entsprechende Filter-Rezepte und legt diese nach einem chmod 600 * im Homefolder beispielsweise unter ~/.imapfilter/filter/ ab.

Nachfolgend ein solches „Rezept“ für einen meiner Mailkonti:

mbox = IMAP {
    server = 'mail.server.tld',
    username = 'user@domain.com',
    password = '********',
    ssl = 'ssl3'
}

-- Facebook
messages = mbox.INBOX:contain_from('facebookmail.com')
messages:move_messages(mbox['Facebook'])

...

-- AHC
messages = mbox.INBOX:contain_field('List-ID','gi-ch.googlegroups.com')
messages:move_messages(mbox['AHC'])

...

Wie man anhand dieses Beispiel sieht, kann man jedes beliebige Feld des Mail-Headers auswerten. Als Hilfe für alle verfügbaren contain_X-Befehle sei auf die Dokumentation unter imapfilter_config – imapfilter configuration file verwiesen. Es gibt auch noch andere Befehle, die es ermöglichen, noch deutlich feingranuliertere Regeln zu programmieren.

Hat man wie ich mehrere Mail-Konti, die abgegrast werden sollen, erstellt man entsprechende Filter für jedes Konto und legt diese im selben Ordner unter einem aussagekräftigen Namen ab.

Shell-Script schreiben

Damit man diese nun alle auf’s Mal durchackern lassen kann, empfiehlt sich, ein kleines Shell-Script zu schreiben:

#!/bin/sh

IMAPFILTER=`which imapfilter`
RECIPESROOT="~/.imapfilter/filter"

cd $RECIPESROOT

for RECIPE in *
do
        #echo "Running $IMAPFILTER -c '$RECIPESROOT/$RECIPE'"
        $IMAPFILTER -c "$RECIPESROOT/$RECIPE"
done

exit 0

Cron-Job einrichten

Anschliessend richtet man einen Cron-Job ein, der die Mailserver beispielsweise alle 5 Minuten nach neuen Nachrichten abfragt und je nachdem die Filterregeln anwendet:

*/5 * * * *	/usr/local/bin/imapfilter.sh

Fertig ist der kostenlose, transparente Filterservice für eingehende Mails.

Tags: , , ,
Labels: Linux

3 Kommentare | neuen Kommentar verfassen

Samstag, 20. Februar 2010

webkit2png installieren und benutzen

Diese Woche wollte ich mir von einem guten Dutzend Web-Sites Screenshots erstellen. Unter Mac OS X ist das dank dem nützlichen Tool Paparazzi! absolut kein Problem. Die Applikation greift auf WebKit, Apples quelloffene Rendering-Engine zurück, um die Web-Seiten zu laden und fertigt danach ein Bildschirmfoto an. Leider lässt sich diese Applikation aber nicht automatisieren — für ein Foto einer bestimmten Seite mag sie sich durchaus eignen, doch ein dutzend Fötelis verlangt tüchtig Handarbeit.

Deshalb gibt es das pythonbasierte Kommandozeilen-Tool webkit2png. Um es unter Mac OS X 10.4 zum Laufen zu bringen, sind aber noch einige Vorbereitungen nötig. Namentlich muss pyObjC heruntergeladen, kompiliert und installiert werden, um auf Cocoa zurückgreifen zu können (Vorausbedingung: svn ist auf dem System bereits installiert — die neueste Version von Python schadet garantiert auch nicht):

# cd /tmp
# svn co http://svn.red-bean.com/pyobjc/branches/pyobjc-1.4-branch/
# cd pyobjc-1.4-branch
# python setup.py bdist_mpkg --open

Nachdem der Installer kompiliert wurde, öffnet sich automatisch ein von Apple-Installern gewohntes Fenster im GUI, das durch die Installation führt.

Sobald die „Python-Objective C-Brücke“ installiert wurde, kann man sich webkit2png herunterladen:

$ cd ~
$ wget "http://www.paulhammond.org/2009/03/webkit2png-0.5/webkit2png-0.5.txt"
$ mv webkit2png-0.5.txt webkit2png
$ chmod 755 webkit2png

Anschliessend fügt man die URLs der zu photographierenden Web-Sites zeilenweise in eine Textdatei ein und kickt die Foto-Session an:

$ cat urls.txt | xargs python ~/webkit2png -F

Nach wenigen Sekunden/Minuten ist das Verzeichnis mit Bildschirmfotos gefüllt.

Tags: , , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Samstag, 8. August 2009

Auf einen Rutsch alle neuen Dateien ins SVN (svn add)

Selbstverständlich kann man sich streiten, eine Dokuwiki ins SVN zu laden, doch da ich die nächste Woche offline in Frankreich verbringen werde, möchte ich einen einfachen Weg haben, um die an der Côte d’Azur erfassten Änderungen einfach in die Serverinstallation zurückzuspielen.

Doch da ich in der Zwischenzeit noch an einigen Zusammenfassungen weitergeschrieben habe, wurde es nötig, dass ca. 20 neu hinzugekommene Dateien noch ins Repository eingecheckt werden sollten. Wie macht man das möglichst einfach?

Ich habe mich für folgenden Befehl entschieden, den ich im root des versionierten Verzeichnisses ausführte:

svn status | grep "^?" | cut -d ? -f 2 | xargs svn add

Ein

svn add *

ginge natürlich auch, spuckt aber hässliche Fehlermeldungen aus.

Habt ihr einen noch effizienteren Tipp?

Tags: , ,
Labels: Linux

2 Kommentare | neuen Kommentar verfassen

Samstag, 20. Juni 2009

Systeminformationen in der Linux-Shell auslesen

Da unser Printserver auf der Arbeit in letzter Zeit oftmals einen ausgereizten Arbeitsspeicher meldet, werde ich heute ein, zwei zusätzliche Riegel RAM installieren gehen. Doch was für Module muss ich in unserem Ersatzteil-Lager suchen? Mit einem SSH-Zugang ist es absolut kein Problem, alle Fragen zu klären:

PCI-Bus auslesen

Zeigt die Chipsets und alle verbauten PCI-Karten an:

$ lspci
00:00.0 Host bridge: Intel Corporation 82815 815 Chipset Host Bridge and Memory Controller Hub (rev 04)
00:02.0 VGA compatible controller: Intel Corporation 82815 Chipset Graphics Controller (CGC) (rev 04)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 02)
00:1f.0 ISA bridge: Intel Corporation 82801BA ISA Bridge (LPC) (rev 02)
00:1f.1 IDE interface: Intel Corporation 82801BA IDE U100 Controller (rev 02)
00:1f.4 USB Controller: Intel Corporation 82801BA/BAM USB Controller #1 (rev 02)
00:1f.5 Multimedia audio controller: Intel Corporation 82801BA/BAM AC'97 Audio Controller (rev 02)
02:08.0 Ethernet controller: Intel Corporation 82801BA/BAM/CA/CAM Ethernet Controller (rev 01)

CPU-Eigenschaften auslesen

Verbaut ist also ein Pentium III („model name“) mit 1 GHz („cpu MHz“):

$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 8
model name      : Pentium III (Coppermine)
stepping        : 10
cpu MHz         : 996.828
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr sse up
bogomips        : 1995.74
clflush size    : 32
power management:

RAM-Typ

Auf das Tool dmidecode bin ich über der Blog-Artikel Linux: Check Ram Speed and Type aufmerksam geworden. Wie die nachfolgende Ausgabe zeigt, ist momentan ein RAM-Baustein verbaut – und zwar ein Riegel SDRAM 133 MHz mit einer Kapazität von 256 MB. Weiter hat es anscheinend noch Platz für zwei weitere Module („Size: No Module Installed“). Um was für Speicher es sich beim letzten Eintrag handelt, weiss ich hingegen nicht.

# dmidecode --type 17
# dmidecode 2.9
SMBIOS 2.3 present.

Handle 0x0023, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0021
        Error Information Handle: Not Provided
        Total Width: 64 bits
        Data Width: 64 bits
        Size: 256 MB
        Form Factor: DIMM
        Set: None
        Locator: XMM1
        Bank Locator: Not Specified
        Type: SDRAM
        Type Detail: Synchronous
        Speed: 133 MHz (7.5 ns)
        Manufacturer: JEDEC ID:C1 49 4E 46 49 4E 45 4F
        Serial Number: EEC20808
        Asset Tag: Not Specified
        Part Number: HYS64V32300GU-7.5.

Handle 0x0024, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0021
        Error Information Handle: Not Provided
        Total Width: Unknown
        Data Width: Unknown
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: XMM2
        Bank Locator: Not Specified
        Type: SDRAM
        Type Detail: Synchronous
        Speed: Unknown
        Manufacturer: JEDEC ID:
        Serial Number:  
        Asset Tag: Not Specified
        Part Number:  

Handle 0x0025, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0021
        Error Information Handle: Not Provided
        Total Width: Unknown
        Data Width: Unknown
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: XMM3
        Bank Locator: Not Specified
        Type: SDRAM
        Type Detail: Synchronous
        Speed: Unknown
        Manufacturer: JEDEC ID:
        Serial Number:  
        Asset Tag: Not Specified
        Part Number:  

Handle 0x0027, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0022
        Error Information Handle: Not Provided
        Total Width: 4 bits
        Data Width: 4 bits
        Size: 512 kB
        Form Factor: Chip
        Set: None
        Locator: XU15
        Bank Locator: Not Specified
        Type: Flash
        Type Detail: Non-Volatile
        Speed: Unknown
        Manufacturer: Not Specified
        Serial Number: Not Specified
        Asset Tag: Not Specified
        Part Number: Not Specified

Nachtrag

Wie ich vor Ort feststellen musste, unterstützt Intels 815er Chipset nur maximal 512MB RAM – egal, ob im dritten DIMM-Slot noch 256MB stecken oder nicht …


216-Memory Size Exceeds Maximum Supported
Originally uploaded by emeidi

Tags: , ,
Labels: IT, Linux

3 Kommentare | neuen Kommentar verfassen

Dienstag, 16. Juni 2009

postfix unter Mac OS X 10.4 aktivieren (inklusive SMTP-Relay)

Obwohl es ein kostenpflichtiges GUI zur Konfiguration des postfix-Mailservers gibt, machen wir als Geeks die Sache lieber von Hand auf der Kommandozeile.

Da Apple postfix bereits mit der Standardinstallation von Mac OS X mitliefert, den Daemon aber nicht aktiviert, sind die Arbeiten relativ trivial. Wer nicht das erste Mal mit dem CLI in Berührung kommt und sich mit sudo und vim auskennt, sollte den SMTP-Server innert 5-10 Minuten am Laufen haben.

Wichtig ist, dass hier nicht der lokale SMTP-Server aktiviert, sondern auch gleich ein relayhost eingerichtet wird. In meinem Fall ist das der SMTP-Server meines ISPs Cablecom. Damit ist es möglich, Mails auch tatsächlich in die weite Welt hinauszusenden. Vorausgesetzt, man verfügt über einen SMTP-Account bei seinem ISP.

/etc/hostconfig

...
MAILSERVER=-YES-
...

/etc/postfix/main.cf

...
myhostname = mad4you.homeip.net
mydomain = mad4you.homeip.net
myorigin = $myhostname
...
inet_interfaces = localhost
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks_style = host
mynetworks = 127.0.0.0/8
...
relayhost = smtp.hispeed.ch
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
...

/etc/postfix/sasl_passwd

smtp.hispeed.ch user@hispeed.ch:geheim

Sicherheitsvorkehrungen:

$ chmod 600 /etc/postfix/sasl_passwd
# chown root:root /etc/postfix/sasl_passwd

Anschliessend muss die Passwort-Datei gehasht werden, da die Angaben sonst nicht von postfix interpretiert werden:

# postmap /etc/postfix/sasl_passwd

Neustart des Daemons

# sudo launchctl start org.postfix.master

Test

$ echo `date` | mail -s "Dies ist ein Test-Betreff von der Kommandoziele" spam@eMeidi.com

Ein Blick in /var/log/mail.log zeigt umgehend, ob was rausgegangen ist oder nicht:

$ tail -f /var/log/mail.log
...
Jun 16 15:03:00 BETA postfix/master[1314]: daemon started -- version 2.1.5
Jun 16 15:03:02 BETA postfix/pickup[1315]: 058FE1A17BFE: uid=501 from=
Jun 16 15:03:02 BETA postfix/cleanup[1316]: 058FE1A17BFE: message-id=<20090616130300.058FE1A17BFE@mad4you.homeip.net>
Jun 16 15:03:02 BETA postfix/qmgr[1319]: 058FE1A17BFE: from=, size=342, nrcpt=1 (queue active)
Jun 16 15:03:04 BETA postfix/smtp[1320]: 058FE1A17BFE: to=, relay=smtp.hispeed.ch[213.46.255.24], delay=4, status=sent (250 2.0.0 4d311c07P0MzJ8L01d33xm message accepted for delivery)
Jun 16 15:03:04 BETA postfix/qmgr[1319]: 058FE1A17BFE: removed
Jun 16 15:04:00 BETA postfix/master[1314]: master exit time has arrived
...

Quellen

Tags: , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen