diff --git a/patches/backports/0024-uvol-backport-package.patch b/patches/backports/0024-uvol-backport-package.patch index 98a53bd81..1d153f61a 100644 --- a/patches/backports/0024-uvol-backport-package.patch +++ b/patches/backports/0024-uvol-backport-package.patch @@ -1,19 +1,19 @@ -From 08809a60a8f2c065a38c24fcdbd69b939e5c29d9 Mon Sep 17 00:00:00 2001 +From 813b09542fd13428d432e47eecd7191d1b3067fd Mon Sep 17 00:00:00 2001 From: John Crispin Date: Fri, 13 Aug 2021 08:46:57 +0200 -Subject: [PATCH 24/27] uvol: backport package +Subject: [PATCH 01/83] uvol: backport package Signed-off-by: John Crispin --- package/system/uvol/Makefile | 77 ++++ package/system/uvol/files/autopart.defaults | 127 ++++++ package/system/uvol/files/common.sh | 83 ++++ - package/system/uvol/files/lvm.sh | 435 ++++++++++++++++++++ - package/system/uvol/files/ubi.sh | 337 +++++++++++++++ + package/system/uvol/files/lvm.sh | 459 ++++++++++++++++++++ + package/system/uvol/files/ubi.sh | 358 +++++++++++++++ package/system/uvol/files/uvol | 52 +++ - package/system/uvol/files/uvol.defaults | 3 + - package/system/uvol/files/uvol.init | 23 ++ - 8 files changed, 1137 insertions(+) + package/system/uvol/files/uvol.defaults | 17 + + package/system/uvol/files/uvol.init | 23 + + 8 files changed, 1196 insertions(+) create mode 100644 package/system/uvol/Makefile create mode 100644 package/system/uvol/files/autopart.defaults create mode 100644 package/system/uvol/files/common.sh @@ -25,14 +25,14 @@ Signed-off-by: John Crispin diff --git a/package/system/uvol/Makefile b/package/system/uvol/Makefile new file mode 100644 -index 0000000000..bd70410c5e +index 0000000000..6583e6e756 --- /dev/null +++ b/package/system/uvol/Makefile @@ -0,0 +1,77 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=uvol -+PKG_VERSION:=0.4 ++PKG_VERSION:=0.6 +PKG_RELEASE:=$(AUTORELEASE) + +PKG_MAINTAINER:=Daniel Golle @@ -45,7 +45,7 @@ index 0000000000..bd70410c5e + CATEGORY:=Utilities + SUBMENU:=Disc + TITLE:=Automatically initialize LVM partition -+ DEPENDS:=+partx-utils +sfdisk ++ DEPENDS:=+lvm2 +partx-utils +sfdisk + PKGARCH=all +endef + @@ -101,7 +101,7 @@ index 0000000000..bd70410c5e + $(INSTALL_BIN) ./files/ubi.sh $(1)/usr/libexec/uvol/20-ubi.sh + $(INSTALL_BIN) ./files/lvm.sh $(1)/usr/libexec/uvol/50-lvm.sh + $(INSTALL_BIN) ./files/uvol $(1)/usr/sbin -+ $(INSTALL_BIN) ./files/uvol.defaults $(1)/etc/uci-defaults/90-uvol-restore-uci ++ $(INSTALL_BIN) ./files/uvol.defaults $(1)/etc/uci-defaults/90-uvol-init +endef + +$(eval $(call BuildPackage,autopart)) @@ -241,7 +241,7 @@ index 0000000000..870cd44156 +exit 0 diff --git a/package/system/uvol/files/common.sh b/package/system/uvol/files/common.sh new file mode 100644 -index 0000000000..e3b554e180 +index 0000000000..8306477720 --- /dev/null +++ b/package/system/uvol/files/common.sh @@ -0,0 +1,83 @@ @@ -270,8 +270,8 @@ index 0000000000..e3b554e180 + uuid="${uuid:5}" + + case "$uciname" in -+ "_uxc") -+ target="/var/state/uxc" ++ "_meta") ++ target="/var/run/uvol/.meta" + ;; + "_"*) + return 1 @@ -297,7 +297,7 @@ index 0000000000..e3b554e180 + local volname="$1" + local uciname + -+ uciname="${volname//-/_}" ++ uciname="${volname//[-.]/_}" + uciname="${uciname//[!([:alnum:]_)]}" + if [ -e "${UCI_SPOOLDIR}/add-$1" ]; then + rm "${UCI_SPOOLDIR}/add-$1" @@ -330,10 +330,10 @@ index 0000000000..e3b554e180 +} diff --git a/package/system/uvol/files/lvm.sh b/package/system/uvol/files/lvm.sh new file mode 100644 -index 0000000000..95281194ba +index 0000000000..c7e93f13f2 --- /dev/null +++ b/package/system/uvol/files/lvm.sh -@@ -0,0 +1,435 @@ +@@ -0,0 +1,459 @@ +#!/bin/sh + +cmd="$1" @@ -398,8 +398,12 @@ index 0000000000..95281194ba + +vg_name= +exportpv() { -+ local reports rep pv pvs + vg_name= ++ config_load fstab ++ local uvolsect="$(config_foreach echo uvol)" ++ [ -n "$uvolsect" ] && config_get vg_name "$uvolsect" vg_name ++ [ -n "$vg_name" ] && return ++ local reports rep pv pvs + json_init + json_load "$(pvs -o vg_name -S "pv_name=~^/dev/$rootdev.*\$")" + json_select report @@ -488,7 +492,7 @@ index 0000000000..95281194ba + for dms in /sys/devices/virtual/block/dm-* ; do + [ "$dms" = "/sys/devices/virtual/block/dm-*" ] && break + read -r dm_name < "$dms/dm/name" -+ [ $(basename "$lv_dm_path") = "$dm_name" ] && echo "$(basename "$dms")" ++ [ "$(basename "$lv_dm_path")" = "$dm_name" ] && basename "$dms" + done +} + @@ -534,7 +538,7 @@ index 0000000000..95281194ba + *) + [ "$lv_active" = "active" ] || return 0 + devname="$(getdev "$1")" -+ [ "$devname" ] && /sbin/block umount "$devname" ++ [ "$devname" ] && umount "/dev/$devname" + lvm_cmd lvchange -a n "$lv_full_name" + lvm_cmd lvchange -k y "$lv_full_name" || return $? + return 0 @@ -631,7 +635,12 @@ index 0000000000..95281194ba +} + +listvols() { -+ local reports rep lv lvs lv_name lv_size lv_mode volname ++ local reports rep lv lvs lv_name lv_size lv_mode volname json_output json_notfirst ++ if [ "$1" = "-j" ]; then ++ json_output=1 ++ echo "[" ++ shift ++ fi + volname=${1:-.*} + json_init + json_load "$(lvs -o lv_name,lv_size -S "lv_name=~^[rw][owp]_$volname\$ && vg_name=$vg_name")" @@ -647,17 +656,32 @@ index 0000000000..95281194ba + lv_mode="${lv_name:0:2}" + lv_name="${lv_name:3}" + lv_size=${lv_size%B} -+ echo "$lv_name $lv_mode $lv_size" ++ [ "${lv_name:0:1}" = "." ] && continue ++ if [ "$json_output" = "1" ]; then ++ [ "$json_notfirst" = "1" ] && echo "," ++ echo -e "\t{" ++ echo -e "\t\t\"name\": \"$lv_name\"," ++ echo -e "\t\t\"mode\": \"$lv_mode\"," ++ echo -e "\t\t\"size\": $lv_size" ++ echo -n -e "\t}" ++ json_notfirst=1 ++ else ++ echo "$lv_name $lv_mode $lv_size" ++ fi + json_select .. + done + json_select .. + break + done ++ ++ if [ "$json_output" = "1" ]; then ++ [ "$json_notfirst" = "1" ] && echo ++ echo "]" ++ fi +} + -+ +detect() { -+ local reports rep lv lvs lv_name lv_full_name lv_mode volname devname lv_skip_activation ++ local reports rep lv lvs lv_name lv_full_name lv_mode volname devname + local temp_up="" + + json_init @@ -771,10 +795,10 @@ index 0000000000..95281194ba +esac diff --git a/package/system/uvol/files/ubi.sh b/package/system/uvol/files/ubi.sh new file mode 100644 -index 0000000000..b0b363d7ed +index 0000000000..7637fba682 --- /dev/null +++ b/package/system/uvol/files/ubi.sh -@@ -0,0 +1,337 @@ +@@ -0,0 +1,358 @@ +#!/bin/sh + +cmd="$1" @@ -945,12 +969,12 @@ index 0000000000..b0b363d7ed + vol_is_mode "$voldev" wo && return 22 + vol_is_mode "$voldev" wp && return 16 + if vol_is_mode "$voldev" ro; then -+ /sbin/block umount "ubiblock${voldev:3}" ++ grep -q "^/dev/ubiblock${voldev:3}" /proc/self/mounts && umount "/dev/ubiblock${voldev:3}" + ubiblock --remove "/dev/$voldev" + ubirename "/dev/$ubidev" "uvol-ro-$1" "uvol-rd-$1" || return $? + return 0 + elif vol_is_mode "$voldev" rw; then -+ /sbin/block umount "$voldev" ++ umount "/dev/$voldev" + ubirename "/dev/$ubidev" "uvol-rw-$1" "uvol-wd-$1" || return $? + block_hotplug remove "$voldev" + return 0 @@ -971,7 +995,12 @@ index 0000000000..b0b363d7ed +} + +listvols() { -+ local volname volmode volsize ++ local volname volmode volsize json_output json_notfirst ++ if [ "$1" = "-j" ]; then ++ json_output=1 ++ shift ++ echo "[" ++ fi + for voldir in "/sys/devices/virtual/ubi/${ubidev}/${ubidev}_"*; do + read -r volname < "$voldir/name" + case "$volname" in @@ -984,8 +1013,24 @@ index 0000000000..b0b363d7ed + esac + volmode="${volname:5:2}" + volname="${volname:8}" -+ echo "$volname $volmode $volsize" ++ [ "${volname:0:1}" = "." ] && continue ++ if [ "$json_output" = "1" ]; then ++ [ "$json_notfirst" = "1" ] && echo "," ++ echo -e "\t{" ++ echo -e "\t\t\"name\": \"$volname\"," ++ echo -e "\t\t\"mode\": \"$volmode\"," ++ echo -e "\t\t\"size\": $volsize" ++ echo -n -e "\t}" ++ json_notfirst=1 ++ else ++ echo "$volname $volmode $volsize" ++ fi + done ++ ++ if [ "$json_output" = "1" ]; then ++ [ "$json_notfirst" = "1" ] && echo ++ echo "]" ++ fi +} + +bootvols() { @@ -1172,13 +1217,27 @@ index 0000000000..4ecd2e165a +flock -x /tmp/run/uvol.lock "$uvol_backend" "$@" diff --git a/package/system/uvol/files/uvol.defaults b/package/system/uvol/files/uvol.defaults new file mode 100644 -index 0000000000..cbd53a3e4e +index 0000000000..e71135f7a8 --- /dev/null +++ b/package/system/uvol/files/uvol.defaults -@@ -0,0 +1,3 @@ +@@ -0,0 +1,17 @@ +#!/bin/sh + -+uci -q get fstab.@uvol[0].initialized >/dev/null || uvol detect || true ++uvol_init() { ++ local metasz freesz totalsz ++ uvol detect ++ metasz="$(uvol size .meta 2>/dev/null)" ++ [ "$((metasz))" -gt 0 ] && return ++ totalsz="$(uvol total)" ++ freesz="$(uvol free)" ++ metasz="$((totalsz / 10240))" ++ [ "$metasz" -lt 4194304 ] && metasz=4194304 ++ [ "$metasz" -gt "$freesz" ] && return ++ uvol create .meta "$metasz" rw ++ uvol up .meta ++} ++ ++uci -q get fstab.@uvol[0].initialized >/dev/null || uvol_init diff --git a/package/system/uvol/files/uvol.init b/package/system/uvol/files/uvol.init new file mode 100644 index 0000000000..1f6e2aac08