hostapd non si avvia tramite "service" - ma si avvia direttamente


19

Ho problemi hostapda iniziare come servizio. Non riesce quando provo ad avviarlo:

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

Da quello che ho capito, questo utilizza la configurazione in /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"

Il mio file di configurazione del demone è il seguente:

$ 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

Nonostante il servizio non si avvii, sono in grado di avviarlo direttamente da solo senza errori:

$ 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.

Se riscontri problemi durante l' hostapdesecuzione tramite init.d( service hostapd start) e non sembra accadere nulla ... fai riferimento a questo post del forum .

Risposte:


14

Tutto quello che devi fare è scrivere questo comando:

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

ti elencherà tutti gli errori, puoi quindi correggerli in un hostapd.conffile

sudo nano /etc/hostapd/hostapd.conf

14

devi configurare:

sudo nano /etc/default/hostapd

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

Trova la riga sopra e dì al defaul config dove si trova il tuo.


11

Questo è stato un problema anche per me ed ovviamente esiste ancora. Ho corretto gli errori rimuovendo hostapd da /etc/rc2.d/ e /etc/networking/if-pre-up.d/

/ etc / network / interfaces controlla ora 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

Un riavvio ha confermato che visualizza l'interfaccia; e le stazioni si collegano bene. In precedenza ho dovuto inserire e interrompere isc e hostapd e fare ciò che fa il post-up (in questo ordine)


@lordvlad è più corretto, avevo perso l'impostazione DAEMON_CONF, motivo per cui l'opzione -B ha funzionato per me.
Sir_Scofferoff,

'Corretto' è ciò che funziona, e questo funziona su systemd, evitando ordinatamente un mucchio di altri problemi che gli altri non risolvono.
John Mee,

1
@Teoma, in realtà @lordvlad è errato se segui le tipiche istruzioni hostapd e imposti DAEMON_CONF /etc/defaults/hostapdcome @Matt (non io) suggerisce in un'altra risposta (piuttosto che inserirla in modo scaltro /etc/init.d/hostapdcome suggerisce Vlad ). Detto questo, la tua risposta particolare qui affronta una condizione di competizione che esiste anche dopo l'impostazione di DAEMON_CONF, che è più un bug nel modo in cui gli script di avvio di hostapd sono implementati che altro. Quindi grazie!!
matt

1
Questo è l'unico modo per farlo funzionare su raspbian, rpi3. E quello con> 15 anni di esperienza unix. Systemd ha dirottato start-stop-daemone fa un lavoro schifoso all'avvio di un demone sysv (sia udhcpd che hostapd). Non ho idea di cosa potrebbe essere sbagliato, perché per quanto riguarda systemd ha fatto il suo lavoro (e il demone "è uscito"). Quindi, se hai post-up, usalo.
Melvyn,

3

Ho appena incontrato questo problema. Per impostazione predefinita, installa sul mio raspian wheezy, hostapd viene avviato come S01 nei servizi. Questo fa iniziare prima ifplugdche configura eth0 e wlan0. La ragione di ciò è che S01h[ostapd]< S01i[fplugd]poiché gli script sono ordinati in ordine alfabetico per l'esecuzione.

Penso che il bridge abbia difficoltà a configurarsi prima di ogni altra cosa. Spostarlo su S05 non ha aiutato neanche, quindi l'ho spostato su rc.local, che viene eseguito "un po '" dopo tutto il resto. Ho anche rimosso tutti i collegamenti da rc [2-5] .d a hostapd. Penso che S05 sia ancora troppo presto perché dhclient termini correttamente. Non sono sicuro che ciò sia conforme alle migliori pratiche. Ciò che sembra accadere ora è che ifplugd non riesce a br0crescere, ma eth0è più collaborativo. Non sono sicuro del motivo per cui wpa_supplicant fallisca qui, probabilmente perché wlan0è già stato promesso br0. Deve essere disabilitato comunque. Più tardi, hostapd prova a br0sollevare di nuovo e ci riesce poiché eth0va bene e nessuno ne ha preso il controllo wlan0.

C'è un'altra possibile configurazione in cui è possibile specificare un'opzione post-up/ pre-downper br0in /etc/network/interfaces(interfacce man). Puoi iniziare / fermarti hostapdda lì. Tuttavia, non sono riuscito a farlo funzionare, ma sembra una soluzione molto più pulita.


1

Penso che il problema sia con le tue citazioni alla riga 11 di /etc/default/hostapd:

”/etc/hostapd/hostapd.conf”

Che dovrebbe leggere:

"/etc/hostapd/hostapd.conf"

Il tuo post mi ha davvero aiutato a risolvere il mio problema, quindi grazie!


1

È necessario impostare DAEMON_CONFin /etc/init.d/hostpad.

È davvero abbastanza ovvio se guardi /etc/init.d/hostapd, l'impostazione predefinita è simile a questa:

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

perché all'inizio DAEMON_CONFè vuoto, lo script esce alla riga 24. Peccato che non ci siano messaggi di errore o altro. Modifica della riga 17 in

 DAEMON_CONF=/etc/hostapd/hostapd.conf

e inserendo la configurazione nel file specificato ha funzionato per me.


1
Se si sono seguite le istruzioni di installazione tipiche di hostapd, questa risposta è errata e può confondere. La riga 23 estrae le variabili definite nel file a cui fa riferimento DAEMON_DEFS, che a sua volta in genere ha DAEMON_CONF definito in esso. Pertanto, questo script uscirà alla riga 24 solo se DAEMON_CONF non è definito in nessuno dei due /etc/init.d/hostapd(che è stato scritto erroneamente come hostPAD nella prima riga) né /etc/defaults/hostapd.
matt

0

Su Arch Linux, dove systemd sembra la norma su rc / init.d ho avuto un problema simile. Questa risposta differisce dalle altre nei seguenti modi:

  1. Il file di configurazione non risiede /etc/init.dma da qualche parte sotto /etc/systemd/system/. In particolare /etc/systemd/system/multi-user.target.wants/hostapd, nel mio caso, in cui la ExecStartlinea punta al file di configurazione utilizzato.

  2. È importante sottolineare che questo file di configurazione punta anche al binario utilizzato, vale a dire /usr/bin/hostapd.

La correzione è quindi verificare quale file hostapd si sta effettivamente eseguendo. in esecuzione whereisti dirà quali versioni sono disponibili e dove si trovano. Così

whereis hostapd

produce qualcosa di simile

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

Testare ciascuno chiamando sistematicamente PATH/hostapd /etc/hostapd/hostapd.confciascuno PATHidentifica quale si sta effettivamente invocando e quale un systemd sta invocando. Anche in questo caso, l'ultimo percorso è quello che stavo invocando quando ho inserito sudo hostapd /etc/hostapd/hostapd.conf. Il secondo è ciò che systemd stava invocando.

Il trucco è quello di copiare il binario da /usr/bin/locala /usr/bino per punto systemd al hostapd di lavoro. Credo che la prima sia l'opzione "più sicura".

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

Anche in questo caso il binario sotto è /usr/bin/localvenuto dalla compilazione del driver Realtek dalla fonte al di fuori del loro sito Web, come descritto qui . Complimenti a Realtek per il supporto di Linux.

Spero che questo aiuti, non è specifico per il mio sistema (Arch (Arm) Linux su un Raspberry Pi B) e si qualifica come una risposta adatta secondo le regole dell'UE.


0

L'aggiunta di 10 secondi di sospensione nel file ha /etc/init.d/hostapdrisolto il problema per me.

1) sudo nano /etc/init.d/hostapd 2) Aggiungere la sleepin start)sezione come di seguito

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 "$?"
        ;;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.