UDEV(7) udev UDEV(7) NUME udev - gestionarea dinamica a dispozitivelor DESCRIERE udev furnizeaza software de sistem cu evenimente de dispozitiv, gestioneaza permisiunile nodurilor de dispozitiv i poate crea legaturi simbolice suplimentare in directorul /dev/ sau redenumete interfeele de reea. De obicei, nucleul doar atribuie nume de dispozitive imprevizibile pe baza ordinii de descoperire. Legaturile simbolice sau denumirile semnificative ale dispozitivelor de reea ofera o modalitate de a identifica in mod fiabil dispozitivele pe baza proprietailor lor sau a configuraiei curente. Demonul udev, systemd-udevd.service(8), primete evenimentele dispozitivelor ,,uevents" direct de la nucleu ori de cate ori un dispozitiv este adaugat sau eliminat din sistem, sau cand acesta ii schimba starea. Atunci cand udev primete un eveniment de dispozitiv, acesta compara setul sau configurat de reguli cu diverse atribute ale dispozitivului pentru a identifica dispozitivul. Regulile care se potrivesc pot furniza informaii suplimentare despre dispozitiv care sa fie stocate in baza de date udev sau care sa fie utilizate pentru a crea nume semnificative de legaturi simbolice. Toate informaiile despre dispozitiv pe care le proceseaza udev sunt stocate in baza de date udev i trimise catre posibilii abonai la evenimente. Accesul la toate datele stocate i la sursele de evenimente este asigurat de biblioteca libudev. FIIERE DE REGULI Regulile udev sunt citite din fiierele localizate in directoarele de reguli de sistem /usr/lib/udev/rules.d i /usr/local/lib/udev/rules.d, in directorul de execuie volatil /run/udev/rules.d i in directorul de administrare locala /etc/udev/rules.d. Toate fiierele de reguli sunt sortate i procesate colectiv in ordine lexicala, indiferent de directoarele in care se afla. Cu toate acestea, fiierele cu nume de fiiere identice se inlocuiesc reciproc. Fiierele din /etc/ au cea mai mare prioritate, iar fiierele din /run/ au prioritate faa de fiierele cu acelai nume din /usr/. Acest lucru poate fi utilizat pentru a inlocui un fiier de reguli furnizat de sistem cu un fiier local, daca este necesar; o legatura simbolica in /etc/ cu acelai nume ca un fiier de reguli din /usr/lib/, care indica /dev/null, dezactiveaza in intregime fiierul de reguli. Fiierele de reguli trebuie sa aiba extensia ,,.rules"; alte extensii sunt ignorate. Fiecare linie din fiierul de reguli conine cel puin o pereche cheie-valoare. Cu excepia liniilor goale sau a liniilor care incep cu ,,#", care sunt ignorate. Exista doua tipuri de chei: match, (potrivire) i assignment, (atribuire). Daca toate cheile de potrivire se potrivesc cu valorile lor, regula se aplica, iar cheilor de atribuire li se atribuie valorile specificate. O regula de potrivire poate redenumi o interfaa de reea, poate adauga legaturi simbolice care indica nodul dispozitivului sau poate rula un program specificat ca parte a gestionarii evenimentelor. O regula consta dintr-o lista de una sau mai multe expresii cheie-operator-valoare, separate prin virgule. Fiecare expresie are un efect distinct, in funcie de cheia i operatorul utilizat. Operatori "==" Compara pentru egalitate. -- Cheia specificata are valoarea specificata. "!=" Compara pentru inegalitate. -- Cheia specificata nu are valoarea specificata sau cheia specificata nu este prezenta deloc. "=" Atribuie o valoare la o cheie. Cheile care reprezinta o lista sunt reiniializate i se atribuie doar aceasta singura valoare. "+=" Adauga valoarea la o cheie care conine o lista de intrari. "-=" Elimina valoarea dintr-o cheie care conine o lista de intrari. Adaugata in versiunea 217. ":=" Atribuie o valoare unei chei in mod definitiv; nu permite nicio modificare ulterioara. Adaugata in versiunea 247. Valori Valorile sunt scrise ca iruri de caractere intre ghilimele duble, cum ar fi ("string"). Pentru a include o ghilimea dubla (") in valoare, aceasta trebuie precedata de o bara oblica inversa (\"). Orice alte apariii ale unei bare oblice inverse urmate de un caracter nu sunt eludate. Altfel spus, irul "\t\n" este tratat ca patru caractere: bara oblica inversa, t minuscula, bara oblica inversa, n minuscula. irul poate fi prefixat cu o minuscula e (e"string\n") pentru a marca irul ca fiind eludat in stilul C, a se vedea Secvene de eludare in C[1]. De exemplu, e"string\n" este interpretat ca fiind format din 7 caractere: 6 litere minuscule i o linie noua. Acest lucru poate fi util pentru a scrie caractere speciale atunci cand un controlor de nucleu le solicita. Reinei ca NUL nu este permis in niciuna dintre variantele de iruri de caractere. Chei Urmatoarele nume de chei pot fi utilizate pentru a se potrivi cu proprietaile dispozitivelor. Unele dintre chei se potrivesc, de asemenea, cu proprietaile dispozitivelor parinte din sysfs, nu numai cu dispozitivul care a generat evenimentul. Daca intr-o singura regula sunt specificate mai multe chei care se potrivesc cu un dispozitiv parinte, toate aceste chei trebuie sa se potriveasca cu unul i acelai dispozitiv parinte. ACTION Se potrivete cu numele aciunii evenimentului. DEVPATH Se potrivete cu ruta la dispozitiv a dispozitivului de eveniment. KERNEL Se potrivete cu numele dispozitivului de eveniment. KERNELS Cauta in sus in ruta dispozitivului un nume de dispozitiv corespunzator. NUME Se potrivete cu numele unei interfee de reea. Poate fi utilizata dupa ce cheia NAME a fost stabilita intr-una din regulile precedente. SYMLINK Se potrivete cu numele unei legaturi simbolice care vizeaza nodul. Poate fi utilizata dupa ce o cheie SYMLINK a fost stabilita intr-una din regulile precedente. Pot exista mai multe legaturi simbolice; numai una trebuie sa corespunda. In cazul in care operatorul este ,,!=", simbolul returneaza <> numai daca nu exista nicio legatura simbolica corespunzatoare. SUBSYSTEM Se potrivete cu subsistemul dispozitivului de evenimente. SUBSYSTEMS Cauta in sus in ruta dispozitivului pentru un nume de subsistem de dispozitiv corespunzator. DRIVER Se potrivete cu numele controlorului dispozitivului de evenimente. Definii aceasta cheie numai pentru dispozitivele care sunt legate de un controlor in momentul in care este generat evenimentul. DRIVERS Cauta in sus in ruta dispozitivului pentru un nume de controlor de dispozitiv corespunzator. ATTR{nume-fiier} Se potrivete cu valoarea atributului sysfs al dispozitivului de eveniment. Spaiul alb la final in valorile atributelor este ignorat, cu excepia cazului in care valoarea de potrivire specificata conine ea insai un spaiu alb la final. ATTRS{nume-fiier} Cauta in sus in ruta dispozitivului un dispozitiv cu valori care se potrivesc cu valorile atributelor sysfs. Daca sunt specificate mai multe potriviri ATTRS, toate trebuie sa se potriveasca pe acelai dispozitiv. Spaiul alb la final in valorile atributelor este ignorat, cu excepia cazului in care valoarea de potrivire specificata conine ea insai un spaiu alb la final. SYSCTL{parametru nucleu} Se potrivete cu valoarea unui parametru al nucleului. Adaugata in versiunea 240. ENV{cheie} Se potrivete cu o valoare de proprietate a dispozitivului. CONST{cheie} Se potrivete cu o constanta la nivel de sistem. Cheile acceptate sunt: "arch" Arhitectura sistemului. A se vedea ConditionArchitecture= in systemd.unit(5) pentru valorile posibile. Adaugata in versiunea 244. "virt" Mediul de virtualizare a sistemului. A se vedea systemd-detect-virt(1) pentru valorile posibile. Adaugata in versiunea 244. "cvm" Tehnologia de virtualizare confideniala a sistemului. A se vedea systemd-detect-virt(1) pentru valorile posibile. Adaugata in versiunea 254. Cheile necunoscute nu se vor potrivi niciodata. Adaugata in versiunea 244. TAG Se potrivete cu una dintre etichetele dispozitivului. Poate fi utilizata dupa ce o cheie TAG a fost stabilita intr-una din regulile precedente. Pot exista mai multe etichete; trebuie sa se potriveasca doar una dintre ele. In cazul in care operatorul este ,,!=", simbolul returneaza <> numai daca nu exista nicio eticheta care se potrivete. TAGS Cauta in sus in ruta dispozitivului pentru un dispozitiv cu etichetal care sa se potriveasca. In cazul in care operatorul este ,,!=", simbolul returneaza <> numai daca nu exista nicio eticheta care se potrivete. TEST{masca de mod octal} Testeaza existena unui fiier. Daca este necesar, se poate specifica o masca de mod octal. PROGRAM Executa un program pentru a determina daca exista o potrivire; cheia este adevarata daca programul returneaza succes. Proprietaile dispozitivului sunt puse la dispoziia programului executat in mediu. Ieirea standard a programului este disponibila in cheia RESULT. Aceasta poate fi utilizata numai pentru sarcini de prim-plan de foarte scurta durata. Pentru detalii, a se vedea RUN. Reinei ca mai multe chei PROGRAM pot fi specificate intr-o singura regula, iar ,,=", ,,:=" i ,,+=" au acelai efect ca i ,,=="&. RESULT Se potrivete cu irul returnat de ultimul apel PROGRAM. Aceasta cheie poate fi utilizata in aceeai regula sau in orice regula ulterioara dupa un apel PROGRAM. Cele mai multe campuri accepta potrivirea modelelor globale de tip shell i modelele alternative. Sunt acceptate urmatoarele caractere speciale: "*" Se potrivete cu zero sau mai multe caractere. "?" Se potrivete cu orice caracter unic. "[]" Se potrivete cu orice caracter unic specificat intre parantezele drepte. De exemplu, irul de caractere ,,tty[SR]" se potrivete fie cu ,,ttyS", fie cu ,,ttyR". De asemenea, sunt acceptate intervalele prin intermediul caracterului ,,-". De exemplu, pentru a se potrivi cu intervalul tuturor cifrelor, se poate utiliza modelul ,,[0-9]". In cazul in care primul caracter care urmeaza dupa ,,[" este un ,,!", toate caracterele care nu sunt incluse sunt potrivite. "|" Separa modelele alternative. De exemplu, irul de modele ,,abc|x*" se va potrivi fie cu ,,abc", fie cu ,,x*". Adaugata in versiunea 217. Se pot atribui valori urmatoarelor chei: NUME Numele care trebuie utilizat pentru o interfaa de reea. A se vedea systemd.link(5) pentru un mecanism de nivel superior de stabilire a numelui interfeei. Numele unui nod de dispozitiv nu poate fi modificat de udev, ci doar pot fi create legaturi simbolice suplimentare. SYMLINK Numele unei legaturi simbolice care vizeaza nodul. Fiecare regula de potrivire adauga aceasta valoare la lista de legaturi simbolice care urmeaza sa fie create. Setul de caractere pentru a numi o legatura simbolica este limitat. Caracterele permise sunt ,,0-9A-Za-z#+-.:=@_/", secvene de caractere UTF-8 valide i codificarea hexazecimala ,,\x00". Toate celelalte caractere sunt inlocuite cu un caracter ,,_". Se pot specifica mai multe legaturi simbolice prin separarea numelor prin caracterul de spaiu. In cazul in care mai multe dispozitive au acelai nume, legatura indica intotdeauna dispozitivul cu cea mai mare prioritate de legatura. In cazul in care dispozitivul curent dispare, legaturile sunt reevaluate, iar dispozitivul cu urmatoarea prioritate a legaturii ,,link_priority" mai mare devine proprietarul legaturii. In cazul in care nu este specificata nicio prioritate a legaturii, ordinea dispozitivelor (i care dintre ele deine legatura) este nedefinita. Numele legaturilor simbolice nu trebuie sa intre niciodata in conflict cu numele implicite ale nodurilor de dispozitiv ale nucleului, deoarece acest lucru ar avea ca rezultat un comportament imprevizibil. OWNER, GROUP, MODE Permisiunile pentru nodul de dispozitiv. Fiecare valoare specificata inlocuiete valoarea implicita compilata. SECLABEL{modul} Aplica eticheta specificata pentru modulul de securitate Linux la nodul dispozitivului. Adaugata in versiunea 209. ATTR{cheie} Valoarea care trebuie sa fie scrisa intr-un atribut sysfs al dispozitivului de eveniment. SYSCTL{parametru nucleu} Valoarea care trebuie sa fie scrisa in parametrul nucleului. Adaugata in versiunea 220. ENV{cheie} Definete o valoare a unei proprietai a dispozitivului. Numele proprietailor cu un ,,." la inceput nu sunt stocate in baza de date i nici nu sunt exportate in evenimente sau instrumente externe (executate, de exemplu, cu ajutorul cheii de potrivire PROGRAM). TAG Ataeaza o eticheta la un dispozitiv. Aceasta este utilizata pentru a filtra evenimentele pentru utilizatorii funcionalitaii de monitorizare a libudev sau pentru a enumera un grup de dispozitive etichetate. Implementarea poate funciona eficient numai daca doar cateva etichete sunt ataate unui dispozitiv. Este destinata a fi utilizata numai in contexte cu cerine specifice de filtrare a dispozitivelor, i nu ca un indicator de uz general. O utilizare excesiva poate duce la o gestionare ineficienta a evenimentelor. RUN{tip} Specifica un program care urmeaza sa fie executat dupa procesarea tuturor regulilor pentru evenimentul respectiv. Cu ,,+=", aceasta invocare se adauga la lista, iar cu ,,=" sau ,,:=", inlocuiete orice coninut anterior al listei. Va rugam sa reinei ca ambele tipuri ,,program" i ,,builtin" descrise mai jos au o lista comuna, astfel incat tergerea listei cu ,,:=" i ,,=" afecteaza ambele tipuri. tip poate fi: "program" Executa un program extern specificat ca valoare atribuita. Daca nu se indica o ruta absoluta, se ateapta ca programul sa se afle in /usr/lib/udev; in caz contrar, trebuie specificata ruta absoluta. Aceasta este valoarea implicita in cazul in care nu este specificat niciun tip. "builtin" Ca i program, dar folosete unul dintre programele incorporate, in loc de unul extern. Adaugata in versiunea 199. Numele programului i urmatoarele argumente sunt separate prin spaii. Ghilimelele simple pot fi folosite pentru a specifica argumentele cu spaii. Acest lucru poate fi utilizat numai pentru sarcini de prim-plan de foarte scurta durata. Rularea unui proces de evenimente pentru o perioada lunga de timp poate bloca toate evenimentele ulterioare pentru acest dispozitiv sau pentru un dispozitiv dependent. Reinei ca rularea programelor care acceseaza reeaua sau monteaza/demonteaza sisteme de fiiere nu este permisa in cadrul regulilor udev, din cauza sandbox-ului implicit care este impus in systemd-udevd.service. Nu este permisa pornirea demonilor sau a altor procese care ruleaza mult timp; procesele bifurcate, detaate sau nu, vor fi omorate necondiionat dupa terminarea gestionarii evenimentelor. Pentru a activa procesele cu execuie indelungata din regulile udev, furnizai o unitate de serviciu i introducei-o intr-un dispozitiv udev folosind proprietatea de dispozitiv SYSTEMD_WANTS. Pentru detalii, consultai systemd.device(5). LABEL O eticheta numita catre care poate sari o eticheta GOTO. GOTO Sare la urmatoarea eticheta LABEL cu un nume corespunzator. IMPORT{tip} Importa un set de variabile ca proprietai ale dispozitivului, in funcie de tip: "program" Executa un program extern specificat ca valoare atribuita i, daca se intoarce cu succes, importa rezultatul acestuia, care trebuie sa fie in format de cheie de mediu. Specificarea rutei de acces, separarea comenzii/argumentului i punerea intre ghilimele funcioneaza ca in RUN. Adaugata in versiunea 199. "builtin" Similar cu ,,program", dar utilizeaza unul dintre programele incorporate i nu unul extern. Adaugata in versiunea 199. "file" Importa un fiier text specificat ca valoare atribuita, al carui coninut trebuie sa fie in format de cheie de mediu. "db" Importa o singura proprietate specificata ca valoare atribuita din baza de date a dispozitivului curent. Acest lucru funcioneaza numai daca baza de date este deja completata de un eveniment anterior. "cmdline" Importa o singura proprietate din linia de comanda a nucleului. Pentru fanioanele simple, valoarea proprietaii este stabilita la ,,1". "parent" Importa cheile stocate de la dispozitivul parinte prin citirea intrarii din baza de date a dispozitivului parinte. Valoarea atribuita lui IMPORT{parent} este utilizata ca filtru pentru numele cheilor care urmeaza sa fie importate (cu aceeai potrivire de tip global de tip shell utilizata pentru comparaii). Aceasta poate fi utilizata numai pentru sarcini de prim-plan de foarte scurta durata. Pentru detalii, a se vedea RUN. Reinei ca mai multe chei IMPORT{} pot fi specificate intr-o singura regula, iar ,,=", ,,:=" i ,,+=" au acelai efect ca i ,,=="& adevarata in cazul in care importul are succes, cu excepia cazului in care se utilizeaza ,,!=" ca operator, ceea ce face ca cheia sa fie adevarata in cazul in care importul nu a reuit. OPIUNI Opiuni pentru reguli i dispozitive: link_priority=valoare Specifica prioritatea legaturilor simbolice create. Dispozitivele cu prioritai mai mari suprascriu legaturile simbolice existente ale altor dispozitive. Valoarea implicita este 0. string_escape=none|replace Atunci cand se utilizeaza ,,replace", caracterele eventual nesigure din irurile atribuite la NAME, SYMLINK i ENV{cheie} sunt inlocuite. In cazul in care se utilizeaza ,,none", nu se efectueaza nicio inlocuire. Atunci cand nu este activata, inlocuirea se efectueaza pentru NAME, SYMLINK, dar nu i pentru ENV{cheie}. Nu este definita in mod implicit. static_node= Aplica permisiunile specificate in aceasta regula la nodul de dispozitiv static cu numele specificat. De asemenea, pentru fiecare eticheta specificata in aceasta regula, creeaza o legatura simbolica in directorul /run/udev/static_node-tags/eticheta care sa arate catre nodul de dispozitiv static cu numele specificat. Crearea nodurilor de dispozitive statice este realizata de systemd-tmpfiles inainte de pornirea systemd-udevd. Este posibil ca nodurile statice sa nu aiba un dispozitiv de nucleu corespunzator; ele sunt utilizate pentru a declana incarcarea automata a modulelor de nucleu atunci cand sunt accesate. watch Monitorizeaza nodul dispozitivului cu inotify; cand nodul este inchis dupa ce a fost deschis pentru scriere, se sintetizeaza un eveniment de modificare uevent. nowatch Dezactiveaza monitorizarea unui nod de dispozitiv cu inotify. db_persist Activeaza fanionul (sticky bit) pe intrarea in baza de date udev a dispozitivului de evenimente. Proprietaile dispozitivului sunt apoi pastrate in baza de date chiar i atunci cand se apeleaza udevadm info --cleanup-db. Aceasta opiune poate fi utila in anumite cazuri (de exemplu, dispozitivele Device Mapper) pentru a pastra starea dispozitivului la tranziia de la initrd. Adaugata in versiunea 241. log_level=nivel Primete un nume de nivel de jurnal, cum ar fi ,,debug" sau ,,info", sau o valoare speciala ,,reset". Atunci cand este specificat un nume de nivel de jurnal, nivelul maxim de jurnal este schimbat la nivelul respectiv. Atunci cand se stabilete ,,reset", nivelul de jurnal specificat anterior este revocat. Valoarea implicita este nivelul de jurnal al procesului principal din systemd-udevd. Aceasta poate fi utila la depanarea evenimentelor pentru anumite dispozitive. Reinei ca nivelul de jurnal este aplicat atunci cand linia care include aceasta regula este procesata. Prin urmare, pentru depanare, se recomanda ca acest nivel sa fie specificat mai devreme, de exemplu, pe prima linie din 00-debug.rules. Exemplu de depanare a procesarii uevent pentru interfeele de reea: # /etc/udev/rules.d/00-debug-net.rules SUBSYSTEM=="net", OPTIONS="log_level=debug" Adaugata in versiunea 248. Campurile ENV, GROUP, MODE, NAME, OWNER, PROGRAM, RUN, SECLABEL i SYMLINK accepta substituii simple de iruri de caractere. Substituiile RUN sunt efectuate dupa ce toate regulile au fost procesate, chiar inainte de executarea programului, permiand utilizarea proprietailor dispozitivului stabilite de regulile de potrivire anterioare. Pentru toate celelalte campuri, substituiile sunt efectuate in timp ce regula individuala este procesata. Substituiile disponibile sunt: $kernel, %k Numele nucleului pentru acest dispozitiv. $number, %n Numarul nucleului pentru acest dispozitiv. De exemplu, ,,sda3" are numarul dat de nucleu 3. $devpath, %p Ruta la dispozitiv a dispozitivului. $id, %b Numele dispozitivului care se potrivete atunci cand se cauta in sus in ruta dispozitivului pentru SUBSYSTEMS, KERNELS, DRIVERS i ATTRS. $driver Numele controlorului dispozitivului care se potrivete atunci cand se cauta in sus in ruta dispozitivului pentru SUBSYSTEMS, KERNELS, DRIVERS i ATTRS. $attr{fiier}, %s{fiier} Valoarea unui atribut sysfs gasit la dispozitivul la care toate cheile regulii au corespuns. Daca dispozitivul care corespunde nu are un astfel de atribut, iar un test anterior KERNELS, SUBSYSTEMS, DRIVERS sau ATTRS a selectat un dispozitiv parinte, atunci se utilizeaza atributul din acel dispozitiv parinte. In cazul in care atributul este o legatura simbolica, ultimul element din inta legaturii simbolice este returnat ca valoare. $env{cheie}, %E{cheie} O valoare a proprietaii dispozitivului. $major, %M Numarul major al nucleului pentru dispozitiv. $minor, %m Numarul minor al nucleului pentru dispozitiv. $result, %c irul returnat de programul extern solicitat cu PROGRAM. Se poate selecta o singura parte a irului, separata de un caracter de spaiu, specificand numarul parii ca atribut: ,,%c{N}". In cazul in care numarul este urmat de caracterul ,,+", aceasta parte i toate celelalte pari ale irului rezultat sunt inlocuite: ,,%c{N+}". $parent, %P Numele nodului dispozitivului parinte. $name Numele actual al dispozitivului. Daca nu este modificat de o regula, acesta este numele dispozitivului din nucleu. $links O lista de legaturi simbolice curente, separate prin spaii. Valoarea este stabilita numai in timpul unui eveniment de eliminare sau daca o regula anterioara a atribuit o valoare. $root, %r Valoarea udev_root. $sys, %S Punctul de montare sysfs. $devnode, %N Numele nodului dispozitivului. %% Caracterul ,,%" insui. $$ Caracterul ,,%" insui. CONSULTAI I systemd-udevd.service(8), udevadm(8), systemd.link(5) NOTE 1. Secvene de eludare in C https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . systemd 256.5 UDEV(7)