web-dev-qa-db-ja.com

hostapdは「サービス」経由で起動しません-直接起動します

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.
19
gnychis

あなたは設定する必要があります:

Sudo nano /etc/default/hostapd

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

上の行を見つけて、デフォルトの構成をどこにあるか伝えてください。

14
Matt

あなたがしなければならないすべてはこのコマンドを書くことです:

Sudo hostapd -d /etc/hostapd/hostapd.conf

すべてのエラーが一覧表示され、hostapd.confファイルで修正できます

Sudo nano /etc/hostapd/hostapd.conf
14
Salah laaroussi

これは私にとっても問題であり、明らかに存在しています。 / etc/rc2.d /および/ etc/networking/if-からhostapdを削除してエラーを修正しましたpre-up.d /

/ 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を実行して何をしなければなりませんでしたpost-upが(この順序で)実行されるようになりました

11
Sir_Scofferoff

私はこの問題に遭遇しました。私のラスピアンwheezyにデフォルトでインストールすると、hostapdはサービスでS01として起動されます。これにより、eth0とwlan0を構成するifplugdの前に開始されます。これは、スクリプトが実行のためにアルファベット順にソートされるため、S01h[ostapd] <S01i[fplugd]が原因です。

ブリッジは他のすべての前に設定されるのに苦労すると思います。それをS05に移動しても効果がなかったので、代わりにrc.localに移動しました。また、rc [2-5] .dからhostapdへのすべてのリンクを削除しました。 S05はまだdhclientが正しく完了するにはまだ早すぎると思います。これがベストプラクティスに従っているかどうかはわかりません。 ifplugdはbr0の起動に失敗しますが、eth0の方が協力的です。ここでwpa_supplicantが失敗する理由はわかりません。おそらくwlan0br0にすでに約束されているためです。とにかく無効にする必要があります。その後、hostapdはbr0を再び起動しようとしますが、eth0は問題なく、誰もwlan0の制御を取得していないため、成功します。

post-up(manインターフェイス)のpre-downbr0//etc/network/interfacesオプションを指定できる別の構成が考えられます。そこからhostapdを開始/停止できます。しかし、私はそれをうまく機能させることができませんでしたが、これはかなりすっきりしたソリューションのように見えます。

3
Eric

問題は/etc/default/hostapdの11行目の引用にあると思います:

”/etc/hostapd/hostapd.conf”

どちらを読むべきですか:

"/etc/hostapd/hostapd.conf"

あなたの投稿は実際に私の問題を解決するのに役立ったので、ありがとう!

2
Bart Joosten

ファイル/etc/init.d/hostapdに10秒のスリープを追加すると、問題が解決しました。

1)Sudo nano /etc/init.d/hostapd 2)start)セクションにsleepを以下のように追加します

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 "$?"
        ;;
1
junaid

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
lordvlad

Systemdがrc/init.dよりも標準的なように見えるArch Linuxでは、同様の問題がありました。この回答は、次の点で他の回答と異なります。

  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ごとにPATH/hostapd /etc/hostapd/hostapd.confを体系的に呼び出してそれぞれをテストすると、実際に呼び出しているものと、systemdが呼び出しているものが識別されます。この場合も、最後のパスはSudo hostapd /etc/hostapd/hostapd.confをパンチインしたときに呼び出していたパスです。 2つ目は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ドライバーをソースからコンパイルし、 website の説明に従って here としてコンパイルしたものです。 LinuxをサポートするRealtekによくできました。

これが役立つことを願っていますが、私のシステム(Arch(Arm)Linux on Raspberry Pi B)に固有のものではなく、UEのルールに従って適切な回答とみなされます。

0
Carel