References #743

Signed-off-by: Waldemar Kozaczuk <[email protected]>
---
 scripts/setup.py | 40 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/scripts/setup.py b/scripts/setup.py
index db831f0f..946d1e4e 100755
--- a/scripts/setup.py
+++ b/scripts/setup.py
@@ -3,7 +3,7 @@
 # set up a development environment for OSv.  Run as root.
 
 import sys, argparse
-import subprocess
+import subprocess, os
 
 standard_ec2_packages = ['python-pip', 'wget']
 standard_ec2_post_install = ['pip install awscli &&'
@@ -64,6 +64,40 @@ class Fedora(object):
     test_packages = ['openssl-devel']
     ec2_post_install = standard_ec2_post_install
 
+    def aarch64_download(self, version):
+        gcc_packages = ['gcc',
+                        'glibc',
+                        'glibc-devel',
+                        'libgcc',
+                        'libstdc++',
+                        'libstdc++-devel',
+                        'libstdc++-static']
+        boost_packages = ['boost-devel',
+                          'boost-static',
+                          'boost-system']
+        osv_root = os.path.join(os.path.dirname(os.path.abspath(__file__)), 
'..')
+        script_path = '%s/scripts/download_rpm_package.sh' % osv_root
+        destination = '%s/downloaded_packages/aarch64' % osv_root
+        ##
+        # The setup.py is typically run as root to allow yum properly install 
packages
+        # This however would cause all files downloaded to 
downloaded_packages/aarch64 directory
+        # get created and owned by the root user which in most cases is not 
desirable
+        # To prevent that let us compare current process user id with the 
owner id of osv root
+        # directory and if different run all download command with the same 
user as the one owning
+        # the root directory
+        current_user_id = os.getuid()
+        osv_root_owner_id = os.stat(osv_root).st_uid
+        if current_user_id != osv_root_owner_id and current_user_id == 0:
+            command_prefix = "sudo -u '#%d'" % osv_root_owner_id # Most likely 
setup.py is run by root so let us use sudo
+        else:
+            command_prefix = ''
+
+        install_commands = ['%s %s %s %s %s/gcc' % (command_prefix, 
script_path, package, version, destination) for package in gcc_packages]
+        install_commands += ['%s %s %s %s %s/boost' % (command_prefix, 
script_path, package, version, destination) for package in boost_packages]
+        install_commands = ['%s rm -rf %s/gcc/install' % (command_prefix, 
destination),
+                            '%s rm -rf %s/boost/install' % (command_prefix, 
destination)] + install_commands
+        return ' && '.join(install_commands)
+
     class Fedora_25(object):
         packages = ['java-1.8.0-openjdk', 'python2-requests', 'openssl-devel', 
'lua-5.3.*', 'lua-devel-5.3.*']
         ec2_packages = []
@@ -361,6 +395,10 @@ for distro in distros:
                 if cmdargs.test:
                     pkg += distro.test_packages + dver.test_packages
                 subprocess.check_call(distro.install + ' ' + str.join(' ', 
pkg), shell=True)
+                if 'aarch64_download' in dir(distro):
+                    print('Downloading aarch64 packages to cross-compile ARM 
version ...')
+                    
subprocess.check_call(distro.aarch64_download(dver.version), shell=True)
+                    print('Downloaded all aarch64 packages!')
                 if cmdargs.ec2:
                     if distro.ec2_post_install:
                         subprocess.check_call(distro.ec2_post_install, 
shell=True)
-- 
2.20.1

-- 
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/20200225055252.6672-2-jwkozaczuk%40gmail.com.

Reply via email to