环境:
openwrt18.06 linux4.14.123;MT7688, lighttpd1.4.54
具体步骤如下:
1. 更新及安装feeds:
./scrips/feeds update -a
...........
./scrips/feeds install -a
2. 由于我当前feeds更新的lighttpd是1.4.48版本的,而我要移植的是lighttpd1.4.54,为了从零开始移植搭建环境,所以选择了手动下载编译的方式,为了防止和openwrt自带的lighttpd冲突,需要先删除package/feeds/package目录下的lighttpd文件!注意先保存该目录下的主makefile文件,以后用的到。
3. 在openwrt根目录下的package目录下建立lighttpd1.4.54文件夹,在lighttpd1.4.54文件夹下再建立个空Makefile文件,和src文件夹,将下载的lighttpd1.4.54源文件全部拷贝到src文件夹下,然后修改之前保存的makefile到我们刚才新建的Makefile文件
# # Copyright (C) 2006-2015 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk include $(INCLUDE_DIR)/package.mk PKG_NAME:=lighttpd PKG_VERSION:=1.4.54 PKG_RELEASE:=1.4.54 PKG_SOURCE:= PKG_SOURCE_URL:= PKG_MD5SUM:= PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) #PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz #PKG_SOURCE_URL:=https://download.lighttpd.net/lighttpd/releases-1.4.x #PKG_HASH:=0f8ad5aac7529d7b948b9d7e8cd0b4a9e177309d85d6bf6516e28e6e40d74f36 PKG_LICENSE:=BSD-3c PKG_LICENSE_FILES:=COPYING PKG_FIXUP:=autoreconf PKG_INSTALL:=1 REBUILD_MODULES=authn_gssapi authn_ldap authn_mysql cml magnet mysql_vhost trigger_b4_dl webdav PKG_CONFIG_DEPENDS:=CONFIG_LIGHTTPD_SSL $(patsubst %,CONFIG_PACKAGE_lighttpd-mod-%,$(REBUILD_MODULES)) include $(INCLUDE_DIR)/package.mk define Package/lighttpd/Default SECTION:=Application CATEGORY:=Extra packages URL:=http://www.lighttpd.net/ MAINTAINER:=sean endef define Package/lighttpd $(call Package/lighttpd/Default) MENU:=1 DEPENDS:=+LIGHTTPD_SSL:libopenssl +libpcre +libpthread TITLE:=A flexible and lightweight web server endef define Package/lighttpd/config config LIGHTTPD_SSL bool "SSL support" depends on PACKAGE_lighttpd default y help Implements SSL support in lighttpd (using libopenssl). This option is required if you enable the SSL engine in your lighttpd confguration file. endef BASE_MODULES:=dirlisting indexfile staticfile CONFIGURE_ARGS+= \ --libdir=/usr/lib/lighttpd \ --sysconfdir=/etc/lighttpd \ --enable-shared \ --enable-static \ --disable-rpath \ --without-attr \ --without-bzip2 \ --without-fam \ --with-pcre \ --without-valgrind \ $(call autoconf_bool,CONFIG_IPV6,ipv6) CONFIGURE_VARS+= \ PCRE_LIB="-lpcre" \ ifneq ($(strip $(CONFIG_LIGHTTPD_SSL)),) CONFIGURE_ARGS+= \ --with-openssl="$(STAGING_DIR)/usr" BASE_MODULES+= openssl else CONFIGURE_ARGS+= \ --without-openssl endif ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-authn_gssapi),) CONFIGURE_ARGS+= --with-krb5 else CONFIGURE_ARGS+= --without-krb5 endif ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-authn_ldap),) CONFIGURE_ARGS+= --with-ldap else CONFIGURE_ARGS+= --without-ldap endif ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-authn_mysql),) CONFIGURE_ARGS+= --with-mysql else CONFIGURE_ARGS+= --without-mysql endif #ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-geoip),) # CONFIGURE_ARGS+= --with-geoip #else # CONFIGURE_ARGS+= --without-geoip #endif ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-cml)$(CONFIG_PACKAGE_lighttpd-mod-magnet),) CONFIGURE_ARGS+= --with-lua else CONFIGURE_ARGS+= --without-lua endif ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-mysql_vhost),) CONFIGURE_ARGS+= --with-mysql else CONFIGURE_ARGS+= --without-mysql endif #ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-cml)$(CONFIG_PACKAGE_lighttpd-mod-trigger_b4_dl),) # CONFIGURE_ARGS+= --with-memcached #else # CONFIGURE_ARGS+= --without-memcached #endif ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-trigger_b4_dl),) CONFIGURE_ARGS+= --with-gdbm else CONFIGURE_ARGS+= --without-gdbm endif ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-webdav),) CONFIGURE_ARGS+= \ --with-webdav-locks \ --with-webdav-props # XXX: needed by sqlite3 to prevent segfaults in mod_webdav.so CONFIGURE_VARS+= \ LIBS="-lpthread" else CONFIGURE_ARGS+= \ --without-webdav-locks \ --without-webdav-props endif define Build/Configure $(call Build/Configure/Default) # XXX: override pcre (mis)detection by ./configure when cross-compiling echo "#define HAVE_LIBPCRE 1" >>$(PKG_BUILD_DIR)/config.h echo "#define HAVE_PCRE_H 1" >>$(PKG_BUILD_DIR)/config.h endef define Package/lighttpd/conffiles /etc/lighttpd/lighttpd.conf endef define Package/lighttpd/install $(INSTALL_DIR) $(1)/etc/lighttpd $(INSTALL_DATA) ./files/lighttpd.conf $(1)/etc/lighttpd/ $(INSTALL_DATA) $(PKG_BUILD_DIR)/doc/config/conf.d/mime.conf $(1)/etc/lighttpd/ $(INSTALL_DIR) $(1)/etc/lighttpd/conf.d $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/lighttpd.init $(1)/etc/init.d/lighttpd $(INSTALL_DIR) $(1)/usr/lib/lighttpd for m in $(BASE_MODULES); do \ $(CP) $(PKG_INSTALL_DIR)/usr/lib/lighttpd/mod_$$$${m}.so $(1)/usr/lib/lighttpd/ ; \ done $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/lighttpd $(1)/usr/sbin/ endef define BuildPlugin define Package/lighttpd-mod-$(1) $(call Package/lighttpd/Default) DEPENDS:=lighttpd ifneq ($(3),) DEPENDS+= $(3) endif TITLE:=$(2) module endef ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-$(1)),) define Package/lighttpd-mod-$(1)/install $(INSTALL_DIR) $$(1)/usr/lib/lighttpd $(CP) $(PKG_INSTALL_DIR)/usr/lib/lighttpd/mod_$(1).so $$(1)/usr/lib/lighttpd $(INSTALL_DIR) $$(1)/etc/lighttpd/conf.d if [ -f $(PKG_BUILD_DIR)/doc/config/conf.d/$(1).conf ]; then \ $(CP) $(PKG_BUILD_DIR)/doc/config/conf.d/$(1).conf $$(1)/etc/lighttpd/conf.d/$(4)-$(1).conf ; \ else \ echo 'server.modules += ( "mod_$(1)" )' > $$(1)/etc/lighttpd/conf.d/$(4)-$(1).conf ; \ fi endef endif $$(eval $$(call BuildPackage,lighttpd-mod-$(1))) endef $(eval $(call BuildPackage,lighttpd)) # First, permit redirect from HTTP to HTTPS. $(eval $(call BuildPlugin,redirect,URL redirection,+PACKAGE_lighttpd-mod-redirect:libpcre,10)) # Next, permit authentication. $(eval $(call BuildPlugin,auth,Authentication,,20)) $(eval $(call BuildPlugin,authn_file,File-based authentication,,20)) $(eval $(call BuildPlugin,authn_gssapi,Kerberos-based authentication,+PACKAGE_lighttpd-mod-authn_gssapi:krb5-libs,20)) $(eval $(call BuildPlugin,authn_ldap,LDAP-based authentication,+PACKAGE_lighttpd-mod-authn_ldap:libopenldap,20)) $(eval $(call BuildPlugin,authn_mysql,Mysql-based authentication,+PACKAGE_lighttpd-mod-authn_mysql:libmysqlclient,20)) # Finally, everything else. $(eval $(call BuildPlugin,access,Access restrictions,,30)) $(eval $(call BuildPlugin,accesslog,Access logging,,30)) $(eval $(call BuildPlugin,alias,Directory alias,,30)) $(eval $(call BuildPlugin,cgi,CGI,,30)) #$(eval $(call BuildPlugin,cml,Cache Meta Language,+PACKAGE_lighttpd-mod-cml:liblua +PACKAGE_lighttpd-mod-cml:libmemcached,30)) $(eval $(call BuildPlugin,cml,Cache Meta Language,+PACKAGE_lighttpd-mod-cml:liblua,30)) $(eval $(call BuildPlugin,compress,Compress output,+PACKAGE_lighttpd-mod-compress:zlib,30)) $(eval $(call BuildPlugin,deflate,Compress dynamic output,+PACKAGE_lighttpd-mod-deflate:zlib,30)) $(eval $(call BuildPlugin,evasive,Evasive,,30)) $(eval $(call BuildPlugin,evhost,Enhanced Virtual-Hosting,,30)) $(eval $(call BuildPlugin,expire,Expire,,30)) $(eval $(call BuildPlugin,extforward,Extract client,,30)) $(eval $(call BuildPlugin,fastcgi,FastCGI,,30)) $(eval $(call BuildPlugin,flv_streaming,FLV streaming,,30)) #$(eval $(call BuildPlugin,geoip,Geolocation,+PACKAGE_lighttpd-mod-geoip:libgeoip,30)) $(eval $(call BuildPlugin,magnet,Magnet,+PACKAGE_lighttpd-mod-magnet:liblua,30)) $(eval $(call BuildPlugin,mysql_vhost,Mysql virtual hosting,+PACKAGE_lighttpd-mod-mysql_vhost:libmysqlclient,30)) $(eval $(call BuildPlugin,proxy,Proxy,,30)) $(eval $(call BuildPlugin,rewrite,URL rewriting,+PACKAGE_lighttpd-mod-rewrite:libpcre,30)) $(eval $(call BuildPlugin,rrdtool,RRDtool,,30)) $(eval $(call BuildPlugin,scgi,SCGI,,30)) $(eval $(call BuildPlugin,secdownload,Secure and fast download,,30)) $(eval $(call BuildPlugin,setenv,Environment variable setting,,30)) $(eval $(call BuildPlugin,simple_vhost,Simple virtual hosting,,30)) $(eval $(call BuildPlugin,ssi,SSI,+PACKAGE_lighttpd-mod-ssi:libpcre,30)) $(eval $(call BuildPlugin,status,Server status display,,30)) #$(eval $(call BuildPlugin,trigger_b4_dl,Trigger before download,+PACKAGE_lighttpd-mod-trigger_b4_dl:libpcre +PACKAGE_lighttpd-mod-trigger_b4_dl:libgdbm +PACKAGE_lighttpd-mod-trigger_b4_dl:libmemcached,30)) $(eval $(call BuildPlugin,trigger_b4_dl,Trigger before download,+PACKAGE_lighttpd-mod-trigger_b4_dl:libpcre +PACKAGE_lighttpd-mod-trigger_b4_dl:libgdbm,30)) $(eval $(call BuildPlugin,userdir,User directory,,30)) $(eval $(call BuildPlugin,usertrack,User tracking,,30)) $(eval $(call BuildPlugin,webdav,WebDAV,+PACKAGE_lighttpd-mod-webdav:libsqlite3 +PACKAGE_lighttpd-mod-webdav:libuuid +PACKAGE_lighttpd-mod-webdav:libxml2,30)) $(eval $(call BuildPlugin,wstunnel,Websocket tunneling,,30))
4. 在makemenuconfig-> Extra packages->lighttpd下选择如下选项(根据自己需要):
[*] SSL support <*> lighttpd-mod-access........................... Access restrictions module <*> lighttpd-mod-accesslog............................. Access logging module
<*> lighttpd-mod-cgi.............................................. CGI module
<*> lighttpd-mod-fastcgi...................................... FastCGI module
<*> lighttpd-mod-status......................... Server status display module
5. 在makemenuconfig->Languages->PHP下选择如下选项(根据自己需要):
<*> php7......................................... PHP7 Hypertext preprocessor [*] PHP7 Filter support [*] PHP7 LIBXML support [*] Use system timezone data instead of php's built-in database -*- php7-cgi..................... PHP7 Hypertext preprocessor (CGI & FastCGI) <*> php7-cli............................... PHP7 Hypertext preprocessor (CLI) <*> php7-fastcgi...................................... FastCGI startup script <*> php7-fpm............................... PHP7 Hypertext preprocessor (FPM)
6.配置想修改:
6.1. 在 lighttpd1.4.54 下新建files文件夹,新建lighttpd.conf和lighttpd.init,内容分别如下:
server.modules = ( "mod_access", "mod_accesslog", "mod_cgi", "mod_fastcgi" ) server.document-root = "/www" server.upload-dirs = ( "/tmp" ) server.errorlog = "/var/log/lighttpd/error.log" server.pid-file = "/var/run/php7-fpm.pid" server.username = "http" server.groupname = "www-data" fastcgi.server += ( ".php" => (( "socket" => "/var/run/php7-fpm.sock", "broken-scriptfilename" => "enable" )) ) #cgi.assign += ( ".php" => "/usr/bin/php-cgi" ) index-file.names = ( "index.php", "index.html", "index.htm", "default.htm", ) url.access-deny = ( "~", ".inc" ) static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" ) ### Options that are useful but not always necessary: #server.chroot = "/" server.port = 80 #server.bind = "localhost" #server.tag = "lighttpd" #server.errorlog-use-syslog = "enable" #server.network-backend = "writev" ### Use IPv6 if available #include_shell "/usr/share/lighttpd/use-ipv6.pl" #dir-listing.encoding = "utf-8" #server.dir-listing = "enable" include "/etc/lighttpd/mime.conf" include "/etc/lighttpd/conf.d/*.conf"
#!/bin/sh /etc/rc.common # Copyright (C) 2006-2011 OpenWrt.org START=50 STOP=50 USE_PROCD=1 PROG=/usr/sbin/lighttpd validate_conf() { $PROG -tt -f /etc/lighttpd/lighttpd.conf >/dev/null 2>&1 || { echo "validation failed" return 1 } } start_service() { user_exists http || user_add http [ -d /var/log/lighttpd ] || { mkdir -m 0775 -p /var/log/lighttpd chgrp www-data /var/log/lighttpd } validate_conf || exit 1 procd_open_instance procd_set_param command $PROG -D -f /etc/lighttpd/lighttpd.conf procd_close_instance } reload_service() { procd_send_signal lighttpd }
6.2 修改 lighttpd1.4.54/src/doc/config/conf.d/cgi.conf为:
####################################################################### ## ## CGI modules ## --------------- ## ## See https://redmine.lighttpd.net/projects/lighttpd/wiki/docs_modcgi ## server.modules += ( "mod_cgi" ) ## ## Plain old CGI handling ## ## For PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini. ## cgi.assign = ( ".php" => "/usr/bin/php-cgi", ".pl" => "/usr/bin/perl", ".cgi" => "/usr/bin/perl", ".rb" => "/usr/bin/ruby", ".erb" => "/usr/bin/eruby", ".py" => "/usr/bin/python" ) ## ## to get the old cgi-bin behavior of apache ## ## Note: make sure that mod_alias is loaded if you uncomment the ## next line. (see modules.conf) ## #alias.url += ( "/cgi-bin" => server_root + "/cgi-bin" ) #$HTTP["url"] =~ "^/cgi-bin" { # cgi.assign = ( "" => "" ) #} ## #######################################################################
7.至此,配置完毕;编译烧录到开发板,然后再/www/目录下新建info.php文件
<?php
phpinfo();
?>
8.添加可执行权限:
chmod +x /www/info.php
9.在浏览器输入:开发板ip/info.php如果弹出如下信息说明配置真确:
注:php-fpm、php-fscgi均需要指定在cgi.conf文件中加入如下这句(如6.2步骤):
".php" => "/usr/bin/php-cgi",
否则会造成访问php文件发生503错误。
另外还需要在makemenuconfig里面关闭openwrt自带的uhttpd功能