Hostapd nie uruchomi się za pośrednictwem „usługi”, ale uruchomi się bezpośrednio


19

Mam problem hostapdz uruchomieniem usługi. Nie udaje się, gdy próbuję go uruchomić:

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

Z tego, co rozumiem, używa konfiguracji w /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"

Mój plik konfiguracyjny demona jest następujący:

$ 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

Pomimo, że usługa nie uruchamia się, jestem w stanie uruchomić ją samodzielnie bez błędu:

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

Jeśli masz problemy hostapdz uruchomieniem przez init.d( service hostapd start) i wydaje się, że nic się nie dzieje ... zapoznaj się z tym postem na forum .

Odpowiedzi:


14

Wszystko, co musisz zrobić, to napisać to polecenie:

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

wyświetli listę wszystkich błędów, możesz je następnie poprawić w hostapd.confpliku

sudo nano /etc/hostapd/hostapd.conf

14

musisz skonfigurować:

sudo nano /etc/default/hostapd

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

Znajdź wiersz powyżej i powiedz domyślnej konfiguracji, gdzie jest twój.


11

To był również problem dla mnie i oczywiście nadal istnieje. Naprawiłem błędy, usuwając hostapd z /etc/rc2.d/ i /etc/networking/if-pre-up.d/

/ etc / network / interfaces kontroluje hostapd teraz ..

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

Ponowne uruchomienie potwierdziło, że wyświetla interfejs; i stacje łączą się dobrze. Wcześniej musiałem ssh in i zatrzymać isc i hostapd i zrobić to, co teraz robi post-up (w tej kolejności)


@ Lordord jest bardziej poprawny, brakowało mi ustawienia DAEMON_CONF, dlatego opcja -B działała dla mnie.
Sir_Scofferoff

„Prawidłowe” działa, a to działa na systemd, starannie omijając wiele innych problemów, których inni nie rozwiązują.
John Mee,

1
@Teoma, właściwie @lordvlad jest niepoprawny, jeśli postępujesz zgodnie z typowymi instrukcjami hostapd i ustawisz DAEMON_CONF /etc/defaults/hostapdjako, jak @Matt (nie ja) sugeruje w innej odpowiedzi (zamiast hakującego wstawiania go, /etc/init.d/hostapdjak sugeruje vlad). To powiedziawszy, twoja szczególna odpowiedź tutaj odnosi się do warunków wyścigu, które istnieją nawet po ustawieniu DAEMON_CONF, co jest większym błędem w sposobie implementacji skryptów startowych hostapd niż cokolwiek innego. Więc dziękuję za to!!
mat

1
To jedyny sposób, w jaki mogłem zmusić go do pracy na raspbian, rpi3. I to dzięki> 15-letniemu doświadczeniu w Uniksie. Systemd przechwycił start-stop-daemoni wykonuje kiepską pracę podczas uruchamiania demona sysv (zarówno udhcpd, jak i hostapd). Nie mam pojęcia, co może być nie tak, ponieważ z systemd wykonało swoją robotę (a demon „wyszedł”). Więc jeśli masz post-up, użyj go.
Melvyn

3

Właśnie natrafiłem na ten problem. Domyślnie instaluj na moim raspian wheezy, hostapd jest uruchamiany jako S01 w usługach. Powoduje to uruchomienie, przed ifplugdktórym konfiguruje eth0 i wlan0. Powodem tego jest to, że S01h[ostapd]< S01i[fplugd]ponieważ skrypty są sortowane w kolejności alfabetycznej w celu wykonania.

Myślę, że konfiguracja mostu jest trudna, zanim wszystko inne. Przeniesienie go do S05 również nie pomogło, więc przeniosłem go do rc.local, który jest wykonywany „chwilę” po wszystkim innym. Usunąłem również wszystkie linki z rc [2-5] .d do hostapd. Myślę, że S05 jest wciąż za wcześnie, aby dhclient mógł poprawnie zakończyć. Nie jestem pewien, czy jest to zgodne z najlepszymi praktykami. Wydaje się, że teraz zdarza się, że ifplugd nie wychowuje br0się, ale eth0jest bardziej współpracujący. Nie jestem pewien, dlaczego wpa_supplicant zawodzi tutaj, prawdopodobnie dlatego, że wlan0jest już obiecany br0. W każdym razie należy go wyłączyć. Później hostapd próbuje br0ponownie uruchomić program i kończy się powodzeniem, ponieważ eth0jest w porządku i nikt nie przejął kontroli wlan0.

Istnieje inna możliwa konfiguracja, w której można określić opcję post-up/ pre-downdla br0in /etc/network/interfaces(interfejsy man). Możesz zacząć / zatrzymać hostapdod tego momentu. Nie udało mi się jednak uruchomić go, ale wygląda to na znacznie czystsze rozwiązanie.


1

Myślę, że problem tkwi w twoich cytatach w linii 11 /etc/default/hostapd:

”/etc/hostapd/hostapd.conf”

Który powinien brzmieć:

"/etc/hostapd/hostapd.conf"

Twój post pomógł mi rozwiązać mój problem, więc dziękuję!


1

Trzeba ustawić DAEMON_CONFw /etc/init.d/hostpad.

To naprawdę dość oczywiste, jeśli spojrzysz /etc/init.d/hostapd, domyślnie wygląda to tak:

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

ponieważ DAEMON_CONFna początek jest pusty, skrypt kończy działanie w linii 24. Szkoda, że ​​nie ma komunikatu o błędzie ani nic. Zmiana linii 17 na

 DAEMON_CONF=/etc/hostapd/hostapd.conf

i umieszczenie konfiguracji w określonym pliku działało dla mnie.


1
Jeśli postępujesz zgodnie z typowymi instrukcjami instalacji dla hostapd, ta odpowiedź jest niepoprawna i może się mylić. Linia 23 pobiera zmienne zdefiniowane w pliku, do którego odwołuje się DAEMON_DEFS, który z kolei zazwyczaj ma zdefiniowaną DAEMON_CONF. Tak więc skrypt ten zakończy działanie tylko w linii 24, jeśli DAEMON_CONF nie jest zdefiniowany w ani /etc/init.d/hostapd(który błędnie napisałeś jako hostPAD w pierwszym wierszu) ani /etc/defaults/hostapd.
mat

0

Na Arch Linux, gdzie systemd wydaje się być normą w stosunku do rc / init.d miałem podobny problem. Ta odpowiedź różni się od pozostałych w następujący sposób:

  1. Plik konfiguracyjny nie znajduje się w, /etc/init.dale gdzieś poniżej /etc/systemd/system/. W szczególności /etc/systemd/system/multi-user.target.wants/hostapdw moim przypadku, gdzie ExecStartlinia wskazuje na użyty plik konfiguracyjny.

  2. Co ważne, ten plik konfiguracyjny wskazuje również na używany plik binarny, a mianowicie /usr/bin/hostapd.

Poprawka polega na sprawdzeniu, który plik hostapd faktycznie wykonuje. Uruchomienie whereispowie ci, jakie wersje są dostępne i gdzie się znajdują. Więc

whereis hostapd

produkuje coś podobnego

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

Testowanie każdego z nich poprzez systematyczne wywoływanie PATH/hostapd /etc/hostapd/hostapd.confkażdego PATHidentyfikuje, który z nich faktycznie wywołujesz, a który systemd wywołuje. Ponownie w moim przypadku przywołałem ostatnią ścieżkę sudo hostapd /etc/hostapd/hostapd.conf. Drugi to to, co przywołał systemd.

Sztuką jest, aby skopiować z pliku binarnego /usr/bin/localdo /usr/binlub z punktem Systemd do hostapd roboczej. Uważam, że ta pierwsza opcja jest „bezpieczniejsza”.

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

Ponownie w moim przypadku plik binarny /usr/bin/localpochodzi z kompilacji sterownika Realtek ze źródła poza ich witryną, jak opisano tutaj . Gratulacje dla Realtek za obsługę Linuksa.

Mam nadzieję, że to pomaga, nie jest specyficzne dla mojego systemu (Arch (Arm) Linux na Raspberry Pi B) i kwalifikuje się jako odpowiednia odpowiedź zgodnie z regułami UE.


0

Dodanie 10 sekund snu w pliku /etc/init.d/hostapdrozwiązało problem.

1), sudo nano /etc/init.d/hostapd 2) dodanie sleepw start)przekroju jak niżej

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 "$?"
        ;;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.