]> git.arvados.org - arvados.git/blob - cmd/arvados-dev/docker-build-install.sh
16306: Add -eatmydata flag.
[arvados.git] / cmd / arvados-dev / docker-build-install.sh
1 #!/bin/bash
2 # Copyright (C) The Arvados Authors. All rights reserved.
3 #
4 # SPDX-License-Identifier: AGPL-3.0
5
6 # Build an arvados-server-easy package, then install and run it on a
7 # base OS image.
8 #
9 # Examples:
10 #
11 #    docker-build-install.sh --force-buildimage --force-installimage     # always build fresh docker images
12 #
13 #    docker-build-install.sh                                             # reuse cached docker images if possible
14
15 set -e -o pipefail
16
17 declare -A opts=()
18 while [[ $# -gt 0 ]]; do
19     arg="$1"
20     shift
21     case "$arg" in
22         --force-buildimage)
23             opts[force-buildimage]=1
24             ;;
25         --force-installimage)
26             opts[force-installimage]=1
27             ;;
28         --os)
29             opts[os]="$1"
30             shift
31             ;;
32         *)
33             echo >&2 "invalid argument '$arg'"
34             exit 2
35             ;;
36     esac
37 done
38
39 cleanup() {
40     if [[ -n "${buildctr}" ]]; then
41         docker rm "${buildctr}" || true
42     fi
43     if [[ -n "${installctr}" ]]; then
44         docker rm "${installctr}" || true
45     fi
46 }
47 trap cleanup ERR EXIT
48
49 version=$(git describe --tag --dirty)
50 osbase=${opts[os]:-debian:10}
51
52 mkdir -p /tmp/pkg
53
54 buildimage=arvados-buildpackage-${osbase}
55 if [[ "${opts[force-buildimage]}" || -z "$(docker images --format {{.Repository}} "${buildimage}")" ]]; then
56     (
57         echo >&2 building arvados-server...
58         cd cmd/arvados-server
59         go install
60     )
61     echo >&2 building ${buildimage}...
62     buildctr=${buildimage/:/-}
63     docker rm "${buildctr}" || true
64     docker run \
65            --name "${buildctr}" \
66            -v /tmp/pkg:/pkg \
67            -v "${GOPATH:-${HOME}/go}"/bin/arvados-server:/arvados-server:ro \
68            -v "$(pwd)":/arvados:ro \
69            "${osbase}" \
70            /arvados-server install \
71            -eatmydata \
72            -type package \
73            -source /arvados \
74            -package-version "${version}"
75     docker commit "${buildctr}" "${buildimage}"
76     docker rm "${buildctr}"
77     buildctr=
78 fi
79
80 pkgfile=/tmp/pkg/arvados-server-easy_${version}_amd64.deb
81 rm -v -f "${pkgfile}"
82
83 (
84     echo >&2 building arvados-dev...
85     cd cmd/arvados-dev
86     go install
87 )
88 echo >&2 building ${pkgfile}...
89 docker run --rm \
90        -v /tmp/pkg:/pkg \
91        -v "${GOPATH:-${HOME}/go}"/bin/arvados-dev:/arvados-dev:ro \
92        -v "$(pwd)":/arvados:ro \
93        "${buildimage}" \
94        eatmydata \
95        /arvados-dev buildpackage \
96        -source /arvados \
97        -package-version "${version}" \
98        -output-directory /pkg
99
100 ls -l ${pkgfile}
101 (
102     echo >&2 dpkg-scanpackages...
103     cd /tmp/pkg
104     dpkg-scanpackages . | gzip > Packages.gz
105 )
106 sourcesfile=/tmp/sources.conf.d-arvados
107 echo >$sourcesfile "deb [trusted=yes] file:///pkg ./"
108
109 installimage="arvados-installpackage-${osbase}"
110 if [[ "${opts[force-installimage]}" || -z "$(docker images --format {{.Repository}} "${installimage}")" ]]; then
111     echo >&2 building ${installimage}...
112     installctr=${installimage/:/-}
113     docker rm "${installctr}" || true
114     docker run -it \
115            --name "${installctr}" \
116            -v /tmp/pkg:/pkg:ro \
117            -v ${sourcesfile}:/etc/apt/sources.list.d/arvados-local.list:ro \
118            --env DEBIAN_FRONTEND=noninteractive \
119            "${osbase}" \
120            bash -c 'apt update && apt install -y eatmydata && eatmydata apt install -y arvados-server-easy postgresql'
121     docker commit "${installctr}" "${installimage}"
122     docker rm "${installctr}"
123     installctr=
124 fi
125
126 echo >&2 installing ${pkgfile} in ${installimage}, then starting arvados...
127 docker run -it --rm \
128        -v /tmp/pkg:/pkg:ro \
129        -v ${sourcesfile}:/etc/apt/sources.list.d/arvados-local.list:ro \
130        "${installimage}" \
131        bash -c 'apt update && DEBIAN_FRONTEND=noninteractive eatmydata apt install --reinstall -y arvados-server-easy postgresql && /etc/init.d/postgresql start && /var/lib/arvados/bin/arvados-server init -cluster-id x1234 && /var/lib/arvados/bin/arvados-server boot -listen-host 0.0.0.0'