Archiv ‘Linux’

Sonntag, 9. Juni 2013

SNMP unter Mac OS X 10.8 Mountain Lion aktivieren

Mac OS X 10.8 (Mountain Lion) bringt Out-of-the-box alles mit, um einen SNMP-Server bereitzustellen. In Verbindung mit cacti zeichne ich so in Echtzeit Systeminformationen meines Mac minis, MacBook Airs und Stephanies Mac mini auf.

Wer Rechner ausschliesslich in seinem heimischen LAN betreibt, kann nachfolgende Minimal-Konfiguration einrichten, damit cacti auf einem Drittserver per SNMP v1 und ohne Passwort darauf zurückgreifen kann:

/etc/snmp/snmpd.conf (Desktop-Rechner)

sysContact  Vorname Nachname 
sysLocation Strasse Strassennummer, PLZ Ort

rocommunity public

includeAllDisks 10%
load    30 10 5

Auf einem portablen Gerät würde ich SNMP abriegeln und den Zugriff nur mittels Benutzernamen und Passwort zugänglich machen. Verwendet man obige Lösung, kann im Flughafen-WiFi oder im Uni-WiFi jedes Script-Kiddie mit nmap-Portscans auf den SNMP-Server aufmerksam werden und mehr oder weniger sensitive Informationen abrufen.

Hierzu eignet sich folgende Konfiguration:

/etc/snmp/snmpd.conf (portabler Rechner)

createUser <username>     MD5 "<password>" DES "<secret>"
authuser   read -s usm  <username> priv  .1

sysContact  Vorname Nachname 
sysLocation Strasse Strassennummer, PLZ Ort

includeAllDisks 10%
load    30 10 5

Sowohl password als auch secret können frei gewählt werden (alphanumerische Zeichenfolge).

Quelle: Setup SNMP V3 USM with encryption.

Daemon (neu) starten

Nach der Konfigurationsanpassung heisst es, den SNMP-Server (neu) zu starten. Dies habe ich mit folgendem Script automatisiert:

#!/bin/sh

echo "Stopping SNMP daemon ..."
sudo launchctl unload /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist

echo "Starting SNMP daemon ..."
sudo launchctl load -w /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist

exit 0

Daemon bei jedem Neustart von Mac OS X laden

Hierzu habe ich die von Apple mitgelieferte plist-Datei /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist angepasst:

	<key>Disabled</key>
	<false/>

Tags: , , , , , , ,
Labels: Linux, Uncategorized

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 24. April 2013

YouTube-Links in einer Textdatei sequentiell herunterladen

Heute hat Kollege Burgdorfer auf Facebook folgenden Artikel gepostet: 15 Fascinating TED Talks for Econ Geeks.

Natürlich möchte ich mir diese jeweils sehr lehrreichen Mini-Vorlesungen nicht entgehen lassen. Doch wie kriege ich nun die Videos auf die lokale Festplatte, damit ich sie bei Gelegenheit mit Air Video via iPhone/iPad über unseren Apple TV auf 42″ Plasma-Fläche abspielen kann?

Zuerst habe ich im Zielverzeichnis eine Text-Datei namens links.txt erstellt, in welcher ich pro Zeile einen der 15 YouTube-Links hineinkopiert habe:

http://www.youtube.com/watch?v=uXl-mKZ7aSc













http://www.youtube.com/watch?v=dIbkqUm_xKk

Um YouTube-Videos auf die lokale Festplatte zu kopieren, bedient man sich des folgenden quelloffenen Scripts:

youtube-dl — Download videos from YouTube.com

Dieses platziert man in einem leicht zugänglichen Ort; bei mir liegt es beispielsweise mit einer Ladung anderer Scripts unter /Users/mario/Scripts.

Anschliessend habe ich auf der Kommandozeile im Zielordner folgenden Befehl ausgeführt:

while read line; do (~/Scripts/youtube-dl.sh "$line" &); done < urls.txt

Nun werden nach und nach alle Videos heruntergeladen, und spätestens heute Abend kann ich mir dann das eine oder andere Video zu Gemüte führen.

youtube-dl.sh

#!/bin/sh

YDL="/Users/mario/Scripts/yt-dl"

$YDL -q -o "%(title)s.%(ext)s" "$1"

exit 0

Tags: , , , , , , , , ,
Labels: Linux

1 Kommentar | neuen Kommentar verfassen

Mittwoch, 20. März 2013

Mit scp eine Datei mit Leerschlägen im Dateinamen kopieren

Das geht ganz einfach — sobald man herausgefunden hat, wie man den Pfad aufschreiben muss:

scp user@server:"'/Movies/Documentaries/The Power Of Nightmares/Documentary.The.Power.Of.Nightmares.01.Baby.Its.Cold.Outside.avi'" ~/Desktop

Konkret: Man schliesst den Pfad in Anführungszeichen und Apostrophs ein: „‚[pfad]'“ (Achtung: WordPress wandelt die Anführungszeichen in diesem Paragraphen in typographische ansprechende Zeichen um — was aber leider zur Folge hat, dass Copy & Paste der Zeichen in ein Shell-Fenster nicht mehr funktioniert).

Via Spaces and SCP

Tags: , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 27. September 2012

Wenn imapfilter plötzlich mit meinem bei Cyon gehosteten Mail-Server nicht mehr funktioniert

Da verreise ich als auf einen IT-Audit ins „Ländle“, und prompt versagt mein geliebter imapfilter seinen Dienst. Fazit: Meine INBOXes sind plötzlich voller Mails, welche von imapfilter sonst schön brav spätestens 5 Minuten nach deren Ankunft auf meinen Mail-Konti in einen Unterordner verschoben werden. Zuerst dachte ich, dass mein lokaler Linux-Server, auf welchem imapfilter läuft, wegen eines Stromunterbruchs ausgefallen ist.

Doch mittels des äusserst nützlichen SSH-Clients Prompt hatte ich bereits am Dienstag realisiert, dass der Server am Netz hängt und ansprechbar ist.

Ein Blick in das von meinem imapfilter.sh-Script erzeugten Log zeigte, dass das Problem erstmals am Montag um 17 Uhr 15 Minuten aufgetaucht ist (Montag kurz vor Feierabend – dann scheinen die Cyon Sysadmins am liebsten ihre Zertifikate zu erneuern?)

2012-09-24 17:15 - <imapfilter Script> - Error '5' checking mail

Nun gut … letzter Ausweg: Ich versuche mich mittels

imapfilter -d -c <imapfilter Script>

interaktiv anzumelden und Debug-Meldungen abzulegen. Doch zur Analyse dieses Debug-Dumps kommt es nicht, denn auf der Kommandozeile strahlt mich folgender Hinweis an:

Server certificate subject: /OU=Domain Control Validated/CN=*.cyon.ch
Server certificate issuer: /C=BE/O=GlobalSign nv-sa/CN=GlobalSign Domain Validation CA - G2
Server key fingerprint: 39:E9:08:A5:D9:EC:C3:A3:3E:0F:73:7C:14:B7:F2:A5
(R)eject, accept (t)emporarily or accept (p)ermanently? p

Mittels Eingabe von p akzeptiere ich das neue Zertifikat, und gut isses.

Da hat Cyon also einfach nur sein Server-Zertifikat geändert. Wieso nimmt man immer gleich das Schlimmste an?

Tags: , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Montag, 2. April 2012

vim unter Mac OS X Farbe verleihen

Hierzu erstellt man einfach ~/.vimrc und fügt gleich zuoberst ein:

syntax on

Nebenbei: Eine Zeile kommentiert man mit dem Anführungszeichen („) aus.

Weitere viele nützliche Einstellungen finden sich unter Example .vimrc

Tags: , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Montag, 19. März 2012

Eine laufende screen-Session übernehmen

Da bin ich heute wohl zu überstürzt aus dem Haus gegangen und habe vergessen, eine laufende screen-Session mittels Ctrl-A-D in den Detached-Modus zu verfrachten.

Als ich nun per SSH über 3G auf meinen Mac mini zugreifen wollte, kriegte ich eine Fehlermeldung zu Gesicht, dass der Screen „attached“ sei.

Die Lösung? Ganz einfach:

screen -r -D 5004

Mit der Option -D wird der derzeit aktiv in die screen-Session eingeloggte Benutzer „rausgekickt“ und ich übernehme den Screen. Nett!

Tags: , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 4. März 2012

Aktuell geöffnetes Fenster unter Mac OS X minütlich aufzeichnen

Seit mehreren Jahren zeichne ich jede Minute auf, welches Fenster auf meinem Mac OS X-Desktop aktiv ist. Ich nutze diese Aufzeichnungen nicht zuletzt dazu, um bei ungefähr zu wissen, wie lange ich für Kundenaufträge gearbeitet habe — und dementsprechend Rechnung zu stellen.

Das AppleScript lautet folgendermassen:

tell application "System Events"
	set app_name to name of item 1 of (every process whose frontmost is true)
end tell

tell application app_name
	try
		if (count of windows) > 0 then
			set mouseToolsPath to "usr:local:bin:MouseTools"
			set {mouseX, mouseY} to paragraphs of (do shell script quoted form of POSIX path of mouseToolsPath & " -location")
			
			set title to (app_name & "&title=" & name of window 1 & "&x=" & mouseX & "&y=" & mouseY)
		end if
	on error
		set title to app_name
	end try
end tell

Damit das Script auch gleichzeitig die Position des Mauszeigers erfasst, müssen noch die MouseTools heruntergeladen und — in meinem Fall — unter /usr/local/bin/ abgelegt werden.

Um dieses Script regelmässig auszuführen, habe ich mit der kostenpflichtigen Applikation Lingon einen launchd-Job erstellt (in der Steinzeit hat man noch auf Cron-Jobs zurückgegriffen), der jede Minute ausgeführt wird. Hierzu verwende ich ein bash-Script als Wrapper, um die Informationen an ein PHP-Script auf einem im Intranet stehenden Linux-Server weiterzuleiten:

#!/bin/sh

LOGGEDIN=`who | grep "^mario" | grep console | wc -l`
WGET="/opt/local/bin/wget"
#WGET=`which wget`

if [ $LOGGEDIN -lt 1 ];
then
        echo "User mario not logged in. Exiting."
        exit 0
fi

if [ ! -x "$WGET" ];
then
	echo "wget executable '$WGET' not found. Exiting."
	exit 1
fi

APP=`/usr/bin/osascript /usr/local/bin/FrontMostApplication.scpt`
#echo $APP

URL="http://tld/save.php?app=$APP"

#echo "Accessing URL '$URL' using $WGET"

$WGET -q -O /dev/null "$URL"

exit 0

Tags: , , , ,
Labels: Apple, Linux

Keine Kommentare | neuen Kommentar verfassen

Samstag, 25. Februar 2012

youtube-dl meldet „no fmt_url_map or conn information found in video info“

Wer Youtube-Videos auf seinen Rechner herunterladen möchte, um sie später ohne Internetverbindung anschauen zu können, wird das Python-Script youtube-dl längst kennen.

Wenn das Ding aber den Fehler

$ ~/youtube-dl.sh http://www.youtube.com/watch?v=QhhFQ-3w5tE
[youtube] Setting language
[youtube] QhhFQ-3w5tE: Downloading video webpage
[youtube] QhhFQ-3w5tE: Downloading video info webpage
[youtube] QhhFQ-3w5tE: Extracting video information
ERROR: no fmt_url_map or conn information found in video info

meldet, sollte man sich den Fork von Philipp Hagemeister herunterladen, welcher den Bug behebt:

youtube-dl (Philipp Hagemeisters Fork)

Youtube-Video als MP3 herunterladen

Wenn wir gerade dabei sind: Wer obiges Tool einsetzt, sollte auch zwingend nachfolgende Web-Site kennen, welche Youtube-Videos in MP3-Dateien umwandelt:

www.youtube-mp3.org

Tags: , , , , ,
Labels: Linux

2 Kommentare | neuen Kommentar verfassen

Sonntag, 12. Februar 2012

Den bash Prompt den eigenen Bedürfnissen anpassen

Wegen der im vorgängigen Post erwähnten Anpassung an der /etc/hosts schaute mein Bash Shell Prompt plötzlich folgendermassen aus:

mario@192:/ $

Ich habe mich deshalb daran gemacht, das Prompt meinen eigenen Bedürfnissen anzupassen. Folgendermassen schaut es nun aus:

[mario@192.168.0.102:/] $ 

Die Ausgabe beim root-User sieht identisch aus, ausser dass das $ durch ein # ersetzt wurde und der Prompt in roter Farbe hervorgehoben ist.

Für die Einstellungen des root-Users habe ich /etc/bash.bashrc angepasst:

...#PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
PS1="\\[$(tput setaf 1)\\]\\u@\\H:\\w # \\[$(tput sgr0)\\]"

Für die Einstellungen aller anderen User muss man sich in die /etc/profiles bemühen:

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games"
fi

if [ "$PS1" ]; then
  if [ "$BASH" ]; then
    #PS1='\u@\h:\w\$ '
    PS1="[\\u@\\H:\\w] $ "
  else
    if [ "`id -u`" -eq 0 ]; then
      #PS1='# '
      PS1="[\\u@\\H:\\w] # "
    else
      #PS1='$ '
      PS1="[\\u@\\H:\\w] $ "
    fi
  fi
fi

export PATH

umask 022

Damit dies bei den einzelnen Benutzern auch wirklich so ausschaut, müssen diese in ~/.bashrc und ~/.bash_profile jegliche Definition der PS1-Variable verhindern.

Fazit: Ein riesiges Chaos mit unzähligen Overrides und verschachtelten Abhängigkeiten, welches eines Linux-Betriebssystems im Grunde unwürdig ist.

Tags: ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 12. Februar 2012

Apache kann den FQDN des Servers nicht festlegen

Seit Jahren ärgere ich mich damit herum, dass meine Cron-Logs jedes Wochenende mit folgendem Fehler aufwarten:

apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.0.101 for ServerName

Diese Meldung taucht auch auf, wenn ich den Server mit apache2ctl graceful respektive apache2ctl restart neu starte.

Heute nun habe ich mich endlich des Problems angenommen und teile die Lösung gerne mit der ganzen Online-Welt.

Der vom lokalen BIND (DNS-Server) geliefert Hostname meines Web-Servers lautete wie folgt:

$ host 192.168.0.101
101.0.168.192.in-addr.arpa domain name pointer alpha.emeidi.local.

In meiner /etc/hosts stand aber nur folgendes:

127.0.0.1	localhost

192.168.0.101	ALPHA
...

Nach einigem Googlen wechselte ich die Zeile beginnend mit 192.168.0.101 folgendermassen aus:

192.168.0.101	ALPHA ALPHA.emeidi.local mad4you.homeip.net

Und siehe da, ab sofort kann Apache den Fully Qualified Domain Name des Servers selber erraten.

Tags: , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen