diff --git a/README.md b/README.md index c76236cb90..8b66d5ae36 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,8 @@ luci-app-dockerman source: [lisaac/luci-app-dockerman](https://github.com/lisaac luci-lib-docker source: [lisaac/luci-lib-docker](https://github.com/lisaac/luci-lib-docker).
openwrt-iptvhelper source: [riverscn/openwrt-iptvhelper](https://github.com/riverscn/openwrt-iptvhelper).
luci-app-autoipsetadder source: [rufengsuixing/luci-app-autoipsetadder](https://github.com/rufengsuixing/luci-app-autoipsetadder).
-luci-app-adguardhome source: [rufengsuixing/luci-app-adguardhome](https://github.com/rufengsuixing/luci-app-adguardhome). +luci-app-adguardhome source: [rufengsuixing/luci-app-adguardhome](https://github.com/rufengsuixing/luci-app-adguardhome).
+Rclone-OpenWrt source:[ElonH/Rclone-OpenWrt](https://github.com/ElonH/Rclone-OpenWrt). # License ### [GPL v3](https://www.gnu.org/licenses/gpl-3.0.html). diff --git a/package/ctcgfw/luci-app-rclone/Makefile b/package/ctcgfw/luci-app-rclone/Makefile new file mode 100644 index 0000000000..803185b6ac --- /dev/null +++ b/package/ctcgfw/luci-app-rclone/Makefile @@ -0,0 +1,23 @@ +#### + # File: /Makefile + # Project: luci-app-rclone + # File Created: Wednesday, 9th October 2019 1:39:36 pm + # Author: ElonH[EH](elonhhuang@gmail.com) + # License: GNU General Public License v3.0 or later(http://www.gnu.org/licenses/gpl-3.0-standalone.html) + # Copyright (C) 2019 [ElonH] +#### + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI support for Rclone +LUCI_DEPENDS:=+rclone +rclone-webui-react +LUCI_PKGARCH:=all +PKG_NAME:=luci-app-rclone +PKG_VERSION:=1.0.0 +PKG_RELEASE:=1 +PKG_LICENSE:=GPLv3.0+ +PKG_MAINTAINER:=ElonH + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature \ No newline at end of file diff --git a/package/ctcgfw/luci-app-rclone/luasrc/controller/rclone.lua b/package/ctcgfw/luci-app-rclone/luasrc/controller/rclone.lua new file mode 100644 index 0000000000..02929e04a9 --- /dev/null +++ b/package/ctcgfw/luci-app-rclone/luasrc/controller/rclone.lua @@ -0,0 +1,8 @@ +module("luci.controller.rclone", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/rclone") then + return + end + entry({"admin", "services", "rclone"}, cbi("rclone"), _("Rclone"), 100 ).dependent = false +end diff --git a/package/ctcgfw/luci-app-rclone/luasrc/model/cbi/rclone.lua b/package/ctcgfw/luci-app-rclone/luasrc/model/cbi/rclone.lua new file mode 100644 index 0000000000..b0ee29ef5c --- /dev/null +++ b/package/ctcgfw/luci-app-rclone/luasrc/model/cbi/rclone.lua @@ -0,0 +1,93 @@ +require('luci.sys') +require('luci.util') +require('luci.model.ipkg') +local fs = require 'nixio.fs' + +local uci = require 'luci.model.uci'.cursor() + +local m, s + +local running = (luci.sys.call('pidof rclone > /dev/null') == 0) + +local state_msg = '' +local trport = uci:get('rclone', 'config', 'port') + +if running then + state_msg = '' .. translate('rclone运行中') .. '' +else + state_msg = '' .. translate('rclone未运行') .. '' +end + +m = + Map( + 'rclone', + translate('Rclone'), + translate('Rclone是一款的命令行工具,支持在不同对象存储、网盘间同步、上传、下载数据。') .. + '

' .. + translate('rclone运行状态') .. + ' : ' .. + state_msg .. + '

' .. + translate('已安装的WEB界面') .. + '      

" +) + +s = m:section(TypedSection, 'global', translate('全局')) +s.addremove = false +s.anonymous = true + +enable = s:option(Flag, 'enabled', translate('启用 Rclone 后台服务')) +enable.rmempty = false + +-- user = s:option(ListValue, 'user', translate('以此用户权限运行')) +-- local p_user +-- for _, p_user in luci.util.vspairs(luci.util.split(luci.sys.exec('cat /etc/passwd | cut -f 1 -d :'))) do +-- user:value(p_user) +-- end +-- TODO: user add rclone + +s = m:section(TypedSection, 'conf', translate('配置')) +s.addremove = false +s.anonymous = true + +o = s:option(ListValue, 'addr_type', translate('监听地址')) +o:value('local', translate('监听本机地址')) +o:value('lan', translate('监听局域网地址')) +o:value('wan', translate('监听全部地址')) +o.default = 'lan' +o.rmempty = false + +o = s:option(Value, 'port', translate('监听端口')) +o.placeholder = 5572 +o.default = 5572 +o.datatype = 'port' +o.rmempty = false + +o = s:option(Value, 'config_path', translate('配置文件路径')) +o.placeholder = '/etc/rclone/rclone.conf' +o.default = '/etc/rclone/rclone.conf' +o.rmempty = false + +o = s:option(Value, 'username', translate('用户名')) +o.placeholder = 'admin' +o.default = 'admin' +o.rmempty = false + +o = s:option(Value, 'password', translate('密码')) +o.password = true +o.placeholder = 'admin' +o.default = 'admin' +o.rmempty = false + +s = m:section(TypedSection, 'log', translate('日志')) +s.addremove = false +s.anonymous = true + +o = s:option(Value, 'path', translate('路径')) +o.placeholder = '/var/log/rclone/output' +o.default = '/var/log/rclone/output' +o.rmempty = false + +return m diff --git a/package/ctcgfw/luci-app-rclone/root/etc/config/rclone b/package/ctcgfw/luci-app-rclone/root/etc/config/rclone new file mode 100644 index 0000000000..bba02888c8 --- /dev/null +++ b/package/ctcgfw/luci-app-rclone/root/etc/config/rclone @@ -0,0 +1,14 @@ + +config global 'global' + option enabled '0' + option user 'rclone' + +config conf 'config' + option config_path '/etc/rclone/rclone.conf' + option port '5572' + option username 'admin' + option password 'admin' + option addr_type 'lan' + +config log 'log' + option path '/var/log/rclone/output' diff --git a/package/ctcgfw/luci-app-rclone/root/etc/init.d/rclone b/package/ctcgfw/luci-app-rclone/root/etc/init.d/rclone new file mode 100755 index 0000000000..b8d7d30f80 --- /dev/null +++ b/package/ctcgfw/luci-app-rclone/root/etc/init.d/rclone @@ -0,0 +1,90 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2019 ElonH + +USE_PROCD=1 +START=95 +STOP=10 + +APP=rclone +CONFIGURATION=rclone + +_info() { + logger -p daemon.info -t "$APP" "$*" +} + +_err() { + logger -p daemon.err -t "$APP" "$*" +} + +init_config() { + config_load "${CONFIGURATION}" + # Create rclone dirs + local config_path + local config_dir + local log_path + local log_dir + + config_get config_path config config_path + config_get log_path log path + + config_dir=${config_path%/*} + [ -d $config_dir ] || mkdir -p $config_dir + + log_dir=${log_path%/*} + [ -d $log_dir ] || mkdir -p $log_dir && echo /dev/null > $log_path + + +} + +start_service() { + init_config + + local enabled + local config_path + local addr_type + local port + local username + local password + + local user + + local log_path + + config_get enabled global enabled + config_get user global user + + config_get config_path config config_path + config_get addr_type config addr_type + config_get port config port + config_get username config username + config_get password config password + + + config_get log_path log path + + if [ "${addr_type}" == "local" ]; then + addr="$(uci get network.loopback.ipaddr)" + elif [ "${addr_type}" == "lan" ]; then + addr="$(uci get network.lan.ipaddr)" + elif [ "${addr_type}" == "wan" ]; then + addr="" + fi + [ "$enabled" == "1" ] || { _info "Instance \"rclone\" disabled."; return 1; } + _info "Instance \"rclone\" start." + procd_open_instance + procd_set_param command /usr/bin/$APP rcd -vv + procd_append_param command --rc-addr=:${port} + procd_append_param command --rc-user=${username} --rc-pass=${password} + procd_append_param command --config=${config_path} + procd_append_param command --rc-allow-origin=* + procd_append_param command --log-file=${log_path} + procd_set_param stdout 1 + procd_set_param stderr 1 + procd_set_param file /etc/config/rclone + # procd_set_param pidfile /var/run/rclone.pid + procd_set_param user $user + procd_set_param group rclone + procd_set_param respawn retry=60 + procd_close_instance + +} diff --git a/package/ctcgfw/luci-app-rclone/root/etc/uci-defaults/100_luci-rclone b/package/ctcgfw/luci-app-rclone/root/etc/uci-defaults/100_luci-rclone new file mode 100755 index 0000000000..3d7a46247c --- /dev/null +++ b/package/ctcgfw/luci-app-rclone/root/etc/uci-defaults/100_luci-rclone @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@rclone[-1] + add ucitrack rclone + set ucitrack.@rclone[-1].init=rclone + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/package/ctcgfw/rclone-webui-react/Makefile b/package/ctcgfw/rclone-webui-react/Makefile new file mode 100644 index 0000000000..826b2ec72c --- /dev/null +++ b/package/ctcgfw/rclone-webui-react/Makefile @@ -0,0 +1,58 @@ +#### + # File: /Makefile + # Project: rclone-webui-react + # File Created: Thursday, 10th October 2019 5:57:39 pm + # Author: ElonH[EH](elonhhuang@gmail.com) + # License: GNU General Public License v3.0 or later(http://www.gnu.org/licenses/gpl-3.0-standalone.html) + # Copyright (C) 2019 [ElonH] +#### + +include $(TOPDIR)/rules.mk + +PKG_NAME:=rclone-webui-react +PKG_VERSION:=0.0.8 +PKG_RELEASE:=1 + + +PKG_LICENSE:=GPLv3 +PKG_MAINTAINER:=ElonH + +include $(INCLUDE_DIR)/package.mk + +PKG_SOURCE:=currentbuild.zip +PKG_SOURCE_URL:=https://github.com/rclone/rclone-webui-react/releases/download/v$(PKG_VERSION)/ +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) +PKG_HASH:=8f09d67ddbd8923a8f57ea05dc6b82a711a65eed926a6bc61c1a88a13d960839 + +define Package/$(PKG_NAME) + SECTION:=net + CATEGORY:=Network + SUBMENU:=File Transfer + SUBMENU:=Cloud Manager + TITLE:=A reactjs based web UI for rclone + URL:=https://github.com/rclone/rclone-webui-react + PKGARCH:=all +endef + +define Package/$(PKG_NAME)/description + A full fledged UI for the rclone cloud sync tool. +endef + +define Build/Prepare + mkdir -vp $(PKG_BUILD_DIR) + unzip -od $(PKG_BUILD_DIR) $(DL_DIR)/$(PKG_SOURCE) +endef + +define Build/Configure +endef + +define Build/Compile + echo "$(PKG_NAME) Compile Skiped!" +endef + +define Package/$(PKG_NAME)/install + $(INSTALL_DIR) $(1)/www/rclone-webui-react + $(CP) $(PKG_BUILD_DIR)/build/* $(1)/www/rclone-webui-react +endef + +$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/package/ctcgfw/rclone/Makefile b/package/ctcgfw/rclone/Makefile new file mode 100644 index 0000000000..73b85989e2 --- /dev/null +++ b/package/ctcgfw/rclone/Makefile @@ -0,0 +1,74 @@ +#### + # File: /Makefile + # Project: rclone + # File Created: Friday, 11th October 2019 4:50:49 pm + # Author: ElonH[EH](elonhhuang@gmail.com) + # License: GNU General Public License v3.0 or later(http://www.gnu.org/licenses/gpl-3.0-standalone.html) + # Copyright (C) 2019 [ElonH] +#### + +include $(TOPDIR)/rules.mk + +PKG_NAME:=rclone +PKG_VERSION:=1.49.5 +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/rclone/rclone.git +PKG_SOURCE_VERSION:=5d3323605080509cf53de5980443c6d02fd50a48 +PKG_SOURCE_DATE:=20191011 + +PKG_LICENSE:=GPLv3 +PKG_MAINTAINER:=ElonH + +PKG_BUILD_DEPENDS:=golang/host +PKG_BUILD_PARALLEL:=1 +PKG_USE_MIPS16:=0 # https://github.com/openwrt/packages/issues/8498 +GO_PKG:=github.com/rclone/rclone +GO_PKG_EXCLUDES:=test + +include $(INCLUDE_DIR)/package.mk +include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk + +# GO_PKG_LDFLAGS:= +GO_PKG_LDFLAGS_X:=\ + github.com/rclone/rclone/fs.Version=v$(PKG_VERSION)_$(PKG_SOURCE_DATE)\ + main.Version=v$(PKG_VERSION) \ + main.BuildUser=openwrt \ + main.BuildHost=openwrt \ + main.BuildStamp=$(SOURCE_DATE_EPOCH) + +define Package/$(PKG_NAME) + SECTION:=utils + CATEGORY:=Utilities + TITLE:=rsync for cloud storage. + URL:=https://rclone.org + DEPENDS:=$(GO_ARCH_DEPENDS) +endef + +define Package/$(PKG_NAME)/description +Rclone ("rsync for cloud storage") is a command line program to sync root/usr/bin and directories to and from different cloud storage providers. +Cloud storage providers: + 1Fichier, Alibaba Cloud (Aliyun) Object Storage System (OSS), Amazon Drive, Amazon S3, + Backblaze B2, Box, Ceph, C14, DigitalOcean Spaces, Dreamhost, Dropbox, FTP, + Google Cloud Storage, Google Drive, Google Photos, HTTP, Hubic, Jottacloud, + IBM COS S3, Koofr, Memset Memstore, Mega, Microsoft Azure Blob Storage, + Microsoft OneDrive, Minio, Nextcloud, OVH, OpenDrive, Openstack Swift, + Oracle Cloud Storage, ownCloud, pCloud, premiumize.me, put.io, QingStor, + Rackspace Cloud root/usr/bin, rsync.net, Scaleway, SFTP, Wasabi, WebDAV, + Yandex Disk, The local root/usr/binystem. +endef + +define Package/$(PKG_NAME)/install + # echo "++++++++++++++++++" + # echo "$(PKG_INSTALL_DIR)" + # echo "$(1)" + # echo "$(GO_PKG_BUILD_BIN_DIR)" + # echo "++++++++++++++++++" + + $(INSTALL_DIR) $(1)/usr/bin/ + $(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/rclone $(1)/usr/bin/ +endef + +$(eval $(call GoBinPackage,$(PKG_NAME))) +$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/package/ctcgfw/rclone/patches/000-disable-plugins.patch b/package/ctcgfw/rclone/patches/000-disable-plugins.patch new file mode 100644 index 0000000000..34b6486592 --- /dev/null +++ b/package/ctcgfw/rclone/patches/000-disable-plugins.patch @@ -0,0 +1,22 @@ +## +# File: /patches/000-disable-plugins.patch +# Project: rclone +# Created Date: Wednesday, January 1st 2020, 1:49:43 pm +# Author: ElonH[EH](elonhhuang@gmail.com) +# License: GNU General Public License v3.0 or later(http://www.gnu.org/licenses/gpl-3.0-standalone.html) +# Copyright (C) 2019 [ElonH] +## +# refs: https://github.com/openwrt/packages/issues/10864#issuecomment-569921457 +diff --git a/rclone.go b/rclone.go +index 74fde16ab..9a9ba9150 100644 +--- a/rclone.go ++++ b/rclone.go +@@ -7,7 +7,7 @@ import ( + _ "github.com/rclone/rclone/backend/all" // import all backends + "github.com/rclone/rclone/cmd" + _ "github.com/rclone/rclone/cmd/all" // import all commands +- _ "github.com/rclone/rclone/lib/plugin" // import plugins ++ // _ "github.com/rclone/rclone/lib/plugin" // import plugins + ) + + func main() {