uvol: fixes and adapt to in-tree ucode
authorDaniel Golle <daniel@makrotopia.org>
Sun, 3 Apr 2022 15:13:45 +0000 (16:13 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Mon, 25 Apr 2022 18:30:14 +0000 (19:30 +0100)
Don't use features which are not yet present in the version of ucode
currently shipped with OpenWrt (such as `fs.access()` or assuming raw
mode by default).
Fix syntax error in main executable.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
(cherry picked from commit 74caff0d5988b721c08b9a8e35bce79a3d167dd6)

utils/uvol/Makefile
utils/uvol/files/blockdev_common.uc
utils/uvol/files/lvm.uc
utils/uvol/files/uvol

index 410788df334ba856489ffe8ae08367dae75465af..378faf1a1fc75c49b93f8698fdb3447554bf767b 100644 (file)
@@ -32,7 +32,7 @@ define Package/uvol
 endef
 
 define Package/uvol/description
-  'uvol' is tool to automate storage volume handling on embedded
+  'uvol' is tool to automate storage volume handling on embedded
   devices in a generic way.
   Depending on what is available, 'uvol' will use either UBI or LVM2
   as storage backends and transparently offer identical operations on
index 8edf65bfe3721010a3a78d7559bb2833cc17f594..ac601e78c4a70042fe7588a2696789f390e0bd1e 100644 (file)
@@ -108,6 +108,9 @@ let get_bootdev = function(void) {
 
 // adapted from /lib/upgrade/common.sh
 let get_partition = function(dev, num) {
+       if (!dev)
+               return null;
+
        for (let bd in get_blockdevs()) {
                let r = get_uevent_major_minor(sprintf("/sys/class/block/%s/uevent", bd));
                if (r.major == dev.major && r.minor == dev.minor + num) {
index d05701dc4a145fc1d6075bcaa0c13e26d2db4728..36fb37c5fb9c0913182fc54711b8399b068efc2e 100644 (file)
@@ -50,6 +50,9 @@ function pvs() {
        }
        include("/usr/lib/uvol/blockdev_common.uc");
        let rootdev = blockdev_common.get_partition(blockdev_common.get_bootdev(), 0);
+       if (!rootdev)
+               return null;
+
        let tmp = lvm("pvs", "-o", "vg_name", "-S", sprintf("\"pv_name=~^/dev/%s.*\$\"", rootdev));
        if (tmp.report.pv)
                return tmp.report.pv[0].vg_name;
@@ -112,8 +115,8 @@ function getdev(lv) {
 function lvm_init(ctx) {
        cursor = ctx.cursor;
        fs = ctx.fs;
-       if (!fs.access(lvm_exec, "x"))
-               return false;
+//     if (!fs.access(lvm_exec, "x"))
+//             return false;
 
        vg_name = pvs();
        if (!vg_name)
index 692606895f22f68a7b68903b436d817f7fd165c6..6a5a82c138cf9b1cb76e6735161924cc9025e415 100644 (file)
@@ -1,4 +1,4 @@
-#!/usr/bin/ucode
+#!/usr/bin/ucode -R
 // SPDX-License-Identifier: GPL-2.0-or-later
 // uvol - storage volume manager for OpenWrt
 //  (c) 2022 Daniel Golle <daniel@makrotopia.org>
@@ -25,11 +25,7 @@ commands:
                  1 - volume is not ready for use
                  2 - volume doesn'y exist
   write volname size           write to volume from stdin, size in bytes
-"
-
-function help() {
-       printf("%s", help_output);
-);
+";
 
 let fs = require("fs");
 let uci = require("uci");
@@ -71,7 +67,7 @@ if (!backend) {
 let cmd = shift(ARGV);
 
 if (!cmd || cmd == "-h" || cmd == "help") {
-       help();
+       printf("%s", help_output);
        return cmd?0:22;
 }