LINUX.ORG.RU

Wifi с wpa_supplicant в systemd?

 , ,


0

1

Здравствуйте! Я использую trisquel (ubuntu), нужно настроить wifi с wpa_supplicant, вместо NetworkManager (который хранит пароль вместо хеша, как wpa_supplicant).

1) Я отключил в systemd сервис NetworkManager.

2) Скнофигурировал и успешно подключился к Интернету через wpa_supplicant & dhclient

# cat /etc/wpa_supplicant/wpa_supplicant.conf 
ctrl_interface=/run/wpa_supplicant
ctrl_interface_group=0
update_config=1

network={
	ssid="homewifi"
	scan_ssid=1
        proto=WPA2
        key_mgmt=WPA-PSK
        psk=hashmyhash
}

# ifconfig wlp2s0 up
# wpa_supplicant -B -i wlp2s0 -c /etc/wpa_supplicant/wpa_supplicant.conf
# dhclient wlp2s0 &
# ping fsf.org
..пингуется, интернет есть..

3) Написал systemd юниты для dbus, но работает только 1 wpa-pre.service

# cat /lib/systemd/system/wpa-pre.service
[Unit]
Description=Raise wlp2s0
DefaultDependencies=no
After=local-fs.target apparmor.service systemd-sysctl.service systemd-modules-load.service
Before=wpa_supplicant.service wpa-post.service

[Install]
WantedBy=multi-user.target

[Service]
Type=oneshot
ExecStart=/sbin/ifconfig wlp2s0 up


# cat /lib/systemd/system/wpa_supplicant.service 
[Unit]
Description=WPA supplicant (wlp2s0)
#Wants=network.target
After=wpa-pre.service dbus.service
Before=wpa-post.service

[Service]
Type=dbus
#Type=oneshot
BusName=fi.epitest.hostap.WPASupplicant
#ExecStart=/sbin/ifconfig wlp2s0 up
ExecStart=/sbin/wpa_supplicant -B -i wlp2s0 -c /etc/wpa_supplicant/wpa_supplicant.conf 
#ExecStart=/sbin/dhclient wlp2s0 

[Install]
WantedBy=multi-user.target
Alias=dbus-fi.epitest.hostap.WPASupplicant.service


# cat /lib/systemd/system/wpa-post.service 
[Unit]
Description=Dhclient (wlp2s0)
#Wants=network.target
After=wpa-pre.service wpa_supplicant.service

[Service]
Type=dbus
#Type=oneshot
#BusName=fi.epitest.hostap.WPASupplicant
BusName=fi.epitest.hostap.wpapost
#ExecStart=/sbin/ifconfig wlp2s0 up
#ExecStart=/sbin/wpa_supplicant -B -i wlp2s0 -c /etc/wpa_supplicant/wpa_supplicant.conf 
ExecStart=/sbin/dhclient wlp2s0 

[Install]
WantedBy=multi-user.target
Alias=dbus-fi.epitest.hostap.wpapost.service


# reboot

# ifconfig
lo ...
wlp2s0    Link encap:Ethernet  HWaddr xx:xx:xx:xx
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
...
..интерфейс поднят...


# systemctl status wpa_supplicant.service
● wpa_supplicant.service - WPA supplicant (wlp2s0)
   Loaded: loaded (/lib/systemd/system/wpa_supplicant.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Вс 2018-08-26 09:18:19 MSK; 1min 15s ago
  Process: 906 ExecStart=/sbin/wpa_supplicant -B -i wlp2s0 -c /etc/wpa_supplicant/wpa_supplicant.conf (code=exited
 Main PID: 906 (code=exited, status=0/SUCCESS)

авг 26 09:18:19 me systemd[1]: Starting WPA supplicant (wlp2s0)...
авг 26 09:18:19 me wpa_supplicant[906]: Successfully initialized wpa_supplicant
авг 26 09:18:19 me systemd[1]: Started WPA supplicant (wlp2s0).

...wpa_supplicant не работает или отрабатывает и отключается...


# systemctl status wpa-post.service
● wpa-post.service - Dhclient (wlp2s0)
   Loaded: loaded (/lib/systemd/system/wpa-post.service; enabled; vendor preset: enabled)
   Active: failed (Result: timeout) since Вс 2018-08-26 09:19:49 MSK; 57s ago
  Process: 963 ExecStart=/sbin/dhclient wlp2s0 (code=killed, signal=TERM)
 Main PID: 963 (code=killed, signal=TERM)

авг 26 09:18:49 me dhclient[963]: DHCPDISCOVER on wlp2s0 to 255.255.255.255 port 67 interval 14 (xid=0x8b6a592f)
авг 26 09:19:03 me dhclient[963]: DHCPDISCOVER on wlp2s0 to 255.255.255.255 port 67 interval 7 (xid=0x8b6a592f)
авг 26 09:19:10 me dhclient[963]: DHCPDISCOVER on wlp2s0 to 255.255.255.255 port 67 interval 7 (xid=0x8b6a592f)
авг 26 09:19:17 me dhclient[963]: DHCPDISCOVER on wlp2s0 to 255.255.255.255 port 67 interval 16 (xid=0x8b6a592f)
авг 26 09:19:33 me dhclient[963]: DHCPDISCOVER on wlp2s0 to 255.255.255.255 port 67 interval 16 (xid=0x8b6a592f)
авг 26 09:19:49 me dhclient[963]: DHCPDISCOVER on wlp2s0 to 255.255.255.255 port 67 interval 17 (xid=0x8b6a592f)
авг 26 09:19:49 me systemd[1]: wpa-post.service: Start operation timed out. Terminating.
авг 26 09:19:49 me systemd[1]: Failed to start Dhclient (wlp2s0).
авг 26 09:19:49 me systemd[1]: wpa-post.service: Unit entered failed state.
авг 26 09:19:49 me systemd[1]: wpa-post.service: Failed with result 'timeout'.


Как я понял, есть типы юнитов Oneshot - которые отрабатывают один раз, и Dbus - которые продолжают работать после запуска. Но не получается.

BusName=fi.epitest.hostap.WPASupplicant

- непонятно, просто это скопировано из интернета

Alias=dbus-fi.epitest.hostap.WPASupplicant.service

- просто скопировано

BusName=fi.epitest.hostap.wpapost

- по аналогии с wpa_supplicant сделал юнит для dhclient

Как правильно настроить unit wpa_supplicant.service и wpa-post.service с запуском dhclient?

★★

Чем писать юниты руками, лучше поставь netctl из арча. Он достаточно просто устроен.

intelfx ★★★★★ ()

решено с помощью oneshot

помогло https://unix.stackexchange.com/questions/173781/how-can-i-enable-wpa-supplica...

# cat wpa2.service
[Unit]
Description=WPA 2
Wants=network.target
After=sys-subsystem-net-devices-wlp2s0.device
Before=network.target
BindsTo=sys-subsystem-net-devices-wlp2s0.device

[Service]
Type=oneshot
RemainAfterExit=yes

ExecStart=/sbin/ifconfig wlp2s0 up
ExecStart=/sbin/wpa_supplicant -B -i wlp2s0 -c /etc/wpa_supplicant/wpa_supplicant.conf 
ExecStart=/sbin/dhclient wlp2s0 

[Install]
WantedBy=multi-user.target


# systemctl enable wpa2.service

# reboot

..интернет есть..

Осталось выяснить, как восстанавливать после сбоя по типу /lib/systemd/system/NetworkManager-wait-online.service

znavko ★★ ()
Ответ на: решено с помощью oneshot от znavko

Осталось выяснить, как восстанавливать после сбоя

сыстемд не нужен тебе, man wpa_cli делай про опции -B и -a file. В file на DISCONNECTED вешаешь wpa_cli -i $IFACE reconfigure и всё.

Stanson ★★★★★ ()
Ответ на: решено с помощью oneshot от znavko

ExecStart=/sbin/ifconfig wlp2s0 up

почемы не отдать systemd-networkd сам интерфейс? сразу решатся проблемы переподключений/обрывов связи и минус лишний dhclient в системе

bass ★★★★★ ()
Ответ на: комментарий от bass

ну и если интерфейс отдашь systemd-networkd, то решается не только проблема переподключений, но и отпадает смысл dbus и юнит ещё упрощается.

[Unit]
Description=WPA supplicant daemon (interface-specific version)
Requires=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device
Before=network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -i%I

[Install]
Alias=multi-user.target.wants/wpa_supplicant@%i.service

bass ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.