summaryrefslogtreecommitdiffstats
path: root/vagrant/lib/bootstrap-functions.sh
blob: 499589fd8479097bd4cec8ce8eaac0c45be6bcbe (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
#!/bin/bash

deb_enable_serial_console() {
# enable grub and login on serial console

    echo <<EOF>> /etc/default/grub
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=38400 --unit=0 --word=8 --parity=no --stop=1"
EOF
    update-grub
}

deb_probe_modules() {
    for mod in "$@"
    do
	modprobe ${mod}
    done
}

deb_enable_modules() {
    for mod in "$@"
    do
	echo ${mod} >> /etc/modules
    done
}

deb_aptconf_batchconf() {
    cat <<EOF >> /etc/apt/apt.conf
APT {
  Get {
    Assume-Yes "true";
    allow-change-held-packages "true";
    allow-downgrades "true";
    allow-remove-essential "true";
  };
};

Dpkg::Options {
   "--force-confdef";
   "--force-confold";
};

EOF
}

deb_sync_minor() {
    echo '---> Updating OS'
    # Standard update + upgrade dance
    apt-get -qq update
    apt-get -qq upgrade
    apt-get -qq dist-upgrade
}

deb_correct_shell() {
    echo '---> Correcting system shell'
    # Fix the silly notion that /bin/sh should point to dash by pointing it to bash
    update-alternatives --install /bin/sh sh /bin/bash 100
}

deb_flush() {
    echo '---> Flushing extra packages and package cache'
    apt-get -qq autoremove
    apt-get -qq clean
}

deb_add_ppa() {
    echo "---> Adding '$1' PPA"
    apt-get -qq install software-properties-common
    apt-add-repository -y $1
    apt-get -qq update
}

deb_install_pkgs() {
    LSB_PATH=$(which lsb_release)

    if [ $? == 0 ]
    then
        VERSION=$(lsb_release -r | awk '{print $2}')
        DIST=$(lsb_release -i | awk '{print $3}')
        CODENAME=$(lsb_release -c | awk '{print $2}')
    else
        ISSUE_TXT=$(head -1 /etc/issue)
        DIST=$(echo "${ISSUE_TXT}" | awk '{print $1}')
        if [ "$DIST" = "Ubuntu" ]
        then
            VERSION=$(echo "${ISSUE_TXT}" | awk '{print $2}' | sed -e 's/^(\d+\.\d+)(\.\d+)?$/\1/')
        elif [ "$DIST" = "Debian" ]
        then
            VERSION=$(echo "${ISSUE_TXT}" | awk '{print $3}')
        else
            echo "Unrecognized distribution: ${DIST}"
        fi
    fi

    echo "---> Detected [${DIST} v${VERSION} (${CODENAME})]"

    PACKAGES="" # initialize PACKAGES
    if [ "$VERSION" = '14.04' ]
    then
        # openjdk-8-jdk is not available in 14.04 repos by default
	deb_add_ppa ppa:openjdk-r/ppa

        # Install OpenJDK v8 and v7
        PACKAGES="$PACKAGES openjdk-8-jdk-headless openjdk-7-jdk"
    else
        # Install default jdk
        PACKAGES="$PACKAGES default-jdk-headless"

	# Install plymouth label and themes to get rid of initrd warnings / errors
	apt-get -qq install plymouth-themes plymouth-label
    fi

    # Install build tools - should match vpp/Makefile DEB_DEPENDS variable
    PACKAGES="$PACKAGES curl build-essential autoconf automake bison libssl-dev ccache"
    PACKAGES="$PACKAGES debhelper dkms git libtool libganglia1-dev libapr1-dev dh-systemd"
    PACKAGES="$PACKAGES libconfuse-dev git-review exuberant-ctags cscope"


    # Install interface manipulation tools, editor, debugger and lsb
    PACKAGES="$PACKAGES iproute2 bridge-utils vim gdb lsb-release"

    # Install latest kernel and uio
    PACKAGES="$PACKAGES linux-image-extra-virtual linux-headers-virtual"

    # $$$ comment out for the moment
    # PACKAGES="$PACKAGES maven3"

    # Install virtualenv for test execution
    PACKAGES="$PACKAGES python-virtualenv python-pip python-dev"

    echo '---> Installing packages'
    # disable double quoting check
    # shellcheck disable=SC2086
    apt-get -qq install ${PACKAGES}

}

deb_enable_hugepages() {
    # Setup for hugepages using sysctl so it persists across reboots
    sysctl -w vm.nr_hugepages=1024

    mkdir -p /mnt/huge
    echo "hugetlbfs       /mnt/huge  hugetlbfs       defaults        0 0" >> /etc/fstab
}

deb_mount_hugepages() {
    mount /mnt/huge
}

deb_reup_certs() {
    # update CA certificates
    echo '---> Forcing CA certificate update'
    update-ca-certificates -f
}

deb_remove_pkgs() {
    echo '---> Removing unattended-upgrades packge to avoid it locking /var/lib/dpkg/lock'
    apt-get remove unattended-upgrades
}

deb_disable_apt_systemd_daily() {
    echo '---> Stopping and disabling apt.systemd.daily to avoid it locking /var/lib/dpkg/lock'
    systemctl stop apt.systemd.daily
    systemctl disable apt.systemd.daily
}

rh_clean_pkgs() {
    echo '---> Cleaning caches'
    yum clean all -q
}

rh_update_pkgs() {
    echo '---> Updating OS'
    yum upgrade -q -y
}

rh_install_pkgs() {
    echo '---> Installing tools'

    # Install build tools
    yum install -q -y @development redhat-lsb glibc-static java-1.8.0-openjdk-devel yum-utils \
                      openssl-devel apr-devel

    # Install python development
    yum search python34-devel 2>&1 | grep -q 'No matches'
    if [ $? -eq 0 ]
    then
	echo '---> Installing python-devel'
        yum install -q -y python-devel
    else
	echo '---> Installing python34-devel'
        yum install -q -y python34-devel
    fi

    echo '---> Configuring EPEL'
    # Install EPEL
    yum install -q -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

    # Install components to build Ganglia modules
    yum install -q -y --enablerepo=epel {libconfuse,ganglia}-devel mock

    # Install debuginfo packages
    debuginfo-install -q -y glibc-2.17-106.el7_2.4.x86_64 openssl-libs-1.0.1e-51.el7_2.4.x86_64 zlib-1.2.7-15.el7.x86_64
}