key PROGRAM in udev e fallimento della regola associata

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom 15 mag 2005, 0:00
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze
Località: Prato
Contatta:

key PROGRAM in udev e fallimento della regola associata

Messaggio da absinthe »

ciao,

dato che mi ero rotto di scrivere tutte le volte una regola specifica per ogni storage usb che dovevo attaccare al pc ho deciso di usare la direttiva PROGRAM di udev così da creare in maniera dinamica il device name persistente associato ad ogni dispositivo. ora però è successo un fatto strano. ho fatto un abbozzo di script ed ho scritto una regola associata per udev. lo script è il seguente:

Codice: Seleziona tutto

#!/bin/sh

#the following code gets kernel name for the device (provided by udev) and retrive vendor and model strings to create a persistent explanatory device name. actually the code works only for usb mass storages.

ECHO=echo

UDEVINFO=$(which udevinfo)
[ $UDEVINFO = "which" ] && { $ECHO "unable to locate udevinfo. creation failed"; exit 1;}

#run udevinfo
VENDOR=$($UDEVINFO -a -p /sys/block/$1/ | grep  -m1 "SYSFS{vendor}" | cut -f2 -d \" | awk '{printf $1}')
[ $VENDOR = "" ] && VENDOR="unk"
MODEL=$($UDEVINFO -a -p /sys/block/$1/ | grep  -m1 "SYSFS{model}" | cut -f2 -d \" | awk '{printf $1}')
[ $VENDOR = "" ] && VENDOR="unk"
echo "$VENDOR-$MODEL"
la regola di udev è la seguente:

Codice: Seleziona tutto

#usb pen
BUS=="scsi", KERNEL=="sd*", PROGRAM="/home/utente/slack/scripting/rc.udev.ruler %k", NAME="%c"
ho provato a testare la regola con udevtest. ho inserito la mia pennina (vista come sda) ed ho digitato il comando con il seguente output:

Codice: Seleziona tutto

bash-3.1# udevtest /block/sda
main: looking at device '/block/sda' from subsystem 'block'
run_program: '/home/utente/slack/scripting/rc.udev.ruler sda'
run_program: '/home/utente/slack/scripting/rc.udev.ruler' (stdout) 'LEXAR-JUMPDRIVE'
run_program: '/home/utente/slack/scripting/rc.udev.ruler' returned with status 0
udev_rules_get_name: rule applied, 'sda' becomes 'LEXAR-JUMPDRIVE'
run_program: '/lib/udev/usb_id -x'
run_program: '/lib/udev/usb_id' (stdout) 'ID_VENDOR=LEXAR'
run_program: '/lib/udev/usb_id' (stdout) 'ID_MODEL=JUMPDRIVE_SPORT'
run_program: '/lib/udev/usb_id' (stdout) 'ID_REVISION=3000'
run_program: '/lib/udev/usb_id' (stdout) 'ID_SERIAL=LEXAR_JUMPDRIVE_SPORT_1069A701042634271105'
run_program: '/lib/udev/usb_id' (stdout) 'ID_TYPE=disk'
run_program: '/lib/udev/usb_id' (stdout) 'ID_BUS=usb'
run_program: '/lib/udev/usb_id' returned with status 0
udev_rules_get_name: add symlink 'disk/by-id/usb-LEXAR_JUMPDRIVE_SPORT_1069A701042634271105'
run_program: '/lib/udev/path_id /block/sda'
run_program: '/lib/udev/path_id' (stdout) 'ID_PATH=pci-0000:00:1d.7-usb-0:8:1.0-scsi-0:0:0:0'
run_program: '/lib/udev/path_id' returned with status 0
udev_rules_get_name: add symlink 'disk/by-path/pci-0000:00:1d.7-usb-0:8:1.0-scsi-0:0:0:0'
udev_device_event: device '/block/sda' already in database, validate currently present symlinks
udev_node_add: creating device node '/dev/LEXAR-JUMPDRIVE', major = '8', minor = '0', mode = '0660', uid = '0', gid = '6'
udev_node_add: creating symlink '/dev/disk/by-id/usb-LEXAR_JUMPDRIVE_SPORT_1069A701042634271105' to '../../LEXAR-JUMPDRIVE'
udev_node_add: creating symlink '/dev/disk/by-path/pci-0000:00:1d.7-usb-0:8:1.0-scsi-0:0:0:0' to '../../LEXAR-JUMPDRIVE'
main: run: 'socket:/org/kernel/udev/monitor'
in sostanza secondo udevtest la regola funziona alla perfezione. il fatto è che non viene creato nessun device... e dato che udevtest non mi da errori non so che pesci pigliare.
qualcuno ha mai provato la cosa?

grazie,
M

Avatar utente
alex.franci
Linux 2.x
Linux 2.x
Messaggi: 380
Iscritto il: mer 26 lug 2006, 10:26
Località: Bologna
Contatta:

Messaggio da alex.franci »

ciao!
meglio tardi che mai, no? :D
ho avuto il tuo stesso problema. ho capito che PROGRAM sta per un programma vero è proprio (per esempio se monti la macchina fotografica apri the gimp). per gli script usa run:

RUN="[/path/allo/script.sh]"

Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom 15 mag 2005, 0:00
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze
Località: Prato
Contatta:

Messaggio da absinthe »

ciao,

in realtà PROGRAM è la direttiva per l'esecuzione di un programma PRIMA che sia creato il device, RUN è la direttiva per l'esecuzione di un programma DOPO che è stato creato il device. in particolare io volevo usare PROGRAM per definire il nome del device... in effetti provando con un binario la cosa è andata a buon fine, mentre con uno script no... quello che non capisco è perchè la simulazione però non segnala errori... mah... appena mi ritorna il pc dall'assistenza faccio due prove.

grazie,
M

Avatar utente
alex.franci
Linux 2.x
Linux 2.x
Messaggi: 380
Iscritto il: mer 26 lug 2006, 10:26
Località: Bologna
Contatta:

Messaggio da alex.franci »

prego :)
fammi sapere
ciaociao

Rispondi