* [devel] udevless информация о блочных устройствах @ 2019-06-15 15:23 Leonid Krivoshein 2019-06-15 15:48 ` Alexey V. Vissarionov 2019-06-15 16:29 ` Alexey Gladkov 0 siblings, 2 replies; 9+ messages in thread From: Leonid Krivoshein @ 2019-06-15 15:23 UTC (permalink / raw) To: ALT Linux Team development discussions Всем привет! Точно знаю: среди вас есть не любители udev. Хоть и очень мало. Нужна ваша помощь. Скажите, есть ли на конфигурациях без udev что-то в этом роде: ls /run/udev/data/b[0-9]* ls /sys/block/*/uevent ? (Можно просто ДА или НЕТ, работать должно из под обычного пользователя). -- Best regards, Leonid Krivoshein. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] udevless информация о блочных устройствах 2019-06-15 15:23 [devel] udevless информация о блочных устройствах Leonid Krivoshein @ 2019-06-15 15:48 ` Alexey V. Vissarionov 2019-06-15 16:44 ` Leonid Krivoshein 2019-06-15 16:29 ` Alexey Gladkov 1 sibling, 1 reply; 9+ messages in thread From: Alexey V. Vissarionov @ 2019-06-15 15:48 UTC (permalink / raw) To: ALT Linux Team development discussions On 2019-06-15 18:23:20 +0300, Leonid Krivoshein wrote: > Точно знаю: среди вас есть не любители udev. Любители ходить своими ногами без костылей? Есть. > Хоть и очень мало. Нужна ваша помощь. Скажите, есть ли на > конфигурациях без udev что-то в этом роде: > ls /run/udev/data/b[0-9]* А что оно там держит? > ls /sys/block/*/uevent gremlin@evil:~ > ls /sys/block/*/uevent /sys/block/loop0/uevent /sys/block/nbd13/uevent /sys/block/nbd7/uevent /sys/block/loop1/uevent /sys/block/nbd14/uevent /sys/block/nbd8/uevent /sys/block/loop2/uevent /sys/block/nbd15/uevent /sys/block/nbd9/uevent /sys/block/md0/uevent /sys/block/nbd1/uevent /sys/block/ram0/uevent /sys/block/md1/uevent /sys/block/nbd2/uevent /sys/block/sda/uevent /sys/block/nbd0/uevent /sys/block/nbd3/uevent /sys/block/sdb/uevent /sys/block/nbd10/uevent /sys/block/nbd4/uevent /sys/block/sdc/uevent /sys/block/nbd11/uevent /sys/block/nbd5/uevent /sys/block/nbd12/uevent /sys/block/nbd6/uevent gremlin@gpd:~ > ls /sys/block/*/uevent /sys/block/loop0/uevent /sys/block/nbd0/uevent /sys/block/nbd3/uevent /sys/block/loop1/uevent /sys/block/nbd10/uevent /sys/block/nbd4/uevent /sys/block/loop2/uevent /sys/block/nbd11/uevent /sys/block/nbd5/uevent /sys/block/loop3/uevent /sys/block/nbd12/uevent /sys/block/nbd6/uevent /sys/block/md0/uevent /sys/block/nbd13/uevent /sys/block/nbd7/uevent /sys/block/md1/uevent /sys/block/nbd14/uevent /sys/block/nbd8/uevent /sys/block/mmcblk0boot0/uevent /sys/block/nbd15/uevent /sys/block/nbd9/uevent /sys/block/mmcblk0boot1/uevent /sys/block/nbd1/uevent /sys/block/ram0/uevent /sys/block/mmcblk0/uevent /sys/block/nbd2/uevent > (Можно просто ДА или НЕТ, работать должно из под обычного > пользователя). Из-под обычного меня работает. -- Alexey V. Vissarionov gremlin ПРИ altlinux ТЧК org; +vii-cmiii-ccxxix-lxxix-xlii GPG: 0D92F19E1C0DC36E27F61A29CD17E2B43D879005 @ hkp://keys.gnupg.net ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] udevless информация о блочных устройствах 2019-06-15 15:48 ` Alexey V. Vissarionov @ 2019-06-15 16:44 ` Leonid Krivoshein 0 siblings, 0 replies; 9+ messages in thread From: Leonid Krivoshein @ 2019-06-15 16:44 UTC (permalink / raw) To: devel 15.06.2019 18:48, Alexey V. Vissarionov пишет: > On 2019-06-15 18:23:20 +0300, Leonid Krivoshein wrote: > > > Точно знаю: среди вас есть не любители udev. > > Любители ходить своими ногами без костылей? Есть. > > > Хоть и очень мало. Нужна ваша помощь. Скажите, есть ли на > > конфигурациях без udev что-то в этом роде: > > ls /run/udev/data/b[0-9]* > > А что оно там держит? Довольно много полезной информации, доступной на чтение обычному пользователю. Если исходить из того, что ей можно доверять, то root не нужен для сбора полной информации о дисках. Пример тому -- утилита lsblk. А вот пример одного из файлов с одной такой машины: $ cat /run/udev/data/b259:2 S:disk/by-id/nvme-eui.0025385571b1ff85-part1 S:disk/by-partlabel/EFI\x20System\x20#0 S:disk/by-id/nvme-Samsung_SSD_960_EVO_250GB_S3ESNX0J548186Z-part1 S:disk/by-uuid/D8D3-34C6 S:disk/by-partuuid/a913806d-aad2-4a73-bce5-d4466b6bcc0a S:disk/by-path/pci-0000:04:00.0-nvme-1-part1 W:36 I:2299817 E:ID_MODEL=Samsung SSD 960 EVO 250GB E:ID_PART_TABLE_TYPE=gpt E:ID_PART_TABLE_UUID=7ada8a72-60dd-46ae-a1fb-bb91655e2734 E:ID_PATH=pci-0000:04:00.0-nvme-1 E:ID_PATH_TAG=pci-0000_04_00_0-nvme-1 E:ID_SERIAL=Samsung SSD 960 EVO 250GB_S3ESNX0J548186Z E:ID_SERIAL_SHORT=S3ESNX0J548186Z E:ID_WWN=eui.0025385571b1ff85 E:ID_FS_UUID=D8D3-34C6 E:ID_FS_UUID_ENC=D8D3-34C6 E:ID_FS_VERSION=FAT32 E:ID_FS_TYPE=vfat E:ID_FS_USAGE=filesystem E:ID_PART_ENTRY_SCHEME=gpt E:ID_PART_ENTRY_NAME=EFI\x20System\x20#0 E:ID_PART_ENTRY_UUID=a913806d-aad2-4a73-bce5-d4466b6bcc0a E:ID_PART_ENTRY_TYPE=c12a7328-f81f-11d2-ba4b-00a0c93ec93b E:ID_PART_ENTRY_NUMBER=1 E:ID_PART_ENTRY_OFFSET=2048 E:ID_PART_ENTRY_SIZE=204800 E:ID_PART_ENTRY_DISK=259:0 E:UDISKS_IGNORE=1 E:UDISKS_FILESYSTEM_SHARED=1 G:systemd Здесь информация хранится в ramfs. Вопрос в том, есть ли у тебя это без udev? Если нет, то как без рута lsblk определит, к примеру, тип файловой системы? Что-то вроде результата анализа strace lsblk --list --output FSTYPE --noheadings /dev/sda1 интересует. > > ls /sys/block/*/uevent > [...] > > (Можно просто ДА или НЕТ, работать должно из под обычного > > пользователя). > > Из-под обычного меня работает. Ага, спасибо! -- Best regards, Leonid Krivoshein. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] udevless информация о блочных устройствах 2019-06-15 15:23 [devel] udevless информация о блочных устройствах Leonid Krivoshein 2019-06-15 15:48 ` Alexey V. Vissarionov @ 2019-06-15 16:29 ` Alexey Gladkov 2019-06-15 16:53 ` Leonid Krivoshein 1 sibling, 1 reply; 9+ messages in thread From: Alexey Gladkov @ 2019-06-15 16:29 UTC (permalink / raw) To: ALT Linux Team development discussions On Sat, Jun 15, 2019 at 06:23:20PM +0300, Leonid Krivoshein wrote: > Всем привет! > > > Точно знаю: среди вас есть не любители udev. Хоть и очень мало. Нужна > ваша помощь. > Скажите, есть ли на конфигурациях без udev что-то в этом роде: > > ls /run/udev/data/b[0-9]* Аналог этому /sys/dev/block/* > ls /sys/block/*/uevent > > ? (Можно просто ДА или НЕТ, работать должно из под обычного пользователя). То что находится в /sys никак не связано с udev. Главная проблема в том, чтобы загрузить правильный модуль, чтобы появилась информация в sysfs. -- Rgrds, legion ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] udevless информация о блочных устройствах 2019-06-15 16:29 ` Alexey Gladkov @ 2019-06-15 16:53 ` Leonid Krivoshein 2019-06-15 21:40 ` Leonid Krivoshein 2019-06-16 12:10 ` Alexey Gladkov 0 siblings, 2 replies; 9+ messages in thread From: Leonid Krivoshein @ 2019-06-15 16:53 UTC (permalink / raw) To: devel 15.06.2019 19:29, Alexey Gladkov пишет: > On Sat, Jun 15, 2019 at 06:23:20PM +0300, Leonid Krivoshein wrote: >> Всем привет! >> >> >> Точно знаю: среди вас есть не любители udev. Хоть и очень мало. Нужна >> ваша помощь. >> Скажите, есть ли на конфигурациях без udev что-то в этом роде: >> >> ls /run/udev/data/b[0-9]* > Аналог этому /sys/dev/block/* Да, во многом информация между sysfs и тем, что udev хранит в ramfs, пересекается, и про /sys/dev/block я конечно же знаю. Раньше я так и делал, получая часть информации через sysfs, а другую часть -- через blkid, blockdev, итп, на что требуется root. Поэтому и озадачился сабжем. Хотелось бы написать основной код, работающий без рутовых привилегий. Но вопрос в том, возможно ли это на системах без udev. >> ls /sys/block/*/uevent >> >> ? (Можно просто ДА или НЕТ, работать должно из под обычного пользователя). > То что находится в /sys никак не связано с udev. Главная проблема в том, > чтобы загрузить правильный модуль, чтобы появилась информация в sysfs. С этой проблемой с некоторых пор тоже знаком. И как её нынче принято решать в отсутствии udev? Пока слышал только две версии: сборка ядра со всеми модулями и скриптовый цикл, пытающийся загрузить все модули подряд из initramfs. -- Best regards, Leonid Krivoshein. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] udevless информация о блочных устройствах 2019-06-15 16:53 ` Leonid Krivoshein @ 2019-06-15 21:40 ` Leonid Krivoshein 2019-06-16 12:10 ` Alexey Gladkov 1 sibling, 0 replies; 9+ messages in thread From: Leonid Krivoshein @ 2019-06-15 21:40 UTC (permalink / raw) To: devel Сам же себе и отвечу: 15.06.2019 19:53, Leonid Krivoshein пишет: > [...] Раньше я так и делал, получая часть информации через sysfs, а > другую часть -- через blkid, blockdev, итп, на что требуется root. > Поэтому и озадачился сабжем. Хотелось бы написать основной код, > работающий без рутовых привилегий. Но вопрос в том, возможно ли это на > системах без udev. > Никто эти файлы напрямую не парсит. В сишном коде используются: 1) libudev (при HAVE_LIBUDEV), в основном: udev_device_new_from_subsystem_sysname() и udev_device_get_property_value(), 2) а в качестве fallback -- libblkid, в основном: blkid_new_probe_from_filename() и blkid_probe_lookup_value(). При этом, для второго варианта сначала проверяется: getuid() == 0. Для меня это значит два варианта решения: забить на тех, "кто ходит без костылей" (не использует udev), ибо их единицы, либо написать для них такой код, который будет выполняться с привилегиями root. -- Best regards, Leonid Krivoshein. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] udevless информация о блочных устройствах 2019-06-15 16:53 ` Leonid Krivoshein 2019-06-15 21:40 ` Leonid Krivoshein @ 2019-06-16 12:10 ` Alexey Gladkov 2019-06-16 18:00 ` Leonid Krivoshein 1 sibling, 1 reply; 9+ messages in thread From: Alexey Gladkov @ 2019-06-16 12:10 UTC (permalink / raw) To: ALT Linux Team development discussions On Sat, Jun 15, 2019 at 07:53:05PM +0300, Leonid Krivoshein wrote: > >> ls /run/udev/data/b[0-9]* > > Аналог этому /sys/dev/block/* > > Да, во многом информация между sysfs и тем, что udev хранит в ramfs, > пересекается, и про /sys/dev/block я конечно же знаю. Раньше я так и > делал, получая часть информации через sysfs, а другую часть -- через > blkid, blockdev, итп, на что требуется root. Поэтому и озадачился > сабжем. Хотелось бы написать основной код, работающий без рутовых > привилегий. Но вопрос в том, возможно ли это на системах без udev. Ты хочешь получить информацию, которая предназначена только руту :) Очень похоже, что ты хочешь сделать udev в виде утилиты suid-ной. Потому что для получения этой информации нужен рут. Это может быть отдельный демон с правами или утилита. > >> ls /sys/block/*/uevent > >> > >> ? (Можно просто ДА или НЕТ, работать должно из под обычного пользователя). > > То что находится в /sys никак не связано с udev. Главная проблема в том, > > чтобы загрузить правильный модуль, чтобы появилась информация в sysfs. > > С этой проблемой с некоторых пор тоже знаком. И как её нынче принято > решать в отсутствии udev? Пока слышал только две версии: сборка ядра со > всеми модулями и скриптовый цикл, пытающийся загрузить все модули подряд > из initramfs. Ой-ой. Ты забыл как работает udev. Он сам никаких модулей не грузит. С этим система и без него справляется. Ядро вызывает утилиту прописанную в /proc/sys/kernel/modprobe [1]. Эта утилита (в большинстве случаев это /sbin/modprobe) загружает модуль. [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Documentation/debugging-modules.txt -- Rgrds, legion ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] udevless информация о блочных устройствах 2019-06-16 12:10 ` Alexey Gladkov @ 2019-06-16 18:00 ` Leonid Krivoshein 2019-06-17 8:25 ` Alexey Gladkov 0 siblings, 1 reply; 9+ messages in thread From: Leonid Krivoshein @ 2019-06-16 18:00 UTC (permalink / raw) To: devel 16.06.2019 15:10, Alexey Gladkov пишет: > On Sat, Jun 15, 2019 at 07:53:05PM +0300, Leonid Krivoshein wrote: >> Да, во многом информация между sysfs и тем, что udev хранит в ramfs, >> пересекается, и про /sys/dev/block я конечно же знаю. Раньше я так и >> делал, получая часть информации через sysfs, а другую часть -- через >> blkid, blockdev, итп, на что требуется root. Поэтому и озадачился >> сабжем. Хотелось бы написать основной код, работающий без рутовых >> привилегий. Но вопрос в том, возможно ли это на системах без udev. > Ты хочешь получить информацию, которая предназначена только руту :) Почему бы и нет? Для дальнейшей обработки в непривилегированном коде. $ lsblk -f # выдаёт же её обычному пользователю > Очень похоже, что ты хочешь сделать udev в виде утилиты suid-ной. Потому > что для получения этой информации нужен рут. Это может быть отдельный > демон с правами или утилита. Зачем делать SUID'ную утилиту, если работающий под root'ом udev уже собрал всю необходимую информацию и предоставил её с доступом на чтение всем простым смертным. >>> Главная проблема в том, >>> чтобы загрузить правильный модуль, чтобы появилась информация в sysfs. >> С этой проблемой с некоторых пор тоже знаком. И как её нынче принято >> решать в отсутствии udev? Пока слышал только две версии: сборка ядра со >> всеми модулями и скриптовый цикл, пытающийся загрузить все модули подряд >> из initramfs. > Ой-ой. Ты забыл как работает udev. Он сам никаких модулей не грузит. С > этим система и без него справляется. Ядро вызывает утилиту прописанную в > /proc/sys/kernel/modprobe [1]. Когда в последний раз принимался за эксперименты с udevless [2], столкнулся с такой проблемой: udev'а можно в любой момент попросить повторить все события, что были в процессе обнаружения "железа", а как быть с этим без udev'а? Допустим, одним из первых действий скрипт в initramfs пишет в /proc/sys/kernel/modprobe, но как быть с теми событиями, что уже проскочили до этого шага? И, с чем ещё столкнулся: есть модули, которые не грузятся сами, если их не грузить через modprobe. Типичный пример -- qemu "оборудование". Может, я что-то не так делаю, но избавиться от udev пока что у меня не вышло. > Эта утилита (в большинстве случаев это > /sbin/modprobe) загружает модуль. > > [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Documentation/debugging-modules.txt [2] https://www.altlinux.org/KVM/Helper#Про_эксперименты_с_devtmpfs_без_udev Было бы интересно узнать твоё мнение на этот счёт: возможна ли загрузка с наполненным модулями и фирмварью initramfs без своего /init внутри? -- Best regards, Leonid Krivoshein. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] udevless информация о блочных устройствах 2019-06-16 18:00 ` Leonid Krivoshein @ 2019-06-17 8:25 ` Alexey Gladkov 0 siblings, 0 replies; 9+ messages in thread From: Alexey Gladkov @ 2019-06-17 8:25 UTC (permalink / raw) To: ALT Linux Team development discussions On Sun, Jun 16, 2019 at 09:00:56PM +0300, Leonid Krivoshein wrote: > Почему бы и нет? Для дальнейшей обработки в непривилегированном коде. > > $ lsblk -f # выдаёт же её обычному пользователю Ну да, lsblk разбалтывает, то чего не положено :) Но если не будет udev, то она станет менее болтлива. > Зачем делать SUID'ную утилиту, если работающий под root'ом udev уже > собрал всю необходимую информацию и предоставил её с доступом на чтение > всем простым смертным. А ты в документации видел, что /run/udev/data/* является публичным интерфейсом ? Я такого не находил. Более того, раньше они уже меняли формат своей базы. Из-за этого у нас запускается один udev в initrd, а потом выполняется системный, который работает с нуля без базы из initrd. Собственно по этой причине у них есть: udevadm info --export-db > Когда в последний раз принимался за эксперименты с udevless [2], > столкнулся с такой проблемой: udev'а можно в любой момент попросить > повторить все события, что были в процессе обнаружения "железа", а как > быть с этим без udev'а? udev не какой-то Избранный процесс. Кто угодно у кого есть права может открыть netlink(NETLINK_KOBJECT_UEVENT) и попросить NLM_F_DUMP. В целом можно эвенты и по sysfs посмотреть, но там нужно быть осторожнее т.к. не все каталоги там являются публичным интерфейсом. > Допустим, одним из первых действий скрипт в > initramfs пишет в /proc/sys/kernel/modprobe, но как быть с теми > событиями, что уже проскочили до этого шага? Это не я начал разговор про udevless систему :) Я как раз за него или за форк udev без ерунды, которую туда натащили. > И, с чем ещё столкнулся: > есть модули, которые не грузятся сами, если их не грузить через > modprobe. Типичный пример -- qemu "оборудование". Может, я что-то не так > делаю, но избавиться от udev пока что у меня не вышло. qemu оборудование прекрасно грузится внутри виртуалки. > [2] https://www.altlinux.org/KVM/Helper#Про_эксперименты_с_devtmpfs_без_udev > > Было бы интересно узнать твоё мнение на этот счёт: возможна ли загрузка > с наполненным модулями и фирмварью initramfs без своего /init внутри? Насколько я помню нет. Но зачем это ? -- Rgrds, legion ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2019-06-17 8:25 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-06-15 15:23 [devel] udevless информация о блочных устройствах Leonid Krivoshein 2019-06-15 15:48 ` Alexey V. Vissarionov 2019-06-15 16:44 ` Leonid Krivoshein 2019-06-15 16:29 ` Alexey Gladkov 2019-06-15 16:53 ` Leonid Krivoshein 2019-06-15 21:40 ` Leonid Krivoshein 2019-06-16 12:10 ` Alexey Gladkov 2019-06-16 18:00 ` Leonid Krivoshein 2019-06-17 8:25 ` Alexey Gladkov
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git