PYNQ: PYTHON PRODUCTIVITY

Pynq sdbuild fails with 'Temporary failure in name resolution'

When trying to build the pynq image for Ultra96, I get the error:

make[1]: Leaving directory '/root/libcma'
+ rm /sdbuild/pynq/sdbuild/build/bionic.aarch64/qemu.sh
+ '[' -e /sdbuild/pynq/sdbuild/packages/libsds/post.sh ']'
+ for p in '$@'
+ '[' -n '' -a -e /python_packages_bionic ']'
+ f=/sdbuild/pynq/sdbuild/packages/python_packages_bionic
+ '[' -e /sdbuild/pynq/sdbuild/packages/python_packages_bionic/pre.sh ']'
+ '[' -e /sdbuild/pynq/sdbuild/packages/python_packages_bionic/qemu.sh ']'
+ cp /sdbuild/pynq/sdbuild/packages/python_packages_bionic/qemu.sh /sdbuild/pynq/sdbuild/build/bionic.aarch64
+ sudo -E chroot /sdbuild/pynq/sdbuild/build/bionic.aarch64 bash qemu.sh
+ set -e
+ cat
+ python3.6 -m pip install -r requirements.txt
Collecting Click==7.0 (from -r requirements.txt (line 1))
Exception:
Traceback (most recent call last):
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connection.py", line 138, in _new_conn
    (self.host, self.port), self.timeout, **extra_kw)
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/util/connection.py", line 75, in create_connection
    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
  File "/usr/lib/python3.6/socket.py", line 745, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 594, in urlopen
    chunked=chunked)
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 350, in _make_request
    self._validate_conn(conn)
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 837, in _validate_conn
    conn.connect()
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connection.py", line 281, in connect
    conn = self._new_conn()
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connection.py", line 147, in _new_conn
    self, "Failed to establish a new connection: %s" % e)
requests.packages.urllib3.exceptions.NewConnectionError: <requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x4005de6a20>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/usr/lib/python3/dist-packages/pip/commands/install.py", line 353, in run
    wb.build(autobuilding=True)
  File "/usr/lib/python3/dist-packages/pip/wheel.py", line 749, in build
    self.requirement_set.prepare_files(self.finder)
  File "/usr/lib/python3/dist-packages/pip/req/req_set.py", line 380, in prepare_files
    ignore_dependencies=self.ignore_dependencies))
  File "/usr/lib/python3/dist-packages/pip/req/req_set.py", line 554, in _prepare_file
    require_hashes
  File "/usr/lib/python3/dist-packages/pip/req/req_install.py", line 278, in populate_link
    self.link = finder.find_requirement(self, upgrade)
  File "/usr/lib/python3/dist-packages/pip/index.py", line 465, in find_requirement
    all_candidates = self.find_all_candidates(req.name)
  File "/usr/lib/python3/dist-packages/pip/index.py", line 423, in find_all_candidates
    for page in self._get_pages(url_locations, project_name):
  File "/usr/lib/python3/dist-packages/pip/index.py", line 568, in _get_pages
    page = self._get_page(location)
  File "/usr/lib/python3/dist-packages/pip/index.py", line 683, in _get_page
    return HTMLPage.get_page(link, session=self.session)
  File "/usr/lib/python3/dist-packages/pip/index.py", line 792, in get_page
    "Cache-Control": "max-age=600",
  File "/usr/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/sessions.py", line 501, in get
    return self.request('GET', url, **kwargs)
  File "/usr/lib/python3/dist-packages/pip/download.py", line 386, in request
    return super(PipSession, self).request(method, url, *args, **kwargs)
  File "/usr/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl/cachecontrol/adapter.py", line 47, in send
    resp = super(CacheControlAdapter, self).send(request, **kw)
  File "/usr/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/adapters.py", line 423, in send
    timeout=timeout
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 643, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/util/retry.py", line 315, in increment
    total -= 1
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
+ unmount_special
+ for fs in '$fss'
+ sudo umount -l /sdbuild/pynq/sdbuild/build/bionic.aarch64/proc
+ for fs in '$fss'
+ sudo umount -l /sdbuild/pynq/sdbuild/build/bionic.aarch64/run
+ for fs in '$fss'
+ sudo umount -l /sdbuild/pynq/sdbuild/build/bionic.aarch64/dev
+ sudo umount -l /sdbuild/pynq/sdbuild/build/bionic.aarch64/ccache
+ rmdir /sdbuild/pynq/sdbuild/build/bionic.aarch64/ccache
Makefile:325: recipe for target '/sdbuild/pynq/sdbuild/build/bionic.aarch64.stage2.img' failed
make: *** [/sdbuild/pynq/sdbuild/build/bionic.aarch64.stage2.img] Error 2

I am using the Xenial vagrant file, I am trying to build for Ultra96, and I am on branch master of Pynq

Looks like an internet problem. Can you try to see if you have a working internet from your VM? Also, have you restarted VM by vagrant reload xenial?

yes the vm has internet, it made it through all the steps up until this point (including multistrap which downloads 1000 packages).
I had just restarted the vm when I ran into this issue, but I will try again.

if i chroot and run qemu.sh myself, it seems to work just fine.

Which branch are you working on? Can you try the master branch of the main repo (basically do vagrant destroy to destroy your old VM and then vagrant up xenial)?

To reduce the build time when making images, use

make PYNQ_SDIST=<path to sdist.tar.gz> BOARDDIR=<path to ultra96 board directory>

with the sdist file: https://github.com/Xilinx/PYNQ/releases/download/v2.5/pynq-2.5.tar.gz

I was already on the master branch. I had made some changes to the kernel bootargs and kernel build parameters for petalinux, but I will try resetting those and recreating my vagrant machine just in case, I will also use that sdist file and report back with results.

This works.
now what should I edit if I want to add some kernel build parameters and kernel bootargs?

I was doing it by creating a new cfg file in sdbuild/boot/meta-pynq/recipes-kernel/linux/linux-xlnx/ and then adding that file to boot/meta-pynq/recipes-kernel/linux/linux-xlnx_%.bbappend
Bootargs I had added to sdbuild/boot/meta-pynq/recipes-bsp/device-tree/files/pynq_bootargs.dtsi

If I do a

make PYNQ_SDIST=<path to sdist.tar.gz> BOARDDIR=<path to ultra96 board directory>

will this still apply the kernel params and bootargs? Should I be putting these changes somewhere else?

This can be working, but you are changing the bsp configurations for all the boards. If you only need this to be applied to a specific board, try to add those recipes into the board bsp (of your board dir), somewhere like:

I will try this and report back. Thanks

FWIW, I’m having the same problem. Using the v2.5.3 branch, on a 16.04 build host. Building for a ZCU111, and it fails in the exact same place, with the same error.

And yes, the internet connectivity from that VM is fine. And as an additional data point, PYNQ v2.4 on the same host builds just fine too.

Further investigation shows that the chroot has /etc/resolv.conf as a dangling symlink, pointing at a file that does not exist. (/run/systemd/resolv/stub-resolv.conf)

It’s not clear what’s supposed to create/maintain this file in the chroot context…

Hi, thanks. This is a known issue:

Run the following on your host before running make:

sudo mkdir -p /run/systemd/resolve
sudo cp -L /etc/resolv.conf /run/systemd/resolve/stub-resolv.conf

as in https://github.com/Xilinx/PYNQ/blob/master/sdbuild/scripts/setup_host.sh#L138

For image v2.5, we have a couple of new requirements added, so it would probably be better to rerun setup_host.sh before you run the make.

since /run is typically a ramdisk and is not persistent, this means users will have to potentially run setup_host after every system reboot.

This change should be moved into the makefile instead.