mercoledì 1 aprile 2009

Debian chroot

Se usando debian all'interno di un chroot ci si scontra con questo problema:

Can not write log, openpty() failed (/dev/pts not mounted?)

accertarsi di aver montato i file system speciali dev, proc e devpts. Per farlo basta dare i seguenti comandi prima di eseguire il comando chroot:
CHROOT=/opt/sid
mount -o bind /dev $CHROOT/dev
mount -o bind /proc $CHROOT/proc
mount -t devpts none $CHROOT/dev/pts
sudo chroot $CHROOT


lunedì 16 marzo 2009

Scrolling con screen

Per riuscire a scrollare con la rotella del mouse all'interno di screen è sufficiente aggiungere la seguente riga al file di configurazione di screen stesso che si trova in "$HOME/.screenrc"

termcapinfo xterm* ti@:te@

Firefox non parte

Quando Firefox viene chiuso in modo anomalo, al successivo riavvio non parte perchè crede che ci sia già in esecuzione un'istanza di se stesso (anche se in realtà non c'è). In questo caso è sufficiente rimuovere il file ".parentlock" nella cartella di configurazione di Firefox; ad esempio nel mio caso il percorso del file è:

~/.mozilla/firefox/xfd24992.default/.parentlock

venerdì 21 novembre 2008

Dump via rete di una partizione ext3 remota

ssh root@macchina.dominio.net 'dump -0 -f - /' > partizione.dump

martedì 18 novembre 2008

Redboot, Linux, telnet e CTRL+C

In alcune situazioni capita di dover accedere ad Redboot attraverso un socket tcp anzichè attraverso la porta seriale. Ad esempio può capitare di dover accedere a Redboot attraverso telnet sulla porta 9000. In questi casi è importante bloccare riuscire a bloccare lo script di avvio prima che venga caricato inviado sul prompt di Redboot (attraverso il socket TCP) il comando CTRL+C (come si fa normalmente attraverso la porta seriale).
Il carattere che viene generato quando si digita CTRL+C è il carattere ascii 0x03 (man ascii); quindi con il seguente comando si può inviare tale carattere a Redboot (ovviamente sostituendo indirizzo ip e porta a seconda delle proprie esigenze):

echo -e "\0003" | nc 192.168.1.1 9000

venerdì 31 ottobre 2008

Monitor DELL Latitude 110L e ACPI

Installando Linux sul portatile DELL Latitude 110L, con molte distribuizioni il monitor non gestisce correttamente il bottone di spegnimento del monitor. In pratica, quando il portatile viene chiuso il monitor si spegne ma quando il portatile viene successivamente aperto il monitor non si riaccende.

Ecco la soluzione adottata...

Innanzi tutto bisogna installare il pacchetto acpid e il pacchetto vbetool (in distribuzioni diverse da ubuntu potrebbero chiamarsi in modo differente).

Poi bisogna capire il tipo di messaggio ACPI che viene generato quando si chiude il monitor; ad esempio ci si può collegare in ssh, lanciare il comando acpi_listen e chiudere il monitor.

Poi bisogna creare lo script che si occupa di accendere/spegnere lo schermo e bisogna salvarlo come /etc/acpi/lidbtn.sh. Il contenuto del file deve essere:

#!/bin/bash
if [[ ! `grep open /proc/acpi/button/lid/*/state` == "" ]]

then

logger "acpi lid opened"
/usr/sbin/vbetool dpms on

else
logger "acpi lid closed"

if test -f /tmp/xLFP
then

echo -n mem > /sys/power/state
fi
fi

Dopo bisogna associare lo script creato all'evento di chiusura/apertura del portatile; bisogna quindi creare il file /etc/acpi/events/lidbtn con questo contenuto:

# /etc/acpi/events/

lidbtn
event=button[ /]lid
action=/etc/acpi/lidbtn.sh


(ovviamente se l'evento generato dal proprio monitor è diverso, bisogna modificare il file lidbtn)

mercoledì 14 maggio 2008

Iterare su file con spazi in bash

Per iterare su un elenco di file, il modo più intuitivo è quello di usare il costrutto for della bash. Ad esempio se volessimo stampare a video tutti i file php nella cartella corrente potremmo usare:

for i in `find ./ -name "*.php"` ; do echo "PHP: $i" ; done

In realtà tale comando non si comporta come vorremmo se ci sono dei file contenenti uno spazio. Questo perchè il costrutto for si aspetta un elenco di stringhe separate dallo spazio. In alternativa al comando precende, si può sempre usare il seguente comando (anche se non ci sono spazi nei nomi dei file):

find ./ -name "*.php" | while read i; do echo "PHP: $i" ; done