aboutsummaryrefslogtreecommitdiff
path: root/leg-cloud-image-centos.yaml
blob: c6d8fc8e25c3f49d1147bdcba11d95a210e5c322 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
- job:
    name: leg-cloud-image-centos
    project-type: freestyle
    defaults: global
    properties:
        - authorization:
            anonymous:
                - job-read
                - job-extended-read
            linaro:
                - job-read
                - job-extended-read
                - job-build
                - job-cancel
        - build-discarder:
            days-to-keep: 30
            num-to-keep: 30
    disabled: false
    node: docker-centos7-aarch64
    display-name: 'LEG Cloud image CentOS'
    wrappers:
        - timestamps
    builders:
        - linaro-publish-token:
            host: builds.96boards.org
        - shell: |
            #!/bin/bash

            export image_name=centos7-cloud-image

            set -ex

            trap cleanup_exit INT TERM EXIT

            cleanup_exit()
            {
              cd ${WORKSPACE}
              sudo virsh destroy ${image_name} || true
              sudo virsh undefine ${image_name} || true
              sudo rm -f /var/lib/libvirt/images/${image_name}.qcow2 ${image_name}.qcow2
              rm -rf out
            }

            sudo yum install -y qemu-img virt-install libguestfs-tools-c

            sudo virsh pool-list --all
            sudo virsh net-list --all

            cat > centos7-aarch64.ks << EOF
            reboot
            eula --agreed
            text
            firstboot --disable
            ignoredisk --only-use=vda
            keyboard --vckeymap=us --xlayouts='us'
            lang en_GB.UTF-8
            network  --bootproto=dhcp --device=eth0 --onboot=off --ipv6=auto --hostname=localhost.localdomain
            repo --name=os      --baseurl=http://mirror.centos.org/altarch/7/os/aarch64/
            repo --name=extras  --baseurl=http://mirror.centos.org/altarch/7/extras/aarch64/
            repo --name=updates --baseurl=http://mirror.centos.org/altarch/7/updates/aarch64/
            rootpw --plaintext root
            user --name centos --plaintext --password centos --homedir /home/centos --groups wheel
            timezone Europe/Warsaw --isUtc
            bootloader  --boot-drive=vda
            autopart --type=plain
            clearpart --all --initlabel --drives=vda

            %packages
            @core
            cloud-init
            chrony
            nfs-utils
            rsync
            tar
            yum-utils
            dracut-config-generic
            dracut-norescue
            -aic94xx-firmware
            -alsa-firmware
            -alsa-lib
            -alsa-tools-firmware
            -iprutils
            -ivtv-firmware
            -iwl100-firmware
            -iwl1000-firmware
            -iwl105-firmware
            -iwl135-firmware
            -iwl2000-firmware
            -iwl2030-firmware
            -iwl3160-firmware
            -iwl3945-firmware
            -iwl4965-firmware
            -iwl5000-firmware
            -iwl5150-firmware
            -iwl6000-firmware
            -iwl6000g2a-firmware
            -iwl6000g2b-firmware
            -iwl6050-firmware
            -iwl7260-firmware
            %end

            %post
            # Needed for install, not so much for cloud.
            yum -C -y remove firewalld --setopt="clean_requirements_on_remove=1"
            yum -C -y remove avahi\* Network\*

            cat > /etc/sysconfig/network << EO
            NETWORKING=yes
            NOZEROCONF=yes
            EO

            # Ensure we're not backing in a mac addr.
            cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EO
            DEVICE="eth0"
            BOOTPROTO="dhcp"
            ONBOOT="yes"
            TYPE="Ethernet"
            USERCTL="yes"
            PEERDNS="yes"
            IPV6INIT="no"
            PERSISTENT_DHCLIENT="1"
            EO

            # Let mirrors know it's cloud
            echo 'genclo' > /etc/yum/vars/infra

            # Fix selinux context
            echo "Fixing SELinux contexts."
            touch /var/log/cron
            touch /var/log/boot.log
            mkdir -p /var/cache/yum
            /usr/sbin/fixfiles -R -a restore

            # make sure firstboot doesn't start
            echo "RUN_FIRSTBOOT=NO" > /etc/sysconfig/firstboot

            # install updates (including kernel) from Linaro overlay
            curl http://repo.linaro.org/rpm/linaro-overlay/centos-7/linaro-overlay.repo > /etc/yum.repos.d/linaro-overlay.repo
            yum update -y --nogpgcheck

            # make sure that resulting initramfs will have virtio storage drivers
            echo 'add_drivers+="virtio-blk virtio-scsi"' > /etc/dracut.conf.d/add-virtio-modules.conf
            dracut -f /boot/initramfs-`rpm -qa kernel|sed -e "s/kernel-//g"`.img `rpm -qa kernel|sed -e "s/kernel-//g"`
            %end
            EOF

            sudo virt-install \
              --name ${image_name} \
              --initrd-inject centos7-aarch64.ks \
              --extra-args "ks=file:/centos7-aarch64.ks" \
              --disk=pool=default,size=10,format=qcow2,bus=virtio \
              --memory 2048 \
              --location http://mirror.centos.org/altarch/7/os/aarch64/ \
              --noreboot

            set +ex
            while [ true ]; do
              sleep 1
              vm_running=$(sudo virsh list --name --state-running | grep "^${image_name}" | wc -l)
              [ "${vm_running}" -eq "0" ] && break
            done
            set -ex

            sudo virsh list --all
            sudo virsh pool-list --all
            sudo virsh net-list --all

            mkdir out
            mv centos7-aarch64.ks out/
            sudo cp -a /var/lib/libvirt/images/${image_name}.qcow2 .
            sudo qemu-img convert -c -O qcow2 ${image_name}.qcow2 out/${image_name}.qcow2
            # extract kernel and initramfs from image
            # --unversioned-names may be handy to get vmlinuz/initrd.img names if needed
            sudo LIBGUESTFS_BACKEND=direct virt-copy-out -a ${image_name}.qcow2 /boot/ .
            sudo cp -a boot/*-reference.*.aarch64* out/
            sudo chown -R buildslave:buildslave out

            # Publish
            test -d ${HOME}/bin || mkdir ${HOME}/bin
            wget -q https://git.linaro.org/ci/publishing-api.git/blob_plain/HEAD:/linaro-cp.py -O ${HOME}/bin/linaro-cp.py
            time python ${HOME}/bin/linaro-cp.py \
              --server ${PUBLISH_SERVER} \
              --link-latest \
              out snapshots/developer-cloud/centos/cloud-image/${BUILD_NUMBER}
    publishers:
        - email:
            recipients: 'fathi.boudra@linaro.org marcin.juszkiewicz@linaro.org'