Kategorie-Archiv: Ubuntu

ubuntu

Kurztip: Inline-Grafiken in HTML

Mit dem folgenden Script image2html.sh kann ein Bild direkt in Html Code nach rfc2397 untergebracht werden. Dies ist nützlich um z.B. Bilder in Email Signatur zu verwenden.

#!/bin/sh
 
if [ $# -ne 1 ];  then
	echo "No arguments supplied"
	echo "Usage: ${0} image.jpg"
	exit 1	
fi
 
if [ -r ${1} ]; then
	echo "<img src=\"data:$(file --mime-type -b ${1});base64,$(base64 ${1})\">" > "${1}.html"
	exit 0
else
	echo "Can not read file ${1}"
	exit 1
fi

Erklärung:

Die Abfragen überprüfen, ob erstens genau ein Argument übergeben worden ist, und zweitens, ob dieses Argument eine lesbare Datei ist.
Der Programmaufruf file ermittelt den mime Type und das Programm base64 kodiert die übergebene Datei in das Base64 Format. Das img Tag und die beiden Aufrufe werden zum Schluss in die html Datei gespeichert und kann von dort aus kopiert werden.

This player is unable to play this protected content at this time.

Bei http://papagei.com/, einem Videosprachportal, konnten die per DRM (Digital Rights Management) geschützten Inhalte unter Ubuntu 12.04 nicht wiedergegeben werden. Stattdessen wurde im Flashplayer die Fehlermeldung “This player is unable to play this protected content at this time.” angezeigt.
Um die Videos zu verteilen, setzt das Sprachportal auf den Anbieter Brightcove. Dieser Dienst schützt die Inhalte entweder mit Google Widevine oder Adobe Access, dabei verwendet Papagei.com die letzere Methode.
Um nun den geschützten Inhalt abzuspielen, benötigt der Flashplayer das HAL (Hardware Abstraction Layer) Modul. Nach der HAL Installation und dem Schließen des Browsers, müssen zum Abschluss die Adobe Access Verzeichnisse bereinigt werden.

Lösung für Ubuntu (getestet Version 12.04)
Übernommen von Adobe http://helpx.adobe.com/x-productkb/multi/flash-player-11-problems-playing.html

Browser schließen und folgende Befehle ausführen.

sudo apt-get install hal
rm -rf ~/.adobe/Flash_Player/{NativeCache,AssetCache,APSPrivateData2}

Testen
Die Url http://drmtest2.adobe.com:8080/Content/anonymous.f4v in den Testplayer einfügen und den Play Button drücken. Nun sollte das Video abspielen.

Viel Spaß beim Anschauen der DRM geschützen Filme, bzw. beim Lernen!

Cronjobs unter einer Minute

Kürzere Intervalle als 1 Minute sind bei Cronjobs nicht vorgesehen. Das nachfolgende Script cron_job.sh umgeht diese Beschränkung und startet den Arbeitscode jeweils nach 5 Sekunden.

#!/bin/sh
 
if [ $(pgrep -cf $0) -le 2 ] 
then
	echo "not runnig"
 
	while [ 1 -eq 1 ]; do
		echo "do some stuff"
		sleep 5
	done
else
 
	echo "running, do nothing"
 
fi

Dieses Script wurde für dieses Beispiel unter /home/klaus/cron_job.sh gespeichert. Jetzt muss es mit crontab -e in der Cron-Tabelle ergänzt werden:

# m h  dom mon dow   command
* * * * * /home/klaus/cron_job.sh

Erklärung des Scripts

Die Auswertung mittels pgrep ergibt bei einem Aufruf durch Cron zwei Prozesse, einmal den Cron Aufruf selbst und einmal das Script cron_job.sh. Wenn mehr als nur diese zwei Prozesse laufen, dann beendet sich das Script wieder. Ansonsten wird in der Endlosschleife der Arbeitscode aufgerufen und anschließend 5 Sekunden geschlafen.

Auszug von ps -ef:

klaus     7821  7820  0 13:15 ?        00:00:00 /bin/sh -c /home/klaus/cron_job.sh
klaus     7822  7821  0 13:15 ?        00:00:00 /bin/sh /home/klaus/cron_job.sh

Falls der Rechner neu gestartet oder das Script unerwartet beendet wird, sorgt der Eintrag in der Cron-Tabelle dafür, dass es erneut startet. Danke an Gerald, für den pgrep Tipp!

Videos reparieren

Defekte Videos kann mencoder reparieren. Mittels apt-get ist dieses Programm schnell installiert.

1
sudo apt-get install mencoder

Der folgende Aufruf versucht das Video input.avi zu reparieren. Das Ergebnis wird unter output.avi gespeichert.

1
mencoder -idx input.avi -ovc copy -oac copy -o output.avi

Dabei stellt mencoder den Index wieder her und kopiert die Film- und Tonspur.

Für die ganze Filmsammlung eignet sich das folgende Script repair_movies.sh:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/bin/sh
 
#functions
f_suffix()
{
	echo "${1##*.}"
}
 
 
#parameters
if [ $# -eq 1 ]
then 
	#parameter
	path="$1"
else
	#default
	path="/data/media/movies"
fi
 
 
#main
find "$path" -not -name '*.fixed.*' \( -iname '*.avi' -or -iname '*.mpg' -or -iname '*.mpeg'  \)  -type f | \
while read i
do
	suffix=$(f_suffix "$i")
	filename_out="${i%.avi}.fixed.${suffix}"
	filename_tmp="${i}.tmp"	
 
	echo "Repair file ${i}"
 
	#remove old temp file
	if [ -f $filename_tmp ]
	then
		echo "rm ${filename_tmp}"
		rm "${filename_tmp}"
 
	fi
 
	if [ -f $filename_out ]
	then
		#file is fixed, remove original file
                echo "rm ${i}"
                rm "${i}"
	else
		#repair video file
		mencoder -idx "$i" -ovc copy -oac copy -o "${filename_tmp}"
 
		#remove source file only, if mencoder was successfully finished
		if [ $? -eq 0 ]
		then
			mv "${filename_tmp}" "${filename_out}"
 
			#delete original movie
			echo "rm ${i}"
			rm "${i}"
		fi
	fi
 
done

Im Moment verarbeitet das Script nur avi, mpeg und mpg Dateien (case insensitiv), lässt sich aber leicht erweitern. Zur Sicherheit kann der Teil, der das Orginalvideo löscht, auskommentiert werden.

localhost vs. 127.0.0.1

Hab gerade einen ssh Tunnel folgendermaßen eingerichtet:

ssh -L 3333:localhost:3306 -p 10022 root@remotehost

Dann wollte ich mich mit der MySQL Datenbank verbinden, hab aber immer nur die lokale Datenbank erreichen können. Ich hab schon vermutet, dass mysql den Portparameter (-P 3333 oder –port=3333) nicht auswertet, da es sich immer nur mit der lokalen DB verbindet. Nach längerer Zeit habe ich 127.0.0.1 ausprobiert und es hat funktioniert. Aber warum ist localhost nicht 127.0.0.1?

klaus@ubuntu:~$ mysql -u groupoffice-com -P 3333 --password=passwort -h 127.0.0.1
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 443
Server version: 5.5.22-0ubuntu1 (Ubuntu)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| groupofficecom |
| mysql |
| performance_schema |
| phpmyadmin |
+--------------------+
5 rows in set (0.03 sec)

mysql> quit
Bye
klaus@ubuntu:~$ mysql -u groupoffice-com -P 3333 --password=passwort -h localhost
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 234
Server version: 5.1.62-0ubuntu0.10.04.1 (Ubuntu)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test2 |
+--------------------+
2 rows in set (0.00 sec)

mysql> quit

Kennt jemand dieses seltsame Phänomen?

Erklärung
Herr A.S. (Vielen Dank!) in den Kommentaren lieferte die Erklärung. Bei Angabe von localhost wird immer der Unix Socket verwendet, selbst wenn der Port mit angegeben ist. Will man eine TCP/IP Verbindung, muss man explizit das Protokoll angeben --protocol=TCP oder die lokale IP Adresse 127.0.0.1 verwenden.

Von Connecting to the MySQL Server (Kapitel ist nicht ins Deutsche übersetzt):

On Unix, MySQL programs treat the host name localhost specially, in a way that is likely different from what you expect compared to other network-based programs. For connections to localhost, MySQL programs attempt to connect to the local server by using a Unix socket file. This occurs even if a --port or -P option is given to specify a port number. To ensure that the client makes a TCP/IP connection to the local server, use --host or -h to specify a host name value of 127.0.0.1, or the IP address or name of the local server. You can also specify the connection protocol explicitly, even for localhost, by using the --protocol=TCP option. For example:

shell> mysql --host=127.0.0.1
shell> mysql --protocol=TCP
The --protocol option enables you to establish a particular type of connection even when the other options would normally default to some other protocol.

Hinweis: Die PHP Funktion mysql-connect verhält sich genauso, ist aber nicht so ausführlich dokumentiert.

Keine Mails von Kernel.org nach Mailserverwechsel

Nach der Umstellung auf den neuen Mailserver mit geänderten Subdomain, IP Adresse und MX Record, kamen keine Emails mehr von vger.kernel.org. Emails an die gleiche Emailadresse funktionieren. Normalerweise versucht der Mailserver nach einer bestimmten Zeit die Emails nochmal zuzustellen, aber auch nach 24 Stunden erhielt ich immer noch keine. Meine erste Vermutung: die Mailling List Software Majordomo hat mich von der Verteilerliste gestrichen. Deshalb hab ich erneut angemeldet. In den Logs von Postfix fand ich diesen Eintrag:

postfix/smtp[6631]: 7DF0E1D60F76: host vger.kernel.org[209.132.180.67] said: 451 4.7.1 Hello [188.40.84.136], for recipient address <Majordomo@vger.kernel.org> the policy analysis reported: Greylisted, see http://isg.ee.ethz.ch/tools/postgrey/help/vger.kernel.org.html (in reply to RCPT TO command)

Der Auszug verrät, vger.kernel.org verwendet Postgrey – Postfix Greylisting Policy Server. Postgrey lehnt beim ersten mal die Email temporär ab und wartet den zweiten Zustellversuch ab. Spammer und Viren unternehmen meist keinen zweiten Versuch wie es im RFC vorgesehen ist. Nachdem der Kernel Server meine Subscribe Email angenommen hatte, kamen alle verpassten Emails und ich konnte das Anmeldeverfahren abbrechen. Es läuft alles wieder wie gewohnt ;-)

etckeeper und git

Da mir die Open Source Groupware Group-Office immer meine Konfigurationsdateien überschreibt, habe ich nach einer Möglichkeit gesucht, diese zu versionieren. Nach kurzer Suche bin ich auf etckeeper gestoßen. Etckeeper stellt alle Konfigurationsdateien im Verzeichnis /etc unter eine Versionsverwaltung. Zur Zeit werden Git, Mercurial (hg), Bazaar (bzr) und Darcs unterstützt. Vor und Nach dem Einspielen oder Entfernen neuer Software über die Paketverwaltung wird automatisch ein neuer commit angelegt. Zudem werden die wichtigen Dateiberechtigungen mitgespeichert und ist somit einer reinen Versionsverwaltung überlegen.

Da ich git bevorzuge, habe ich folgendermaßen etckeeper installiert:

sudo apt-get install git-core etckeeper

Git konfigurieren
git config --global user.name "Klaus Schwarzkopf"
git config --global user.email webmaster@linpert.de

Dann in der Datei /etc/etckeeper/etckeeper.conf bzr auskommentieren und git einkommentieren.
# The VCS to use.
#VCS="hg"
VCS="git"
#VCS="bzr"
#VCS="darcs"

Initialen Commit anlegen:
sudo etckeeper init
sudo etckeeper commit "Initial commit."

Ubuntu 10.04
Unter Ubuntu 10.04 wird automatisch bei der Installation schon /etc mit Bazaar versioniert. Um es auf Git zu ändern, muss die Datei etckeeper.conf angepasst werden und dann etckeeper uninit, etckeeper init und etckeeper commit “Initial commit.”
ausgeführt werden.

Manuelle Änderung
Als root oder mit vorangestelltem sudo. Man kann ganz normal git im /etc Verzeichnis verwenden.
root@ubuntu:/etc# vim fstab
root@ubuntu:/etc# git commit -a
[master a885a3c] big mistake
1 files changed, 1 insertions(+), 1 deletions(-)
root@ubuntu:/etc# git log
commit a885a3c7cfad2123fc4bd946a8d01c377651af6c
Author: Klaus Schwarzkopf <webmaster@linpert.de>
Date: Sat Jun 2 19:46:13 2012 +0200

big mistake

commit ab91b64eabe0e9f7371ddd8afcbd47db5e37a91f
Author: Klaus Schwarzkopf <webmaster@linpert.de>
Date: Sat Jun 2 19:43:52 2012 +0200

Initial commit.
root@ubuntu:/etc#

Änderungen rückgängig

root@ubuntu:/etc# git log
commit a885a3c7cfad2123fc4bd946a8d01c377651af6c
Author: Klaus Schwarzkopf <webmaster@linpert.de>
Date: Sat Jun 2 19:46:13 2012 +0200

big mistake

commit ab91b64eabe0e9f7371ddd8afcbd47db5e37a91f
Author: Klaus Schwarzkopf <webmaster@linpert.de>
Date: Sat Jun 2 19:43:52 2012 +0200

Initial commit.

root@ubuntu:/etc# git reset --hard HEAD~1
HEAD is now at ab91b64 Initial commit.
root@ubuntu:/etc# git log
commit ab91b64eabe0e9f7371ddd8afcbd47db5e37a91f
Author: Klaus Schwarzkopf <webmaster@linpert.de>
Date: Sat Jun 2 19:43:52 2012 +0200

Initial commit.

nautilus-open-terminal

Der Konquerer unter KDE 3 konnte mit der Taste F4 eine Konsole im aktuellen Verzeichnis öffnen. Dies kann Nautilus mit Hilfe von nautilus-open-terminal auch.

Zunächst muss nautilus-open-terminal installiert werden.
sudo apt-get install nautilus-open-terminal

Nautilus beenden
nautilus -q

Die Datei ~/.gnome2/accels/nautilus (Ubuntu 12.04) oder ~/.config/nautilus/accels (Ubuntu 14.04) bearbeiten und folgende Zeile ändern.

; (gtk_accel_path "<Actions>/ExtensionsMenuGroup/NautilusOpenTerminal::open_terminal" "")

Semikolon entfernen und den gewünschten Shortcut eintragen.

(gtk_accel_path "<Actions>/ExtensionsMenuGroup/NautilusOpenTerminal::open_terminal" "F4")

Fertig.

Funktioniert auch mit Ubuntu 14.04 unter Unity.

Festplattentausch Asus Eee PC

Bei der Reparatur des Eee PC R105D stellte sich heraus, dass die Festplatte defekt ist. Eine Neue würde ca. 70 Euro kosten. Deshalb habe ich dem Besitzer abgeraten, für ein so altes Netbook (Garantie abgelaufen, Akkulaufzeit) nochmal Geld zu investieren. Nun bin ich der Besitzer dieses Computers. Da bei meinem Eee PC 1000H die Akkulaufzeit nur noch 30 Minuten beträgt, habe diese Festplatte in das R105D eingebaut. Der erste Funktionstest mit Ubuntu 12.04 und Debian squeeze verlief positiv, d.h. keine Probleme, verhalt sich wie zuvor. Dann probierte ich die Win XP Partition und Windows startete nicht, selbst im abgesicherten Modus. Jetzt bin ich am überlegen, ob ich Windows überhaupt noch darauf installieren soll, oder den Platz sinnvoll verwende. Es würde mir auch viel Zeit ersparen, den es wären folgende Arbeitsschritte notwendig:

Braucht man überhaupt noch Windows? Ich denke, ich verschiebe erst einmal die Entscheidung und lasse es wie es ist. Was denkt ihr darüber?

Acer Extensa 5220 Wlan unter Ubuntu 12.04 aktivieren

Die Installation von Ubuntu 12.04 auf dem Notebook Acer Extensa 5220 hat wunderbar funktioniert. Einzig das Wlan mit b43 Treiber von Broadcom hat rumgezickt. Nach etlichen Versuchen mit acerhk, acer-wmi und rfkill bin ich durch das Wiki von Ubuntuusers auf die einfache Lösung gestoßen. Es muss nur die unfreie Firmware von Broadcom installieren.

sudo apt-get install linux-firmware-nonfree

und ggf. die Module von der Blackliste nehmen:
sudo rm /etc/modprobe.d/blacklist-bcm43.conf

Der Wlan Schalter funktioniert, aber die zugehörige LED zeigt den Zustand nicht an. Dieser lässt sich mit rfkill überprüfen:

rfkill list