-
Notifications
You must be signed in to change notification settings - Fork 31
/
setup.sh
executable file
·145 lines (122 loc) · 4.83 KB
/
setup.sh
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
#!/usr/bin/env bash
#
# Copyright 2018, 2020 Delphix
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
TOP="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
source "$TOP/lib/common.sh"
logmust check_running_system
check_env DEFAULT_GIT_BRANCH
#
# Update the sources.list file to point to our internal package mirror. If no
# mirror url is passed in, then the latest mirror snapshot is used.
#
function configure_apt_sources() {
local package_mirror_url
local primary_url="$DELPHIX_PACKAGE_MIRROR_MAIN"
local secondary_url="$DELPHIX_PACKAGE_MIRROR_SECONDARY"
if [[ -z "$primary_url" ]] || [[ -z "$secondary_url" ]]; then
local latest_url="http://linux-package-mirror.delphix.com/"
if is_release_branch; then
package_mirror_url="${latest_url}releases/${DELPHIX_RELEASE_VERSION}"
else
latest_url+="${DEFAULT_GIT_BRANCH}/latest/"
package_mirror_url=$(curl -LfSs -o /dev/null -w '%{url_effective}' \
"$latest_url" || die "Could not curl $latest_url")
# Remove trailing slash, if present.
package_mirror_url="${package_mirror_url%/}"
fi
[[ -z "$primary_url" ]] && primary_url="${package_mirror_url}/ubuntu"
[[ -z "$secondary_url" ]] && secondary_url="${package_mirror_url}/ppas"
fi
#
# Store the package mirror in a file so that it can be added to a
# package build's metadata via store_build_info().
#
echo "$primary_url" >"$TOP/PACKAGE_MIRROR_URL_MAIN"
echo "$secondary_url" >"$TOP/PACKAGE_MIRROR_URL_SECONDARY"
#
# Remove other sources in sources.list.d if they are present.
#
[[ -d /etc/apt/sources.list.d ]] && (
logmust sudo rm -rf /etc/apt/sources.list.d ||
die "Could not remove /etc/apt/sources.list.d"
)
sudo bash -c "cat <<-EOF >/etc/apt/sources.list
deb ${primary_url} ${UBUNTU_DISTRIBUTION} main restricted universe multiverse
deb-src ${primary_url} ${UBUNTU_DISTRIBUTION} main restricted universe multiverse
deb ${primary_url} ${UBUNTU_DISTRIBUTION}-updates main restricted universe multiverse
deb-src ${primary_url} ${UBUNTU_DISTRIBUTION}-updates main restricted universe multiverse
deb ${primary_url} ${UBUNTU_DISTRIBUTION}-security main restricted universe multiverse
deb-src ${primary_url} ${UBUNTU_DISTRIBUTION}-security main restricted universe multiverse
deb ${primary_url} ${UBUNTU_DISTRIBUTION}-backports main restricted universe multiverse
deb-src ${primary_url} ${UBUNTU_DISTRIBUTION}-backports main restricted universe multiverse
deb ${secondary_url} ${UBUNTU_DISTRIBUTION} main multiverse universe
deb ${secondary_url} ${UBUNTU_DISTRIBUTION}-updates main multiverse universe
EOF" || die "/etc/apt/sources.list could not be updated"
logmust sudo apt-key add "$TOP/resources/delphix-secondary-mirror.key"
}
#
# Some packages require cause a spike in memory usage during the build, so
# we add a swap file to prevent the oom-killer from terminating the build.
#
function add_swap() {
local rootfs
local swapfile
swapfile="/swapfile"
rootfs=$(awk '$2 == "/" { print $3 }' /proc/self/mounts)
#
# If the root filesystem is ZFS, we assume we're running on a
# Delphix based buildserver, and assume swap is already enabled;
# the Delphix buildserver should enable swap for us.
#
if [[ "$rootfs" == "zfs" ]]; then
return
fi
# Swap already enabled, nothing to do.
if sudo swapon --show | grep -q "$swapfile"; then
return
fi
logmust sudo fallocate -l 4G "$swapfile"
logmust sudo chmod 600 "$swapfile"
logmust sudo mkswap "$swapfile"
logmust sudo swapon "$swapfile"
}
logmust configure_apt_sources
logmust sudo apt-get update
#
# - debhelper is used to build most Debian packages. It is required by
# the dpkg_buildpackage_default() command.
# - devscripts provides dch, which is used to automatically generate and update
# changelog entries. It is required by the dpkg_buildpackage_default()
# command.
# - equivs is used by the mk-build-deps utility which is used to install
# build dependencies from a control file.
# - install_shfmt and shellcheck are needed for - make check - to be able to
# make sure style checks are fine.
# - jq is used to generate a JSON formatted metadata file by some packages.
#
logmust install_pkgs \
build-essential \
debhelper \
devscripts \
equivs \
rsync \
shellcheck \
jq
logmust install_shfmt
logmust add_swap
logmust git config --global user.email "[email protected]"
logmust git config --global user.name "Delphix Engineering"
logmust sudo touch /run/linux-pkg-setup