xref: /qemu/scripts/ci/setup/ubuntu/build-environment.yml (revision c1924cde87e1bfeaf599b823a66f2ef09fd30e6a)
1159c5d17SCleber Rosa# Copyright (c) 2021 Red Hat, Inc.
2159c5d17SCleber Rosa#
3159c5d17SCleber Rosa# Author:
4159c5d17SCleber Rosa#  Cleber Rosa <crosa@redhat.com>
5159c5d17SCleber Rosa#
6159c5d17SCleber Rosa# This work is licensed under the terms of the GNU GPL, version 2 or
7159c5d17SCleber Rosa# later.  See the COPYING file in the top-level directory.
8159c5d17SCleber Rosa#
9159c5d17SCleber Rosa# This is an ansible playbook file.  Run it to set up systems with the
10159c5d17SCleber Rosa# environment needed to build QEMU.
11159c5d17SCleber Rosa---
12159c5d17SCleber Rosa- name: Installation of basic packages to build QEMU
13159c5d17SCleber Rosa  hosts: all
14159c5d17SCleber Rosa  tasks:
15159c5d17SCleber Rosa    - name: Check for suitable ansible version
16159c5d17SCleber Rosa      delegate_to: localhost
17159c5d17SCleber Rosa      assert:
18159c5d17SCleber Rosa        that:
19159c5d17SCleber Rosa          - '((ansible_version.major == 2) and (ansible_version.minor >= 8)) or (ansible_version.major >= 3)'
20159c5d17SCleber Rosa        msg: "Unsuitable ansible version, please use version 2.8.0 or later"
21159c5d17SCleber Rosa
2293c9aeedSAlex Bennée    - name: Add armhf foreign architecture to aarch64 hosts
2393c9aeedSAlex Bennée      command: dpkg --add-architecture armhf
2493c9aeedSAlex Bennée      when:
2593c9aeedSAlex Bennée        - ansible_facts['distribution'] == 'Ubuntu'
2693c9aeedSAlex Bennée        - ansible_facts['architecture'] == 'aarch64'
2793c9aeedSAlex Bennée
28159c5d17SCleber Rosa    - name: Update apt cache / upgrade packages via apt
29159c5d17SCleber Rosa      apt:
30159c5d17SCleber Rosa        update_cache: yes
31159c5d17SCleber Rosa        upgrade: yes
32159c5d17SCleber Rosa      when:
33159c5d17SCleber Rosa        - ansible_facts['distribution'] == 'Ubuntu'
34159c5d17SCleber Rosa
35c1924cdeSAlex Bennée    # lcitool variables -f json ubuntu-2204 qemu | jq -r '.pkgs[]' | xargs -n 1 echo "-"
36c1924cdeSAlex Bennée    - name: Install basic packages to build QEMU on Ubuntu 22.04
37159c5d17SCleber Rosa      package:
38159c5d17SCleber Rosa        name:
39c1924cdeSAlex Bennée          - bash
40c1924cdeSAlex Bennée          - bc
41c1924cdeSAlex Bennée          - bison
42c1924cdeSAlex Bennée          - bsdextrautils
43c1924cdeSAlex Bennée          - bzip2
44c1924cdeSAlex Bennée          - ca-certificates
45159c5d17SCleber Rosa          - ccache
46c1924cdeSAlex Bennée          - clang
47c1924cdeSAlex Bennée          - dbus
48c1924cdeSAlex Bennée          - debianutils
49c1924cdeSAlex Bennée          - diffutils
50c1924cdeSAlex Bennée          - exuberant-ctags
51c1924cdeSAlex Bennée          - findutils
52c1924cdeSAlex Bennée          - flex
53c1924cdeSAlex Bennée          - g++
54159c5d17SCleber Rosa          - gcc
55c1924cdeSAlex Bennée          - gcovr
56c1924cdeSAlex Bennée          - genisoimage
57159c5d17SCleber Rosa          - gettext
58159c5d17SCleber Rosa          - git
59c1924cdeSAlex Bennée          - hostname
60159c5d17SCleber Rosa          - libaio-dev
61c1924cdeSAlex Bennée          - libasan5
62c1924cdeSAlex Bennée          - libasound2-dev
63159c5d17SCleber Rosa          - libattr1-dev
64c1924cdeSAlex Bennée          - libbpf-dev
65159c5d17SCleber Rosa          - libbrlapi-dev
66159c5d17SCleber Rosa          - libbz2-dev
67c1924cdeSAlex Bennée          - libc6-dev
68159c5d17SCleber Rosa          - libcacard-dev
69159c5d17SCleber Rosa          - libcap-ng-dev
70c1924cdeSAlex Bennée          - libcapstone-dev
71c1924cdeSAlex Bennée          - libcmocka-dev
72159c5d17SCleber Rosa          - libcurl4-gnutls-dev
73c1924cdeSAlex Bennée          - libdaxctl-dev
74159c5d17SCleber Rosa          - libdrm-dev
75159c5d17SCleber Rosa          - libepoxy-dev
76159c5d17SCleber Rosa          - libfdt-dev
77c1924cdeSAlex Bennée          - libffi-dev
78159c5d17SCleber Rosa          - libgbm-dev
79c1924cdeSAlex Bennée          - libgcrypt20-dev
80c1924cdeSAlex Bennée          - libglib2.0-dev
81c1924cdeSAlex Bennée          - libglusterfs-dev
82c1924cdeSAlex Bennée          - libgnutls28-dev
83159c5d17SCleber Rosa          - libgtk-3-dev
84c1924cdeSAlex Bennée          - libibumad-dev
85159c5d17SCleber Rosa          - libibverbs-dev
86159c5d17SCleber Rosa          - libiscsi-dev
87159c5d17SCleber Rosa          - libjemalloc-dev
88159c5d17SCleber Rosa          - libjpeg-turbo8-dev
89c1924cdeSAlex Bennée          - libjson-c-dev
90c1924cdeSAlex Bennée          - liblttng-ust-dev
91159c5d17SCleber Rosa          - liblzo2-dev
92159c5d17SCleber Rosa          - libncursesw5-dev
93159c5d17SCleber Rosa          - libnfs-dev
94159c5d17SCleber Rosa          - libnuma-dev
95c1924cdeSAlex Bennée          - libpam0g-dev
96c1924cdeSAlex Bennée          - libpcre2-dev
97159c5d17SCleber Rosa          - libpixman-1-dev
98c1924cdeSAlex Bennée          - libpmem-dev
99c1924cdeSAlex Bennée          - libpng-dev
100c1924cdeSAlex Bennée          - libpulse-dev
101159c5d17SCleber Rosa          - librbd-dev
102159c5d17SCleber Rosa          - librdmacm-dev
103159c5d17SCleber Rosa          - libsasl2-dev
104159c5d17SCleber Rosa          - libsdl2-dev
105c1924cdeSAlex Bennée          - libsdl2-image-dev
106159c5d17SCleber Rosa          - libseccomp-dev
107c1924cdeSAlex Bennée          - libslirp-dev
108159c5d17SCleber Rosa          - libsnappy-dev
109159c5d17SCleber Rosa          - libspice-protocol-dev
110c1924cdeSAlex Bennée          - libspice-server-dev
111159c5d17SCleber Rosa          - libssh-dev
112c1924cdeSAlex Bennée          - libsystemd-dev
113c1924cdeSAlex Bennée          - libtasn1-6-dev
114c1924cdeSAlex Bennée          - libubsan1
115c1924cdeSAlex Bennée          - libudev-dev
116c1924cdeSAlex Bennée          - liburing-dev
117159c5d17SCleber Rosa          - libusb-1.0-0-dev
118159c5d17SCleber Rosa          - libusbredirhost-dev
119159c5d17SCleber Rosa          - libvdeplug-dev
120c1924cdeSAlex Bennée          - libvirglrenderer-dev
121159c5d17SCleber Rosa          - libvte-2.91-dev
122c1924cdeSAlex Bennée          - libxen-dev
123c1924cdeSAlex Bennée          - libxml2-dev
124159c5d17SCleber Rosa          - libzstd-dev
125c1924cdeSAlex Bennée          - llvm
126c1924cdeSAlex Bennée          - locales
127159c5d17SCleber Rosa          - make
128c1924cdeSAlex Bennée          - meson
129c1924cdeSAlex Bennée          - multipath-tools
130c1924cdeSAlex Bennée          - ncat
131c1924cdeSAlex Bennée          - nettle-dev
132c1924cdeSAlex Bennée          - ninja-build
133c1924cdeSAlex Bennée          - openssh-client
134c1924cdeSAlex Bennée          - pkgconf
135c1924cdeSAlex Bennée          - python3
136c1924cdeSAlex Bennée          - python3-numpy
137c1924cdeSAlex Bennée          - python3-opencv
138c1924cdeSAlex Bennée          - python3-pillow
139c1924cdeSAlex Bennée          - python3-pip
140159c5d17SCleber Rosa          - python3-sphinx
141159c5d17SCleber Rosa          - python3-sphinx-rtd-theme
142c1924cdeSAlex Bennée          - python3-venv
143c1924cdeSAlex Bennée          - python3-yaml
144c1924cdeSAlex Bennée          - rpm2cpio
145c1924cdeSAlex Bennée          - sed
146159c5d17SCleber Rosa          - sparse
147c1924cdeSAlex Bennée          - systemtap-sdt-dev
148c1924cdeSAlex Bennée          - tar
149c1924cdeSAlex Bennée          - tesseract-ocr
150c1924cdeSAlex Bennée          - tesseract-ocr-eng
151c1924cdeSAlex Bennée          - texinfo
152159c5d17SCleber Rosa          - xfslibs-dev
153c1924cdeSAlex Bennée          - zlib1g-dev
154159c5d17SCleber Rosa        state: present
155159c5d17SCleber Rosa      when:
156159c5d17SCleber Rosa        - ansible_facts['distribution'] == 'Ubuntu'
157c1924cdeSAlex Bennée        - ansible_facts['distribution_version'] == '22.04'
158159c5d17SCleber Rosa
159c1924cdeSAlex Bennée    - name: Install armhf cross-compile packages to build QEMU on AArch64 Ubuntu 22.04
16093c9aeedSAlex Bennée      package:
16193c9aeedSAlex Bennée        name:
16293c9aeedSAlex Bennée          - binutils-arm-linux-gnueabihf
16393c9aeedSAlex Bennée          - gcc-arm-linux-gnueabihf
16493c9aeedSAlex Bennée          - libblkid-dev:armhf
16593c9aeedSAlex Bennée          - libc6-dev:armhf
16693c9aeedSAlex Bennée          - libffi-dev:armhf
16793c9aeedSAlex Bennée          - libglib2.0-dev:armhf
16893c9aeedSAlex Bennée          - libmount-dev:armhf
16993c9aeedSAlex Bennée          - libpcre2-dev:armhf
17093c9aeedSAlex Bennée          - libpixman-1-dev:armhf
17193c9aeedSAlex Bennée          - zlib1g-dev:armhf
17293c9aeedSAlex Bennée      when:
17393c9aeedSAlex Bennée        - ansible_facts['distribution'] == 'Ubuntu'
174c1924cdeSAlex Bennée        - ansible_facts['distribution_version'] == '22.04'
17593c9aeedSAlex Bennée        - ansible_facts['architecture'] == 'aarch64'
17693c9aeedSAlex Bennée
177a9253230SPaolo Bonzini    - name: Enable EPEL repo on EL8
178a9253230SPaolo Bonzini      dnf:
179a9253230SPaolo Bonzini        name:
180a9253230SPaolo Bonzini          - epel-release
181a9253230SPaolo Bonzini        state: present
182a9253230SPaolo Bonzini      when:
183a9253230SPaolo Bonzini        - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS']
184a9253230SPaolo Bonzini        - ansible_facts['distribution_major_version'] == '8'
185a9253230SPaolo Bonzini
1864b950af8SPaolo Bonzini    - name: Enable PowerTools repo on CentOS 8
1874b950af8SPaolo Bonzini      ini_file:
1884b950af8SPaolo Bonzini        path: /etc/yum.repos.d/CentOS-Stream-PowerTools.repo
1894b950af8SPaolo Bonzini        section: powertools
1904b950af8SPaolo Bonzini        option: enabled
1914b950af8SPaolo Bonzini        value: "1"
1924b950af8SPaolo Bonzini      when:
1934b950af8SPaolo Bonzini        - ansible_facts['distribution_file_variety'] == 'CentOS'
1944b950af8SPaolo Bonzini        - ansible_facts['distribution_major_version'] == '8'
1954b950af8SPaolo Bonzini
196d7c2e2b3SCleber Rosa    - name: Install basic packages to build QEMU on EL8
197d7c2e2b3SCleber Rosa      dnf:
198d7c2e2b3SCleber Rosa        # This list of packages start with tests/docker/dockerfiles/centos8.docker
199d7c2e2b3SCleber Rosa        # but only include files that are common to all distro variants and present
200d7c2e2b3SCleber Rosa        # in the standard repos (no add-ons)
201d7c2e2b3SCleber Rosa        name:
202d7c2e2b3SCleber Rosa          - bzip2
203d7c2e2b3SCleber Rosa          - bzip2-devel
204a9253230SPaolo Bonzini          - capstone-devel
205d7c2e2b3SCleber Rosa          - dbus-daemon
206cb1513dfSPaolo Bonzini          - device-mapper-multipath-devel
207d7c2e2b3SCleber Rosa          - diffutils
208d7c2e2b3SCleber Rosa          - gcc
209d7c2e2b3SCleber Rosa          - gcc-c++
210d7c2e2b3SCleber Rosa          - genisoimage
211d7c2e2b3SCleber Rosa          - gettext
212d7c2e2b3SCleber Rosa          - git
213d7c2e2b3SCleber Rosa          - glib2-devel
214cb1513dfSPaolo Bonzini          - glusterfs-api-devel
215cb1513dfSPaolo Bonzini          - gnutls-devel
216d7c2e2b3SCleber Rosa          - libaio-devel
217cb1513dfSPaolo Bonzini          - libcap-ng-devel
218cb1513dfSPaolo Bonzini          - libcurl-devel
219d7c2e2b3SCleber Rosa          - libepoxy-devel
220cb1513dfSPaolo Bonzini          - libfdt-devel
221d7c2e2b3SCleber Rosa          - libgcrypt-devel
222cb1513dfSPaolo Bonzini          - libiscsi-devel
223cb1513dfSPaolo Bonzini          - libpmem-devel
224cb1513dfSPaolo Bonzini          - librados-devel
225cb1513dfSPaolo Bonzini          - librbd-devel
226cb1513dfSPaolo Bonzini          - libseccomp-devel
227cb1513dfSPaolo Bonzini          - libssh-devel
228cb1513dfSPaolo Bonzini          - libxkbcommon-devel
229d7c2e2b3SCleber Rosa          - lzo-devel
230d7c2e2b3SCleber Rosa          - make
231d7c2e2b3SCleber Rosa          - mesa-libEGL-devel
232d7c2e2b3SCleber Rosa          - nettle-devel
2330f900baeSLucas Mateus Castro (alqotel)          - ninja-build
234d7c2e2b3SCleber Rosa          - nmap-ncat
235cb1513dfSPaolo Bonzini          - numactl-devel
236d7c2e2b3SCleber Rosa          - pixman-devel
23711b4a4eeSPaolo Bonzini          - python38
238cb1513dfSPaolo Bonzini          - python3-sphinx
239d7c2e2b3SCleber Rosa          - rdma-core-devel
240cb1513dfSPaolo Bonzini          - redhat-rpm-config
241cb1513dfSPaolo Bonzini          - snappy-devel
242d7c2e2b3SCleber Rosa          - spice-glib-devel
243cb1513dfSPaolo Bonzini          - systemd-devel
244d7c2e2b3SCleber Rosa          - systemtap-sdt-devel
245d7c2e2b3SCleber Rosa          - tar
246d7c2e2b3SCleber Rosa          - zlib-devel
247d7c2e2b3SCleber Rosa        state: present
248d7c2e2b3SCleber Rosa      when:
2494b950af8SPaolo Bonzini        - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS']
250d7c2e2b3SCleber Rosa        - ansible_facts['distribution_version'] == '8'
251556ede02SLucas Mateus Castro (alqotel)
252556ede02SLucas Mateus Castro (alqotel)    - name: Install packages only available on x86 and aarch64
253556ede02SLucas Mateus Castro (alqotel)      dnf:
254556ede02SLucas Mateus Castro (alqotel)        # Spice server not available in ppc64le
255556ede02SLucas Mateus Castro (alqotel)        name:
256556ede02SLucas Mateus Castro (alqotel)          - spice-server
257cb1513dfSPaolo Bonzini          - spice-server-devel
258556ede02SLucas Mateus Castro (alqotel)        state: present
259556ede02SLucas Mateus Castro (alqotel)      when:
2604b950af8SPaolo Bonzini        - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS']
261556ede02SLucas Mateus Castro (alqotel)        - ansible_facts['distribution_version'] == '8'
262556ede02SLucas Mateus Castro (alqotel)        - ansible_facts['architecture'] == 'aarch64' or ansible_facts['architecture'] == 'x86_64'
26311b4a4eeSPaolo Bonzini
26411b4a4eeSPaolo Bonzini    - name: Check whether the Python runtime version is managed by alternatives
26511b4a4eeSPaolo Bonzini      stat:
26611b4a4eeSPaolo Bonzini        path: /etc/alternatives/python3
26711b4a4eeSPaolo Bonzini      register: python3
26811b4a4eeSPaolo Bonzini
26911b4a4eeSPaolo Bonzini    - name: Set default Python runtime to 3.8 on EL8
27011b4a4eeSPaolo Bonzini      command: alternatives --set python3 /usr/bin/python3.8
27111b4a4eeSPaolo Bonzini      when:
27211b4a4eeSPaolo Bonzini        - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS']
27311b4a4eeSPaolo Bonzini        - ansible_facts['distribution_version'] == '8'
27411b4a4eeSPaolo Bonzini        - python3.stat.islnk and python3.stat.lnk_target != '/usr/bin/python3.8'
275