Добавьте функции RPC в Bernstein Daemontools

#rpc

#rpc

Вопрос:

Я студент-информатик из Италии, мне нужно сделать проект, основанный на модифицированной версии Daemontools от D.J. Bernstein, которая должна реализовывать удаленные вызовы процедур под Unix.

Обычно для запуска демона с помощью инструментов я использую этот синтаксис:

 svc -u /service/NameOfDaemon
  

И покончим с этим:

 svc -d /service/NameOfDaemon
  

Таким образом, я могу управлять демоном локально. Идея состоит в том, чтобы добавить блок кода, чтобы иметь возможность управлять демоном, расположенным на удаленной машине, это будет идеальный синтаксис:

 svc -u IP/service/NameOfDaemon
  

где IP обозначает фактический IP целевой машины, известный пользователю.

В эти дни я погуглил и узнал о RPC и DTools, но я немного застрял, кто-нибудь может помочь мне начать?

Возможно, также рекомендуется прочитать что-нибудь для моего проекта?

Комментарии:

1. Если вы делаете это под чьим-то руководством, спросите их, на какие ресурсы вам следует обратить внимание. В противном случае это относится к сайту, подобному Unixamp;Linux.SE

Ответ №1:

Способ Unix сделать это — сказать:

 ssh -n root@remotehost svc -u /service/NameOfDaemon
  

Философия unix заключается в создании небольших инструментов, которые хорошо выполняют одну задачу и работают вместе с другими инструментами. svc это инструмент, который может управлять демонами на локальном компьютере. ssh может запускать инструменты на удаленных машинах. Нет необходимости в другом инструменте.

Если вам абсолютно необходима одна команда, которая может управлять как локальными, так и удаленными демонами, то, как предлагает Крис, вы можете написать сценарий оболочки, который выполняется svc или ssh по мере необходимости.

Ответ №2:

supervise использует сокеты домена Unix для приема запросов. Преимущество использования сокетов домена Unix заключается в том, что доступом к нему можно управлять с помощью обычных разрешений файловой системы — в этом случае доступ к сокету разрешен только root, отсюда и причина, по которой вы обычно должны запускаться svc от имени root.

Однако, как только вы перейдете по сети, вам придется подумать о сетевой аутентификации (если вы не хотите, чтобы какие-либо Tom, Dick и Harry запускали и останавливали ваши службы). Если вы сможете решить эту проблему, остальное будет несложно:

  • Напишите службу, которая работает поверх tcpserver , которая может вызываться svc на удаленном компьютере для вас. Если контроль доступа, предоставляемый tcpserver , достаточен для вас, тогда отлично; в противном случае ваш сервис должен обрабатывать то, что осталось.
    • В целях безопасности не запускайте эту службу от имени root (т. Е. всегда указывайте -u в tcpserver командной строке). Вместо этого просто измените (групповое) владение вашими supervise сокетами, чтобы они были доступны для чтения и записи пользователем, от имени которого запускается ваша служба.
  • Напишите сценарий оболочки на стороне клиента, который обтекает svc . Он проверяет синтаксис «удаленного сервера», и если он используется, он подключится к вашей удаленной службе (а в противном случае просто вызовет svc как обычно).

Комментарии:

1. @Tom Спасибо за ответы, Хорошо понял, что вы говорите, и это, безусловно, простой и правильный способ получить контроль над удаленной машиной, но в моем проекте требуется действительно добавить некоторый код в файл supervice.c или svc.c. Затем перекомпилировать все инструменты, чтобы получить их модифицированную версию, которая способна также реализовывать удаленный вызов svc -u команды… Это сложно и не очень полезно, но это проект, для которого я призван, поэтому я должен следовать этим спецификациям…