16306: Comment out Workbench2 so health check succeeds.
[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            --tmpfs /tmp:exec,mode=01777 \
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        --tmpfs /tmp:exec,mode=01777 \
91        -v /tmp/pkg:/pkg \
92        -v "${GOPATH:-${HOME}/go}"/bin/arvados-dev:/arvados-dev:ro \
93        -v "$(pwd)":/arvados:ro \
94        "${buildimage}" \
95        eatmydata \
96        /arvados-dev buildpackage \
97        -source /arvados \
98        -package-version "${version}" \
99        -output-directory /pkg
100
101 ls -l ${pkgfile}
102 (
103     echo >&2 dpkg-scanpackages...
104     cd /tmp/pkg
105     dpkg-scanpackages . | gzip > Packages.gz
106 )
107 sourcesfile=/tmp/sources.conf.d-arvados
108 echo >$sourcesfile "deb [trusted=yes] file:///pkg ./"
109
110 installimage="arvados-installpackage-${osbase}"
111 if [[ "${opts[force-installimage]}" || -z "$(docker images --format {{.Repository}} "${installimage}")" ]]; then
112     echo >&2 building ${installimage}...
113     installctr=${installimage/:/-}
114     docker rm "${installctr}" || true
115     docker run -it \
116            --name "${installctr}" \
117            --tmpfs /tmp \
118            -v /tmp/pkg:/pkg:ro \
119            -v ${sourcesfile}:/etc/apt/sources.list.d/arvados-local.list:ro \
120            --env DEBIAN_FRONTEND=noninteractive \
121            "${osbase}" \
122            bash -c 'apt update && apt install -y eatmydata && eatmydata apt install -y arvados-server-easy postgresql'
123     docker commit "${installctr}" "${installimage}"
124     docker rm "${installctr}"
125     installctr=
126 fi
127
128 echo >&2 installing ${pkgfile} in ${installimage}, then starting arvados...
129 docker run -it --rm \
130        -v /tmp/pkg:/pkg:ro \
131        -v ${sourcesfile}:/etc/apt/sources.list.d/arvados-local.list:ro \
132        "${installimage}" \
133        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'