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"

ไฟล์คอนฟิกูเรชัน daemon ของฉันมีดังนี้:

$ 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.d( service hostapd start) และดูเหมือนว่าจะไม่มีอะไรเกิดขึ้น ... ดูที่โพสต์ในกระทู้นี้

คำตอบ:


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"

ค้นหาบรรทัดด้านบนและบอกการตั้งค่า defaul ที่หนึ่งของคุณ


11

นี่เป็นปัญหาสำหรับฉันด้วยและยังคงมีอยู่อย่างชัดเจน ฉันคงข้อผิดพลาดโดยการเอา hostapd จาก/etc/rc2.d/และ/etc/networking/if-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 และหยุดiscและhostapdและทำสิ่งที่post-upตอนนี้ทำ (ในลำดับที่)


@ lordvlad ถูกต้องมากขึ้นฉันพลาดการตั้งค่า DAEMON_CONF ซึ่งเป็นสาเหตุที่ทำให้ตัวเลือก -B ใช้งานได้สำหรับฉัน
Sir_Scofferoff

'ถูกต้อง' คือสิ่งที่ใช้งานได้และสิ่งนี้ใช้ได้กับ systemd โดยหลีกเลี่ยงปัญหาอื่น ๆ ที่คนอื่นไม่สามารถแก้ไขได้
John Mee

1
@Teoma ที่จริง @lordvlad นั้นไม่ถูกต้องหากคุณทำตามคำแนะนำ hostapd ทั่วไปและตั้ง DAEMON_CONF /etc/defaults/hostapdให้เป็น@Matt (ไม่ใช่ฉัน) แนะนำในคำตอบอื่น (แทนที่จะแฮ็กใส่ไว้/etc/init.d/hostapdอย่างที่ vlad แนะนำ) ที่กล่าวไว้คำตอบเฉพาะของคุณที่นี่ระบุถึงสภาพการแข่งขันที่มีอยู่แม้หลังจากที่ DAEMON_CONF ถูกตั้งค่าซึ่งเป็นข้อผิดพลาดมากกว่าในวิธีที่สคริปต์การเริ่มต้นของ hostapd ถูกนำไปใช้มากกว่าสิ่งใด ขอบคุณสำหรับสิ่งนั้น !!
แมตต์

1
นี่เป็นวิธีเดียวที่ฉันจะทำให้มันทำงานบน raspbian, rpi3 และนั่นด้วยประสบการณ์ 15 ปี unix Systemd hijacked start-stop-daemonและทำงานเส็งเคร็งเมื่อเริ่มต้น sysv daemon (ทั้ง udhcpd และ hostapd) ฉันไม่มีเงื่อนงำสิ่งที่อาจผิดเกิดขึ้นเท่าที่ systemd ดำเนินการไปแล้วมันเป็นงาน (และ daemon "ออก") ดังนั้นหากคุณมีการโพสต์ใช้งานได้
Melvyn

3

ฉันเพิ่งพบปัญหานี้ ตามค่าเริ่มต้นการติดตั้งบนเสียงฮิปปี้ raspian ของฉัน 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เป็น ok wlan0และไม่มีใครเอาการควบคุมของ

มีอีกการกำหนดค่าที่เป็นไปได้ที่คุณสามารถระบุpost-up/ pre-downตัวเลือกสำหรับbr0ใน/etc/network/interfaces(อินเทอร์เฟซของผู้ชาย) คุณสามารถเริ่ม / หยุดhostapdจากที่นั่น ฉันไม่ได้จัดการเพื่อให้มันใช้งานได้ แต่ดูเหมือนว่าจะเป็นโซลูชันที่สะอาดกว่ามาก


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 กำหนดไว้ ดังนั้นสคริปต์นี้จะออกจากที่เส้น 24 ถ้า DAEMON_CONF ถูกกำหนดไว้ในค่า/etc/init.d/hostapd(ซึ่งคุณได้สะกดผิดเป็น hostPAD ในบรรทัดแรกของคุณ) /etc/defaults/hostapdมิได้
แมตต์

0

บน Arch linux ที่ systemd ดูเหมือนว่า norm เหนือ 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ระบุแต่ละอันที่คุณกำลังเรียกใช้จริงและระบบใดที่เรียกใช้ ในกรณีของฉันอีกครั้งเส้นทางสุดท้ายคือสิ่งที่ฉันถูกเรียกเมื่อฉันเจาะ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

หวังว่าสิ่งนี้จะช่วยได้ไม่ใช่เฉพาะระบบของฉัน (Arch (Arm) Linux บน Raspberry Pi B) และมีคุณสมบัติเป็นคำตอบที่เหมาะสมตามกฎ UE


0

การเพิ่มสลีป 10 วินาทีในไฟล์ช่วย/etc/init.d/hostapdแก้ไขปัญหาให้ฉันได้

1) sudo nano /etc/init.d/hostapd 2) เพิ่มsleepใน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 "$?"
        ;;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.