xref: /qemu/scripts/ci/setup/ubuntu/build-environment.yml (revision 11b4a4eeec6054161aafdcb2f2faeb7c6ff36c99)
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        - ansible_facts['distribution_version'] == '20.04'
2893c9aeedSAlex Bennée
29159c5d17SCleber Rosa    - name: Update apt cache / upgrade packages via apt
30159c5d17SCleber Rosa      apt:
31159c5d17SCleber Rosa        update_cache: yes
32159c5d17SCleber Rosa        upgrade: yes
33159c5d17SCleber Rosa      when:
34159c5d17SCleber Rosa        - ansible_facts['distribution'] == 'Ubuntu'
35159c5d17SCleber Rosa
36f3f0cbafSThomas Huth    - name: Install basic packages to build QEMU on Ubuntu 20.04
37159c5d17SCleber Rosa      package:
38159c5d17SCleber Rosa        name:
39159c5d17SCleber Rosa          - ccache
40159c5d17SCleber Rosa          - gcc
41159c5d17SCleber Rosa          - gettext
42159c5d17SCleber Rosa          - git
43159c5d17SCleber Rosa          - glusterfs-common
44159c5d17SCleber Rosa          - libaio-dev
45159c5d17SCleber Rosa          - libattr1-dev
46159c5d17SCleber Rosa          - libbrlapi-dev
47159c5d17SCleber Rosa          - libbz2-dev
48159c5d17SCleber Rosa          - libcacard-dev
49a9253230SPaolo Bonzini          - libcapstone-dev
50159c5d17SCleber Rosa          - libcap-ng-dev
51159c5d17SCleber Rosa          - libcurl4-gnutls-dev
52159c5d17SCleber Rosa          - libdrm-dev
53159c5d17SCleber Rosa          - libepoxy-dev
54159c5d17SCleber Rosa          - libfdt-dev
55159c5d17SCleber Rosa          - libgbm-dev
56159c5d17SCleber Rosa          - libgtk-3-dev
57159c5d17SCleber Rosa          - libibverbs-dev
58159c5d17SCleber Rosa          - libiscsi-dev
59159c5d17SCleber Rosa          - libjemalloc-dev
60159c5d17SCleber Rosa          - libjpeg-turbo8-dev
61159c5d17SCleber Rosa          - liblzo2-dev
62159c5d17SCleber Rosa          - libncurses5-dev
63159c5d17SCleber Rosa          - libncursesw5-dev
64159c5d17SCleber Rosa          - libnfs-dev
65159c5d17SCleber Rosa          - libnss3-dev
66159c5d17SCleber Rosa          - libnuma-dev
67159c5d17SCleber Rosa          - libpixman-1-dev
68159c5d17SCleber Rosa          - librados-dev
69159c5d17SCleber Rosa          - librbd-dev
70159c5d17SCleber Rosa          - librdmacm-dev
71159c5d17SCleber Rosa          - libsasl2-dev
72159c5d17SCleber Rosa          - libsdl2-dev
73159c5d17SCleber Rosa          - libseccomp-dev
74159c5d17SCleber Rosa          - libsnappy-dev
75159c5d17SCleber Rosa          - libspice-protocol-dev
76159c5d17SCleber Rosa          - libssh-dev
77159c5d17SCleber Rosa          - libusb-1.0-0-dev
78159c5d17SCleber Rosa          - libusbredirhost-dev
79159c5d17SCleber Rosa          - libvdeplug-dev
80159c5d17SCleber Rosa          - libvte-2.91-dev
81159c5d17SCleber Rosa          - libzstd-dev
82159c5d17SCleber Rosa          - make
83159c5d17SCleber Rosa          - python3-yaml
84159c5d17SCleber Rosa          - python3-sphinx
85159c5d17SCleber Rosa          - python3-sphinx-rtd-theme
86159c5d17SCleber Rosa          - ninja-build
87159c5d17SCleber Rosa          - sparse
88159c5d17SCleber Rosa          - xfslibs-dev
89159c5d17SCleber Rosa        state: present
90159c5d17SCleber Rosa      when:
91159c5d17SCleber Rosa        - ansible_facts['distribution'] == 'Ubuntu'
92159c5d17SCleber Rosa
93f3f0cbafSThomas Huth    - name: Install packages to build QEMU on Ubuntu 20.04 on non-s390x
94159c5d17SCleber Rosa      package:
95159c5d17SCleber Rosa        name:
96159c5d17SCleber Rosa          - libspice-server-dev
97159c5d17SCleber Rosa          - libxen-dev
98159c5d17SCleber Rosa        state: present
99159c5d17SCleber Rosa      when:
100159c5d17SCleber Rosa        - ansible_facts['distribution'] == 'Ubuntu'
101561612f9SLucas Mateus Castro (alqotel)        - ansible_facts['architecture'] == 'aarch64' or ansible_facts['architecture'] == 'x86_64'
102159c5d17SCleber Rosa
103159c5d17SCleber Rosa    - name: Install basic packages to build QEMU on Ubuntu 20.04
104159c5d17SCleber Rosa      package:
105159c5d17SCleber Rosa        name:
106159c5d17SCleber Rosa        # Originally from tests/docker/dockerfiles/ubuntu2004.docker
107159c5d17SCleber Rosa          - clang-10
108159c5d17SCleber Rosa          - genisoimage
109159c5d17SCleber Rosa          - liblttng-ust-dev
110159c5d17SCleber Rosa          - libslirp-dev
111159c5d17SCleber Rosa          - netcat-openbsd
112159c5d17SCleber Rosa      when:
113159c5d17SCleber Rosa        - ansible_facts['distribution'] == 'Ubuntu'
114159c5d17SCleber Rosa        - ansible_facts['distribution_version'] == '20.04'
115d7c2e2b3SCleber Rosa
11693c9aeedSAlex Bennée    - name: Install armhf cross-compile packages to build QEMU on AArch64 Ubuntu 20.04
11793c9aeedSAlex Bennée      package:
11893c9aeedSAlex Bennée        name:
11993c9aeedSAlex Bennée          - binutils-arm-linux-gnueabihf
12093c9aeedSAlex Bennée          - gcc-arm-linux-gnueabihf
12193c9aeedSAlex Bennée          - libblkid-dev:armhf
12293c9aeedSAlex Bennée          - libc6-dev:armhf
12393c9aeedSAlex Bennée          - libffi-dev:armhf
12493c9aeedSAlex Bennée          - libglib2.0-dev:armhf
12593c9aeedSAlex Bennée          - libmount-dev:armhf
12693c9aeedSAlex Bennée          - libpcre2-dev:armhf
12793c9aeedSAlex Bennée          - libpixman-1-dev:armhf
12893c9aeedSAlex Bennée          - zlib1g-dev:armhf
12993c9aeedSAlex Bennée      when:
13093c9aeedSAlex Bennée        - ansible_facts['distribution'] == 'Ubuntu'
13193c9aeedSAlex Bennée        - ansible_facts['distribution_version'] == '20.04'
13293c9aeedSAlex Bennée        - ansible_facts['architecture'] == 'aarch64'
13393c9aeedSAlex Bennée
134a9253230SPaolo Bonzini    - name: Enable EPEL repo on EL8
135a9253230SPaolo Bonzini      dnf:
136a9253230SPaolo Bonzini        name:
137a9253230SPaolo Bonzini          - epel-release
138a9253230SPaolo Bonzini        state: present
139a9253230SPaolo Bonzini      when:
140a9253230SPaolo Bonzini        - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS']
141a9253230SPaolo Bonzini        - ansible_facts['distribution_major_version'] == '8'
142a9253230SPaolo Bonzini
1434b950af8SPaolo Bonzini    - name: Enable PowerTools repo on CentOS 8
1444b950af8SPaolo Bonzini      ini_file:
1454b950af8SPaolo Bonzini        path: /etc/yum.repos.d/CentOS-Stream-PowerTools.repo
1464b950af8SPaolo Bonzini        section: powertools
1474b950af8SPaolo Bonzini        option: enabled
1484b950af8SPaolo Bonzini        value: "1"
1494b950af8SPaolo Bonzini      when:
1504b950af8SPaolo Bonzini        - ansible_facts['distribution_file_variety'] == 'CentOS'
1514b950af8SPaolo Bonzini        - ansible_facts['distribution_major_version'] == '8'
1524b950af8SPaolo Bonzini
153d7c2e2b3SCleber Rosa    - name: Install basic packages to build QEMU on EL8
154d7c2e2b3SCleber Rosa      dnf:
155d7c2e2b3SCleber Rosa        # This list of packages start with tests/docker/dockerfiles/centos8.docker
156d7c2e2b3SCleber Rosa        # but only include files that are common to all distro variants and present
157d7c2e2b3SCleber Rosa        # in the standard repos (no add-ons)
158d7c2e2b3SCleber Rosa        name:
159d7c2e2b3SCleber Rosa          - bzip2
160d7c2e2b3SCleber Rosa          - bzip2-devel
161a9253230SPaolo Bonzini          - capstone-devel
162d7c2e2b3SCleber Rosa          - dbus-daemon
163cb1513dfSPaolo Bonzini          - device-mapper-multipath-devel
164d7c2e2b3SCleber Rosa          - diffutils
165d7c2e2b3SCleber Rosa          - gcc
166d7c2e2b3SCleber Rosa          - gcc-c++
167d7c2e2b3SCleber Rosa          - genisoimage
168d7c2e2b3SCleber Rosa          - gettext
169d7c2e2b3SCleber Rosa          - git
170d7c2e2b3SCleber Rosa          - glib2-devel
171cb1513dfSPaolo Bonzini          - glusterfs-api-devel
172cb1513dfSPaolo Bonzini          - gnutls-devel
173d7c2e2b3SCleber Rosa          - libaio-devel
174cb1513dfSPaolo Bonzini          - libcap-ng-devel
175cb1513dfSPaolo Bonzini          - libcurl-devel
176d7c2e2b3SCleber Rosa          - libepoxy-devel
177cb1513dfSPaolo Bonzini          - libfdt-devel
178d7c2e2b3SCleber Rosa          - libgcrypt-devel
179cb1513dfSPaolo Bonzini          - libiscsi-devel
180cb1513dfSPaolo Bonzini          - libpmem-devel
181cb1513dfSPaolo Bonzini          - librados-devel
182cb1513dfSPaolo Bonzini          - librbd-devel
183cb1513dfSPaolo Bonzini          - libseccomp-devel
184cb1513dfSPaolo Bonzini          - libssh-devel
185cb1513dfSPaolo Bonzini          - libxkbcommon-devel
186d7c2e2b3SCleber Rosa          - lzo-devel
187d7c2e2b3SCleber Rosa          - make
188d7c2e2b3SCleber Rosa          - mesa-libEGL-devel
189d7c2e2b3SCleber Rosa          - nettle-devel
1900f900baeSLucas Mateus Castro (alqotel)          - ninja-build
191d7c2e2b3SCleber Rosa          - nmap-ncat
192cb1513dfSPaolo Bonzini          - numactl-devel
193d7c2e2b3SCleber Rosa          - pixman-devel
19411b4a4eeSPaolo Bonzini          - python38
195cb1513dfSPaolo Bonzini          - python3-sphinx
196d7c2e2b3SCleber Rosa          - rdma-core-devel
197cb1513dfSPaolo Bonzini          - redhat-rpm-config
198cb1513dfSPaolo Bonzini          - snappy-devel
199d7c2e2b3SCleber Rosa          - spice-glib-devel
200cb1513dfSPaolo Bonzini          - systemd-devel
201d7c2e2b3SCleber Rosa          - systemtap-sdt-devel
202d7c2e2b3SCleber Rosa          - tar
203d7c2e2b3SCleber Rosa          - zlib-devel
204d7c2e2b3SCleber Rosa        state: present
205d7c2e2b3SCleber Rosa      when:
2064b950af8SPaolo Bonzini        - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS']
207d7c2e2b3SCleber Rosa        - ansible_facts['distribution_version'] == '8'
208556ede02SLucas Mateus Castro (alqotel)
209556ede02SLucas Mateus Castro (alqotel)    - name: Install packages only available on x86 and aarch64
210556ede02SLucas Mateus Castro (alqotel)      dnf:
211556ede02SLucas Mateus Castro (alqotel)        # Spice server not available in ppc64le
212556ede02SLucas Mateus Castro (alqotel)        name:
213556ede02SLucas Mateus Castro (alqotel)          - spice-server
214cb1513dfSPaolo Bonzini          - spice-server-devel
215556ede02SLucas Mateus Castro (alqotel)        state: present
216556ede02SLucas Mateus Castro (alqotel)      when:
2174b950af8SPaolo Bonzini        - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS']
218556ede02SLucas Mateus Castro (alqotel)        - ansible_facts['distribution_version'] == '8'
219556ede02SLucas Mateus Castro (alqotel)        - ansible_facts['architecture'] == 'aarch64' or ansible_facts['architecture'] == 'x86_64'
22011b4a4eeSPaolo Bonzini
22111b4a4eeSPaolo Bonzini    - name: Check whether the Python runtime version is managed by alternatives
22211b4a4eeSPaolo Bonzini      stat:
22311b4a4eeSPaolo Bonzini        path: /etc/alternatives/python3
22411b4a4eeSPaolo Bonzini      register: python3
22511b4a4eeSPaolo Bonzini
22611b4a4eeSPaolo Bonzini    - name: Set default Python runtime to 3.8 on EL8
22711b4a4eeSPaolo Bonzini      command: alternatives --set python3 /usr/bin/python3.8
22811b4a4eeSPaolo Bonzini      when:
22911b4a4eeSPaolo Bonzini        - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS']
23011b4a4eeSPaolo Bonzini        - ansible_facts['distribution_version'] == '8'
23111b4a4eeSPaolo Bonzini        - python3.stat.islnk and python3.stat.lnk_target != '/usr/bin/python3.8'
232