goahead移植 - 图文

更新时间:2023-12-04 08:35:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Goahead 移植

goahead移植

1.下载源码包

goahead-3.4.12-src.tgz https://embedthis.com/goahead/download.html 2.修改Makefile

1)一级目录下的Makefile 第17行将default改为static

2)projects目录中makefile, goahead-linux-static.mk文件 1>PROFILE 变量和CC变量修改为如下

注意CC变量的?要改为: 2>将test.o改为my.o 去掉test目标 删除第75行

给clean增加

生成my.o

目标文件中增加my.o

注释掉536行goahead-test3>关闭goahead对ssl支持 第22,24行

1

Goahead 移植

第33行

注释掉145行3.make

Err:提示找不到mipsel-linux-gcc

解决办法:$vim ~/.bashrc 在最后一行加入

PATH=/opt/crosstool/mipsel-linux/bin/:$PATH 保存退出 执行$. ~/.bashrc 重新make

Err: bash: /opt/crosstool/mipsel-linux/bin/mipsel-linux-gcc: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 解决办法:

这是因为我们的执行机是64位,而mipsel-linux是32位 $yum install glibc.i686 解决问题 $make

Err:No rule to make target `myweb/my.c 解决办法:

这是因为我们忘了创建我们自己的my.c, $mkdir myweb $touch myweb/my.c $make

成功make, 可执行文件放置位置为goahead-3.4.12/build/linux-x64-static/bin 4.测试

为了测试方便,我们暂且在PC上进行测试,将goahead-linux-static.mk中CC值改回gcc,重新make;make install; 启动goahead

goahead –v –home /etc/goahead /var/www/goahead/

浏览器输入127.0.0.1出现Congratulations! The server is up and running.

2

Goahead 移植

至此我们的goahead搭建成功。 1)我们测一下goahead的action和jst

Jst回调函数原型为:typedef int (*WebsJstProc)(int jid, Webs *wp, int argc, char **argv)

Action回调函数原型为:1.typedef void(* WebsAction)(Webs *wp); 2.typedef void (*WebsAction)(webs_t wp, char *path, char *query)

网上有第2这种原型,我也亲测过可以使用,当然第1种原型也可以使用,我至今也很纳闷,她是怎么做到函数原型不一样的回调的。但是我还是倾向于使用第1种原型,这个原型是手册里面给的,第2种原型是网上查到的,可能是旧版本使用的原型

注册Jst 函数的方法:websDefineJst(“mytestJst”, mytestJst)

注册Action函数的方法:websDefineJst(“mytestAction”, mytestAction) 写一个简单的myweb/my.c

一个简单的网页test.jst 放入/var/www/goahead/目录

3

Goahead 移植

将注册函数加入goahead中src/gohead.c

重新编译启动goahead,用浏览器打开127.0.0.1/test.jst就可看到效果,在输入框输入123,终端就会打印出来123

我们将test.jst重命名为test.html test.asp 此时将不会识别jst,究其原因在于route.txt配置文件,我们打开/etc/goahead/route.txt 修改36行

此时,重启goahead,重新测试test.asp,test.html 可以发现可以解析jst了 2)我们测一下goahead的用户验证

我们以/为节点,意思就是所有请求都要求进行验证,使用digest验证方式 在goahead-3.4.12/src/utils/gopass.c文件中99行我们可以看到我们验证密码由username,realm,password组成

在goahead-3.4.12/projects/goahead-linux-static-me.h中

我们可以自己设置realm,我们设置为gok.com,这个在输入密码提示框中也会有显示的

接下来我们开始进行route.txt修改

接下来生成auth.txt

$cd goahead-3.4.12/build/linux-x64-static/bin

4

Goahead 移植

$./gopass –c –p 123456 auth.txt gok.com gok manage 我们的用户名为gok 密码为123456

$ vim auth.txt 修改auth.txt

$mv auth.txt ../../../src/ $cd ../../../

至此我们所要做的工作全部完成,接下来就是重新编译安装启动测试了

我们可以看到我们的reaml被显示了出来,输入用户名gok, 密码123456 我们发现错误,检查后发现我们的role的name和abilities重名了,我们将

role的name改为manager user的roles=manage也要相应修改

OK,重新实验,我们发现ok啦

这个时候我们再实验一下我们的jst和action均时效,主要原因是我们在这里的路由规则,有兴趣的可以修改路由规则

5

Goahead 移植

并且在web存放目录下建立admin目录,在其下面增加任何页面,当浏览器访问该admin目录下的文件时才会出现验证,访问其他网页并不出现验证,尤其是我们的jst和action神奇的可以使用啦

这样在我使用的时候就出现了一个问题,我想让访问/进行验证,怎么办?假如我们访问/时访问的默认网页为/home.asp,我的解决办法是在admin目录下建立一个index.html,

</p><p>index.html </p><p>

并且在我们的my.c里进行设置将访问/时的默认网页修改到/admin/index.html 在my_register_function函数里面的最开始出增加websSetIndex(\

这样,我们就可以轻松实现访问默认网页也需要验证的问题,并且jst,action不影响工作,其实goahead加密方式还有form方式和basic方式,我也都试过了,basic和digest方式对我们基本一样,form方式和普通form的区别在于action=/goform/*** 和action=/action/login,login函数goahead都已经注册好了的

接下来我们就开始验证一下goahead的文件上传,这个我是在goahead的test里面抠出来的,接下来,我们就具体来看一下

其实,goahead已经将上传文件的函数已经注册完毕,我们其实不需要做什么,实验一下,我们在web目录下建立upload.html

6

Goahead 移植

这个文件是拷贝的goahead-4.3.12/test/web/upload/upload.html并且将action改为我们自己的函数

在my.c里面增加mytestUpload函数并注册,该函数是拷贝gohaed-4.3.12/test/test.c的uploadTest函数并注释掉一部分,注释掉那一部分只是对文件重命名,我们是想验证一下其实这个函数是没有做什么东西的,goahead已经完成了上传文件的全部工作。

我们在桌面上创建一个文件hh,内容为111

7

Goahead 移植

接下来就是验证部分了,ok,开始验证

输入用户名,密码登录,点击browse,选择桌面上创建的文件,send发送,好了,我们出错了,

错误提示是Bad request,ok,再看goahead打印出来的信息,Cannot open document for : /action/mytestUpload 好吧,我知道错哪里了,我们修改完route.txt,验证的uri=/的,所以出错,我们注释掉,重新来 出错,我们再看一下,

我也不知道什么问题了,不完全的边界,完全看不懂嘛,不要重启goahead再试一次,好吧,终于打印出了有用的信息

分析一下,打开src/upload.c文件,我们可以看到打印出错信息的地方

我们在这句话前面打印出wp->uploadTmp,我们发现打印出来的结果是tmp/tmp-0.tmp,这样我们可能找到问题了,没有tmp目录,也就创建不了文件了,我们在/etc/goahead/下创建一个tmp目录重新试一下,

OK,这一次什么都没打出来,表示成功,我们在/etc/goahead/tmp目录下查看是否有上传的文件,oo,竟然没有,怎么回事,同样打开upload.c,搜索一下unlink,运气不错,有一个freeUploadFile文件在文件上传完毕会调用,我们注释掉unlink调用,重新试,果然我们在/etc/goahead/tmp/发现tmp-0.tmp文件,查看一下,内容就是111,没错的。我们试着上传一个大文件提示request too large

8

Goahead 移植

我们再来查一下在哪里限制的文件大小,grep Too . –nr 可以看到http.c中有相似的东西,

可以看到是通过变量ME_GOAHEAD_LIMIT_POST来限制的,我们来修改一下该值

我们看到ME_GOAHEAD_LIMIT_POST变量值才16384,有一个

ME_GOAHEAD_LIMIT_UPLOAD为200m猜想一下这个应该是限制上传文件大小的最大限制了,不管是PUT还是POST方法,我们将POST的值也改为该值,这样我们就可以使用了,赶快试一下,果然成功.

在 PC上试了这么多,在开发板上试着怎么样,我们将CC值改为mipsel-linux-gcc,编译好后,将rout.txt auth.txt goahead 一并移动到开发板上,试一下,因为我之前试过了,所以就不多说 注:

启动goahead

goahead [options] [documents] [[ip][:port] …]

9

Goahead 移植

options:

--background 以后台方式运行 --home directory 指定进程运行目录 --route routefile 指定routefile路径 --version 显示版本号

Documents:

指定html文件路径

[ip] [:port] 指定绑定的ip地址和端口号

比如只是想绑定端口号8080可以

goahead -v --home /etc/goahead /var/www/goahead 8080 这样就好了

10

本文来源:https://www.bwwdw.com/article/hhwt.html

Top