Archiv ‘Linux’

Samstag, 11. Februar 2012

curlftps mit Zeichensatz-Problemen

Ich ziehe mir wöchentlich ein Backup eines produktiven Web-Servers auf meinen Testserver. Da Endbenutzer Dateien auf die Web-Site laden und Ordner erstellen können, gibt es dort mittlerweile auch Dateinamen mit Sonderzeichen wie äöü.

Die Kombination aus curlftps (zur Bereistellung eines FTP-Mounts welcher wie eine lokale Festplatte angesprochen werden kann, zu Gunsten von rsync, mit welchem ich nur neu hinzugekommene Dateien übertrage) hat nun aber zu Problemen bei der Darstellung der Dateien mit Sonderzeichen geführt. Anstelle des ä bei „Bräteln“ sah ich auf der Kommandozeile mit ls nur „Br?teln“.

Seit ich curlftps mit folgenden Optionen aufrufe, klappt es auch mit der korrekten Übertragung der Dateinamen mit Sonderzeichen:

/usr/bin/curlftpfs -o codepage=latin1 -o iocharset=utf8 -r -s 'server.tld' '/mnt/ftpBackup/server.tld'

Damit wird tarsnap hoffentlich auch nicht mehr mit folgenden Fehlermeldungen auffallen:

...
tarsnap: var/www/sites/server.tld/Bilder/T�ftelwettbewerb/: Can't translate pathname 'var/www/sites/server.tld/Bilder/T�ftelwettbewerb/' to UTF-8
...

Übrigens: Meine locale-Einstellungen schauen folgender massen aus:

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Tags: ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 22. Januar 2012

Eine Dropbox Gallery automatisiert herunterladen

Vor kurzem erhielt ich den Link auf die Bilder einer Weihnachtsfeier des vergangenen Jahres. Der Photograph benutzte dabei die Funktion von Dropbox, einen auf den Fileshare-Dienst geladenen Bilderordner über einen Link als Galerie zu veröffentlichen.

Da es mir zu blöd war, die hochauflösenden Bilder von Hand herunterzuladen, machte ich mich auf die Suche nach einem entsprechenden Script. Nach einigem Suchen wurde ich in einem Forumsartikel auf Dropbox selber fündig. Der in den Posts ursprünglich genannte Link auf eine Wiki-Seite von Dropbox funktionierte zwar nicht mehr, aber eine gute Seele hatte sich mittlerweile erbarmt und den Quellcode des Bash-Scriptes in einen Post geladen:

#!/bin/bash
#
# Call this with the URL of a public dropbox photo gallery as the first
# argument, a destination directory as the second argument, and optionally
# give a size (thumbnail|large|extralarge|original) for the third argument
# (defaults to original)
#
# Initial version written 1st June 2010, by Andrew Scheller
#
# Added quoting (so it works if urls or paths contain spaces) on 10th July 2010
#
# Tweaked to use either wget or curl, 17th January 2011
# Updated to current encoding of URLS, 11th October 2011 (python needed)
#

# get binary locations
WGET=$(which wget)
CURL=$(which curl)
if [ -z "$WGET" ] && [ -z "$CURL" ]
then
echo "Please install either wget or curl" >&2
exit 1
fi

if [ -z "$1" ]
then
echo "Required argument (gallery URL) not given"
exit 1
fi
GALLERY_URL=$1
if [ -z "$2" ]
then
echo "Required argument (destination dir) not given"
exit 1
else
if [ ! -d "$2" ]
then
echo "Destination dir '$2' doesn't exist"
exit 1
fi
fi
DESTDIR=$2
SIZE=original
if [ ! -z "$3" ]
then
if [[ "$3" == "thumbnail" || "$3" == "large" || "$3" == "extralarge" || "$3" == "original" ]]
then
SIZE=$3
else
echo "Size must be one of (thumbnail|large|extralarge|original)"
exit 1
fi
fi

TEMP=$(mktemp)
if [ "$WGET" ]
then
"$WGET" -q "$GALLERY_URL" -O "$TEMP"
elif [ "$CURL" ]
then
"$CURL" "$GALLERY_URL" -o "$TEMP" -s
fi
if [ $? -ne 0 ]
then
echo "Something went wrong! Couldn't download the gallery index page"
rm "$TEMP"
exit 1
fi
IFS='
'
FILENAMES=( $(grep "'filename': " "$TEMP" | cut -d"'" -f4) )
IMAGE_URLS=( $(grep "'$SIZE': " "$TEMP" | cut -d"'" -f4) )
rm "$TEMP"
TOTAL_FILENAMES=${#FILENAMES[@]}
TOTAL_IMAGES=${#IMAGE_URLS[@]}
if [ $TOTAL_FILENAMES -ne $TOTAL_IMAGES ]
then
echo "Something went wrong! Got list of $TOTAL_FILENAMES filenames but $TOTAL_IMAGES images"
exit 1
fi

for ((i=0;i<$TOTAL_IMAGES;i++))
do
FILENAME=$(python -c "print '${FILENAMES[$i]}'")
IMAGE_URL=$(python -c "print '${IMAGE_URLS[$i]}'")
echo "Downloading $FILENAME ($(($i + 1))/$TOTAL_IMAGES)"
if [ "$WGET" ]
then
"$WGET" -q "$IMAGE_URL" -O "$DESTDIR/$FILENAME"
elif [ "$CURL" ]
then
"$CURL" "$IMAGE_URLS" -o "$DESTDIR/$FILENAMES" -s
fi
done
exit 0

Wer das Script als Datei herunterladen möchte, bedient sich des folgenden Links:

2012-01-22-dropbox-gallery-download.sh

Tags: , , , ,
Labels: Linux

3 Kommentare | neuen Kommentar verfassen

Sonntag, 13. November 2011

Rekursives chmod von Dateien in einem Web-Verzeichnis mittels FTP-Kommandozeile

Weil der mit Mac OS X mitgelieferte Kommandozeilenclient ftp Dateiberechtigungen nicht rekursiv anpassen kann, wird lftp benötigt:

$ sudo port install lftp

Nach der Installation öffnet man folgendermassen die FTP-Verbindung zum betreffenden Server:

$ lftp
lftp :~> open emeidi.com
lftp emeidi.com:~> user benutzer passwort
lftp benutzer@emeidi.com:~> ls
...

Nachdem man sich in das entsprechende Verzeichnis durchgehangelt hat, reich ein

lftp benutzer@emeidi.com:~> chmod -R 777 .

aus, um die Anpassungen vorzunehmen. Da der entsprechende Ordner fast 10’000 Dateien enthielt, kam jedes GUI ins stottern — der Kommandozeilenclient verrichtete seine Arbeit wie erwartet rasch und ohne Komplikationen.

Tags: , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 11. September 2011

MySQL meldet „Got error 28 from storage engine“

Tritt dieser Fehler in den Error-Logs auf, handelt es sich höchstwahrscheinlich um eine volle /tmp-Partition:

...
/dev/sda8             361M  359M     0 100% /tmp
...

Quelle: database error „Got error 28 from storage engine query: SELECT DISTINCT(p.perm)“

Tags:
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 4. September 2011

Wie man Finnen so richtig ärgert

people started sending Linus money directly. I’m not sure they did it out of gratitude, however, since they usually sent personal checks from the US. As Linus quickly learned, Finnish banks really, really hate checks. Especially personal checks. Particularly personal checks from the US. They invent all sorts of bureaucratic pit-falls and rules and fees to make it difficult and expensive to use checks. If you want to make trouble for a Finn, send him a personal check from the US. And that’s not a joke.

Quelle: Linux Anecdotes

Tags: ,
Labels: Funny, Linux, USA

Keine Kommentare | neuen Kommentar verfassen

Samstag, 27. August 2011

Mehrere private SSH-Schlüssel auf einem Rechner?

Kein Problem! Man benutze hierzu einfach Einträge in der Datei ~/.ssh/config à la:

Host github github.com
Hostname github.com
IdentityFile ~/.ssh/id_rsa_git

Quelle: Best way to use multiple ssh private keys on one client

Tags: , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Samstag, 27. August 2011

Debian unter VMware meldet „Waiting for root file system“

Gestern wurde der VMware-Server aktualisiert, unter welchem eine von mir betreute Debian GNU/Linux-Installation läuft. Wie ich erst jetzt realisiert habe, funktioniert der Server seit dem Update nicht mehr.

Nachdem ich mich per VPN über den Terminalserver und den VMware vSphere Client auf die Konsole der Kiste eingewählt und die Kiste neu gestartet hatte, lächelte mich folgende Fehlermeldung an:

Waiting for root file system

Nach einer Google-Suche und einiger Lektüre stiess ich auf einen erhellenden Artikel “Waiting for root file system” caused by out dated VMware Server, dessen Lösung für mich zwar nicht anwendbar war, mich aber immerhin darauf brachte, die in GRUB hinterlegten Referenzierungen auf die Partitionen zu überdenken.

Und siehe da: Zuerst betätigte ich beim GRUB-Screen zuerst einmal den Cursor, um den automatischen Start des Betriebssystems zu verhindern. Anschliessend bearbeitete ich den standardmässig aktivierten Eintrag mit Druck auf die Taste e. Hier wechselte ich folgende Angaben:

kernel          /boot/vmlinuz-2.6.26-2-686 root=/dev/sdb2 ro

auf

kernen          /boot/vmlinuz-2.6.26-2-686 root=/dev/sda2 ro

und einem anschliessenden Enter gefolgt von b liess die Kiste wieder booten.

Als nächstes musste ich die soeben gemachte Anpassung noch fix in /boot/grub/menu.lst vornehmen. Beim nächsten Neustart lief alles wieder wie gewohnt.

Tags:
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 31. Juli 2011

TeX Live 2011 sucks

Da wollte ich also gestern schnell mal TeX Live 2011 auf dem Windows-Laptop meiner Freundin installieren, scheiterte schlussendlich aber kläglich …

Zuerst habe ich mir install-tl.zip für Windows heruntergeladen, entpackt und danach die Datei install-tl.bat gestartet. Die Installation lief durch, hing aber schlussendlich bei „Finished downloading“. Erst viel später merkte ich, dass im Hintergrund ein Kommandozeilenfenster geöffnet war und irgendwas von mir wollte.

Der zweite Installationsversuch klappte ebenfalls nicht, obwohl alle erneut Pakete heruntergeladen werden mussten (!). Die Einträge im Startmenu fehlten.

Als ich deshalb den Installer unter C:\texlive\2011\ erneut ausführen wollte (ein zweiter Durchlauf kann nie schaden), erschien folgende Fehlermeldung:

Cannot open 'C:/texlive/2011/tlpkg/installer/texlive.png' in mode 'r' at C:\texlive\2011\tlpkg\tlperl\lib/Tk/Image.pm line 21.

Nach etwas pröbeln kopierte ich kurzerhand den von der Web-Site heruntergeladenen install-Ordner unter ~/Downloads über den Ordner in C:/texlive/2011/tlpkg/installer/. Damit die Pakete dabei aber nicht erneut heruntergeladen werden mussten, startete ich den Installer von der Kommandozeile mit

install-tl.bat -in-place

Die Installation lief nun das erste Mal richtig durch, indem TeX Live auch klar sichtbar konfiguriert wurde. Der Ordner im Startmenu tauchte aber auch hier nicht auf.

Unter C:\texlive\2011\ fand ich eine Taskbar-Applikation, welche mir so Zugriff auf TeXWorks verschaffte. Die Kompilierung einer Beispieldatei schlug grandios fehl, die Fehlermeldung lautete:

kpathsea: Running mktextex latex.ini
 Running: pdftex --ini --jobname=latex --progname=latex
-translate-file=cp227.tcx
*latex.ini  *latex.ini

 (Press Enter to retry, or Control-Z to exit)
 Please type another input file name:
 ! Emergency stop.
 <*> *latex.ini

 No pages of output.
 Transcript written on latex.log.

Offenbar ist dieses Problem im Netz nicht sonderlich bekannt, eine Google-Suche lieferte nur bruchstückhafte Hinweise auf die Ursache (und Lösung) des Problems.

Indem ich

fmtutil --missing

ausführte, erhielt ich die Fehlermeldung präsentiert, dass mangels .ini-Dateien 37 Format-Dateien nicht hätten erstellt werden können. Eine Beispielsuche nach latex.ini zeigte mir, dass die Datei unter C:\texlive\2011\ vorhanden war — doch wieso fand sie fmtutil nicht?!

Über Mailinglistenkommentare führte ich folgenden Befehl aus, welcher aber ohne Output hängen blieb:

tlmgr generate --rebuild-sys language

Die Anpassung auf

tlmgr generate language

lief zwar durch, brachte aber keine Besserung.

Lösungsansätze

Die Ursache allen Übels scheint zu sein, dass folgender Befehl nichts zurückgibt:

kpsewhich latex.ini

Im Mailinglisten-Thread [tex-live] Error : „I can’t find the format file `latex.fmt‘! sind die Fehlermeldungen besprochen, obwohl die Ursache hier eine andere zu sein scheint.

Hellhörig macht mich nur:

Normally the TEX… variables are not set in the shell but by
loading texmf.cnf in the tex-related programs.
You should use kpathsea debugging to see what is really
going on.

Ein anderer Ansatz könnte folgende Unterlassung sein:

Administrator privileges on Vista and Windows 7: even when running as administrator, if you want to install for all users, right-click install-tl.bat and select ‘Run as administrator’. The same is needed when running tlmgr (TeX Live Package Manager).

Quelle: TeX Live Windows installation

Tags: , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Samstag, 23. Juli 2011

Mac OS X 10.7 Lion ohne Samba?!

As part of the Lion release, Apple switched their SMB server from the open-source Samba implementation to an internal implementation.

Quelle: Update to Mac users on OS X 10.7 (Lion) support on Sonos – Sonos Forums

Irgendwie ist das völlig an mir vorbeigezogen … aber anscheinend soll die GPLv3 Schuld daran sein. Stattdessen werkelt unter Lions Haube nun SMBX, ein von Apple intern entwickelte SMB1/2-Implementation.

Tags: , , , ,
Labels: Apple, Linux

Keine Kommentare | neuen Kommentar verfassen

Montag, 13. Juni 2011

cacti pingt nicht mehr

Heute habe ich mich endlich einem Problem angenommen, das mich mit meiner Cacti-Installation seit mehr als einem Jahr plagt: Die Ping-Werte für Google werden nicht mehr aufgezeichnet.

Nachdem ich unter

  1. Console
  2. System Utilities
  3. View Cacti Log File

nach „ping“ gesucht hatte und feststellen musste, dass das Script ~/cacti/scripts/ping.pl permanent „U“ als Wert zurücklieferte, begann das Debugging.

Auch die manuelle Ausführung von

~/cacti/scripts/ping.pl www.google.com

brachte ein „U“ als Resultat hervor. Was cheibs?

Im Grunde ruft das Perl-Script folgenden Kommandozeilenbefehl auf und filtert im Anschluss den Rückgabe wert:

ping -c 1 www.google.com | grep icmp_seq | grep time

Als ich dies auf der Kommandezeile ausführte, wurde ein leerer Wert zurückgegeben.

Nachdem ich ein Blick auf das Resultat von

$ ping -c 1 www.google.com
PING www.l.google.com (74.125.79.104) 56(84) bytes of data.
64 bytes from ey-in-f104.1e100.net (74.125.79.104): icmp_req=1 ttl=53 time=34.6 ms

--- www.l.google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 34.695/34.695/34.695/0.000 ms

geworfen hatte, war mir sofort klar, was das Problem war: grep nach icmp_seq kann nicht von Erfolg gekrönt sein, weil hier offenbar icmp_req steht.

Das Problem ist im ping.pl does not account for ping using icmp_req rather than icmp_seq in some versions of ping festgehalten: Offenbar gab es bei ping irgendwann einmal eine Anpassung am Code, die nur noch diese Ausgabe zur Folge hatte.

Nach einem Blick auf den Patch nahm ich die Anpassung an ~/cacti/scripts/ping.pl selber vor — irgendwie einfach ein wenig anders als vorgeschlagen:

...
open(PROCESS, "ping -c 1 $host | grep -E 'icmp_(r|s)eq' | grep time |");
...

Damit klappte es wieder.

Nachtrag

Unter einer Synology DiskStation klappt es auch trotz dieser Anpassung nicht. Der Ping-Befehl gibt folgendes aus:

ping -c 1 192.168.8.8
PING 192.168.8.8 (192.168.8.8): 56 data bytes
64 bytes from 192.168.8.8: seq=0 ttl=64 time=0.223 ms

Keine Spur von icmp_seq, stattdessen steht dort nur seq. Somit passt man das Script finalerweise folgendermassen an:

...
open(PROCESS, "ping -c 1 $host | grep -E '(r|s)eq' | grep time |");
...

Tags: , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen