xref: /qemu/scripts/ci/setup/build-environment.yml (revision 83561896)
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          - libpng-dev
99c1924cdeSAlex Bennée          - libpulse-dev
100159c5d17SCleber Rosa          - librbd-dev
101159c5d17SCleber Rosa          - librdmacm-dev
102159c5d17SCleber Rosa          - libsasl2-dev
103159c5d17SCleber Rosa          - libsdl2-dev
104c1924cdeSAlex Bennée          - libsdl2-image-dev
105159c5d17SCleber Rosa          - libseccomp-dev
106c1924cdeSAlex Bennée          - libslirp-dev
107159c5d17SCleber Rosa          - libsnappy-dev
108159c5d17SCleber Rosa          - libspice-protocol-dev
109159c5d17SCleber Rosa          - libssh-dev
110c1924cdeSAlex Bennée          - libsystemd-dev
111c1924cdeSAlex Bennée          - libtasn1-6-dev
112c1924cdeSAlex Bennée          - libubsan1
113c1924cdeSAlex Bennée          - libudev-dev
114c1924cdeSAlex Bennée          - liburing-dev
115159c5d17SCleber Rosa          - libusb-1.0-0-dev
116159c5d17SCleber Rosa          - libusbredirhost-dev
117159c5d17SCleber Rosa          - libvdeplug-dev
118c1924cdeSAlex Bennée          - libvirglrenderer-dev
119159c5d17SCleber Rosa          - libvte-2.91-dev
120c1924cdeSAlex Bennée          - libxml2-dev
121159c5d17SCleber Rosa          - libzstd-dev
122c1924cdeSAlex Bennée          - llvm
123c1924cdeSAlex Bennée          - locales
124159c5d17SCleber Rosa          - make
125c1924cdeSAlex Bennée          - meson
126c1924cdeSAlex Bennée          - multipath-tools
127c1924cdeSAlex Bennée          - ncat
128c1924cdeSAlex Bennée          - nettle-dev
129c1924cdeSAlex Bennée          - ninja-build
130c1924cdeSAlex Bennée          - openssh-client
131c1924cdeSAlex Bennée          - pkgconf
132c1924cdeSAlex Bennée          - python3
133c1924cdeSAlex Bennée          - python3-numpy
134c1924cdeSAlex Bennée          - python3-opencv
135c1924cdeSAlex Bennée          - python3-pillow
136c1924cdeSAlex Bennée          - python3-pip
137159c5d17SCleber Rosa          - python3-sphinx
138159c5d17SCleber Rosa          - python3-sphinx-rtd-theme
139c1924cdeSAlex Bennée          - python3-venv
140c1924cdeSAlex Bennée          - python3-yaml
141c1924cdeSAlex Bennée          - rpm2cpio
142c1924cdeSAlex Bennée          - sed
143159c5d17SCleber Rosa          - sparse
144c1924cdeSAlex Bennée          - systemtap-sdt-dev
145c1924cdeSAlex Bennée          - tar
146c1924cdeSAlex Bennée          - tesseract-ocr
147c1924cdeSAlex Bennée          - tesseract-ocr-eng
148c1924cdeSAlex Bennée          - texinfo
149159c5d17SCleber Rosa          - xfslibs-dev
150c1924cdeSAlex Bennée          - zlib1g-dev
151159c5d17SCleber Rosa        state: present
152159c5d17SCleber Rosa      when:
153159c5d17SCleber Rosa        - ansible_facts['distribution'] == 'Ubuntu'
154c1924cdeSAlex Bennée        - ansible_facts['distribution_version'] == '22.04'
155159c5d17SCleber Rosa
15683561896SAlex Bennée    # not all packages are available for all architectures
15783561896SAlex Bennée    - name: Install additional packages to build QEMU on Ubuntu 22.04
15883561896SAlex Bennée      package:
15983561896SAlex Bennée        name:
16083561896SAlex Bennée          - libpmem-dev
16183561896SAlex Bennée          - libspice-server-dev
16283561896SAlex Bennée          - libxen-dev
16383561896SAlex Bennée        state: present
16483561896SAlex Bennée      when:
16583561896SAlex Bennée        - ansible_facts['distribution'] == 'Ubuntu'
16683561896SAlex Bennée        - ansible_facts['distribution_version'] == '22.04'
16783561896SAlex Bennée        - ansible_facts['architecture'] == 'aarch64' or ansible_facts['architecture'] == 'x86_64'
16883561896SAlex Bennée
169c1924cdeSAlex Bennée    - name: Install armhf cross-compile packages to build QEMU on AArch64 Ubuntu 22.04
17093c9aeedSAlex Bennée      package:
17193c9aeedSAlex Bennée        name:
17293c9aeedSAlex Bennée          - binutils-arm-linux-gnueabihf
17393c9aeedSAlex Bennée          - gcc-arm-linux-gnueabihf
17493c9aeedSAlex Bennée          - libblkid-dev:armhf
17593c9aeedSAlex Bennée          - libc6-dev:armhf
17693c9aeedSAlex Bennée          - libffi-dev:armhf
17793c9aeedSAlex Bennée          - libglib2.0-dev:armhf
17893c9aeedSAlex Bennée          - libmount-dev:armhf
17993c9aeedSAlex Bennée          - libpcre2-dev:armhf
18093c9aeedSAlex Bennée          - libpixman-1-dev:armhf
18193c9aeedSAlex Bennée          - zlib1g-dev:armhf
18293c9aeedSAlex Bennée      when:
18393c9aeedSAlex Bennée        - ansible_facts['distribution'] == 'Ubuntu'
184c1924cdeSAlex Bennée        - ansible_facts['distribution_version'] == '22.04'
18593c9aeedSAlex Bennée        - ansible_facts['architecture'] == 'aarch64'
18693c9aeedSAlex Bennée
187a9253230SPaolo Bonzini    - name: Enable EPEL repo on EL8
188a9253230SPaolo Bonzini      dnf:
189a9253230SPaolo Bonzini        name:
190a9253230SPaolo Bonzini          - epel-release
191a9253230SPaolo Bonzini        state: present
192a9253230SPaolo Bonzini      when:
193a9253230SPaolo Bonzini        - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS']
194a9253230SPaolo Bonzini        - ansible_facts['distribution_major_version'] == '8'
195a9253230SPaolo Bonzini
1964b950af8SPaolo Bonzini    - name: Enable PowerTools repo on CentOS 8
1974b950af8SPaolo Bonzini      ini_file:
1984b950af8SPaolo Bonzini        path: /etc/yum.repos.d/CentOS-Stream-PowerTools.repo
1994b950af8SPaolo Bonzini        section: powertools
2004b950af8SPaolo Bonzini        option: enabled
2014b950af8SPaolo Bonzini        value: "1"
2024b950af8SPaolo Bonzini      when:
2034b950af8SPaolo Bonzini        - ansible_facts['distribution_file_variety'] == 'CentOS'
2044b950af8SPaolo Bonzini        - ansible_facts['distribution_major_version'] == '8'
2054b950af8SPaolo Bonzini
206d7c2e2b3SCleber Rosa    - name: Install basic packages to build QEMU on EL8
207d7c2e2b3SCleber Rosa      dnf:
208d7c2e2b3SCleber Rosa        # This list of packages start with tests/docker/dockerfiles/centos8.docker
209d7c2e2b3SCleber Rosa        # but only include files that are common to all distro variants and present
210d7c2e2b3SCleber Rosa        # in the standard repos (no add-ons)
211d7c2e2b3SCleber Rosa        name:
212d7c2e2b3SCleber Rosa          - bzip2
213d7c2e2b3SCleber Rosa          - bzip2-devel
214a9253230SPaolo Bonzini          - capstone-devel
215d7c2e2b3SCleber Rosa          - dbus-daemon
216cb1513dfSPaolo Bonzini          - device-mapper-multipath-devel
217d7c2e2b3SCleber Rosa          - diffutils
218d7c2e2b3SCleber Rosa          - gcc
219d7c2e2b3SCleber Rosa          - gcc-c++
220d7c2e2b3SCleber Rosa          - genisoimage
221d7c2e2b3SCleber Rosa          - gettext
222d7c2e2b3SCleber Rosa          - git
223d7c2e2b3SCleber Rosa          - glib2-devel
224cb1513dfSPaolo Bonzini          - glusterfs-api-devel
225cb1513dfSPaolo Bonzini          - gnutls-devel
226d7c2e2b3SCleber Rosa          - libaio-devel
227cb1513dfSPaolo Bonzini          - libcap-ng-devel
228cb1513dfSPaolo Bonzini          - libcurl-devel
229d7c2e2b3SCleber Rosa          - libepoxy-devel
230cb1513dfSPaolo Bonzini          - libfdt-devel
231d7c2e2b3SCleber Rosa          - libgcrypt-devel
232cb1513dfSPaolo Bonzini          - libiscsi-devel
233cb1513dfSPaolo Bonzini          - libpmem-devel
234cb1513dfSPaolo Bonzini          - librados-devel
235cb1513dfSPaolo Bonzini          - librbd-devel
236cb1513dfSPaolo Bonzini          - libseccomp-devel
237cb1513dfSPaolo Bonzini          - libssh-devel
238cb1513dfSPaolo Bonzini          - libxkbcommon-devel
239d7c2e2b3SCleber Rosa          - lzo-devel
240d7c2e2b3SCleber Rosa          - make
241d7c2e2b3SCleber Rosa          - mesa-libEGL-devel
242d7c2e2b3SCleber Rosa          - nettle-devel
2430f900baeSLucas Mateus Castro (alqotel)          - ninja-build
244d7c2e2b3SCleber Rosa          - nmap-ncat
245cb1513dfSPaolo Bonzini          - numactl-devel
246d7c2e2b3SCleber Rosa          - pixman-devel
24711b4a4eeSPaolo Bonzini          - python38
248cb1513dfSPaolo Bonzini          - python3-sphinx
249d7c2e2b3SCleber Rosa          - rdma-core-devel
250cb1513dfSPaolo Bonzini          - redhat-rpm-config
251cb1513dfSPaolo Bonzini          - snappy-devel
252d7c2e2b3SCleber Rosa          - spice-glib-devel
253cb1513dfSPaolo Bonzini          - systemd-devel
254d7c2e2b3SCleber Rosa          - systemtap-sdt-devel
255d7c2e2b3SCleber Rosa          - tar
256d7c2e2b3SCleber Rosa          - zlib-devel
257d7c2e2b3SCleber Rosa        state: present
258d7c2e2b3SCleber Rosa      when:
2594b950af8SPaolo Bonzini        - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS']
260d7c2e2b3SCleber Rosa        - ansible_facts['distribution_version'] == '8'
261556ede02SLucas Mateus Castro (alqotel)
262556ede02SLucas Mateus Castro (alqotel)    - name: Install packages only available on x86 and aarch64
263556ede02SLucas Mateus Castro (alqotel)      dnf:
264556ede02SLucas Mateus Castro (alqotel)        # Spice server not available in ppc64le
265556ede02SLucas Mateus Castro (alqotel)        name:
266556ede02SLucas Mateus Castro (alqotel)          - spice-server
267cb1513dfSPaolo Bonzini          - spice-server-devel
268556ede02SLucas Mateus Castro (alqotel)        state: present
269556ede02SLucas Mateus Castro (alqotel)      when:
2704b950af8SPaolo Bonzini        - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS']
271556ede02SLucas Mateus Castro (alqotel)        - ansible_facts['distribution_version'] == '8'
272556ede02SLucas Mateus Castro (alqotel)        - ansible_facts['architecture'] == 'aarch64' or ansible_facts['architecture'] == 'x86_64'
27311b4a4eeSPaolo Bonzini
27411b4a4eeSPaolo Bonzini    - name: Check whether the Python runtime version is managed by alternatives
27511b4a4eeSPaolo Bonzini      stat:
27611b4a4eeSPaolo Bonzini        path: /etc/alternatives/python3
27711b4a4eeSPaolo Bonzini      register: python3
27811b4a4eeSPaolo Bonzini
27911b4a4eeSPaolo Bonzini    - name: Set default Python runtime to 3.8 on EL8
28011b4a4eeSPaolo Bonzini      command: alternatives --set python3 /usr/bin/python3.8
28111b4a4eeSPaolo Bonzini      when:
28211b4a4eeSPaolo Bonzini        - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS']
28311b4a4eeSPaolo Bonzini        - ansible_facts['distribution_version'] == '8'
28411b4a4eeSPaolo Bonzini        - python3.stat.islnk and python3.stat.lnk_target != '/usr/bin/python3.8'
285