Acessa uma variável pelo nome no udev?

3

Estou tentando obter acesso ao tipo de partição (o campo de um byte no registro mestre de inicialização) no udev, para que eu possa definir a propriedade e as permissões com base no tipo de partição. O desafio é claro que, embora eu queira definir o proprietário, etc. de sda1 , a tabela de partição é, na verdade, parte de seu pai, sda . (Claro, existem muitos discos, não apenas sda)

Consegui obter o tipo de partição de todas as partições primárias importadas para a entrada do banco de dados do udev em cada disco. Isso adiciona quatro entradas ENV a cada disco, uma por partição primária possível. Eles se parecem com isso, como mostrado por udevadmin info --query=all :

E: LOCAL_PARTTYPE_P1=fd
E: LOCAL_PARTTYPE_P2=da
E: LOCAL_PARTTYPE_P3=00
E: LOCAL_PARTTYPE_P4=00

Eu posso então ter acesso àqueles no dispositivo de partição (sda1) usando um IMPORT{parent} . O número da partição (1 a 4) pode ser encontrado em ATTR{partition} . O problema é obter o tipo de partição this .

Parece que ENV{LOCAL_PARTTYPE}="$env{LOCAL_PARTTYPE_P$attr{partition}}" deve fazer isso, mas não funciona. Se você retirar o $ inicial, o nome gerado está correto, o udev não fará a pesquisa indireta.

A única maneira que eu encontrei para fazer isso é esta linha estranha: IMPORT{program}="/bin/sh -c 'echo LOCAL_PARTTYPE=$$LOCAL_PARTTYPE_P$attr{partition}'" que funciona porque as entradas ENV são passadas como variáveis de ambiente para os programas que o udev executa, e assim o shell pode fazer a expansão e ecoar de volta.

Eu também poderia duplicar tudo para cada número de partição possível (factível, já que estou usando apenas partições primárias), mas isso me parece ainda pior:

$ATTR{partition}=="1", $ENV{LOCAL_PARTTYPE_P1}=="da", OWNER="grid", ...
$ATTR{partition}=="2", $ENV{LOCAL_PARTTYPE_P2}=="da", OWNER="grid", ...
⋮

Existe uma boa maneira de fazer isso?

    
por derobert 10.11.2011 / 23:22

0 respostas

Tags