* [PATCH 1/1] Allow to fallback to xdrlib if xdrlib3 not available
@ 2025-02-12 13:23 Petr Vorel
2025-02-12 13:27 ` [PATCH pynfs] " Petr Vorel
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Petr Vorel @ 2025-02-12 13:23 UTC (permalink / raw)
To: linux-nfs; +Cc: Petr Vorel, Jeff Layton, Calum Mackay, Michael Moese
On certain environments it might be difficult to install xdrlib3 via pip
(e.g. python 3.11, which is a default on current Tumbleweed).
Fixes: dfb0b07 ("Move to xdrlib3")
Suggested-by: Michael Moese <mmoese@suse.com>
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
Hi,
I admit it would be safer to check if python is really < 3.13.
Kind regards,
Petr
README | 2 ++
nfs4.0/lib/rpc/rpc.py | 6 +++++-
nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py | 7 ++++++-
nfs4.0/nfs4lib.py | 6 +++++-
nfs4.0/nfs4server.py | 6 +++++-
rpc/security.py | 6 +++++-
xdr/xdrgen.py | 9 +++++++--
7 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/README b/README
index 8c3ac27..d5214b4 100644
--- a/README
+++ b/README
@@ -19,6 +19,8 @@ python3-standard-xdrlib) or you may install it via pip:
pip install xdrlib3
+If xdrlib3 is not available fallback to old xdrlib (useful for python < 3.13).
+
You can prepare both versions for use with
./setup.py build
diff --git a/nfs4.0/lib/rpc/rpc.py b/nfs4.0/lib/rpc/rpc.py
index 4751790..7a80241 100644
--- a/nfs4.0/lib/rpc/rpc.py
+++ b/nfs4.0/lib/rpc/rpc.py
@@ -9,12 +9,16 @@
from __future__ import absolute_import
import struct
-import xdrlib3 as xdrlib
import socket
import select
import threading
import errno
+try:
+ import xdrlib3 as xdrlib
+except:
+ import xdrlib
+
from rpc.rpc_const import *
from rpc.rpc_type import *
import rpc.rpc_pack as rpc_pack
diff --git a/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py b/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
index 2581a1e..41c6d54 100644
--- a/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
+++ b/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
@@ -1,7 +1,12 @@
from .base import SecFlavor, SecError
from rpc.rpc_const import AUTH_SYS
from rpc.rpc_type import opaque_auth
-from xdrlib3 import Packer, Error
+import struct
+
+try:
+ from xdrlib3 import Packer, Error
+except:
+ from xdrlib import Packer, Error
class SecAuthSys(SecFlavor):
# XXX need better defaults
diff --git a/nfs4.0/nfs4lib.py b/nfs4.0/nfs4lib.py
index 2337d8c..92b3c11 100644
--- a/nfs4.0/nfs4lib.py
+++ b/nfs4.0/nfs4lib.py
@@ -41,9 +41,13 @@ import xdrdef.nfs4_const as nfs4_const
from xdrdef.nfs4_const import *
import xdrdef.nfs4_type as nfs4_type
from xdrdef.nfs4_type import *
-from xdrlib3 import Error as XDRError
import xdrdef.nfs4_pack as nfs4_pack
+try:
+ from xdrlib3 import Error as XDRError
+except:
+ from xdrlib import Error as XDRError
+
import nfs_ops
op4 = nfs_ops.NFS4ops()
diff --git a/nfs4.0/nfs4server.py b/nfs4.0/nfs4server.py
index 10bf28e..e26cecd 100755
--- a/nfs4.0/nfs4server.py
+++ b/nfs4.0/nfs4server.py
@@ -34,7 +34,11 @@ import time, StringIO, random, traceback, codecs
import StringIO
import nfs4state
from nfs4state import NFS4Error, printverf
-from xdrlib3 import Error as XDRError
+
+try:
+ from xdrlib3 import Error as XDRError
+except:
+ from xdrlib import Error as XDRError
unacceptable_names = [ "", ".", ".." ]
unacceptable_characters = [ "/", "~", "#", ]
diff --git a/rpc/security.py b/rpc/security.py
index 789280c..79e746b 100644
--- a/rpc/security.py
+++ b/rpc/security.py
@@ -3,7 +3,6 @@ from .rpc_const import AUTH_NONE, AUTH_SYS, RPCSEC_GSS, SUCCESS, CALL, \
from .rpc_type import opaque_auth, authsys_parms
from .rpc_pack import RPCPacker, RPCUnpacker
from .gss_pack import GSSPacker, GSSUnpacker
-from xdrlib3 import Packer, Unpacker
from . import rpclib
from .gss_const import *
from . import gss_type
@@ -17,6 +16,11 @@ except ImportError:
import threading
import logging
+try:
+ from xdrlib3 import Packer, Unpacker
+except:
+ from xdrlib import Packer, Unpacker
+
log_gss = logging.getLogger("rpc.sec.gss")
log_gss.setLevel(logging.INFO)
diff --git a/xdr/xdrgen.py b/xdr/xdrgen.py
index f802ba8..970ae9d 100755
--- a/xdr/xdrgen.py
+++ b/xdr/xdrgen.py
@@ -1357,8 +1357,13 @@ pack_header = """\
import sys,os
from . import %s as const
from . import %s as types
-import xdrlib3 as xdrlib
-from xdrlib3 import Error as XDRError
+
+try:
+ import xdrlib3 as xdrlib
+ from xdrlib3 import Error as XDRError
+except:
+ import xdrlib as xdrlib
+ from xdrlib import Error as XDRError
class nullclass(object):
pass
--
2.47.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH pynfs] Allow to fallback to xdrlib if xdrlib3 not available
2025-02-12 13:23 [PATCH 1/1] Allow to fallback to xdrlib if xdrlib3 not available Petr Vorel
@ 2025-02-12 13:27 ` Petr Vorel
2025-02-12 13:36 ` [PATCH 1/1] " Jeff Layton
2025-02-12 20:52 ` Calum Mackay
2 siblings, 0 replies; 9+ messages in thread
From: Petr Vorel @ 2025-02-12 13:27 UTC (permalink / raw)
To: linux-nfs; +Cc: Jeff Layton, Calum Mackay, Michael Moese
Hi,
I'm sorry, the subject was supposed to be:
[PATCH pynfs] Allow to fallback to xdrlib if xdrlib3 not available
Kind regards,
Petr
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/1] Allow to fallback to xdrlib if xdrlib3 not available
2025-02-12 13:23 [PATCH 1/1] Allow to fallback to xdrlib if xdrlib3 not available Petr Vorel
2025-02-12 13:27 ` [PATCH pynfs] " Petr Vorel
@ 2025-02-12 13:36 ` Jeff Layton
2025-02-12 13:47 ` Petr Vorel
2025-02-12 20:52 ` Calum Mackay
2 siblings, 1 reply; 9+ messages in thread
From: Jeff Layton @ 2025-02-12 13:36 UTC (permalink / raw)
To: Petr Vorel, linux-nfs; +Cc: Calum Mackay, Michael Moese
On Wed, 2025-02-12 at 14:23 +0100, Petr Vorel wrote:
> On certain environments it might be difficult to install xdrlib3 via pip
> (e.g. python 3.11, which is a default on current Tumbleweed).
>
I did a "pip install xdrlib3" on Fedora 33 just now, and it has python
3.9. What's the problem you're seeing with SuSE installing it with
v3.11?
BTW, does SuSE have the xdrlib3 module available as a package?
> Fixes: dfb0b07 ("Move to xdrlib3")
> Suggested-by: Michael Moese <mmoese@suse.com>
> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> ---
> Hi,
>
> I admit it would be safer to check if python is really < 3.13.
>
> Kind regards,
> Petr
>
> README | 2 ++
> nfs4.0/lib/rpc/rpc.py | 6 +++++-
> nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py | 7 ++++++-
> nfs4.0/nfs4lib.py | 6 +++++-
> nfs4.0/nfs4server.py | 6 +++++-
> rpc/security.py | 6 +++++-
> xdr/xdrgen.py | 9 +++++++--
> 7 files changed, 35 insertions(+), 7 deletions(-)
>
> diff --git a/README b/README
> index 8c3ac27..d5214b4 100644
> --- a/README
> +++ b/README
> @@ -19,6 +19,8 @@ python3-standard-xdrlib) or you may install it via pip:
>
> pip install xdrlib3
>
> +If xdrlib3 is not available fallback to old xdrlib (useful for python < 3.13).
> +
> You can prepare both versions for use with
>
> ./setup.py build
> diff --git a/nfs4.0/lib/rpc/rpc.py b/nfs4.0/lib/rpc/rpc.py
> index 4751790..7a80241 100644
> --- a/nfs4.0/lib/rpc/rpc.py
> +++ b/nfs4.0/lib/rpc/rpc.py
> @@ -9,12 +9,16 @@
>
> from __future__ import absolute_import
> import struct
> -import xdrlib3 as xdrlib
> import socket
> import select
> import threading
> import errno
>
> +try:
> + import xdrlib3 as xdrlib
> +except:
> + import xdrlib
> +
> from rpc.rpc_const import *
> from rpc.rpc_type import *
> import rpc.rpc_pack as rpc_pack
> diff --git a/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py b/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
> index 2581a1e..41c6d54 100644
> --- a/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
> +++ b/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
> @@ -1,7 +1,12 @@
> from .base import SecFlavor, SecError
> from rpc.rpc_const import AUTH_SYS
> from rpc.rpc_type import opaque_auth
> -from xdrlib3 import Packer, Error
> +import struct
> +
> +try:
> + from xdrlib3 import Packer, Error
> +except:
> + from xdrlib import Packer, Error
>
> class SecAuthSys(SecFlavor):
> # XXX need better defaults
> diff --git a/nfs4.0/nfs4lib.py b/nfs4.0/nfs4lib.py
> index 2337d8c..92b3c11 100644
> --- a/nfs4.0/nfs4lib.py
> +++ b/nfs4.0/nfs4lib.py
> @@ -41,9 +41,13 @@ import xdrdef.nfs4_const as nfs4_const
> from xdrdef.nfs4_const import *
> import xdrdef.nfs4_type as nfs4_type
> from xdrdef.nfs4_type import *
> -from xdrlib3 import Error as XDRError
> import xdrdef.nfs4_pack as nfs4_pack
>
> +try:
> + from xdrlib3 import Error as XDRError
> +except:
> + from xdrlib import Error as XDRError
> +
> import nfs_ops
> op4 = nfs_ops.NFS4ops()
>
> diff --git a/nfs4.0/nfs4server.py b/nfs4.0/nfs4server.py
> index 10bf28e..e26cecd 100755
> --- a/nfs4.0/nfs4server.py
> +++ b/nfs4.0/nfs4server.py
> @@ -34,7 +34,11 @@ import time, StringIO, random, traceback, codecs
> import StringIO
> import nfs4state
> from nfs4state import NFS4Error, printverf
> -from xdrlib3 import Error as XDRError
> +
> +try:
> + from xdrlib3 import Error as XDRError
> +except:
> + from xdrlib import Error as XDRError
>
> unacceptable_names = [ "", ".", ".." ]
> unacceptable_characters = [ "/", "~", "#", ]
> diff --git a/rpc/security.py b/rpc/security.py
> index 789280c..79e746b 100644
> --- a/rpc/security.py
> +++ b/rpc/security.py
> @@ -3,7 +3,6 @@ from .rpc_const import AUTH_NONE, AUTH_SYS, RPCSEC_GSS, SUCCESS, CALL, \
> from .rpc_type import opaque_auth, authsys_parms
> from .rpc_pack import RPCPacker, RPCUnpacker
> from .gss_pack import GSSPacker, GSSUnpacker
> -from xdrlib3 import Packer, Unpacker
> from . import rpclib
> from .gss_const import *
> from . import gss_type
> @@ -17,6 +16,11 @@ except ImportError:
> import threading
> import logging
>
> +try:
> + from xdrlib3 import Packer, Unpacker
> +except:
> + from xdrlib import Packer, Unpacker
> +
> log_gss = logging.getLogger("rpc.sec.gss")
> log_gss.setLevel(logging.INFO)
>
> diff --git a/xdr/xdrgen.py b/xdr/xdrgen.py
> index f802ba8..970ae9d 100755
> --- a/xdr/xdrgen.py
> +++ b/xdr/xdrgen.py
> @@ -1357,8 +1357,13 @@ pack_header = """\
> import sys,os
> from . import %s as const
> from . import %s as types
> -import xdrlib3 as xdrlib
> -from xdrlib3 import Error as XDRError
> +
> +try:
> + import xdrlib3 as xdrlib
> + from xdrlib3 import Error as XDRError
> +except:
> + import xdrlib as xdrlib
> + from xdrlib import Error as XDRError
>
> class nullclass(object):
> pass
Acked-by: Jeff Layton <jlayton@kernel.org>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/1] Allow to fallback to xdrlib if xdrlib3 not available
2025-02-12 13:36 ` [PATCH 1/1] " Jeff Layton
@ 2025-02-12 13:47 ` Petr Vorel
2025-02-12 13:53 ` Jeff Layton
0 siblings, 1 reply; 9+ messages in thread
From: Petr Vorel @ 2025-02-12 13:47 UTC (permalink / raw)
To: Jeff Layton; +Cc: linux-nfs, Calum Mackay, Michael Moese
Hi Jeff,
> On Wed, 2025-02-12 at 14:23 +0100, Petr Vorel wrote:
> > On certain environments it might be difficult to install xdrlib3 via pip
> > (e.g. python 3.11, which is a default on current Tumbleweed).
> I did a "pip install xdrlib3" on Fedora 33 just now, and it has python
> 3.9. What's the problem you're seeing with SuSE installing it with
> v3.11?
Yesterday I did not notice missing ply, I saw only missing xdrgen
(xdr/xdrgen.py). Therefore I thought that virtualenv is mangling PYTHONPATH.
Obviously installing ply with pip would be enough.
I also thing using a fallback saves the need to use virtualenv on old distros,
therefore I would prefer this patch to be accepted. If it's not accepted, it
might be worth to extend info about dependencies.
Kind regards,
Petr
$ python3 --version
Python 3.11.11
# pip install xdrlib3
[notice] A new release of pip is available: 24.3.1 -> 25.0.1
[notice] To update, run: pip install --upgrade pip
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try
zypper install python311-xyz, where xyz is the package
you are trying to install.
...
=> let's use virtualenv
# python3 -m virtualenv .venv && . .venv/bin/activate
created virtual environment CPython3.11.11.final.0-64 in 1466ms
creator CPython3Posix(dest=/root/pynfs/.venv, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/root/.local/share/virtualenv)
added seed packages: pip==24.3.1, setuptools==75.8.0, wheel==0.45.1, xdrlib3==0.1.1
activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
# pip install xdrlib3
Requirement already satisfied: xdrlib3 in ./.venv/lib/python3.11/site-packages (0.1.1)
# ./setup.py build
Moving to xdr
Moving to rpc
Traceback (most recent call last):
File "/root/pynfs/rpc/./setup.py", line 15, in <module>
import xdrgen
ModuleNotFoundError: No module named 'xdrgen'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/root/pynfs/rpc/./setup.py", line 18, in <module>
import xdrgen
File "/root/pynfs/xdr/xdrgen.py", line 235, in <module>
import ply.lex as lex
ModuleNotFoundError: No module named 'ply'
Moving to nfs4.1
Traceback (most recent call last):
File "/root/pynfs/nfs4.1/./setup.py", line 15, in <module>
import xdrgen
ModuleNotFoundError: No module named 'xdrgen'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/root/pynfs/nfs4.1/./setup.py", line 18, in <module>
import xdrgen
File "/root/pynfs/xdr/xdrgen.py", line 235, in <module>
import ply.lex as lex
ModuleNotFoundError: No module named 'ply'
Moving to nfs4.0
/root/pynfs/nfs4.0/./setup.py:7: DeprecationWarning: dep_util is Deprecated. Use functions from setuptools instead.
from distutils.dep_util import newer_group
Traceback (most recent call last):
File "/root/pynfs/nfs4.0/./setup.py", line 11, in <module>
import xdrgen
ModuleNotFoundError: No module named 'xdrgen'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/root/pynfs/nfs4.0/./setup.py", line 14, in <module>
import xdrgen
File "/root/pynfs/xdr/xdrgen.py", line 235, in <module>
import ply.lex as lex
ModuleNotFoundError: No module named 'ply'
# pip install ply # this fixes it
> BTW, does SuSE have the xdrlib3 module available as a package?
> > Fixes: dfb0b07 ("Move to xdrlib3")
> > Suggested-by: Michael Moese <mmoese@suse.com>
> > Signed-off-by: Petr Vorel <pvorel@suse.cz>
> > ---
> > Hi,
> > I admit it would be safer to check if python is really < 3.13.
> > Kind regards,
> > Petr
> > README | 2 ++
> > nfs4.0/lib/rpc/rpc.py | 6 +++++-
> > nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py | 7 ++++++-
> > nfs4.0/nfs4lib.py | 6 +++++-
> > nfs4.0/nfs4server.py | 6 +++++-
> > rpc/security.py | 6 +++++-
> > xdr/xdrgen.py | 9 +++++++--
> > 7 files changed, 35 insertions(+), 7 deletions(-)
> > diff --git a/README b/README
> > index 8c3ac27..d5214b4 100644
> > --- a/README
> > +++ b/README
> > @@ -19,6 +19,8 @@ python3-standard-xdrlib) or you may install it via pip:
> > pip install xdrlib3
> > +If xdrlib3 is not available fallback to old xdrlib (useful for python < 3.13).
> > +
> > You can prepare both versions for use with
> > ./setup.py build
> > diff --git a/nfs4.0/lib/rpc/rpc.py b/nfs4.0/lib/rpc/rpc.py
> > index 4751790..7a80241 100644
> > --- a/nfs4.0/lib/rpc/rpc.py
> > +++ b/nfs4.0/lib/rpc/rpc.py
> > @@ -9,12 +9,16 @@
> > from __future__ import absolute_import
> > import struct
> > -import xdrlib3 as xdrlib
> > import socket
> > import select
> > import threading
> > import errno
> > +try:
> > + import xdrlib3 as xdrlib
> > +except:
> > + import xdrlib
> > +
> > from rpc.rpc_const import *
> > from rpc.rpc_type import *
> > import rpc.rpc_pack as rpc_pack
> > diff --git a/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py b/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
> > index 2581a1e..41c6d54 100644
> > --- a/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
> > +++ b/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
> > @@ -1,7 +1,12 @@
> > from .base import SecFlavor, SecError
> > from rpc.rpc_const import AUTH_SYS
> > from rpc.rpc_type import opaque_auth
> > -from xdrlib3 import Packer, Error
> > +import struct
> > +
> > +try:
> > + from xdrlib3 import Packer, Error
> > +except:
> > + from xdrlib import Packer, Error
> > class SecAuthSys(SecFlavor):
> > # XXX need better defaults
> > diff --git a/nfs4.0/nfs4lib.py b/nfs4.0/nfs4lib.py
> > index 2337d8c..92b3c11 100644
> > --- a/nfs4.0/nfs4lib.py
> > +++ b/nfs4.0/nfs4lib.py
> > @@ -41,9 +41,13 @@ import xdrdef.nfs4_const as nfs4_const
> > from xdrdef.nfs4_const import *
> > import xdrdef.nfs4_type as nfs4_type
> > from xdrdef.nfs4_type import *
> > -from xdrlib3 import Error as XDRError
> > import xdrdef.nfs4_pack as nfs4_pack
> > +try:
> > + from xdrlib3 import Error as XDRError
> > +except:
> > + from xdrlib import Error as XDRError
> > +
> > import nfs_ops
> > op4 = nfs_ops.NFS4ops()
> > diff --git a/nfs4.0/nfs4server.py b/nfs4.0/nfs4server.py
> > index 10bf28e..e26cecd 100755
> > --- a/nfs4.0/nfs4server.py
> > +++ b/nfs4.0/nfs4server.py
> > @@ -34,7 +34,11 @@ import time, StringIO, random, traceback, codecs
> > import StringIO
> > import nfs4state
> > from nfs4state import NFS4Error, printverf
> > -from xdrlib3 import Error as XDRError
> > +
> > +try:
> > + from xdrlib3 import Error as XDRError
> > +except:
> > + from xdrlib import Error as XDRError
> > unacceptable_names = [ "", ".", ".." ]
> > unacceptable_characters = [ "/", "~", "#", ]
> > diff --git a/rpc/security.py b/rpc/security.py
> > index 789280c..79e746b 100644
> > --- a/rpc/security.py
> > +++ b/rpc/security.py
> > @@ -3,7 +3,6 @@ from .rpc_const import AUTH_NONE, AUTH_SYS, RPCSEC_GSS, SUCCESS, CALL, \
> > from .rpc_type import opaque_auth, authsys_parms
> > from .rpc_pack import RPCPacker, RPCUnpacker
> > from .gss_pack import GSSPacker, GSSUnpacker
> > -from xdrlib3 import Packer, Unpacker
> > from . import rpclib
> > from .gss_const import *
> > from . import gss_type
> > @@ -17,6 +16,11 @@ except ImportError:
> > import threading
> > import logging
> > +try:
> > + from xdrlib3 import Packer, Unpacker
> > +except:
> > + from xdrlib import Packer, Unpacker
> > +
> > log_gss = logging.getLogger("rpc.sec.gss")
> > log_gss.setLevel(logging.INFO)
> > diff --git a/xdr/xdrgen.py b/xdr/xdrgen.py
> > index f802ba8..970ae9d 100755
> > --- a/xdr/xdrgen.py
> > +++ b/xdr/xdrgen.py
> > @@ -1357,8 +1357,13 @@ pack_header = """\
> > import sys,os
> > from . import %s as const
> > from . import %s as types
> > -import xdrlib3 as xdrlib
> > -from xdrlib3 import Error as XDRError
> > +
> > +try:
> > + import xdrlib3 as xdrlib
> > + from xdrlib3 import Error as XDRError
> > +except:
> > + import xdrlib as xdrlib
> > + from xdrlib import Error as XDRError
> > class nullclass(object):
> > pass
> Acked-by: Jeff Layton <jlayton@kernel.org>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/1] Allow to fallback to xdrlib if xdrlib3 not available
2025-02-12 13:47 ` Petr Vorel
@ 2025-02-12 13:53 ` Jeff Layton
2025-02-12 15:41 ` Chuck Lever
0 siblings, 1 reply; 9+ messages in thread
From: Jeff Layton @ 2025-02-12 13:53 UTC (permalink / raw)
To: Petr Vorel; +Cc: linux-nfs, Calum Mackay, Michael Moese
On Wed, 2025-02-12 at 14:47 +0100, Petr Vorel wrote:
> Hi Jeff,
>
> > On Wed, 2025-02-12 at 14:23 +0100, Petr Vorel wrote:
> > > On certain environments it might be difficult to install xdrlib3 via pip
> > > (e.g. python 3.11, which is a default on current Tumbleweed).
>
>
> > I did a "pip install xdrlib3" on Fedora 33 just now, and it has python
> > 3.9. What's the problem you're seeing with SuSE installing it with
> > v3.11?
>
> Yesterday I did not notice missing ply, I saw only missing xdrgen
> (xdr/xdrgen.py). Therefore I thought that virtualenv is mangling PYTHONPATH.
> Obviously installing ply with pip would be enough.
>
> I also thing using a fallback saves the need to use virtualenv on old distros,
> therefore I would prefer this patch to be accepted. If it's not accepted, it
> might be worth to extend info about dependencies.
>
> Kind regards,
> Petr
>
> $ python3 --version
> Python 3.11.11
>
> # pip install xdrlib3
>
> [notice] A new release of pip is available: 24.3.1 -> 25.0.1
> [notice] To update, run: pip install --upgrade pip
> error: externally-managed-environment
>
> × This environment is externally managed
> ╰─> To install Python packages system-wide, try
> zypper install python311-xyz, where xyz is the package
> you are trying to install.
> ...
>
> => let's use virtualenv
>
> # python3 -m virtualenv .venv && . .venv/bin/activate
> created virtual environment CPython3.11.11.final.0-64 in 1466ms
> creator CPython3Posix(dest=/root/pynfs/.venv, clear=False, no_vcs_ignore=False, global=False)
> seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/root/.local/share/virtualenv)
> added seed packages: pip==24.3.1, setuptools==75.8.0, wheel==0.45.1, xdrlib3==0.1.1
> activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
>
> # pip install xdrlib3
> Requirement already satisfied: xdrlib3 in ./.venv/lib/python3.11/site-packages (0.1.1)
>
> # ./setup.py build
> Moving to xdr
>
>
> Moving to rpc
> Traceback (most recent call last):
> File "/root/pynfs/rpc/./setup.py", line 15, in <module>
> import xdrgen
> ModuleNotFoundError: No module named 'xdrgen'
>
> During handling of the above exception, another exception occurred:
>
> Traceback (most recent call last):
> File "/root/pynfs/rpc/./setup.py", line 18, in <module>
> import xdrgen
> File "/root/pynfs/xdr/xdrgen.py", line 235, in <module>
> import ply.lex as lex
> ModuleNotFoundError: No module named 'ply'
>
> Moving to nfs4.1
> Traceback (most recent call last):
> File "/root/pynfs/nfs4.1/./setup.py", line 15, in <module>
> import xdrgen
> ModuleNotFoundError: No module named 'xdrgen'
>
> During handling of the above exception, another exception occurred:
>
> Traceback (most recent call last):
> File "/root/pynfs/nfs4.1/./setup.py", line 18, in <module>
> import xdrgen
> File "/root/pynfs/xdr/xdrgen.py", line 235, in <module>
> import ply.lex as lex
> ModuleNotFoundError: No module named 'ply'
>
> Moving to nfs4.0
> /root/pynfs/nfs4.0/./setup.py:7: DeprecationWarning: dep_util is Deprecated. Use functions from setuptools instead.
> from distutils.dep_util import newer_group
> Traceback (most recent call last):
> File "/root/pynfs/nfs4.0/./setup.py", line 11, in <module>
> import xdrgen
> ModuleNotFoundError: No module named 'xdrgen'
>
> During handling of the above exception, another exception occurred:
>
> Traceback (most recent call last):
> File "/root/pynfs/nfs4.0/./setup.py", line 14, in <module>
> import xdrgen
> File "/root/pynfs/xdr/xdrgen.py", line 235, in <module>
> import ply.lex as lex
> ModuleNotFoundError: No module named 'ply'
>
> # pip install ply # this fixes it
>
> > BTW, does SuSE have the xdrlib3 module available as a package?
>
> > > Fixes: dfb0b07 ("Move to xdrlib3")
> > > Suggested-by: Michael Moese <mmoese@suse.com>
> > > Signed-off-by: Petr Vorel <pvorel@suse.cz>
> > > ---
> > > Hi,
>
> > > I admit it would be safer to check if python is really < 3.13.
>
> > > Kind regards,
> > > Petr
>
> > > README | 2 ++
> > > nfs4.0/lib/rpc/rpc.py | 6 +++++-
> > > nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py | 7 ++++++-
> > > nfs4.0/nfs4lib.py | 6 +++++-
> > > nfs4.0/nfs4server.py | 6 +++++-
> > > rpc/security.py | 6 +++++-
> > > xdr/xdrgen.py | 9 +++++++--
> > > 7 files changed, 35 insertions(+), 7 deletions(-)
>
> > > diff --git a/README b/README
> > > index 8c3ac27..d5214b4 100644
> > > --- a/README
> > > +++ b/README
> > > @@ -19,6 +19,8 @@ python3-standard-xdrlib) or you may install it via pip:
>
> > > pip install xdrlib3
>
> > > +If xdrlib3 is not available fallback to old xdrlib (useful for python < 3.13).
> > > +
> > > You can prepare both versions for use with
>
> > > ./setup.py build
> > > diff --git a/nfs4.0/lib/rpc/rpc.py b/nfs4.0/lib/rpc/rpc.py
> > > index 4751790..7a80241 100644
> > > --- a/nfs4.0/lib/rpc/rpc.py
> > > +++ b/nfs4.0/lib/rpc/rpc.py
> > > @@ -9,12 +9,16 @@
>
> > > from __future__ import absolute_import
> > > import struct
> > > -import xdrlib3 as xdrlib
> > > import socket
> > > import select
> > > import threading
> > > import errno
>
> > > +try:
> > > + import xdrlib3 as xdrlib
> > > +except:
> > > + import xdrlib
> > > +
> > > from rpc.rpc_const import *
> > > from rpc.rpc_type import *
> > > import rpc.rpc_pack as rpc_pack
> > > diff --git a/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py b/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
> > > index 2581a1e..41c6d54 100644
> > > --- a/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
> > > +++ b/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
> > > @@ -1,7 +1,12 @@
> > > from .base import SecFlavor, SecError
> > > from rpc.rpc_const import AUTH_SYS
> > > from rpc.rpc_type import opaque_auth
> > > -from xdrlib3 import Packer, Error
> > > +import struct
> > > +
> > > +try:
> > > + from xdrlib3 import Packer, Error
> > > +except:
> > > + from xdrlib import Packer, Error
>
> > > class SecAuthSys(SecFlavor):
> > > # XXX need better defaults
> > > diff --git a/nfs4.0/nfs4lib.py b/nfs4.0/nfs4lib.py
> > > index 2337d8c..92b3c11 100644
> > > --- a/nfs4.0/nfs4lib.py
> > > +++ b/nfs4.0/nfs4lib.py
> > > @@ -41,9 +41,13 @@ import xdrdef.nfs4_const as nfs4_const
> > > from xdrdef.nfs4_const import *
> > > import xdrdef.nfs4_type as nfs4_type
> > > from xdrdef.nfs4_type import *
> > > -from xdrlib3 import Error as XDRError
> > > import xdrdef.nfs4_pack as nfs4_pack
>
> > > +try:
> > > + from xdrlib3 import Error as XDRError
> > > +except:
> > > + from xdrlib import Error as XDRError
> > > +
> > > import nfs_ops
> > > op4 = nfs_ops.NFS4ops()
>
> > > diff --git a/nfs4.0/nfs4server.py b/nfs4.0/nfs4server.py
> > > index 10bf28e..e26cecd 100755
> > > --- a/nfs4.0/nfs4server.py
> > > +++ b/nfs4.0/nfs4server.py
> > > @@ -34,7 +34,11 @@ import time, StringIO, random, traceback, codecs
> > > import StringIO
> > > import nfs4state
> > > from nfs4state import NFS4Error, printverf
> > > -from xdrlib3 import Error as XDRError
> > > +
> > > +try:
> > > + from xdrlib3 import Error as XDRError
> > > +except:
> > > + from xdrlib import Error as XDRError
>
> > > unacceptable_names = [ "", ".", ".." ]
> > > unacceptable_characters = [ "/", "~", "#", ]
> > > diff --git a/rpc/security.py b/rpc/security.py
> > > index 789280c..79e746b 100644
> > > --- a/rpc/security.py
> > > +++ b/rpc/security.py
> > > @@ -3,7 +3,6 @@ from .rpc_const import AUTH_NONE, AUTH_SYS, RPCSEC_GSS, SUCCESS, CALL, \
> > > from .rpc_type import opaque_auth, authsys_parms
> > > from .rpc_pack import RPCPacker, RPCUnpacker
> > > from .gss_pack import GSSPacker, GSSUnpacker
> > > -from xdrlib3 import Packer, Unpacker
> > > from . import rpclib
> > > from .gss_const import *
> > > from . import gss_type
> > > @@ -17,6 +16,11 @@ except ImportError:
> > > import threading
> > > import logging
>
> > > +try:
> > > + from xdrlib3 import Packer, Unpacker
> > > +except:
> > > + from xdrlib import Packer, Unpacker
> > > +
> > > log_gss = logging.getLogger("rpc.sec.gss")
> > > log_gss.setLevel(logging.INFO)
>
> > > diff --git a/xdr/xdrgen.py b/xdr/xdrgen.py
> > > index f802ba8..970ae9d 100755
> > > --- a/xdr/xdrgen.py
> > > +++ b/xdr/xdrgen.py
> > > @@ -1357,8 +1357,13 @@ pack_header = """\
> > > import sys,os
> > > from . import %s as const
> > > from . import %s as types
> > > -import xdrlib3 as xdrlib
> > > -from xdrlib3 import Error as XDRError
> > > +
> > > +try:
> > > + import xdrlib3 as xdrlib
> > > + from xdrlib3 import Error as XDRError
> > > +except:
> > > + import xdrlib as xdrlib
> > > + from xdrlib import Error as XDRError
>
> > > class nullclass(object):
> > > pass
>
> > Acked-by: Jeff Layton <jlayton@kernel.org>
Ok, I don't have any objection to the patch. I was just curious as to
whether SuSE had some problem using pip for this.
Acked-by: Jeff Layton <jlayton@kernel.org>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/1] Allow to fallback to xdrlib if xdrlib3 not available
2025-02-12 13:53 ` Jeff Layton
@ 2025-02-12 15:41 ` Chuck Lever
0 siblings, 0 replies; 9+ messages in thread
From: Chuck Lever @ 2025-02-12 15:41 UTC (permalink / raw)
To: Jeff Layton, Petr Vorel; +Cc: linux-nfs, Calum Mackay, Michael Moese
On 2/12/25 8:53 AM, Jeff Layton wrote:
> On Wed, 2025-02-12 at 14:47 +0100, Petr Vorel wrote:
>> Hi Jeff,
>>
>>> On Wed, 2025-02-12 at 14:23 +0100, Petr Vorel wrote:
>>>> On certain environments it might be difficult to install xdrlib3 via pip
>>>> (e.g. python 3.11, which is a default on current Tumbleweed).
>>
>>
>>> I did a "pip install xdrlib3" on Fedora 33 just now, and it has python
>>> 3.9. What's the problem you're seeing with SuSE installing it with
>>> v3.11?
>>
>> Yesterday I did not notice missing ply, I saw only missing xdrgen
>> (xdr/xdrgen.py). Therefore I thought that virtualenv is mangling PYTHONPATH.
>> Obviously installing ply with pip would be enough.
>>
>> I also thing using a fallback saves the need to use virtualenv on old distros,
>> therefore I would prefer this patch to be accepted. If it's not accepted, it
>> might be worth to extend info about dependencies.
>>
>> Kind regards,
>> Petr
>>
>> $ python3 --version
>> Python 3.11.11
>>
>> # pip install xdrlib3
>>
>> [notice] A new release of pip is available: 24.3.1 -> 25.0.1
>> [notice] To update, run: pip install --upgrade pip
>> error: externally-managed-environment
>>
>> × This environment is externally managed
>> ╰─> To install Python packages system-wide, try
>> zypper install python311-xyz, where xyz is the package
>> you are trying to install.
>> ...
>>
>> => let's use virtualenv
>>
>> # python3 -m virtualenv .venv && . .venv/bin/activate
>> created virtual environment CPython3.11.11.final.0-64 in 1466ms
>> creator CPython3Posix(dest=/root/pynfs/.venv, clear=False, no_vcs_ignore=False, global=False)
>> seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/root/.local/share/virtualenv)
>> added seed packages: pip==24.3.1, setuptools==75.8.0, wheel==0.45.1, xdrlib3==0.1.1
>> activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
>>
>> # pip install xdrlib3
>> Requirement already satisfied: xdrlib3 in ./.venv/lib/python3.11/site-packages (0.1.1)
>>
>> # ./setup.py build
>> Moving to xdr
>>
>>
>> Moving to rpc
>> Traceback (most recent call last):
>> File "/root/pynfs/rpc/./setup.py", line 15, in <module>
>> import xdrgen
>> ModuleNotFoundError: No module named 'xdrgen'
>>
>> During handling of the above exception, another exception occurred:
>>
>> Traceback (most recent call last):
>> File "/root/pynfs/rpc/./setup.py", line 18, in <module>
>> import xdrgen
>> File "/root/pynfs/xdr/xdrgen.py", line 235, in <module>
>> import ply.lex as lex
>> ModuleNotFoundError: No module named 'ply'
>>
>> Moving to nfs4.1
>> Traceback (most recent call last):
>> File "/root/pynfs/nfs4.1/./setup.py", line 15, in <module>
>> import xdrgen
>> ModuleNotFoundError: No module named 'xdrgen'
>>
>> During handling of the above exception, another exception occurred:
>>
>> Traceback (most recent call last):
>> File "/root/pynfs/nfs4.1/./setup.py", line 18, in <module>
>> import xdrgen
>> File "/root/pynfs/xdr/xdrgen.py", line 235, in <module>
>> import ply.lex as lex
>> ModuleNotFoundError: No module named 'ply'
>>
>> Moving to nfs4.0
>> /root/pynfs/nfs4.0/./setup.py:7: DeprecationWarning: dep_util is Deprecated. Use functions from setuptools instead.
>> from distutils.dep_util import newer_group
>> Traceback (most recent call last):
>> File "/root/pynfs/nfs4.0/./setup.py", line 11, in <module>
>> import xdrgen
>> ModuleNotFoundError: No module named 'xdrgen'
>>
>> During handling of the above exception, another exception occurred:
>>
>> Traceback (most recent call last):
>> File "/root/pynfs/nfs4.0/./setup.py", line 14, in <module>
>> import xdrgen
>> File "/root/pynfs/xdr/xdrgen.py", line 235, in <module>
>> import ply.lex as lex
>> ModuleNotFoundError: No module named 'ply'
>>
>> # pip install ply # this fixes it
>>
>>> BTW, does SuSE have the xdrlib3 module available as a package?
>>
>>>> Fixes: dfb0b07 ("Move to xdrlib3")
>>>> Suggested-by: Michael Moese <mmoese@suse.com>
>>>> Signed-off-by: Petr Vorel <pvorel@suse.cz>
>>>> ---
>>>> Hi,
>>
>>>> I admit it would be safer to check if python is really < 3.13.
>>
>>>> Kind regards,
>>>> Petr
>>
>>>> README | 2 ++
>>>> nfs4.0/lib/rpc/rpc.py | 6 +++++-
>>>> nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py | 7 ++++++-
>>>> nfs4.0/nfs4lib.py | 6 +++++-
>>>> nfs4.0/nfs4server.py | 6 +++++-
>>>> rpc/security.py | 6 +++++-
>>>> xdr/xdrgen.py | 9 +++++++--
>>>> 7 files changed, 35 insertions(+), 7 deletions(-)
>>
>>>> diff --git a/README b/README
>>>> index 8c3ac27..d5214b4 100644
>>>> --- a/README
>>>> +++ b/README
>>>> @@ -19,6 +19,8 @@ python3-standard-xdrlib) or you may install it via pip:
>>
>>>> pip install xdrlib3
>>
>>>> +If xdrlib3 is not available fallback to old xdrlib (useful for python < 3.13).
>>>> +
>>>> You can prepare both versions for use with
>>
>>>> ./setup.py build
>>>> diff --git a/nfs4.0/lib/rpc/rpc.py b/nfs4.0/lib/rpc/rpc.py
>>>> index 4751790..7a80241 100644
>>>> --- a/nfs4.0/lib/rpc/rpc.py
>>>> +++ b/nfs4.0/lib/rpc/rpc.py
>>>> @@ -9,12 +9,16 @@
>>
>>>> from __future__ import absolute_import
>>>> import struct
>>>> -import xdrlib3 as xdrlib
>>>> import socket
>>>> import select
>>>> import threading
>>>> import errno
>>
>>>> +try:
>>>> + import xdrlib3 as xdrlib
>>>> +except:
>>>> + import xdrlib
>>>> +
>>>> from rpc.rpc_const import *
>>>> from rpc.rpc_type import *
>>>> import rpc.rpc_pack as rpc_pack
>>>> diff --git a/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py b/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
>>>> index 2581a1e..41c6d54 100644
>>>> --- a/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
>>>> +++ b/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
>>>> @@ -1,7 +1,12 @@
>>>> from .base import SecFlavor, SecError
>>>> from rpc.rpc_const import AUTH_SYS
>>>> from rpc.rpc_type import opaque_auth
>>>> -from xdrlib3 import Packer, Error
>>>> +import struct
>>>> +
>>>> +try:
>>>> + from xdrlib3 import Packer, Error
>>>> +except:
>>>> + from xdrlib import Packer, Error
>>
>>>> class SecAuthSys(SecFlavor):
>>>> # XXX need better defaults
>>>> diff --git a/nfs4.0/nfs4lib.py b/nfs4.0/nfs4lib.py
>>>> index 2337d8c..92b3c11 100644
>>>> --- a/nfs4.0/nfs4lib.py
>>>> +++ b/nfs4.0/nfs4lib.py
>>>> @@ -41,9 +41,13 @@ import xdrdef.nfs4_const as nfs4_const
>>>> from xdrdef.nfs4_const import *
>>>> import xdrdef.nfs4_type as nfs4_type
>>>> from xdrdef.nfs4_type import *
>>>> -from xdrlib3 import Error as XDRError
>>>> import xdrdef.nfs4_pack as nfs4_pack
>>
>>>> +try:
>>>> + from xdrlib3 import Error as XDRError
>>>> +except:
>>>> + from xdrlib import Error as XDRError
>>>> +
>>>> import nfs_ops
>>>> op4 = nfs_ops.NFS4ops()
>>
>>>> diff --git a/nfs4.0/nfs4server.py b/nfs4.0/nfs4server.py
>>>> index 10bf28e..e26cecd 100755
>>>> --- a/nfs4.0/nfs4server.py
>>>> +++ b/nfs4.0/nfs4server.py
>>>> @@ -34,7 +34,11 @@ import time, StringIO, random, traceback, codecs
>>>> import StringIO
>>>> import nfs4state
>>>> from nfs4state import NFS4Error, printverf
>>>> -from xdrlib3 import Error as XDRError
>>>> +
>>>> +try:
>>>> + from xdrlib3 import Error as XDRError
>>>> +except:
>>>> + from xdrlib import Error as XDRError
>>
>>>> unacceptable_names = [ "", ".", ".." ]
>>>> unacceptable_characters = [ "/", "~", "#", ]
>>>> diff --git a/rpc/security.py b/rpc/security.py
>>>> index 789280c..79e746b 100644
>>>> --- a/rpc/security.py
>>>> +++ b/rpc/security.py
>>>> @@ -3,7 +3,6 @@ from .rpc_const import AUTH_NONE, AUTH_SYS, RPCSEC_GSS, SUCCESS, CALL, \
>>>> from .rpc_type import opaque_auth, authsys_parms
>>>> from .rpc_pack import RPCPacker, RPCUnpacker
>>>> from .gss_pack import GSSPacker, GSSUnpacker
>>>> -from xdrlib3 import Packer, Unpacker
>>>> from . import rpclib
>>>> from .gss_const import *
>>>> from . import gss_type
>>>> @@ -17,6 +16,11 @@ except ImportError:
>>>> import threading
>>>> import logging
>>
>>>> +try:
>>>> + from xdrlib3 import Packer, Unpacker
>>>> +except:
>>>> + from xdrlib import Packer, Unpacker
>>>> +
>>>> log_gss = logging.getLogger("rpc.sec.gss")
>>>> log_gss.setLevel(logging.INFO)
>>
>>>> diff --git a/xdr/xdrgen.py b/xdr/xdrgen.py
>>>> index f802ba8..970ae9d 100755
>>>> --- a/xdr/xdrgen.py
>>>> +++ b/xdr/xdrgen.py
>>>> @@ -1357,8 +1357,13 @@ pack_header = """\
>>>> import sys,os
>>>> from . import %s as const
>>>> from . import %s as types
>>>> -import xdrlib3 as xdrlib
>>>> -from xdrlib3 import Error as XDRError
>>>> +
>>>> +try:
>>>> + import xdrlib3 as xdrlib
>>>> + from xdrlib3 import Error as XDRError
>>>> +except:
>>>> + import xdrlib as xdrlib
>>>> + from xdrlib import Error as XDRError
>>
>>>> class nullclass(object):
>>>> pass
>>
>>> Acked-by: Jeff Layton <jlayton@kernel.org>
>
> Ok, I don't have any objection to the patch. I was just curious as to
> whether SuSE had some problem using pip for this.
>
> Acked-by: Jeff Layton <jlayton@kernel.org>
>
I agree in principal this is what should be done, but my Python fu
is not strong enough to say whether this is the best way to do it.
But it looks good enough for government work.
Acked-by: Chuck Lever <chuck.lever@oracle.com>
--
Chuck Lever
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/1] Allow to fallback to xdrlib if xdrlib3 not available
2025-02-12 13:23 [PATCH 1/1] Allow to fallback to xdrlib if xdrlib3 not available Petr Vorel
2025-02-12 13:27 ` [PATCH pynfs] " Petr Vorel
2025-02-12 13:36 ` [PATCH 1/1] " Jeff Layton
@ 2025-02-12 20:52 ` Calum Mackay
2025-02-12 21:01 ` Petr Vorel
2 siblings, 1 reply; 9+ messages in thread
From: Calum Mackay @ 2025-02-12 20:52 UTC (permalink / raw)
To: Petr Vorel, linux-nfs; +Cc: Calum Mackay, Jeff Layton, Michael Moese
On 12/02/2025 1:23 pm, Petr Vorel wrote:
> On certain environments it might be difficult to install xdrlib3 via pip
> (e.g. python 3.11, which is a default on current Tumbleweed).
>
> Fixes: dfb0b07 ("Move to xdrlib3")
> Suggested-by: Michael Moese <mmoese@suse.com>
> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> ---
> Hi,
>
> I admit it would be safer to check if python is really < 3.13.
>
> Kind regards,
> Petr
>
> README | 2 ++
> nfs4.0/lib/rpc/rpc.py | 6 +++++-
> nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py | 7 ++++++-
> nfs4.0/nfs4lib.py | 6 +++++-
> nfs4.0/nfs4server.py | 6 +++++-
> rpc/security.py | 6 +++++-
> xdr/xdrgen.py | 9 +++++++--
> 7 files changed, 35 insertions(+), 7 deletions(-)
>
> diff --git a/README b/README
> index 8c3ac27..d5214b4 100644
> --- a/README
> +++ b/README
> @@ -19,6 +19,8 @@ python3-standard-xdrlib) or you may install it via pip:
>
> pip install xdrlib3
>
> +If xdrlib3 is not available fallback to old xdrlib (useful for python < 3.13).
It sounds a little like the above is an instruction for the user; if you
don't mind I'll fix this up, adding "the code will fallback…", just to
make it obvious?
Thanks for the fix Petr, I'll get this in today.
cheers,
c.
> +
> You can prepare both versions for use with
>
> ./setup.py build
> diff --git a/nfs4.0/lib/rpc/rpc.py b/nfs4.0/lib/rpc/rpc.py
> index 4751790..7a80241 100644
> --- a/nfs4.0/lib/rpc/rpc.py
> +++ b/nfs4.0/lib/rpc/rpc.py
> @@ -9,12 +9,16 @@
>
> from __future__ import absolute_import
> import struct
> -import xdrlib3 as xdrlib
> import socket
> import select
> import threading
> import errno
>
> +try:
> + import xdrlib3 as xdrlib
> +except:
> + import xdrlib
> +
> from rpc.rpc_const import *
> from rpc.rpc_type import *
> import rpc.rpc_pack as rpc_pack
> diff --git a/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py b/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
> index 2581a1e..41c6d54 100644
> --- a/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
> +++ b/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
> @@ -1,7 +1,12 @@
> from .base import SecFlavor, SecError
> from rpc.rpc_const import AUTH_SYS
> from rpc.rpc_type import opaque_auth
> -from xdrlib3 import Packer, Error
> +import struct
> +
> +try:
> + from xdrlib3 import Packer, Error
> +except:
> + from xdrlib import Packer, Error
>
> class SecAuthSys(SecFlavor):
> # XXX need better defaults
> diff --git a/nfs4.0/nfs4lib.py b/nfs4.0/nfs4lib.py
> index 2337d8c..92b3c11 100644
> --- a/nfs4.0/nfs4lib.py
> +++ b/nfs4.0/nfs4lib.py
> @@ -41,9 +41,13 @@ import xdrdef.nfs4_const as nfs4_const
> from xdrdef.nfs4_const import *
> import xdrdef.nfs4_type as nfs4_type
> from xdrdef.nfs4_type import *
> -from xdrlib3 import Error as XDRError
> import xdrdef.nfs4_pack as nfs4_pack
>
> +try:
> + from xdrlib3 import Error as XDRError
> +except:
> + from xdrlib import Error as XDRError
> +
> import nfs_ops
> op4 = nfs_ops.NFS4ops()
>
> diff --git a/nfs4.0/nfs4server.py b/nfs4.0/nfs4server.py
> index 10bf28e..e26cecd 100755
> --- a/nfs4.0/nfs4server.py
> +++ b/nfs4.0/nfs4server.py
> @@ -34,7 +34,11 @@ import time, StringIO, random, traceback, codecs
> import StringIO
> import nfs4state
> from nfs4state import NFS4Error, printverf
> -from xdrlib3 import Error as XDRError
> +
> +try:
> + from xdrlib3 import Error as XDRError
> +except:
> + from xdrlib import Error as XDRError
>
> unacceptable_names = [ "", ".", ".." ]
> unacceptable_characters = [ "/", "~", "#", ]
> diff --git a/rpc/security.py b/rpc/security.py
> index 789280c..79e746b 100644
> --- a/rpc/security.py
> +++ b/rpc/security.py
> @@ -3,7 +3,6 @@ from .rpc_const import AUTH_NONE, AUTH_SYS, RPCSEC_GSS, SUCCESS, CALL, \
> from .rpc_type import opaque_auth, authsys_parms
> from .rpc_pack import RPCPacker, RPCUnpacker
> from .gss_pack import GSSPacker, GSSUnpacker
> -from xdrlib3 import Packer, Unpacker
> from . import rpclib
> from .gss_const import *
> from . import gss_type
> @@ -17,6 +16,11 @@ except ImportError:
> import threading
> import logging
>
> +try:
> + from xdrlib3 import Packer, Unpacker
> +except:
> + from xdrlib import Packer, Unpacker
> +
> log_gss = logging.getLogger("rpc.sec.gss")
> log_gss.setLevel(logging.INFO)
>
> diff --git a/xdr/xdrgen.py b/xdr/xdrgen.py
> index f802ba8..970ae9d 100755
> --- a/xdr/xdrgen.py
> +++ b/xdr/xdrgen.py
> @@ -1357,8 +1357,13 @@ pack_header = """\
> import sys,os
> from . import %s as const
> from . import %s as types
> -import xdrlib3 as xdrlib
> -from xdrlib3 import Error as XDRError
> +
> +try:
> + import xdrlib3 as xdrlib
> + from xdrlib3 import Error as XDRError
> +except:
> + import xdrlib as xdrlib
> + from xdrlib import Error as XDRError
>
> class nullclass(object):
> pass
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/1] Allow to fallback to xdrlib if xdrlib3 not available
2025-02-12 20:52 ` Calum Mackay
@ 2025-02-12 21:01 ` Petr Vorel
2025-02-12 21:32 ` Calum Mackay
0 siblings, 1 reply; 9+ messages in thread
From: Petr Vorel @ 2025-02-12 21:01 UTC (permalink / raw)
To: Calum Mackay; +Cc: linux-nfs, Jeff Layton, Michael Moese
> On 12/02/2025 1:23 pm, Petr Vorel wrote:
> > On certain environments it might be difficult to install xdrlib3 via pip
> > (e.g. python 3.11, which is a default on current Tumbleweed).
> > Fixes: dfb0b07 ("Move to xdrlib3")
> > Suggested-by: Michael Moese <mmoese@suse.com>
> > Signed-off-by: Petr Vorel <pvorel@suse.cz>
> > ---
> > Hi,
> > I admit it would be safer to check if python is really < 3.13.
> > Kind regards,
> > Petr
> > README | 2 ++
> > nfs4.0/lib/rpc/rpc.py | 6 +++++-
> > nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py | 7 ++++++-
> > nfs4.0/nfs4lib.py | 6 +++++-
> > nfs4.0/nfs4server.py | 6 +++++-
> > rpc/security.py | 6 +++++-
> > xdr/xdrgen.py | 9 +++++++--
> > 7 files changed, 35 insertions(+), 7 deletions(-)
> > diff --git a/README b/README
> > index 8c3ac27..d5214b4 100644
> > --- a/README
> > +++ b/README
> > @@ -19,6 +19,8 @@ python3-standard-xdrlib) or you may install it via pip:
> > pip install xdrlib3
> > +If xdrlib3 is not available fallback to old xdrlib (useful for python < 3.13).
> It sounds a little like the above is an instruction for the user; if you
> don't mind I'll fix this up, adding "the code will fallback…", just to make
> it obvious?
Yes, please, fix it.
> Thanks for the fix Petr, I'll get this in today.
Thanks a lot for accepting this. FYI we test with pynfs also various SLES kernels
(including very old ones), which obviously have older python3. Probably on all
would xdrlib3 installation via pip+virtualenv worked, but safest way is to avoid
it and use python stock xdrlib.
Kind regards,
Petr
> cheers,
> c.
> > +
> > You can prepare both versions for use with
> > ./setup.py build
> > diff --git a/nfs4.0/lib/rpc/rpc.py b/nfs4.0/lib/rpc/rpc.py
> > index 4751790..7a80241 100644
> > --- a/nfs4.0/lib/rpc/rpc.py
> > +++ b/nfs4.0/lib/rpc/rpc.py
> > @@ -9,12 +9,16 @@
> > from __future__ import absolute_import
> > import struct
> > -import xdrlib3 as xdrlib
> > import socket
> > import select
> > import threading
> > import errno
> > +try:
> > + import xdrlib3 as xdrlib
> > +except:
> > + import xdrlib
> > +
> > from rpc.rpc_const import *
> > from rpc.rpc_type import *
> > import rpc.rpc_pack as rpc_pack
> > diff --git a/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py b/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
> > index 2581a1e..41c6d54 100644
> > --- a/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
> > +++ b/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
> > @@ -1,7 +1,12 @@
> > from .base import SecFlavor, SecError
> > from rpc.rpc_const import AUTH_SYS
> > from rpc.rpc_type import opaque_auth
> > -from xdrlib3 import Packer, Error
> > +import struct
> > +
> > +try:
> > + from xdrlib3 import Packer, Error
> > +except:
> > + from xdrlib import Packer, Error
> > class SecAuthSys(SecFlavor):
> > # XXX need better defaults
> > diff --git a/nfs4.0/nfs4lib.py b/nfs4.0/nfs4lib.py
> > index 2337d8c..92b3c11 100644
> > --- a/nfs4.0/nfs4lib.py
> > +++ b/nfs4.0/nfs4lib.py
> > @@ -41,9 +41,13 @@ import xdrdef.nfs4_const as nfs4_const
> > from xdrdef.nfs4_const import *
> > import xdrdef.nfs4_type as nfs4_type
> > from xdrdef.nfs4_type import *
> > -from xdrlib3 import Error as XDRError
> > import xdrdef.nfs4_pack as nfs4_pack
> > +try:
> > + from xdrlib3 import Error as XDRError
> > +except:
> > + from xdrlib import Error as XDRError
> > +
> > import nfs_ops
> > op4 = nfs_ops.NFS4ops()
> > diff --git a/nfs4.0/nfs4server.py b/nfs4.0/nfs4server.py
> > index 10bf28e..e26cecd 100755
> > --- a/nfs4.0/nfs4server.py
> > +++ b/nfs4.0/nfs4server.py
> > @@ -34,7 +34,11 @@ import time, StringIO, random, traceback, codecs
> > import StringIO
> > import nfs4state
> > from nfs4state import NFS4Error, printverf
> > -from xdrlib3 import Error as XDRError
> > +
> > +try:
> > + from xdrlib3 import Error as XDRError
> > +except:
> > + from xdrlib import Error as XDRError
> > unacceptable_names = [ "", ".", ".." ]
> > unacceptable_characters = [ "/", "~", "#", ]
> > diff --git a/rpc/security.py b/rpc/security.py
> > index 789280c..79e746b 100644
> > --- a/rpc/security.py
> > +++ b/rpc/security.py
> > @@ -3,7 +3,6 @@ from .rpc_const import AUTH_NONE, AUTH_SYS, RPCSEC_GSS, SUCCESS, CALL, \
> > from .rpc_type import opaque_auth, authsys_parms
> > from .rpc_pack import RPCPacker, RPCUnpacker
> > from .gss_pack import GSSPacker, GSSUnpacker
> > -from xdrlib3 import Packer, Unpacker
> > from . import rpclib
> > from .gss_const import *
> > from . import gss_type
> > @@ -17,6 +16,11 @@ except ImportError:
> > import threading
> > import logging
> > +try:
> > + from xdrlib3 import Packer, Unpacker
> > +except:
> > + from xdrlib import Packer, Unpacker
> > +
> > log_gss = logging.getLogger("rpc.sec.gss")
> > log_gss.setLevel(logging.INFO)
> > diff --git a/xdr/xdrgen.py b/xdr/xdrgen.py
> > index f802ba8..970ae9d 100755
> > --- a/xdr/xdrgen.py
> > +++ b/xdr/xdrgen.py
> > @@ -1357,8 +1357,13 @@ pack_header = """\
> > import sys,os
> > from . import %s as const
> > from . import %s as types
> > -import xdrlib3 as xdrlib
> > -from xdrlib3 import Error as XDRError
> > +
> > +try:
> > + import xdrlib3 as xdrlib
> > + from xdrlib3 import Error as XDRError
> > +except:
> > + import xdrlib as xdrlib
> > + from xdrlib import Error as XDRError
> > class nullclass(object):
> > pass
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/1] Allow to fallback to xdrlib if xdrlib3 not available
2025-02-12 21:01 ` Petr Vorel
@ 2025-02-12 21:32 ` Calum Mackay
0 siblings, 0 replies; 9+ messages in thread
From: Calum Mackay @ 2025-02-12 21:32 UTC (permalink / raw)
To: Petr Vorel; +Cc: Calum Mackay, linux-nfs, Jeff Layton, Michael Moese
On 12/02/2025 9:01 pm, Petr Vorel wrote:
>> On 12/02/2025 1:23 pm, Petr Vorel wrote:
>>> On certain environments it might be difficult to install xdrlib3 via pip
>>> (e.g. python 3.11, which is a default on current Tumbleweed).
>
>>> Fixes: dfb0b07 ("Move to xdrlib3")
>>> Suggested-by: Michael Moese <mmoese@suse.com>
>>> Signed-off-by: Petr Vorel <pvorel@suse.cz>
>>> ---
>>> Hi,
>
>>> I admit it would be safer to check if python is really < 3.13.
>
>>> Kind regards,
>>> Petr
>
>>> README | 2 ++
>>> nfs4.0/lib/rpc/rpc.py | 6 +++++-
>>> nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py | 7 ++++++-
>>> nfs4.0/nfs4lib.py | 6 +++++-
>>> nfs4.0/nfs4server.py | 6 +++++-
>>> rpc/security.py | 6 +++++-
>>> xdr/xdrgen.py | 9 +++++++--
>>> 7 files changed, 35 insertions(+), 7 deletions(-)
>
>>> diff --git a/README b/README
>>> index 8c3ac27..d5214b4 100644
>>> --- a/README
>>> +++ b/README
>>> @@ -19,6 +19,8 @@ python3-standard-xdrlib) or you may install it via pip:
>>> pip install xdrlib3
>>> +If xdrlib3 is not available fallback to old xdrlib (useful for python < 3.13).
>
>> It sounds a little like the above is an instruction for the user; if you
>> don't mind I'll fix this up, adding "the code will fallback…", just to make
>> it obvious?
>
> Yes, please, fix it.
>
>> Thanks for the fix Petr, I'll get this in today.
>
> Thanks a lot for accepting this. FYI we test with pynfs also various SLES kernels
> (including very old ones), which obviously have older python3. Probably on all
> would xdrlib3 installation via pip+virtualenv worked, but safest way is to avoid
> it and use python stock xdrlib.
Applied.
thanks again, Petr.
cheers,
c.
>
> Kind regards,
> Petr
>
>> cheers,
>> c.
>
>
>
>>> +
>>> You can prepare both versions for use with
>>> ./setup.py build
>>> diff --git a/nfs4.0/lib/rpc/rpc.py b/nfs4.0/lib/rpc/rpc.py
>>> index 4751790..7a80241 100644
>>> --- a/nfs4.0/lib/rpc/rpc.py
>>> +++ b/nfs4.0/lib/rpc/rpc.py
>>> @@ -9,12 +9,16 @@
>>> from __future__ import absolute_import
>>> import struct
>>> -import xdrlib3 as xdrlib
>>> import socket
>>> import select
>>> import threading
>>> import errno
>>> +try:
>>> + import xdrlib3 as xdrlib
>>> +except:
>>> + import xdrlib
>>> +
>>> from rpc.rpc_const import *
>>> from rpc.rpc_type import *
>>> import rpc.rpc_pack as rpc_pack
>>> diff --git a/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py b/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
>>> index 2581a1e..41c6d54 100644
>>> --- a/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
>>> +++ b/nfs4.0/lib/rpc/rpcsec/sec_auth_sys.py
>>> @@ -1,7 +1,12 @@
>>> from .base import SecFlavor, SecError
>>> from rpc.rpc_const import AUTH_SYS
>>> from rpc.rpc_type import opaque_auth
>>> -from xdrlib3 import Packer, Error
>>> +import struct
>>> +
>>> +try:
>>> + from xdrlib3 import Packer, Error
>>> +except:
>>> + from xdrlib import Packer, Error
>>> class SecAuthSys(SecFlavor):
>>> # XXX need better defaults
>>> diff --git a/nfs4.0/nfs4lib.py b/nfs4.0/nfs4lib.py
>>> index 2337d8c..92b3c11 100644
>>> --- a/nfs4.0/nfs4lib.py
>>> +++ b/nfs4.0/nfs4lib.py
>>> @@ -41,9 +41,13 @@ import xdrdef.nfs4_const as nfs4_const
>>> from xdrdef.nfs4_const import *
>>> import xdrdef.nfs4_type as nfs4_type
>>> from xdrdef.nfs4_type import *
>>> -from xdrlib3 import Error as XDRError
>>> import xdrdef.nfs4_pack as nfs4_pack
>>> +try:
>>> + from xdrlib3 import Error as XDRError
>>> +except:
>>> + from xdrlib import Error as XDRError
>>> +
>>> import nfs_ops
>>> op4 = nfs_ops.NFS4ops()
>>> diff --git a/nfs4.0/nfs4server.py b/nfs4.0/nfs4server.py
>>> index 10bf28e..e26cecd 100755
>>> --- a/nfs4.0/nfs4server.py
>>> +++ b/nfs4.0/nfs4server.py
>>> @@ -34,7 +34,11 @@ import time, StringIO, random, traceback, codecs
>>> import StringIO
>>> import nfs4state
>>> from nfs4state import NFS4Error, printverf
>>> -from xdrlib3 import Error as XDRError
>>> +
>>> +try:
>>> + from xdrlib3 import Error as XDRError
>>> +except:
>>> + from xdrlib import Error as XDRError
>>> unacceptable_names = [ "", ".", ".." ]
>>> unacceptable_characters = [ "/", "~", "#", ]
>>> diff --git a/rpc/security.py b/rpc/security.py
>>> index 789280c..79e746b 100644
>>> --- a/rpc/security.py
>>> +++ b/rpc/security.py
>>> @@ -3,7 +3,6 @@ from .rpc_const import AUTH_NONE, AUTH_SYS, RPCSEC_GSS, SUCCESS, CALL, \
>>> from .rpc_type import opaque_auth, authsys_parms
>>> from .rpc_pack import RPCPacker, RPCUnpacker
>>> from .gss_pack import GSSPacker, GSSUnpacker
>>> -from xdrlib3 import Packer, Unpacker
>>> from . import rpclib
>>> from .gss_const import *
>>> from . import gss_type
>>> @@ -17,6 +16,11 @@ except ImportError:
>>> import threading
>>> import logging
>>> +try:
>>> + from xdrlib3 import Packer, Unpacker
>>> +except:
>>> + from xdrlib import Packer, Unpacker
>>> +
>>> log_gss = logging.getLogger("rpc.sec.gss")
>>> log_gss.setLevel(logging.INFO)
>>> diff --git a/xdr/xdrgen.py b/xdr/xdrgen.py
>>> index f802ba8..970ae9d 100755
>>> --- a/xdr/xdrgen.py
>>> +++ b/xdr/xdrgen.py
>>> @@ -1357,8 +1357,13 @@ pack_header = """\
>>> import sys,os
>>> from . import %s as const
>>> from . import %s as types
>>> -import xdrlib3 as xdrlib
>>> -from xdrlib3 import Error as XDRError
>>> +
>>> +try:
>>> + import xdrlib3 as xdrlib
>>> + from xdrlib3 import Error as XDRError
>>> +except:
>>> + import xdrlib as xdrlib
>>> + from xdrlib import Error as XDRError
>>> class nullclass(object):
>>> pass
>
>
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-02-12 21:32 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-12 13:23 [PATCH 1/1] Allow to fallback to xdrlib if xdrlib3 not available Petr Vorel
2025-02-12 13:27 ` [PATCH pynfs] " Petr Vorel
2025-02-12 13:36 ` [PATCH 1/1] " Jeff Layton
2025-02-12 13:47 ` Petr Vorel
2025-02-12 13:53 ` Jeff Layton
2025-02-12 15:41 ` Chuck Lever
2025-02-12 20:52 ` Calum Mackay
2025-02-12 21:01 ` Petr Vorel
2025-02-12 21:32 ` Calum Mackay
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox