Skip to content

Instantly share code, notes, and snippets.

@darkarnium
Created November 15, 2020 20:16
Show Gist options
  • Save darkarnium/3ea2f46578e70655b4146596a3074f30 to your computer and use it in GitHub Desktop.
Save darkarnium/3ea2f46578e70655b4146596a3074f30 to your computer and use it in GitHub Desktop.
[PATCH] OpenNetworkLinux on Ubuntu 20.04.1 LTS

Overview

This patch allows the current ONL master branch (ref. 1537d833) to build on Ubuntu 20.04.1. Without this patch, the following error is observed while building using the docker/tools/onlbuilder environment when targetting armel:

INFO:onlrfs:dpkg-configure filesystem...
DEBUG:onlrfs:Executing:sudo chroot jessie/rootfs-armel.d /tmp/configure.sh
chroot: failed to run command '/tmp/configure.sh': No such file or directory

This patch was created and confirmed working against:

darkarnium@io:~/src/OpenNetworkLinux$ git rev-parse HEAD
1537d8334d5fc9364f1ce6a44e26eb247e42f2e6

diff --git a/docker/tools/onlbuilder b/docker/tools/onlbuilder
index 834159c..3fbff75 100755
--- a/docker/tools/onlbuilder
+++ b/docker/tools/onlbuilder
@@ -171,7 +171,7 @@ else:
g_arg_d['volume_options'] = " ".join( [ " -v %s:%s " % (v, v) for v in ops.volumes ] )
- g_docker_arguments = "docker run --privileged %(interactive)s -t -e DOCKER_IMAGE=%(image)s --name %(name)s %(ssh_options)s %(volume_options)s " % g_arg_d
+ g_docker_arguments = "docker run --privileged %(interactive)s --pid=host -t -e DOCKER_IMAGE=%(image)s --name %(name)s %(ssh_options)s %(volume_options)s " % g_arg_d
if ops.isolate is not None:
if len(ops.isolate) is 0:
diff --git a/packages/base/any/initrds/buildroot/builds/buildroot-mirror b/packages/base/any/initrds/buildroot/builds/buildroot-mirror
--- a/packages/base/any/initrds/buildroot/builds/buildroot-mirror
+++ b/packages/base/any/initrds/buildroot/builds/buildroot-mirror
@@ -1 +1 @@
-Subproject commit 6cc2e32d3b0dc632dbf04b829abfacc7f5d62401
+Subproject commit 6cc2e32d3b0dc632dbf04b829abfacc7f5d62401-dirty
diff --git a/tools/onlrfs.py b/tools/onlrfs.py
index a9a4cb5..0563365 100755
--- a/tools/onlrfs.py
+++ b/tools/onlrfs.py
@@ -258,6 +258,7 @@ class OnlRfsContext(object):
self.directory = directory
self.dev = os.path.join(self.directory, "dev")
self.proc = os.path.join(self.directory, "proc")
+ self.proc_sys = os.path.join(self.directory, "proc/sys/fs/binfmt_misc")
self.rc = resolvconf
if self.rc:
self.resolvconf = os.path.join(self.directory, "etc", "resolv.conf")
@@ -272,6 +273,8 @@ class OnlRfsContext(object):
ex=OnlRfsError("Could not mount dev in rfs."))
onlu.execute("sudo mount -t proc proc %s" % self.proc,
ex=OnlRfsError("Could not mount proc in rfs."))
+ onlu.execute("sudo mount binfmt_misc -t binfmt_misc %s" % self.proc_sys,
+ ex=OnlRfsError("Could not mount binfmt_misc in rfs."))
if self.rc:
if self.exists(self.resolvconf):
@@ -386,6 +389,8 @@ class OnlRfsBuilder(object):
onlu.execute('sudo cp %s %s' % (self.QEMU_PPC, os.path.join(dir_, 'usr/bin')))
if self.arch in [ 'armel', 'armhf' ]:
onlu.execute('sudo cp %s %s' % (self.QEMU_ARM, os.path.join(dir_, 'usr/bin')))
+ onlu.execute('sudo cp %s %s' % (self.QEMU_ARM, os.path.join(dir_, 'usr/bin/qemu-arm')))
+
if self.arch == 'arm64':
onlu.execute('sudo cp %s %s' % (self.QEMU_ARM64, os.path.join(dir_, 'usr/bin')))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment