PYNQ image v3.1 for Pynq-Z1: build fails during RootFS (multistrap ubuntu-keyring error)

Hi all,

I’m trying to generate a PYNQ image v3.1 for the Pynq-Z1 using Docker. In the future I’ll target a different custom board.

I followed this tutorial: https://pynq.readthedocs.io/en/latest/pynq_sd_card.html

Host setup

  • Host: WSL Ubuntu 22.04 LTS
  • Tools installed: Vitis, Vivado, Petalinux 2024.1

Docker: build and run

Repository and build:

git clone --recursive https://github.com/Xilinx/PYNQ.git PYNQ
cd PYNQ/sdbuild
docker build \
  --build-arg USERNAME=$(whoami) \
  --build-arg USER_UID=$(id -u) \
  --build-arg USER_GID=$(id -g) \
  -t pynqdock:latest .

Run container:

docker run --init --rm -it \
  -v /tools/Xilinx:/tools/Xilinx \
  -v /home/xilinx/petalinux_projects:/home/xilinx/petalinux_projects \
  --name pynq-sdbuild-env \
  --privileged pynqdock:latest /bin/bash

Build output (hardware/XSA)

INFO: [Project 1-1941] Successfully created Hardware Platform: /home/xilinx/petalinux_projects/PYNQ/sdbuild/build/Pynq-Z1/petalinux_bsp/hardware_project/pynqz1.xsa
INFO: [Hsi 55-2053] elapsed time for repository (/tools/Xilinx/Vivado/2024.1/data/embeddedsw) loading 0 seconds
INFO: [Vivado 12-12082] Found metadata file: xsa.json
INFO: [Vivado 12-6078] Validating platform properties...
INFO: [Vivado 12-6079] Validating unified platform...
INFO: [Vivado 12-6073] Validating 'pre_synth' platform state...
INFO: [Vivado 12-6077] Validating platform files...
INFO: [Vivado 12-6066] Finished running validate_hw_platform for file: './pynqz1.xsa'
INFO: [Common 17-206] Exiting Vivado at Mon Aug 11 09:59:05 2025...
Built pynqz1 successfully!

Build output (boot image)

[INFO] Successfully built bootloader
cd /home/xilinx/petalinux_projects/PYNQ/sdbuild/output/boot/Pynq-Z1 && petalinux-package --boot --fpga  /home/xilinx/petalinux_projects/PYNQ/sdbuild/../boards/Pynq-Z1/base/base.bit --u-boot -p /home/xilinx/petalinux_projects/PYNQ/sdbuild/build/Pynq-Z1/petalinux_project --force
[NOTE] Argument: "--boot" has been deprecated. It is recommended to start using new python command line Argument.
[NOTE] Use: petalinux-package boot [OPTIONS]
[INFO] File in BOOT BIN: "/home/xilinx/petalinux_projects/PYNQ/sdbuild/build/Pynq-Z1/petalinux_project/images/linux/zynq_fsbl.elf"
[INFO] File in BOOT BIN: "/home/xilinx/petalinux_projects/PYNQ/sdbuild/build/Pynq-Z1/petalinux_project/images/linux/u-boot.elf"
[INFO] File in BOOT BIN: "/home/xilinx/petalinux_projects/PYNQ/sdbuild/build/Pynq-Z1/petalinux_project/images/linux/system.dtb"
[INFO] Generating zynq binary package BOOT.BIN...
[INFO]
****** Bootgen v2024.1
  **** Build date : Apr 29 2024-12:18:25
    ** Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
    ** Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved.
[INFO]   : Bootimage generated successfully

Failure during RootFS generation

At some point (I believe during RootFS generation), it fails:

cp -f /home/xilinx/petalinux_projects/PYNQ/sdbuild/build/Pynq-Z1/petalinux_project/images/linux/BOOT.BIN /home/xilinx/petalinux_projects/PYNQ/sdbuild/output/boot/Pynq-Z1
PYNQ_BOARDNAME=Pynq-Z1 FPGA_MANAGER=1 petalinux-build -c u-boot-xlnx-scr -p /home/xilinx/petalinux_projects/PYNQ/sdbuild/build/Pynq-Z1/petalinux_project
[INFO] Building u-boot-xlnx-scr
...
NOTE: Tasks Summary: Attempted 789 tasks of which 771 didn't need to be rerun and all succeeded.
[INFO] Failed to copy built images to tftp dir: /tftpboot
[INFO] Successfully built u-boot-xlnx-scr
cp -f /home/xilinx/petalinux_projects/PYNQ/sdbuild/build/Pynq-Z1/petalinux_project/images/linux/boot.scr /home/xilinx/petalinux_projects/PYNQ/sdbuild/output/boot/Pynq-Z1/boot.scr
mkdir -p /home/xilinx/petalinux_projects/PYNQ/sdbuild/ccache
sudo rm -rf /home/xilinx/petalinux_projects/PYNQ/sdbuild/build/jammy.arm
mkdir /home/xilinx/petalinux_projects/PYNQ/sdbuild/build/jammy.arm
QEMU_EXE=/opt/qemu/bin/qemu-arm-static PYNQ_BOARD=Unknown ARCH=arm PYNQ_SDIST=/home/xilinx/petalinux_projects/PYNQ/sdbuild/prebuilt/pynq_sdist.tar.gz PYNQ_ROOTFS=/home/xilinx/petalinux_projects/PYNQ/sdbuild/prebuilt/pynq_rootfs.arm.tar.gz /home/xilinx/petalinux_projects/PYNQ/sdbuild/scripts/create_rootfs.sh /home/xilinx/petalinux_projects/PYNQ/sdbuild/build/jammy.arm /home/xilinx/petalinux_projects/PYNQ/sdbuild/ubuntu/jammy/arm
+ set -e
+ target=/home/xilinx/petalinux_projects/PYNQ/sdbuild/build/jammy.arm
+ SRCDIR=/home/xilinx/petalinux_projects/PYNQ/sdbuild/ubuntu/jammy/arm
+ ARCH=
+ fss='proc dev sys'
+ echo /opt/qemu/bin/qemu-arm-static
/opt/qemu/bin/qemu-arm-static
+ multistrap_conf=/home/xilinx/petalinux_projects/PYNQ/sdbuild/ubuntu/jammy/arm/multistrap.config
+ multistrap_opt=
+ '[' -n '' ']'
+ sudo -E multistrap -f /home/xilinx/petalinux_projects/PYNQ/sdbuild/ubuntu/jammy/arm/multistrap.config -d /home/xilinx/petalinux_projects/PYNQ/sdbuild/build/jammy.arm
multistrap 2.2.11 using /home/xilinx/petalinux_projects/PYNQ/sdbuild/ubuntu/jammy/arm/multistrap.config
multistrap 2.2.11 using /home/xilinx/petalinux_projects/PYNQ/sdbuild/ubuntu/jammy/arm/multistrap.config
Using foreign architecture: armhf
multistrap building armhf multistrap on 'amd64'
I: Setting /home/xilinx/petalinux_projects/PYNQ/sdbuild/build/jammy.arm/lib64 -> /home/xilinx/petalinux_projects/PYNQ/sdbuild/build/jammy.arm/lib symbolic link.
I: Downloading ubuntu-keyring
E: Can't find a source to download version '2021.03.26' of 'ubuntu-keyring:amd64'
multistrap: Unable to download keyring package: '/home/xilinx/petalinux_projects/PYNQ/sdbuild/build/jammy.arm/'
make: *** [Makefile:431: /home/xilinx/petalinux_projects/PYNQ/sdbuild/build/jammy.arm.stage1.tar.gz] Error 1

Any ideas on how to fix this multistrap/ubuntu-keyring issue for Jammy in this PYNQ v3.1 Docker flow? Thanks!

Hi @Charlie_FPGA

I was not able to replicate this issue. Following the steps in the documentation, I was able to build the Pynq-Z1 image.

Can I just confirm you are downloading the most recent rootfs and sdist from pynq.io?

Also, when placing them inside PYNQ/sdbuild/prebuilt/ you need to rename these files to pynq_rootfs.arm.tar.gz and pynq_sdist.tar.gz, respectively. I realise that is not in the documentation, so I will update that soon.

Let me know how you get on.

1 Like

Hello @joshgoldsmith,

Thank you for your message. Yes, I also renamed the “agnostic-boards” rootfs and sdist.

I was desperate and switched from the Docker workflow to running Pynq directly on the host (without Docker)… but I got exactly the same results!

The issue was related to file permissions. My mistake was installing Petalinux as root using sudo.

Petalinux 2024.1 installation steps:

Petalinux Installation command:

chmod 755 ./petalinux-v-final-installer.run
./petalinux-v-final-installer.run

After that everything is working smoothly. And the weird multistrap error disappeared.

Thanks again for your support.
BR, Carlos.

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.