<?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/"
	>

<channel>
	<title>www.linuxweblogs.nl &#187; Systeembeheer, Tips and Tricks</title>
	<atom:link href="http://www.linuxweblogs.nl/tag/systeembeheer-tips-and-tricks/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.linuxweblogs.nl</link>
	<description>Een verzameling Nederlandstalige weblogs die schrijven over Linux</description>
	<lastBuildDate>Tue, 07 Feb 2012 21:59:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Autostart via udev</title>
		<link>http://www.atcomputing.nl/blog/archives/2011/06/index.php#e2011-06-01T14_23_46.txt?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=autostart-via-udev</link>
		<comments>http://www.atcomputing.nl/blog/archives/2011/06/index.php#e2011-06-01T14_23_46.txt#comments</comments>
		<pubDate>Wed, 01 Jun 2011 13:23:46 +0000</pubDate>
		<dc:creator>martijn_brekhof</dc:creator>
				<category><![CDATA[Algemeen]]></category>
		<category><![CDATA[Systeembeheer, Tips and Tricks]]></category>

		<guid isPermaLink="false">http://www.atcomputing.nl/blog/archives/2011/06/index.php#e2011-06-01T14_23_46.txt</guid>
		<description><![CDATA[In een vorig blog
heb ik een backupscript behandeld dat gebruikt wordt om
laptops te backuppen naar een externe usb hardeschijf. Het uitvoeren van dit
script laat ik natuurlijk niet door de gebruikers doen, maar wordt automatisch
gedaan als ze de disk ...]]></description>
			<content:encoded><![CDATA[<p></p><p>In een vorig <a href="http://atcomputing.nl/blog/archives/2011/03/index.php#e2011-03-28T13_25_32.txt">blog</a><br />
heb ik een backupscript behandeld dat gebruikt wordt om<br />
laptops te backuppen naar een externe usb hardeschijf. Het uitvoeren van dit<br />
script laat ik natuurlijk niet door de gebruikers doen, maar wordt automatisch<br />
gedaan als ze de disk aansluiten. Hiervoor maak ik gebruik van de<br />
functionaliteiten die de <code>udev</code>-daemon op linux biedt.</p>
<p>In mijn blog <a href="http://atcomputing.nl/blog/archives/2010/02/index.php#e2010-02-10T12_41_47.txt">&#8220;Hotpluggen van input-devices&#8221;</a><br />
heb ik het al eens gehad over <code>udev</code>.<br />
In onderstaand verhaal hoeven we alleen <code>udev</code> het backupscript te laten<br />
opstarten wanneer de<br />
usb-disk wordt aangesloten. Hiervoor moeten we wel voor <code>udev</code> de disk uniek<br />
kunnen identificeren. Anders wordt er wellicht op elk USB storage apparaat dat<br />
wordt aangesloten een backup gemaakt.<br />
Om de disk uniek te identificeren gebruik ik de Universal Unique Identifier<br />
die je door middel van het<br />
commando <code>blkid</code> kan opvragen. Bijvoorbeeld:</p>
<pre><code>blkid -o udev /dev/sdc1
ID_FS_UUID=03ef5f17-221b-4120-b417-fe04be37fa1d
ID_FS_UUID_ENC=03ef5f17-221b-4120-b417-fe04be37fa1d
ID_FS_TYPE=ext3
</code></pre>
<p>De optie <code>-o udev</code> zorgt ervoor dat <code>blkid</code> de output in een formaat giet dat<br />
voor <code>udev</code> bruikbaar is.<br />
Mocht je geen UUID krijgen dan kun je die met behulp van <code>tune2fs</code><br />
alsnog toevoegen.</p>
<p>De <code>udev</code>-configuratie kun je vinden onder <em>/lib/udev/rules.d</em>. Echter dit zijn<br />
de regels die<br />
door <code>udev</code> zelf en je distributie zijn gemaakt. Hier dien je niet je eigen<br />
regels aan toe te voegen, maar dat dien je in <em>/etc/udev/rules.d</em> te doen.<br />
Meestal zie je dat de bestanden in <em>*/rules.d</em> directories worden voorafgegaan door een nummer. Dit geeft<br />
dan de volgorde aan waarin <code>udev</code><br />
de regels moet afhandelen. Door geen nummer op te geven wordt het bestand als<br />
laatste afgehandeld en dat is in ons geval prima.<br />
We maken een bestand aan genaamd <em>backuplaptop.rules</em> en dit bestand hoeft in ons geval alleen de<br />
volgende<br />
regel te bevatten. </p>
<pre><code>ENV{ID_FS_UUID_ENC}=="03ef5f17-221b-4120-b417-fe04be37fa1d", RUN+="/usr/bin/backupserver $name"
</code></pre>
<p>Deze stelt dat als de variabele <code>ID_FS_UUID_ENC</code> gelijk is aan<br />
<code>03ef5f17-221b-4120-b417-fe04be37fa1d</code> de <code>udev</code>-daemon<br />
 het programma <code>/usr/bin/backupserver</code> moet runnen met als argument de naam<br />
van de device-file.<br />
De variabele <code>$name</code> is een interne variabele van <code>udev</code> en bevat de device node<br />
naam (bijvoorbeeld <code>sdg1</code>, <code>sda2</code>, <code>tty</code>, etc.) van het apparaat.</p>
<p>Ik ga er hier wel vanuit dat de variabele <code>ID_FS_UUID_ENC</code> wordt ingesteld als<br />
er een externe USB harddisk wordt aangekoppeld.<br />
Mocht dat nu niet het geval zijn, dan kun je dat alsnog bewerkstelligen door<br />
vóór bovenstaande regel in <em>backuplaptop.rules</em><br />
het volgende op te nemen:</p>
<pre><code>IMPORT{program}="/sbin/blkid -o udev -p $tempnode"
</code></pre>
<p><code>IMPORT{program}</code> zorgt ervoor dat de <code>udev</code>-daemon het commando <code>/sbin/blkid</code><br />
uitvoert en verwacht dan dat de uitvoer ervan een lijst van variabelen met<br />
waarden is die het dan instelt. De variabelen kunnen we dan via <code>ENV</code> weer<br />
opvragen om bijvoorbeeld te vergelijken.</p>
<p>Om te testen dat de rule goed wordt opgepikt kun je <code>udevadm</code> in test-modus<br />
als volgt gebruiken.</p>
<pre><code>udevadm test /sys/block/sdc/sdc1/
</code></pre>
<p>Je moet hierbij niet de device-file onder <em>/dev</em> opgeven maar het sysfs-pad<br />
voor de betreffende partitie.<br />
<code>udevadm</code> zal dan alle <code>udev</code>-configuratie inlezen en kijken welke regels door<br />
de <code>udev</code>-daemon zullen worden uitgevoerd.<br />
Als het goed is geeft dit een heleboel uitvoer, maar zou je ook moeten zien dat<br />
het script <code>backupserver</code> zal worden uitgevoerd:</p>
<pre><code>udevadm_test: run: '/usr/bin/backupserver sdc1'
</code></pre>
<p>Wanneer je nu je USB disk ontkoppelt en weer aansluit zou het script<br />
<code>/usr/bin/backupserver</code> moeten worden uitgevoerd. Dit script zal<br />
waarschijnlijk nog niet correct werken aangezien <code>zenity</code> toegang wil<br />
tot een Xorg server en dit niet zomaar is toegestaan.<br />
Dit probleem is het makkelijkst op te lossen door<br />
te zorgen dat wanneer de gebruiker inlogt het commando <code>xhost +</code> wordt gedraaid<br />
en in het script <code>/usr/bin/backupserver</code> de shell-variabele <code>DISPLAY</code> juist wordt<br />
ingesteld (meestal volstaat <code>export DISPLAY=:0.0</code>).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxweblogs.nl/2011/06/01/autostart-via-udev/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grafische gebruikersinteractie vanuit een script.</title>
		<link>http://www.atcomputing.nl/blog/archives/2010/12/index.php#e2010-12-31T13_55_31.txt?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=grafische-gebruikersinteractie-vanuit-een-script</link>
		<comments>http://www.atcomputing.nl/blog/archives/2010/12/index.php#e2010-12-31T13_55_31.txt#comments</comments>
		<pubDate>Fri, 31 Dec 2010 11:55:31 +0000</pubDate>
		<dc:creator>Martijn Brekhof</dc:creator>
				<category><![CDATA[Algemeen]]></category>
		<category><![CDATA[Systeembeheer, Tips and Tricks]]></category>

		<guid isPermaLink="false">http://www.atcomputing.nl/blog/archives/2010/12/index.php#e2010-12-31T13_55_31.txt</guid>
		<description><![CDATA[Een goede systeembeheerder maakt scripts. Scripts om zoveel mogelijk van z'n 
taken te automatiseren. Dat is fijn want dan kan de systeembeheerder zich
namelijk met nuttiger dingen bezig houden. 

Soms is echter een taak niet volledig te automatiseren ...]]></description>
			<content:encoded><![CDATA[<p></p><p>Een goede systeembeheerder maakt scripts. Scripts om zoveel mogelijk van z&#8217;n<br />
taken te automatiseren. Dat is fijn want dan kan de systeembeheerder zich<br />
namelijk met nuttiger dingen bezig houden. </p>
<p>Soms is echter een taak niet volledig te automatiseren en is er<br />
gebruikersinteractie nodig.<br />
Nu kan dat natuurlijk via een tekstuele interface en soms is dat ook de enige<br />
mogelijkheid. Maar wanneer je in een grafische omgeving werkt dan vind ik zo&#8217;n<br />
 tekstuele interface toch wel een beetje oubollig en mis ik bijvoorbeeld<br />
de mogelijkheid<br />
om notificaties via de desktop naar de gebruiker te sturen.</p>
<p>Een voorbeeld van een script waarbij grafische gebruikersinteractie erg<br />
wenselijk is, is het backupscript dat ik gebruik om laptops te<br />
backuppen op een externe USB harddisk. Gebruikers moeten zelf voor de backup<br />
de externe harddisk aansluiten. De backup-procedure start dan automatisch maar<br />
het tijdig aansluiten van de externe harddisk vergeten ze natuurlijk. Dus ze moeten<br />
hierop gewezen worden. Ik gebruik een script dat controleert hoe lang het<br />
geleden is dat er een backup is gemaakt. Als dat langer dan<br />
zoveel dagen geleden is dan moet de gebruiker hier een melding van krijgen als<br />
hij is ingelogd op zijn systeem.</p>
<p>De tool die ik voor de grafische gebruikersinteractie gebruik is Zenity.<br />
Er zijn alternatieven, maar zenity integreert nu eenmaal erg goed met de GNOME<br />
of KDE<br />
desktop omgeving.<br />
Zenity heeft een scala<br />
aan opties, zie de manpage voor een overzicht.<br />
Voor mijn backup-oplossing heb ik er maar een paar nodig en zal ik wat<br />
voorbeelden geven hoe ik in bepaalde situaties zenity gebruik voor de<br />
gebruikersinteractie.</p>
<ul>
<li>Bij problemen moet de gebruiker op de hoogte worden gesteld en eventueel worden verzocht het probleem te verhelpen.<br />
Bijvoorbeeld wanneer de harddisk niet toegankelijk is. Dit kan met zenity als volgt:</li>
</ul>
<pre><code>
zenity --question --title="Backupdisk niet toegankelijk" \
--text='De backupdisk is niet toegankelijk.
Koppel de disk en klik vervolgens op "Ga door" om verder te gaan.' \
--cancel-label='Stoppen' --ok-label='Ga door'
</code></pre>
<p>Op basis van de exit-code kunnen we dan achterhalen wat de gebruiker heeft<br />
  geantwoord. Exitcode 1 voor &#8220;Stoppen&#8221; en 0 voor &#8220;Ga door&#8221;.</p>
<ul>
<li>Het script zal ook weleens een notificatie moeten kunnen sturen naar de gebruiker.<br />
Bijvoorbeeld wanneer de backup klaar is. Het volgende zal de notificatie in<br />
het panel van de desktop laten zien:</li>
</ul>
<pre><code>
zenity --notification --window-icon=/usr/share/pixmaps/gnome-note.png \
--text "De backup is klaar. U mag de backupdisk nu ontkoppelen"
</code></pre>
<p>Ik vind dit zelf echter onvoldoende opvallen en een wat meer in het oog<br />
springende oplossing is de volgende:</p>
<pre><code>
zenity --info --text "De backup is klaar. U mag de backupdisk nu ontkoppelen"
</code></pre>
<p>Dit zal een notificatie midden op het scherm tonen. Backups zijn nou eenmaal<br />
belangrijk.</p>
<ul>
<li>Tijdens het maken van de backup wil ik graag weten wat de vorderingen zijn.<br />
Hier heeft zenity een mooie optie voor genaamd <code>--progress</code>. Je dient dan via de<br />
standard input het percentage aan te geven en zenity zal dan de<br />
progression-bar netjes aanpassen. Een voorbeeld van het gebruik is als volgt:</li>
</ul>
<pre><code>
for i in $(seq 1 100)
do
    echo "${i}"
    sleep 1
done |  zenity --percentage=0 --progress --title "Backup wordt gemaakt" \
--text='Backup is in gang gezet.\nNiet de disk ontkoppelen tijdens het \
backup proces!'
</code></pre>
<p>Nadeel is dat het niet altijd mogelijk is om de progressie-bar netjes te updaten tijdens de backup-procedure.<br />
Wanneer je de bestanden die zijn gekopieerd in een lijst wilt zien, kun je de <code>--list</code><br />
optie gebruiken als volgt:</p>
<pre><code>
zenity --list --title "Backup wordt gemaakt" --text='Backup is in gang gezet.
Niet de disk ontkoppelen tijdens het backup proces!' --column "Files" &lt; /tmp/gebackupt
</code></pre>
<p>Hierbij moet je vervolgens ervoor zorgen dat het bestand <code>/tmp/gebackupt</code> steeds<br />
de actuele lijst met bestanden die zijn gebackupt bevat. Zenity leest de<br />
updates dan steeds in en toont deze dan in een grafisch scherm. Het scherm<br />
heeft vervolgens een Cancel en OK knop. Ook hier kunnen we dan weer op basis<br />
van de exitcode achterhalen welke knop de gebruiker heeft ingedrukt.</p>
<p>Volgende keer zal ik laten zien hoe ik zenity in mijn backup-script toepas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxweblogs.nl/2010/12/31/grafische-gebruikersinteractie-vanuit-een-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSH display problemen getackeld</title>
		<link>http://www.atcomputing.nl/blog/archives/2010/02/index.php#e2010-02-08T11_03_07.txt?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ssh-display-problemen-getackeld</link>
		<comments>http://www.atcomputing.nl/blog/archives/2010/02/index.php#e2010-02-08T11_03_07.txt#comments</comments>
		<pubDate>Mon, 08 Feb 2010 09:03:07 +0000</pubDate>
		<dc:creator>Ton Kersten</dc:creator>
				<category><![CDATA[Algemeen]]></category>
		<category><![CDATA[Systeembeheer, Tips and Tricks]]></category>

		<guid isPermaLink="false">http://www.atcomputing.nl/blog/archives/2010/02/index.php#e2010-02-08T11_03_07.txt</guid>
		<description><![CDATA[AT Computing heeft enige tijd geleden besloten
over te gaan op een compleet nieuwe infrastructuur. Het gewone, bekende
spul, zoals een SAN, virtualisatie en Linux.

Nu heb ik aardig wat van die systemen ingericht en geconfigureerd en ik wilde
op een du...]]></description>
			<content:encoded><![CDATA[<p></p><p><a href="http://www.atcomputing.nl">AT Computing</a> heeft enige tijd geleden besloten<br />
over te gaan op een compleet nieuwe infrastructuur. Het gewone, bekende<br />
spul, zoals een SAN, virtualisatie en Linux.</p>
<p>Nu heb ik aardig wat van die systemen ingericht en geconfigureerd en ik wilde<br />
op een duidelijke manier kunnen zien op welke server ik zat. Nu kan dat in de<br />
prompt en op allerlei andere manieren, maar mij leek het leuk om dat voor het<br />
daadwerkelijke inloggen te doen. Met <code>SSH</code> is het mogelijk om in de<br />
configuratie te zetten dat er voor het inloggen een <em>banner</em> wordt getoond. Dit<br />
is van oorsprong bedoeld om juridische teksten over het gebruik van het systeem<br />
te tonen, maar dat kun je natuurlijk ook voor andere zaken gebruiken.</p>
<p>Nu alleen nog de inhoud van de <em>banner</em> file. Hiervoor heb ik het<br />
programma <a href="http://www.figlet.org/">Figlet</a> gebruikt en wanneer ik nu<br />
inlog op de server zou het er zo uit moeten zien:</p>
<pre><code> _ __ ___  _   _ ___  ___ _ ____   _____ _ __
| '_ ` _ \| | | / __|/ _ \ '__\ \ / / _ \ '__|
| | | | | | |_| \__ \  __/ |   \ V /  __/ |
|_| |_| |_|\__, |___/\___|_|    \_/ \___|_|
           |___/
</code></pre>
<p>Maar zo af en toe als ik in log staat er niet wat ik verwacht, maar </p>
<pre><code> _ __ ___  _   _ ___  ___ _ ____   _____ _ __
| '_ ` _ \\| | | / __|/ _ \\ '__\\ \\ / / _ \\ '__|
| | | | | | |_| \\__ \\  __/ |   \\ V /  __/ |
|_| |_| |_|\\__, |___/\\___|_|    \\_/ \\___|_|
           |___/
</code></pre>
<p>Nou, dat is niet wat ik bedoel. Alle backslashes worden verdubbeld en ik weet<br />
nog niet waarom. Discussie met collega&#8217;s stuurde me richting het programma<br />
<code>mingetty</code>, omdat dat de inlog procedure afhandelt. Op ons CentOS 5.4 systeem<br />
staat in de source code van <code>mingetty</code></p>
<pre><code>if ((fd = fopen (ISSUE, "r"))) {
    while ((c = getc (fd)) != EOF) {
        if (c == '\\')
            output_special_char (getc(fd));
        else
            putchar (c);
    }
    fflush (stdout);
    fclose (fd);
}
</code></pre>
<p>dus dat zou het best wel eens kunnen zijn.</p>
<p>Om nu niet direct <code>mingetty</code> opnieuw te compileren en allerlei andere<br />
problemen te veroorzaken, heb ik als eerste test een <code>mingetty</code> escape<br />
code in de <em>banner</em> file opgenomen. Bij het inloggen werd die niet<br />
door <code>mingetty</code> geparsed, dus dat kon de oorzaak niet zijn. Even verder<br />
nadenkend kwam ik tot de conclusie dat <code>mingetty</code> in het hele spel niet<br />
voor komt en dat dit dus een dood spoor is.<br />
<br />
Dan zijn er niet meer zo heel veel opties over.</p>
<p>Uit de <code>OpenSSH</code> server source code bleek duidelijk dat daar het probleem niet<br />
kon zitten, omdat deze de <em>banner</em> file met een &#8216;atomic write&#8217; naar de<br />
overkant stuurt. Daar zit dus geen enkele vorm van processing tussen.</p>
<p>Maar als het de server niet is, dan misschien de client. Verder zoekend in<br />
de source code toonde aan dat hier het probleem zou moeten zitten.<br />
In de file <code>sshconnect2.c</code> staat (in mijn versie, OpenSSH version 5.3p1) de<br />
functie <code>input_userauth_banner</code> die de <em>banner</em> laat zien die door de server<br />
gestuurd wordt. Op regel 417 staat:</p>
<pre><code>strnvis(msg, raw, len * 4 + 1, VIS_SAFE|VIS_OCTAL);
</code></pre>
<p>Dus<br />
&#8220;unsafe&#8221; characters en &#8220;octal&#8221; tekens worden gecodeerd. De manual pagina van<br />
<code>strnvis</code> zegt: </p>
<blockquote>
<p>There is one additional flag, VIS_NOSLASH, which inhibits<br />
  the doubling of backslashes and the backslash before the<br />
  default format</p>
</blockquote>
<p>Ik heb de regel dus veranderd in</p>
<pre><code>strnvis(msg, raw, len * 4 + 1, VIS_SAFE|VIS_OCTAL|VIS_NOSLASH);
</code></pre>
<p>en daarna SSH opnieuw gecompileerd. Als ik nu met deze nieuwe client<br />
inlog in de nieuwe server, dan is het probleem spoorloos verdwenen.</p>
<p>Toen ik dit probleem als bug report wilde aanmelden bij de OpenSSH<br />
ontwikkelaars bleek dat ongeveer een uur voor mij iemand anders dezelfde<br />
bug en patch al had ingediend. Het probleem zal worden opgelost in<br />
versie 5.4, maar het kan wel even duren voordat het in de distributies<br />
beschikbaar is.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxweblogs.nl/2010/02/08/ssh-display-problemen-getackeld/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

