GoAhead:
官网下载源码:https://www.embedthis.com/goahead/download.html
官方文档:https://www.embedthis.com/goahead/doc/
系统平台:Ubuntu 18.04 :https://www.ubuntu.com/download/desktop/thank-you?country=CN&version=18.04.1&architecture=amd64
编译环境:arm-linux-gcc-4.4.3
百度网盘链接:https://pan.baidu.com/s/1GsnQn5dCAVrTnoV6y2d0Rg
提取码:kizq
下载后解压并安装:
# tar zxvf goahead-4.0.2-src.tgz
# cd goahead-4.0.2
在GoAhead编译的时候会选择默认断口进行监听,默认HTTP端口80、SSL端口443。当然你也可以通过GoAhead命令覆盖这些选项。GoAhead命令用法如下:
# goahead [options] [documents] [IP]:[PORT]
--home directory |
指定服务器根目录的起始目录,该目录包含GoAhead配置文件 |
--verbose |
--log stderr:2命令的简写,也可以使用-v替代 |
编译:通过make编译是一种最简单、最快捷的构建方式,但不可configure。如果需要默认构建,或者需要将GoAhead与现有的基于make的构建系统集成,请使用make。你通过make编译不想使用原有的配置,那你可以通过给make提供配置选项来解决,否则只能使用MakeMe来编译。这些选项将会覆盖./project/NAME-OS-default.mk makefile和./projects/NAME-OS-debug-me.h file。例如:禁用SQLite
# make ME_COM_SQLITE=0
如果要为系统自定义或配置软件,或者需要针对其他操作系统或体系结构进行交叉编译,请使用MakeMe构建。
我们今天使用make编译。
### x64编译
# ARCH=x64 OS=Linux CC=gcc make
# sudo make install
编译完会在build文件下生成linux-x64-default文件夹
然后启动goahead服务器
# goahead -v --home /etc/goahead/ /var/www/goahead/
启动服务器时出现如下错误:
goahead: 0: Unable to read key self.key
goahead: 0: Cannot initialize server. Exiting.
此时执行:
# cd src
# cp self.crt self.key /etc/goahead/
将self.crt和self.key文件拷贝到/etc/goahead目录。
然后运行GoAhead 服务器:
# goahead -v --home /etc/goahead/ /var/www/goahead/
在浏览器输入192.168.10.51:80
### arm交叉编译
ARCH=arm OS=Linux CC=arm-linux-gcc make
交叉编译出现如下问题:
error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
projects/goahead-linux-default.mk:369:recipe for target 'build/linux-arm-default/obj/mbedtls.o' failed
make[1]: *** [build/linux-arm-default/obj/mbedtls.o] Error 1
Makefile:45: recipe for target 'all' failed
make: *** [all] Error 2
此时是缺少两个库,一个是lib32stdc++6,一个是libstdc++6
于是执行以下命令:
# sudo apt-get install lib32stdc++6 libstdc++6
继续执行编译命令:
# ARCH=arm OS=Linux CC=arm-linux-gcc make
# sudo make install
编译完会在build文件下生成linux-arm-default文件夹
我们将linux-arm-default文件夹重命名为goahead打包移植到开发板根目录下/,在/etc文件夹下新建goahead文件夹
将/goahead/bin/文件下的auto.txt、route.txt、self.crt、self.key复制到/etc/goahead/文件夹下,然后执行命令(*:8080是指定goahead服务器开启端口):
# /goahead/bin/goahead -v --home /etc/goahead/ /www/goahead/ *:8080
出现如下问题:
goahead: 0: Cannot get host address for host FriendlyARM: errno 0
goahead: 0: Cannot initialize server. Exiting.
此时是说获取不到主机ip,需要我们在/etc/hosts里面添加一条ip和域名对应的记录
# 127.0.0.1 localhost FriendlyARM
FriendlyARM是你的主机名,可以通过hostname得到
# hostname
# FriendlyARM
添加完之后执行ping命令,看是不是可以ping通
# ping localhost
# ping:bad address ‘localhost’
出现这种情况,是因为我们开发板上缺少nsswitch.conf(服务搜索顺序)文件,由它规定通过哪些途径以及按照什么顺序以及通过这些途径来查找特定类型的信息,在这里指定的是/etc/hosts文件夹。我们从主机上拷贝/etc/nsswitch.conf文件到我们开发板(通过串口或者U盘拷贝),此时在
# ping localhost
# ping FriendlyARM
然后运行执行
# /goahead/bin/goahead -v --home /etc/goahead/ /www/goahead/ *:8080
此时在PC上的浏览器上输入192.168.10.183:8080
问题顺利解决。