On Sun, Nov 19, 2006 at 09:34:20PM +0500, Andrey Rahmatullin wrote: > Навеяно багами 8874, 9166 и 10015. > > Есть у нас service bluetooth, запускающий помимо прочего hcid. hcid при > запуске хочет запущенный messagebus, а также железку (без железки либо > модулей не стартует). > > Сейчас у нас сервис стартует через udev при втыкании железки либо загрузке > системы. Кстати, где-то должно быть ещё одно место, откуда он запускается для устройств, не обнаруживаемых автоматически (hci_uart). > В рез-те hcid не находит messagebus и дохнет. Я не уверен, что > messagebus можно переносить до udev. Именно - как минимум из-за /dev/log (я надеюсь, он туда пишет?). > Если пускать bluetooth через инитскрипты и оторвать от udev - он будет > падать при отсутствии железки, а при её втыкании не будет пускаться. Можно обновить udev до >= 099, после чего поставить в его скрипт инициализации вызов udevtrigger --attr-match=dev, чтобы он не пытался загружать все модули сразу (и выполнять загрузку модулей позднее, как это происходило раньше - при запуске сервиса hotplug). Хотя в случае, если модули USB оказались загружены раньше (например, в результате запихивания их в initrd для возможности использования USB-клавиатуры на раннем этапе загрузки системы), всё равно можно напороться на race. Тогда можно добавлять ещё костыли - например, проверять в запускаемом из udev скрипте, запущен ли сервис messagebus, а где-нибудь в конце загрузки дёргать udevtrigger --retry-failed.