public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Friedrich Weber <f.weber@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH cluster] pvecm add: require user to navigate out of /etc/pve
Date: Thu,  9 Mar 2023 13:30:19 +0100	[thread overview]
Message-ID: <20230309123019.1080105-1-f.weber@proxmox.com> (raw)

If `pvecm add` is issued from /etc/pve (or any subdirectory), it
prints some errors:

    [...]
    shell-init: error retrieving current directory: getcwd: cannot
    access parent directories: Transport endpoint is not connected
    [...]
    successfully added node 'pve-c2' to cluster.
    cannot fetch initial working directory: Transport endpoint is not
    connected at /usr/share/perl5/PVE/CLI/pvecm.pm line 446.

The reason is that `pvecm add` restarts pmxcfs, which re-mounts the
fuse mount at /etc/pve, invalidating pvecm's working directory.

The error messages give the impression that something went wrong.
Indeed, the second error indicates the temporary directory is not
cleaned up. The cluster join itself actually works, though.

The issue could be fixed by chdir'ing to / in `pvecm add`. However,
the user's shell would still remain in the now-invalid /etc/pve,
potentially leading to confusing "transport endpoint not connected"
messages in future interactions.

To avoid this, require the user to chdir out of /etc/pve before
running `pvecm add`.

Signed-off-by: Friedrich Weber <f.weber@proxmox.com>
---
 data/PVE/CLI/pvecm.pm | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/data/PVE/CLI/pvecm.pm b/data/PVE/CLI/pvecm.pm
index 5ac9ed3..b0b5931 100755
--- a/data/PVE/CLI/pvecm.pm
+++ b/data/PVE/CLI/pvecm.pm
@@ -3,6 +3,7 @@ package PVE::CLI::pvecm;
 use strict;
 use warnings;
 
+use Cwd qw(getcwd);
 use File::Path;
 use File::Basename;
 use PVE::Tools qw(run_command);
@@ -348,6 +349,11 @@ __PACKAGE__->register_method ({
     code => sub {
 	my ($param) = @_;
 
+	# avoid "transport endpoint not connected" errors that occur if
+	# restarting pmxcfs while in fuse-mounted /etc/pve
+	die "Navigate out of $basedir before running 'pvecm add', for example by running 'cd'.\n"
+	    if getcwd() =~ m!^$basedir(/.*)?$!;
+
 	my $nodename = PVE::INotify::nodename();
 	my $host = $param->{hostname};
 
-- 
2.30.2





             reply	other threads:[~2023-03-09 12:30 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-09 12:30 Friedrich Weber [this message]
2023-03-11 17:01 ` [pve-devel] applied: " Thomas Lamprecht

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230309123019.1080105-1-f.weber@proxmox.com \
    --to=f.weber@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal