Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Выполнить скрипт до проверки/монтирования устройств  (Прочитано 3080 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ⓓ ⓔ ⓡ SysMan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
  • S|T|A|R|L|E|T
    • Просмотр профиля
    • OpenVMS forever!
ДД, коллеги!

Есть задача загрузить свой драйвер вместе со стартом системы, и это худо-бедно понятко как сделать. Но драйвер долен быть инициализирован внешней управляющей программой, сделать это необходимо *до* каких либо проверок дисковых устройств (исключая системный том) и *до* того как делается попытка смонтировать раздел из fstab на нём же. Да, ещё после старта сети , обязательно. Наверное похоже чем-то на работу с NFS-томами ...

Был испробован путь (https://superuser.com/questions/1289190/execute-script-at-system-startup-time-before-mounting-disks-from-fstab) , не приведший к желаемому результату. Был обозначен совет попробовать использовать systemd (но ведь моей Ubuntu 16.ч и так вроде всё не явно трансформируется в systemd' конфиги и скрипты), но, однако мне ясен механизм того, как гарантируется запуск того или иного скрипта *до* того как будет сделан checkfs или mountall ?

Кто-то сталкивался с такой задачей, что посоветуете ?
OpenVMS bigot, C progger, sys/net BMF.

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
systemd в 16.04 из коробки рулит и педалит всем процессом загрузки.

Надо курить ман и найти тот таргет который нужен (то что до проверок, скорее всего вам нужен local-fs-pre.target). Далее пишем юнит и у него в wanted пишем нужный таргет.

И вуаля - золотой ключик у нас в кармане.
« Последнее редактирование: 31 Января 2018, 15:33:20 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн ⓓ ⓔ ⓡ SysMan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
  • S|T|A|R|L|E|T
    • Просмотр профиля
    • OpenVMS forever!
systemd в 16.04 из коробки рулит и педалит всем процессом загрузки.

Надо курить ман и найти тот таргет который нужен (то что до проверок, скорее всего вам нужен local-fs-pre.target). Далее пишем юнит и у него в wanted пишем нужный таргет.

И вуаля - золотой ключик у нас в кармане.
"Вкурить ман" - это конечно внушает как 100%-ый ответ в любой конференции, в любом топике. :-)

Однако ... вот что:
localfs и chekfs как таргеты Required-Start - эффекта не дают. Я дал ссыклю с листингами sysv (из которых генерируются systemd's *.conf), если есть желание помочь - то пожалуйста ознакомьтесь, а коли нет, то и на том спасибо.
OpenVMS bigot, C progger, sys/net BMF.

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7810
  • We were here
    • Просмотр профиля
dr.SysMan, насколько я понял, вы шифрованный luks таким образом монтируете?

Пользователь добавил сообщение 31 Января 2018, 16:32:12:
*до* каких либо проверок дисковых устройств (исключая системный том) и *до* того как делается попытка смонтировать раздел из fstab на нём же. Да, ещё после старта сети , обязательно.

Нет ли тут противоречий, кстати?
« Последнее редактирование: 31 Января 2018, 16:32:12 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
dr.SysMan, так зачем вам обязательно "вырезать аппендицит бензопилой дружба через задний проход"?

Есть у вас systemd - вот для него и нужно написать юнит с требуемым таргетом (именно systemd таргетом, вариант я вам предложил - скорее всего это именно то что вам нужно).

Ман курить - всегда полезно. В частности я не считаю, что написание юнитов это такая уж сложная задача, что вы с ней не справитесь, но, не покурив ман по systemd, вы конечно не сможете сделать эту элементарную работу.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн ⓓ ⓔ ⓡ SysMan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
  • S|T|A|R|L|E|T
    • Просмотр профиля
    • OpenVMS forever!
dr.SysMan, насколько я понял, вы шифрованный luks таким образом монтируете?

Пользователь добавил сообщение 31 Января 2018, 16:32:12:
*до* каких либо проверок дисковых устройств (исключая системный том) и *до* того как делается попытка смонтировать раздел из fstab на нём же. Да, ещё после старта сети , обязательно.

Нет ли тут противоречий, кстати?
Нет, не LUKS. Нечто похожее, вероятно, но таки не LUKS.

Возможно и есть противоречия, но по условиям задачи нужна сеть, данные, которыми инициализируется мой драйвер получаются  из тучки.

Пользователь добавил сообщение 31 Января 2018, 17:10:27:
dr.SysMan, так зачем вам обязательно "вырезать аппендицит бензопилой дружба через задний проход"?

Есть у вас systemd - вот для него и нужно написать юнит с требуемым таргетом (именно systemd таргетом, вариант я вам предложил - скорее всего это именно то что вам нужно).
Разумеется  понимаю что вы предложили. Моими "target"-ами  являются checkfs и mountall, кусок sysv:

### BEGIN INIT INFO
# Provides:          dudriver
# Required-Start:    $network udev checkfs mountall
# Required-Stop:     
# Should-Start:      udev
# Should-Stop:       udev
# X-Start-Before
# X-Stop-After:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

Считаете ли вы, что то,  что генериться из этого будет совсем другим нежели я напишу в system.d/dudriver.conf - по конечному результату ?


Ман курить - всегда полезно. В частности я не считаю, что написание юнитов это такая уж сложная задача, что вы с ней не справитесь, но, не покурив ман по systemd, вы конечно не сможете сделать эту элементарную работу.
Вы только поймите меня правильно, я без всяких ёрничаний прочитал и ознакомился с мегатоннами всяких ман-шманов. Разумеется я прочитал и "ман" за написание systemd .conf файлов, не сложно там. Но, чем гарантируется иной результат?

Вот ещё какой аспект, мне нужно не просто запустить скрипт, мне нужно что бы он *выполнился* до того как к монтированию дело подошло.
« Последнее редактирование: 31 Января 2018, 17:10:28 от dr.SysMan »
OpenVMS bigot, C progger, sys/net BMF.

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
кусок sysv
Еще раз: не надо пилой и через задний проход.

Не нужен вам sysv ни кусками ни шмотками ни дольками. Вам нужен systemd.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн ⓓ ⓔ ⓡ SysMan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
  • S|T|A|R|L|E|T
    • Просмотр профиля
    • OpenVMS forever!
кусок sysv
Еще раз: не надо пилой и через задний проход.

Не нужен вам sysv ни кусками ни шмотками ни дольками. Вам нужен systemd.
Хорошо. Мы сделаем через systemd . Но ... я скоро вернусь! :-)
OpenVMS bigot, C progger, sys/net BMF.

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Возможно и есть противоречия, но по условиям задачи нужна сеть, данные, которыми инициализируется мой драйвер получаются  из тучки.

Не получится.


Сделайте
systemd-analyze plot > test.svg
xdg-open test.svg
и посмотрите что там за чем инициализируется.

Сетка поднимается тогда, когда уже все смонтировано.

Драйвер устройства - это штука которая обязана быть сама в себе - минимальные настройки из параметров вызова и более ничего.

Вам нужно делать неч-то двухступенчатое - сначала поднимаем устройство фейково (типо хоть чучелом, хоть тушкой), потом после network-online.target уже можно что-то вытянуть из сети и переинициализировать драйвер уже в нормальный режим.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн ⓓ ⓔ ⓡ SysMan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
  • S|T|A|R|L|E|T
    • Просмотр профиля
    • OpenVMS forever!
Итак, прошу помощи разрешить "что не нравится" ?

root@sysman:/etc/systemd/system# systemctl status dudriver.service
● dudriver.service - DUdriver service
   Loaded: loaded (/etc/systemd/system/dudriver.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

янв 31 19:33:15 sysman systemd[1]: [/etc/systemd/system/dudriver.service:9] Unknown lvalue 'Wants' in section 'Service'
янв 31 19:33:15 sysman systemd[1]: [/etc/systemd/system/dudriver.service:13] Unknown lvalue 'After' in section 'Install'
янв 31 19:33:37 sysman systemd[1]: [/etc/systemd/system/dudriver.service:9] Unknown lvalue 'Wants' in section 'Service'
янв 31 19:33:37 sysman systemd[1]: [/etc/systemd/system/dudriver.service:13] Unknown lvalue 'After' in section 'Install'
янв 31 19:34:40 sysman systemd[1]: [/etc/systemd/system/dudriver.service:9] Unknown lvalue 'Wants' in section 'Service'
янв 31 19:34:40 sysman systemd[1]: [/etc/systemd/system/dudriver.service:13] Unknown lvalue 'After' in section 'Install'
янв 31 19:34:57 sysman systemd[1]: [/etc/systemd/system/dudriver.service:9] Unknown lvalue 'Wants' in section 'Service'
янв 31 19:34:57 sysman systemd[1]: [/etc/systemd/system/dudriver.service:13] Unknown lvalue 'After' in section 'Install'
янв 31 19:35:46 sysman systemd[1]: [/etc/systemd/system/dudriver.service:9] Unknown lvalue 'Wants' in section 'Service'
янв 31 19:35:46 sysman systemd[1]: [/etc/systemd/system/dudriver.service:13] Unknown lvalue 'After' in section 'Install'


root@sysman:/etc/systemd/system# cat dudriver.service
[Unit]
After=local-fs-pre.target
Description=DUdriver service

[Service]
ExecStart=/opt/xx/dudriver_startup.sh
Type=forking

Wants=network-online.target

[Install]
WantedBy=graphical.target multi-user.target
After=local-fs-pre.target

Проверяем таргеты:


root@sysman:/etc/systemd/system# systemctl status local-fs-pre.target
● local-fs-pre.target - Local File Systems (Pre)
   Loaded: loaded (/lib/systemd/system/local-fs-pre.target; static; vendor preset: enabled)
   Active: active since Ср 2018-01-31 19:14:53 MSK; 21min ago
     Docs: man:systemd.special(7)

янв 31 19:14:53 sysman systemd[1]: Reached target Local File Systems (Pre).
root@sysman:/etc/systemd/system# systemctl status network-online.target
● network-online.target - Network is Online
   Loaded: loaded (/lib/systemd/system/network-online.target; static; vendor preset: enabled)
   Active: active since Ср 2018-01-31 19:15:10 MSK; 21min ago
     Docs: man:systemd.special(7)
           http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget

янв 31 19:15:10 sysman systemd[1]: Reached target Network is Online.
root@sysman:/etc/systemd/system#


PS:Ребят, драйвер должен быть таким - каким он нужен для выполнения целевой задачи. Да, он таки поднимается "фейково" (и особо не важно вна каком этапе загрузки системы) - как вы выразились. Таки да - он "второй ступенью" таки инициализируется тем, чем надо. Так вот "инициализатор" мне нужно запустить до монтировки дисков. Ну что мы по кругу, ну право же ...
OpenVMS bigot, C progger, sys/net BMF.

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7810
  • We were here
    • Просмотр профиля
Wants и второй(?!) After не в той секции, чего непонятного-то?

Пользователь добавил сообщение 31 Января 2018, 19:58:15:
И что-то у меня стойкое подозрение, что вашу "целевую задачу" вы исполняете совсем не так, как надо. Расскажите, что именно у вас за задача, а не каким образом вы решаете задачу. 

Как-бы такого не вышло: https://tproger.ru/articles/xyproblem/
То есть понятно, драйвер, сеть, инициализация, до монтирования. А в итоге-то что должно быть и зачем?
« Последнее редактирование: 31 Января 2018, 20:00:09 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн ⓓ ⓔ ⓡ SysMan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
  • S|T|A|R|L|E|T
    • Просмотр профиля
    • OpenVMS forever!
Wants и второй(?!) After не в той секции, чего непонятного-то?
Право же не ловко, но Вам таки пальчиком сложно поправить, привести пример правильной секции ?





Пользователь добавил сообщение 31 Января 2018, 19:58:15:
И что-то у меня стойкое подозрение, что вашу "целевую задачу" вы исполняете совсем не так, как надо. Расскажите, что именно у вас за задача, а не каким образом вы решаете задачу. 
[/quote]
Решаемая задача в первом сообщении. Пожалуйста , не тратье время на поиск чего-либо за пределами. Я не хотел бы инициировать и быть участником брейн-ринга ни о чём.


Как-бы такого не вышло: https://tproger.ru/articles/xyproblem/
Это зависит от степени готовности участников решать поставленный вопрос, не навязывая решение за которое отвественности общественность не несёт, понимаете к чему я?

То есть понятно, драйвер, сеть, инициализация, до монтирования. А в итоге-то что должно быть и зачем?
Военнатайна, дружище, уж простите. Подписку дал. Не обижайтесь, ладно ?!
OpenVMS bigot, C progger, sys/net BMF.

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Военнатайна, дружище, уж простите.

Тебя не просят выдавать секреты, тебя просят объяснить на техническом уровне, что ты хочешь.

Пока из тебя клещами вытянули следующее:

Нужно до монтирования дисков инициировать драйвер девайса данными вытянутыми из сети.

Так вот уже объяснил - что не реально из сети что-то получить до того как монтируются диски. Просто потому, что сеть позже инициализируется, уже после монтирования. И это также видно из ваших листингов по network-online.target и local-fs-pre.target (время старта).

Так что нужно выработать двухступенчатую модель инициализации - до local-fs-pre.target - часть которую можно сделать без данных из сети, после network-online.target - финальная инициализация. Иного решения - нет.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7810
  • We were here
    • Просмотр профиля
Право же не ловко, но Вам таки пальчиком сложно поправить, привести пример правильной секции ?

без проблем: https://www.freedesktop.org/software/systemd/man/systemd.unit.html

Пользователь добавил сообщение 31 Января 2018, 20:39:58:
Ну а исходя из того, что у вас "воентайна", возможно вам подойдет следующее:
1. Убираете всё, что зависит от "воентайны" из fstab или из системы.
2. После поднятия сети скриптом подгружаете драйвера, данные и прочую "воентайну" из сети
3. Тем же скриптом монтируете диски и прочую "воентайну" ну либо что там надо...
« Последнее редактирование: 31 Января 2018, 20:39:58 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
...пока домой с работы ехал вот что надумалось.

Если из облака данные быстро не протухают, то ведь их можно при дауне (пока сеть не протухла) скачать и локально положить (можно в крипто-контейнер), при старте системы в сеть лезть не надо и можно сделать все свои секретные дела до монтирования, проверки дисков.

Другой вариант (ALiEN175 уже озвучил вариант моей идеи №2) - пока сеть не появилась - ждем, как появилась - инициируем драйвер и перемонтируем диски (не уверен что корень удастся перемонтировать, но все остальное наверняка получится).

Возможно еще есть варианты извернуться.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

 

Страница сгенерирована за 0.023 секунд. Запросов: 19.