× NETGEAR will be terminating ReadyCLOUD service by July 1st, 2023. For more details click here.
Orbi WiFi 7 RBE973
Reply

ReadyNAS 104 [6.10.8] - Python 2.7 has disappeared

smst
Aspirant

ReadyNAS 104 [6.10.8] - Python 2.7 has disappeared

Hi all,

I have a ReadyNAS 104.  Last night I checked the dashboard and saw that firmware 6.10.8 was available to install, so I installed it.  One of my apps stopped working, and some command-line investigation tells me that the relevant .py file that launches the service uses /usr/bin/python .  That is a symlink to python2.7, which doesn't exist.  python2.6 does exist.

 

It looks like Python 2.6 was installed in 2013, and the symlink to 2.7 was installed in 2015.  My guess is that the firmware update removed Python 2.7 but didn't update the symlink to point back to 2.6, thereby breaking anything that used just 'python'.  I can update the symlinks if necessary, although I don't know if the app will run correctly (I can look into that on the app's site) -- but my question is: what happened to 2.7?  I know it's out of support, but why would a firmware update remove it but leave the older 2.6?

 

I did try installing 2.7 with 'apt-get install python2.7' (as root) and got this output:

 

Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
cups : Depends: libcups2 (= 1.7.5-11+deb8u8) but 1.7.5-11+deb8u6 is to be installed
cups-client : Depends: libcups2 (= 1.7.5-11+deb8u8) but 1.7.5-11+deb8u6 is to be installed
cups-core-drivers : Depends: libcups2 (= 1.7.5-11+deb8u8) but 1.7.5-11+deb8u6 is to be installed
cups-daemon : Depends: libcups2 (= 1.7.5-11+deb8u8) but 1.7.5-11+deb8u6 is to be installed
libcupscgi1 : Depends: libcups2 (= 1.7.5-11+deb8u8) but 1.7.5-11+deb8u6 is to be installed
libcupsimage2 : Depends: libcups2 (= 1.7.5-11+deb8u8) but 1.7.5-11+deb8u6 is to be installed
libcupsmime1 : Depends: libcups2 (= 1.7.5-11+deb8u8) but 1.7.5-11+deb8u6 is to be installed
libcupsppdc1 : Depends: libcups2 (= 1.7.5-11+deb8u8) but 1.7.5-11+deb8u6 is to be installed
libpython2.7-stdlib : Depends: libpython2.7-minimal (= 2.7.9-2+deb8u5) but it is not going to be installed
python-minimal : Depends: python2.7-minimal (>= 2.7.9-1~) but it is not going to be installed
python2.7 : Depends: python2.7-minimal (= 2.7.9-2+deb8u5) but it is not going to be installed
systemd-cron : Conflicts: cron-daemon
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

I'm wary of following the advice there because it looks like it wants to downgrade some things.  However those things are mostly cups, which I may have installed myself (a few years ago I was experimenting with using the 104 as a print server after Canon stopped supporting Google Cloud Print).

 

So a follow-up: is cups installed as part of the usual firmware?  If not, I could just remove it and be more likely to be able to install Python 2.7.

 

Thanks,

Steve

Message 1 of 10
smst
Aspirant

Re: ReadyNAS 104 [6.10.8] - Python 2.7 has disappeared

Update on the app: I've found that for the version I have, it requires Python 2.7 and above.  So I can't just switch to running under 2.6.

 

PS I tried adding the 104 to this post with the "Associated Products" field, but I can't seem to make it show me any NAS products at all.

Message 2 of 10
StephenB
Guru

Re: ReadyNAS 104 [6.10.8] - Python 2.7 has disappeared


@smst wrote:

 

So a follow-up: is cups installed as part of the usual firmware? 


This is what I see when I look in my own OS partition:

find . *cups* | grep -i cups
./usr/lib/x86_64-linux-gnu/libcups.so.2
./usr/lib/cups
./usr/lib/cups/backend
./usr/lib/cups/backend/smb
./var/lib/dpkg/info/libcups2:amd64.list
./var/lib/dpkg/info/libcups2:amd64.symbols
./var/lib/dpkg/info/libcups2:amd64.shlibs
./var/lib/dpkg/info/libcups2:amd64.postrm

 

Message 3 of 10
smst
Aspirant

Re: ReadyNAS 104 [6.10.8] - Python 2.7 has disappeared

I have a lot more than that, even in /usr/lib, which makes me think I have in fact installed some extras at some point.  Since I'm not using the NAS as a print server anyway, I wonder if I should just force the apt-get to update everything then -- it doesn't matter to me if cups breaks, as long as it isn't going to matter to some app that thinks it needs cups to work.

 

Thanks for the reply -- would you be able to check what you have in terms of /usr/bin/python* please?

Message 4 of 10
StephenB
Guru

Re: ReadyNAS 104 [6.10.8] - Python 2.7 has disappeared


@smst wrote:

 

Thanks for the reply -- would you be able to check what you have in terms of /usr/bin/python* please?


 

root@NAS:~# ls -als /usr/bin/python*
4 lrwxrwxrwx 1 root root 9 Mar 16  2015 /usr/bin/python -> python2.7
4 lrwxrwxrwx 1 root root 9 Mar 16  2015 /usr/bin/python2 -> python2.7
root@NAS:~#
# ls /usr/lib/python2.7
_abcoll.pyc         dircache.pyc         _LWPCookieJar.pyc      pstats.py               sunau.py
abc.pyc             dis.pyc              macpath.py             pstats.pyc              sunau.pyc
aifc.py             dist-packages        macpath.pyc            pty.py                  symbol.py
aifc.pyc            distutils            macurl2path.py         pty.pyc                 symbol.pyc
antigravity.py      doctest.py           macurl2path.pyc        pyclbr.py               symtable.py
antigravity.pyc     doctest.pyc          mailbox.py             pyclbr.pyc              symtable.pyc
anydbm.py           DocXMLRPCServer.py   mailbox.pyc            py_compile.pyc          _sysconfigdata.pyc
anydbm.pyc          DocXMLRPCServer.pyc  mailcap.py             pydoc_data              sysconfig.pyc
argparse.egg-info   dumbdbm.py           mailcap.pyc            pydoc.py                tabnanny.py
argparse.py         dumbdbm.pyc          markupbase.py          pydoc.pyc               tabnanny.pyc
argparse.pyc        dummy_threading.py   markupbase.pyc         _pyio.py                tarfile.py
ast.py              dummy_threading.pyc  md5.pyc                _pyio.pyc               tarfile.pyc
ast.pyc             dummy_thread.py      mhlib.py               Queue.py                telnetlib.py
asynchat.py         dummy_thread.pyc     mhlib.pyc              Queue.pyc               telnetlib.pyc
asynchat.pyc        email                mimetools.py           quopri.py               tempfile.pyc
asyncore.py         encodings            mimetools.pyc          quopri.pyc              test
asyncore.pyc        ensurepip            mimetypes.py           random.pyc              textwrap.pyc
atexit.pyc          filecmp.py           mimetypes.pyc          repr.pyc                this.py
audiodev.py         filecmp.pyc          MimeWriter.py          re.pyc                  this.pyc
audiodev.pyc        fileinput.py         MimeWriter.pyc         rexec.py                _threading_local.py
base64.pyc          fileinput.pyc        mimify.py              rexec.pyc               _threading_local.pyc
BaseHTTPServer.py   fnmatch.pyc          mimify.pyc             rfc822.py               threading.py
BaseHTTPServer.pyc  formatter.py         modulefinder.py        rfc822.pyc              threading.pyc
Bastion.py          formatter.pyc        modulefinder.pyc       rlcompleter.py          timeit.py
Bastion.pyc         fpformat.py          _MozillaCookieJar.py   rlcompleter.pyc         timeit.pyc
bdb.py              fpformat.pyc         _MozillaCookieJar.pyc  robotparser.py          toaiff.py
bdb.pyc             fractions.py         multifile.py           robotparser.pyc         toaiff.pyc
binhex.py           fractions.pyc        multifile.pyc          runpy.pyc               tokenize.pyc
binhex.pyc          ftplib.py            multiprocessing        sched.py                token.pyc
bisect.pyc          ftplib.pyc           mutex.py               sched.pyc               traceback.pyc
bsddb               functools.pyc        mutex.pyc              sets.py                 trace.py
calendar.pyc        __future__.pyc       netrc.py               sets.pyc                trace.pyc
CGIHTTPServer.py    genericpath.pyc      netrc.pyc              sgmllib.py              tty.py
CGIHTTPServer.pyc   getopt.pyc           new.py                 sgmllib.pyc             tty.pyc
cgi.py              getpass.py           new.pyc                sha.pyc                 types.pyc
cgi.pyc             getpass.pyc          nntplib.py             shelve.py               unittest
cgitb.py            gettext.py           nntplib.pyc            shelve.pyc              urllib2.py
cgitb.pyc           gettext.pyc          ntpath.py              shlex.py                urllib2.pyc
chunk.py            glob.pyc             ntpath.pyc             shlex.pyc               urllib.py
chunk.pyc           gzip.py              nturl2path.py          shutil.pyc              urllib.pyc
cmd.py              gzip.pyc             nturl2path.pyc         SimpleHTTPServer.py     urlparse.py
cmd.pyc             hashlib.pyc          numbers.py             SimpleHTTPServer.pyc    urlparse.pyc
codecs.pyc          heapq.pyc            numbers.pyc            SimpleXMLRPCServer.py   UserDict.pyc
codeop.py           hmac.py              opcode.pyc             SimpleXMLRPCServer.pyc  UserList.py
codeop.pyc          hmac.pyc             optparse.pyc           sitecustomize.pyc       UserList.pyc
code.py             hotshot              os2emxpath.py          site.pyc                user.py
code.pyc            htmlentitydefs.py    os2emxpath.pyc         smtpd.py                user.pyc
collections.pyc     htmlentitydefs.pyc   os.pyc                 smtpd.pyc               UserString.py
colorsys.py         htmllib.py           _osx_support.py        smtplib.py              UserString.pyc
colorsys.pyc        htmllib.pyc          _osx_support.pyc       smtplib.pyc             uuid.py
commands.py         HTMLParser.py        pdb.doc                sndhdr.py               uuid.pyc
commands.pyc        HTMLParser.pyc       pdb.py                 sndhdr.pyc              uu.py
compileall.pyc      httplib.py           pdb.pyc                socket.pyc              uu.pyc
compiler            httplib.pyc          __phello__.foo.py      SocketServer.py         warnings.pyc
ConfigParser.pyc    ihooks.py            __phello__.foo.pyc     SocketServer.pyc        wave.py
contextlib.pyc      ihooks.pyc           pickle.pyc             sqlite3                 wave.pyc
cookielib.py        imaplib.py           pickletools.py         sre_compile.pyc         weakref.pyc
cookielib.pyc       imaplib.pyc          pickletools.pyc        sre_constants.pyc       _weakrefset.pyc
Cookie.py           imghdr.py            pipes.py               sre_parse.pyc           webbrowser.py
Cookie.pyc          imghdr.pyc           pipes.pyc              sre.pyc                 webbrowser.pyc
copy.pyc            importlib            pkgutil.pyc            ssl.pyc                 whichdb.py
copy_reg.pyc        imputil.py           platform.pyc           stat.pyc                whichdb.pyc
cProfile.py         imputil.pyc          plat-x86_64-linux-gnu  statvfs.py              wsgiref
cProfile.pyc        inspect.pyc          plistlib.py            statvfs.pyc             wsgiref.egg-info
csv.py              io.pyc               plistlib.pyc           StringIO.pyc            xdrlib.py
csv.pyc             json                 popen2.pyc             stringold.py            xdrlib.pyc
ctypes              keyword.pyc          poplib.py              stringold.pyc           xml
curses              lib2to3              poplib.pyc             stringprep.pyc          xmllib.py
dbhash.py           lib-dynload          posixfile.py           string.pyc              xmllib.pyc
dbhash.pyc          lib-tk               posixfile.pyc          _strptime.py            xmlrpclib.py
decimal.py          LICENSE.txt          posixpath.pyc          _strptime.pyc           xmlrpclib.pyc
decimal.pyc         linecache.pyc        pprint.py              struct.pyc              zipfile.py
difflib.py          locale.pyc           pprint.pyc             subprocess.pyc          zipfile.pyc
difflib.pyc         logging              profile.py             sunaudio.py
dircache.py         _LWPCookieJar.py     profile.pyc            sunaudio.pyc

I am running 6.10.9.  Though I never explicitly installed python, I did install plex a long time ago - which does include python2.7  I might not have installed plex on one of my backup NAS - I'll check when I have a chance and I'll follow up..

 

Message 5 of 10
StephenB
Guru

Re: ReadyNAS 104 [6.10.8] - Python 2.7 has disappeared

Definitely due to plex.  My backup Pro 6 NAS doesn't have Plex installed, and just has this:

root@PRO:~# ls -als /usr/lib/python2.7
total 0
0 drwxr-xr-x 1 root root   26 Aug 27  2018 .
0 drwxr-xr-x 1 root root 1680 Jun  4 15:11 ..
0 drwxr-xr-x 1 root root   20 Jun  4 15:10 dist-packages

 

Message 6 of 10
Sandshark
Sensei

Re: ReadyNAS 104 [6.10.8] - Python 2.7 has disappeared


@smst wrote:

Since I'm not using the NAS as a print server anyway, I wonder if I should just force the apt-get to update everything then -- it doesn't matter to me if cups breaks, as long as it isn't going to matter to some app that thinks it needs cups to work.

 


If you mean doing an apt-get upgrade, then absolutely not.  That will break a whole lot more (assuming you've already dealt with the Debian 8 repository being archived, so it works at all).

Message 7 of 10
smst
Aspirant

Re: ReadyNAS 104 [6.10.8] - Python 2.7 has disappeared

I didn't, but I appreciate the warning.  I mean that apt says in its error output that I could run:

apt-get -f install

to make the python2.7 install run.  I just want Python 2.7 back, to be able to run an app that relies on it.  (As I said, I don't get why a firmware update would remove python2.7 but leave python2.6.)

Message 8 of 10
smst
Aspirant

Re: ReadyNAS 104 [6.10.8] - Python 2.7 has disappeared

I have decided to simply build Python 2.7 from source, and have now discovered that there's no 'make' here!  Before I go looking for how to install that, I'd like to check here again: is there a ReadyNAS-specific solution here, perhaps a NetGear repo where I can get a working 'make'?

Message 9 of 10
smst
Aspirant

Re: ReadyNAS 104 [6.10.8] - Python 2.7 has disappeared

Building from source didn't work, but I did get some success in the end.

 

I had misinterpreted the apt-get error message.  I'd run apt-get install python2.7 and apt-get told me to run apt-get -f install to fix the installation -- but I thought it meant to run apt-get -f install python2.7 (ie just to insert a -f option with my existing args).  So that didn't do anything.  Running the actual command it printed, without any package names, caused it to clean up cups and so on, and then I was able to install Python 2.7 again.  (I did muck around with repo sources before hitting upon the right answer and I don't know to what extent that was necessary in the end.)

 

So my app is running again, but with one problem: openssl doesn't like a particular website that the app wants to use, which is related to the expiry of Let's Encrypt's X3 certificate.  I saw this before, some years back, and was able to fix it by disabling the expired cert at my end (so openssl fell back to a different root that had cross-signed, I think), but that solution no longer works.  I'm not sure why it's stopped working in fact, but I assume the firmware update did it.

 

For now I've been able to disable SSL checking in the app, which isn't ideal but will do to get things working again until I can figure out the cert problem; if I need help with that, I'll make a new post.

 

Thanks to all who chipped in with ideas!

Message 10 of 10
Top Contributors
Discussion stats
  • 9 replies
  • 1023 views
  • 0 kudos
  • 3 in conversation
Announcements