* [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