From: Steven Barth Date: Thu, 24 Jul 2008 13:55:11 +0000 (+0000) Subject: Rewrote host environment targets to work out of the box X-Git-Tag: 0.8.0~581 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=7384e0e6b77518efa4d113ede46f8c107de6f604;p=oweals%2Fluci.git Rewrote host environment targets to work out of the box --- diff --git a/Makefile b/Makefile index 8ac0ac664..12c1d89e0 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,6 @@ include build/config.mk -MODULES = applications/* libs/* modules/* themes/* i18n/* contrib/luaposix -LUA_TARGET = source +MODULES = applications/* libs/* modules/* themes/* i18n/* contrib/* OS:=$(shell uname) export OS @@ -10,7 +9,7 @@ export OS all: build -build: luabuild gccbuild +build: gccbuild luabuild gccbuild: for i in $(MODULES); do make -C$$i compile; done @@ -31,26 +30,46 @@ luahost: luabuild hostcopy hostcopy: mkdir -p host for i in $(MODULES); do cp -a $$i/dist/* host/ -R 2>/dev/null || true; done + for i in $(MODULES); do cp -a $$i/hostfiles/* host/ -R 2>/dev/null || true; done rm -f host/luci ln -s .$(LUCI_MODULEDIR) host/luci -runboa: host - export LUA_PATH="`pwd`/host$(LUCI_MODULEDIR);;" - export LUA_CPATH="`pwd`/host$(LUCI_LIBRARYDIR);;" - libs/sgi-webuci/host/buildconfig.sh `pwd`/host > host/etc/boa/boa.conf - ./host/usr/bin/boa -c ./host/etc/boa -d +hostenv: host ucidefaults + +ucidefaults: + build/hostenv.sh $(realpath host) $(LUA_MODULEDIR) $(LUA_LIBRARYDIR) "$(realpath host)/bin/uci-defaults --exclude luci-community-*" + +runboa: hostenv + libs/sgi-webuci/host/buildconfig.sh $(realpath host) > host/etc/boa/boa.conf + build/hostenv.sh $(realpath host) $(LUA_MODULEDIR) $(LUA_LIBRARYDIR) "$(realpath host/usr/bin/boa) -c $(realpath host/etc/boa) -d" + +runhttpd: hostenv + build/hostenv.sh $(realpath host) $(LUA_MODULEDIR) $(LUA_LIBRARYDIR) "$(realpath libs/httpd/host/runluci) $(realpath host) $(HTDOCS)" runluci: luahost - export LUA_PATH="`pwd`/host$(LUCI_MODULEDIR);;" - export LUA_CPATH="`pwd`/host$(LUCI_LIBRARYDIR);;" - libs/httpd/host/runluci host$(HTDOCS) + build/hostenv.sh $(realpath host) $(LUA_MODULEDIR) $(LUA_LIBRARYDIR) "$(realpath libs/httpd/host/runluci) $(realpath host) $(HTDOCS)" + +runlua: hostenv + build/hostenv.sh $(realpath host) $(LUA_MODULEDIR) $(LUA_LIBRARYDIR) lua + +runshell: hostenv + build/hostenv.sh $(realpath host) $(LUA_MODULEDIR) $(LUA_LIBRARYDIR) $$SHELL hostclean: clean rm -rf host run: - # make run is deprecated # - # Please use: # - # # - # make runluci to use LuCI HTTPD # - # make runboa to use Boa / Webuci # + # make run is deprecated # + # Please use: # + # # + # To run LuCI WebUI using LuCI HTTPD # + # make runhttpd # + # # + # To run LuCI WebUI using Boa/Webuci # + # make runboa # + # # + # To start a shell in the LuCI environment # + # make runshell # + # # + # To run Lua CLI in the LuCI environment # + # make runlua # diff --git a/build/config.mk b/build/config.mk index 3cf13201f..5a8f22f89 100644 --- a/build/config.mk +++ b/build/config.mk @@ -1,5 +1,6 @@ LUAC = luac LUAC_OPTIONS = -s +LUA_TARGET = source LUA_MODULEDIR = /usr/lib/lua LUA_LIBRARYDIR = /usr/lib/lua diff --git a/build/hostenv.sh b/build/hostenv.sh new file mode 100755 index 000000000..ee906b001 --- /dev/null +++ b/build/hostenv.sh @@ -0,0 +1,6 @@ +#!/bin/sh +export LD_LIBRARY_PATH="$1/usr/lib:$LD_LIBRARY_PATH" +export PATH="$1/bin:$1/usr/bin:$PATH" +export LUA_PATH="$1/$2/?.lua;$1/$2/?/init.lua;;" +export LUA_CPATH="$1/$3/?.so;;" +$4 diff --git a/contrib/luadoc/Makefile b/contrib/luadoc/Makefile new file mode 100644 index 000000000..81a96f6a8 --- /dev/null +++ b/contrib/luadoc/Makefile @@ -0,0 +1,2 @@ +include ../../build/config.mk +include ../../build/module.mk \ No newline at end of file diff --git a/contrib/luaposix/Makefile b/contrib/luaposix/Makefile index e9433bf58..1d7744ee7 100644 --- a/contrib/luaposix/Makefile +++ b/contrib/luaposix/Makefile @@ -10,6 +10,8 @@ LUAPOSIX_PATCHDIR = patches all: compile +include ../../build/module.mk + $(LUAPOSIX_FILE): wget -O $@ $(LUAPOSIX_URL) || rm -f $@ diff --git a/contrib/luasocket/.gitignore b/contrib/luasocket/.gitignore new file mode 100644 index 000000000..1a4bd6da8 --- /dev/null +++ b/contrib/luasocket/.gitignore @@ -0,0 +1 @@ +luasocket-* diff --git a/contrib/luasocket/Makefile b/contrib/luasocket/Makefile new file mode 100644 index 000000000..2e187e2e5 --- /dev/null +++ b/contrib/luasocket/Makefile @@ -0,0 +1,32 @@ +include ../../build/config.mk +include ../../build/gccconfig.mk + +LUASOCKET_VERSION = 2.0.2 +LUASOCKET_SITE = http://luaforge.net/frs/download.php/2664/ +LUASOCKET_DIR = luasocket-$(LUASOCKET_VERSION) +LUASOCKET_FILE = $(LUASOCKET_DIR).tar.gz +LUASOCKET_URL = $(LUASOCKET_SITE)/$(LUASOCKET_FILE) +INSTALL_MODULEDIR = dist$(LUA_MODULEDIR) +INSTALL_LIBRARYDIR = dist$(LUA_LIBRARYDIR) + +all: compile + +include ../../build/module.mk + +$(LUASOCKET_FILE): + wget -O $@ $(LUASOCKET_URL) || rm -f $@ + +$(LUASOCKET_DIR)/.prepared: $(LUASOCKET_FILE) + rm -rf $(LUASOCKET_DIR) + tar xvfz $(LUASOCKET_FILE) + touch $@ + +compile: $(LUASOCKET_DIR)/.prepared + $(MAKE) -C $(LUASOCKET_DIR) CC=$(CC) CFLAGS="$(CFLAGS) $(LUA_CFLAGS) $(FPIC)" LDFLAGS="$(LDFLAGS) $(LUA_SHLIBS) $(SHLIB_FLAGS)" OS="$(OS)" + mkdir -p $(INSTALL_LIBRARYDIR) $(INSTALL_MODULEDIR) + $(MAKE) -C $(LUASOCKET_DIR) install INSTALL_TOP_SHARE=../../$(INSTALL_MODULEDIR) INSTALL_TOP_LIB=../../$(INSTALL_LIBRARYDIR) + +compile-all: compile + +clean: + rm -rf $(LUASOCKET_DIR) $(LUASOCKET_FILE) diff --git a/contrib/package/Makefile b/contrib/package/Makefile new file mode 100644 index 000000000..f7fac7740 --- /dev/null +++ b/contrib/package/Makefile @@ -0,0 +1,2 @@ +include ../../build/config.mk +include ../../build/module.mk diff --git a/contrib/uci/.gitignore b/contrib/uci/.gitignore new file mode 100644 index 000000000..9de6f950a --- /dev/null +++ b/contrib/uci/.gitignore @@ -0,0 +1 @@ +uci-* diff --git a/contrib/uci/Makefile b/contrib/uci/Makefile new file mode 100644 index 000000000..d3f8403c2 --- /dev/null +++ b/contrib/uci/Makefile @@ -0,0 +1,33 @@ +include ../../build/config.mk +include ../../build/gccconfig.mk + +UCI_VERSION = 0.4.4 +UCI_SITE = http://mirror2.openwrt.org/sources +UCI_DIR = uci-$(UCI_VERSION) +UCI_FILE = $(UCI_DIR).tar.gz +UCI_URL = $(UCI_SITE)/$(UCI_FILE) + +all: compile + +include ../../build/module.mk + +$(UCI_FILE): + wget -O $@ $(UCI_URL) || rm -f $@ + +$(UCI_DIR)/.prepared: $(UCI_FILE) + rm -rf $(UCI_DIR) + tar xvfz $(UCI_FILE) + touch $@ + +compile: $(UCI_DIR)/.prepared + $(MAKE) -C $(UCI_DIR) CC=$(CC) CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" OS="$(OS)" + mkdir -p dist/usr/lib dist/usr/bin + $(MAKE) -C $(UCI_DIR) install DESTDIR=../dist prefix=/usr + $(MAKE) -C $(UCI_DIR)/lua CC=$(CC) CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" OS="$(OS)" + $(MAKE) -C $(UCI_DIR)/lua install DESTDIR=../../dist luadir=$(LUA_LIBRARYDIR) + + +compile-all: compile + +clean: + rm -rf $(UCI_DIR) $(UCI_FILE) diff --git a/contrib/uci/hostfiles/bin/uci b/contrib/uci/hostfiles/bin/uci new file mode 100755 index 000000000..f6104c6ef --- /dev/null +++ b/contrib/uci/hostfiles/bin/uci @@ -0,0 +1,2 @@ +#!/bin/sh +$(dirname $0)/../usr/bin/uci -c $(dirname $0)/../etc/config "$@" diff --git a/contrib/uci/hostfiles/bin/uci-defaults b/contrib/uci/hostfiles/bin/uci-defaults new file mode 100755 index 000000000..3b58d7b32 --- /dev/null +++ b/contrib/uci/hostfiles/bin/uci-defaults @@ -0,0 +1,7 @@ +#!/bin/sh +for i in $(find $(dirname $0)/../etc/uci-defaults -type f -not -name "$2") +do + [ -f $i ] && { + bash $i; rm $i + } +done diff --git a/contrib/uci/hostfiles/etc/config/ddns b/contrib/uci/hostfiles/etc/config/ddns new file mode 100644 index 000000000..7c3f3c1a7 --- /dev/null +++ b/contrib/uci/hostfiles/etc/config/ddns @@ -0,0 +1,85 @@ +################################################################# +# In order to enable dynamic dns you need at least one section, +# and in that seciton the "enabled" option must be set to one +# +# Each section represents an update to a different service +# +# You specify your domain name, your username and your password +# with the optins "domain", "username" and "password" respectively +# +# Next you need to specify the name of the service you are +# connecting to "eg. dyndns.org". The format of the update +# urls for several different dynamic dns services is specified +# in the /usr/lib/ddns/services file. This list is hardly complete +# as there are many, many different dynamic dns services. If your +# service is on the list you can merely specify it with the +# "service_name" option. Otherwise you will need to determine +# the format of the url to update with. You can either add an +# entry to the /usr/lib/ddns/services file or specify this with +# the "update_url" option. +# +# We also need to specify the source of the ip address to associate with +# your domain. The "ip_source" option can be "network", "interface" +# or "web", with "network" as the default. +# +# If "ip_source" is "network" you specify a network section in your +# /etc/network config file (e.g. "wan", which is the default) with +# the "ip_network" option. If you specify "wan", you will update +# with whatever the ip for your wan is. +# +# If "ip_source" is "interface" you specify a hardware interface +# (e.g. "eth1") and whatever the current ip of this interface is +# will be associated with the domain when an update is performed. +# +# The last possibility is that "ip_source" is "web", which means +# that in order to obtain our ip address we will connect to a +# website, and the first valid ip address listed on that page +# will be assumed to be ours. If you are behind another firewall +# this is the best option since none of the local networks or +# interfaces will have the external ip. The website to connect +# to is specified by the "ip_url" option. You may specify multiple +# urls in the option, separated by whitespace. +# +# Finally we need to specify how often to check whether we need +# to check whether the ip address has changed (and if so update +# it) and how often we need to force an update ( many services +# will expire your domain if you don't connect and do an update +# every so often). Use the "check_interval" to specify how +# often to check whether an update is necessary, and the +# "force_interval" option to specify how often to force an +# update. Specify the units for these values with the "check_unit" +# and the "force_unit" options. Units can be "days", "hours", +# "minutes" or "seconds". The default force_unit is hours and the +# default check_unit is seconds. The default check_interval is +# 600 seconds, or ten minutes. The default force_interval is +# 72 hours or 3 days. +# +# +######################################################### + +config service "myddns" + option enabled "0" + + option service_name "dyndns.org" + option domain "mypersonaldomain.dyndns.org" + option username "myusername" + option password "mypassword" + + option ip_source "network" + option ip_network "wan" + + + option force_interval "72" + option force_unit "hours" + option check_interval "10" + option check_unit "minutes" + + #option ip_source "interface" + #option ip_interface "eth0.1" + + #option ip_source "web" + #option ip_url "http://www.whatismyip.com/automation/n09230945.asp" + + #option update_url "http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]" + + diff --git a/contrib/uci/hostfiles/etc/config/dhcp b/contrib/uci/hostfiles/etc/config/dhcp new file mode 100644 index 000000000..4904b0253 --- /dev/null +++ b/contrib/uci/hostfiles/etc/config/dhcp @@ -0,0 +1,23 @@ +config dnsmasq + option domainneeded 1 + option boguspriv 1 + option filterwin2k '0' #enable for dial on demand + option localise_queries 1 + option local '/lan/' + option domain 'lan' + option expandhosts 1 + option nonegcache 0 + option authoritative 1 + option readethers 1 + option leasefile '/tmp/dhcp.leases' + option resolvfile '/tmp/resolv.conf.auto' + +config dhcp + option interface lan + option start 100 + option limit 150 + option leasetime 12h + +config dhcp + option interface wan + option ignore 1 diff --git a/contrib/uci/hostfiles/etc/config/dropbear b/contrib/uci/hostfiles/etc/config/dropbear new file mode 100644 index 000000000..e660ac735 --- /dev/null +++ b/contrib/uci/hostfiles/etc/config/dropbear @@ -0,0 +1,3 @@ +config dropbear + option PasswordAuth 'on' + option Port '22' diff --git a/contrib/uci/hostfiles/etc/config/fstab b/contrib/uci/hostfiles/etc/config/fstab new file mode 100644 index 000000000..eccf0ce69 --- /dev/null +++ b/contrib/uci/hostfiles/etc/config/fstab @@ -0,0 +1,10 @@ +config mount + option target /home + option device /dev/sda1 + option fstype ext3 + option options rw,sync + option enabled 0 + +config swap + option device /dev/sda2 + option enabled 0 diff --git a/contrib/uci/hostfiles/etc/config/httpd b/contrib/uci/hostfiles/etc/config/httpd new file mode 100644 index 000000000..2f8020ff2 --- /dev/null +++ b/contrib/uci/hostfiles/etc/config/httpd @@ -0,0 +1,5 @@ + +config 'httpd' + option 'port' '80' + option 'home' '/www' + diff --git a/contrib/uci/hostfiles/etc/config/network b/contrib/uci/hostfiles/etc/config/network new file mode 100644 index 000000000..1caf3e734 --- /dev/null +++ b/contrib/uci/hostfiles/etc/config/network @@ -0,0 +1,27 @@ +#### VLAN configuration +config switch eth0 + option vlan0 "0 1 2 3 5*" + option vlan1 "4 5" + + +#### Loopback configuration +config interface loopback + option ifname "lo" + option proto static + option ipaddr 127.0.0.1 + option netmask 255.0.0.0 + + +#### LAN configuration +config interface lan + option type bridge + option ifname "eth0.0" + option proto static + option ipaddr 192.168.1.1 + option netmask 255.255.255.0 + + +#### WAN configuration +config interface wan + option ifname "eth0.1" + option proto dhcp diff --git a/contrib/uci/hostfiles/etc/config/ntpclient b/contrib/uci/hostfiles/etc/config/ntpclient new file mode 100644 index 000000000..169511378 --- /dev/null +++ b/contrib/uci/hostfiles/etc/config/ntpclient @@ -0,0 +1,22 @@ +config ntpclient + option hostname '0.openwrt.pool.ntp.org' + option port '123' + option count '0' + +config ntpclient + option hostname '1.openwrt.pool.ntp.org' + option port '123' + option count '0' + +config ntpclient + option hostname '2.openwrt.pool.ntp.org' + option port '123' + option count '0' + +config ntpclient + option hostname '3.openwrt.pool.ntp.org' + option port '123' + option count '0' + +config ntpdrift + option freq '0' diff --git a/contrib/uci/hostfiles/etc/config/qos b/contrib/uci/hostfiles/etc/config/qos new file mode 100644 index 000000000..51959b530 --- /dev/null +++ b/contrib/uci/hostfiles/etc/config/qos @@ -0,0 +1,89 @@ +# QoS configuration for OpenWrt + +# INTERFACES: +config interface wan + option classgroup "Default" + option enabled 1 + option overhead 1 + option upload 128 + option download 1024 + +# RULES: +config classify + option target "Bulk" + option ipp2p "all" +config classify + option target "Bulk" + option layer7 "edonkey" +config classify + option target "Bulk" + option layer7 "bittorrent" +config classify + option target "Priority" + option ports "22,53" +config classify + option target "Normal" + option proto "tcp" + option ports "20,21,25,80,110,443,993,995" +config classify + option target "Express" + option ports "5190" +config default + option target "Express" + option proto "udp" + option pktsize "-500" +config reclassify + option target "Priority" + option proto "icmp" +config default + option target "Bulk" + option portrange "1024-65535" +config reclassify + option target "Priority" + option proto "tcp" + option pktsize "-128" + option mark "!Bulk" + option tcpflags "SYN" +config reclassify + option target "Priority" + option proto "tcp" + option pktsize "-128" + option mark "!Bulk" + option tcpflags "ACK" + + +# Don't change the stuff below unless you +# really know what it means :) + +config classgroup "Default" + option classes "Priority Express Normal Bulk" + option default "Normal" + + +config class "Priority" + option packetsize 400 + option maxsize 400 + option avgrate 10 + option priority 20 +config class "Priority_down" + option packetsize 1000 + option avgrate 10 + + +config class "Express" + option packetsize 1000 + option maxsize 800 + option avgrate 50 + option priority 10 + +config class "Normal" + option packetsize 1500 + option packetdelay 100 + option avgrate 10 + option priority 5 +config class "Normal_down" + option avgrate 20 + +config class "Bulk" + option avgrate 1 + option packetdelay 200 diff --git a/contrib/uci/hostfiles/etc/config/system b/contrib/uci/hostfiles/etc/config/system new file mode 100644 index 000000000..b0726b7b7 --- /dev/null +++ b/contrib/uci/hostfiles/etc/config/system @@ -0,0 +1,3 @@ +config system + option hostname OpenWrt + option timezone UTC diff --git a/contrib/uci/hostfiles/etc/config/upnpd b/contrib/uci/hostfiles/etc/config/upnpd new file mode 100644 index 000000000..75dcb9ac4 --- /dev/null +++ b/contrib/uci/hostfiles/etc/config/upnpd @@ -0,0 +1,4 @@ +config upnpd config + option log_output 0 + option download 1024 + option upload 512 diff --git a/contrib/uci/hostfiles/etc/config/wireless b/contrib/uci/hostfiles/etc/config/wireless new file mode 100644 index 000000000..4895797db --- /dev/null +++ b/contrib/uci/hostfiles/etc/config/wireless @@ -0,0 +1,13 @@ +config wifi-device wifi0 + option type atheros + option channel auto + + # REMOVE THIS LINE TO ENABLE WIFI: + option disabled 1 + +config wifi-iface + option device wifi0 + option network lan + option mode ap + option ssid OpenWrt + option encryption none diff --git a/libs/httpd/host/runluci b/libs/httpd/host/runluci index 1d5812679..6f6cdde3d 100755 --- a/libs/httpd/host/runluci +++ b/libs/httpd/host/runluci @@ -4,19 +4,25 @@ require("luci.httpd.server") require("luci.httpd.handler.file") require("luci.httpd.handler.luci") -DOCROOT = arg[1] +SYSROOT = arg[1] +DOCROOT = SYSROOT .. arg[2] PORT = 8080 collectgarbage("setpause", 150) serversocket = luci.httpd.Socket("0.0.0.0", PORT) - server = luci.httpd.server.Server() vhost = luci.httpd.server.VHost() server:set_default_vhost(vhost) +if pcall(require, "uci") and pcall(require, "luci.model.uci") then + luci.model.uci.confdir_default = SYSROOT .. luci.model.uci.confdir_default + luci.model.uci.savedir_state = SYSROOT .. luci.model.uci.savedir_state + luci.model.uci.set_confdir(luci.model.uci.confdir_default) +end + filehandler = luci.httpd.handler.file.Simple(DOCROOT) vhost:set_default_handler(filehandler) diff --git a/libs/sgi-webuci/root/usr/lib/boa/luci.lua b/libs/sgi-webuci/root/usr/lib/boa/luci.lua index 5c9531a2e..d0f4323c3 100644 --- a/libs/sgi-webuci/root/usr/lib/boa/luci.lua +++ b/libs/sgi-webuci/root/usr/lib/boa/luci.lua @@ -20,12 +20,13 @@ function init(path) require("luci.dispatcher") require("luci.sgi.webuci") - require("uci") + require("luci.model.uci") if (root ~= '/') then -- Entering dummy mode - uci.set_savedir(root..'/tmp/.uci') - uci.set_confdir(root..'/etc/config') + luci.model.uci.confdir_default = root .. '/etc/config' + luci.model.uci.savedir_state = root .. '/var/state' + uci.set_confdir(luci.model.uci.confdir_default) luci.sys.hostname = function() return "" end luci.sys.loadavg = function() return 0,0,0,0,0 end @@ -35,12 +36,11 @@ function init(path) luci.sys.net.arptable = function() return {} end luci.sys.net.devices = function() return {} end - luci.sys.net.routes = function() return {} end + luci.sys.net.routes = function() return {} end luci.sys.wifi.getiwconfig = function() return {} end luci.sys.wifi.iwscan = function() return {} end luci.sys.user.checkpasswd = function() return true end - luci.http.basic_auth = function() return true end end end