<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Just another tech blog ... &#187; Bash</title>
	<atom:link href="http://hexor2k.wordpress.com/tag/bash/feed/" rel="self" type="application/rss+xml" />
	<link>http://hexor2k.wordpress.com</link>
	<description>... about (mobile) Linux and Java</description>
	<lastBuildDate>Thu, 31 Dec 2009 11:15:03 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='hexor2k.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/3350773e6f25e0db7b7f27bdf342b466?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Just another tech blog ... &#187; Bash</title>
		<link>http://hexor2k.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://hexor2k.wordpress.com/osd.xml" title="Just another tech blog &#8230;" />
		<item>
		<title>NSLU2-Howto: Automount für externe HDD</title>
		<link>http://hexor2k.wordpress.com/2009/12/16/nslu-howto-automount-skript-fur-externe-festplatte/</link>
		<comments>http://hexor2k.wordpress.com/2009/12/16/nslu-howto-automount-skript-fur-externe-festplatte/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 11:30:28 +0000</pubDate>
		<dc:creator>hexor2k</dc:creator>
				<category><![CDATA[Howtos]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[NAS]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[NSLU2]]></category>
		<category><![CDATA[UDEV]]></category>

		<guid isPermaLink="false">http://hexor2k.wordpress.com/?p=503</guid>
		<description><![CDATA[Hallo liebe Leser,
ich habe mich noch ein bisschen mit UDEV beschäftigt, um das Automounting meiner externen Festplatte an der SLUG zu realisieren. Hintergrund ist folgender:

Die Festplatte ist nicht immer an der SLUG angeschlossen (Strom sparen und Platte vor Verschleiß schützen).
Die SLUG soll später mal dauerhaft als VPN- und Jabber-Server laufen.
Beim Anschluss der Festplatte soll diese [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hexor2k.wordpress.com&blog=4544707&post=503&subd=hexor2k&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hallo liebe Leser,</p>
<p>ich habe mich noch ein bisschen mit UDEV beschäftigt, um das Automounting meiner externen Festplatte an der SLUG zu realisieren. Hintergrund ist folgender:</p>
<ul>
<li><span id="more-503"></span>Die Festplatte ist nicht immer an der SLUG angeschlossen (Strom sparen und Platte vor Verschleiß schützen).</li>
<li>Die SLUG soll später mal dauerhaft als VPN- und Jabber-Server laufen.</li>
<li>Beim Anschluss der Festplatte soll diese gemounted und der Samba-Dämon gestartet werden.</li>
<li>Bei einmaligem Tastendruck soll die Festplatte je nach Mount-Status unmounted oder neu gemounted werden. Gleiches gilt für den Samba-Dämon.</li>
<li>Zweimaliger Tastendruck fährt die SLUG herunter.</li>
<li>NFS wird nicht realisiert, da es zu einem sehr langem Bootvorgang führt und danach trotzdem nicht richtig funktioniert, falls die Festplatte schon beim Start angeschlossen ist.</li>
</ul>
<p>Also, zum Start braucht man erst einmal mehrere Bash-Skripte und Anpassungen in der inittab und in den UDEV Regeln:</p>
<h3>Mount-Skript:</h3>
<p>Hier wird versucht, die externe Festplatte zu mounten und bei Erfolg den Samba-Dämon zu starten. Zusätzlich wird noch das LED für Disk 2 zuerst blinkend und am Ende auf an geschaltet. Die Datei habe ich unter dem Namen &#8222;/usr/bin/mybookMountAndStartServices&#8220; abgelegt. Sie soll bei jedem einzelnen Tastendruck ausgeführt werden, wenn die externe Festplatte nicht gemounted ist.</p>
<pre class="brush: bash;">

#!/bin/sh
LOGFILE=&quot;/var/log/exthddmount.log&quot;
THIS=&quot;mybookMountAndStartServices&quot;
MOUNTDIR=&quot;/mnt/MyBook&quot;

# set led 2 to flashing state
leds disk-2 flash

# try to mount
echo &quot;$THIS Try to mount MyBook&quot; &gt;&gt; $LOGFILE
mount $MOUNTDIR

# check mount status
if [ $? == 0 ]
then   echo &quot;$THIS MyBook was mounted. Try to start services.&quot; &gt;&gt; $LOGFILE
else    cat /etc/mtab | grep $MOUNTDIR &gt; /dev/null
if [ $? == 0 ]
then  echo &quot;$THIS MyBook is already mounted. Try to start services&quot; &gt;&gt; $LOGFILE
else   echo &quot;$THIS MyBook is not connected or an error occured on mount&quot; &gt;&gt; $LOGFILE
exit 1
fi
fi

# start samba service
sh /etc/init.d/samba start

# set led 2 to on
leds disk-2 on

leds beep -r 1
</pre>
<h3>Umount-Skript:</h3>
<p>Das gleiche Skript, nur anders herum. Services werden gestoppt, die Festplatte wird unmounted. Gespeichert wird die File unter &#8222;/usr/bin/mybookUmountAndStopServices&#8220;.</p>
<pre class="brush: bash;">

#!/bin/sh
LOGFILE=&quot;/var/log/exthddmount.log&quot;
THIS=&quot;mybookUmountAndStopServices&quot;
MOUNTDIR=&quot;/mnt/MyBook&quot;

# stop samba service
sh /etc/init.d/samba stop
echo &quot;$THIS Stopped all services&quot; &gt;&gt; $LOGFILE

# umount MyBook
echo &quot;$THIS Umounting MyBook...&quot; &gt;&gt; $LOGFILE
umount $MOUNTDIR
echo &quot;$THIS Umounted MyBook. No you can disconnect it&quot; &gt;&gt; $LOGFILE

# set led 2 to flashing state
leds disk-2 off
leds beep -r 2
</pre>
<h3>Ausführung bei Tastendruck &#8211; Inittab:</h3>
<p>&#8222;Das ist natürlich schön und gut, aber wie und wann werden die Skripte ausgeführt?&#8220; wird sich jetzt mancher denken. Über die Datei &#8222;/etc/inittab&#8220; festgelegt werden, was bei der Tastenkombination STRG+ALT+ENTF passiert. Bei der SLUG entspricht dies einem einmaligem Tastendruck. In der Inittab muss die Zeile für den Tastendruck, die ungefähr wie folgende aussieht</p>
<p><code>ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now</code></p>
<p>durch folgenden Code ersetzt werden:</p>
<p><code>ca:12345:ctrlaltdel:/usr/bin/buttonPressControl &amp;</code></p>
<p>Das Skript, welches hier aufgerufen wird, beschreibe ich im nächsten Abschnitt. Das &#8222;&amp;&#8220; am Ende der Zeile ist sehr wichtig.</p>
<h3>Tastendruck-Kontrolle:</h3>
<p>Die Skripte zum Mount bzw. Umount habe ich schon beschrieben, aber woher weiß die SLUG, welches beim Tastendruck ausgeführt werden soll? Und wie kann man einen zweimaligen Tastendruck erkennen? Ich habe deswegen ein weiteres Skript entworfen, welches sich darum kümmert und das bei jedem Tastendruck aufgerufen wird. Die Erkennung des zweimaligem Tastendrucks ist vielleicht nicht ganz sauber gelöst, aber mir ist auf Anhieb nichts besseres eingefallen.</p>
<pre class="brush: bash;">

#!/bin/sh

LOGFILE=&quot;/var/log/exthddmount.log&quot;
EXT_HDD_DEV=&quot;/dev/mybook&quot;
PIDFILE=&quot;/tmp/exthddmount.pid&quot;
THIS=&quot;buttonPressControl&quot;

touch $LOGFILE

if [ -e $PIDFILE ]
then
 rm $PIDFILE
 echo &quot;$THIS Pressed a second time within 2 seconds. Shutdown system&quot; &gt;&gt; $LOGFILE
 leds beep -f 800 -r 3 -l80 -d 40
 /sbin/shutdown -t1 -a -h now
else
 # create pid file
 touch $PIDFILE
 sleep 2

 if [ -e $PIDFILE ]
 then
 # beep to indicate start
 leds beep -f 700 -r 2 -l 80 -d 40

 # check if mounted
 cat /etc/mtab | grep /mnt/MyBook &gt; /dev/null
 if [ $? == 0 ]
 then
 # already mounted, now umount and stop services
 sh /usr/bin/mybookUmountAndStopServices
 else
 # not mounted, check if connected
 if [ -e $EXT_HDD_DEV ]
 then
 # connected, but not mounted. Mount now
 sh /usr/bin/mybookMountAndStartServices
 else
 # not connected, do nothing
 echo &quot;$THIS No MyBook connected. Do nothing.&quot; &gt;&gt; $LOGFILE
 fi
 fi
 rm $PIDFILE
 fi
fi
</pre>
<h3>UDEV-Regel:</h3>
<p>Was fehlt noch? Genau, eine UDEV-Regel, die das Mount-Skript auch bei Systemstart und beim Anschließen der Festplatte ausführt. Damit diese Regel zum Ende erst geprüft wird, habe ich sie &#8222;z70-exthddmount.rules&#8220; genannt und in &#8222;/etc/udev/rules.d&#8220; abgelegt.</p>
<p><code>BUS=="usb", KERNEL=="sd?1", SYSFS{serial}=="57442D574341554630363532373631", SYMLINK="mybook", RUN+="/usr/bin/mybookMountAndStartServices"</code></p>
<p>Dieser Code muss in einer Zeile stehen! Die eindeutige Seriennummer der externen Festplatte erhält man mit dem Programm lsusb:</p>
<pre class="brush: bash;">

SLUG:#lsusb -v | egrep &quot;(iProduct | iSerial)&quot;

iProduct                2 OHCI Host Controller
 iSerial                 1 0000:00:01.0
 iProduct                2 OHCI Host Controller
 iSerial                 1 0000:00:01.1
 iProduct                2 U3 Cruzer Micro
 iSerial                 3 08759111AD8169DA
 iProduct                2 EHCI Host Controller
 iSerial                 1 0000:00:01.2
 iProduct                2 My Book
 iSerial                 3 57442D574341554630363532373631
</pre>
<p>Die unteren beiden Zeilen stehen für meine externe Festplatte. Wer kein MyBook besitzt, muss natürlich nach der Bezeichnung seiner Festplatte suchen.</p>
<h3>Fazit:</h3>
<p>So das sind alle notwendigen Skripte, um das Automounting zu realisieren. Wenn alle Skripte vorhanden und angepasst sind, sollte die SLUG neu gestartet werden, um die Inittab und die UDEV-Regeln neu zu initialisieren. Wie schon angesprochen funktioniert das Mounten beim Start leider nur mit dem Samba-Dämon reibungslos. Bei NFS hängen sich die Startskripte leider auf, wenn beim Systemstart das Mount-Skript mittels UDEV aufgerufen wird. Wahrscheinlich ist der Zeitpunkt zu früh für NFS. Aber wenn jemand  eine Lösung dafür findet, passe ich das gerne noch an.</p>
<p>Der eingebettete Sourcecode wurde mit dem neuen Sourcecode-Plugin für WordPress erstellt. <a href="http://en.support.wordpress.com/code/posting-source-code/">Hier</a> ist noch eine kleine Anleitung dazu.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hexor2k.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hexor2k.wordpress.com/503/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hexor2k.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hexor2k.wordpress.com/503/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hexor2k.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hexor2k.wordpress.com/503/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hexor2k.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hexor2k.wordpress.com/503/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hexor2k.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hexor2k.wordpress.com/503/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hexor2k.wordpress.com&blog=4544707&post=503&subd=hexor2k&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hexor2k.wordpress.com/2009/12/16/nslu-howto-automount-skript-fur-externe-festplatte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/da83901c46990b57efdd2759b9ec859f?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=X" medium="image">
			<media:title type="html">hexor2k</media:title>
		</media:content>
	</item>
		<item>
		<title>Howto convert *.wav to *.mp3</title>
		<link>http://hexor2k.wordpress.com/2008/08/24/115/</link>
		<comments>http://hexor2k.wordpress.com/2008/08/24/115/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 16:56:52 +0000</pubDate>
		<dc:creator>hexor2k</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[MP3]]></category>
		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://hexor2k.wordpress.com/?p=115</guid>
		<description><![CDATA[So, um die Hitrate meines Blogs etwas zu erhöhen, gibts hier mal ein kleines Bash-Skript, das *.wav-Dateien in *.mp3 konvertiert. &#8222;Howto convert&#8230;&#8220; wird glaub ich sehr häufig auf Google gesucht  

Das Skript füllt auch ID3-Tags aus, wenn vorher die Variablenalbum, artist, genre und year ausgefüllt werden. Diese Daten sind im Skript für das Album [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hexor2k.wordpress.com&blog=4544707&post=115&subd=hexor2k&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>So, um die Hitrate meines Blogs etwas zu erhöhen, gibts hier mal ein kleines Bash-Skript, das *.wav-Dateien in *.mp3 konvertiert. &#8222;Howto convert&#8230;&#8220; wird glaub ich sehr häufig auf Google gesucht <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><span id="more-115"></span></p>
<p>Das Skript füllt auch ID3-Tags aus, wenn vorher die Variablen<code>album</code>, <code>artist</code>, <code>genre</code> und <code>year</code> ausgefüllt werden. Diese Daten sind im Skript für das Album &#8222;Cult&#8220; von &#8222;Apocalyptica&#8220; eingetragen. Titelnummer und -name werden ebenfalls beachtet, wenn der Dateiname der *.wav-Datei der Form &#8222;Nummer &#8211; Name.wav&#8220; ist, also z.B. &#8222;15 &#8211; Nothing else matters.wav&#8220;.</p>
<p><code> album='Cult'</code><br />
<code>artist='Apocalyptica' </code><br />
<code>genre='Metal' </code><br />
<code>year='2001' </code><br />
<code> for file in ls *.wav </code><br />
<code>do </code><br />
<code>number=$(echo $file | sed -r 's/.* - ([0-9]{2}) - .*/\1/') </code><br />
<code>title=$(echo $file | sed -r 's/.* - (.+).wav/\1/' | sed -r 's/%2F/\//') </code><br />
<code>newfile=$(echo "$number - $title.mp3") </code><br />
<code>lame -h -V 2 --vbr-new --tt "$title" --ta "$artist" --tl "$album" --tn "$track" --tg "$genre" --ty "$year" "$file" "$newfile" </code><br />
<code>done</code></p>
<p>Es ist zwar nicht das Nonplusultra, aber vielleicht doch noch etwas verständlicher als die vielen anderen Skripte, die im Netz herumgeistern.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/hexor2k.wordpress.com/115/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/hexor2k.wordpress.com/115/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hexor2k.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hexor2k.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hexor2k.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hexor2k.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hexor2k.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hexor2k.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hexor2k.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hexor2k.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hexor2k.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hexor2k.wordpress.com/115/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hexor2k.wordpress.com&blog=4544707&post=115&subd=hexor2k&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://hexor2k.wordpress.com/2008/08/24/115/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/da83901c46990b57efdd2759b9ec859f?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=X" medium="image">
			<media:title type="html">hexor2k</media:title>
		</media:content>
	</item>
	</channel>
</rss>