hostapd不会通过“服务”启动,而是直接启动


19

我无法hostapd开始即服务。当我尝试启动它时失败:

$ sudo service hostapd start
[FAIL] Starting advanced IEEE 802.11 management: hostapd failed!

据我了解,这将使用以下配置/etc/default/hostapd

$ cat /etc/default/hostapd 
# Defaults for hostapd initscript
#
# See /usr/share/doc/hostapd/README.Debian for information about alternative
# methods of managing hostapd.
#
# Uncomment and set DAEMON_CONF to the absolute path of a hostapd configuration
# file and hostapd will be started during system boot. An example configuration
# file can be found at /usr/share/doc/hostapd/examples/hostapd.conf.gz
#
#DAEMON_CONF=""
DAEMON_CONF=”/etc/hostapd/hostapd.conf”

# Additional daemon options to be appended to hostapd command:-
#   -d   show more debug messages (-dd for even more)
#   -K   include key data in debug messages
#   -t   include timestamps in some debug messages
#
# Note that -B (daemon mode) and -P (pidfile) options are automatically
# configured by the init.d script and must not be added to DAEMON_OPTS.
#
DAEMON_OPTS="-d"

我的守护程序配置文件如下:

$ cat /etc/hostapd/hostapd.conf
interface=wlan0
bridge=br0
driver=rtl871xdrv
country_code=USA
ctrl_interface=wlan0
ctrl_interface_group=0
ssid=KITT
hw_mode=g
channel=1
wpa=3
wpa_passphrase=georgeisyourfriend
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
beacon_int=100
auth_algs=3
macaddr_acl=0
wmm_enabled=1
eap_reauth_period=360000000

尽管服务无法启动,但我仍然可以直接自行启动它,而不会出现错误:

$ sudo hostapd -d /etc/hostapd/hostapd.conf
random: Trying to read entropy from /dev/random
Configuration file: /etc/hostapd/hostapd.conf
ctrl_interface_group=0
drv->ifindex=3
Configure bridge br0 for EAPOL traffic.
BSS count 1, BSSID mask 00:00:00:00:00:00 (0 bits)
Completing interface initialization
Mode: IEEE 802.11g  Channel: 1  Frequency: 2412 MHz
RATE[0] rate=10 flags=0x1
RATE[1] rate=20 flags=0x1
RATE[2] rate=55 flags=0x1
RATE[3] rate=110 flags=0x1
RATE[4] rate=60 flags=0x0
RATE[5] rate=90 flags=0x0
RATE[6] rate=120 flags=0x0
RATE[7] rate=180 flags=0x0
RATE[8] rate=240 flags=0x0
RATE[9] rate=360 flags=0x0
RATE[10] rate=480 flags=0x0
RATE[11] rate=540 flags=0x0
Flushing old station entries
Deauthenticate all stations
+rtl871x_sta_deauth_ops, ff:ff:ff:ff:ff:ff is deauth, reason=2
rtl871x_set_key_ops
rtl871x_set_key_ops
rtl871x_set_key_ops
rtl871x_set_key_ops
Using interface wlan0 with hwaddr 80:1f:02:d3:cb:b8 and ssid 'KITT'
Deriving WPA PSK based on passphrase
SSID - hexdump_ascii(len=4):
     4b 49 54 54                                       KITT
PSK (ASCII passphrase) - hexdump_ascii(len=18): [REMOVED]
PSK (from passphrase) - hexdump(len=32): [REMOVED]
rtl871x_set_wps_assoc_resp_ie
rtl871x_set_wps_beacon_ie
rtl871x_set_wps_probe_resp_ie
urandom: Got 20/20 bytes from /dev/urandom
GMK - hexdump(len=32): [REMOVED]
Key Counter - hexdump(len=32): [REMOVED]
WPA: group state machine entering state GTK_INIT (VLAN-ID 0)
GTK - hexdump(len=32): [REMOVED]
WPA: group state machine entering state SETKEYSDONE (VLAN-ID 0)
rtl871x_set_key_ops
rtl871x_set_beacon_ops
rtl871x_set_hidden_ssid ignore_broadcast_ssid:0, KITT,4
rtl871x_set_acl
wlan0: Setup of interface done.

如果您在hostapd通过init.dservice hostapd start)来运行时遇到问题,则似乎什么也没发生...请参阅此论坛帖子

Answers:


14

您要做的就是编写以下命令:

sudo hostapd -d /etc/hostapd/hostapd.conf

它会列出所有错误,然后您可以在hostapd.conf文件中更正它们

sudo nano /etc/hostapd/hostapd.conf

14

您必须配置:

sudo nano /etc/default/hostapd

DAEMON_CONF="/etc/hostapd/hostapd.conf"

找到上面的行,并告诉默认配置您的位置在哪里。


11

这对我来说也是一个问题,而且显然仍然存在。我通过从/etc/rc2.d//etc/networking/if-pre-up.d/中删除hostapd来修复错误。

/ etc / network / interfaces现在控制hostapd。

iface wlan0 inet static
         post-up /usr/sbin/hostapd -B /etc/hostapd/hostapd.conf
         post-up service isc-dhcp-server restart
         address 192.168.10.1
         netmask 255.255.255.0

重新启动后确认它会打开界面;站连接良好。以前,我不得不ssh并停止ischostapd,然后执行后期操作(按该顺序)


@lordvlad更正确,我错过了DAEMON_CONF设置,这就是-B选项对我有用的原因。
Sir_Scofferoff '16

“正确”才是有效的方法,这个方法适用于systemd,巧妙地避开了其他人无法解决的其他问题。
约翰·米

1
@Teoma,实际上,如果遵循典型的hostapd指令并将DAEMON_CONF设置/etc/defaults/hostapd为@Matt(不是我)建议的另一个答案(而不是像vlad /etc/init.d/hostapd建议那样随意地放入),则@lordvlad是不正确的。就是说,您的特定答案是解决即使设置了DAEMON_CONF之后仍然存在的争用条件的问题,它比任何东西都更像是hostapd启动脚本的实现方式中的一个错误。非常感谢你的帮忙!!
马特

1
这是我可以在raspbian rpi3上运行的唯一方法。拥有超过15年的Unix经验。Systemd被劫持start-stop-daemon,并且在启动sysv守护程序(udhcpd和hostapd)时做得很糟糕。我不知道可能出什么问题,因为就systemd而言,它确实起作用了(并且守护程序“退出”了)。因此,如果您有张贴,请使用它。
Melvyn

3

我只是遇到了这个问题。默认情况下,在我的瑞风上安装hostapd在服务中启动为S01。这使它在ifplugd配置eth0和wlan0 之前开始。这样做的原因是S01h[ostapd]<,S01i[fplugd]因为脚本是按字母顺序排序以便执行的。

我认为,在进行所有其他操作之前,很难对桥进行配置。将其移至S05也无济于事,因此我将其移至rc.local,该命令在所有其他命令之后“执行一会儿”。我还删除了从rc [2-5] .d到的所有链接hostapd。我认为S05对于dhclient正确完成仍为时过早。我不确定这是否是最佳做法。现在似乎发生的事情是ifplugd无法启动br0,但是eth0更加协作。我不确定wpa_supplicant为什么在这里失败,可能是因为wlan0已经答应了br0。无论如何都需要禁用它。后来,hostapd尝试重新br0建立并成功,因为eth0还可以,没有人控制了wlan0

还有另一种可能的配置,您可以为in (手动接口)指定一个post-up/ pre-down选项。您可以从那里开始/停止。但是,我没有设法使其正常工作,但这看起来是一种更清洁的解决方案。br0/etc/network/interfaceshostapd


1

我认为问题出在您第11行的报价/etc/default/hostapd

”/etc/hostapd/hostapd.conf”

其中应显示为:

"/etc/hostapd/hostapd.conf"

您的帖子实际上帮助我解决了我的问题,非常感谢!


1

您需要DAEMON_CONF输入/etc/init.d/hostpad

如果您查看/etc/init.d/hostapd,这是非常明显的,默认值如下所示:

...
14 PATH=/sbin:/bin:/usr/sbin:/usr/bin
15 DAEMON_SBIN=/usr/sbin/hostapd
16 DAEMON_DEFS=/etc/default/hostapd
17 DAEMON_CONF=
18 NAME=hostapd
19 DESC="advanced IEEE 802.11 management"
20 PIDFILE=/var/run/hostapd.pid
21
22 [ -x "$DAEMON_SBIN" ] || exit 0
23 [ -s "$DAEMON_DEFS" ] && . /etc/default/hostapd
24 [ -n "$DAEMON_CONF" ] || exit 0
...

因为DAEMON_CONF开始时是空的,所以脚本在第24行退出。太糟糕了,没有错误消息或任何其他信息。将第17行更改为

 DAEMON_CONF=/etc/hostapd/hostapd.conf

并将配置放入指定的文件对我有用。


1
如果已按照hostapd的典型安装说明进行操作,则此答案不正确并且可能会引起混淆。第23行提取由DAEMON_DEFS引用的文件中定义的变量,该文件通常又在其中定义了DAEMON_CONF。因此,如果既未在DAEMON_CONF中也未定义/etc/init.d/hostapdDAEMON_CONF(在第一行中将其拼写为hostPAD),则该脚本仅在第24行退出/etc/defaults/hostapd
马特

0

在Arch Linux上,systemd似乎是rc / init.d的规范,我遇到了类似的问题。该答案在以下方面与其他答案有所不同:

  1. 配置文件不位于,/etc/init.d而是位于/etc/systemd/system/。具体来说/etc/systemd/system/multi-user.target.wants/hostapd,在我的情况下,该ExecStart行指向所使用的配置文件。

  2. 重要的是,此配置文件还指向使用的二进制文件,即/usr/bin/hostapd

解决方法是检查您实际执行的hostapd文件。运行whereis将告诉您可用的版本以及它们的位置。所以

whereis hostapd

产生类似

/sbin/hostapd /usr/bin/hostapd /usr/local/bin/hostapd

通过系统调用每一个测试PATH/hostapd /etc/hostapd/hostapd.conf每个PATH识别哪一个你实际上调用和一个systemd被调用。同样,在我的情况下,最后一条路径是我打孔时调用的路径sudo hostapd /etc/hostapd/hostapd.conf。第二个是systemd正在调用的内容。

诀窍是二进制从复制/usr/bin/local/usr/bin或systemd到工作hostapd点。我相信前者是“更安全”的选择。

sudo mv /usr/bin/hostapd /usr/bin hostapd.bkp     # delete later as necessary
sudo cp /usr/local/bin/hostapd /usr/bin

再次以我为例,二进制文件/usr/bin/local来自此处所述的从其网站的源代码编译Realtek驱动程序。对于Realtek支持Linux来说做得很好。

希望这对我的系统(Raspberry Pi B上的Arch(Arm)Linux)不特定,并且根据UE规则有资格作为合适的答案。


0

在文件中添加10秒钟的睡眠/etc/init.d/hostapd对我来说解决了这个问题。

1)sudo nano /etc/init.d/hostapd 2)如下添加sleepin start)部分

case "$1" in
  start)
        log_daemon_msg "Starting $DESC" "$NAME"
        sleep 10
        start-stop-daemon --start --oknodo --quiet --exec "$DAEMON_SBIN" \
                --pidfile "$PIDFILE" -- $DAEMON_OPTS >/dev/null
        log_end_msg "$?"
        ;;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.