From 39349b96dd94fbfc147edc0791525a5f2b2ccc35 Mon Sep 17 00:00:00 2001 From: Dimitry Ishenko Date: Wed, 11 Dec 2024 00:29:24 -0500 Subject: [PATCH] nfsd: fix uninstall command --- tools/json/config.system.json | 44 +++++++++--- tools/modules/functions/service.sh | 1 + tools/modules/system/module_nfs.sh | 101 ++++++++++++++++++++++++++++ tools/modules/system/module_nfsd.sh | 7 +- 4 files changed, 141 insertions(+), 12 deletions(-) create mode 100644 tools/modules/system/module_nfs.sh diff --git a/tools/json/config.system.json b/tools/json/config.system.json index b4d19331..e22d4df6 100644 --- a/tools/json/config.system.json +++ b/tools/json/config.system.json @@ -130,10 +130,31 @@ }, { "id": "NFS01", - "description": "Network filesystem (NFS) Server", + "description": "Enable Network filesystem (NFS) support", + "command": [ + "module_nfs install" + ], + "status": "Stable", + "author": "@igorpecovnik", + "condition": "! check_if_installed nfs-common" + }, + { + "id": "NFS02", + "description": "Disable Network filesystem (NFS) support", + "command": [ + "module_nfs remove" + ], + "status": "Stable", + "author": "@igorpecovnik", + "condition": "check_if_installed nfs-common" + }, + { + "id": "NFS05", + "description": "Manage NFS Server", + "condition": "check_if_installed nfs-common", "sub": [ { - "id": "NFS02", + "id": "NFS06", "description": "Enable network filesystem (NFS) daemon", "command": [ "module_nfsd install" @@ -143,7 +164,7 @@ "condition": "! module_nfsd status" }, { - "id": "NFS03", + "id": "NFS07", "description": "Configure network filesystem (NFS) daemon", "command": [ "module_nfsd manage" @@ -153,7 +174,7 @@ "condition": "module_nfsd status" }, { - "id": "NFS04", + "id": "NFS08", "description": "Remove network filesystem (NFS) daemon", "command": [ "module_nfsd remove" @@ -163,7 +184,7 @@ "condition": "module_nfsd status" }, { - "id": "NFS05", + "id": "NFS09", "description": "Show network filesystem (NFS) daemon clients", "command": [ "module_nfsd clients" @@ -175,18 +196,19 @@ ] }, { - "id": "NFS11", - "description": "Network filesystem (NFS) Client", + "id": "NFS20", + "description": "Manage NFS Client", + "condition": "check_if_installed nfs-common", "sub": [ { - "id": "NFS06", - "description": "Show network filesystem (NFS) servers in subnet", + "id": "NFS21", + "description": "Find NFS servers in subnet and mount shares", "command": [ - "module_nfsd servers" + "module_nfs servers" ], "status": "Stable", "author": "@igorpecovnik", - "condition": "" + "condition": "check_if_installed nfs-common" } ] } diff --git a/tools/modules/functions/service.sh b/tools/modules/functions/service.sh index 942ba60c..30290bbf 100644 --- a/tools/modules/functions/service.sh +++ b/tools/modules/functions/service.sh @@ -13,5 +13,6 @@ function service() { # ignore these commands, if running inside container [[ "$1" =~ ^(reload|restart|start|status|stop)$ ]] && systemd-detect-virt -qc && return 0 + systemctl daemon-reload systemctl "$@" } diff --git a/tools/modules/system/module_nfs.sh b/tools/modules/system/module_nfs.sh new file mode 100644 index 00000000..a183e9b7 --- /dev/null +++ b/tools/modules/system/module_nfs.sh @@ -0,0 +1,101 @@ +module_options+=( + ["module_nfs,author"]="@igorpecovnik" + ["module_nfs,feature"]="module_nfs" + ["module_nfs,desc"]="Install nfs client" + ["module_nfs,example"]="install remove servers help" + ["module_nfs,port"]="" + ["module_nfs,status"]="Active" + ["module_nfs,arch"]="" +) +# +# Module nfs client +# +function module_nfs () { + local title="nfs" + local condition=$(which "$title" 2>/dev/null)? + + local package_name=nfs-common + + local commands + IFS=' ' read -r -a commands <<< "${module_options["module_nfs,example"]}" + + nfs_BASE="${SOFTWARE_FOLDER}/nfs" + + case "$1" in + "${commands[0]}") + apt_install_wrapper apt-get -y install $package_name + ;; + "${commands[1]}") + apt_install_wrapper apt-get -y autopurge $package_name + ;; + "${commands[2]}") + + if ! check_if_installed nmap; then + apt_install_wrapper apt-get -y install nmap + fi + + LIST=($(nmap -oG - -p2049 ${LOCALSUBNET} | grep '/open/' | cut -d' ' -f2 | grep -v "${LOCALIPADD}")) + LIST_LENGTH=$((${#LIST[@]})) + if nfs_server=$(dialog --no-items \ + --title "Network filesystem (NFS) servers in subnet" \ + --menu "" \ + $((${LIST_LENGTH} + 6)) \ + 80 \ + $((${LIST_LENGTH})) \ + ${LIST[@]} 3>&1 1>&2 2>&3); then + # verify if we can connect there + LIST=($(showmount -e "${nfs_server}" | tail -n +2 | cut -d" " -f1 | sort)) + VERIFIED_LIST=() + local tempfolder=$(mktemp -d) + local alreadymounted=$(df | grep $nfs_server | cut -d" " -f1 | xargs) + for i in "${LIST[@]}"; do + mount -n -t nfs $nfs_server:$i ${tempfolder} 2>/dev/null + if [[ $? -eq 0 ]]; then + if echo "${alreadymounted}" | grep -vq $i; then + VERIFIED_LIST+=($i) + fi + umount ${tempfolder} + fi + done + VERIFIED_LIST_LENGTH=$((${#VERIFIED_LIST[@]})) + if shares=$(dialog --no-items \ + --title "Network filesystem (NFS) shares on ${nfs_server}" \ + --menu "" \ + $((${VERIFIED_LIST_LENGTH} + 6)) \ + 80 \ + $((${VERIFIED_LIST_LENGTH})) \ + ${VERIFIED_LIST[@]} 3>&1 1>&2 2>&3) + then + if mount_folder=$(dialog --title \ + "Where do you want to mount $shares ?" \ + --inputbox "" \ + 6 80 "/armbian" 3>&1 1>&2 2>&3); then + if mount_options=$(dialog --title \ + "Which mount options do you want to use?" \ + --inputbox "" \ + 6 80 "auto,noatime 0 0" 3>&1 1>&2 2>&3); then + mkdir -p ${mount_folder} + sed -i '\?^'$nfs_server:$shares'?d' /etc/fstab + echo "${nfs_server}:${shares} ${mount_folder} nfs ${mount_options}" >> /etc/fstab + systemctl daemon-reload + mount ${mount_folder} + show_message <<< $(mount -t nfs4 | cut -d" " -f1) + fi + fi + fi + fi + ;; + "${commands[3]}") + echo -e "\nUsage: ${module_options["module_nfs,feature"]} " + echo -e "Commands: ${module_options["module_nfs,example"]}" + echo "Available commands:" + echo -e "\tinstall\t- Install $title." + echo -e "\tremove\t- Remove $title." + echo -e "\tservers\t- Find and mount shares $title." + echo + ;; + *) + ${module_options["module_nfs,feature"]} ${commands[3]} + ;; + esac +} \ No newline at end of file diff --git a/tools/modules/system/module_nfsd.sh b/tools/modules/system/module_nfsd.sh index 7bd700df..6d09f904 100644 --- a/tools/modules/system/module_nfsd.sh +++ b/tools/modules/system/module_nfsd.sh @@ -105,7 +105,12 @@ function module_nfsd () { show_message <<< $(printf '%s\n' "${NFS_CLIENTS_CONNECTED[@]}") ;; "${commands[6]}") - LIST=($(nmap -oG - -p2049 ${LOCALSUBNET} | grep '/open/' | cut -d' ' -f2)) + + if ! check_if_installed nmap; then + apt_install_wrapper apt-get -y install nmap + fi + + LIST=($(nmap -oG - -p2049 ${LOCALSUBNET} | grep '/open/' | cut -d' ' -f2 | grep -v "${LOCALIPADD}")) LIST_LENGTH=$((${#LIST[@]})) if nfs_server=$(dialog --no-items \ --title "Network filesystem (NFS) servers in subnet" \