| # Copyright (c) 2021 Red Hat, Inc. | 
 | # | 
 | # Author: | 
 | #  Cleber Rosa <crosa@redhat.com> | 
 | # | 
 | # This work is licensed under the terms of the GNU GPL, version 2 or | 
 | # later.  See the COPYING file in the top-level directory. | 
 | # | 
 | # This is an ansible playbook file.  Run it to set up systems with the | 
 | # environment needed to build QEMU. | 
 | --- | 
 | - name: Installation of basic packages to build QEMU | 
 |   hosts: all | 
 |   tasks: | 
 |     - name: Check for suitable ansible version | 
 |       delegate_to: localhost | 
 |       assert: | 
 |         that: | 
 |           - '((ansible_version.major == 2) and (ansible_version.minor >= 8)) or (ansible_version.major >= 3)' | 
 |         msg: "Unsuitable ansible version, please use version 2.8.0 or later" | 
 |  | 
 |     - name: Add armhf foreign architecture to aarch64 hosts | 
 |       command: dpkg --add-architecture armhf | 
 |       when: | 
 |         - ansible_facts['distribution'] == 'Ubuntu' | 
 |         - ansible_facts['architecture'] == 'aarch64' | 
 |  | 
 |     - name: Update apt cache / upgrade packages via apt | 
 |       apt: | 
 |         update_cache: yes | 
 |         upgrade: yes | 
 |       when: | 
 |         - ansible_facts['distribution'] == 'Ubuntu' | 
 |  | 
 |     # lcitool variables -f json ubuntu-2204 qemu | jq -r '.pkgs[]' | xargs -n 1 echo "-" | 
 |     - name: Install basic packages to build QEMU on Ubuntu 22.04 | 
 |       package: | 
 |         name: | 
 |           - bash | 
 |           - bc | 
 |           - bison | 
 |           - bsdextrautils | 
 |           - bzip2 | 
 |           - ca-certificates | 
 |           - ccache | 
 |           - clang | 
 |           - dbus | 
 |           - debianutils | 
 |           - diffutils | 
 |           - exuberant-ctags | 
 |           - findutils | 
 |           - flex | 
 |           - g++ | 
 |           - gcc | 
 |           - gcovr | 
 |           - genisoimage | 
 |           - gettext | 
 |           - git | 
 |           - hostname | 
 |           - libaio-dev | 
 |           - libasan5 | 
 |           - libasound2-dev | 
 |           - libattr1-dev | 
 |           - libbpf-dev | 
 |           - libbrlapi-dev | 
 |           - libbz2-dev | 
 |           - libc6-dev | 
 |           - libcacard-dev | 
 |           - libcap-ng-dev | 
 |           - libcapstone-dev | 
 |           - libcmocka-dev | 
 |           - libcurl4-gnutls-dev | 
 |           - libdaxctl-dev | 
 |           - libdrm-dev | 
 |           - libepoxy-dev | 
 |           - libfdt-dev | 
 |           - libffi-dev | 
 |           - libgbm-dev | 
 |           - libgcrypt20-dev | 
 |           - libglib2.0-dev | 
 |           - libglusterfs-dev | 
 |           - libgnutls28-dev | 
 |           - libgtk-3-dev | 
 |           - libibumad-dev | 
 |           - libibverbs-dev | 
 |           - libiscsi-dev | 
 |           - libjemalloc-dev | 
 |           - libjpeg-turbo8-dev | 
 |           - libjson-c-dev | 
 |           - liblttng-ust-dev | 
 |           - liblzo2-dev | 
 |           - libncursesw5-dev | 
 |           - libnfs-dev | 
 |           - libnuma-dev | 
 |           - libpam0g-dev | 
 |           - libpcre2-dev | 
 |           - libpixman-1-dev | 
 |           - libpng-dev | 
 |           - libpulse-dev | 
 |           - librbd-dev | 
 |           - librdmacm-dev | 
 |           - libsasl2-dev | 
 |           - libsdl2-dev | 
 |           - libsdl2-image-dev | 
 |           - libseccomp-dev | 
 |           - libslirp-dev | 
 |           - libsnappy-dev | 
 |           - libspice-protocol-dev | 
 |           - libssh-dev | 
 |           - libsystemd-dev | 
 |           - libtasn1-6-dev | 
 |           - libubsan1 | 
 |           - libudev-dev | 
 |           - liburing-dev | 
 |           - libusb-1.0-0-dev | 
 |           - libusbredirhost-dev | 
 |           - libvdeplug-dev | 
 |           - libvirglrenderer-dev | 
 |           - libvte-2.91-dev | 
 |           - libxml2-dev | 
 |           - libzstd-dev | 
 |           - llvm | 
 |           - locales | 
 |           - make | 
 |           - meson | 
 |           - multipath-tools | 
 |           - ncat | 
 |           - nettle-dev | 
 |           - ninja-build | 
 |           - openssh-client | 
 |           - pkgconf | 
 |           - python3 | 
 |           - python3-numpy | 
 |           - python3-opencv | 
 |           - python3-pillow | 
 |           - python3-pip | 
 |           - python3-sphinx | 
 |           - python3-sphinx-rtd-theme | 
 |           - python3-venv | 
 |           - python3-yaml | 
 |           - rpm2cpio | 
 |           - sed | 
 |           - sparse | 
 |           - systemtap-sdt-dev | 
 |           - tar | 
 |           - tesseract-ocr | 
 |           - tesseract-ocr-eng | 
 |           - texinfo | 
 |           - xfslibs-dev | 
 |           - zlib1g-dev | 
 |         state: present | 
 |       when: | 
 |         - ansible_facts['distribution'] == 'Ubuntu' | 
 |         - ansible_facts['distribution_version'] == '22.04' | 
 |  | 
 |     # not all packages are available for all architectures | 
 |     - name: Install additional packages to build QEMU on Ubuntu 22.04 | 
 |       package: | 
 |         name: | 
 |           - libpmem-dev | 
 |           - libspice-server-dev | 
 |           - libxen-dev | 
 |         state: present | 
 |       when: | 
 |         - ansible_facts['distribution'] == 'Ubuntu' | 
 |         - ansible_facts['distribution_version'] == '22.04' | 
 |         - ansible_facts['architecture'] == 'aarch64' or ansible_facts['architecture'] == 'x86_64' | 
 |  | 
 |     - name: Install armhf cross-compile packages to build QEMU on AArch64 Ubuntu 22.04 | 
 |       package: | 
 |         name: | 
 |           - binutils-arm-linux-gnueabihf | 
 |           - gcc-arm-linux-gnueabihf | 
 |           - libblkid-dev:armhf | 
 |           - libc6-dev:armhf | 
 |           - libffi-dev:armhf | 
 |           - libglib2.0-dev:armhf | 
 |           - libmount-dev:armhf | 
 |           - libpcre2-dev:armhf | 
 |           - libpixman-1-dev:armhf | 
 |           - zlib1g-dev:armhf | 
 |       when: | 
 |         - ansible_facts['distribution'] == 'Ubuntu' | 
 |         - ansible_facts['distribution_version'] == '22.04' | 
 |         - ansible_facts['architecture'] == 'aarch64' | 
 |  | 
 |     - name: Enable EPEL repo on EL8 | 
 |       dnf: | 
 |         name: | 
 |           - epel-release | 
 |         state: present | 
 |       when: | 
 |         - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS'] | 
 |         - ansible_facts['distribution_major_version'] == '8' | 
 |  | 
 |     - name: Enable PowerTools repo on CentOS 8 | 
 |       ini_file: | 
 |         path: /etc/yum.repos.d/CentOS-Stream-PowerTools.repo | 
 |         section: powertools | 
 |         option: enabled | 
 |         value: "1" | 
 |       when: | 
 |         - ansible_facts['distribution_file_variety'] == 'CentOS' | 
 |         - ansible_facts['distribution_major_version'] == '8' | 
 |  | 
 |     - name: Install basic packages to build QEMU on EL8 | 
 |       dnf: | 
 |         # This list of packages start with tests/docker/dockerfiles/centos8.docker | 
 |         # but only include files that are common to all distro variants and present | 
 |         # in the standard repos (no add-ons) | 
 |         name: | 
 |           - bzip2 | 
 |           - bzip2-devel | 
 |           - capstone-devel | 
 |           - dbus-daemon | 
 |           - device-mapper-multipath-devel | 
 |           - diffutils | 
 |           - gcc | 
 |           - gcc-c++ | 
 |           - genisoimage | 
 |           - gettext | 
 |           - git | 
 |           - glib2-devel | 
 |           - glusterfs-api-devel | 
 |           - gnutls-devel | 
 |           - libaio-devel | 
 |           - libcap-ng-devel | 
 |           - libcurl-devel | 
 |           - libepoxy-devel | 
 |           - libfdt-devel | 
 |           - libgcrypt-devel | 
 |           - libiscsi-devel | 
 |           - libpmem-devel | 
 |           - librados-devel | 
 |           - librbd-devel | 
 |           - libseccomp-devel | 
 |           - libssh-devel | 
 |           - libxkbcommon-devel | 
 |           - lzo-devel | 
 |           - make | 
 |           - mesa-libEGL-devel | 
 |           - nettle-devel | 
 |           - ninja-build | 
 |           - nmap-ncat | 
 |           - numactl-devel | 
 |           - pixman-devel | 
 |           - python38 | 
 |           - python3-sphinx | 
 |           - rdma-core-devel | 
 |           - redhat-rpm-config | 
 |           - snappy-devel | 
 |           - spice-glib-devel | 
 |           - systemd-devel | 
 |           - systemtap-sdt-devel | 
 |           - tar | 
 |           - zlib-devel | 
 |         state: present | 
 |       when: | 
 |         - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS'] | 
 |         - ansible_facts['distribution_version'] == '8' | 
 |  | 
 |     - name: Install packages only available on x86 and aarch64 | 
 |       dnf: | 
 |         # Spice server not available in ppc64le | 
 |         name: | 
 |           - spice-server | 
 |           - spice-server-devel | 
 |         state: present | 
 |       when: | 
 |         - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS'] | 
 |         - ansible_facts['distribution_version'] == '8' | 
 |         - ansible_facts['architecture'] == 'aarch64' or ansible_facts['architecture'] == 'x86_64' | 
 |  | 
 |     - name: Check whether the Python runtime version is managed by alternatives | 
 |       stat: | 
 |         path: /etc/alternatives/python3 | 
 |       register: python3 | 
 |  | 
 |     - name: Set default Python runtime to 3.8 on EL8 | 
 |       command: alternatives --set python3 /usr/bin/python3.8 | 
 |       when: | 
 |         - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS'] | 
 |         - ansible_facts['distribution_version'] == '8' | 
 |         - python3.stat.islnk and python3.stat.lnk_target != '/usr/bin/python3.8' |