summaryrefslogtreecommitdiffstats
path: root/packer/provision/basebuild.sh
blob: fa1f4446858a22d6cc4d91c9f0761bc4f4a0396a (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
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
#!/bin/bash

# vim: ts=4 sw=4 sts=4 et tw=72 :

rh_systems() {

    # RH Install build tools
    echo "---> Installing RH build tools $(date +'%Y%m%dT%H%M%S')"
    RH_TOOLS_PKGS="@development redhat-lsb glibc-static \
      java-1.8.0-openjdk-devel yum-utils openssl-devel apr-devel indent rpm"
    yum install -y ${RH_TOOLS_PKGS}

    # Memory leakage checks
    yum install -y valgrind

    # RH Install Python dependencies
    ###REMOVED mysql-devel
    echo "---> Installing RH Python dependencies $(date +'%Y%m%dT%H%M%S')"
    RH_PYTHON_PKGS="python-devel python-virtualenv python-setuptools \
      python-pip kernel-devel epel-rpm-macros"
    pip install --upgrade pip
    yum install -y ${RH_PYTHON_PKGS}
    pip install pypcap

    # RH Install Documentation packages
    ###Removed python-pyparsing
    echo "---> Installing RH documentation packages $(date +'%Y%m%dT%H%M%S')"
    RH_DOC_PKGS="doxygen graphviz python-jinja2 asciidoc \
      dblatex source-highlight python-sphinx libxml2 libffi-devel python-cffi"
    yum install -y install ${RH_DOC_PKGS}

    # RH Install GCC packages
    echo "---> Installing RH GCC packages $(date +'%Y%m%dT%H%M%S')"
    RH_GCC_PKGS="cpp gcc c++ cmake make"
    yum install -y ${RH_GCC_PKGS}

    # RH Install components to build Ganglia modules
    echo "---> Installing RH components $(date +'%Y%m%dT%H%M%S')"
    RH_GANGLIA_MODS="libconfuse-devel ganglia-devel mock"
    yum install -y --enablerepo=epel ${RH_GANGLIA_MODS}

    # RH Install module for VPP project
    echo uio_pci_generic >> /etc/modules

    # RH Install VPP packages to shorten build times
    echo "---> Installing VPP dependencies $(date +'%Y%m%dT%H%M%S')"
    RH_VPP_PKGS="curl autoconf automake bison ccache dkms git libtool \
      libconfuse-dev git-review cscope"
    yum install -y ${RH_VPP_PKGS}

    yum groupinstall "Development Tools"
    # RH Install TLDK dependencies
    RH_TLKD_PKGS="libpcap-devel libcap-devel scapy"
    yum install -y ${RH_TLKD_PKGS}

    # RH Install Puppet packages
    PUPPET_PKGS="libxml2-devel libxslt-devel ruby-devel zlib-devel"
    yum install -y ${PUPPET_PKGS}

    # RH Install debuginfo packages
    #echo "---> Installing debug packages $(date +'%Y%m%dT%H%M%S')"
    #RH_DEBUG_PKGS="glibc openssl-libs zlib"
    #debuginfo-install -y ${RH_DEBUG_PKGS}

    # # RH Packer builds happen from the centos flavor images
    # PACKERDIR=$(mktemp -d)
    # # disable double quote checking
    # # shellcheck disable=SC2086
    # cd $PACKERDIR
    # wget https://releases.hashicorp.com/packer/0.10.1/packer_0.10.1_linux_amd64.zip
    # unzip packer_0.10.1_linux_amd64.zip -d /usr/local/bin/
    # # rename packer to avoid conflicts with cracklib
    # mv /usr/local/bin/packer /usr/local/bin/packer.io

    # # cleanup from the installation
    # # disable double quote checking
    # # shellcheck disable=SC2086
    # rm -rf $PACKERDIR
    # # cleanup from previous install process
    # if [ -d /tmp/packer ]
    # then
    #     rm -rf /tmp/packer
    # fi
}

ubuntu_systems() {

    # DEB add Toolchain repo
    sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test

    #Configuring thirdparty Nexus repo
    echo "deb [trusted=yes] https://nexus.fd.io/content/repositories/thirdparty ./" > /etc/apt/sources.list.d/FD.io.thirdparty.list

    # DEB Install PPA packages
    echo "---> Adding '$1' PPA $(date +'%Y%m%dT%H%M%S')"
    dpkg -l software-properties-common > /dev/null 2>&1 || software-properties-common

    listfile=$(perl -e "print(q{$1} =~ m{^ppa:(.+)/ppa})")-ppa-${CODENAME}.list
      if [ ! -f /etc/apt/sources.list.d/${listfile} ]
      then
        do_retry sudo apt-add-repository -y $1
      fi

    apt-get update

    # DEB cloud packages
    echo "---> Installing cloud packages $(date +'%Y%m%dT%H%M%S')"
    CLOUD_PKGS="cloud-initramfs-dyn-netconf cloud-initramfs-growroot \
      cloud-initramfs-rescuevol"
    apt install -y ${CLOUD_PKGS}

    # DEB Install Python dependencies
    echo "---> Installing Python dependencies $(date +'%Y%m%dT%H%M%S')"
    PYTHON_PKGS="python-all python-dev python-virtualenv python-setuptools \
      python-pip libssl-dev libmysqlclient-dev python2.7 libffi-dev \
      python-cffi"
    apt install -y ${PYTHON_PKGS}

    # Memory leakage checks
    apt install -y valgrind

    # DEB Install Documentation packages
    echo "---> Installing documentation packages $(date +'%Y%m%dT%H%M%S')"
    DOC_PKGS="doxygen graphviz python-pyparsing python-jinja2 asciidoc \
      dblatex source-highlight"
    apt install -y ${DOC_PKGS}

    # DEB Install the correct version of toolchain packages
    echo "---> Installing latest toolchain packages from PPA $(date +'%Y%m%dT%H%M%S')"

    #Retry to prevent timeout failure
    #echo "---> Updating package index $(date +'%Y%m%dT%H%M%S')"
    #do_retry sudo apt-get update
    #echo "<--- Updating package index $(date +'%Y%m%dT%H%M%S')"
    #echo "<--- Adding '$1' PPA $(date +'%Y%m%dT%H%M%S')"

    # DEB Install GCC packages
    echo "---> Installing GCC-5 packages $(date +'%Y%m%dT%H%M%S')"
    GCC_PKGS="cpp gcc g++ cmake lcov gcc-multilib"
    apt install -y ${GCC_PKGS}

    # DEB Install VPP packages to shorten build times
    echo "---> Installing VPP DEB_DEPENDS packages $(date +'%Y%m%dT%H%M%S')"
    VPP_PKGS="curl build-essential autoconf automake bison libssl-dev ccache \
      debhelper dkms git libtool libganglia1-dev libapr1-dev dh-systemd \
      libconfuse-dev git-review exuberant-ctags cscope indent pkg-config emacs"
    apt install -y ${VPP_PKGS}

    # DEB Install CSIT packages
    CSIT_PKGS="libxml2 libxml2-dev libxslt-dev zlib1g-dev bc unzip"
    apt install -y ${CSIT_PKGS}

    # DEB Install latest kernel and uio
    echo "---> Installing kernel image and header packages $(date +'%Y%m%dT%H%M%S')"
    DEB_PKGS="linux-image-extra-virtual linux-headers-virtual linux-headers-`uname -r`"
    apt install -y ${DEB_PKGS}

    # DEB Install deb_dpdk packages to shorten build times
    ###REMOVED sphinx-rtd-theme
    echo "---> Installing deb_dpdk packages $(date +'%Y%m%dT%H%M%S')"
    DEB_DPDK_PKGS="google-mock lsb-release dpkg-dev debian-xcontrol devscripts \
      pristine-tar dh-python python-sphinx libpcap0.8-dev libstdc++5 \
      python-scapy inkscape libxen-dev libxenstore3.0 python-sphinx-rtd-theme"
    apt install -y ${DEB_DPDK_PKGS}

    sudo apt install -y libcap-dev libpcap-dev

    TEXLIVE_PKGS="texlive-fonts-recommended tex-common texlive-base \
      texlive-binaries texlive-pictures texlive-latex-recommended \
      preview-latex-style texlive-latex-extra"
    apt install -y ${TEXLIVE_PKGS}
    echo "<--- Installing deb_dpdk packages $(date +'%Y%m%dT%H%M%S')"

    # DEB Manipulation tools, edits debugger, and LSB
    echo "---> Installing tools packages $(date +'%Y%m%dT%H%M%S')"
    TOOL_PKGS="iproute2 ethtool vlan bridge-utils vim gdb lsb-release gdbserver"
    apt install -y ${TOOL_PKGS}

    # DEB Updating CA certificates
    echo "---> Forcing CA certificate update $(date +'%Y%m%dT%H%M%S')"
      sudo update-ca-certificates -f > /dev/null 2>&1
    echo "<--- Forcing CA certificate update $(date +'%Y%m%dT%H%M%S')"
}

opensuse_systems() {

    # openSuSE Install build tools
    echo "---> Installing openSuSE build tools $(date +'%Y%m%dT%H%M%S')"
    OPENSUSE_TOOLS_PKGS="glibc-devel-static java-1_8_0-openjdk-devel yum-utils \
    openssl indent pkg-config emacs"
    zypper install -y "${OPENSUSE_TOOLS_PKGS}"

    # Memory leakage checks
    zypper install -y valgrind

    # openSuSE Install Python dependencies
    echo "---> Installing openSuSE Python dependencies $(date +'%Y%m%dT%H%M%S')"
    OPENSUSE_PYTHON_PKGS="python-devel python-virtualenv python-setuptools \
    python-pip python-wheel libmysqlclient-dev kernel-devel"
    zypper install -y "${OPENSUSE_PYTHON_PKGS}"

    # openSuSE Install Documentation packages
    echo "---> Installing openSuSE documentation packages $(date +'%Y%m%dT%H%M%S')"
    OPENSUSE_DOC_PKGS="doxygen graphviz python-jinja2 asciidoc dblatex \
    source-highlight python-sphinx libxml2 libffi-devel python-cffi \
    python-pyparsing libstdc++6 python-sphinx_rtd_theme"
    zypper install -y "${OPENSUSE_DOC_PKGS}"

    # openSuSE Install GCC packages
    echo "---> Installing openSuSE GCC packages $(date +'%Y%m%dT%H%M%S')"
    OPENSUSE_GCC_PKGS="cpp gcc gcc-c++ cmake make lcov"
    zypper install -y "${OPENSUSE_GCC_PKGS}"

    # openSuSE Install components to build Ganglia modules
    # ganglia-devel not available for 42.3
    echo "---> Installing openSuSE components $(date +'%Y%m%dT%H%M%S')"
    OPENSUSE_GANGLIA_MODS="libconfuse-devel python-mock rrdtool rrdtool-devel \
    libapr1 libapr1-devel libexpat-devel pcre-devel"
    zypper install -y "${OPENSUSE_GANGLIA_MODS}"

    # openSuSE Install VPP packages to shorten build times
    echo "---> Installing VPP dependencies $(date +'%Y%m%dT%H%M%S')"
    OPENSUSE_VPP_PKGS="curl autoconf automake bison ccache git libtool \
    git-review ctags cscope libxml2-tools unzip lsb-release devscripts"
    zypper install -y "${OPENSUSE_VPP_PKGS}"

    # openSuSE Install TLDK dependencies
    OPENSUSE_TLKD_PKGS="libpcap-devel libcap-devel"
    yum install -y "${OPENSUSE_TLKD_PKGS}"
    zypper -n install -t pattern devel_basis

    # openSuSE Manipulation tools, edits debugger, and LSB
    echo "---> Installing tools packages $(date +'%Y%m%dT%H%M%S')"
    TOOL_PKGS="iproute2 ethtool vlan bridge-utils vim gdb  gdbserver"
    zypper install -y "${TOOL_PKGS}"


    # openSuSE Install Puppet packages
    PUPPET_PKGS="libxml2-devel libxslt-devel ruby-devel zlib-devel"
    zypper install -y "${PUPPET_PKGS}"

}

all_systems() {

    echo 'Configure keep alive to prevent timeout during testing'
    local SSH_CFG=/etc/ssh/ssh_config
    echo "TCPKeepAlive        true" | sudo tee -a ${SSH_CFG} >/dev/null 2>&1
    echo "ServerAliveCountMax 30"   | sudo tee -a ${SSH_CFG} >/dev/null 2>&1
    echo "ServerAliveInterval 10"   | sudo tee -a ${SSH_CFG} >/dev/null 2>&1

    # Following installs hashicorp's packer binary which is required  for
    # ci-management-{verify,merge}-packer jobs
    mkdir /tmp/packer.io
    cd /tmp/packer.io
    wget https://releases.hashicorp.com/packer/0.12.2/packer_0.12.2_linux_amd64.zip
    unzip packer_0.12.2_linux_amd64.zip -d /usr/local/bin/
    # note: rename to packer.io to avoid conflict with cracklib packer
    mv /usr/local/bin/packer /usr/local/bin/packer.io

    # Install packagecloud.io
    gem install package_cloud
}

echo "---> Detecting OS"
ORIGIN=$(facter operatingsystem | tr '[:upper:]' '[:lower:]')

case "${ORIGIN}" in
    fedora|centos|redhat)
        echo "---> RH type system detected"
        rh_systems
    ;;
    ubuntu)
        echo "---> Ubuntu system detected"
        ubuntu_systems
    ;;
    opensuse)
        echo "---> openSuSE system detected"
        opensuse_systems
    ;;
    *)
        echo "---> Unknown operating system"
    ;;
esac

# execute steps for all systems
all_systems