Dlaczego usługi nie zaczynają się podczas instalacji?

23

Widziałem to już kiedyś, ale nie znalazłem niczego w człowieku ubuntu na temat tego osobliwego pliku policy-rc.dbinarnego, który uniemożliwiałby uruchamianie / restartowanie / zatrzymywanie usług po wywołaniu przez dpkg / apt, więc chciałbym wiedzieć, jaka jest tego przyczyna.

Setting up lxc (0.9.0-0ubuntu3.6) ...
invoke-rc.d: policy-rc.d denied execution of start.
invoke-rc.d: policy-rc.d denied execution of start.
invoke-rc.d: policy-rc.d denied execution of start.

Najwyraźniej żaden pakiet nie jest właścicielem tego pliku binarnego:

dpkg -S /usr/sbin/policy-rc.d
dpkg-query: no path found matching pattern /usr/sbin/policy-rc.d
Braiam
źródło

Odpowiedzi:

31

Ten „skrypt” znajduje się w sysv-rcpakiecie. Jest to część polityki Debiana, która pozwala administratorom sysadmin kontrolować, które usługi uruchamiają / restartują / zatrzymują się, gdy instalują / aktualizują / odinstalowują pakiety:

POLICY-RC.D Interfejs warstwy strategii (/usr/sbin/policy-rc.d):

Większość systemów Debian nie będzie miała tego skryptu, ponieważ potrzeba warstwy zasad nie jest zbyt powszechna. Większość osób korzystających z więzów chroot potrzebuje tylko jednowierszowego skryptu, który zwraca status wyjścia 101 jako uwięziony skrypt /usr/sbin/policy-rc.d.

Plik /usr/sbin/policy-rc.d musi być zarządzany za pośrednictwem systemu alternatyw (/ usr / sbin / update-alternatives) za pomocą dostarczanych pakietów.

/usr/sbin/policy-rc.d [opcje] []

/usr/sbin/policy-rc.d [opcje] --list [...]

( Źródło )

Co się tutaj dzieje? Cóż, za każdym razem, gdy ten skrypt jest obecny, zwróci kod określający bieżącą politykę systemu lokalnego (która domyślnie jest 101= akcja zabroniona przez politykę). Jeśli chcesz zmienić zasadę, po prostu zmodyfikuj plik jako root na dowolną z następujących wartości:

  0 - action allowed
  1 - unknown action (therefore, undefined policy)
 100 - unknown initscript id
 101 - action forbidden by policy
 102 - subsystem error
 103 - syntax error
 104 - [reserved]
 105 - behaviour uncertain, policy undefined.
 106 - action not allowed. Use the returned fallback actions
       (which are implied to be "allowed") instead. 

Skrypt nadal jest symbolem zastępczym, ale po zakończeniu wszystkie te wartości mogą zostać zwrócone. Jeśli chcesz, aby każda zmiana wystarczy zmienić exit 101na exit 0i zrobione. Ilekroć instalujesz / usuwasz / aktualizujesz usługę, będą one (ponownie) uruchamiane / zatrzymywane.

Braiam
źródło
6
Obrazy exit 101 # For most Docker users, "apt-get install" only happens during "docker build", # where starting services doesn't work and often fails in humorous ways. This # prevents those failures by stopping the services from attempting to start.
dokerów
2
@Tjorriemorrie, proszę, możesz opracować? Mam ten problem podczas tworzenia obrazu dokera i wydaje się, że nie jestem w stanie go naprawić
Jonny Flowers,
możliwe rozwiązanie: monblocnotes.com/node/2057
David Portabella
@JonnyFlowers Odwołuje się do tych wierszy w źródle dokerów
Bigood
@ Bigood: numer linii został zmieniony w ostatnim masteroddziale. Oto [bezpośredni link do wierszy w źródle dokera ( github.com/moby/moby/blob/v17.05.0-ce/contrib/mkimage/… ).
Hosam Aly,