From fc1b9acad36b997a2a62954a45c576fb409834f6 Mon Sep 17 00:00:00 2001 From: AmadeusGhost <42570690+AmadeusGhost@users.noreply.github.com> Date: Sat, 6 Nov 2021 23:01:20 +0800 Subject: [PATCH] Revert "import luci-app-diskman and luci-app-diskman from lisaac" This reverts commit dbf4b59e8eb6845b7d7c46ec823bc5da2a01e39d. --- package/lean/lisaac/luci-app-diskman/Makefile | 88 -- .../lean/lisaac/luci-app-diskman/depends.lst | 1 - .../luasrc/controller/diskman.lua | 155 --- .../luasrc/model/cbi/diskman/btrfs.lua | 210 ---- .../luasrc/model/cbi/diskman/disks.lua | 327 ------ .../luasrc/model/cbi/diskman/partition.lua | 366 ------ .../luci-app-diskman/luasrc/model/diskman.lua | 738 ------------ .../view/diskman/cbi/disabled_button.htm | 7 - .../luasrc/view/diskman/cbi/format_button.htm | 7 - .../luasrc/view/diskman/cbi/inlinebutton.htm | 7 - .../luasrc/view/diskman/cbi/xnullsection.htm | 37 - .../luasrc/view/diskman/cbi/xsimpleform.htm | 88 -- .../luasrc/view/diskman/disk_info.htm | 108 -- .../luasrc/view/diskman/partition_info.htm | 129 --- .../luasrc/view/diskman/smart_detail.htm | 79 -- .../lisaac/luci-app-diskman/po/pl/diskman.po | 239 ---- .../luci-app-diskman/po/zh-cn/diskman.po | 239 ---- .../lean/lisaac/luci-app-diskman/po/zh_Hans | 1 - .../lean/lisaac/luci-app-dockerman/Makefile | 21 - .../lisaac/luci-app-dockerman/depends.lst | 1 - .../po/templates/dockerman.pot | 1002 ----------------- .../lean/lisaac/luci-app-dockerman/po/zh_Hans | 1 - .../share/rpcd/acl.d/luci-app-dockerman.json | 11 - .../postinst => luci-app-dockerman/Makefile} | 18 +- .../resources/dockerman/containers.svg | 0 .../resources/dockerman/file-icon.png | Bin .../resources/dockerman/file-manager.css | 0 .../resources/dockerman/folder-icon.png | Bin .../resources/dockerman/images.svg | 0 .../resources/dockerman/link-icon.png | Bin .../resources/dockerman/networks.svg | 0 .../resources/dockerman/tar.min.js | 0 .../resources/dockerman/volumes.svg | 0 .../luasrc/controller/dockerman.lua | 18 +- .../model/cbi/dockerman/configuration.lua | 0 .../luasrc/model/cbi/dockerman/container.lua | 20 +- .../luasrc/model/cbi/dockerman/containers.lua | 12 +- .../luasrc/model/cbi/dockerman/images.lua | 6 +- .../luasrc/model/cbi/dockerman/networks.lua | 2 +- .../model/cbi/dockerman/newcontainer.lua | 32 +- .../luasrc/model/cbi/dockerman/newnetwork.lua | 2 +- .../luasrc/model/cbi/dockerman/overview.lua | 2 +- .../luasrc/model/cbi/dockerman/volumes.lua | 5 +- .../luasrc/model/docker.lua | 3 - .../luasrc/view/dockerman/apply_widget.htm | 0 .../view/dockerman/cbi/inlinebutton.htm | 0 .../luasrc/view/dockerman/cbi/inlinevalue.htm | 0 .../view/dockerman/cbi/namedsection.htm | 0 .../luasrc/view/dockerman/cbi/xfvalue.htm | 0 .../luasrc/view/dockerman/container.htm | 2 +- .../view/dockerman/container_console.htm | 0 .../view/dockerman/container_file_manager.htm | 3 +- .../luasrc/view/dockerman/container_stats.htm | 0 .../dockerman/containers_running_stats.htm | 0 .../luasrc/view/dockerman/images_import.htm | 2 +- .../luasrc/view/dockerman/images_load.htm | 2 +- .../luasrc/view/dockerman/logs.htm | 0 .../view/dockerman/newcontainer_resolve.htm | 2 +- .../luasrc/view/dockerman/overview.htm | 0 .../luasrc/view/dockerman/volume_size.htm | 0 .../luci-app-dockerman/po/zh-cn/dockerman.po | 0 .../root/etc/init.d/dockerman | 2 +- .../root/etc/uci-defaults/luci-app-dockerman | 0 63 files changed, 70 insertions(+), 3925 deletions(-) delete mode 100644 package/lean/lisaac/luci-app-diskman/Makefile delete mode 100644 package/lean/lisaac/luci-app-diskman/depends.lst delete mode 100644 package/lean/lisaac/luci-app-diskman/luasrc/controller/diskman.lua delete mode 100644 package/lean/lisaac/luci-app-diskman/luasrc/model/cbi/diskman/btrfs.lua delete mode 100644 package/lean/lisaac/luci-app-diskman/luasrc/model/cbi/diskman/disks.lua delete mode 100644 package/lean/lisaac/luci-app-diskman/luasrc/model/cbi/diskman/partition.lua delete mode 100644 package/lean/lisaac/luci-app-diskman/luasrc/model/diskman.lua delete mode 100644 package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/disabled_button.htm delete mode 100644 package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/format_button.htm delete mode 100644 package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/inlinebutton.htm delete mode 100644 package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/xnullsection.htm delete mode 100644 package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/xsimpleform.htm delete mode 100644 package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/disk_info.htm delete mode 100644 package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/partition_info.htm delete mode 100644 package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/smart_detail.htm delete mode 100644 package/lean/lisaac/luci-app-diskman/po/pl/diskman.po delete mode 100644 package/lean/lisaac/luci-app-diskman/po/zh-cn/diskman.po delete mode 120000 package/lean/lisaac/luci-app-diskman/po/zh_Hans delete mode 100644 package/lean/lisaac/luci-app-dockerman/Makefile delete mode 100644 package/lean/lisaac/luci-app-dockerman/depends.lst delete mode 100644 package/lean/lisaac/luci-app-dockerman/po/templates/dockerman.pot delete mode 120000 package/lean/lisaac/luci-app-dockerman/po/zh_Hans delete mode 100644 package/lean/lisaac/luci-app-dockerman/root/usr/share/rpcd/acl.d/luci-app-dockerman.json rename package/lean/{lisaac/luci-app-dockerman/postinst => luci-app-dockerman/Makefile} (67%) rename package/lean/{lisaac => }/luci-app-dockerman/htdocs/luci-static/resources/dockerman/containers.svg (100%) rename package/lean/{lisaac => }/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-icon.png (100%) rename package/lean/{lisaac => }/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-manager.css (100%) rename package/lean/{lisaac => }/luci-app-dockerman/htdocs/luci-static/resources/dockerman/folder-icon.png (100%) rename package/lean/{lisaac => }/luci-app-dockerman/htdocs/luci-static/resources/dockerman/images.svg (100%) rename package/lean/{lisaac => }/luci-app-dockerman/htdocs/luci-static/resources/dockerman/link-icon.png (100%) rename package/lean/{lisaac => }/luci-app-dockerman/htdocs/luci-static/resources/dockerman/networks.svg (100%) rename package/lean/{lisaac => }/luci-app-dockerman/htdocs/luci-static/resources/dockerman/tar.min.js (100%) rename package/lean/{lisaac => }/luci-app-dockerman/htdocs/luci-static/resources/dockerman/volumes.svg (100%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/controller/dockerman.lua (98%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua (100%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua (96%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua (91%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua (95%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua (98%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua (96%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua (99%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua (98%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua (97%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/model/docker.lua (99%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm (100%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinebutton.htm (100%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm (100%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/view/dockerman/cbi/namedsection.htm (100%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/view/dockerman/cbi/xfvalue.htm (100%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/view/dockerman/container.htm (99%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/view/dockerman/container_console.htm (100%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm (99%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm (100%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/view/dockerman/containers_running_stats.htm (100%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/view/dockerman/images_import.htm (99%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/view/dockerman/images_load.htm (98%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/view/dockerman/logs.htm (100%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm (81%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/view/dockerman/overview.htm (100%) rename package/lean/{lisaac => }/luci-app-dockerman/luasrc/view/dockerman/volume_size.htm (100%) rename package/lean/{lisaac => }/luci-app-dockerman/po/zh-cn/dockerman.po (100%) rename package/lean/{lisaac => }/luci-app-dockerman/root/etc/init.d/dockerman (98%) rename package/lean/{lisaac => }/luci-app-dockerman/root/etc/uci-defaults/luci-app-dockerman (100%) diff --git a/package/lean/lisaac/luci-app-diskman/Makefile b/package/lean/lisaac/luci-app-diskman/Makefile deleted file mode 100644 index e05d122d5..000000000 --- a/package/lean/lisaac/luci-app-diskman/Makefile +++ /dev/null @@ -1,88 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-diskman -PKG_VERSION:=v0.2.11 -PKG_RELEASE:=beta -PKG_MAINTAINER:=lisaac -PKG_LICENSE:=AGPL-3.0 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/lisaac/luci-app-diskman.git -PKG_SOURCE_VERSION:=$(PKG_VERSION) - -PKG_SOURCE_SUBDIR:=$(PKG_NAME) -PKG_SOURCE:=$(PKG_SOURCE_SUBDIR)-$(PKG_SOURCE_VERSION).tar.gz -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)/applications/luci-app-diskman - -include $(INCLUDE_DIR)/package.mk - -define Package/$(PKG_NAME)/config -config PACKAGE_$(PKG_NAME)_INCLUDE_btrfs_progs - depends on PACKAGE_$(PKG_NAME) - bool "Include btrfs-progs" - default y -config PACKAGE_$(PKG_NAME)_INCLUDE_lsblk - depends on PACKAGE_$(PKG_NAME) - bool "Include lsblk" - default y -config PACKAGE_$(PKG_NAME)_INCLUDE_mdadm - depends on PACKAGE_$(PKG_NAME) - bool "Include mdadm" - default n -config PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_raid456 - depends on PACKAGE_$(PKG_NAME)_INCLUDE_mdadm - bool "Include kmod-md-raid456" - default n -config PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_linear - depends on PACKAGE_$(PKG_NAME)_INCLUDE_mdadm - bool "Include kmod-md-linear" - default n -endef - -define Package/$(PKG_NAME) - SECTION:=luci - CATEGORY:=LuCI - SUBMENU:=3. Applications - TITLE:=Disk Manager interface for LuCI - PKGARCH:=all - DEPENDS:=+e2fsprogs +parted +smartmontools +blkid \ - +PACKAGE_$(PKG_NAME)_INCLUDE_btrfs_progs:btrfs-progs \ - +PACKAGE_$(PKG_NAME)_INCLUDE_lsblk:lsblk \ - +PACKAGE_$(PKG_NAME)_INCLUDE_mdadm:mdadm \ - +PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_raid456:mdadm \ - +PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_raid456:kmod-md-raid456 \ - +PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_linears:mdadm \ - +PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_linears:kmod-md-linear -endef - -define Package/$(PKG_NAME)/description - Disk Manager interface for LuCI -endef - -define Build/Prepare - tar -xzvf $(DL_DIR)/$(PKG_SOURCE) -C $(BUILD_DIR) -endef - -define Build/Compile -endef - -define Package/$(PKG_NAME)/postinst -#!/bin/sh -rm -fr /tmp/luci-indexcache /tmp/luci-modulecache -endef - -define Package/$(PKG_NAME)/install - # $(INSTALL_DIR) $(1)/ - # cp -pR $(PKG_BUILD_DIR)/root/* $(1)/ - # $(INSTALL_DIR) $(1)/www - # cp -pR $(PKG_BUILD_DIR)/htdoc/* $(1)/www - $(INSTALL_DIR) $(1)/usr/lib/lua/luci - cp -pR $(PKG_BUILD_DIR)/luasrc/* $(1)/usr/lib/lua/luci/ - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n - $$(foreach po,$$(shell find $(PKG_BUILD_DIR)/po/*/*.po), \ - po2lmo $$(po) \ - $(1)/usr/lib/lua/luci/i18n/diskman.$$(shell echo $$(po) | awk -F'/' '{print $$$$(NF-1)}').lmo;) - #po2lmo $(PKG_BUILD_DIR)/po/zh-cn/diskman.po $(1)/usr/lib/lua/luci/i18n/diskman.zh-cn.lmo -endef - -$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/package/lean/lisaac/luci-app-diskman/depends.lst b/package/lean/lisaac/luci-app-diskman/depends.lst deleted file mode 100644 index 6227107ba..000000000 --- a/package/lean/lisaac/luci-app-diskman/depends.lst +++ /dev/null @@ -1 +0,0 @@ -e2fsprogs parted smartmontools blkid mdadm btrfs-progs util-linux \ No newline at end of file diff --git a/package/lean/lisaac/luci-app-diskman/luasrc/controller/diskman.lua b/package/lean/lisaac/luci-app-diskman/luasrc/controller/diskman.lua deleted file mode 100644 index 1cf9bd03e..000000000 --- a/package/lean/lisaac/luci-app-diskman/luasrc/controller/diskman.lua +++ /dev/null @@ -1,155 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -require "luci.util" -module("luci.controller.diskman",package.seeall) - -function index() - -- check all used executables in disk management are existed - local CMD = {"parted", "blkid", "smartctl"} - local executables_all_existed = true - for _, cmd in ipairs(CMD) do - local command = luci.sys.exec("/usr/bin/which " .. cmd) - if not command:match(cmd) then - executables_all_existed = false - break - end - end - - if not executables_all_existed then return end - -- entry(path, target, title, order) - -- set leaf attr to true to pass argument throughe url (e.g. admin/system/disk/partition/sda) - entry({"admin", "system", "diskman"}, alias("admin", "system", "diskman", "disks"), _("Disk Man"), 55) - entry({"admin", "system", "diskman", "disks"}, form("diskman/disks"), nil).leaf = true - entry({"admin", "system", "diskman", "partition"}, form("diskman/partition"), nil).leaf = true - entry({"admin", "system", "diskman", "btrfs"}, form("diskman/btrfs"), nil).leaf = true - entry({"admin", "system", "diskman", "format_partition"}, call("format_partition"), nil).leaf = true - entry({"admin", "system", "diskman", "get_disk_info"}, call("get_disk_info"), nil).leaf = true - entry({"admin", "system", "diskman", "mk_p_table"}, call("mk_p_table"), nil).leaf = true - entry({"admin", "system", "diskman", "smartdetail"}, call("smart_detail"), nil).leaf = true - entry({"admin", "system", "diskman", "smartattr"}, call("smart_attr"), nil).leaf = true -end - -function format_partition() - local partation_name = luci.http.formvalue("partation_name") - local fs = luci.http.formvalue("file_system") - if not partation_name then - luci.http.status(500, "Partition NOT found!") - luci.http.write_json("Partition NOT found!") - return - elseif not nixio.fs.access("/dev/"..partation_name) then - luci.http.status(500, "Partition NOT found!") - luci.http.write_json("Partition NOT found!") - return - elseif not fs then - luci.http.status(500, "no file system") - luci.http.write_json("no file system") - return - end - local dm = require "luci.model.diskman" - code, msg = dm.format_partition(partation_name, fs) - luci.http.status(code, msg) - luci.http.write_json(msg) -end - -function get_disk_info(dev) - if not dev then - luci.http.status(500, "no device") - luci.http.write_json("no device") - return - elseif not nixio.fs.access("/dev/"..dev) then - luci.http.status(500, "no device") - luci.http.write_json("no device") - return - end - local dm = require "luci.model.diskman" - local device_info = dm.get_disk_info(dev) - luci.http.status(200, "ok") - luci.http.prepare_content("application/json") - luci.http.write_json(device_info) -end - -function mk_p_table() - local p_table = luci.http.formvalue("p_table") - local dev = luci.http.formvalue("dev") - if not dev then - luci.http.status(500, "no device") - luci.http.write_json("no device") - return - elseif not nixio.fs.access("/dev/"..dev) then - luci.http.status(500, "no device") - luci.http.write_json("no device") - return - end - local dm = require "luci.model.diskman" - if p_table == "GPT" or p_table == "MBR" then - p_table = p_table == "MBR" and "msdos" or "gpt" - local res = luci.sys.call(dm.command.parted .. " -s /dev/" .. dev .. " mktable ".. p_table) - if res == 0 then - luci.http.status(200, "ok") - else - luci.http.status(500, "command exec error") - end - luci.http.prepare_content("application/json") - luci.http.write_json({code=res}) - else - luci.http.status(404, "not support") - luci.http.prepare_content("application/json") - luci.http.write_json({code="1"}) - end -end - -function smart_detail(dev) - luci.template.render("diskman/smart_detail", {dev=dev}) -end - -function smart_attr(dev) - local dm = require "luci.model.diskman" - local cmd = io.popen(dm.command.smartctl .. " -H -A -i /dev/%s" % dev) - if cmd then - local attr = { } - if cmd:match("NVMe Version:")then - while true do - local ln = cmd:read("*l") - if not ln then - break - elseif ln:match("^(.-):%s+(.+)") then - local key, value = ln:match("^(.-):%s+(.+)") - attr[#attr+1]= { - key = key, - value = value - } - end - end - else - while true do - local ln = cmd:read("*l") - if not ln then - break - elseif ln:match("^.*%d+%s+.+%s+.+%s+.+%s+.+%s+.+%s+.+%s+.+%s+.+%s+.+") then - local id,attrbute,flag,value,worst,thresh,type,updated,raw = ln:match("^%s*(%d+)%s+([%a%p]+)%s+(%w+)%s+(%d+)%s+(%d+)%s+(%d+)%s+([%a%p]+)%s+(%a+)%s+[%w%p]+%s+(.+)") - id= "%x" % id - if not id:match("^%w%w") then - id = "0%s" % id - end - attr[#attr+1]= { - id = id:upper(), - attrbute = attrbute, - flag = flag, - value = value, - worst = worst, - thresh = thresh, - type = type, - updated = updated, - raw = raw - } - end - end - end - cmd:close() - luci.http.prepare_content("application/json") - luci.http.write_json(attr) - end -end \ No newline at end of file diff --git a/package/lean/lisaac/luci-app-diskman/luasrc/model/cbi/diskman/btrfs.lua b/package/lean/lisaac/luci-app-diskman/luasrc/model/cbi/diskman/btrfs.lua deleted file mode 100644 index 006007853..000000000 --- a/package/lean/lisaac/luci-app-diskman/luasrc/model/cbi/diskman/btrfs.lua +++ /dev/null @@ -1,210 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -require "luci.util" -require("luci.tools.webadmin") -local dm = require "luci.model.diskman" -local uuid = arg[1] - -if not uuid then luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman")) end - --- mount subv=/ to tempfs -mount_point = "/tmp/.btrfs_tmp" -nixio.fs.mkdirr(mount_point) -luci.util.exec(dm.command.umount .. " "..mount_point .. " >/dev/null 2>&1") -luci.util.exec(dm.command.mount .. " -t btrfs -o subvol=/ UUID="..uuid.." "..mount_point) - -m = SimpleForm("btrfs", translate("Btrfs"), translate("Manage Btrfs")) -m.template = "diskman/cbi/xsimpleform" -m.redirect = luci.dispatcher.build_url("admin/system/diskman") -m.submit = false -m.reset = false - --- info -local btrfs_info = dm.get_btrfs_info(mount_point) -local table_btrfs_info = m:section(Table, {btrfs_info}, translate("Btrfs Info")) -table_btrfs_info:option(DummyValue, "uuid", translate("UUID")) -table_btrfs_info:option(DummyValue, "members", translate("Members")) -table_btrfs_info:option(DummyValue, "data_raid_level", translate("Data")) -table_btrfs_info:option(DummyValue, "metadata_raid_lavel", translate("Metadata")) -table_btrfs_info:option(DummyValue, "size_formated", translate("Size")) -table_btrfs_info:option(DummyValue, "used_formated", translate("Used")) -table_btrfs_info:option(DummyValue, "free_formated", translate("Free Space")) -table_btrfs_info:option(DummyValue, "usage", translate("Usage")) -local v_btrfs_label = table_btrfs_info:option(Value, "label", translate("Label")) -local value_btrfs_label = "" -v_btrfs_label.write = function(self, section, value) - value_btrfs_label = value or "" -end -local btn_update_label = table_btrfs_info:option(Button, "_update_label") -btn_update_label.inputtitle = translate("Update") -btn_update_label.inputstyle = "edit" -btn_update_label.write = function(self, section, value) - local cmd = dm.command.btrfs .. " filesystem label " .. mount_point .. " " .. value_btrfs_label - local res = luci.util.exec(cmd) - luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman/btrfs/" .. uuid)) -end --- subvolume -local subvolume_list = dm.get_btrfs_subv(mount_point) -subvolume_list["_"] = { ID = 0 } -table_subvolume = m:section(Table, subvolume_list, translate("SubVolumes")) -table_subvolume:option(DummyValue, "id", translate("ID")) -table_subvolume:option(DummyValue, "top_level", translate("Top Level")) -table_subvolume:option(DummyValue, "uuid", translate("UUID")) -table_subvolume:option(DummyValue, "otime", translate("Otime")) -table_subvolume:option(DummyValue, "snapshots", translate("Snapshots")) -local v_path = table_subvolume:option(Value, "path", translate("Path")) -v_path.forcewrite = true -v_path.render = function(self, section, scope) - if subvolume_list[section].ID == 0 then - self.template = "cbi/value" - self.placeholder = "/my_subvolume" - self.forcewrite = true - Value.render(self, section, scope) - else - self.template = "cbi/dvalue" - DummyValue.render(self, section, scope) - end -end -local value_path -v_path.write = function(self, section, value) - value_path = value -end -local btn_set_default = table_subvolume:option(Button, "_subv_set_default", translate("Set Default")) -btn_set_default.forcewrite = true -btn_set_default.inputstyle = "edit" -btn_set_default.template = "diskman/cbi/disabled_button" -btn_set_default.render = function(self, section, scope) - if subvolume_list[section].default_subvolume then - self.view_disabled = true - self.inputtitle = translate("Set Default") - elseif subvolume_list[section].ID == 0 then - self.template = "cbi/dvalue" - else - self.inputtitle = translate("Set Default") - self.view_disabled = false - end - Button.render(self, section, scope) -end -btn_set_default.write = function(self, section, value) - local cmd - if value == translate("Set Default") then - cmd = dm.command.btrfs .. " subvolume set-default " .. mount_point..subvolume_list[section].path - else - cmd = dm.command.btrfs .. " subvolume set-default " .. mount_point.."/" - end - local res = luci.util.exec(cmd.. " 2>&1") - if res and (res:match("ERR") or res:match("not enough arguments")) then - m.errmessage = res - else - luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman/btrfs/" .. uuid)) - end -end -local btn_remove = table_subvolume:option(Button, "_subv_remove") -btn_remove.template = "diskman/cbi/disabled_button" -btn_remove.forcewrite = true -btn_remove.render = function(self, section, scope) - if subvolume_list[section].ID == 0 then - btn_remove.inputtitle = translate("Create") - btn_remove.inputstyle = "add" - self.view_disabled = false - elseif subvolume_list[section].path == "/" or subvolume_list[section].default_subvolume then - btn_remove.inputtitle = translate("Delete") - btn_remove.inputstyle = "remove" - self.view_disabled = true - else - btn_remove.inputtitle = translate("Delete") - btn_remove.inputstyle = "remove" - self.view_disabled = false - end - Button.render(self, section, scope) -end - -btn_remove.write = function(self, section, value) - local cmd - if value == translate("Delete") then - cmd = dm.command.btrfs .. " subvolume delete " .. mount_point .. subvolume_list[section].path - elseif value == translate("Create") then - if value_path and value_path:match("^/") then - cmd = dm.command.btrfs .. " subvolume create " .. mount_point .. value_path - else - m.errmessage = translate("Please input Subvolume Path, Subvolume must start with '/'") - return - end - end - local res = luci.util.exec(cmd.. " 2>&1") - if res and (res:match("ERR") or res:match("not enough arguments")) then - m.errmessage = luci.util.pcdata(res) - else - luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman/btrfs/" .. uuid)) - end -end --- snapshot --- local snapshot_list = dm.get_btrfs_subv(mount_point, 1) --- table_snapshot = m:section(Table, snapshot_list, translate("Snapshots")) --- table_snapshot:option(DummyValue, "id", translate("ID")) --- table_snapshot:option(DummyValue, "top_level", translate("Top Level")) --- table_snapshot:option(DummyValue, "uuid", translate("UUID")) --- table_snapshot:option(DummyValue, "otime", translate("Otime")) --- table_snapshot:option(DummyValue, "path", translate("Path")) --- local snp_remove = table_snapshot:option(Button, "_snp_remove") --- snp_remove.inputtitle = translate("Delete") --- snp_remove.inputstyle = "remove" --- snp_remove.write = function(self, section, value) --- local cmd = dm.command.btrfs .. " subvolume delete " .. mount_point .. snapshot_list[section].path --- local res = luci.util.exec(cmd.. " 2>&1") --- if res and (res:match("ERR") or res:match("not enough arguments")) then --- m.errmessage = luci.util.pcdata(res) --- else --- luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman/btrfs/" .. uuid)) --- end --- end - --- new snapshots -local s_snapshot = m:section(SimpleSection, translate("New Snapshot")) -local value_sorce, value_dest, value_readonly -local v_sorce = s_snapshot:option(Value, "_source", translate("Source Path"), translate("The source path for create the snapshot")) -v_sorce.placeholder = "/data" -v_sorce.forcewrite = true -v_sorce.write = function(self, section, value) - value_sorce = value -end - -local v_readonly = s_snapshot:option(Flag, "_readonly", translate("Readonly"), translate("The path where you want to store the snapshot")) -v_readonly.forcewrite = true -v_readonly.rmempty = false -v_readonly.disabled = 0 -v_readonly.enabled = 1 -v_readonly.default = 1 -v_readonly.write = function(self, section, value) - value_readonly = value -end -local v_dest = s_snapshot:option(Value, "_dest", translate("Destination Path (optional)")) -v_dest.forcewrite = true -v_dest.placeholder = "/.snapshot/202002051538" -v_dest.write = function(self, section, value) - value_dest = value -end -local btn_snp_create = s_snapshot:option(Button, "_snp_create") -btn_snp_create.title = " " -btn_snp_create.inputtitle = translate("New Snapshot") -btn_snp_create.inputstyle = "add" -btn_snp_create.write = function(self, section, value) - if value_sorce and value_sorce:match("^/") then - if not value_dest then value_dest = "/.snapshot"..value_sorce.."/"..os.date("%Y%m%d%H%M%S") end - nixio.fs.mkdirr(mount_point..value_dest:match("(.-)[^/]+$")) - local cmd = dm.command.btrfs .. " subvolume snapshot" .. (value_readonly == 1 and " -r " or " ") .. mount_point..value_sorce .. " " .. mount_point..value_dest - local res = luci.util.exec(cmd .. " 2>&1") - if res and (res:match("ERR") or res:match("not enough arguments")) then - m.errmessage = luci.util.pcdata(res) - else - luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman/btrfs/" .. uuid)) - end - else - m.errmessage = translate("Please input Source Path of snapshot, Source Path must start with '/'") - end -end - -return m diff --git a/package/lean/lisaac/luci-app-diskman/luasrc/model/cbi/diskman/disks.lua b/package/lean/lisaac/luci-app-diskman/luasrc/model/cbi/diskman/disks.lua deleted file mode 100644 index c209df0aa..000000000 --- a/package/lean/lisaac/luci-app-diskman/luasrc/model/cbi/diskman/disks.lua +++ /dev/null @@ -1,327 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -require "luci.util" -require("luci.tools.webadmin") -local dm = require "luci.model.diskman" - --- Use (non-UCI) SimpleForm since we have no related config file -m = SimpleForm("diskman", translate("DiskMan"), translate("Manage Disks over LuCI.")) -m.template = "diskman/cbi/xsimpleform" -m:append(Template("diskman/disk_info")) --- disable submit and reset button -m.submit = false -m.reset = false --- rescan disks -rescan = m:section(SimpleSection) -rescan_button = rescan:option(Button, "_rescan") -rescan_button.inputtitle= translate("Rescan Disks") -rescan_button.template = "diskman/cbi/inlinebutton" -rescan_button.inputstyle = "add" -rescan_button.forcewrite = true -rescan_button.write = function(self, section, value) - luci.util.exec("echo '- - -' | tee /sys/class/scsi_host/host*/scan > /dev/null") - if dm.command.mdadm then - luci.util.exec(dm.command.mdadm .. " --assemble --scan") - end - luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman")) -end - --- disks -local disks = dm.list_devices() -d = m:section(Table, disks, translate("Disks")) -d.config = "disk" --- option(type, id(key of table), text) -d:option(DummyValue, "path", translate("Path")) -d:option(DummyValue, "model", translate("Model")) -d:option(DummyValue, "sn", translate("Serial Number")) -d:option(DummyValue, "size_formated", translate("Size")) -d:option(DummyValue, "temp", translate("Temp")) --- d:option(DummyValue, "sec_size", translate("Sector Size ")) -d:option(DummyValue, "p_table", translate("Partition Table")) -d:option(DummyValue, "sata_ver", translate("SATA Version")) --- d:option(DummyValue, "rota_rate", translate("Rotation Rate")) -d:option(DummyValue, "health", translate("Health")) -d:option(DummyValue, "status", translate("Status")) - -d.extedit = luci.dispatcher.build_url("admin/system/diskman/partition/%s") - --- raid devices -if dm.command.mdadm then - local raid_devices = dm.list_raid_devices() - -- raid_devices = diskmanager.getRAIDdevices() - if next(raid_devices) ~= nil then - local r = m:section(Table, raid_devices, translate("RAID Devices")) - r.config = "_raid" - r:option(DummyValue, "path", translate("Path")) - r:option(DummyValue, "level", translate("RAID mode")) - r:option(DummyValue, "size_formated", translate("Size")) - r:option(DummyValue, "p_table", translate("Partition Table")) - r:option(DummyValue, "status", translate("Status")) - r:option(DummyValue, "members_str", translate("Members")) - r:option(DummyValue, "active", translate("Active")) - r.extedit = luci.dispatcher.build_url("admin/system/diskman/partition/%s") - end -end - --- btrfs devices -if dm.command.btrfs then - btrfs_devices = dm.list_btrfs_devices() - if next(btrfs_devices) ~= nil then - local table_btrfs = m:section(Table, btrfs_devices, translate("Btrfs")) - table_btrfs:option(DummyValue, "uuid", translate("UUID")) - table_btrfs:option(DummyValue, "label", translate("Label")) - table_btrfs:option(DummyValue, "members", translate("Members")) - -- sieze is error, since there is RAID - -- table_btrfs:option(DummyValue, "size_formated", translate("Size")) - table_btrfs:option(DummyValue, "used_formated", translate("Usage")) - table_btrfs.extedit = luci.dispatcher.build_url("admin/system/diskman/btrfs/%s") - end -end - --- mount point -local mount_point = dm.get_mount_points() -local _mount_point = {} -table.insert( mount_point, { device = 0 } ) -local table_mp = m:section(Table, mount_point, translate("Mount Point")) -local v_device = table_mp:option(Value, "device", translate("Device")) -v_device.render = function(self, section, scope) - if mount_point[section].device == 0 then - self.template = "cbi/value" - self.forcewrite = true - for dev, info in pairs(disks) do - for i, v in ipairs(info.partitions) do - self:value("/dev/".. v.name, "/dev/".. v.name .. " ".. v.size_formated) - end - end - Value.render(self, section, scope) - else - self.template = "cbi/dvalue" - DummyValue.render(self, section, scope) - end -end -v_device.write = function(self, section, value) - _mount_point.device = value and value:gsub("%s+", "") or "" -end -local v_fs = table_mp:option(Value, "fs", translate("File System")) -v_fs.render = function(self, section, scope) - if mount_point[section].device == 0 then - self.template = "cbi/value" - self:value("auto", "auto") - self.default = "auto" - self.forcewrite = true - Value.render(self, section, scope) - else - self.template = "cbi/dvalue" - DummyValue.render(self, section, scope) - end -end -v_fs.write = function(self, section, value) - _mount_point.fs = value and value:gsub("%s+", "") or "" -end -local v_mount_option = table_mp:option(Value, "mount_options", translate("Mount Options")) -v_mount_option.render = function(self, section, scope) - if mount_point[section].device == 0 then - self.template = "cbi/value" - self.placeholder = "rw,noauto" - self.forcewrite = true - Value.render(self, section, scope) - else - self.template = "cbi/dvalue" - local mp = mount_point[section].mount_options - mount_point[section].mount_options = nil - local length = 0 - for k in mp:gmatch("([^,]+)") do - mount_point[section].mount_options = mount_point[section].mount_options and (mount_point[section].mount_options .. ",") or "" - if length > 20 then - mount_point[section].mount_options = mount_point[section].mount_options.. "
" - length = 0 - end - mount_point[section].mount_options = mount_point[section].mount_options .. k - length = length + #k - end - self.rawhtml = true - -- mount_point[section].mount_options = #mount_point[section].mount_options > 50 and mount_point[section].mount_options:sub(1,50) .. "..." or mount_point[section].mount_options - DummyValue.render(self, section, scope) - end -end -v_mount_option.write = function(self, section, value) - _mount_point.mount_options = value and value:gsub("%s+", "") or "" -end -local v_mount_point = table_mp:option(Value, "mount_point", translate("Mount Point")) -v_mount_point.render = function(self, section, scope) - if mount_point[section].device == 0 then - self.template = "cbi/value" - self.placeholder = "/media/diskX" - self.forcewrite = true - Value.render(self, section, scope) - else - self.template = "cbi/dvalue" - local new_mp = "" - local v_mp_d - for v_mp_d in self["section"]["data"][section]["mount_point"]:gmatch('[^/]+') do - if #v_mp_d > 12 then - new_mp = new_mp .. "/" .. v_mp_d:sub(1,7) .. ".." .. v_mp_d:sub(-4) - else - new_mp = new_mp .."/".. v_mp_d - end - end - self["section"]["data"][section]["mount_point"] = ''..new_mp..'' - self.rawhtml = true - DummyValue.render(self, section, scope) - end -end -v_mount_point.write = function(self, section, value) - _mount_point.mount_point = value -end -local btn_umount = table_mp:option(Button, "_mount", translate("Mount")) -btn_umount.forcewrite = true -btn_umount.render = function(self, section, scope) - if mount_point[section].device == 0 then - self.inputtitle = translate("Mount") - btn_umount.inputstyle = "add" - else - self.inputtitle = translate("Umount") - btn_umount.inputstyle = "remove" - end - Button.render(self, section, scope) -end -btn_umount.write = function(self, section, value) - local res - if value == translate("Mount") then - if not _mount_point.mount_point or not _mount_point.device then return end - luci.util.exec("mkdir -p ".. _mount_point.mount_point) - res = luci.util.exec(dm.command.mount .. " ".. _mount_point.device .. (_mount_point.fs and (" -t ".. _mount_point.fs )or "") .. (_mount_point.mount_options and (" -o " .. _mount_point.mount_options.. " ") or " ").._mount_point.mount_point .. " 2>&1") - elseif value == translate("Umount") then - res = luci.util.exec(dm.command.umount .. " "..mount_point[section].mount_point .. " 2>&1") - end - if res:match("^mount:") or res:match("^umount:") then - m.errmessage = luci.util.pcdata(res) - else - luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman")) - end -end - -if dm.command.mdadm or dm.command.btrfs then -local creation_section = m:section(TypedSection, "_creation") -creation_section.cfgsections=function() - return {translate("Creation")} -end -creation_section:tab("raid", translate("RAID"), translate("RAID Creation")) -creation_section:tab("btrfs", translate("Btrfs"), translate("Multiple Devices Btrfs Creation")) - --- raid functions -if dm.command.mdadm then - - local rname, rmembers, rlevel - local r_name = creation_section:taboption("raid", Value, "_rname", translate("Raid Name")) - r_name.placeholder = "/dev/md0" - r_name.write = function(self, section, value) - rname = value - end - local r_level = creation_section:taboption("raid", ListValue, "_rlevel", translate("Raid Level")) - local valid_raid = luci.util.exec("lsmod | grep md_mod") - if valid_raid:match("linear") then - r_level:value("linear", "Linear") - end - if valid_raid:match("raid456") then - r_level:value("5", "Raid 5") - r_level:value("6", "Raid 6") - end - if valid_raid:match("raid1") then - r_level:value("1", "Raid 1") - end - if valid_raid:match("raid0") then - r_level:value("0", "Raid 0") - end - if valid_raid:match("raid10") then - r_level:value("10", "Raid 10") - end - r_level.write = function(self, section, value) - rlevel = value - end - local r_member = creation_section:taboption("raid", DynamicList, "_rmember", translate("Raid Member")) - for dev, info in pairs(disks) do - if not info.inuse and #info.partitions == 0 then - r_member:value(info.path, info.path.. " ".. info.size_formated) - end - for i, v in ipairs(info.partitions) do - if not v.inuse then - r_member:value("/dev/".. v.name, "/dev/".. v.name .. " ".. v.size_formated) - end - end - end - r_member.write = function(self, section, value) - rmembers = value - end - local r_create = creation_section:taboption("raid", Button, "_rcreate") - r_create.render = function(self, section, scope) - self.title = " " - self.inputtitle = translate("Create Raid") - self.inputstyle = "add" - Button.render(self, section, scope) - end - r_create.write = function(self, section, value) - -- mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=2 /dev/sdb6 /dev/sdc5 - local res = dm.create_raid(rname, rlevel, rmembers) - if res and res:match("^ERR") then - m.errmessage = luci.util.pcdata(res) - return - end - dm.gen_mdadm_config() - luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman")) - end -end - --- btrfs -if dm.command.btrfs then - local blabel, bmembers, blevel - local btrfs_label = creation_section:taboption("btrfs", Value, "_blabel", translate("Btrfs Label")) - btrfs_label.write = function(self, section, value) - blabel = value - end - local btrfs_level = creation_section:taboption("btrfs", ListValue, "_blevel", translate("Btrfs Raid Level")) - btrfs_level:value("single", "Single") - btrfs_level:value("raid0", "Raid 0") - btrfs_level:value("raid1", "Raid 1") - btrfs_level:value("raid10", "Raid 10") - btrfs_level.write = function(self, section, value) - blevel = value - end - - local btrfs_member = creation_section:taboption("btrfs", DynamicList, "_bmember", translate("Btrfs Member")) - for dev, info in pairs(disks) do - if not info.inuse and #info.partitions == 0 then - btrfs_member:value(info.path, info.path.. " ".. info.size_formated) - end - for i, v in ipairs(info.partitions) do - if not v.inuse then - btrfs_member:value("/dev/".. v.name, "/dev/".. v.name .. " ".. v.size_formated) - end - end - end - btrfs_member.write = function(self, section, value) - bmembers = value - end - local btrfs_create = creation_section:taboption("btrfs", Button, "_bcreate") - btrfs_create.render = function(self, section, scope) - self.title = " " - self.inputtitle = translate("Create Btrfs") - self.inputstyle = "add" - Button.render(self, section, scope) - end - btrfs_create.write = function(self, section, value) - -- mkfs.btrfs -L label -d blevel /dev/sda /dev/sdb - local res = dm.create_btrfs(blabel, blevel, bmembers) - if res and res:match("^ERR") then - m.errmessage = luci.util.pcdata(res) - return - end - luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman")) - end -end -end - -return m diff --git a/package/lean/lisaac/luci-app-diskman/luasrc/model/cbi/diskman/partition.lua b/package/lean/lisaac/luci-app-diskman/luasrc/model/cbi/diskman/partition.lua deleted file mode 100644 index 348a617a6..000000000 --- a/package/lean/lisaac/luci-app-diskman/luasrc/model/cbi/diskman/partition.lua +++ /dev/null @@ -1,366 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -require "luci.util" -require("luci.tools.webadmin") -local dm = require "luci.model.diskman" -local dev = arg[1] - -if not dev then - luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman")) -elseif not nixio.fs.access("/dev/"..dev) then - luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman")) -end - -m = SimpleForm("partition", translate("Partition Management"), translate("Partition Disk over LuCI.")) -m.template = "diskman/cbi/xsimpleform" -m.redirect = luci.dispatcher.build_url("admin/system/diskman") -m:append(Template("diskman/partition_info")) --- disable submit and reset button -m.submit = false -m.reset = false - -local disk_info = dm.get_disk_info(dev, true) -local format_cmd = dm.get_format_cmd() - -s = m:section(Table, {disk_info}, translate("Device Info")) --- s:option(DummyValue, "key") --- s:option(DummyValue, "value") -s:option(DummyValue, "path", translate("Path")) -s:option(DummyValue, "model", translate("Model")) -s:option(DummyValue, "sn", translate("Serial Number")) -s:option(DummyValue, "size_formated", translate("Size")) -s:option(DummyValue, "sec_size", translate("Sector Size")) -local dv_p_table = s:option(ListValue, "p_table", translate("Partition Table")) -dv_p_table.render = function(self, section, scope) - -- create table only if not used by raid and no partitions on disk - if not disk_info.p_table:match("Raid") and (#disk_info.partitions == 0 or (#disk_info.partitions == 1 and disk_info.partitions[1].number == -1) or (disk_info.p_table:match("LOOP") and not disk_info.partitions[1].inuse)) then - self:value(disk_info.p_table, disk_info.p_table) - self:value("GPT", "GPT") - self:value("MBR", "MBR") - self.default = disk_info.p_table - ListValue.render(self, section, scope) - else - self.template = "cbi/dvalue" - DummyValue.render(self, section, scope) - end -end -if disk_info.type:match("md") then - s:option(DummyValue, "level", translate("Level")) - s:option(DummyValue, "members_str", translate("Members")) -else - s:option(DummyValue, "temp", translate("Temp")) - s:option(DummyValue, "sata_ver", translate("SATA Version")) - s:option(DummyValue, "rota_rate", translate("Rotation Rate")) -end -s:option(DummyValue, "status", translate("Status")) -local btn_health = s:option(Button, "health", translate("Health")) -btn_health.render = function(self, section, scope) - if disk_info.health then - self.inputtitle = disk_info.health - if disk_info.health == "PASSED" then - self.inputstyle = "add" - else - self.inputstyle = "remove" - end - Button.render(self, section, scope) - else - self.template = "cbi/dvalue" - DummyValue.render(self, section, scope) - end -end - -local btn_eject = s:option(Button, "_eject") -btn_eject.template = "diskman/cbi/disabled_button" -btn_eject.inputstyle = "remove" -btn_eject.render = function(self, section, scope) - for i, p in ipairs(disk_info.partitions) do - if p.mount_point ~= "-" then - self.view_disabled = true - break - end - end - if disk_info.p_table:match("Raid") then - self.view_disabled = true - end - if disk_info.type:match("md") then - btn_eject.inputtitle = translate("Remove") - else - btn_eject.inputtitle = translate("Eject") - end - Button.render(self, section, scope) -end -btn_eject.forcewrite = true -btn_eject.write = function(self, section, value) - for i, p in ipairs(disk_info.partitions) do - if p.mount_point ~= "-" then - m.errmessage = p.name .. translate("is in use! please unmount it first!") - return - end - end - if disk_info.type:match("md") then - luci.util.exec(dm.command.mdadm .. " --stop /dev/" .. dev) - luci.util.exec(dm.command.mdadm .. " --remove /dev/" .. dev) - for _, disk in ipairs(disk_info.members) do - luci.util.exec(dm.command.mdadm .. " --zero-superblock " .. disk) - end - dm.gen_mdadm_config() - else - luci.util.exec("echo 1 > /sys/block/" .. dev .. "/device/delete") - end - luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman")) -end --- eject: echo 1 > /sys/block/(device)/device/delete --- rescan: echo '- - -' | tee /sys/class/scsi_host/host*/scan > /dev/null - - --- partitions info -if not disk_info.p_table:match("Raid") then - s_partition_table = m:section(Table, disk_info.partitions, translate("Partitions Info"), translate("Default 2048 sector alignment, support +size{b,k,m,g,t} in End Sector")) - - -- s_partition_table:option(DummyValue, "number", translate("Number")) - s_partition_table:option(DummyValue, "name", translate("Name")) - local val_sec_start = s_partition_table:option(Value, "sec_start", translate("Start Sector")) - val_sec_start.render = function(self, section, scope) - -- could create new partition - if disk_info.partitions[section].number == -1 and disk_info.partitions[section].size > 1 * 1024 * 1024 then - self.template = "cbi/value" - Value.render(self, section, scope) - else - self.template = "cbi/dvalue" - DummyValue.render(self, section, scope) - end - end - local val_sec_end = s_partition_table:option(Value, "sec_end", translate("End Sector")) - val_sec_end.render = function(self, section, scope) - -- could create new partition - if disk_info.partitions[section].number == -1 and disk_info.partitions[section].size > 1 * 1024 * 1024 then - self.template = "cbi/value" - Value.render(self, section, scope) - else - self.template = "cbi/dvalue" - DummyValue.render(self, section, scope) - end - end - val_sec_start.forcewrite = true - val_sec_start.write = function(self, section, value) - disk_info.partitions[section]._sec_start = value - end - val_sec_end.forcewrite = true - val_sec_end.write = function(self, section, value) - disk_info.partitions[section]._sec_end = value - end - s_partition_table:option(DummyValue, "size_formated", translate("Size")) - if disk_info.p_table == "MBR" then - s_partition_table:option(DummyValue, "type", translate("Type")) - end - s_partition_table:option(DummyValue, "used_formated", translate("Used")) - s_partition_table:option(DummyValue, "free_formated", translate("Free Space")) - s_partition_table:option(DummyValue, "usage", translate("Usage")) - local dv_mount_point = s_partition_table:option(DummyValue, "mount_point", translate("Mount Point")) - dv_mount_point.rawhtml = true - dv_mount_point.render = function(self, section, scope) - local new_mp = "" - local v_mp_d - for line in self["section"]["data"][section]["mount_point"]:gmatch("[^%s]+") do - if line == '-' then - new_mp = line - break - end - for v_mp_d in line:gmatch('[^/]+') do - if #v_mp_d > 12 then - new_mp = new_mp .. "/" .. v_mp_d:sub(1,7) .. ".." .. v_mp_d:sub(-4) - else - new_mp = new_mp .."/".. v_mp_d - end - end - new_mp = '' ..new_mp ..'' .. "
" - end - self["section"]["data"][section]["mount_point"] = new_mp - DummyValue.render(self, section, scope) - end - local val_fs = s_partition_table:option(Value, "fs", translate("File System")) - val_fs.forcewrite = true - val_fs.partitions = disk_info.partitions - for k, v in pairs(format_cmd) do - val_fs.format_cmd = val_fs.format_cmd and (val_fs.format_cmd .. "," .. k) or k - end - - val_fs.write = function(self, section, value) - disk_info.partitions[section]._fs = value - end - val_fs.render = function(self, section, scope) - -- use listvalue when partition not mounted - if disk_info.partitions[section].mount_point == "-" and disk_info.partitions[section].number ~= -1 and disk_info.partitions[section].type ~= "extended" then - self.template = "diskman/cbi/format_button" - self.inputstyle = "reset" - self.inputtitle = disk_info.partitions[section].fs == "raw" and translate("Format") or disk_info.partitions[section].fs - Button.render(self, section, scope) - -- self:reset_values() - -- self.keylist = {} - -- self.vallist = {} - -- for k, v in pairs(format_cmd) do - -- self:value(k,k) - -- end - -- self.default = disk_info.partitions[section].fs - else - -- self:reset_values() - -- self.keylist = {} - -- self.vallist = {} - self.template = "cbi/dvalue" - DummyValue.render(self, section, scope) - end - end - -- btn_format = s_partition_table:option(Button, "_format") - -- btn_format.template = "diskman/cbi/format_button" - -- btn_format.partitions = disk_info.partitions - -- btn_format.render = function(self, section, scope) - -- if disk_info.partitions[section].mount_point == "-" and disk_info.partitions[section].number ~= -1 and disk_info.partitions[section].type ~= "extended" then - -- self.inputtitle = translate("Format") - -- self.template = "diskman/cbi/disabled_button" - -- self.view_disabled = false - -- self.inputstyle = "reset" - -- for k, v in pairs(format_cmd) do - -- self:depends("val_fs", "k") - -- end - -- -- elseif disk_info.partitions[section].mount_point ~= "-" and disk_info.partitions[section].number ~= -1 then - -- -- self.inputtitle = "Format" - -- -- self.template = "diskman/cbi/disabled_button" - -- -- self.view_disabled = true - -- -- self.inputstyle = "reset" - -- else - -- self.inputtitle = "" - -- self.template = "cbi/dvalue" - -- end - -- Button.render(self, section, scope) - -- end - -- btn_format.forcewrite = true - -- btn_format.write = function(self, section, value) - -- local partition_name = "/dev/".. disk_info.partitions[section].name - -- if not nixio.fs.access(partition_name) then - -- m.errmessage = translate("Partition NOT found!") - -- return - -- end - -- local fs = disk_info.partitions[section]._fs - -- if not format_cmd[fs] then - -- m.errmessage = translate("Filesystem NOT support!") - -- return - -- end - -- local cmd = format_cmd[fs].cmd .. " " .. format_cmd[fs].option .. " " .. partition_name - -- local res = luci.util.exec(cmd .. " 2>&1") - -- if res and res:lower():match("error+") then - -- m.errmessage = luci.util.pcdata(res) - -- else - -- luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman/partition/" .. dev)) - -- end - -- end - - local btn_action = s_partition_table:option(Button, "_action") - btn_action.forcewrite = true - btn_action.template = "diskman/cbi/disabled_button" - btn_action.render = function(self, section, scope) - -- if partition is mounted or the size < 1mb, then disable the add action - if disk_info.partitions[section].mount_point ~= "-" or (disk_info.partitions[section].type ~= "extended" and disk_info.partitions[section].number == -1 and disk_info.partitions[section].size <= 1 * 1024 * 1024) then - self.view_disabled = true - -- self.inputtitle = "" - -- self.template = "cbi/dvalue" - elseif disk_info.partitions[section].type == "extended" and next(disk_info.partitions[section]["logicals"]) ~= nil then - self.view_disabled = true - else - -- self.template = "diskman/cbi/disabled_button" - self.view_disabled = false - end - if disk_info.partitions[section].number ~= -1 then - self.inputtitle = translate("Remove") - self.inputstyle = "remove" - else - self.inputtitle = translate("New") - self.inputstyle = "add" - end - Button.render(self, section, scope) - end - btn_action.write = function(self, section, value) - if value == translate("New") then - local start_sec = disk_info.partitions[section]._sec_start and tonumber(disk_info.partitions[section]._sec_start) or tonumber(disk_info.partitions[section].sec_start) - local end_sec = disk_info.partitions[section]._sec_end - - if start_sec then - -- for sector alignment - local align = tonumber(disk_info.phy_sec) / tonumber(disk_info.logic_sec) - align = (align < 2048) and 2048 - if start_sec < 2048 then - start_sec = "2048" .. "s" - elseif math.fmod( start_sec, align ) ~= 0 then - start_sec = tostring(start_sec + align - math.fmod( start_sec, align )) .. "s" - else - start_sec = start_sec .. "s" - end - else - m.errmessage = translate("Invalid Start Sector!") - return - end - -- support +size format for End sector - local end_size, end_unit = end_sec:match("^+(%d-)([bkmgtsBKMGTS])$") - if tonumber(end_size) and end_unit then - local unit ={ - B=1, - S=512, - K=1024, - M=1048576, - G=1073741824, - T=1099511627776 - } - end_unit = end_unit:upper() - end_sec = tostring(tonumber(end_size) * unit[end_unit] / unit["S"] + tonumber(start_sec:sub(1,-2)) - 1 ) .. "s" - elseif tonumber(end_sec) then - end_sec = end_sec .. "s" - else - m.errmessage = translate("Invalid End Sector!") - return - end - local part_type = "primary" - - if disk_info.p_table == "MBR" and disk_info["extended_partition_index"] then - if tonumber(disk_info.partitions[disk_info["extended_partition_index"]].sec_start) <= tonumber(start_sec:sub(1,-2)) and tonumber(disk_info.partitions[disk_info["extended_partition_index"]].sec_end) >= tonumber(end_sec:sub(1,-2)) then - part_type = "logical" - if tonumber(start_sec:sub(1,-2)) - tonumber(disk_info.partitions[section].sec_start) < 2048 then - start_sec = tonumber(start_sec:sub(1,-2)) + 2048 - start_sec = start_sec .."s" - end - end - elseif disk_info.p_table == "GPT" then - -- AUTOMATIC FIX GPT PARTITION TABLE - -- Not all of the space available to /dev/sdb appears to be used, you can fix the GPT to use all of the space (an extra 16123870 blocks) or continue with the current setting? - local cmd = ' printf "ok\nfix\n" | parted ---pretend-input-tty /dev/'.. dev ..' print' - luci.util.exec(cmd .. " 2>&1") - end - - -- partiton - local cmd = dm.command.parted .. " -s -a optimal /dev/" .. dev .. " mkpart " .. part_type .." " .. start_sec .. " " .. end_sec - local res = luci.util.exec(cmd .. " 2>&1") - if res and res:lower():match("error+") then - m.errmessage = luci.util.pcdata(res) - else - luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman/partition/" .. dev)) - end - elseif value == translate("Remove") then - -- remove partition - local number = tostring(disk_info.partitions[section].number) - if (not number) or (number == "") then - m.errmessage = translate("Partition not exists!") - return - end - local cmd = dm.command.parted .. " -s /dev/" .. dev .. " rm " .. number - local res = luci.util.exec(cmd .. " 2>&1") - if res and res:lower():match("error+") then - m.errmessage = luci.util.pcdata(res) - else - luci.http.redirect(luci.dispatcher.build_url("admin/system/diskman/partition/" .. dev)) - end - end - end -end - -return m \ No newline at end of file diff --git a/package/lean/lisaac/luci-app-diskman/luasrc/model/diskman.lua b/package/lean/lisaac/luci-app-diskman/luasrc/model/diskman.lua deleted file mode 100644 index 98c1f7739..000000000 --- a/package/lean/lisaac/luci-app-diskman/luasrc/model/diskman.lua +++ /dev/null @@ -1,738 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -require "luci.util" -local ver = require "luci.version" - -local CMD = {"parted", "mdadm", "blkid", "smartctl", "df", "btrfs", "lsblk"} - -local d = {command ={}} -for _, cmd in ipairs(CMD) do - local command = luci.sys.exec("/usr/bin/which " .. cmd) - d.command[cmd] = command:match("^.+"..cmd) or nil -end - -d.command.mount = nixio.fs.access("/usr/bin/mount") and "/usr/bin/mount" or "/bin/mount" -d.command.umount = nixio.fs.access("/usr/bin/umount") and "/usr/bin/umount" or "/bin/umount" - -local proc_mounts = nixio.fs.readfile("/proc/mounts") or "" -local mounts = luci.util.exec(d.command.mount .. " 2>/dev/null") or "" -local swaps = nixio.fs.readfile("/proc/swaps") or "" -local df = luci.sys.exec(d.command.df .. " 2>/dev/null") or "" - -function byte_format(byte) - local suff = {"B", "KB", "MB", "GB", "TB"} - for i=1, 5 do - if byte > 1024 and i < 5 then - byte = byte / 1024 - else - return string.format("%.2f %s", byte, suff[i]) - end - end -end - -local get_smart_info = function(device) - local section - local smart_info = {} - for _, line in ipairs(luci.util.execl(d.command.smartctl .. " -H -A -i -n standby -f brief /dev/" .. device)) do - local attrib, val - if section == 1 then - attrib, val = line:match "^(.-):%s+(.+)" - elseif section == 2 and smart_info.nvme_ver then - attrib, val = line:match("^(.-):%s+(.+)") - if not smart_info.health then smart_info.health = line:match(".-overall%-health.-: (.+)") end - elseif section == 2 then - attrib, val = line:match("^([0-9 ]+)%s+[^ ]+%s+[POSRCK-]+%s+[0-9-]+%s+[0-9-]+%s+[0-9-]+%s+[0-9-]+%s+([0-9-]+)") - if not smart_info.health then smart_info.health = line:match(".-overall%-health.-: (.+)") end - else - attrib = line:match "^=== START OF (.*) SECTION ===" - if attrib and attrib:match("INFORMATION") then - section = 1 - elseif attrib and attrib:match("SMART DATA") then - section = 2 - elseif not smart_info.status then - val = line:match "^Device is in (.*) mode" - if val then smart_info.status = val end - end - end - - if not attrib then - if section ~= 2 then section = 0 end - elseif (attrib == "Power mode is") or - (attrib == "Power mode was") then - smart_info.status = val:match("(%S+)") - -- elseif attrib == "Sector Sizes" then - -- -- 512 bytes logical, 4096 bytes physical - -- smart_info.phy_sec = val:match "([0-9]*) bytes physical" - -- smart_info.logic_sec = val:match "([0-9]*) bytes logical" - -- elseif attrib == "Sector Size" then - -- -- 512 bytes logical/physical - -- smart_info.phy_sec = val:match "([0-9]*)" - -- smart_info.logic_sec = smart_info.phy_sec - elseif attrib == "Serial Number" then - smart_info.sn = val - elseif attrib == "194" or attrib == "Temperature" then - smart_info.temp = val:match("(%d+)") .. "°C" - elseif attrib == "Rotation Rate" then - smart_info.rota_rate = val - elseif attrib == "SATA Version is" then - smart_info.sata_ver = val - elseif attrib == "NVMe Version" then - smart_info.nvme_ver = val - end - end - return smart_info -end - -local parse_parted_info = function(keys, line) - -- parse the output of parted command (machine parseable format) - -- /dev/sda:5860533168s:scsi:512:4096:gpt:ATA ST3000DM001-1ER1:; - -- 1:34s:2047s:2014s:free; - -- 1:2048s:1073743872s:1073741825s:ext4:primary:; - local result = {} - local values = {} - - for value in line:gmatch("(.-)[:;]") do table.insert(values, value) end - for i = 1,#keys do - result[keys[i]] = values[i] or "" - end - return result -end - -local is_raid_member = function(partition) - -- check if inuse as raid member - if nixio.fs.access("/proc/mdstat") then - for _, result in ipairs(luci.util.execl("grep md /proc/mdstat | sed 's/[][]//g'")) do - local md, buf - md, buf = result:match("(md.-):(.+)") - if buf:match(partition) then - return "Raid Member: ".. md - end - end - end - return nil -end - -local get_mount_point = function(partition) - local mount_point - for m in mounts:gmatch("/dev/"..partition.." on ([^ ]*)") do - mount_point = (mount_point and (mount_point .. " ") or "") .. m - end - if mount_point then return mount_point end - -- result = luci.sys.exec('cat /proc/mounts | awk \'{if($1=="/dev/'.. partition ..'") print $2}\'') - -- if result ~= "" then return result end - - if swaps:match("\n/dev/" .. partition .."%s") then return "swap" end - -- result = luci.sys.exec("cat /proc/swaps | grep /dev/" .. partition) - -- if result ~= "" then return "swap" end - - return is_raid_member(partition) - -end - --- return used, free, usage -local get_partition_usage = function(partition) - if not nixio.fs.access("/dev/"..partition) then return false end - local used, free, usage = df:match("\n/dev/" .. partition .. "%s+%d+%s+(%d+)%s+(%d+)%s+(%d+)%%%s-") - - usage = usage and (usage .. "%") or "-" - used = used and (tonumber(used) * 1024) or 0 - free = free and (tonumber(free) * 1024) or 0 - - return used, free, usage -end - -local get_parted_info = function(device) - if not device then return end - local result = {partitions={}} - local DEVICE_INFO_KEYS = { "path", "size", "type", "logic_sec", "phy_sec", "p_table", "model", "flags" } - local PARTITION_INFO_KEYS = { "number", "sec_start", "sec_end", "size", "fs", "tag_name", "flags" } - local partition_temp - local partitions_temp = {} - local disk_temp - - for line in luci.util.execi(d.command.parted .. " -s -m /dev/" .. device .. " unit s print free", "r") do - if line:find("^/dev/"..device..":.+") then - disk_temp = parse_parted_info(DEVICE_INFO_KEYS, line) - disk_temp.partitions = {} - if disk_temp["size"] then - local length = disk_temp["size"]:gsub("^(%d+)s$", "%1") - local newsize = tostring(tonumber(length)*tonumber(disk_temp["logic_sec"])) - disk_temp["size"] = newsize - end - if disk_temp["p_table"] == "msdos" then - disk_temp["p_table"] = "MBR" - else - disk_temp["p_table"] = disk_temp["p_table"]:upper() - end - elseif line:find("^%d-:.+") then - partition_temp = parse_parted_info(PARTITION_INFO_KEYS, line) - -- use human-readable form instead of sector number - if partition_temp["size"] then - local length = partition_temp["size"]:gsub("^(%d+)s$", "%1") - local newsize = (tonumber(length) * tonumber(disk_temp["logic_sec"])) - partition_temp["size"] = newsize - partition_temp["size_formated"] = byte_format(newsize) - end - partition_temp["number"] = tonumber(partition_temp["number"]) or -1 - if partition_temp["fs"] == "free" then - partition_temp["number"] = -1 - partition_temp["fs"] = "Free Space" - partition_temp["name"] = "-" - elseif device:match("sd") or device:match("sata") then - partition_temp["name"] = device..partition_temp["number"] - elseif device:match("mmcblk") or device:match("md") or device:match("nvme") then - partition_temp["name"] = device.."p"..partition_temp["number"] - end - if partition_temp["number"] > 0 and partition_temp["fs"] == "" and d.command.lsblk then - partition_temp["fs"] = luci.util.exec(d.command.lsblk .. " /dev/"..device.. tostring(partition_temp["number"]) .. " -no fstype"):match("([^%s]+)") or "" - end - partition_temp["fs"] = partition_temp["fs"] == "" and "raw" or partition_temp["fs"] - partition_temp["sec_start"] = partition_temp["sec_start"] and partition_temp["sec_start"]:sub(1,-2) - partition_temp["sec_end"] = partition_temp["sec_end"] and partition_temp["sec_end"]:sub(1,-2) - partition_temp["mount_point"] = partition_temp["name"]~="-" and get_mount_point(partition_temp["name"]) or "-" - if partition_temp["mount_point"]~="-" then - partition_temp["used"], partition_temp["free"], partition_temp["usage"] = get_partition_usage(partition_temp["name"]) - partition_temp["used_formated"] = partition_temp["used"] and byte_format(partition_temp["used"]) or "-" - partition_temp["free_formated"] = partition_temp["free"] and byte_format(partition_temp["free"]) or "-" - else - partition_temp["used"], partition_temp["free"], partition_temp["usage"] = 0,0,"-" - partition_temp["used_formated"] = "-" - partition_temp["free_formated"] = "-" - end - -- if disk_temp["p_table"] == "MBR" and (partition_temp["number"] < 4) and (partition_temp["number"] > 0) then - -- local real_size_sec = tonumber(nixio.fs.readfile("/sys/block/"..device.."/"..partition_temp["name"].."/size")) * tonumber(disk_temp.phy_sec) - -- if real_size_sec ~= partition_temp["size"] then - -- disk_temp["extended_partition_index"] = partition_temp["number"] - -- partition_temp["type"] = "extended" - -- partition_temp["size"] = real_size_sec - -- partition_temp["fs"] = "-" - -- partition_temp["logicals"] = {} - -- else - -- partition_temp["type"] = "primary" - -- end - -- end - - table.insert(partitions_temp, partition_temp) - end - end - if disk_temp and disk_temp["p_table"] == "MBR" then - for i, p in ipairs(partitions_temp) do - if disk_temp["extended_partition_index"] and p["number"] > 4 then - if tonumber(p["sec_end"]) <= tonumber(partitions_temp[disk_temp["extended_partition_index"]]["sec_end"]) and tonumber(p["sec_start"]) >= tonumber(partitions_temp[disk_temp["extended_partition_index"]]["sec_start"]) then - p["type"] = "logical" - table.insert(partitions_temp[disk_temp["extended_partition_index"]]["logicals"], i) - end - elseif (p["number"] < 4) and (p["number"] > 0) then - local s = nixio.fs.readfile("/sys/block/"..device.."/"..p["name"].."/size") - if s then - local real_size_sec = tonumber(s) * tonumber(disk_temp.phy_sec) - -- if size not equal, it's an extended - if real_size_sec ~= p["size"] then - disk_temp["extended_partition_index"] = i - p["type"] = "extended" - p["size"] = real_size_sec - p["fs"] = "-" - p["logicals"] = {} - else - p["type"] = "primary" - end - else - -- if not found in "/sys/block" - p["type"] = "primary" - end - end - end - end - result = disk_temp - result.partitions = partitions_temp - - return result -end - -local mddetail = function(mdpath) - local detail = {} - local path = mdpath:match("^/dev/md%d+$") - if path then - local mdadm = io.popen(d.command.mdadm .. " --detail "..path, "r") - for line in mdadm:lines() do - local key, value = line:match("^%s*(.+) : (.+)") - if key then - detail[key] = value - end - end - mdadm:close() - end - return detail -end - --- return {{device="", mount_points="", fs="", mount_options="", dump="", pass=""}..} -d.get_mount_points = function() - local mount - local res = {} - local h ={"device", "mount_point", "fs", "mount_options", "dump", "pass"} - for mount in proc_mounts:gmatch("[^\n]+") do - local device = mount:match("^([^%s]+)%s+.+") - -- only show /dev/xxx device - if device and device:match("/dev/") then - res[#res+1] = {} - local i = 0 - for v in mount:gmatch("[^%s]+") do - i = i + 1 - res[#res][h[i]] = v - end - end - end - return res -end - -d.get_disk_info = function(device, wakeup) - --[[ return: - { - path, model, sn, size, size_mounted, flags, type, temp, p_table, logic_sec, phy_sec, sec_size, sata_ver, rota_rate, status, health, - partitions = { - 1 = { number, name, sec_start, sec_end, size, size_mounted, fs, tag_name, type, flags, mount_point, usage, used, free, used_formated, free_formated}, - 2 = { number, name, sec_start, sec_end, size, size_mounted, fs, tag_name, type, flags, mount_point, usage, used, free, used_formated, free_formated}, - ... - } - --raid devices only - level, members, members_str - } - --]] - if not device then return end - local disk_info - local smart_info = get_smart_info(device) - - -- check if divice is the member of raid - smart_info["p_table"] = is_raid_member(device..'0') - -- if status is not active(standby), only check smart_info. - -- if only weakup == true, weakup the disk and check parted_info. - if smart_info.status ~= "STANDBY" or wakeup or (smart_info["p_table"] and not smart_info["p_table"]:match("Raid")) or device:match("^md") then - disk_info = get_parted_info(device) - disk_info["sec_size"] = disk_info["logic_sec"] .. "/" .. disk_info["phy_sec"] - disk_info["size_formated"] = byte_format(tonumber(disk_info["size"])) - -- if status is standby, after get part info, the disk is weakuped, then get smart_info again for more informations - if smart_info.status ~= "ACTIVE" then smart_info = get_smart_info(device) end - else - disk_info = {} - end - - for k, v in pairs(smart_info) do - disk_info[k] = v - end - - if disk_info.type and disk_info.type:match("md") then - local raid_info = d.list_raid_devices()[disk_info["path"]:match("/dev/(.+)")] - for k, v in pairs(raid_info) do - disk_info[k] = v - end - end - return disk_info -end - -d.list_raid_devices = function() - local fs = require "nixio.fs" - - local raid_devices = {} - if not fs.access("/proc/mdstat") then return raid_devices end - local mdstat = io.open("/proc/mdstat", "r") - for line in mdstat:lines() do - - -- md1 : active raid1 sdb2[1] sda2[0] - -- md127 : active raid5 sdh1[6] sdg1[4] sdf1[3] sde1[2] sdd1[1] sdc1[0] - local device_info = {} - local mdpath, list = line:match("^(md%d+) : (.+)") - if mdpath then - local members = {} - for member in string.gmatch(list, "%S+") do - member_path = member:match("^(%S+)%[%d+%]") - if member_path then - member = '/dev/'..member_path - end - table.insert(members, member) - end - local active = table.remove(members, 1) - local level = "-" - if active == "active" then - level = table.remove(members, 1) - end - - local size = tonumber(fs.readfile(string.format("/sys/class/block/%s/size", mdpath))) - local ss = tonumber(fs.readfile(string.format("/sys/class/block/%s/queue/logical_block_size", mdpath))) - - device_info["path"] = "/dev/"..mdpath - device_info["size"] = size*ss - device_info["size_formated"] = byte_format(size*ss) - device_info["active"] = active:upper() - device_info["level"] = level - device_info["members"] = members - device_info["members_str"] = table.concat(members, ", ") - - -- Get more info from output of mdadm --detail - local detail = mddetail(device_info["path"]) - device_info["status"] = detail["State"]:upper() - - raid_devices[mdpath] = device_info - end - end - mdstat:close() - - return raid_devices -end - --- Collect Devices information - --[[ return: - { - sda={ - path, model, inuse, size_formated, - partitions={ - { name, inuse, size_formated } - ... - } - } - .. - } - --]] -d.list_devices = function() - local fs = require "nixio.fs" - - -- get all device names (sdX and mmcblkX) - local target_devnames = {} - for dev in fs.dir("/dev") do - if dev:match("^sd[a-z]$") - or dev:match("^mmcblk%d+$") - or dev:match("^sata[a-z]$") - or dev:match("^nvme%d+n%d+$") - then - table.insert(target_devnames, dev) - end - end - - local devices = {} - for i, bname in pairs(target_devnames) do - local device_info = {} - local device = "/dev/" .. bname - local size = tonumber(fs.readfile(string.format("/sys/class/block/%s/size", bname)) or "0") - local ss = tonumber(fs.readfile(string.format("/sys/class/block/%s/queue/logical_block_size", bname)) or "0") - local model = fs.readfile(string.format("/sys/class/block/%s/device/model", bname)) - local partitions = {} - for part in nixio.fs.glob("/sys/block/" .. bname .."/" .. bname .. "*") do - local pname = nixio.fs.basename(part) - local psize = byte_format(tonumber(nixio.fs.readfile(part .. "/size"))*ss) - local mount_point = get_mount_point(pname) - if mount_point then device_info["inuse"] = true end - table.insert(partitions, {name = pname, size_formated = psize, inuse = mount_point}) - end - - device_info["path"] = device - device_info["size_formated"] = byte_format(size*ss) - device_info["model"] = model - device_info["partitions"] = partitions - -- true or false - device_info["inuse"] = device_info["inuse"] or get_mount_point(bname) - - local udevinfo = {} - if luci.sys.exec("which udevadm") ~= "" then - local udevadm = io.popen("udevadm info --query=property --name="..device) - for attr in udevadm:lines() do - local k, v = attr:match("(%S+)=(%S+)") - udevinfo[k] = v - end - udevadm:close() - - device_info["info"] = udevinfo - if udevinfo["ID_MODEL"] then device_info["model"] = udevinfo["ID_MODEL"] end - end - devices[bname] = device_info - end - -- luci.util.perror(luci.util.serialize_json(devices)) - return devices -end - --- get formart cmd -d.get_format_cmd = function() - local AVAILABLE_FMTS = { - ext2 = { cmd = "mkfs.ext2", option = "-F -E lazy_itable_init=1" }, - ext3 = { cmd = "mkfs.ext3", option = "-F -E lazy_itable_init=1" }, - ext4 = { cmd = "mkfs.ext4", option = "-F -E lazy_itable_init=1" }, - fat32 = { cmd = "mkfs.vfat", option = "-F" }, - exfat = { cmd = "mkexfat", option = "-f" }, - hfsplus = { cmd = "mkhfs", option = "-f" }, - ntfs = { cmd = "mkntfs", option = "-f" }, - swap = { cmd = "mkswap", option = "" }, - btrfs = { cmd = "mkfs.btrfs", option = "-f" } - } - result = {} - for fmt, obj in pairs(AVAILABLE_FMTS) do - local cmd = luci.sys.exec("/usr/bin/which " .. obj["cmd"]) - if cmd:match(obj["cmd"]) then - result[fmt] = { cmd = cmd:match("^.+"..obj["cmd"]) ,option = obj["option"] } - end - end - return result -end - -d.create_raid = function(rname, rlevel, rmembers) - local mb = {} - for _, v in ipairs(rmembers) do - mb[v]=v - end - rmembers = {} - for _, v in pairs(mb) do - table.insert(rmembers, v) - end - if type(rname) == "string" then - if rname:match("^md%d-%s+") then - rname = "/dev/"..rname:match("^(md%d-)%s+") - elseif rname:match("^/dev/md%d-%s+") then - rname = "/dev/"..rname:match("^(/dev/md%d-)%s+") - elseif not rname:match("/") then - rname = "/dev/md/".. rname - else - return "ERR: Invalid raid name" - end - else - local mdnum = 0 - for num=1,127 do - local md = io.open("/dev/md"..tostring(num), "r") - if md == nil then - mdnum = num - break - else - io.close(md) - end - end - if mdnum == 0 then return "ERR: Cannot find proper md number" end - rname = "/dev/md"..mdnum - end - - if rlevel == "5" or rlevel == "6" then - if #rmembers < 3 then return "ERR: Not enough members" end - end - if rlevel == "10" then - if #rmembers < 4 then return "ERR: Not enough members" end - end - if #rmembers < 2 then return "ERR: Not enough members" end - local cmd = d.command.mdadm .. " --create "..rname.." --run --assume-clean --homehost=any --level=" .. rlevel .. " --raid-devices=" .. #rmembers .. " " .. table.concat(rmembers, " ") - local res = luci.util.exec(cmd) - return res -end - -d.gen_mdadm_config = function() - if not nixio.fs.access("/etc/config/mdadm") then return end - local uci = require "luci.model.uci" - local x = uci.cursor() - -- delete all array sections - x:foreach("mdadm", "array", function(s) x:delete("mdadm",s[".name"]) end) - local cmd = d.command.mdadm .. " -D -s" - --ARRAY /dev/md1 metadata=1.2 name=any:1 UUID=f998ae14:37621b27:5c49e850:051f6813 - --ARRAY /dev/md3 metadata=1.2 name=any:3 UUID=c068c141:4b4232ca:f48cbf96:67d42feb - for _, v in ipairs(luci.util.execl(cmd)) do - local device, uuid = v:match("^ARRAY%s-([^%s]+)%s-[^%s]-%s-[^%s]-%s-UUID=([^%s]+)%s-") - if device and uuid then - local section_name = x:add("mdadm", "array") - x:set("mdadm", section_name, "device", device) - x:set("mdadm", section_name, "uuid", uuid) - end - end - x:commit("mdadm") - -- enable mdadm - luci.util.exec("/etc/init.d/mdadm enable") -end - --- list btrfs filesystem device --- {uuid={uuid, label, members, size, used}...} -d.list_btrfs_devices = function() - local btrfs_device = {} - if not d.command.btrfs then return btrfs_device end - local line, _uuid - for _, line in ipairs(luci.util.execl(d.command.btrfs .. " filesystem show -d --raw")) - do - local label, uuid = line:match("^Label:%s+([^%s]+)%s+uuid:%s+([^%s]+)") - if label and uuid then - _uuid = uuid - local _label = label:match("^'([^']+)'") - btrfs_device[_uuid] = {label = _label or label, uuid = uuid} - -- table.insert(btrfs_device, {label = label, uuid = uuid}) - end - local used = line:match("Total devices[%w%s]+used%s+(%d+)$") - if used then - btrfs_device[_uuid]["used"] = tonumber(used) - btrfs_device[_uuid]["used_formated"] = byte_format(tonumber(used)) - end - local size, device = line:match("devid[%w.%s]+size%s+(%d+)[%w.%s]+path%s+([^%s]+)$") - if size and device then - btrfs_device[_uuid]["size"] = btrfs_device[_uuid]["size"] and btrfs_device[_uuid]["size"] + tonumber(size) or tonumber(size) - btrfs_device[_uuid]["size_formated"] = byte_format(btrfs_device[_uuid]["size"]) - btrfs_device[_uuid]["members"] = btrfs_device[_uuid]["members"] and btrfs_device[_uuid]["members"]..", "..device or device - end - end - return btrfs_device -end - -d.create_btrfs = function(blabel, blevel, bmembers) - -- mkfs.btrfs -L label -d blevel /dev/sda /dev/sdb - if not d.command.btrfs or type(bmembers) ~= "table" or next(bmembers) == nil then return "ERR no btrfs support or no members" end - local label = blabel and " -L " .. blabel or "" - local cmd = "mkfs.btrfs -f " .. label .. " -d " .. blevel .. " " .. table.concat(bmembers, " ") - return luci.util.exec(cmd) -end - --- get btrfs info --- {uuid, label, members, data_raid_level,metadata_raid_lavel, size, used, size_formated, used_formated, free, free_formated, usage} -d.get_btrfs_info = function(m_point) - local btrfs_info = {} - if not m_point or not d.command.btrfs then return btrfs_info end - local cmd = d.command.btrfs .. " filesystem show --raw " .. m_point - local _, line, uuid, _label, members - for _, line in ipairs(luci.util.execl(cmd)) do - if not uuid and not _label then - _label, uuid = line:match("^Label:%s+([^%s]+)%s+uuid:%s+([^s]+)") - else - local mb = line:match("%s+devid.+path%s+([^%s]+)") - if mb then - members = members and (members .. ", ".. mb) or mb - end - end - end - - if not _label or not uuid then return btrfs_info end - local label = _label:match("^'([^']+)'") - cmd = d.command.btrfs .. " filesystem usage -b " .. m_point - local used, free, data_raid_level, metadata_raid_lavel - for _, line in ipairs(luci.util.execl(cmd)) do - if not used then - used = line:match("^%s+Used:%s+(%d+)") - elseif not free then - free = line:match("^%s+Free %(estimated%):%s+(%d+)") - elseif not data_raid_level then - data_raid_level = line:match("^Data,%s-(%w+)") - elseif not metadata_raid_lavel then - metadata_raid_lavel = line:match("^Metadata,%s-(%w+)") - end - end - if used and free and data_raid_level and metadata_raid_lavel then - used = tonumber(used) - free = tonumber(free) - btrfs_info = { - uuid = uuid, - label = label, - data_raid_level = data_raid_level, - metadata_raid_lavel = metadata_raid_lavel, - used = used, - free = free, - size = used + free, - size_formated = byte_format(used + free), - used_formated = byte_format(used), - free_formated = byte_format(free), - members = members, - usage = string.format("%.2f",(used / (free+used) * 100)) .. "%" - } - end - return btrfs_info -end - --- get btrfs subvolume --- {id={id, gen, top_level, path, snapshots, otime, default_subvolume}...} -d.get_btrfs_subv = function(m_point, snapshot) -local subvolume = {} -if not m_point or not d.command.btrfs then return subvolume end - --- get default subvolume -local cmd = d.command.btrfs .. " subvolume get-default " .. m_point -local res = luci.util.exec(cmd) -local default_subvolume_id = res:match("^ID%s+([^%s]+)") - --- get the root subvolume -if not snapshot then - local _, line, section_snap, _uuid, _otime, _id, _snap - cmd = d.command.btrfs .. " subvolume show ".. m_point - for _, line in ipairs(luci.util.execl(cmd)) do - if not section_snap then - if not _uuid then - _uuid = line:match("^%s-UUID:%s+([^%s]+)") - elseif not _otime then - _otime = line:match("^%s+Creation time:%s+(.+)") - elseif not _id then - _id = line:match("^%s+Subvolume ID:%s+([^%s]+)") - elseif line:match("^%s+(Snapshot%(s%):)") then - section_snap = true - end - else - local snapshot = line:match("^%s+(.+)") - if snapshot then - _snap = _snap and (_snap ..", /".. snapshot) or ("/"..snapshot) - end - end - end - if _uuid and _otime and _id then - subvolume["0".._id] = {id = _id , uuid = _uuid, otime = _otime, snapshots = _snap, path = "/"} - if default_subvolume_id == _id then - subvolume["0".._id].default_subvolume = 1 - end - end -end - --- get subvolume of btrfs -cmd = d.command.btrfs .. " subvolume list -gcu" .. (snapshot and "s " or " ") .. m_point -for _, line in ipairs(luci.util.execl(cmd)) do - -- ID 259 gen 11 top level 258 uuid 26ae0c59-199a-cc4d-bd58-644eb4f65d33 path 1a/2b' - local id, gen, top_level, uuid, path, otime, otime2 - if snapshot then - id, gen, top_level, otime, otime2, uuid, path = line:match("^ID%s+([^%s]+)%s+gen%s+([^%s]+)%s+cgen.-top level%s+([^%s]+)%s+otime%s+([^%s]+)%s+([^%s]+)%s+uuid%s+([^%s]+)%s+path%s+([^%s]+)%s-$") - else - id, gen, top_level, uuid, path = line:match("^ID%s+([^%s]+)%s+gen%s+([^%s]+)%s+cgen.-top level%s+([^%s]+)%s+uuid%s+([^%s]+)%s+path%s+([^%s]+)%s-$") - end - if id and gen and top_level and uuid and path then - subvolume[id] = {id = id, gen = gen, top_level = top_level, otime = (otime and otime or "") .." ".. (otime2 and otime2 or ""), uuid = uuid, path = '/'.. path} - if not snapshot then - -- use btrfs subv show to get snapshots - local show_cmd = d.command.btrfs .. " subvolume show "..m_point.."/"..path - local __, line_show, section_snap - for __, line_show in ipairs(luci.util.execl(show_cmd)) do - if not section_snap then - local create_time = line_show:match("^%s+Creation time:%s+(.+)") - if create_time then - subvolume[id]["otime"] = create_time - elseif line_show:match("^%s+(Snapshot%(s%):)") then - section_snap = "true" - end - else - local snapshot = line_show:match("^%s+(.+)") - subvolume[id]["snapshots"] = subvolume[id]["snapshots"] and (subvolume[id]["snapshots"] .. ", /".. snapshot) or ("/"..snapshot) - end - end - end - end -end -if subvolume[default_subvolume_id] then - subvolume[default_subvolume_id].default_subvolume = 1 -end --- if m_point == "/tmp/.btrfs_tmp" then --- luci.util.exec("umount " .. m_point) --- end -return subvolume -end - -d.format_partition = function(partition, fs) - local partition_name = "/dev/".. partition - if not nixio.fs.access(partition_name) then - return 500, "Partition NOT found!" - end - - local format_cmd = d.get_format_cmd() - if not format_cmd[fs] then - return 500, "Filesystem NOT support!" - end - local cmd = format_cmd[fs].cmd .. " " .. format_cmd[fs].option .. " " .. partition_name - local res = luci.util.exec(cmd .. " 2>&1") - if res and res:lower():match("error+") then - return 500, res - else - return 200, "OK" - end -end - -return d diff --git a/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/disabled_button.htm b/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/disabled_button.htm deleted file mode 100644 index 1ad4eca3b..000000000 --- a/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/disabled_button.htm +++ /dev/null @@ -1,7 +0,0 @@ -<%+cbi/valueheader%> - <% if self:cfgvalue(section) ~= false then %> - " type="submit"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> <% if self.view_disabled then %> disabled <% end %>/> - <% else %> - - - <% end %> -<%+cbi/valuefooter%> \ No newline at end of file diff --git a/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/format_button.htm b/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/format_button.htm deleted file mode 100644 index 18e306e27..000000000 --- a/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/format_button.htm +++ /dev/null @@ -1,7 +0,0 @@ -<%+cbi/valueheader%> - <% if self:cfgvalue(section) ~= false then %> - " onclick="event.preventDefault();partition_format('<%=self.partitions[section].name%>', '<%=self.format_cmd%>', '<%=self.inputtitle%>');" type="submit"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> <% if self.view_disabled then %> disabled <% end %>/> - <% else %> - - - <% end %> -<%+cbi/valuefooter%> diff --git a/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/inlinebutton.htm b/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/inlinebutton.htm deleted file mode 100644 index b1b193257..000000000 --- a/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/inlinebutton.htm +++ /dev/null @@ -1,7 +0,0 @@ -
- <% if self:cfgvalue(section) ~= false then %> - " type="submit"" <% if self.disable then %>disabled <% end %><%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> /> - <% else %> - - - <% end %> -
diff --git a/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/xnullsection.htm b/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/xnullsection.htm deleted file mode 100644 index 69aa65e00..000000000 --- a/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/xnullsection.htm +++ /dev/null @@ -1,37 +0,0 @@ -
- <% if self.title and #self.title > 0 then -%> - <%=self.title%> - <%- end %> - <% if self.description and #self.description > 0 then -%> -
<%=self.description%>
- <%- end %> -
-
- <% self:render_children(1, scope or {}) %> -
- <% if self.error and self.error[1] then -%> -
-
    <% for _, e in ipairs(self.error[1]) do -%> -
  • - <%- if e == "invalid" then -%> - <%:One or more fields contain invalid values!%> - <%- elseif e == "missing" then -%> - <%:One or more required fields have no value!%> - <%- else -%> - <%=pcdata(e)%> - <%- end -%> -
  • - <%- end %>
-
- <%- end %> -
-
-<%- - if type(self.hidden) == "table" then - for k, v in pairs(self.hidden) do --%> - -<%- - end - end -%> \ No newline at end of file diff --git a/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/xsimpleform.htm b/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/xsimpleform.htm deleted file mode 100644 index a831bfc77..000000000 --- a/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/cbi/xsimpleform.htm +++ /dev/null @@ -1,88 +0,0 @@ -<% if not self.embedded then %> -
> - - - <% - end - - %>
<% - - if self.title and #self.title > 0 then - %>

<%=self.title%>

<% - end - - if self.description and #self.description > 0 then - %>
<%=self.description%>
<% - end - - self:render_children() - - %>
<% - - if self.message then - %>
<%=self.message%>
<% - end - - if self.errmessage then - %>
<%=self.errmessage%>
<% - end - - if not self.embedded then - if type(self.hidden) == "table" then - local k, v - for k, v in pairs(self.hidden) do - %><% - end - end - - local display_back = (self.redirect) - local display_cancel = (self.cancel ~= false and self.on_cancel) - local display_skip = (self.flow and self.flow.skip) - local display_submit = (self.submit ~= false) - local display_reset = (self.reset ~= false) - - if display_back or display_cancel or display_skip or display_submit or display_reset then - %>
<% - - if display_back then - %> <% - end - - if display_cancel then - local label = pcdata(self.cancel or translate("Cancel")) - %> <% - end - - if display_skip then - %> <% - end - - if display_submit then - local label = pcdata(self.submit or translate("Submit")) - %> <% - end - - if display_reset then - local label = pcdata(self.reset or translate("Reset")) - %> <% - end - - %>
<% - end - - %>
<% - end -%> - - diff --git a/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/disk_info.htm b/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/disk_info.htm deleted file mode 100644 index 118acd50d..000000000 --- a/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/disk_info.htm +++ /dev/null @@ -1,108 +0,0 @@ - diff --git a/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/partition_info.htm b/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/partition_info.htm deleted file mode 100644 index 78f5c1bd7..000000000 --- a/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/partition_info.htm +++ /dev/null @@ -1,129 +0,0 @@ - - \ No newline at end of file diff --git a/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/smart_detail.htm b/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/smart_detail.htm deleted file mode 100644 index 56a9139f0..000000000 --- a/package/lean/lisaac/luci-app-diskman/luasrc/view/diskman/smart_detail.htm +++ /dev/null @@ -1,79 +0,0 @@ - - - S.M.A.R.T detail of <%=dev%> - - - - -
-
- <%:S.M.A.R.T Attrbutes%>: /dev/<%=dev%> - - - <% if dev:match("nvme") then %> - - <% else %> - - - - - - - - - - <% end %> - - - - -
<%:ID%><%:Attrbute%><%:Flag%><%:Value%><%:Worst%><%:Thresh%><%:Type%><%:Updated%><%:Raw%>

<%:Collecting data...%>
-
-
- - \ No newline at end of file diff --git a/package/lean/lisaac/luci-app-diskman/po/pl/diskman.po b/package/lean/lisaac/luci-app-diskman/po/pl/diskman.po deleted file mode 100644 index 169655633..000000000 --- a/package/lean/lisaac/luci-app-diskman/po/pl/diskman.po +++ /dev/null @@ -1,239 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8\n" - -msgid "DiskMan" -msgstr "Menadżer dysków" - -msgid "Manage Disks over LuCI." -msgstr "Zarządzaj dyskami przez LuCI." - -msgid "Rescan Disks" -msgstr "Skanuj dyski" - -msgid "Disks" -msgstr "Dyski" - -msgid "Path" -msgstr "Ścieżka" - -msgid "Serial Number" -msgstr "Numer seryjny" - -msgid "Temp" -msgstr "Temperatura" - -msgid "Partition Table" -msgstr "Tablica partycji" - -msgid "SATA Version" -msgstr "Wersja SATA" - -msgid "Health" -msgstr "Kondycja" - -msgid "File System" -msgstr "System plików" - -msgid "Mount Options" -msgstr "Opcje montowania" - -msgid "Mount" -msgstr "Montuj" - -msgid "Umount" -msgstr "Odmontuj" - -msgid "Eject" -msgstr "Wysuń" - -msgid "New" -msgstr "Nowa" - -msgid "Remove" -msgstr "Wysuń" - -msgid "Format" -msgstr "Formatuj" - -msgid "Start Sector" -msgstr "Sektor początkowy" - -msgid "End Sector" -msgstr "Sektor końcowy" - -msgid "Usage" -msgstr "Wykorzystane" - -msgid "Used" -msgstr "Zajęte" - -msgid "Free Space" -msgstr "Wolna przestrzeń" - -msgid "Model" -msgstr "Model urządzenia" - -msgid "Size" -msgstr "Rozmiar" - -msgid "Status" -msgstr "Status" - -msgid "Mount Point" -msgstr "Punkt montowania" - -msgid "Sector Size" -msgstr "Rozmiar sektora" - -msgid "Rotation Rate" -msgstr "Obroty" - -msgid "RAID Devices" -msgstr "Urządzenia RAID" - -msgid "RAID mode" -msgstr "Tryb RAID" - -msgid "Members" -msgstr "Członkowie" - -msgid "Active" -msgstr "Aktywny" - -msgid "RAID Creation" -msgstr "Kreator RAID" - -msgid "Raid Name" -msgstr "Nazwa RAID" - -msgid "Raid Level" -msgstr "Poziom RAID" - -msgid "Raid Member" -msgstr "Członek RAID" - -msgid "Create Raid" -msgstr "Utwórz RAID" - -msgid "Partition Management" -msgstr "Menadżer partycji" - -msgid "Partition Disk over LuCI." -msgstr "Zarządzaj partycjami przez LuCI." - -msgid "Device Info" -msgstr "Informacja o urządzeniu" - -msgid "Disk Man" -msgstr "Menadżer dysków" - -msgid "Partitions Info" -msgstr "Informacja o partycjach" - -msgid "Default 2048 sector alignment, support +size{b,k,m,g,t} in End Sector" -msgstr "Sektory wyrównywane są do wielokrotności 2048, sektor końcowy można podać jako rozmiar w postaci +size{b,k,m,g,t}" - -msgid "Multiple Devices Btrfs Creation" -msgstr "Kreator urządzeń Btrfs" - -msgid "Label" -msgstr "Etykieta" - -msgid "Btrfs Label" -msgstr "Etykieta Btrfs" - -msgid "Btrfs Raid Level" -msgstr "Poziom Raid Btrfs" - -msgid "Btrfs Member" -msgstr "Członek Btrfs" - -msgid "Create Btrfs" -msgstr "Utwórz Btrfs" - -msgid "New Snapshot" -msgstr "Nowy obraz" - -msgid "SubVolumes" -msgstr "Sub-wolumeny" - -msgid "Top Level" -msgstr "Top Level" - -msgid "Manage Btrfs" -msgstr "Zarządzaj Btrfs" - -msgid "Otime" -msgstr "Otime" - -msgid "Snapshots" -msgstr "Obrazy" - -msgid "Set Default" -msgstr "Ustaw domyślnie" - -msgid "Source Path" -msgstr "Ścieżka źródłowa" - -msgid "Readonly" -msgstr "Tylko do odczytu" - -msgid "Delete" -msgstr "Usuń" - -msgid "Create" -msgstr "Utwórz" - -msgid "Destination Path (optional)" -msgstr "Ścieżka docelowa (opcjonalnie)" - -msgid "Metadata" -msgstr "Metadata" - -msgid "Data" -msgstr "Data" - -msgid "Btrfs Info" -msgstr "Informacja o Btrfs" - -msgid "The source path for create the snapshot" -msgstr "Ścieżka źródłowa do utworzenia obrazu" - -msgid "The path where you want to store the snapshot" -msgstr "Ścieżka w której chcesz przechowywać obraz" - -msgid "Please input Source Path of snapshot, Source Path must start with '/'" -msgstr "Proszę podać ścieżkę źródłową dla obrazu, ścieżka musi zaczynać się od '/'" - -msgid "Please input Subvolume Path, Subvolume must start with '/'" -msgstr "Proszę podać ścieżkę dla sub-wolumenu, sub-wolumen musi zaczynać się od '/'" - -msgid "is in use! please unmount it first!" -msgstr "aktualnie jest w użyciu, proszę najpierw odmontować!" - -msgid "Partition NOT found!" -msgstr "Nie znaleziono partycji!" - -msgid "Filesystem NOT support!" -msgstr "System plików nie jest obsługiwany!" - -msgid "Invalid Start Sector!" -msgstr "Nieprawidłowy sektor początkowy!" - -msgid "Invalid End Sector" -msgstr "Nieprawidłowy sektor końcowy!" - -msgid "Partition not exists!" -msgstr "Partycja nie istnieje!" - -msgid "Creation" -msgstr "Kreator" - -msgid "Please select file system!" -msgstr "Proszę wybrać system plików!" - -msgid "Format partation:" -msgstr "Format partycji:" - -msgid "Warnning !! \nTHIS WILL OVERWRITE EXISTING PARTITIONS!! \nModify the partition table?" -msgstr "Ostrzeżenie !! \nISTNIEJĄCE PARTYCJE ZOSTANĄ NADPISANE!! \nZmodyfikować tablicę partycji?" diff --git a/package/lean/lisaac/luci-app-diskman/po/zh-cn/diskman.po b/package/lean/lisaac/luci-app-diskman/po/zh-cn/diskman.po deleted file mode 100644 index f380fc586..000000000 --- a/package/lean/lisaac/luci-app-diskman/po/zh-cn/diskman.po +++ /dev/null @@ -1,239 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8\n" - -msgid "DiskMan" -msgstr "DiskMan 磁盘管理" - -msgid "Manage Disks over LuCI." -msgstr "通过 LuCI 管理磁盘" - -msgid "Rescan Disks" -msgstr "重新扫描磁盘" - -msgid "Disks" -msgstr "磁盘" - -msgid "Path" -msgstr "路径" - -msgid "Serial Number" -msgstr "序列号" - -msgid "Temp" -msgstr "温度" - -msgid "Partition Table" -msgstr "分区表" - -msgid "SATA Version" -msgstr "SATA 版本" - -msgid "Health" -msgstr "健康" - -msgid "File System" -msgstr "文件系统" - -msgid "Mount Options" -msgstr "挂载选项" - -msgid "Mount" -msgstr "挂载" - -msgid "Umount" -msgstr "卸载" - -msgid "Eject" -msgstr "弹出" - -msgid "New" -msgstr "创建" - -msgid "Remove" -msgstr "移除" - -msgid "Format" -msgstr "格式化" - -msgid "Start Sector" -msgstr "起始扇区" - -msgid "End Sector" -msgstr "中止扇区" - -msgid "Usage" -msgstr "用量" - -msgid "Used" -msgstr "已使用" - -msgid "Free Space" -msgstr "空闲空间" - -msgid "Model" -msgstr "型号" - -msgid "Size" -msgstr "容量" - -msgid "Status" -msgstr "状态" - -msgid "Mount Point" -msgstr "挂载点" - -msgid "Sector Size" -msgstr "扇区/物理扇区大小" - -msgid "Rotation Rate" -msgstr "转速" - -msgid "RAID Devices" -msgstr "RAID 设备" - -msgid "RAID mode" -msgstr "RAID 模式" - -msgid "Members" -msgstr "成员" - -msgid "Active" -msgstr "活动" - -msgid "RAID Creation" -msgstr "RAID 创建" - -msgid "Raid Name" -msgstr "RAID 名称" - -msgid "Raid Level" -msgstr "RAID 级别" - -msgid "Raid Member" -msgstr "磁盘阵列成员" - -msgid "Create Raid" -msgstr "创建 RAID" - -msgid "Partition Management" -msgstr "分区管理" - -msgid "Partition Disk over LuCI." -msgstr "通过LuCI分区磁盘。" - -msgid "Device Info" -msgstr "设备信息" - -msgid "Disk Man" -msgstr "磁盘管理" - -msgid "Partitions Info" -msgstr "分区信息" - -msgid "Default 2048 sector alignment, support +size{b,k,m,g,t} in End Sector" -msgstr "默认2048扇区对齐,【中止扇区】支持 +容量{b,k,m,g,t} 格式,例:+500m +10g +1t" - -msgid "Multiple Devices Btrfs Creation" -msgstr "Btrfs 阵列创建" - -msgid "Label" -msgstr "卷标" - -msgid "Btrfs Label" -msgstr "Btrfs 卷标" - -msgid "Btrfs Raid Level" -msgstr "Btrfs Raid 级别" - -msgid "Btrfs Member" -msgstr "Btrfs 整列成员" - -msgid "Create Btrfs" -msgstr "创建 Btrfs" - -msgid "New Snapshot" -msgstr "新建快照" - -msgid "SubVolumes" -msgstr "子卷" - -msgid "Top Level" -msgstr "父ID" - -msgid "Manage Btrfs" -msgstr "Btrfs 管理" - -msgid "Otime" -msgstr "创建时间" - -msgid "Snapshots" -msgstr "快照" - -msgid "Set Default" -msgstr "默认子卷" - -msgid "Source Path" -msgstr "源目录" - -msgid "Readonly" -msgstr "只读" - -msgid "Delete" -msgstr "删除" - -msgid "Create" -msgstr "创建" - -msgid "Destination Path (optional)" -msgstr "目标目录(可选)" - -msgid "Metadata" -msgstr "元数据" - -msgid "Data" -msgstr "数据" - -msgid "Btrfs Info" -msgstr "Btrfs 信息" - -msgid "The source path for create the snapshot" -msgstr "创建快照的源数据目录" - -msgid "The path where you want to store the snapshot" -msgstr "存放快照数据目录" - -msgid "Please input Source Path of snapshot, Source Path must start with '/'" -msgstr "请输入快照源路径,源路径必须以'/'开头" - -msgid "Please input Subvolume Path, Subvolume must start with '/'" -msgstr "请输入子卷路径,子卷路径必须以'/'开头" - -msgid "is in use! please unmount it first!" -msgstr "正在被使用!请先卸载!" - -msgid "Partition NOT found!" -msgstr "分区未找到!" - -msgid "Filesystem NOT support!" -msgstr "文件系统不支持!" - -msgid "Invalid Start Sector!" -msgstr "无效的起始扇区!" - -msgid "Invalid End Sector" -msgstr "无效的终止扇区!" - -msgid "Partition not exists!" -msgstr "分区不存在!" - -msgid "Creation" -msgstr "创建" - -msgid "Please select file system!" -msgstr "请选择文件系统!" - -msgid "Format partation:" -msgstr "格式化分区:" - -msgid "Warnning !! \nTHIS WILL OVERWRITE EXISTING PARTITIONS!! \nModify the partition table?" -msgstr "警告!!\n此操作会覆盖现有分区\n确定修改分区表?" diff --git a/package/lean/lisaac/luci-app-diskman/po/zh_Hans b/package/lean/lisaac/luci-app-diskman/po/zh_Hans deleted file mode 120000 index 41451e4a1..000000000 --- a/package/lean/lisaac/luci-app-diskman/po/zh_Hans +++ /dev/null @@ -1 +0,0 @@ -zh-cn \ No newline at end of file diff --git a/package/lean/lisaac/luci-app-dockerman/Makefile b/package/lean/lisaac/luci-app-dockerman/Makefile deleted file mode 100644 index 51dfa5c09..000000000 --- a/package/lean/lisaac/luci-app-dockerman/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI Support for docker -LUCI_DEPENDS:=@(aarch64||arm||x86_64) \ - +luci-compat \ - +luci-lib-docker \ - +luci-lib-ip \ - +docker \ - +dockerd \ - +ttyd -LUCI_PKGARCH:=all - -PKG_LICENSE:=AGPL-3.0 -PKG_MAINTAINER:=lisaac \ - Florian Eckert - -PKG_VERSION:=v0.5.25 - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/lean/lisaac/luci-app-dockerman/depends.lst b/package/lean/lisaac/luci-app-dockerman/depends.lst deleted file mode 100644 index 8a62f6a74..000000000 --- a/package/lean/lisaac/luci-app-dockerman/depends.lst +++ /dev/null @@ -1 +0,0 @@ -ttyd docker-cli \ No newline at end of file diff --git a/package/lean/lisaac/luci-app-dockerman/po/templates/dockerman.pot b/package/lean/lisaac/luci-app-dockerman/po/templates/dockerman.pot deleted file mode 100644 index 0d6a5de98..000000000 --- a/package/lean/lisaac/luci-app-dockerman/po/templates/dockerman.pot +++ /dev/null @@ -1,1002 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:619 -msgid "A list of kernel capabilities to add to the container" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:69 -msgid "Access Control" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:223 -msgid "Add" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:595 -msgid "Add host device to the container" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:571 -msgid "Advance" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:586 -msgid "Allocates an ephemeral host port for all of a container's exposed ports" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:118 -msgid "Allowed access interfaces" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:498 -msgid "Always pull image first" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:29 -msgid "" -"An overview with the relevant data is displayed here with which the LuCI " -"docker client is connected." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:43 -msgid "Api Version" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:94 -msgid "Auto create macvlan interface in Openwrt" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:18 -msgid "Auto start" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:134 -msgid "Available" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:47 -msgid "Base device" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:553 -msgid "Bind Mount(-v)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:554 -msgid "Bind mount a volume" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:596 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:652 -msgid "Block IO Weight" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:653 -msgid "" -"Block IO weight (relative weight) accepts a weight value between 10 and 1000" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:597 -msgid "" -"Block IO weight (relative weight) accepts a weight value between 10 and 1000." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:61 -msgid "Bridge (Support direct communication between MAC VLANs)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:42 -msgid "Bridge device" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:84 -msgid "" -"By entering a valid image name with the corresponding version, the docker " -"image can be downloaded from the configured registry." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:618 -msgid "CAP-ADD(--cap-add)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:581 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:635 -msgid "CPU Shares Weight" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:779 -msgid "CPU Useage" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:636 -msgid "" -"CPU shares relative weight, if 0 is set, the system will ignore the value " -"and use the default of 1024" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:582 -msgid "" -"CPU shares relative weight, if 0 is set, the system will ignore the value " -"and use the default of 1024." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:573 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:626 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:44 -msgid "CPUs" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:159 -msgid "Can NOT connect to docker daemon, please check!!" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:91 -msgid "Cancel" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:60 -msgid "Client connection" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:347 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:687 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:182 -msgid "Command" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:100 -msgid "Command line" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:72 -msgid "Command line Error" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:17 -msgid "Configuration" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:36 -msgid "Configure the default bridge network" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:405 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:707 -msgid "Connect" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:403 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:437 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:473 -msgid "Connect Network" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:74 -msgid "Connect to remote docker endpoint" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:7 -msgid "Console" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:161 -msgid "Container Info" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:650 -msgid "Container Inspect" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:671 -msgid "Container Logs" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:473 -msgid "Container Name" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:92 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:58 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:29 -msgid "Container detail" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:38 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:142 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:148 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:87 -#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:133 -msgid "Containers" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:94 -msgid "Create macvlan interface" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:465 -msgid "Create new docker container" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:31 -msgid "Create new docker network" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:312 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:153 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:92 -msgid "Created" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:33 -msgid "DELETING" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:371 -msgid "DNS" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:51 -msgid "Debug" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:35 -msgid "Default bridge" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:363 -msgid "Device" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:594 -msgid "Device(--device)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:396 -msgid "Disconnect" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:14 -msgid "Docker" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:12 -msgid "Docker - Configuration" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:192 -msgid "Docker - Container (%s)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:128 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:450 -msgid "Docker - Containers" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/logs.htm:3 -msgid "Docker - Events" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:72 -msgid "Docker - Images" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:15 -msgid "Docker - Network" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:54 -msgid "Docker - Networks" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:28 -msgid "Docker - Overview" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:69 -msgid "Docker - Volumes" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:16 -msgid "Docker Daemon settings" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:489 -msgid "Docker Image" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:30 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:46 -msgid "Docker Root Dir" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:93 -msgid "Docker Socket Path" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:42 -msgid "Docker Version" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm:91 -msgid "Docker actions done." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:70 -msgid "DockerMan" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:13 -msgid "DockerMan is a simple docker manager client for LuCI" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:68 -msgid "DockerMan settings" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:172 -msgid "Download" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:82 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:40 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:85 -msgid "Driver" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:265 -msgid "Duplicate/Edit" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:120 -msgid "Enable IPv6" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:351 -msgid "Env" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:546 -msgid "Environmental Variable(-e)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:54 -msgid "Error" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:42 -#: applications/luci-app-dockerman/luasrc/view/dockerman/logs.htm:5 -msgid "Events" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:116 -msgid "Exclude IPs" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:247 -msgid "Export" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:585 -msgid "Exposed All Ports(-P)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:560 -msgid "Exposed Ports(-p)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:55 -msgid "Fatal" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:6 -msgid "File" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:324 -msgid "Finish Time" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:220 -msgid "Force Remove" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:88 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:106 -msgid "Gateway" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:33 -msgid "Github" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm:4 -msgid "Go to relevant configuration page" -msgstr "" - -#: applications/luci-app-dockerman/root/usr/share/rpcd/acl.d/luci-app-dockerman.json:3 -msgid "Grant UCI access for luci-app-dockerman" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:330 -msgid "Healthy" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:578 -msgid "Host Name" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:100 -msgid "Host or IP Address for the connection to a remote docker instance" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:300 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:142 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:78 -msgid "ID" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:44 -msgid "IP VLAN" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:111 -msgid "IP range" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:522 -msgid "IPv4 Address" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:132 -msgid "IPv6 Gateway" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:126 -msgid "IPv6 Subnet" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:304 -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:54 -msgid "Image" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:39 -#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:151 -msgid "Images" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:132 -msgid "Images overview" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:4 -msgid "Import" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:125 -msgid "Import Image" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:47 -msgid "Index Server Address" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:52 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:414 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:102 -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:3 -msgid "Info" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:74 -msgid "Ingress" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:75 -msgid "" -"Ingress network is the network which provides the routing-mesh in swarm mode" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:8 -msgid "Inspect" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:477 -msgid "Interactive (-i)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:86 -msgid "Internal" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:66 -msgid "Ipvlan Mode" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:43 -msgid "" -"It replaces the daemon registry mirrors with a new set of registry mirrors" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:238 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:264 -msgid "Kill" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:70 -msgid "L2 bridge" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:71 -msgid "L3 bridge" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:359 -msgid "Links" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:527 -msgid "Links with other containers" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:283 -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_load.htm:2 -msgid "Load" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:49 -msgid "Log Level" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:661 -msgid "Log driver options" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:9 -msgid "Logs" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:43 -msgid "MAC VLAN" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:589 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:644 -msgid "Memory" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:783 -msgid "Memory Useage" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:645 -msgid "" -"Memory limit (format: []). Number is a positive integer. Unit " -"can be one of b, k, m, or g. Minimum is 4M" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:590 -msgid "" -"Memory limit (format: []). Number is a positive integer. Unit " -"can be one of b, k, m, or g. Minimum is 4M." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:57 -msgid "Mode" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:90 -msgid "Mount Point" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:603 -msgid "Mount tmpfs directory" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:343 -msgid "Mount/Volume" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:175 -msgid "Mounts" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:295 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:419 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:83 -msgid "Name" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:37 -msgid "Name of the network that can be selected during container creation" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:394 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:528 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:169 -msgid "Network" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:80 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:36 -msgid "Network Name" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:40 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:518 -#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:169 -msgid "Networks" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:59 -msgid "Networks overview" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:104 -msgid "New" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:39 -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:54 -msgid "New tag" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:627 -msgid "Number of CPUs. Number is a fractional number. 0.000 means no limit" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:574 -msgid "Number of CPUs. Number is a fractional number. 0.000 means no limit." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:73 -msgid "" -"On this page all images are displayed that are available on the system and " -"with which a container can be created." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:193 -msgid "On this page, the selected container can be managed." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:82 -msgid "Options" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:45 -msgid "Overlay network" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:37 -msgid "Overview" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:33 -msgid "PLEASE CONFIRM" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:84 -msgid "Parent Interface" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:64 -msgid "Pass-through (Mirror physical device to single MAC VLAN)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:54 -msgid "Please input new tag" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:270 -msgid "Please input the PATH and select the file !" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:82 -msgid "Please input the PORT or HOST IP of remote docker instance!" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:86 -msgid "Please input the SOCKET PATH of docker daemon!" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:91 -msgid "Plese input command line:" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:355 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:172 -msgid "Ports" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:124 -msgid "Ports allowed to be accessed" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:62 -msgid "Private (Prevent communication between MAC VLANs)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:504 -msgid "Privileged" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:561 -msgid "Publish container's port(s) to the host" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:100 -msgid "Pull" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:83 -msgid "Pull Image" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:42 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:48 -msgid "Registry Mirrors" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:73 -msgid "Remote Endpoint" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:99 -msgid "Remote Host" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:106 -msgid "Remote Port" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:274 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:274 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:210 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:115 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:108 -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:173 -msgid "Remove" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:43 -#: applications/luci-app-dockerman/luasrc/view/dockerman/images_import.htm:82 -msgid "Remove tag" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:171 -msgid "Rename" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:145 -msgid "RepoTags" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:469 -msgid "Resolve CLI" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:4 -msgid "Resources" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:220 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:244 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:87 -msgid "Restart" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:334 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:427 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:510 -msgid "Restart Policy" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:86 -msgid "Restrict external access to the network" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm:31 -msgid "Reveal/hide password" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:566 -msgid "Run command" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:230 -msgid "Save" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:533 -msgid "Set custom DNS servers" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:547 -msgid "Set environment variables to inside the container" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:50 -msgid "Set the logging level" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:151 -msgid "Size" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:61 -msgid "" -"Specifies where the Docker daemon will listen for client connections " -"(default: unix:///var/run/docker.sock)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:211 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:234 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:65 -msgid "Start" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:319 -msgid "Start Time" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:789 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:790 -#: applications/luci-app-dockerman/luasrc/view/dockerman/container.htm:5 -msgid "Stats" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:308 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:165 -msgid "Status" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:229 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:254 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:65 -msgid "Stop" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm:91 -msgid "Submit" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:86 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:101 -msgid "Subnet" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:375 -msgid "Sysctl" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:610 -msgid "Sysctl(--sysctl)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:611 -msgid "Sysctls (kernel parameters) options" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:792 -msgid "TOP" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:483 -msgid "TTY (-t)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm:56 -msgid "TX/RX" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:579 -msgid "The hostname to use for the container" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:662 -msgid "The logging configuration for this container" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:540 -msgid "" -"The user that commands are run as inside the container.(format: name|uid[:" -"group|gid])" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua:129 -msgid "" -"This page displays all containers that have been created on the connected " -"docker host." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua:55 -msgid "" -"This page displays all docker networks that have been created on the " -"connected docker host." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:367 -msgid "Tmpfs" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:602 -msgid "Tmpfs(--tmpfs)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua:45 -msgid "Total Memory" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:697 -msgid "UID" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:297 -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:336 -msgid "Update" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:256 -msgid "Upgrade" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:7 -msgid "Upload" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:303 -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:304 -msgid "Upload Error" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm:294 -msgid "Upload Success" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm:48 -msgid "Upload/Download" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:339 -msgid "User" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:539 -msgid "User(-u)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua:63 -msgid "VEPA (Virtual Ethernet Port Aggregator)" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/controller/dockerman.lua:41 -#: applications/luci-app-dockerman/luasrc/view/dockerman/overview.htm:187 -msgid "Volumes" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua:73 -msgid "Volumes overview" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:53 -msgid "Warning" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua:126 -msgid "" -"When pressing the Import button, both a local image can be loaded onto the " -"system and a valid image tar can be downloaded from remote." -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:124 -msgid "" -"Which Port(s) can be accessed, it's not restricted by the Allowed Access " -"interfaces configuration. Use this configuration with caution!" -msgstr "" - -#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua:118 -msgid "" -"Which interface(s) can access containers under the bridge network, fill-in " -"Interface Name" -msgstr "" diff --git a/package/lean/lisaac/luci-app-dockerman/po/zh_Hans b/package/lean/lisaac/luci-app-dockerman/po/zh_Hans deleted file mode 120000 index 41451e4a1..000000000 --- a/package/lean/lisaac/luci-app-dockerman/po/zh_Hans +++ /dev/null @@ -1 +0,0 @@ -zh-cn \ No newline at end of file diff --git a/package/lean/lisaac/luci-app-dockerman/root/usr/share/rpcd/acl.d/luci-app-dockerman.json b/package/lean/lisaac/luci-app-dockerman/root/usr/share/rpcd/acl.d/luci-app-dockerman.json deleted file mode 100644 index 78c2c6418..000000000 --- a/package/lean/lisaac/luci-app-dockerman/root/usr/share/rpcd/acl.d/luci-app-dockerman.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "luci-app-dockerman": { - "description": "Grant UCI access for luci-app-dockerman", - "read": { - "uci": [ "dockerd" ] - }, - "write": { - "uci": [ "dockerd" ] - } - } -} diff --git a/package/lean/lisaac/luci-app-dockerman/postinst b/package/lean/luci-app-dockerman/Makefile similarity index 67% rename from package/lean/lisaac/luci-app-dockerman/postinst rename to package/lean/luci-app-dockerman/Makefile index b0db1cb89..7c553c86c 100644 --- a/package/lean/lisaac/luci-app-dockerman/postinst +++ b/package/lean/luci-app-dockerman/Makefile @@ -1,3 +1,14 @@ +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Docker Manager interface for LuCI +LUCI_DEPENDS:=+luci-lib-docker +luci-lib-ip +docker +dockerd +ttyd +PKG_NAME:=luci-app-dockerman +PKG_VERSION:=v0.5.25 +PKG_RELEASE:=1 +PKG_MAINTAINER:=lisaac +PKG_LICENSE:=AGPL-3.0 + +define Package/luci-app-dockerman/postinst #!/bin/sh /init.sh env @@ -11,4 +22,9 @@ uci set dockerd.dockerman.remote_port=`uci get dockerd.dockerman.remote_port 2&> uci set dockerd.dockerman.remote_endpoint=`uci get dockerd.dockerman.remote_endpoint 2&> /dev/null || echo '0'` uci del_list dockerd.dockerman.ac_allowed_interface='br-lan' uci add_list dockerd.dockerman.ac_allowed_interface='br-lan' -uci commit dockerd \ No newline at end of file +uci commit dockerd +endef + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/containers.svg b/package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/containers.svg similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/containers.svg rename to package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/containers.svg diff --git a/package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-icon.png b/package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-icon.png similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-icon.png rename to package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-icon.png diff --git a/package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-manager.css b/package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-manager.css similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-manager.css rename to package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/file-manager.css diff --git a/package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/folder-icon.png b/package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/folder-icon.png similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/folder-icon.png rename to package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/folder-icon.png diff --git a/package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/images.svg b/package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/images.svg similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/images.svg rename to package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/images.svg diff --git a/package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/link-icon.png b/package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/link-icon.png similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/link-icon.png rename to package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/link-icon.png diff --git a/package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/networks.svg b/package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/networks.svg similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/networks.svg rename to package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/networks.svg diff --git a/package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/tar.min.js b/package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/tar.min.js similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/tar.min.js rename to package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/tar.min.js diff --git a/package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/volumes.svg b/package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/volumes.svg similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/htdocs/luci-static/resources/dockerman/volumes.svg rename to package/lean/luci-app-dockerman/htdocs/luci-static/resources/dockerman/volumes.svg diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/controller/dockerman.lua b/package/lean/luci-app-dockerman/luasrc/controller/dockerman.lua similarity index 98% rename from package/lean/lisaac/luci-app-dockerman/luasrc/controller/dockerman.lua rename to package/lean/luci-app-dockerman/luasrc/controller/dockerman.lua index 50c8a9c15..ebc89c2df 100644 --- a/package/lean/lisaac/luci-app-dockerman/luasrc/controller/dockerman.lua +++ b/package/lean/luci-app-dockerman/luasrc/controller/dockerman.lua @@ -15,7 +15,7 @@ function index() 40).acl_depends = { "luci-app-dockerman" } entry({"admin", "docker", "config"},cbi("dockerman/configuration"),_("Configuration"), 8).leaf=true - + -- local uci = (require "luci.model.uci").cursor() -- if uci:get_bool("dockerd", "dockerman", "remote_endpoint") then -- local host = uci:get("dockerd", "dockerman", "remote_host") @@ -45,6 +45,8 @@ function index() entry({"admin", "docker", "newnetwork"}, form("dockerman/newnetwork")).leaf=true entry({"admin", "docker", "container"}, form("dockerman/container")).leaf=true + entry({"admin", "docker", "call"}, call("action_call_docker")).leaf=true + entry({"admin", "docker", "container_stats"}, call("action_get_container_stats")).leaf=true entry({"admin", "docker", "containers_stats"}, call("action_get_containers_stats")).leaf=true entry({"admin", "docker", "get_system_df"}, call("action_get_system_df")).leaf=true @@ -63,6 +65,10 @@ function index() entry({"admin", "docker", "confirm"}, call("action_confirm")).leaf=true end +function action_call_docker() + +end + function action_get_system_df() local res = docker.new():df() luci.http.status(res.code, res.message) @@ -148,7 +154,7 @@ function remove_file(id) local cmd_docker = luci.util.exec("command -v docker"):match("^.+docker") or nil if not cmd_docker or cmd_docker:match("^%s+$") then return - end + end local uci = (require "luci.model.uci").cursor() local remote = uci:get_bool("dockerd", "dockerman", "remote_endpoint") local socket_path = not remote and uci:get("dockerd", "dockerman", "socket_path") or nil @@ -230,10 +236,10 @@ local get_memory = function(d) -- local limit = string.format("%.2f", tonumber(d["memory_stats"]["limit"]) / 1024 / 1024) -- local usage = string.format("%.2f", (tonumber(d["memory_stats"]["usage"]) - tonumber(d["memory_stats"]["stats"]["total_cache"])) / 1024 / 1024) - -- return usage .. "MB / " .. limit.. "MB" + -- return usage .. "MB / " .. limit.. "MB" local limit =tonumber(d["memory_stats"]["limit"]) - local usage = tonumber(d["memory_stats"]["usage"]) + local usage = tonumber(d["memory_stats"]["usage"]) -- - tonumber(d["memory_stats"]["stats"]["total_cache"]) return usage, limit @@ -314,7 +320,7 @@ end function action_confirm() local data = docker:read_status() if data then - data = data:gsub("\n","
"):gsub(" "," ") + data = data:gsub("\n","
"):gsub(" "," ") code = 202 msg = data else @@ -406,7 +412,7 @@ function upload_archive(container_id) body = rec_send }) - local msg = res and res.message or res.body and res.body.message or nil + local msg = res and res.body and res.body.message or nil luci.http.status(res and res.code or 500, msg or "unknow") luci.http.prepare_content("application/json") luci.http.write_json({message = msg or "unknow"}) diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua rename to package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/configuration.lua diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua similarity index 96% rename from package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua rename to package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua index 5cf42100a..66cd2742d 100644 --- a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua +++ b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua @@ -30,7 +30,7 @@ local get_ports = function(d) if d.HostConfig and d.HostConfig.PortBindings then for inter, out in pairs(d.HostConfig.PortBindings) do - data = (data and (data .. "
") or "") .. out[1]["HostPort"] .. ":" .. inter + data = (data and (data .. "
") or "") .. out[1]["HostPort"] .. ":" .. inter end end @@ -42,7 +42,7 @@ local get_env = function(d) if d.Config and d.Config.Env then for _,v in ipairs(d.Config.Env) do - data = (data and (data .. "
") or "") .. v + data = (data and (data .. "
") or "") .. v end end @@ -83,7 +83,7 @@ local get_mounts = function(d) v_dest = v_dest .."/".. v_dest_d end end - data = (data and (data .. "
") or "") .. v_sorce .. ":" .. v["Destination"] .. (v["Mode"] ~= "" and (":" .. v["Mode"]) or "") + data = (data and (data .. "
") or "") .. v_sorce .. ":" .. v["Destination"] .. (v["Mode"] ~= "" and (":" .. v["Mode"]) or "") end end @@ -95,7 +95,7 @@ local get_device = function(d) if d.HostConfig and d.HostConfig.Devices then for _,v in ipairs(d.HostConfig.Devices) do - data = (data and (data .. "
") or "") .. v["PathOnHost"] .. ":" .. v["PathInContainer"] .. (v["CgroupPermissions"] ~= "" and (":" .. v["CgroupPermissions"]) or "") + data = (data and (data .. "
") or "") .. v["PathOnHost"] .. ":" .. v["PathInContainer"] .. (v["CgroupPermissions"] ~= "" and (":" .. v["CgroupPermissions"]) or "") end end @@ -107,7 +107,7 @@ local get_links = function(d) if d.HostConfig and d.HostConfig.Links then for _,v in ipairs(d.HostConfig.Links) do - data = (data and (data .. "
") or "") .. v + data = (data and (data .. "
") or "") .. v end end @@ -119,7 +119,7 @@ local get_tmpfs = function(d) if d.HostConfig and d.HostConfig.Tmpfs then for k, v in pairs(d.HostConfig.Tmpfs) do - data = (data and (data .. "
") or "") .. k .. (v~="" and ":" or "")..v + data = (data and (data .. "
") or "") .. k .. (v~="" and ":" or "")..v end end @@ -131,7 +131,7 @@ local get_dns = function(d) if d.HostConfig and d.HostConfig.Dns then for _, v in ipairs(d.HostConfig.Dns) do - data = (data and (data .. "
") or "") .. v + data = (data and (data .. "
") or "") .. v end end @@ -143,7 +143,7 @@ local get_sysctl = function(d) if d.HostConfig and d.HostConfig.Sysctls then for k, v in pairs(d.HostConfig.Sysctls) do - data = (data and (data .. "
") or "") .. k..":"..v + data = (data and (data .. "
") or "") .. k..":"..v end end @@ -196,7 +196,7 @@ m.redirect = luci.dispatcher.build_url("admin/docker/containers") s = m:section(SimpleSection) s.template = "dockerman/apply_widget" s.err=docker:read_status() -s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") +s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") if s.err then docker:clear_status() end @@ -302,7 +302,7 @@ if action == "info" then }, ["03image"] = { _key = translate("Image"), - _value = container_info.Config.Image .. "
" .. container_info.Image + _value = container_info.Config.Image .. "
" .. container_info.Image }, ["04status"] = { _key = translate("Status"), diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua similarity index 91% rename from package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua rename to package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua index f660f1847..fa7765261 100644 --- a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua +++ b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua @@ -51,7 +51,7 @@ function get_containers() if v.Status:find("^Up") then data[index]["_name"] = ""..v.Names[1]:sub(2).."" - data[index]["_status"] = "".. data[index]["_status"] .. "" .. "


" + data[index]["_status"] = "".. data[index]["_status"] .. "" .. "


" else data[index]["_name"] = ""..v.Names[1]:sub(2).."" data[index]["_status"] = ''.. data[index]["_status"] .. "" @@ -89,9 +89,9 @@ function get_containers() data[index]["_image"] = iv.RepoTags and iv.RepoTags[1] or (iv.RepoDigests[1]:gsub("(.-)@.+", "%1") .. ":<none>") end end - data[index]["_id_name"] = ''.. data[index]["_name"] .. "
ID: " .. data[index]["_id"] - .. "

Image: " .. (data[index]["_image"] or "<none>") - .. "
" + data[index]["_id_name"] = ''.. data[index]["_name"] .. "
ID: " .. data[index]["_id"] + .. "

Image: " .. (data[index]["_image"] or "<none>") + .. "
" if type(v.Mounts) == "table" and next(v.Mounts) then for _, v2 in pairs(v.Mounts) do @@ -113,7 +113,7 @@ function get_containers() v_dest = v_dest .."/".. v_dest_d end end - data[index]["_mounts"] = (data[index]["_mounts"] and (data[index]["_mounts"] .. "
") or "") .. '' .. v_sorce .. "→" .. v_dest..'' + data[index]["_mounts"] = (data[index]["_mounts"] and (data[index]["_mounts"] .. "
") or "") .. '' .. v_sorce .. "→" .. v_dest..'' end end end @@ -136,7 +136,7 @@ m:append(Template("dockerman/containers_running_stats")) s = m:section(SimpleSection) s.template = "dockerman/apply_widget" s.err=docker:read_status() -s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") +s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") if s.err then docker:clear_status() end diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua similarity index 95% rename from package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua rename to package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua index 4d086f16c..c3d3eab0d 100644 --- a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua +++ b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua @@ -36,7 +36,7 @@ function get_images() if v.RepoTags and next(v.RepoTags)~=nil then for i, v1 in ipairs(v.RepoTags) do - data[index]["_tags"] =(data[index]["_tags"] and ( data[index]["_tags"] .. "
" )or "") .. ((v1:match("") or (#v.RepoTags == 1)) and v1 or ('' .. v1 .. '')) + data[index]["_tags"] =(data[index]["_tags"] and ( data[index]["_tags"] .. "
" )or "") .. ((v1:match("") or (#v.RepoTags == 1)) and v1 or ('' .. v1 .. '')) if not data[index]["tag"] then data[index]["tag"] = v1 @@ -153,7 +153,7 @@ local remove_action = function(force) for k in pairs(image_list) do if image_list[k]._selected == 1 then - image_selected[#image_selected+1] = (image_list[k]["_tags"]:match("
") or image_list[k]["_tags"]:match("<none>")) and image_list[k].id or image_list[k].tag + image_selected[#image_selected+1] = (image_list[k]["_tags"]:match("
") or image_list[k]["_tags"]:match("<none>")) and image_list[k].id or image_list[k].tag end end @@ -192,7 +192,7 @@ end s = m:section(SimpleSection) s.template = "dockerman/apply_widget" s.err = docker:read_status() -s.err = s.err and s.err:gsub("\n","
"):gsub(" "," ") +s.err = s.err and s.err:gsub("\n","
"):gsub(" "," ") if s.err then docker:clear_status() end diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua similarity index 98% rename from package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua rename to package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua index 8837dd564..37702c783 100644 --- a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua +++ b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua @@ -90,7 +90,7 @@ o = s:option(DummyValue, "_gateway", translate("Gateway")) s = m:section(SimpleSection) s.template = "dockerman/apply_widget" s.err = docker:read_status() -s.err = s.err and s.err:gsub("\n","
"):gsub(" "," ") +s.err = s.err and s.err:gsub("\n","
"):gsub(" "," ") if s.err then docker:clear_status() end diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua similarity index 96% rename from package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua rename to package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua index 04695a613..bafe73196 100644 --- a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua +++ b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua @@ -148,6 +148,7 @@ local resolve_cli = function(cmd_line) 'ipc', 'isolation', 'kernel_memory', + 'log_driver', 'mac_address', 'm', 'memory', @@ -222,6 +223,7 @@ local resolve_cli = function(cmd_line) 'label_file', 'link', 'link_local_ip', + 'log_driver', 'log_opt', 'network_alias', 'p', @@ -372,7 +374,7 @@ elseif cmd_line and cmd_line:match("^duplicate/[^/]+$") then if not create_body.HostConfig then create_body.HostConfig = {} end - + if next(create_body) ~= nil then default_config.name = nil default_config.image = create_body.Image @@ -398,14 +400,12 @@ elseif cmd_line and cmd_line:match("^duplicate/[^/]+$") then table.insert( default_config.sysctl, k.."="..v ) end end - if create_body.HostConfig.LogConfig then - if create_body.HostConfig.LogConfig.Config and type(create_body.HostConfig.LogConfig.Config) == "table" then - default_config.log_opt = {} - for k, v in pairs(create_body.HostConfig.LogConfig.Config) do - table.insert( default_config.log_opt, k.."="..v ) - end + + if create_body.HostConfig.LogConfig and create_body.HostConfig.LogConfig.Config and type(create_body.HostConfig.LogConfig.Config) == "table" then + default_config.log_opt = {} + for k, v in pairs(create_body.HostConfig.LogConfig.Config) do + table.insert( default_config.log_opt, k.."="..v ) end - default_config.log_driver = create_body.HostConfig.LogConfig.Type or nil end if create_body.HostConfig.PortBindings and type(create_body.HostConfig.PortBindings) == "table" then @@ -451,7 +451,7 @@ end s = m:section(SimpleSection) s.template = "dockerman/apply_widget" s.err=docker:read_status() -s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") +s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") if s.err then docker:clear_status() end @@ -651,14 +651,6 @@ o:depends("advance", 1) o.datatype="uinteger" o.default = default_config.blkio_weight or nil -o = s:option(Value, "log_driver", - translate("Logging driver"), - translate("The logging driver for the container")) -o.placeholder = "json-file" -o.rmempty = true -o:depends("advance", 1) -o.default = default_config.log_driver or nil - o = s:option(DynamicList, "log_opt", translate("Log driver options"), translate("The logging configuration for this container")) @@ -709,7 +701,6 @@ m.handle = function(self, state, data) local dns = data.dns local cap_add = data.cap_add local sysctl = {} - local log_driver = data.log_driver tmp = data.sysctl if type(tmp) == "table" then @@ -868,10 +859,7 @@ m.handle = function(self, state, data) create_body["HostConfig"]["Devices"] = device create_body["HostConfig"]["Sysctls"] = sysctl create_body["HostConfig"]["CapAdd"] = cap_add - create_body["HostConfig"]["LogConfig"] = { - Config = log_opt, - Type = log_driver - } + create_body["HostConfig"]["LogConfig"] = next(log_opt) ~= nil and { Config = log_opt } or nil if network == "bridge" then create_body["HostConfig"]["Links"] = link diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua similarity index 99% rename from package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua rename to package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua index 84234542f..c87678b85 100644 --- a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua +++ b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua @@ -23,7 +23,7 @@ end s = m:section(SimpleSection) s.template = "dockerman/apply_widget" s.err=docker:read_status() -s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") +s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") if s.err then docker:clear_status() end diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua similarity index 98% rename from package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua rename to package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua index 1d2bb905b..c91f349ce 100644 --- a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua +++ b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua @@ -40,7 +40,7 @@ if nixio.fs.access("/usr/bin/dockerd") and not uci:get_bool("dockerd", "dockerma s = m:section(SimpleSection) s.template = "dockerman/apply_widget" s.err=docker:read_status() - s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") + s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") if s.err then docker:clear_status() end diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua similarity index 97% rename from package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua rename to package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua index 0a1ab18f9..6c7064c41 100644 --- a/package/lean/lisaac/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua +++ b/package/lean/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua @@ -34,7 +34,7 @@ function get_volumes() data[index]["_mountpoint"] = nil for v1 in v.Mountpoint:gmatch('[^/]+') do - if v1 == index then + if v1 == index then data[index]["_mountpoint"] = data[index]["_mountpoint"] .."/" .. v1:sub(1,12) .. "..." else data[index]["_mountpoint"] = (data[index]["_mountpoint"] and data[index]["_mountpoint"] or "").."/".. v1 @@ -46,6 +46,7 @@ function get_volumes() return data end + if dk:_ping().code ~= 200 then lost_state = true else @@ -93,7 +94,7 @@ o = s:option(DummyValue, "_created", translate("Created")) s = m:section(SimpleSection) s.template = "dockerman/apply_widget" s.err=docker:read_status() -s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") +s.err=s.err and s.err:gsub("\n","
"):gsub(" "," ") if s.err then docker:clear_status() end diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/model/docker.lua b/package/lean/luci-app-dockerman/luasrc/model/docker.lua similarity index 99% rename from package/lean/lisaac/luci-app-dockerman/luasrc/model/docker.lua rename to package/lean/luci-app-dockerman/luasrc/model/docker.lua index 2a902912a..bf8fc6254 100644 --- a/package/lean/lisaac/luci-app-dockerman/luasrc/model/docker.lua +++ b/package/lean/luci-app-dockerman/luasrc/model/docker.lua @@ -110,9 +110,6 @@ _docker.clear_empty_tables = function ( t ) for k, v in pairs(t) do if type(v) == 'table' then t[k] = _docker.clear_empty_tables(v) - if t[k] and next(t[k]) == nil then - t[k] = nil - end end end end diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm b/package/lean/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm rename to package/lean/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinebutton.htm b/package/lean/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinebutton.htm similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinebutton.htm rename to package/lean/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinebutton.htm diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm b/package/lean/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm rename to package/lean/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/cbi/namedsection.htm b/package/lean/luci-app-dockerman/luasrc/view/dockerman/cbi/namedsection.htm similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/cbi/namedsection.htm rename to package/lean/luci-app-dockerman/luasrc/view/dockerman/cbi/namedsection.htm diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/cbi/xfvalue.htm b/package/lean/luci-app-dockerman/luasrc/view/dockerman/cbi/xfvalue.htm similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/cbi/xfvalue.htm rename to package/lean/luci-app-dockerman/luasrc/view/dockerman/cbi/xfvalue.htm diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/container.htm b/package/lean/luci-app-dockerman/luasrc/view/dockerman/container.htm similarity index 99% rename from package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/container.htm rename to package/lean/luci-app-dockerman/luasrc/view/dockerman/container.htm index 3684b6447..9f05d9d58 100644 --- a/package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/container.htm +++ b/package/lean/luci-app-dockerman/luasrc/view/dockerman/container.htm @@ -1,4 +1,4 @@ -
+
  • <%:Info%>
  • <%:Resources%>
  • diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/container_console.htm b/package/lean/luci-app-dockerman/luasrc/view/dockerman/container_console.htm similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/container_console.htm rename to package/lean/luci-app-dockerman/luasrc/view/dockerman/container_console.htm diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm b/package/lean/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm similarity index 99% rename from package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm rename to package/lean/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm index 2e0650d9d..af2f6f43f 100644 --- a/package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm +++ b/package/lean/luci-app-dockerman/luasrc/view/dockerman/container_file_manager.htm @@ -226,8 +226,7 @@ var tarHeader = TarFileEntryHeader.default(); var tarFileEntryHeader = new TarFileEntryHeader ( - // ByteHelper.bytesToStringUTF8(fileName), - fileName, + ByteHelper.bytesToStringUTF8(fileName), tarHeader.fileMode, tarHeader.userIDOfOwner, tarHeader.userIDOfGroup, diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm b/package/lean/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm rename to package/lean/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/containers_running_stats.htm b/package/lean/luci-app-dockerman/luasrc/view/dockerman/containers_running_stats.htm similarity index 100% rename from package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/containers_running_stats.htm rename to package/lean/luci-app-dockerman/luasrc/view/dockerman/containers_running_stats.htm diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/images_import.htm b/package/lean/luci-app-dockerman/luasrc/view/dockerman/images_import.htm similarity index 99% rename from package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/images_import.htm rename to package/lean/luci-app-dockerman/luasrc/view/dockerman/images_import.htm index e6c28f8c7..0ad6e0fce 100644 --- a/package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/images_import.htm +++ b/package/lean/luci-app-dockerman/luasrc/view/dockerman/images_import.htm @@ -1,7 +1,7 @@
    - disabled <% end %> /> + disabled <% end %>/>
    diff --git a/package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/images_load.htm b/package/lean/luci-app-dockerman/luasrc/view/dockerman/images_load.htm similarity index 98% rename from package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/images_load.htm rename to package/lean/luci-app-dockerman/luasrc/view/dockerman/images_load.htm index 5ccc1f4e3..b201510ac 100644 --- a/package/lean/lisaac/luci-app-dockerman/luasrc/view/dockerman/images_load.htm +++ b/package/lean/luci-app-dockerman/luasrc/view/dockerman/images_load.htm @@ -1,5 +1,5 @@
    - disabled <% end %> /> + disabled <% end %>/>