first commit
commit
8063730c69
@ -0,0 +1,16 @@
|
||||
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
|
||||
LUCI_TITLE:=LuCI support for searxng
|
||||
LUCI_PKGARCH:=all
|
||||
LUCI_DEPENDS:=+lsblk +docker +luci-lib-taskd
|
||||
|
||||
define Package/luci-app-searxng/conffiles
|
||||
/etc/config/searxng
|
||||
endef
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
@ -0,0 +1,15 @@
|
||||
|
||||
module("luci.controller.searxng", package.seeall)
|
||||
|
||||
function index()
|
||||
entry({"admin", "apps"}, firstchild(), _("Apps") , 45).dependent = false
|
||||
if not nixio.fs.access("/etc/config/searxng") then
|
||||
return
|
||||
end
|
||||
|
||||
local page = entry({"admin", "apps", "searxng"}, cbi("searxng"), _("searxng"))
|
||||
page.order = 10
|
||||
page.dependent = true
|
||||
page.acl_depends = { "luci-app-searxng" }
|
||||
entry({"admin","apps","searxng","status"},call("act_status")).leaf=true
|
||||
end
|
@ -0,0 +1,47 @@
|
||||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
]]--
|
||||
|
||||
local taskd = require "luci.model.tasks"
|
||||
local searxng_model = require "luci.model.searxng"
|
||||
local m, s, o
|
||||
|
||||
m = taskd.docker_map("searxng", "searxng", "/usr/libexec/apps/searxng/searxng.sh",
|
||||
translate("searxng"),
|
||||
translate("Searx is a free and open-source metasearch engine, available under the GNU Affero General Public License version 3, with the aim of protecting the privacy of its users. To this end, Searx does not share users' IP addresses or search history with the search engines from which it gathers results.")
|
||||
.. translate("Official website:") .. ' <a href=\"https://searx.github.io/searx/\" target=\"_blank\">https://searx.github.io/searx/</a>')
|
||||
|
||||
s = m:section(SimpleSection, translate("Service Status"), translate("searxng status:"))
|
||||
s:append(Template("searxng/status"))
|
||||
|
||||
s = m:section(TypedSection, "searxng", translate("Setup"), translate("Refresh to update settings."))
|
||||
s.addremove=false
|
||||
s.anonymous=true
|
||||
|
||||
o = s:option(Value, "port", translate("Port").."<b>*</b>")
|
||||
o.rmempty = false
|
||||
o.default = "8123"
|
||||
o.datatype = "port"
|
||||
|
||||
o = s:option(Value, "image_name", translate("Image").."<b>*</b>")
|
||||
o.rmempty = false
|
||||
o.datatype = "string"
|
||||
o:value("paulgoio/searxng:production", "paulgoio/searxng:production")
|
||||
o.default = "paulgoio/searxng:production"
|
||||
|
||||
local blocks = searxng_model.blocks()
|
||||
local home = searxng_model.home()
|
||||
|
||||
o = s:option(Value, "config_path", translate("Config path").."<b>*</b>")
|
||||
o.rmempty = false
|
||||
o.datatype = "string"
|
||||
o:value("/opt/docker2/compose/Config/searxng", "/opt/docker2/compose/Config/searxng")
|
||||
o.default = "/opt/docker2/compose/Config/searxng"
|
||||
|
||||
local paths, default_path = searxng_model.find_paths(blocks, home, "Configs")
|
||||
for _, val in pairs(paths) do
|
||||
o:value(val, val)
|
||||
end
|
||||
o.default = default_path
|
||||
|
||||
return m
|
@ -0,0 +1,55 @@
|
||||
local util = require "luci.util"
|
||||
local jsonc = require "luci.jsonc"
|
||||
|
||||
local searxng = {}
|
||||
|
||||
searxng.blocks = function()
|
||||
local f = io.popen("lsblk -s -f -b -o NAME,FSSIZE,MOUNTPOINT --json", "r")
|
||||
local vals = {}
|
||||
if f then
|
||||
local ret = f:read("*all")
|
||||
f:close()
|
||||
local obj = jsonc.parse(ret)
|
||||
for _, val in pairs(obj["blockdevices"]) do
|
||||
local fsize = val["fssize"]
|
||||
if fsize ~= nil and string.len(fsize) > 10 and val["mountpoint"] then
|
||||
-- fsize > 1G
|
||||
vals[#vals+1] = val["mountpoint"]
|
||||
end
|
||||
end
|
||||
end
|
||||
return vals
|
||||
end
|
||||
|
||||
searxng.home = function()
|
||||
local uci = require "luci.model.uci".cursor()
|
||||
local home_dirs = {}
|
||||
home_dirs["main_dir"] = uci:get_first("quickstart", "main", "main_dir", "/root")
|
||||
home_dirs["Configs"] = uci:get_first("quickstart", "main", "conf_dir", home_dirs["main_dir"].."/Configs")
|
||||
home_dirs["Public"] = uci:get_first("quickstart", "main", "pub_dir", home_dirs["main_dir"].."/Public")
|
||||
home_dirs["Downloads"] = uci:get_first("quickstart", "main", "dl_dir", home_dirs["Public"].."/Downloads")
|
||||
home_dirs["Caches"] = uci:get_first("quickstart", "main", "tmp_dir", home_dirs["main_dir"].."/Caches")
|
||||
return home_dirs
|
||||
end
|
||||
|
||||
searxng.find_paths = function(blocks, home_dirs, path_name)
|
||||
local default_path = ''
|
||||
local configs = {}
|
||||
|
||||
default_path = home_dirs[path_name] .. "/searxng"
|
||||
if #blocks == 0 then
|
||||
table.insert(configs, default_path)
|
||||
else
|
||||
for _, val in pairs(blocks) do
|
||||
table.insert(configs, val .. "/" .. path_name .. "/searxng")
|
||||
end
|
||||
local without_conf_dir = "/root/" .. path_name .. "/searxng"
|
||||
if default_path == without_conf_dir then
|
||||
default_path = configs[1]
|
||||
end
|
||||
end
|
||||
|
||||
return configs, default_path
|
||||
end
|
||||
|
||||
return searxng
|
@ -0,0 +1,31 @@
|
||||
<%
|
||||
local util = require "luci.util"
|
||||
local container_status = util.trim(util.exec("/usr/libexec/apps/searxng/searxng.sh status"))
|
||||
local container_install = (string.len(container_status) > 0)
|
||||
local container_running = container_status == "running"
|
||||
-%>
|
||||
<div class="cbi-value">
|
||||
<label class="cbi-value-title"><%:Status%></label>
|
||||
<div class="cbi-value-field">
|
||||
<% if container_running then %>
|
||||
<button class="cbi-button cbi-button-success" disabled="true"><%:searxng is running%></button>
|
||||
<% else %>
|
||||
<button class="cbi-button cbi-button-negative" disabled="true"><%:searxng is not running%></button>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<%
|
||||
if container_running then
|
||||
local port=util.trim(util.exec("/usr/libexec/apps/searxng/searxng.sh port"))
|
||||
if port == "" then
|
||||
port="8123"
|
||||
end
|
||||
-%>
|
||||
<div class="cbi-value cbi-value-last">
|
||||
<label class="cbi-value-title"> </label>
|
||||
<div class="cbi-value-field">
|
||||
|
||||
<input type="button" class="btn cbi-button cbi-button-apply" name="start" value="<%:Open searxng%>" onclick="window.open('http://'+location.hostname+':<%=port%>/', '_blank')">
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
@ -0,0 +1,5 @@
|
||||
config searxng
|
||||
option 'port' '8123'
|
||||
option 'config_path' '/opt/docker2/Conf/searxng'
|
||||
option 'image_name' 'paulgoio/searxng:production'
|
||||
|
@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
|
||||
config_dir=`uci -q get searxng.@searxng[0].config_path`
|
||||
|
||||
data_dir=`docker inspect --format '{{.Mounts}}' searxng | grep -Eom1 '[^ ]+/_data /var/www/html local true ' | cut -d' ' -f1`
|
||||
|
||||
if [ -n "$data_dir" -a "$data_dir" != "$config_dir" ]; then
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
set searxng.@searxng[0].config_path="$data_dir"
|
||||
commit searxng
|
||||
EOF
|
||||
fi
|
||||
|
||||
exit 0
|
@ -0,0 +1,116 @@
|
||||
#!/bin/sh
|
||||
|
||||
ACTION=${1}
|
||||
shift 1
|
||||
|
||||
get_image() {
|
||||
IMAGE_NAME="paulgoio/searxng:production"
|
||||
}
|
||||
|
||||
do_install_detail() {
|
||||
local config=`uci get searxng.@searxng[0].config_path 2>/dev/null`
|
||||
local port=`uci get searxng.@searxng[0].port 2>/dev/null`
|
||||
local IMAGE_NAME=`uci get searxng.@searxng[0].image_name 2>/dev/null`
|
||||
local username=`uci get searxng.@searxng[0].username 2>/dev/null`
|
||||
local password=`uci get searxng.@searxng[0].password 2>/dev/null`
|
||||
|
||||
#Generate the generic environment variables for the docker-compose
|
||||
|
||||
GEN_PASS=$(< /dev/urandom tr -dc A-Za-z0-9 2>/dev/null | head -c14; echo)
|
||||
GEN_PASS2=$(< /dev/urandom tr -dc A-Za-z0-9 2>/dev/null | head -c14; echo)
|
||||
|
||||
# Get our local LAN IP Address
|
||||
LAN_IP=$(uci get network.lan.ipaddr)
|
||||
# Strip trailing network mask
|
||||
LAN_IP="${LAN_IP%/*}"
|
||||
|
||||
if [ -z "$config" ]; then
|
||||
echo "config path is empty!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
[ -z "$port" ] && port=8123
|
||||
[ -z "$IMAGE_NAME" ] && IMAGE_NAME=paulgoio/searxng:production
|
||||
|
||||
|
||||
# Create Docker Compose file with custom variables
|
||||
|
||||
# Create Docker Compose file with custom variables
|
||||
touch docker-compose.yml
|
||||
cat > docker-compose.yml <<EOF
|
||||
version: '3.7'
|
||||
|
||||
services:
|
||||
searxng:
|
||||
image: paulgoio/searxng:production
|
||||
restart: always
|
||||
ports:
|
||||
- ${LAN_IP}:$port:8080
|
||||
cap_drop:
|
||||
- ALL
|
||||
cap_add:
|
||||
- SETGID
|
||||
- SETUID
|
||||
- DAC_OVERRIDE
|
||||
environment:
|
||||
- IMAGE_PROXY=true
|
||||
- BASE_URL=http://${LAN_IP}
|
||||
- NAME=searx
|
||||
- CONTACT=contact@searxng.org
|
||||
- ISSUE_URL=https://github.com/paulgoio/searxng/issues
|
||||
- GIT_URL=https://github.com/paulgoio/searxng
|
||||
- GIT_BRANCH=main
|
||||
labels:
|
||||
plugsy.name: "SearXng"
|
||||
plugsy.category: "Home"
|
||||
plugsy.icon: "@styled-icons/boxicons-regular/Search"
|
||||
plugsy.link: "http://${LAN_IP}:$port"
|
||||
EOF
|
||||
|
||||
docker-compose up -d
|
||||
|
||||
# Add a new list option to the "shortcutmenu" configuration file
|
||||
uci add shortcutmenu lists
|
||||
uci set shortcutmenu.@lists[-1].webname="$IMAGE_NAME"
|
||||
uci set shortcutmenu.@lists[-1].weburl="$LAN_IP:$port"
|
||||
uci set shortcutmenu.@lists[-1].webpath="/"
|
||||
uci commit shortcutmenu
|
||||
|
||||
}
|
||||
|
||||
usage() {
|
||||
echo "usage: $0 sub-command"
|
||||
echo "where sub-command is one of:"
|
||||
echo " install Install searxng"
|
||||
echo " upgrade Upgrade searxng"
|
||||
echo " rm/start/stop/restart Remove/Start/Stop/Restart searxng"
|
||||
echo " status searxng status"
|
||||
echo " port searxng port"
|
||||
}
|
||||
|
||||
case ${ACTION} in
|
||||
"install")
|
||||
get_image
|
||||
do_install_detail
|
||||
;;
|
||||
"upgrade")
|
||||
get_image
|
||||
do_install_detail
|
||||
;;
|
||||
"rm")
|
||||
docker rm -f searxng
|
||||
;;
|
||||
"start" | "stop" | "restart")
|
||||
docker ${ACTION} searxng
|
||||
;;
|
||||
"status")
|
||||
docker ps --all -f 'name=searxng' --format '{{.State}}'
|
||||
;;
|
||||
"port")
|
||||
docker ps --all -f 'name=searxng' --format '{{.Ports}}' | grep -om1 '0.0.0.0:[0-9]*' | sed 's/0.0.0.0://'
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
@ -0,0 +1,11 @@
|
||||
{
|
||||
"luci-app-searxng": {
|
||||
"description": "Grant UCI access for luci-app-searxng",
|
||||
"read": {
|
||||
"uci": [ "searxng" ]
|
||||
},
|
||||
"write": {
|
||||
"uci": [ "searxng" ]
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue