Robins blogg

2006-09-06

Bash-tips: #1 - e-flaggan

Filed under: — site admin @ 22:09

Ni känner säker igen det. Man skriver ett skript som gör nåt nyttigt, men en dag fallerar det och det tar en massa tid att stöda upp efter allt skriptet gjorde efter det fallerade.

För att skriva mera tillförlitliga bash-skript utan att ha överdrivet mycket felkontroller kan man använda en option som automatiskt avslutar skript vid fel. Då slipper man skript som går vidare och saboterar en massa data när nåt kommando går fel. Flaggan heter ‘-e’ och kan läggas på första raden i bash-skript eller senare, då med kommandot set -e

#!/bin/bash -e
trap 'echo "***error**"' 0

tar cvfz /tmpdir/arkiv.tgz *
rm -rf *

# Stäng av felhanteringen just före vi avslutar
trap 0

I detta exempel kopierar vi först en massa filer och raderar dem sedan. Men om arkivet inte går att skapa så vill vi naturligvis inte radera allt. Med felkontroll på allt blir skripten säkrare. Utan -e skulle skriptet radera allt och tyvärr är det så många skript gör eftersom det är så jobbigt att lägga in felkontroller. I ett stabilt skript är en stor del av koden explicita felkontroller. Trap-kommandot är ett inbyggt kommando som fångar signaler, man signal(2), men även några anda händelser, t.ex. när skript avslutas vilket vi är intresserade av här för att få ut ett felmeddelande när nåt går fel.

Sen inträffar det förstås att kommandon kan ge en felkod utan att man vill terminera direkt. Det kan finnas en alternativ väg eller så vill man anpassa felmneddelandet. Om kommandot är ett villkor i en if-sats bryts inte skriptet om kommandot går fel utan if-satsen får ta hand om felkoden.

#!/bin/bash -e
trap 'echo "***error**"' 0

if ! tar cvfz /tmpdir/arkiv.tgz *
then
 tar cvfj /tmpdir/arkiv.tar.bz2 *
fi
rm -rf *

# Stäng av felhanteringen just före vi avslutar
trap 0

I detta fall provar vi att komprimera hårdare (ifall disken inte räckte till för vanlig gzip. Om bzip2-komprimeringen misslyckas terminerar skriptet.

I slutändan hamnar man på att skriva ungefär like mycket felhanteringskod med -e, främst för att få fram bra felmeddelanden, men de tidiga versionerna, där logiken är vikitigast, kommer att vara mycket mer robusta och lättare att felsöka.

2006-02-16

CVS för att spåra konfigurationer

Filed under: — site admin @ 22:02

För att initiera CVS-arkiv finns en import-funktion. Man måste dock inte använda det bara för att spara källkod. Man kan använda det för backup också eller för att spåra konfigurationsändringar och se när de skett. När jag säger konfigurationsändringar är det /etc jag tänker på.

Skapa arkivet med cvs -d /arkivkatalog init

Skapa seden ett skript att köra varje dag. Med vixie cron kan du helt enkelt skapa filen med följande namn
/etc/cron.daily/etcbackupviacvs och detta innehåll:

#!/bin/bash
cd /etc
cvs -d /arkivkatalog -Q import -m backup myhost/etc backup backup$(date +%Y%m%d%H%M)

Glöm inte att chmodda den med chmod +x /etc/cron.daily/etcbackupviacvs

Kör skriptet en gång och skapa initialkonfigurationen.

Om nåt slutar fungera eller om man undrar vad nån wizard gjort, kan man titta i CVS och se vad som ändrats. Ex.Vad
har hänt i brandväggsskonfigen när jag senast ändrade konfigurationen. Kör först cronjobbet manuellt genom att köra
skriptet ovan (eller vänta till cron drar igång jobbet).

# cvs -d /arkivkatalogl/backupcvs rdiff -u -r backup200602150200 -r backup200602161800 myhost/etc/shorewall
cvs rdiff: Diffing myhost/etc/shorewall
Index: myhost/etc/shorewall/interfaces
diff -u myhost/etc/shorewall/interfaces:1.1.1.2 myhost/etc/shorewall/interfaces:1.1.1.3
--- myhost/etc/shorewall/interfaces:1.1.1.2    Wed Jan 25 23:19:01 2006
+++ myhost/etc/shorewall/interfaces    Thu Feb 16 22:20:24 2006
@@ -193,5 +193,4 @@
 #
 net    eth0    detect
 loc    eth1    detect
-loc    tap2    detect
 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Ajdå. Mandrivas wizard såg inte OpenVPN’s nätverksgränssnitt som inte var aktivt när wizarde kördes. Visserligen varnade den, men den sade inte vad som var problemet.

2006-01-16

Inloggningsruta i VNC

Filed under: — site admin @ 00:01

Standardsättet att köra VNC är att man drar igång en session som är inloggad som en viss användare. Att köra som man brukar köra X är inte mycket svårare. Så här gjorde jag i Mandriva 2006.

  • Skapa en user som heter vnc.
  • Skapa filen /etc/xinet.d/vnc
    service vnc
    {
            socket_type     = stream
            protocol        = tcp
            wait            = no
            user            = vnc
            server          = /usr/X11R6/bin/Xvnc
            server_args     = -inetd -query localhost -once -geometry 1024x768 -depth 16
            disable         = no
            only_from       =  ip/mask som får komma åt tjänsten. t.ex. 169.169.0.0./16.
    }
    

  • Lägg in denna rad i /etc/services
    vnc 5900/tcp
  • Redigera bara /etc/kde/kdmrc så och ändra i Xdmcp-sektionen.
    [Xdmcp]
    Enable=true
    

När vi ändå är inne på ämnet… Om man inte vill köra X på konsolen (jag har mina skäl), men vill kunna köra X via vnc emellanåt så ligger lösningen ochså i kdmrc. Ändra

[General]
StaticServers=

Dvs säg åt KDM att inte starta servern på :0 som annars är standard

2005-12-27

Rädda disk med trasig partitionstabell.

Filed under: — site admin @ 19:12

Min 60GB:ar rasade. Det syntes som att jag inte hade några extended-partitioner längre. Med smartmontools kunde man se att det fanns fel på disken, liksom i /var/log/messages.

Här är stegen aningen förenklat för att återställa.

  • Kopiera disken.

    Det är ingen idé att försöka laga innehållet på en trasig disk. Det som händer är att man trasar datat ännu mera eller t.om. slutgiltigt. Jag genom att boota maskinen med Mandrake Move (Knoppix funkar också) och kopiera disken till en annan disk, i detta fall till en annan maskin via ssh. En FireWire/USB-disk är ett alternativ (min maskin var en laptop så en annan intern disk var inget alternativ).
    dd if=/dev/hda bs=512 conv=noerror,sync | ssh robin@kivi cat \>xine.hda

    Det här tar tid med ett normalt nätverk. 60GB / 100Mb = ~ 2 timmar.
  • Skanna disken efter partitioner.

    gpart söker efter sånt som ser ut som partitioner.
    losetup /dev/loop0 xine.hda
    gpart -f -g -v /dev/loop0


    Bland det intresanta (råkar veta att storleken verkar rätt)

    Possible partition(SGI XFS filesystem), size(9528mb), offset(47692mb)
       type: 131(0x83)(Linux ext2 filesystem)
       size: 9528mb #s(19514496) s(97675263-117189758)
       chs:  (1023/255/0)-(1023/255/0)d (0/0/0)-(0/0/0)r
       hex:  00 FF C0 FF 83 FF C0 FF FF 67 D2 05 80 C4 29 01
    


    Man får en hel del falska tips om partitioner. Det är inte så mycket att oroa sig för mera än att det tar tid att prova alla, men det kan man undvika om man
    har en aning om hur stora partitioner man hade.

  • Montera partitioner
  • Startsektorn * 512 (blockstorlek) ger offset till partitionen. Gör om losetup
    med offset.

     losetup -d /dev/loop0
     losetup -o $((97675263*512)) /dev/loop0 xine.hda
    

    Nu kan man (skall kunna) montera filsystemet med

    mount /dev/loop0 /mnt/cdrom

    Är man orolig kan man prova detta istället

    mount -t xfs /dev/loop0 /mnt/cdrom -o ro,norecovery

    Nu kan man komma åt innehållet som vanligt.

    ls /mn/cdrom

2005-09-30

D810 multimedia kernel

Filed under: — site admin @ 23:09

Genom att byta kärna till multimediakärnan som finns i Mandrivas contrib-sektion slapp jag krasherna. Dessutom är det inte ljudrelaterat som jag trodde tidgare. Vad det är vet jag dock inte.

2005-09-24

Mera anteckningar kring D810, Blåtand

Filed under: — site admin @ 23:09

Suspend verkar inte fungera (SATA-stödet saknas) så det blev att glömma bara och jag har haft hängningar på ljudet. Lite mysko eftersom min förra maskin hade samma ljudchip.

Däremot fungerar BlueTooth fint. I mandriva får man dock installera paketet “manuellt” eftersom nån wizard för det saknas. Så här gjorde jag för att få igång det (Mandriava 2006 RC2).

Installera kdebluetooth
Byt ut bluepin mot kbluepin. Det gör man med ln -fs /usr/lib/kbluetooth/kbluepin /etc/alternatives/bluepin (som root).
Nästa gång KDE startas finns ett litet K (mycket likt Bluetooh-B:et i systembrickan). Klicka på den och blädda runt i telefonen. Du kan också starta bluetooh direkt
med kommando kbluetoothd.

För att ringa upp via Bluetooth (modem) måste du dessutom installera kppp. Drakconf hjälper inte till här heller annat än med modem som finns på /dev/ttyS*. Det är dock inte så svårt.

Installera kppp med urpmi eller kontrollpanelen och starta det. Välj “kör kommado” i startmenyn och skriv kppp om Kppp inte dykt upp i startmenyn än.

Lägg till modemet. Det skall heta /dev/rfcomm0
Lägg till ett konto med “manuella” inställningar (inte wizard alltså). Om det är GPRS du tänker använda så är telefonnumret *98*1#. Välj “skriptbaserad” för autentisering (inget skript behövs dock). Det sker ingen mera autentisering än att mobiloperatören kontrollerar att din telefon har ett abonnemang.

Lägg upp kommandon att köra före och efter upp- respektive nerkoppling i kör-fliken. Före uppkoppling
skall en modemenhet initialiseras. Det görs med kommandot sudo rfcomm bind 0 00:0e:07:e1:89:0cdär siffrorna är ett id på din telefon.
Du ser siffrorna i adressfältet i Konqueror när du bläddrar i telefonen. Varje telefon behöver ett eget konto med denna metod.
Efter nerkoppling skall kommandot sudo rfcomm unbind 0. Det är iofs inte jätteviktigt.

För att kunna köra rfcomm-kommandona som vanlig användare måste du lägga upp tilstånd för dig att köra rfcomm som root. Det gör du med kommandot visudo -f sudoers. Lägg in raden
me ALL = NOPASSWD: /usr/bin/rfcomm
(ersätt me med namnet på ditt konto) sist i filen.

2005-09-21

Dell D810

Filed under: — site admin @ 00:09

Fick en ny dator idag. En skinande Dell Latitude D810. Tänkte testa Gentoo först men den CD:n ville inte boota så det fick bli Mandriva (som vanligt) istället. Förmodligen inget jag behöver ångra. Det finns med Mandriva är att det mesta funkar direkt. Eftersom det är Free edition och RC därtill, och den med kommersiella drivrutiner kommer först om nån vecka så saknas firmware för WLAN:et och accelererade drivrutiner för grafiken. Sånt får man påta in för hand, men det borde inte vara svårt.

Mandriva 2006 känns fräsch.

2005-05-15

KDE login with photos from LDAP

Filed under: — site admin @ 22:05

(Updated 2005-08-22)
KDM looked like this in the first version
If you are using LDAP for authentication users you also have to option of storing address book data, incliuding a photo, in the same record. Not all applications can use it, but KAddressbook can.

The KDE login manager (KDM) can show photos of users, but only locally stored photos. It doesn’t know of the ones in LDAP even if it PAM is setup to use LDAP.
(more…)

2005-04-27

KNemo OpenVPN

Filed under: — site admin @ 22:04

KNemo skärmdump
Om man vill slippa göra su etc för att koppla upp sig med OpenVPN så kan man använda sig av KNemo som är en trevlig liten nätverksövervakare. För att den skall känna igen att OpenVPN finns så måste VPN:et vara igång när du tar hjälp av autokonfigurationen i knemo.

Installera KNemo (more…)

2005-04-22

Autoconf-magi

Filed under: — site admin @ 00:04

I öppen-källkodsvärlden finns svart magi. Namnet är autoconf.

För att vara komplett måste duoptimize-programmet byggas via configure. Här följer en kort historia. Det finns dokumentation i info format (info:autconf i Konqueror, info autoconfo på kommandoraden).

Här är en kort historik, med mina fel.
(more…)

2005-04-04

Kompare two directories

Filed under: — site admin @ 18:04

I found it odd that kompare (a KDE diff viewer) didn’t come with a service menu for comparing two files or directories, only for viewing patches. Obvious as is someone already solved the problem. The service menus can be downloaded from here .

[Supplementary info in swedish]Om du vill ha menyn på svenska så tar du dessa två istället komparetwofolder.desktop komparetwo.desktop och ersätta de som finns i paketet.

2005-04-02

Disk usage optimizer

Filed under: — site admin @ 18:04

This program can reuse disk space in unix-style (e.g. Linux) systems by removing copies of files and replacing them with hard links.

Source (c++) at

USE AT YOUR OWN RISK.. and have fun!

phpBB2 ldap auth

Filed under: — site admin @ 18:04

Here is a patch for the LDAP auth mod for phpBB2. I made it a while ago so now I attempted to extract what I did.

The following archive contains patches (all mixed up, the split is chronological..)

- LDAPv3 (character set conversion on the LDAP data),
- Swedish translation of the LDAP auth mod.
- an update method for LDAP data (every login, not just the first time)
- support for using posixGroup in the LDAP server.

phpBB_LDAP_wrapup-0.1.tgz

Once more; it is an unverified change discovery so far and configuring the LDAP parameters require even more LDAP knowledge than before :(

If there is any interest I’ll may try to clean this up.

USE AT YOUR OWN RISK.. and have fun!

2005-03-10

Ooops

Filed under: — site admin @ 04:03

Ok, så blockerar vi all access till port 8888 från andra än localhost. Enkelt.

[root@remotehost root]# iptables -I INPUT -s ! 127.0.0.1 -j REJECT

Äh, glömde några parametrar. Pil upp.

Oj… då…

:(

2005-03-08

Äntligen måndag

Filed under: — site admin @ 20:03

Ett litet problem med stora suckar, men nu har jag fixat så måndag är första dag i kalendern. Applicera denna patch så får du också till det.

2004-12-27

Multimediaknapparna

Filed under: — site admin @ 01:12

på tangentbordet försvann i diskkraschen. Det är inte så svårt men för den som missat (och för mig ifall jag tappar dem igen :-( ), men det är ju lite dumt när lineakconfig kraschar utan att göra färdigt det den skall.

Installera lineakd (från contrib i Mandrake)
Konfigurera lineak med dessa kommandon för en I8500 (dvs den jag har).

Se till att $HOME/.lineak/lineakd.conf innehåller detta


KeyboardType = DELL-I8600
CdromDevice = /dev/cdrom
MixerDevice = /dev/mixer

AudioPrev = “dcop kaffeine KaffeineIface previous”
AudioPlay|Pause = “dcop kaffeine KaffeineIface isPlaying|grep -q false && dcop kaffeine KaffeineIface play || dcop kaffeine KaffeineIface pause”
AudioStop = “dcop kaffeine KaffeineIface stop”
AudioNext = “dcop kaffeine KaffeineIface next”
AudioRaiseVolume = “aumix -v+”
AudioLowerVolume = “aumix -v-”
AudioMute = “aumix -v 0″

Starta sedan om lineakd med killall linkeakd; (lineakd&)

Det mesta här hos mig är KDE-centrerat och Kaffeine är min mediaspelare. Notera att aumix fungerar trots att man använder arts för att sköta ljudet.

Nån som inte kondenserad syntax gillar kanske inte paus-kommandot ovan. Ersätt då med:


AudioPlay|Pause = "if [ $(dcop kaffeine KaffeineIface isPlaying) = false ];then dcop kaffeine KaffeineIface play;else dcop kaffeine KaffeineIface pause;fi”

De två varianterna är inte helt ekvivalenta, men i praktiken gör de samma sak.

2004-11-08

CVS history file viewer

Filed under: — site admin @ 11:11

Here’s a history file browser for integration with ViewCVS. It is a patch against viewcvs per 20040223, i.e. the version included in the latest MandrakeLinux versions. It is based on a perl hack I made a long time ago on top of the cvs command. This is a rewrite in python started some time ago (hence the old baseline). It applies cleanly onto the corresponding cvs version. It is not complete though, maybe later.

MandrakeLinux RPM and SRPM. Patch here.

(updated version against head + RDF)MandrakeLinux RPM and SRPM. Patch here.

The browser works off the CVSROOT/history file and has the drawbacks that the user may force CVS not to update the file. Another drawback is that it does not scale well with since it reads the whole history file, which may be very large. Don’t use it as a security tools and don’t use it on high volume servers.

  • Features

    • Lists add/remove/modify entries
    • Direct access to difference for history entry
    • Restriction on history length, browser per date (not time yet), last week|month|year
    • Directory sensitive. Lists only history entries for the tree where the history listing was initiated
    • RDF
  • Non-features, I’ve thought about
    • Sorting by column
    • by upper andlower dates
    • Limit search by user
    • Subversion support

2004-10-17

DHCP upprensning

Filed under: — site admin @ 22:10

Non-swedish readers may just want to skip to the README file in the tar ball The package provides automatic merging of DNS resolver info for multiple network interfaces

När jag använder OpenVPN så har(hade) jag ett litet problem. För att bekvämt komma åt kontorsnätet måste jag ange nya namnservrar i /etc/resolv.conf Det är ju inte så svårt att lösa med ett skript, men problemet är att när min vanliga ethernetuppkoppling förnyar sin IP-adress så kommer /etc/resolv.conf att skrivas över och det up-scriptet gjorde blir ogjort.

En ev fungerande och förhoppningsvis utökningsbar lösning är denna tjärboll. För Mandrake 10.1 (och kanske andra) finns en RPM och dess motsvarande SRPM för den intresserade.

Den har säkert sina problem, men den funkar bättre än min förra lösning och är inte skräddarsydd för just min maskin längre. Ok, en lite sak finns men den torde inte störa dem som inte behöver “fixen”.

BTW: Testa KNemo om du kör KDE. Den ger fina miniprogram i systembrickan för att kontrollera nätverksgränssnitt.

Uppdatering: Notera att jag vill ha in DNS-inställningarna från ethernetgränssnittet, men inte bara dem. Jag vill ha dem från openvpn, ppp etc också

2004-10-07

Windows är billigare att aega

Filed under: — site admin @ 01:10

I Microsoft Windows, a lower Total Cost of 0wnership jämförs kostnaden för att överta ett Windowsbaserat system jämfört med samma sak för Linux.

Slutsatsen är att Windows har lägre TC0. :-) err.. Bra papper med hum0r.

Länken ovan är till ett OpenOffice-dockument. PDF finns på http://www.immunitysec.com/resources-papers.shtml.

2004-10-03

Nyckelhelvetet

Filed under: — site admin @ 22:10

Vänner av paranoid ordning installerar inte program som saknar nycklar eller vars signaturer inte kan verifieras. Uppdaterade just till cookerversionen av Mandrake (med contrib). Naturligvis används nya nycklar och maskinen hittar dem inte. Gäller inte delarna på CD, utan sånt som tillkommit på ftp-servrarna. I detta fall en nyckel med id 78D019F5

ftp://ftp.sunet.se/pub/Linux/distributions/mandrakelinux/official/10.0/i586/Mandrake/base/pubkey2

Eftersom den kommer från en publik server så skal du verifiera nyckeln via denna.
http://www.mandrakesoft.com/security/RPM-GPG-KEYS

Sätt pålitlighet til “fullständig” och signera. Om gpg (t.ex. kgpg) tycker den är ok så är det ok att exportera den till fil och sedan köra gpg –import fil och rmp –import fil som root och fortsätta installationen.

Powered by WordPress