如何使hostapd在启动时运行?


8

我在新安装的SD卡上运行Raspbian Wheezy:

pi@raspberrypi ~ $ uname -a
Linux raspberrypi 3.18.11+ #781 PREEMPT Tue Apr 21 18:02:18 BST 2015 armv6l GNU/Linux

我想将Raspberry Pi设置为Wifi接入点,因此我按照了本教程中的说明进行操作。

在进入“整理...”部分之前,一切都很好。它说,为避免每次启动pi时都必须启动hostapd和dhcp,我应该运行以下命令:

sudo update-rc.d hostapd enable 
sudo update-rc.d isc-dhcp-server enable

运行它们时,我得到以下信息:

pi@raspberrypi ~ $ sudo update-rc.d hostapd enable
update-rc.d: using dependency based boot sequencing
update-rc.d: error: no runlevel symlinks to modify, aborting!
pi@raspberrypi ~ $ sudo update-rc.d isc-dhcp-server enable
update-rc.d: using dependency based boot sequencing
pi@raspberrypi ~ $

因此,第二条命令(用于isc-dhcp-server)成功,但是第一条命令(用于hostapd)却没有成功。我不知道它在说什么,也不知道下一步该怎么做。

我严格按照上述网站上的说明进行操作,包括他从源代码构建hostapd的说明:

wget https://github.com/jenssegers/RTL8188-hostapd/archive/v1.1.tar.gz
tar -zxvf v1.1.tar.gz
cd RTL8188-hostapd-1.1/hostapd
sudo make
sudo make install

(因此,我想知道这就是为什么isc-dhcp-server成功,而hostapd失败的原因;因为我从apt安装了isc-dhcp-server,而从源安装了hostapd。)

我搜索错误消息no runlevel symlinks to modify, aborting!并找到此页面。不过,它似乎是专门针对蓝牙的,我不确定如何将其应用于hostapd的情况。我从该页面收集的主要内容是“如果手动删除了rc?.d中的符号链接,则必须手动重新创建它们”和“出现问题的原因是,您在那里做的工作不够充分”。了解应该做什么。”

好吧,我绝对没有手动删除任何符号链接。尽管运行级别的深奥细节绝对是我无法理解的,但除了本教程告诉我的事情之外,我什么都没有搞乱。

关于如何解决此问题有任何想法吗?

Answers:


12

请先尝试:

sudo update-rc.d hostapd defaults

这确实与您已经调用的内容没有什么不同,只是使用了一个defaults参数而不是enable/ disable。然后,我相信enable/ disable命令应该可以按预期工作。

man update-rc.d

使用defaults选项运行时,update-rc.d使用init.d中的运行级别和相关性信息,使名为/etc/rcrunlevel.d/[SK]NNname的链接指向脚本/etc/init.d/name。脚本LSB注释标头。

因此,这应该在各个/etc/rc#.d/目录中创建丢失的符号链接,而您在其中遇到了“ no runlevel symlinks to modify”错误。


您可以向OP解释update-rc.d脚本的作用吗?许多人会犹豫不决地尝试他们不知道的新命令,尤其是在使用root调用时sudo
Phil B.

感谢您的提及enable,除了,我还需要运行它defaults
sebastian

0

首先,为hostapd编写一个初始化脚本。例如,您可以创建文件/etc/init.d/hostapd并将以下内容放在此处。

#!/bin/sh

### BEGIN INIT INFO
# Provides:          hostapd
# Required-Start:
# Required-Stop:
# Should-Start:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Hostapd Service
# Description:       Intended to start hostapd on system startup.
### END INIT INFO

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

case "$1" in
    start)
        /usr/sbin/hostapd -B
        ;;
    *)
        echo "Usage: $NAME {start}" >&2
        exit 3
        ;;
esac

现在sudo update-rc.d hostapd defaults,然后运行sudo update-rc.d hostapd enable。它应该hostapd在启动系统时启动(对于运行级别2、3、4和5)。您也可以使用service hostapd startstart hostapd


创建的文件不应被调用,/etc/init.d/hostapd.conf而仅仅是/etc/init.d/hostapd因为它不是配置文件。
Christian Beer '11

@ChristianBeer同意!更新了答案。
Ashish Bista
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.