• 嵌入式网页服务程序AppWeb


    我们使用开源的嵌入式网页服务程序AppWeb为landog和oabox项目提供webserver服务。下面是appWeb项目的链接:

    http://www.appwebserver.org/ :官方网站

    http://www.appwebserver.org/forum/index.php :帮助论坛

    我们选用最新的appweb-2.2.2版本下载地址如下:

    http://www.appwebserver.org/software/appweb-src-2.2.2-5.tar.gz

    在oabox项目需要php5和ssl支持,在编译AppWeb之前先要编译php5和matrixssl。

    关于appweb的配置见下面的页面:

    /AppWebConfig :配置appweb

    PHP5

    由于php5需要zlib库和libxml2库的支持,我们首先交叉编译zlib库。

    zlib

    下载 zlib-1.2.3.tar.gz 到~/webserver/src/目录,运行下面的命令:

    $ cd ~/webserver/
    $ tar xvzf src/zlib-1.2.3.tar.gz
    $ cd zlib-1.2.3/
    $ CC=armeb-linux-gcc ./configure --shared
    $ make
    $ cp -d libz.so* /Your/CrossCompile/Path/lib/ //将生成的动态库拷贝到交叉编译器的lib目录
    $ cp zlib.h /Your/CrossCompile/Path/include/ //将zlib的头文件拷贝到交叉编译器的include目录
    $ cp zconf.h /Your/CrossCompile/Path/include/

    libxml2

    下载 libxml2-2.6.28.tar.gz 到~/webserver/src/目录,运行下面的命令:

    $ cd ~/webserver/
    $ tar xvzf src/libxml2-2.6.28.tar.gz
    $ cd libxml2-2.6.28/
    $ ./configure --host=armeb-linux
    $ make

    编译完之后在 .libs/目录下面生成libxml2的动态库,将它们拷贝到交叉编译器的lib目录:

    $ cp -d .libs/libxml2.so* /Your/CrossCompile/Path/lib/

    php5

    下载 php-5.2.3.tar.bz2 包到~/webserver/src/目录,运行下面的命令:

    $ cd ~/webserver/
    $ tar jxvf src/php-5.2.3.tar.bz2
    $ cd php-5.2.3/
    $ export CC=armeb-linux-gcc
    $ export AR=armeb-linux-ar
    $ export CXX=armeb-linux-c++
    $ export RANLIB=armeb-linux-ranlib
    $ export STRIP=armeb-linux-strip
    $ export LD=armeb-linux-ld
    $ export NM=armeb-linux-nm

    由于PHP直接交叉编译时有问题,我们还要修改configure文件:

    $ vi configure
    将106003行:
    { echo "configure: error: Your system seems to lack POSIX threads." 1>&2; exit 1; }
    替换为:
    { echo "configure: error: Your system seems to lack POSIX threads." 1>&2; }#exit 1; }

    保存退出后执行下面的命令:

    $ ./configure --prefix=/home/lvl/install/php5.0/ --host=armeb-linux --target=armeb-linux --cache-file=config.cache --disable-debug --disable-rpath --enable-bcmath --enable-calendar --enable-embed=shared --enable-maintainer-zts --enable-force-cgi-redirect --enable-ftp --enable-inline-optimization --enable-magic-quotes --enable-memory-limit --enable-pic --enable-safe-mode --enable-sockets --enable-track-vars --sysconfdir=/home/lvl/install/php5.0/etc/appWeb --enable-mbstring=cn --enable-sqlite --without-pear --without-iconv --with-zlib --disable-ipv6

    由于交叉编译器的缺陷,configure时部分检测没有正确执行需要修改一些内容:

    修改main/php_config.h

    $ vi main/php_config.h
    在1810行:(也可能在其他地方)
    /* #undef HAVE_STDARG_PROTOTYPES */
    下面添加:
    #define HAVE_STDARG_PROTOTYPES 1

    修改Makefile

    $ vi Makefile
    将65行:
    EXTRA_LIBS = -lcrypt -lcrypt -lrt -lz -lm -lxml2 -lxml2 -lxml2 -lcrypt -lxml2 -lxml2 -lxml2 -lcrypt
    改为:
    EXTRA_LIBS = -lcrypt -lcrypt -lrt -lz -lm -lxml2 -lxml2 -lxml2 -lcrypt -lxml2 -lxml2 -lxml2 -lcrypt -lpthread -ldl

    修改完之后就可以进行编译了:

    $ make
    $ makeinstall

    php程序被安装在/home/lvl/install/php5.0/目录,其中libphp5.so在lib目录下面。

    MatrixSSL

    AppWeb 支持https访问,为了实现该功能我们需要ssl库。AppWeb支持OpenSSL和MatrixSSL,因为MatrixSSL体积小而且易于交叉 编译,所以我们选用MatrixSSL。首先下载 matrixssl-1-8-3-open.tar.gz 到~/webserver/src/目录,运行下面的命令:

    $ cd ~/webserver/
    $ tar xvzf src/matrixssl-1-8-3-open.tar.gz
    $ cd matrixssl-1-8-3-open/src/

    修改Makefile:

    $ vi Makefile
    将:
    CC = gcc
    STRIP = strip
    AR = ar
    RANLIB = ranlib
    改为:
    CC = armeb-linux-gcc
    STRIP = armeb-linux-strip
    AR = armeb-linux-ar
    RANLIB = armeb-linux-ranlib

    保存退出后运行:

    $ make

    AppWeb

    下载 appweb-src-2.2.2-5.tar.gz 到~/webserver/src/目录,运行下面的命令:

    • --enable-ranges --with-cgi=loadable --with-php5=builtin --with-php5-libs="php5 crypt resolv z" --with-php5-dir="/home/lvl/landog/web/php-5.2.3/" --with-php5-libpath=/home/lvl/landog/web/php-5. ...
    •  

    • --enable-ranges --with-cgi=loadable --with-php5=builtin
      --with-php5-libs="php5 crypt resolv z"
      --with-php5-dir="/home/lvl/landog/web/php-5.2.3/"
      --with-php5-libpath=/home/lvl/landog/web/php-5.2.3/libs/
      --with-php5-iflags="-I/home/lvl/landog/web/php-5.2.3
      -I/home/lvl/landog/web/php-5.2.3/main
      -I/home/lvl/landog/web/php-5.2.3/Zend
      -I/home/lvl/landog/web/php-5.2.3/TSRM"

      为了正确编译还需修改部分文件:

      $ vi appweb/Makefile
      修改77行:
      LIBPATH += $(BLD_TOP)/$(BLD_PHP5_DIR)
      为:
      LIBPATH += $(BLD_PHP5_DIR)/libs/

      保存退出后运行:

      $ make
      $ makeinstall
      Eaccelerator编译eaccelerator

      eaccelerator是用来加速PHP运行的程序,一般情况是通过动态模块的形式进行加载的。但是在交叉编译的模块不能正常加载,我们需要将eaccelerator编译进libphp.so里面。

      首先下载 eaccelerator-0.9.5.1.tar.bz2 到~/webserver/src/目录,运行下面的命令将eaccelerator解压到php-src/ext目录下面:

      $ cd ~/webserver/
      $ tar jxvf src/eaccelerator-0.9.5.1.tar.bz2
      $ mv eaccelerator-0.9.5.1/ eaccelerator
      $ mv eaccelerator/ php-5.2.3/ext/

      解压出来的eaccelerator目录中没有configure文件,我们需要用上面安装到/home/lvl/install/php5.0/bin/里面的phpize来生成configure文件:

      $ cd php-5.2.3/ext/eaccelerator/
      $ /home/lvl/install/php5.0/bin/phpize //用你自己编译安装的phpize文件

      我们需要重新生成php5的configure文件,使之包含eaccelerator选项:

      $ cd ~/webserver/php-5.2.3/
      $ rm configure
      $ ./buildconf --force //系统中必须有autoconf-2.13以上版本

      在配置选项中加入--enable-eaccelerator和--with-eaccelerator-shared-memory重新运行configure:

      $ export BLD_AR_FOR_HOST=armeb-linux-ar
      $ export BLD_CC_FOR_HOST=armeb-linux-gcc
      $ export BLD_LD_FOR_HOST=armeb-linux-ld
      $ export BLD_STRIP_FOR_HOST=armeb-linux-strip
      $ export BLD_AR_FOR_BUILD=ar
      $ export BLD_CC_FOR_BUILD=/usr/bin/cc
      $ export BLD_LD_FOR_BUILD=/usr/bin/ld
      $ export BLD_STRIP_FOR_BUILD=/usr/bin/strip
      $ ./configure --prefix=/home/lvl/install/php5.0/ --host=armeb-linux --target=armeb-linux --cache-file=config.cache --disable-debug --disable-rpath --enable-bcmath --enable-calendar --enable-embed=shared --enable-maintainer-zts --enable-force-cgi-redirect --enable-ftp --enable-inline-optimization --enable-magic-quotes --enable-memory-limit --enable-pic --enable-safe-mode --enable-sockets --enable-track-vars --sysconfdir=/home/lvl/install/php5.0/etc/appWeb --enable-mbstring=cn --enable-sqlite --without-pear --without-iconv --with-zlib --disable-ipv6 --enable-eaccelerator --with-eaccelerator-shared-memory

      配置之前还需按上面的方法修改configure文件,运行configure之后还要修改Makefile和main/php_config.h文件。另外,还要修改ext/eaccelerator/mm.c 文件:

      $ vi ext/eaccelerator/mm.c
      在第30行插入:
      #define MM_SEM_IPC 1
      #define MM_SHM_IPC 1

      保存退出后运行:

      $ make

      运 行完之后在libs目录下面生成libphp5.so文件。由于我们的appweb配置时采用了:--with-php5=builtin(用-- with-php5=loadable时找不到模块!)所以编译完libphp5.so后还需重新编译一遍appweb。

      配置eaccelerator

      重新编译appweb并make install后appweb会安装在编译appweb时指定的"--prefix"目录下(如:/mnt/appWeb/)。我们需要修改该目录下的php.ini来使eaccelerator生效:

      $ cd /mnt/appWeb
      $ sudovi php.ini (需要根用户权限)
      在该文件末尾加入如下内容:
      eaccelerator.shm_size="16"
      eaccelerator.cache_dir="/tmp/eaccelerator"
      eaccelerator.enable="1"
      eaccelerator.optimizer="1"
      eaccelerator.check_mtime="0"
      eaccelerator.debug="0"
      eaccelerator.filter=""
      eaccelerator.shm_max="0"
      eaccelerator.shm_ttl="300"
      eaccelerator.shm_prune_period="300"
      eaccelerator.shm_only="0"
      eaccelerator.compress="1"
      eaccelerator.compress_level="9"

      将主机上的/mnt/appWeb/目录拷贝到开发板上的/mnt/目录下(拷贝之前先用armeb-linux-strip工具去除appweb程序以及lib/modules/目录动态库中的调试信息和符号信息)。 嵌入式网页服务程序AppWeb - wdqfirst - Gambler

      创建eaccelerator目录

      在开发板的启动脚本里加入:

      mkdir /tmp/eaccelerator
      chmod 0777 /tmp/eaccelerator

      该目录作为保存缓存数据的目录。

      确认eaccelerator运行

      在正常情况下检验eaccelerator是否工作的方法是用浏览器打开含有以下代码的php页面:

      如果eaccelerator正常运行的话在phpinfo页面会显示:

      Zend Engine v2.1.0 Copyright (c) 1998-2006 Zend Technologies
      with eAccelerator v0.9.5-beta2 Copyright (c) 2004-2006 eAccelerator by eAccelerator
  • 相关阅读:
    Flask_自定义参数类型(自定义转换器)
    数据结构与算法(排序)
    数据结构与算法(查找)
    Vue_fetch和axios数据请求
    Vue_修饰符
    Vue_列表过滤应用
    Vue_生命周期函数
    Vue_watch()方法,检测数据的改变
    Django_redis_缓存
    防火墙相关
  • 原文地址:https://www.cnblogs.com/fall-in-love/p/3998189.html
Copyright © 2020-2023  润新知