ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [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: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 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 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