From 13384d4c5122996327371f7bc446dd2ad25167b0 Mon Sep 17 00:00:00 2001 From: Beginner <70857188+Beginner-Go@users.noreply.github.com> Date: Thu, 21 Oct 2021 11:04:25 +0800 Subject: [PATCH] rclone: sync upstream (#8082) Co-authored-by: Elon Huang --- package/lean/luci-app-rclone/Makefile | 26 +------ package/lean/rclone-ng/Makefile | 8 +- package/lean/rclone-webui-react/Makefile | 8 +- package/lean/rclone/Makefile | 27 +++++-- package/lean/rclone/files/rclone.config | 1 + package/lean/rclone/files/rclone.init | 99 ++++++++++++------------ 6 files changed, 83 insertions(+), 86 deletions(-) diff --git a/package/lean/luci-app-rclone/Makefile b/package/lean/luci-app-rclone/Makefile index 888779e76..5960bc0a9 100644 --- a/package/lean/luci-app-rclone/Makefile +++ b/package/lean/luci-app-rclone/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-rclone PKG_VERSION:=1.4.1 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_LICENSE:=GPLv3.0+ PKG_MAINTAINER:=ElonH @@ -17,13 +17,9 @@ PKG_CONFIG_DEPENDS:= \ LUCI_TITLE:=LuCI support for Rclone LUCI_PKGARCH:=all -LUCI_DEPENDS:=+rclone \ +LUCI_DEPENDS:=+rclone-config \ +PACKAGE_$(PKG_NAME)_INCLUDE_rclone-webui:rclone-webui-react \ +PACKAGE_$(PKG_NAME)_INCLUDE_rclone-ng:rclone-ng - -define Package/$(PKG_NAME)/conffiles -/etc/config/rclone -endef define Package/$(PKG_NAME)/config config PACKAGE_$(PKG_NAME)_INCLUDE_rclone-webui @@ -35,24 +31,6 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_rclone-ng default y endef -define Package/$(PKG_NAME)/conffiles -/etc/config/rclone -endef - -define Package/$(PKG_NAME)/description - LuCI support for Rclone. - 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 - include $(TOPDIR)/feeds/luci/luci.mk # call BuildPackage - OpenWrt buildroot signature diff --git a/package/lean/rclone-ng/Makefile b/package/lean/rclone-ng/Makefile index 8ba174934..184fbf495 100644 --- a/package/lean/rclone-ng/Makefile +++ b/package/lean/rclone-ng/Makefile @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-3.0-or-later # -# Copyright (C) 2020 ElonH +# Copyright (C) 2020 Elon Huang +# Copyright (C) 2021 ImmortalWrt.org include $(TOPDIR)/rules.mk @@ -14,7 +15,8 @@ PKG_HASH:=0b4916ddd0bacb5b358dc8d36b64c30f4182c0ace3eb06cda94b6578c419dcd9 PKG_LICENSE:=MIT PKG_LICENSE_FILE:=LICENSE -PKG_MAINTAINER:=ElonH +PKG_MAINTAINER:=Elon Huang \ + Tianling Shen include $(INCLUDE_DIR)/package.mk @@ -26,7 +28,7 @@ define Package/rclone-ng SUBMENU:=Cloud Manager TITLE:=An angular web application for rclone URL:=https://github.com/ElonH/RcloneNg - DEPENDS:=+rclone + DEPENDS:=+rclone-config PKGARCH:=all endef diff --git a/package/lean/rclone-webui-react/Makefile b/package/lean/rclone-webui-react/Makefile index b8a73d475..d2adee888 100644 --- a/package/lean/rclone-webui-react/Makefile +++ b/package/lean/rclone-webui-react/Makefile @@ -1,6 +1,7 @@ # SPDX-Identifier-License: GPL-3.0-or-later # -# Copyright (C) 2019 ElonH +# Copyright (C) 2019 Elon Huang +# Copyright (C) 2021 ImmortalWrt.org include $(TOPDIR)/rules.mk @@ -14,7 +15,8 @@ PKG_HASH:=afd6836ecc5c5a1161e25cb0633c1167eb5933bb5069545680d69fcba635f011 PKG_LICENSE:=MIT PKG_LICENSE_FILE:=LICENSE -PKG_MAINTAINER:=ElonH +PKG_MAINTAINER:=Elon Huang \ + Tianling Shen include $(INCLUDE_DIR)/package.mk @@ -26,7 +28,7 @@ define Package/rclone-webui-react SUBMENU:=Cloud Manager TITLE:=A reactjs based web UI for rclone URL:=https://github.com/rclone/rclone-webui-react - DEPENDS:=+rclone + DEPENDS:=+rclone-config PKGARCH:=all endef diff --git a/package/lean/rclone/Makefile b/package/lean/rclone/Makefile index cd0b2fbf2..64ccbc8e6 100644 --- a/package/lean/rclone/Makefile +++ b/package/lean/rclone/Makefile @@ -1,6 +1,7 @@ # SPDX-Identifier-License: GPL-3.0-or-later # -# Copyright (C) 2019 ElonH +# Copyright (C) 2019 Elon Huang +# Copyright (C) 2021 ImmortalWrt.org include $(TOPDIR)/rules.mk @@ -14,7 +15,8 @@ PKG_HASH:=a5b0b7dfe17d9ec74e3a33415eec4331c61d800d8823621e61c6164e8f88c567 PKG_LICENSE:=MIT PKG_LICENSE_FILE:=LICENSE -PKG_MAINTAINER:=ElonH +PKG_MAINTAINER:=Elon Huang \ + Tianling Shen PKG_CONFIG_DEPENDS:= \ CONFIG_RCLONE_COMPRESS_GOPROXY \ @@ -36,13 +38,23 @@ GO_PKG_LDFLAGS_X:= \ include $(INCLUDE_DIR)/package.mk include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk -define Package/rclone +define Package/rclone/Default SECTION:=net CATEGORY:=Network SUBMENU:=File Transfer TITLE:=rsync for cloud storage URL:=https://rclone.org +endef + +define Package/rclone + $(call Package/rclone/Default) DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle +fuse-utils + USERID:=rclone:rclone +endef + +define Package/rclone-config + TITLE+= (Config Scripts) + DEPENDS:=+rclone endef define Package/rclone/description @@ -65,7 +77,7 @@ ifeq ($(CONFIG_RCLONE_COMPRESS_GOPROXY),y) export GOPROXY=https://goproxy.baidu.com endif -define Package/rclone/conffiles +define Package/rclone-config/conffiles /etc/config/rclone endef @@ -80,8 +92,12 @@ endif endef define Package/rclone/install - $(call GoPackage/Package/Install/Bin,$(1)) + $(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR)) + $(INSTALL_DIR) $(1)/usr/bin/ + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/rclone $(1)/usr/bin/ +endef +define Package/rclone-config/install $(INSTALL_DIR) $(1)/etc/config/ $(INSTALL_CONF) $(CURDIR)/files/rclone.config $(1)/etc/config/rclone $(INSTALL_DIR) $(1)/etc/init.d/ @@ -90,3 +106,4 @@ endef $(eval $(call GoBinPackage,rclone)) $(eval $(call BuildPackage,rclone)) +$(eval $(call BuildPackage,rclone-config)) diff --git a/package/lean/rclone/files/rclone.config b/package/lean/rclone/files/rclone.config index 1440200ca..655eb5b79 100644 --- a/package/lean/rclone/files/rclone.config +++ b/package/lean/rclone/files/rclone.config @@ -15,3 +15,4 @@ config proxy 'proxy' config log 'log' option path '/var/log/rclone/output' + diff --git a/package/lean/rclone/files/rclone.init b/package/lean/rclone/files/rclone.init index cc61ccdb1..51c0060f7 100755 --- a/package/lean/rclone/files/rclone.init +++ b/package/lean/rclone/files/rclone.init @@ -1,12 +1,13 @@ #!/bin/sh /etc/rc.common -# Copyright (C) 2019 ElonH +# Copyright (C) 2019 Elon Huang USE_PROCD=1 + START=95 STOP=10 -APP=rclone -CONFIGURATION=rclone +APP="rclone" +CONFIGURATION="rclone" _info() { logger -p daemon.info -t "$APP" "$*" @@ -16,86 +17,82 @@ _err() { logger -p daemon.err -t "$APP" "$*" } -init_config() { +start_service() { config_load "${CONFIGURATION}" - # Create rclone dirs - local config_path - local config_dir - local log_path - local log_dir + + local enabled + config_get_bool enabled global enabled + if [ "$enabled" -ne "1" ]; then + _info 'Instance "rclone" is disabled.' + return 1 + else + _info 'Instance "rclone" is starting.' + fi + + local config_path log_path + local addr addr_type port + local username password + local proxy_enable proxy_addr config_get config_path config config_path config_get log_path log path - config_dir=${config_path%/*} - [ -d "$config_dir" ] || mkdir -p "$config_dir" 2>/dev/null - - [ -f "$config_path" ] || touch "$config_path" - - [ -d "/lib/upgrade/keep.d" ] || mkdir -p /lib/upgrade/keep.d/luci-app-rclone 2>/dev/null - echo "$config_path" > /lib/upgrade/keep.d/luci-app-rclone - - log_dir=${log_path%/*} - [ -d "$log_dir" ] || mkdir -p "$log_dir" 2>/dev/null && echo /dev/null > "$log_path" - - -} - -start_service() { - init_config - - local enabled - local config_path - local addr_type - local port - local username - local password - local proxy_enable - local proxy_addr - local log_path - - config_get enabled global enabled - - 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 proxy_enable proxy enabled + config_get_bool proxy_enable proxy enabled config_get proxy_addr proxy proxy_addr - config_get log_path log path - - if [[ "${addr_type}" == "local" ]]; then + if [ "${addr_type}" = "local" ]; then addr="$(uci get network.loopback.ipaddr)" - elif [[ "${addr_type}" == "lan" ]]; then + elif [ "${addr_type}" = "lan" ]; then addr="$(uci get network.lan.ipaddr)" - elif [[ "${addr_type}" == "all" ]]; then + else addr="" fi - [ "$enabled" == "1" ] || { _info "Instance \"rclone\" disabled."; return 1; } - _info "Instance \"rclone\" start." + + local config_dir="${config_path%/*}" + [ -d "$config_dir" ] || mkdir -p "$config_dir" + touch "${config_path}" + chown rclone "${config_path}" + + [ -d "/lib/upgrade/keep.d" ] || mkdir -p "/lib/upgrade/keep.d/" + echo "$config_path" > "/lib/upgrade/keep.d/luci-app-rclone" + + local log_dir="${log_path%/*}" + [ -d "$log_dir" ] || mkdir -p "$log_dir" + chown -R rclone:rclone "$log_dir" + procd_open_instance + procd_set_param command /usr/bin/$APP rcd -vv procd_append_param command "--rc-addr=$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}" - if [[ "${proxy_enable}" == "1" ]]; then + if [ "${proxy_enable}" -eq "1" ]; then procd_set_param env all_proxy="$proxy_addr" https_proxy="$proxy_addr" http_proxy="$proxy_addr" procd_append_param env ALL_PROXY="$proxy_addr" HTTPS_PROXY="$proxy_addr" HTTP_PROXY="$proxy_addr" fi + 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 respawn + procd_set_param user rclone procd_set_param group rclone - procd_set_param respawn retry=60 - procd_close_instance + procd_close_instance +} + +reload_service() { + stop + start } service_triggers() {