From: Waldemar Kozaczuk <[email protected]>
Committer: Waldemar Kozaczuk <[email protected]>
Branch: master

scripts: migrate setup.py to python 3

The setup.py relies on platform.linux_distribution() to determine
linux distribution of the host. Python 3 has unfortunately deprecated
aforementioned method so in order to migrate to Python 3 this patch
changes setup.py to parse the same information from some standard files
located under /etc.

More specifically new setup.py tries to parse name and version
from /etc/os-release. If not found it falls back to /etc/lsb-release.

Signed-off-by: Waldemar Kozaczuk <[email protected]>

---
diff --git a/scripts/setup.py b/scripts/setup.py
--- a/scripts/setup.py
+++ b/scripts/setup.py
@@ -1,8 +1,8 @@
-#!/usr/bin/python2
+#!/usr/bin/python3
 
 # set up a development environment for OSv.  Run as root.
 
-import sys, platform, argparse
+import sys, argparse
 import subprocess
 
 standard_ec2_packages = ['python-pip', 'wget']
@@ -304,6 +304,27 @@ class LinuxMint_19(object):
 
     versions = [LinuxMint_18_03, LinuxMint_19]
 
+def linux_distribution():
+    def parse_file(f):
+        res = {}
+        for line in f:
+            k, v = line.rstrip().split('=')
+            res[k] = v.strip('"')
+        return res
+
+    try:
+        with open('/etc/os-release') as f:
+            info = parse_file(f)
+            return (info['NAME'], info['VERSION_ID'])
+    except FileNotFoundError:
+        try:
+            with open('/etc/lsb-release') as f:
+                info = parse_file(f)
+                return (info['DISTRIB_ID'], info['DISTRIB_RELEASE'])
+        except FileNotFoundError:
+            print('Could not find linux distribution file!')
+            return ('Unknown', 'Unknown')
+
 distros = [
            Debian(),
            Fedora(),
@@ -319,11 +340,11 @@ class LinuxMint_19(object):
                     help="install packages required by testing tools")
 cmdargs = parser.parse_args()
 
-(name, version, id) = platform.linux_distribution()
+(name, version) = linux_distribution()
 
 for distro in distros:
     if type(distro.name) == type([]):
-        dname = filter(lambda n: name.startswith(n), distro.name)
+        dname = [n for n in distro.name if name.startswith(n)]
         if len(dname):
             distro.name = dname[0]
         else:
@@ -349,5 +370,5 @@ class LinuxMint_19(object):
         print ('Your distribution %s version %s is not supported by this 
script' % (name, version))
         sys.exit(1)
 
-print 'Your distribution is not supported by this script.'
+print('Your distribution is not supported by this script.')
 sys.exit(2)

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/00000000000027553c059f19c069%40google.com.

Reply via email to