vasek, спасибо.

Найдено 2 решения.

1. /etc/systemd/systm/docker_dhcpd.service
...
[Service]
Restart=on-failure
ExecStart=/usr/bin/docker run -p 67:67 --name dhcpd --rm dhcpd
ExecStop=/usr/bin/docker stop dhcpd
...
2. /etc/systemd/system/docker_dhcpd.service
...
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/docker run -p 67:67 -d --name dhcpd --restart on-failure dhcpd
ExecStop=/usr/bin/docker stop dhcpd
ExecStopPost=/usr/bin/docker rm dhcpd
...

В первом случае за перезапуск контейнера отвечает systemd, во втором - docker. И в том, и в другом случае контейнер после остановки сервиса удаляется.
Первый вариант, наверное, правильнее, с точки зрения организации контроля, хотя при остановке сервиса он становится Failure...
vasek Если "на пальцах", то:
$ ps -ef | grep dhcpd
anton 357 341 1 12:19 tty1 00:00:00 grep dhcpd
$ docker ps
$ systemctl status docker_dhcpd
...
  Active: inactive (dead)
$ sudo systemctl start docker_dhcpd
$ systemctl status docker_dhcpd
...
  Active: active (exited)
$ docker ps
be1ab5c28f70 dhcpd:latest "/usr/sbin/dhcpd -f ..."  20 hours age  Up 44 seconds  0.0.0.0:67->67/tcp  dhcpd
$ ps -ef | grep dhcpd
root  600 583 1 12:20 ? 00:00:01 /usr/sbin/dhcpd -f -4
anton 651 341 0 12:22 tty1 00:00:00 grep dhcpd
$ sudo kill -9 600
$ ps -ef | grep dhcpd
anton 684 341 0 12:23 tty1 00:00:00 grep dhcpd
$ docker ps
$ systemctl status docker_dhcpd
...
  Active: active (exited)
$

Т. е. старт сервиса запускает контейнер, появляется процесс dhcpd - все хорошо.
Далее имитируем смерть процесса dhcpd
Процесс умирает, контейнер падает, а сервис - нет.

Тут суть в том, что сервис отслеживает процесс, описанный в ExecStart (docker start dhcpd). Он завершается с кодом 0 (контейнер запущен) и systemd считает сервис активным. Процесс dhpcd в данном случае не отслеживается и (как я понимаю) не является дочерним для ExecStart...
vs220 Ну, docker вообще не совсем для ограничения прав (или совсем не для того). Он позволяет создать изолированную область, где работает нужное приложение, минимально зависимое от системы, позволяет не устанавливать в систему само приложение. Т. е. есть только базовая система и docker, а все остальное изолировано друг от друга в контейнерах. Не знаю, как ещё объяснить...

Для меня dhcp и bind внутри контейнеров - просто для практики. Создать образ, запустить контейнер - у меня получилось. Теперь я пытаюсь сделать так, чтобы контейнеры запускались и процессы контролировались через systemd
vs220 Запускать systemd внутри контейнера, конечно, можно, но тогда весь смысл контейнера нивелируется... Образы получаются тяжелыми и бессмысленными.

/run/docker/containerd/daemon/*/init.pid может и прокатит, но только когда контейнер один. А если добавить второй, например с bind? Тогда - уже нет...
vs220 Эмм... Есть
/run/docker/containerd/daemon/io.containerd.runtime.v1.linux/mody/be1ab5c28f70e78f57af90e84afd04b65f80e0359c2b15789092cb577e7ce1a9/init.pid
В нём реальный pid dhcpd.

В таком подходе проблема следующая: при обновлении контейнера - этот путь изменится, тогда и сервис придётся переделывать...
vs220 PIDFile пробовал, но проблема в том, что он не создается. Принудительно его создавать тоже пробовал - не прокатило.
Restart=always приводит к тому, что сервис запускается, через секунду останавливается, запускается снова, останавливается и так по кругу...

Реальный PIDFile, насколько я понимаю, создается внутри контейнера...
Доброго дня.

Прошу помощи у знающих товарищей по systemd.

Задача
настроить запуск и работу dhcpd, находящегося в контейнере docker через сервис systemd

Сделано

1. Создан образ на основе archlinux/base с dhpcd и его конфигом внутри
Dockerfife
FROM archlinux/base
RUN echo "y" | pacman -Sy dhcp
COPY ./dhcpd.conf /etc
EXPOSE 67
CMD ["/usr/sbin/dhcpd", "-f", "-4"]
docker build -t dhcpd .

2. Образ запущен в контейнере с именем dhcpd
docker run -d -p 67:67 --name dhcpd dhcpd
docker ps
...
be1ab5c28f70    dhcpd:latest    "/usr/sbin/dhcpf -f ..."    17 hours ago    Up 1 second    0.0.0.0:67->67/tcp    dhcpd

ps -ef | grep dhcp
...
root    1178    1161    9    09:25    ?    00:00:01 /usr/sbin/dhcpd -f -4

3. Cоздан сервис
/etc/systemd/system/docker_dhcpd.service

[Unit]
Description=DHCP server in docker container
Requires=docker.service
Conflicts=dhcpd4.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/docker start dhcpd
ExecStop=/usr/bin/docker stop dhcpd

[Install]
WantedBy=multi-user.target

4. Сервис включен.

Проблема
Запуск и остановка сервиса делают то, что и планировалось, но при падении процесса dhcpd ничего не происходит, сервис остается запущенным.

Предпринятые действия
В сервисе изменил тип Type=forking - получил цикличный перезапуск сервиса... Т. е. при старте, запускается контейнер, процесс умирает и systemd считает, что сервис упал, запускает ExecStop, в результате контейнер останавливается.

Вопрос
Как правильно настроить сервис, чтобы он отслеживал процесс dhcpd?
Кривое обновление mod_wsgi
[[email protected] ~]$ systemctl status httpd
● httpd.service - Apache Web Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2017-07-18 07:04:27 MSK; 4min 22s ago
  Process: 358 ExecStart=/usr/bin/httpd -k start -DFOREGROUND (code=exited, status=1/FAILURE)
 Main PID: 358 (code=exited, status=1/FAILURE)

июл 18 07:04:25 HomeServer systemd[1]: Started Apache Web Server.
июл 18 07:04:27 HomeServer httpd[358]: httpd: Syntax error on line 187 of /etc/httpd/conf/httpd.conf: Cannot load modules/mod_wsgi.so into server: /etc/httpd/modules/mo
июл 18 07:04:27 HomeServer systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE
июл 18 07:04:27 HomeServer systemd[1]: httpd.service: Unit entered failed state.
июл 18 07:04:27 HomeServer systemd[1]: httpd.service: Failed with result 'exit-code'.
[[email protected] ~]$ grep wsgi.so /etc/httpd/conf/httpd.conf
LoadModule wsgi_module modules/mod_wsgi.so
[[email protected] ~]$ pacman -Qs wsgi
local/mod_wsgi 4.5.17-1
    Python WSGI adapter module for Apache
[[email protected] ~]$ ls -laF /etc/httpd/modules/ | grep wsgi
-rwxr-xr-x 1 root root 232976 июл 16 15:34 mod_wsgi.so*
[[email protected] ~]$

Откат 4.5.17-1 -> 4.4.22-1 решает проблему
teplovoz
можно приобрести Wi-Fi USB адаптер и настроить сеть - Wi-Fi для ПК :)
Можно, но не хочется. Хочется стационарник на работе подцепить к сети через модем, а к нему цепляться с ноута. А ещё лучше засунуть систему на SD, её - в модем и дальше иметь мобильную систему с возможностью раздачи Wifi

domov0y
вы делали iwlist wwp0s29u1u2i3 scan (команда работает только с включенным вайфай модулем) и получали список сетей? если я что-то понимаю страшных буквах то wlp2s0 это вайфай вашего ноутбука.
Не делал... Попробую.
wlp2s0 - да, это wifi карточка ноута.

dmix
судя по idVendor 0x12d1 Huawei Technologies Co., Ltd. idProduct 0x1506 Modem/Networkcard - это Е398 - обычный LTE модем. Раздачу можно сделать только через встроенную или внешнюю Wi-Fi карту.
vasek
Чтобы USB 3G/4G модем мог раздавать интернет, он должен иметь встроенный WiFi роутер ( LTE роутер)
Понятно, вот так с ходу - не судьба, а так хотелось... :-)
Товарищи, подскажите, а то я не понимаю...

Исходное железо: Стационарный комп, ноутбук, 3g модем от Мегафона.
Задумка: воткнуть модем в стационарный комп, через него подключаться к паутине, и через него же (уже как сетевую карту) раздавать wifi для ноута.

Пройденный путь: с помощью hostapd, iptables и dhcpd удалось раздавать wifi с модема через сетевую карту самого ноута. Принцип понятен.

Проблема: при подключении модема появляется новое сетевое устройство
[[email protected] ~]$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: wlp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether dc:a9:71:94:71:e0 brd ff:ff:ff:ff:ff:ff
6: wwp0s29u1u2i3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 3e:27:3f:b1:46:9d brd ff:ff:ff:ff:ff:ff
7: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 3
    link/ppp
[[email protected] ~]$ 

Только раздать wifi с него не получается
[[email protected] ~]$ cat /etc/hostapd/hostapd.conf
ssid=ShareWifi
wpa_passphrase=super_password
interface=wwp0s29u1u2i3
bridge=br0
auth_algs=3
channel=7
driver=nl80211
hw_mode=g
logger_stdout=-1
logger_stdout_level=2
max_num_sta=5
rsn_pairwise=CCMP
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
[[email protected] ~]$ sudo systemctl start hostapd
[sudo] пароль для anton:
[[email protected] ~]$ systemctl status hostapd
● hostapd.service - Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
   Loaded: loaded (/usr/lib/systemd/system/hostapd.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Thu 2017-05-04 02:24:17 MSK; 7s ago
  Process: 2014 ExecStart=/usr/bin/hostapd /etc/hostapd/hostapd.conf (code=exited, status=1/FAILURE)
 Main PID: 2014 (code=exited, status=1/FAILURE)

май 04 02:24:17 KsushaNotebook hostapd[2014]: Configuration file: /etc/hostapd/hostapd.conf
май 04 02:24:17 KsushaNotebook hostapd[2014]: nl80211: Could not configure driver mode
май 04 02:24:17 KsushaNotebook hostapd[2014]: nl80211: deinit ifname=wwp0s29u1u2i3 disabled_11b_rates=0
май 04 02:24:17 KsushaNotebook hostapd[2014]: nl80211 driver initialization failed.
май 04 02:24:17 KsushaNotebook hostapd[2014]: wwp0s29u1u2i3: interface state UNINITIALIZED->DISABLED
май 04 02:24:17 KsushaNotebook hostapd[2014]: wwp0s29u1u2i3: AP-DISABLED
май 04 02:24:17 KsushaNotebook hostapd[2014]: hostapd_free_hapd_data: Interface wwp0s29u1u2i3 wasn't started
май 04 02:24:17 KsushaNotebook systemd[1]: hostapd.service: Main process exited, code=exited, status=1/FAILURE
май 04 02:24:17 KsushaNotebook systemd[1]: hostapd.service: Unit entered failed state.
май 04 02:24:17 KsushaNotebook systemd[1]: hostapd.service: Failed with result 'exit-code'.
[[email protected] ~]$ 
Насколько я понимаю, интерфейс не может выступать точкой доступа.

Вопрос: он в-принципе этого не может или такая возможность просто выключена? Или я вообще не правильно понимаю ошибку?
[[email protected] ~]$lsusb -v
...
Bus 002 Device 003: ID 12d1:1506 Huawei Technologies Co., Ltd. Modem/Networkcard
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x12d1 Huawei Technologies Co., Ltd.
  idProduct          0x1506 Modem/Networkcard
  bcdDevice            1.02
  iManufacturer           1 HUAWEI
  iProduct                2 HUAWEI Mobile
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength          225
    bNumInterfaces          6
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           3
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2
      bInterfaceProtocol      1
      iInterface              0
      ** UNRECOGNIZED:  05 24 00 10 01
      ** UNRECOGNIZED:  04 24 02 02
      ** UNRECOGNIZED:  05 24 01 00 00
      ** UNRECOGNIZED:  05 24 06 00 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               5
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2
      bInterfaceProtocol      2
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2
      bInterfaceProtocol      3
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x85  EP 5 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2
      bInterfaceProtocol     22
      iInterface              9 CDC Network Control Model (NCM)
      ** UNRECOGNIZED:  05 24 00 10 01
      ** UNRECOGNIZED:  06 24 1a 00 01 1f
      ** UNRECOGNIZED:  0d 24 0f 0b 0f 00 00 00 ea 05 03 00 01
      ** UNRECOGNIZED:  05 24 06 03 03
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x87  EP 7 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0010  1x 16 bytes
        bInterval               9
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       1
      bNumEndpoints           3
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2
      bInterfaceProtocol     22
      iInterface             10 CDC Network Data
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x87  EP 7 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0010  1x 16 bytes
        bInterval               9
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x86  EP 6 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x05  EP 5 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        4
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     80 Bulk-Only
      iInterface              4 Mass Storage
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x88  EP 8 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x06  EP 6 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        5
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     80 Bulk-Only
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x89  EP 9 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x07  EP 7 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               1
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               2.00
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  bNumConfigurations      1
Device Status:     0x0001
  Self Powered
...