Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.
Byla vydána nová verze R14.1.4 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek i s náhledy v poznámkách k vydání. Podrobný přehled v Changelogu.
Bylo vydáno OpenBSD 7.7. Opět bez písničky.
V Tiraně proběhl letošní Linux App Summit (LAS) (Mastodon). Zatím nesestříhané videozáznamy přednášek jsou k dispozici na YouTube.
Udev funguje tak, že naslouchá na události od jádra (uevents), které jej informují o nově připojených nebo odpojených zařízeních (z hlediska operačního systému). Udev v systému běží jako obyčejný démon. Jeho konfigurace se nachází v /etc/udev a její obsah je používán při provádění „reakcí“ na události od jádra. Samotný udev se skládá ze tří součástí: udevd (to je ten démon, který čte události od jádra), libudev (knihovna pro přístup k informacím) a udevadm (nástroj pro správu).
Detailní informace o zařízeních udev získává z /sys (sysfs). Zde jsou údaje snadno přístupné i zvědavému užvateli. Technicky probíhá komunikace s jádrem přes soket typu netlink. Netlink je jinak typicky používán pro konfiguraci síťových rozhraní, routovacích tabulek a tak dále. Právě pomocí netlinku provádí například program ip veškeré operace, které mu zadáte.
S udevem se historicky pojí také démon HAL, který se v některých linuxových distribucích nacházel snad ještě i loni, jeho poslední verze však vyšla v roce 2009. HAL se staral o předávání událostí z udevu dalším aplikacím, typicky desktopovým, a to přes D-Bus. Byl pro právě HAL, který stál za (ne)funkčností reakcí desktopových prostředí kupříkladu na nově připojený flash disk. Část funkčnosti HALu se dostala do udevu samotného, zbytek je nyní obstaráván projekty UPower a udisks.
Většina uživatelů může využívat výhod udevu, aniž by se kdy dotkli konfigurace v /etc/udev. Jde zejména o poskytování trvalých jmen pro disková zařízení a síťová rozhraní. U disků tak můžete odkazovat na konkrétní disk nebo dískový oddíl pomocí symbolických odkazů uvnitř /dev/disk, a to buď pomocí jedinečných identifikátorů UUID (/dev/disk/by-uuid a /dev/disk/by-partuuid), popisků (/dev/disk/by-label), hardwarových identifikátorů (/dev/disk/by-id) nebo cest v sysfs (/dev/disk/by-path). Přehled si snadno zobrazíme příkazem blkid:
/dev/loop0: PTTYPE="mac" /dev/sdb1: UUID="3d392d5f-6df3-8b65-73d1-58fc63c6b3dd" TYPE="linux_raid_member" /dev/sdd1: UUID="521ba861-b372-ef29-d6b0-e9e1319efc69" TYPE="linux_raid_member" /dev/sdd2: UUID="1343acef-e2c1-a15e-71c4-c341527e1256" TYPE="linux_raid_member" /dev/sdd3: UUID="f2f831fd-f2a3-3b22-656a-3dd964024052" TYPE="linux_raid_member" /dev/sda1: UUID="3d392d5f-6df3-8b65-73d1-58fc63c6b3dd" TYPE="linux_raid_member" /dev/md2: TYPE="swap" /dev/md127: UUID="fb69d690-2737-433b-9162-3e9d0b86b43b" TYPE="ext4" /dev/md126: UUID="4d4cb6f8-cb49-4ecc-9fba-118bac46eac3" TYPE="ext2" /dev/md3: UUID="b8782ee0-92d1-4d27-872c-61a5aac34f52" TYPE="ext4" /dev/sdg1: UUID="521ba861-b372-ef29-d6b0-e9e1319efc69" TYPE="linux_raid_member" /dev/sdg2: UUID="1343acef-e2c1-a15e-71c4-c341527e1256" TYPE="linux_raid_member" /dev/sdg3: UUID="f2f831fd-f2a3-3b22-656a-3dd964024052" TYPE="linux_raid_member" /dev/sdh1: UUID="58cf7046-70b8-48f0-9da9-0dfb25463628" TYPE="ext4" PARTUUID="39c92e8a-3cee-4c7c-b391-ab88274a1ae9"
Podobné chování je u názvů síťových rozhraní. Že má v těchto názvech prsty udev se člověk bohužel často dozví, až když hledá důvod, proč je jeho síťová karta při startu přejmenována např. z eth0 na eth3 Udev totiž pro každé síťové rozhraní, co je kdy připojeno do systému, trvale vyhradí název. Tyto názvy jsou pak zapisovány do /etc/udev/rules.d/70-persistent-net.rules. Tento soubor můžete dle své vůle upravovat, nebo smazat.
# PCI device 0x8086:/sys/devices/pci0000:00/0000:00:1c.5/0000:04:00.0/0000:05:01.0 (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0e:0c:b8:f2:60", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # PCI device 0x168c:/sys/devices/pci0000:00/0000:00:1c.5/0000:04:00.0/0000:05:00.0 (ath9k) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="d8:5d:4c:a3:97:2d", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0" # PCI device 0x10ec:/sys/devices/pci0000:00/0000:00:1c.4/0000:03:00.0 (r8169) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="10:bf:48:83:64:ce", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
Právě zde se můžeme s podobou pravidel pro udev poprvé setkat.
Pravidla umisťujeme do adresáře /etc/udev/rules.d, název souboru je na nás, přičemž číslo na začátku názvu usnadňuje orientaci v pořadí aplikace pravidel. Ve výše uvedené ukázce můžeme vidět, že dochází k určitému porovnávání (operátor ==) a přiřazování (=). Dalším důležitým operátorem je pak přidání (+=), jehož použití si ukážeme zanedlouho. Pokud jsou splněna všechna pravidla stanovená pomocí porovnání, provedou se dále určené operace.
Při porovnání používáme tato klíčová slova:
S těmito klíčovými slovy se kromě ACTION můžeme setkat i v „množné“ variantě, tedy např. ATTRS. V této podobě se porovnání provádí nejen s vlastností daného zařízení, ale i s vlastnostimi nadřazeného zařízení.
Nejčastěji vám asi nepůjde o přejmenování zařízení pomocí NAME (jako se to děje výše u síťových karet), spíše budete chtít aby bylo zařízení kromě původního jména dostupné i pod nějakým očekávatelným symbolickým odkazem. V této situaci místo nastavování názvu (NAME="název") použijeme přidání dalšího symbolického odkazu pomocí operátoru +=. Tento operátor se postará o to, aby si pravidla vzájemně nepřepisovala symbolické odkazy, ale spíše se tyto odkazy nashromáždily.
Pro zařízení /dev/ttyS0 si tedy můžeme nechat udevem vytvářet symbolický odkaz takto:
KERNEL=="ttyS0", SYMLINK+="hlavni-seriak"
Při porovnávání řetězců si můžeme pomáhat pomocí těchto speciálních znaků:
Bez zvláštní námahy můžeme v NAME a SYMLINK pracovat i s názvem zařízení od jádra (KERNEL). %k je v NAME a SYMLINK nahrazováno původním názvem zařízení, zatímco %n je nahrazováno číslem na konci tohoto názvu. Původní ukázku si tedy rozšíříme:
KERNEL=="ttyS*", SYMLINK+="seriak-cislo-%n-puvodne-%k"
Od předchozích ujetých pravidel se přesuneme k něčemu, co asi budete dělat častěji. Tedy identifikaci zařízení podle atributů. Začnu hned ukázkou toho, co se dá s udevem vyřešit za problém:
SUBSYSTEM=="tty", ATTRS{serial}=="A101645B", SYMLINK+="arduino0" SUBSYSTEM=="tty", ATTRS{serial}=="A800dRam", SYMLINK+="usbrelay0"
Zde mám dvě zařízení na USB, přes které je zpřístupňována tradiční sériová linka (běžný konvertor od FTDI). Tato zařízení se v systému objevují jako /dev/ttyUSB0 a /dev/ttyUSB1. Jedno z nich je Arduino, druhé z nich je zase USB relé. Zdánlivě je problém je odlišit, jak ale vidíme, podle sériových čísel to je možné. A jak také vidíte, k jednotlivým atributům se přistupuje pomocí ATTRS{název_atributu}.
Jak si snadno zobrazit atributy zařízení? Dříve k tomu sloužil nástroj udevinfo, v aktuální distribucích ale používejte udevadm info.
$ # udevadm info -q all -n /dev/ttyUSB0 P: /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.7/2-1.7:1.0/ttyUSB0/tty/ttyUSB0 N: ttyUSB0 S: serial/by-id/usb-FTDI_FT232R_USB_UART_A800dRam-if00-port0 S: serial/by-path/pci-0000:00:1d.0-usb-0:1.7:1.0-port0 S: usbrelay0 E: DEVLINKS=/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A800dRam-if00-port0 /dev/serial/by-path/pci-0000:00:1d.0-usb-0:1.7:1.0-port0 /dev/usbrelay0 E: DEVNAME=/dev/ttyUSB0 E: DEVPATH=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.7/2-1.7:1.0/ttyUSB0/tty/ttyUSB0 E: ID_BUS=usb E: ID_MODEL=FT232R_USB_UART E: ID_MODEL_ENC=FT232R\x20USB\x20UART E: ID_MODEL_FROM_DATABASE=FT232 USB-Serial (UART) IC E: ID_MODEL_ID=6001 E: ID_PATH=pci-0000:00:1d.0-usb-0:1.7:1.0 E: ID_PATH_TAG=pci-0000_00_1d_0-usb-0_1_7_1_0 E: ID_REVISION=0600 E: ID_SERIAL=FTDI_FT232R_USB_UART_A800dRam E: ID_SERIAL_SHORT=A800dRam E: ID_TYPE=generic E: ID_USB_DRIVER=ftdi_sio E: ID_USB_INTERFACES=:ffffff: E: ID_USB_INTERFACE_NUM=00 E: ID_VENDOR=FTDI E: ID_VENDOR_ENC=FTDI E: ID_VENDOR_FROM_DATABASE=Future Technology Devices International, Ltd E: ID_VENDOR_ID=0403 E: MAJOR=188 E: MINOR=0 E: SUBSYSTEM=tty E: UPOWER_PRODUCT=Watts Up? Pro E: UPOWER_VENDOR=Watts Up, Inc. E: UP_MONITOR_TYPE=wup E: USEC_INITIALIZED=95065708556
Zde sice sériové číslo vidíme (E: ID_SERIAL_SHORT=A800dRam), není to ale přímo ve formě, ve které můžeme text rovnou okopírovat do pravidel. Takovou podobu získáme tímto příkazem:
$ udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0) Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.7/2-1.7:1.0/ttyUSB0/tty/ttyUSB0': KERNEL=="ttyUSB0" SUBSYSTEM=="tty" DRIVER=="" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.7/2-1.7:1.0/ttyUSB0': KERNELS=="ttyUSB0" SUBSYSTEMS=="usb-serial" DRIVERS=="ftdi_sio" ATTRS{port_number}=="0" ATTRS{latency_timer}=="1" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.7/2-1.7:1.0': KERNELS=="2-1.7:1.0" SUBSYSTEMS=="usb" DRIVERS=="ftdi_sio" ATTRS{bInterfaceClass}=="ff" ATTRS{bInterfaceSubClass}=="ff" ATTRS{bInterfaceProtocol}=="ff" ATTRS{bNumEndpoints}=="02" ATTRS{supports_autosuspend}=="1" ATTRS{bAlternateSetting}==" 0" ATTRS{bInterfaceNumber}=="00" ATTRS{interface}=="FT232R USB UART" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.7': KERNELS=="2-1.7" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{bDeviceSubClass}=="00" ATTRS{bDeviceProtocol}=="00" ATTRS{devpath}=="1.7" ATTRS{idVendor}=="0403" ATTRS{speed}=="12" ATTRS{bNumInterfaces}==" 1" ATTRS{bConfigurationValue}=="1" ATTRS{bMaxPacketSize0}=="8" ATTRS{busnum}=="2" ATTRS{devnum}=="39" ATTRS{configuration}=="" ATTRS{bMaxPower}==" 90mA" ATTRS{authorized}=="1" ATTRS{bmAttributes}=="a0" ATTRS{bNumConfigurations}=="1" ATTRS{maxchild}=="0" ATTRS{bcdDevice}=="0600" ATTRS{avoid_reset_quirk}=="0" ATTRS{quirks}=="0x0" ATTRS{serial}=="A800dRam" ATTRS{version}==" 2.00" ATTRS{urbnum}=="296377" ATTRS{manufacturer}=="FTDI" ATTRS{removable}=="unknown" ATTRS{idProduct}=="6001" ATTRS{bDeviceClass}=="00" ATTRS{product}=="FT232R USB UART" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1': KERNELS=="2-1" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{bDeviceSubClass}=="00" ATTRS{bDeviceProtocol}=="01" ATTRS{devpath}=="1" ATTRS{idVendor}=="8087" ATTRS{speed}=="480" ATTRS{bNumInterfaces}==" 1" ATTRS{bConfigurationValue}=="1" ATTRS{bMaxPacketSize0}=="64" ATTRS{busnum}=="2" ATTRS{devnum}=="2" ATTRS{configuration}=="" ATTRS{bMaxPower}==" 0mA" ATTRS{authorized}=="1" ATTRS{bmAttributes}=="e0" ATTRS{bNumConfigurations}=="1" ATTRS{maxchild}=="8" ATTRS{bcdDevice}=="0000" ATTRS{avoid_reset_quirk}=="0" ATTRS{quirks}=="0x0" ATTRS{version}==" 2.00" ATTRS{urbnum}=="650" ATTRS{removable}=="unknown" ATTRS{idProduct}=="0024" ATTRS{bDeviceClass}=="09" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2': KERNELS=="usb2" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{bDeviceSubClass}=="00" ATTRS{bDeviceProtocol}=="00" ATTRS{devpath}=="0" ATTRS{idVendor}=="1d6b" ATTRS{speed}=="480" ATTRS{bNumInterfaces}==" 1" ATTRS{bConfigurationValue}=="1" ATTRS{bMaxPacketSize0}=="64" ATTRS{authorized_default}=="1" ATTRS{busnum}=="2" ATTRS{devnum}=="1" ATTRS{configuration}=="" ATTRS{bMaxPower}==" 0mA" ATTRS{authorized}=="1" ATTRS{bmAttributes}=="e0" ATTRS{bNumConfigurations}=="1" ATTRS{maxchild}=="2" ATTRS{bcdDevice}=="0304" ATTRS{avoid_reset_quirk}=="0" ATTRS{quirks}=="0x0" ATTRS{serial}=="0000:00:1d.0" ATTRS{version}==" 2.00" ATTRS{urbnum}=="31" ATTRS{manufacturer}=="Linux 3.4.4-gentoo ehci_hcd" ATTRS{removable}=="unknown" ATTRS{idProduct}=="0002" ATTRS{bDeviceClass}=="09" ATTRS{product}=="EHCI Host Controller" looking at parent device '/devices/pci0000:00/0000:00:1d.0': KERNELS=="0000:00:1d.0" SUBSYSTEMS=="pci" DRIVERS=="ehci_hcd" ATTRS{irq}=="23" ATTRS{subsystem_vendor}=="0x1043" ATTRS{broken_parity_status}=="0" ATTRS{class}=="0x0c0320" ATTRS{companion}=="" ATTRS{consistent_dma_mask_bits}=="32" ATTRS{dma_mask_bits}=="32" ATTRS{local_cpus}=="0f" ATTRS{device}=="0x1e26" ATTRS{uframe_periodic_max}=="100" ATTRS{enable}=="1" ATTRS{msi_bus}=="" ATTRS{local_cpulist}=="0-3" ATTRS{vendor}=="0x8086" ATTRS{subsystem_device}=="0x84ca" ATTRS{numa_node}=="-1" looking at parent device '/devices/pci0000:00': KERNELS=="pci0000:00" SUBSYSTEMS=="" DRIVERS==""
Tento výpis je podstatně delší a můžeme vidět, že se tu postupně prochází struktura zařízení. Zde si můžeme vybrat atributy (z jednoho uvedeného zařízení), které podle nás dostatečně jedinečně identifikují daný kus hardwaru,a ty použít.
Pomocí udevu můžeme měnit vlastníka (OWNER), skupinu (GROUP) a práva (MODE) daného device node. Použití je jednoduché. Předchozí příklad si rozšíříme:
SUBSYSTEM=="tty", ATTRS{serial}=="A101645B", SYMLINK+="arduino0", OWNER="lubos", GROUP="users", MODE="0660"
Sluší se poznamenat, že práva 0660 jsou výchozí, a tak by v této ukázce nemusela být nastavována.
Externí programy můžeme spouštět pomocí klíčových slov PROGRAM a RUN. Výstup PROGRAMu poslouží při nastavování názvu, ale třeba i práv. Výstup programu RUN není dále používán, program je pouze spuštěn; RUN je tedy vhodný pro automatizacké zareagování na nějakou událost.
SUBSYSTEM=="tty", PROGRAM="/usr/bin/pojmenuj %k", SYMLINK+="%c"
%c je nahrazeno výstupem programu. Možnosti jsou ještě širší (používání části výstupu), jejich prozkoumání už ponechám na případných zájemcích. Použití RUN je podobné, zde už ale nepracujeme s výstupem programu; spíše nám poslouží výše uvedená volba ACTION určující, zda je zařízení přidáváno (add), nebo odebíráno (remove). Ještě se nám může hodit nastavování hodnot prostředí. Ukázka:
SUBSYSTEMS=="usb", KERNEL=="sd*", ACTION="add", RUN="/usr/local/bin/varovani_pripojeni", ENV{nazev}="hodnota"
Odchod devfs byl do značné míry revolučním krokem. Není divu, že jeho částečný návrat nebyl všemi zrovna oslavován. Devtmpfs, odpůrci často označovaný jako devfs 2.0, vrací jádru zpět schopnost samostatně spravovat obsah adresáře /dev bez pomoci démona v uživatelském prostoru.
Devtmpfs je konkrétně souborový systém postavený nad tmpfs. Jeho fungování je prosté: při připojení zařízení jádro automaticky vytvoří příslušný device node a po odpojení jej hnedle odstraní. Pro spoustu použití je tato funkčnost naprosto postačující – například na embedded systémech – a zvyšuje tak rychlost startu, protože žádný démon nemusí dodatečně zpracovávat události od jádra a nic tedy ani nemusí na tohoto démona čekat.
Přestože si tento článek možná nečtete z embedded zařízení, ale svého linuxového desktopu, i tak je velmi pravděpodobné, že devtmpfs používáte. Důvodem je to, že současné verze udevu (od verze 176) devtmpfs dokonce vyžadují – aby nebyla funkčnost duplikována, tak zůstává vytváření device nodes nyní plně na jádře a udev se už stará jen o dodatečné úpravy.
Na závěr zmiňme to, že díky devtmpfs můžeme snadno nabootovat do systému bez přítomnosti sady základních device nodes v /dev na disku. To je praktické například při snahách o obnovu systému.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Udev před přibližně šesti lety definitivně nahradil starého, jaderného správce adresáře /dev zvaného devfs.
Tahle věta je IMHO trochu zavádějící, protože vzbuzuje představu, že se devfs
opravdu používal. Ve skutečnosti ho ale z běžných distribucí používal pouze Mandrake, takže to byla spíš taková slepá ulička.
/dev
jako normální součást filesystému a v něm statické soubory vytvářené skriptem při instalaci. Když bylo potřeba něco upravit (což bylo jen velmi zřídka), provádělo se to přímo příkazem mknod
- buď to udělal přímo správce systému nebo post-instalační skript balíčku. Takové řešení mělo samozřejmě spoustu nedostatků, takže se hledaly způsoby, jak spravovat obsah /dev
dynamicky, aby opravdu odpovídal tomu, co v počítači je, a umožňoval mít jména zařízení persistentní. Virtuální filesystém devfs
byl (v Linuxu) první takový pokus, ale měl řadu chyb, proto se nikdy moc neprosadil a nakonec vznikl udev založený na úplně jiné koncepci.
Podobné chování je u názvů síťových rozhraní. Že má v těchto názvech prsty udev se člověk bohužel často dozví, až když hledá důvod, proč je jeho síťová karta při startu přejmenována např. z eth0 na eth3To ma nemilo prekvalipo v Debiane, kde som za nic na svete nevedel prist preco pri vymene sietovky mi ta nie a nie fungovat, ked pri starsej distribucii Debianu to fungovalo. Po hodinach patrania som na to prisiel, ze to sposobil udev a jeho pravidlo. Osobne si myslym, ze to mohli lepsie postavit aby sa chovanie udev podobalo tomu, co bolo pred tym. Ak mam jednu sietovku, tak preco po jej vymene to nemoze byt stale eth0. Tak mam za bezpecene, ze siet mi bude fungovat stale(samozrejme ak mam ovladac). Teraz to tak nieje a ludom, ktory sa s tym stretnu prvy raz to zbytocne komplikuje zivot. To nehovorim o BFU, ktory to nema sancu zvladnut. Neviem ako su na tom ine distribucie.Udev totiž pro každé síťové rozhraní, co je kdy připojeno do systému, trvale vyhradí název.
Objavi sa to povodne zariadenie a pri deli sa mu najblizsie volne.
Jenže ta persistentní jména mají zajistit právě to, aby se tohle nestalo.
Sposobuje to aj problem pri klonovani systemu.Tak klonování systémů je obecně problém kvůli chybějícímu všeobjímajícímu seal/sysprep postupu. Když je potřeba dělat často nové systému, je podle mě lepší zkousnout kulku a nasadit něco, co je naprovižnuje od nuly.
Podobné chování je u názvů síťových rozhraní. Že má v těchto názvech prsty udev se člověk bohužel často dozví, až když hledá důvod, proč je jeho síťová karta při startu přejmenována např. z eth0 na eth3Udev totiž pro každé síťové rozhraní, co je kdy připojeno do systému, trvale vyhradí název. Tyto názvy jsou pak zapisovány do
/etc/udev/rules.d/70-persistent-net.rules
. Tento soubor můžete dle své vůle upravovat, nebo smazat.
Tady by bylo vhodné upřesnit, že to udev nedělá sám od sebe, ale opět na základě nějakého jiného souboru s pravidly (a za pomoci helperů). Např. v OpenSuSE 12.2 je to /lib/udev/rules.d/75-persistent-net-generator.rules
Pokud tam ten generátor není, tak tam není ani ten soubor s pravidly, o kterém píše autor.
Přejmenovávání na jména, která by mohla kolidovat s těmi automaticky generovanými, se obecně moc nedoporučuje (ať už u blokových/znakových zařízení nebo u síťových rozhraní). On i ten generátor je trochu komplikovanější a snaží se potenciální kolize řešit, ale stejně je to náchylné na race conditions. Některé zdroje jdou dokonce tak daleko, že doporučují NAME="..."
nepoužívat vůbec, nechat všemu původní jména a jen přidávat symbolické linky. Ale to zrovna u síťových rozhraní nejde.
Jenže leckdy tam ten generator není ... např. Archlinux ho už nemá.
A ani nikdy neměl
Tak. Být tu Flattr tlačítko, tak už tam má hlas.