分类 wifidog分析 下的文章

wifidog自动升级固件

一些组织机构运行wifidog时,会在不同的位置有许多接入点。当需要升级固件时,最痛苦的就是在所有的热点逐个升级。最好是热点能够在获取新版本固件时自动升级。
以下内容描述了如何配置固件才能让它自动升级。

前提条件

  • 以下内容假定了如何编辑固件的自定义镜像
  • 接入一个网站当做是自定义存储库。这个库将包含自定义固件图像和自定义包版本的目录。

编辑
假定BUILD_ROOT是openwrt镜像生成器的根目录
将自定义文件添加到镜像,在BUILE_ROOT创建一个新的名为files的目录。

  • 创建一个包含镜像编码的文件

    cd files
    mkdir etc
    cd etc
    touch custom_compil

现在编辑custom_compil文件包含自定义镜像版本
   
   1

  • 添加配置文件来保存自定义升级脚本的配置选项。从BUILD_ROOT/files目录

    mkdir etc/config
    cd etc/config
    touch customupgrade.conf

用以下信息编辑customupgrade.conf

# Config file for custom configuration options for the auto-upgrade script
# All options are defined with default values in the script

# custom_file : default /etc/custom_compil
# Specifies the file on the router that contains the number of the custom compilation of this image
# 
custom_file /etc/custom_compil

# temp_file : default /tmp/latest
# The temporary file to which to download the 'latest' file from the server
# Default value should do usually, unless the tmp directory is somewhere else
# temp_file /tmp/latest

# server 
# MANDATORY
# The web server root where the 'latest' file, and 'package-list' files are kept
server http://wifidog.testserver/files/

# filename : default latest
# The name of the file on the server containing the information on the latest image
#
filename latest

# packagelist : default packages-list
# The name of the file on the server containing the information on the package 
# versions that should be installed on the server
packagelist packages-list

# temp_package: default /tmp/packages-list
# The temporary file to which will be downloaded the packages list file from the server
# Default value should do usually
# temp_package /tmp/packages-list
  • 添加脚本来检测镜像和程序包的更新。从BUILD_ROOT/files目录

    mkdir usr
    mkdir usr/bin
    cd usr/bin
    touch customupgrade
    a+x customupgrade

用以下脚本编辑customupgrade

#!/bin/sh
#
# This script verifies if a new firmware is available on the server
# It supposes that a file on the machine exists in /etc/custom_compil.txt containing
# the custom firmware's version.  On the server, a file named "latest" contains the compil
# number of the latest firmware

CUSTOM_FILE=/etc/custom_compil.txt
TEMP_FILE=/tmp/latest
SERVER=http://wifidog.testserver/files/
FILENAME=latest
PACKAGELIST=packages-list
TEMP_PACKAGE=/tmp/packages-list

CONF_FILE=/etc/config/customupgrade.conf

# Overwrite the default values with the config if necessary
if egrep -v '^#.*' "$CONF_FILE" | grep 'custom_file'; then
        CUSTOM_FILE=$(egrep -v '^#.*' "$CONF_FILE" | grep 'custom_file' | awk '{print $2}')
fi
if egrep -v '^#.*' "$CONF_FILE" | grep 'temp_file'; then
        TEMP_FILE=$(egrep -v '^#.*' "$CONF_FILE" | grep 'temp_file' | awk '{print $2}')
fi
if egrep -v '^#.*' "$CONF_FILE" | grep 'server'; then
        SERVER=$(egrep -v '^#.*' "$CONF_FILE" | grep 'server' | awk '{print $2}')
fi
if egrep -v '^#.*' "$CONF_FILE" | grep 'filename'; then
        FILENAME=$(egrep -v '^#.*' "$CONF_FILE" | grep 'filename' | awk '{print $2}')
fi
if egrep -v '^#.*' "$CONF_FILE" | grep 'packagelist'; then
        PACKAGELIST=$(egrep -v '^#.*' "$CONF_FILE" | grep 'packagelist' | awk '{print $2}')
fi
if egrep -v '^#.*' "$CONF_FILE" | grep 'temp_package'; then
        TEMP_PACKAGE=$(egrep -v '^#.*' "$CONF_FILE" | grep 'temp_package' | awk '{print $2}')
fi

# Verify is a new firmware upgrade is available on the server
if [ -f $CUSTOM_FILE ]; then
        ACTUAL=$(cat $CUSTOM_FILE)

        if [ -f $TEMP_FILE ]; then
                rm $TEMP_FILE
        fi
        wget -O $TEMP_FILE $SERVER$FILENAME

        if [ -f $TEMP_FILE ]; then
                cat $TEMP_FILE | grep 'version' | cut -d: -f2 | awk '{print $1}'
                LATEST=$(cat $TEMP_FILE | grep 'version' | cut -d: -f2 | awk '{print $1}')
                LATESTIMG=$(cat $TEMP_FILE | grep 'file' | cut -d: -f2 | awk '{print $1}')
                MD5SUM=$(cat $TEMP_FILE | grep 'md5sum' | cut -d: -f2 | awk '{print $1}')
        fi

        if [ $LATEST -gt $ACTUAL ]; then
                wget -O "/tmp/"$LATESTIMG $SERVER$LATESTIMG
                ACTUALMD5=$(md5sum "/tmp/"$LATESTIMG | awk '{print $1}')
                if [ $MD5SUM = $ACTUALMD5 ]; then
                        sysupgrade "/tmp/"$LATESTIMG
                fi
        fi
fi

# If we get here in the script, then no new firmware was installed, we check for new packages

# First, verify if the custom package repository is in the opkg.conf file
#
# If you do not plan to have one such directory on your server, you may comment out
# the following lines
#
REPO=$(grep "$SERVER" /etc/opkg.conf)
if [ -z "$REPO" ]; then
        echo "src custom_pack "$SERVER"packages" >> /etc/opkg.conf
fi

# update the package repository to get all the latest versions
opkg update

# Download the packages-list file from the custom server.  
# This file is such that for each line contains the package name and version to be installed 
# example: 
#
# wifidog 1.1.5-1
# ntp 2.1-1
#
# Only those packages will be installed if the version is different from the one currently installed
if [ -f $TEMP_PACKAGE ]; then
        echo "removing file "$TEMP_PACKAGE
        rm $TEMP_PACKAGE
fi

wget -O $TEMP_PACKAGE $SERVER$PACKAGELIST

if [ -f $TEMP_PACKAGE ]; then
        cat $TEMP_PACKAGE | while read line; do
                PACKAGE=$(echo $line | cut -f1,2 | awk '{print $1}')
                VERSION=$(echo $line | cut -f1,2 | awk '{print $2}')
                if opkg status $PACKAGE | grep 'Version' | grep $VERSION > /dev/null; then
                        echo "package "$PACKAGES" "$VERSION" is already installed"
                else
                        echo "installing package "$PACKAGE
                        opkg install $PACKAGE
                fi              
        done
fi 
  • 现在我们需要添加一个定时任务来运行这个脚本。每天或根据所需的作何时候运行。从BUILD_ROOT/files目录

    cd etc
    mkdir crontabs
    cd crontabs
    touch root

编辑root文件包含所需的定时任务

# /etc/crontab/root:  Cron job to be run on custom openwrt firmware

# m h   dom mon dow command
*   2   *   *   *   /usr/bin/customupgrade > /tmp/custom.log

本文章由 http://www.wifidog.pro/2015/03/13/wifidog%E8%87%AA%E5%8A%A8%E5%8D%87%E7%BA%A7%E5%9B%BA%E4%BB%B6.html 整理编辑,转载请注明出处

wifidog配置网关注意事项

用户超时
跟其它解决方法不同,Wifidog无需一直打开认证页面用脚本来保持连接。网关只会在数秒中没有获得任何来自客户端的流量时,才判断为超时断开连接。确保客户端没有因为闲置而超时,网关将会在每个时间间隔来重新ping每个客户端来检测流量。遗憾的是,有些所谓防火墙设置很讨厌,防ping,造成检测时完全丢包被误判为离线。这也是经常超时的原因。

Wifidog网关网站界面
网关只有最小化的网站界面,为用户提供了很少的信息。这样就不会与门户相混淆,门户必须由认证服务器进行管理。以下信息可以直接从网关得到:

http://gateway_ip:gateway_port/wifidog/

  • 网关版本
  • 节点ID

http://gateway_ip:gateway_port/wifidog/status

  • 网关版本
  • 网关正常运行时间
  • 网关是否具有网络连通性
  • 是否与认证服务器相连接
  • 获得此服务的用户编码
  • 已连接的用户编码
  • 用户列表
      IP
      MAC
      Token
      下载字节
      上传字节
  • 目前使用的认证服务器

http://gateway_ip:gateway_port/wifidog/about

OLSR和Wifidog网关
问题:如果你选择只安装一个Wifidog网关服务器,那么所有用户的MAC地址都将被最近的OLSR路由器所“掩饰”。
解决办法:
在OLSR节点安装Wifidog。允许HTTP在OLSR节点间流动,可以通过用Cron在所有节点启用以下脚本来实现。

ipkg install ip
#!/bin/sh
#
# Script to bypass HTTP interception for traffic forwarded by OLSR
# bms 9-Aug-2005
# Licensed under GPL
#

rm -f /tmp/get_neighbors.awk
cat > /tmp/get_neighbors.awk <<__HERE1__
BEGIN {
 while("route -n"|getline) {
    if (/^[0-9]/) {
        if (0 < \$5) {
           if (\$3 == "255.255.255.255 <http://255.255.255.255>") {
             printf "%s\n", \$1;
                 }
               }
             }
           }
        }
__HERE1__

iptables -t nat -D WiFiDog_Unknown -j OlsrNeighbors 2>&1 >/dev/null
iptables -t nat -F OlsrNeighbors 2>&1 >/dev/null
iptables -t nat -X OlsrNeighbors 2>&1 >/dev/null
iptables -t nat -N OlsrNeighbors

neighbors=$(awk -f /tmp/get_neighbors.awk)

for _neighbor in ${neighbors} ; do

   _mac=$(grep "^${_neighbor}" /proc/net/arp | awk '{print $4}')
   echo ${_mac}
   iptables -t nat -A OlsrNeighbors -m mac --mac-source ${_mac} \
          -p tcp --dport 80 -j ACCEPT

done

iptables -t nat -I WiFiDog_Unknown -j OlsrNeighbors

本文章由 http://www.wifidog.pro/2015/03/13/wifidog%E9%85%8D%E7%BD%AE%E7%BD%91%E5%85%B3%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.html整理编辑,转载请注明出处

Wifidog认证服务器常见错误提示

execSql() : An error occured while executing the following SQL query :
SELECT node_id, last_heartbeat_ip from nodes WHERE last_heartbeat_ip='1.2.3.4' ORDER BY last_heartbeat_timestamp DESC

Error message :
ERROR: relation "nodes" does not exist

execSqlUniqueRes() : An error occured while executing the following SQL query :
SELECT network_id FROM networks WHERE is_default_network=TRUE ORDER BY creation_date LIMIT 1

Error message :
ERROR: relation "networks" does not exist
: Network::getDefaultNetwork: Fatal error: Unable to find the default network! in /var/www/wifidog-auth/wifidog/classes/Network.php on line 101

Postgresql的数据库连接正常和wifidog已存在的数据库,但是最初的SQL结构和数据丢失。


: Unable to connect to database on localhost in /usr/local/apache2/htdocs/wifidog-auth/wifidog/classes/AbstractDbPostgres.php on line 71
  • Wifidog未在Postgresql创建的数据库
  • 与Postgresql数据库连接失败:错误配置或许可
    Install.php可以帮你解决这一问题并提供更多相关信息。

Le systeme tente de mettre a jour le schema de la base de donnees.
Preparing SQL statements to update schema to version 34

execSqlUpdate(): SQL Query :

BEGIN;


UPDATE schema_info SET value='34' WHERE tag='schema_version';
ALTER TABLE node_stakeholders DROP CONSTRAINT "$1";
ALTER TABLE node_stakeholders ADD CONSTRAINT nodes_fkey FOREIGN KEY (node_id) REFERENCES nodes(node_id) ON UPDATE CASCADE ON DELETE CASCADE;
COMMIT;
VACUUM ANALYZE;

0 rows affected by the SQL query.
Elapsed time for query execution : 0,847244 second(s)

execSqlUpdate(): 0 rows affected by the SQL query.

你的数据库结构没有更新,wifidog门户检测到这个问题,将结构更新到最新版本。如果进行此操作,刷新浏览器时这个提示就会消失。如果再看到这个提示并且又没有更新源代码,结构更新操作可能会失败。


Warning in /classes/Locale.php : Unable to setlocale() to en, return value: , current locale: 
LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=C;LC_MESSAGES=C;
LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C
Warning in /classes/Locale.php : Unable to setlocale() to en, return value: , current locale: 
LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=C;LC_MESSAGES=C;
LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C
Warning in /classes/Locale.php : Unable to setlocale() to en, return value: , current locale: 
LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=C;LC_MESSAGES=C;
LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C
Warning in /classes/Locale.php : Unable to setlocale() to en, return value: , current locale: 
LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=C;LC_MESSAGES=C;
LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C

这个“locale”取决于服务器的配置。在大多数Unix/Linux系统中,可能会用locale –a来列出所有服务器可得语言环境。许多系统对每个国家都有特定的语言环境,所以你需要更改config.php或者local.config.php。例如:将fr改为fr_CA或fr_FR,将en改为en_US或en_GB。


HTML pages contain strange characters ....

修改你的Apache服务器配置文件,并将“AddDefaultCharset on”更改为“AddDefaultCharset utf-8”。


运行install.php脚本的错误提示
关闭错误日志,你可以看到空白页面。
如果你用以下命令打开错误日志:

here's how to turn on php error message display so you can debug problem.

In php.ini (in FC5 most likely located at /etc/php.ini) enable the

error_reporting = E_ALL 
display_errors = On

This will display any error encounter in you browser window. 

错误提示可能是这样的:

Postgresql database connection :
Warning: pg_connect() [function.pg-connect]: Unable to connect to PostgreSQL server: FATAL: Ident authentication failed for user
"wifidog" in /var/www/html/wifidog/install.php on line 1062

这个问题与PostgreSQL安全有关。比较理想的情况是研究一下PGSQL调用的安全系统,但这也会解决这个问题。需要注意的是是否也可能会在不同系统中产生安全问题,这取决于数据库的配置。
编辑pg_hba.conf文件

#TYPE     DATABASE          USER            IP-ADDRESS             SUBNET MASK               METHOD
host      wifidog           wifidog         192.168.0.11           255.255.255.0             md5

当IPF 地址与设备的IP地址吻合时,连接到PGSQL服务器。
重启PGSQL服务器进行新设置。

本文章由 http://www.wifidog.pro/2015/03/12/Wifidog%E8%AE%A4%E8%AF%81%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%B8%B8%E8%A7%81%E9%94%99%E8%AF%AF%E6%8F%90%E7%A4%BA.html 整理编辑,转载请注明出处

WIFIDOG认证服务器内容管理器指南

内容管理器是WIFIDOG认证服务器最权威也最误解的组成部分。此文档不是内容管理器手册,而是共通使用案例的列单,和作为内容管理器如何去解决。

内容显示脚本
第一部分是简单脚本列表,回答问题“我想这样操作,我该如何操作?”

交替显示图像
1.连接想要显示图像的BannerAddGroup。
2.在“ContentGroup访问控制”将ContentGroup设置成不可再用。
3.将图像做为ContentGroup元素进行添加

在若干(并非全部)热点显示单块内容
这是非常普遍的情况:在所有热点以特定的顺序呈现特定的内容,或者是特定类型的所有热点(咖啡厅,酒吧,图书馆等等)
1.创建一个连接到全网络的可再用内容组
2.将内容作为内容组的第一元素进行添加
3.在“Only display at node(s)”文件添加所需热点

只向用户显示一次单块(或若干块)内容
这些对notices有帮助:
1.连接ContentGroup,添加notice。
2.在“ContentGroup access control”,将ContentGroup设置成不可再用。
3.将notice作为ContentGroup的元素进行添加
4.在“ContentGroup configuration”/“Can content be shown more than once to the same user?”:选择“Content can only be shown once。”

做一次“寻宝”或“串酒吧”
这是给用户提示来寻找下一个位置(和下一个线索)的活动。
1.连接一个新的内容组全网络
2.确保ContentGroup是可再用的
3.将提示作为ContentGroup元素进行添加
4.为每一个将要显示的提示添加热点

处理多个路径
如果你想有多条用户路径或者不全得到相同的提示,操作如下:
1.在“ContentGroup configuration”/“When does the content rotate?”选择“Content rotates each time you change node”。在这种情况下,这意味着内容将不会为单独一个用户循环,这正是我们想要的。
2.确保“In what order should the content displayed?”选择的是“Randomly”。

与另外一个网页或CMS整合
如果能够输入http GET参数,SmartyTemplate内容类型允许经过认证服务器变量到远程服务器。以下例子指出了两个方法。

IRC chat示例使用简单的HTML连接来获取变量
此代码示例允许使用IRC网络接口来直接连接到#wifidog通道。你通常需要手动选择用户名和通道。以下代码会创建一个新连接,此连接将直接将你引导到#wifidog通道,如果你连接到热点,你会告诉其用户你是从哪里连接的。

{if $userName}
<a target='_new' href='http://www.linux-quebec.org/cgi-bin/cgiirc/irc.cgi?interface=nonjs&Nickname={$userName|remove_accents|urlencode}{if $realNodeName}{'|'|urlencode}{$realNodeName|remove_accents|urlencode}{/if}&Realname={$userName|remove_accents|urlencode}{if $realNodeName}{'@'|urlencode}{$realNodeName|remove_accents|urlencode}{/if}&Server={'irc.freenode.net'|urlencode}&Channel={'#wifidog'|urlencode}'>
Chat with wifidog developers</a>

ShoutBox示例使用JavaScript取得变量
此代码将发送用户对另外一个网页的请求,并在新窗口打开。它已经尝试整合ISF的网络。

  • 创建ShoutBox
  • 在“Shout button ‘onclick=’value”中添加SmartyTemplate。
  • 将以下代码粘贴到SmartyTemplate,不用换行

    indow.open('http://www.cwide.org/scripts/cwide_addMsgAndRedirect.php?hotspotID={$realNodeId}&hotspotName={$realNodeName|urlencode}&message='+escape(document.getElementById('shout_text').value)+'&ipAddress={$realNodeLastHeartbeatIP}&username={$userNam|urlencode}');、

本文章由http://www.wifidog.pro/2015/03/12/wifidog%E8%AE%A4%E8%AF%81%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%86%85%E5%AE%B9%E7%AE%A1%E7%90%86%E5%99%A8%E6%8C%87%E5%8D%97.html整理编辑,转载请注明出处