xref: /freebsd/crypto/openssh/.github/setup_ci.sh (revision af23369a6deaaeb612ab266eb88b8bb8d560c322)
1#!/bin/sh
2
3PACKAGES=""
4
5 . .github/configs $@
6
7case "`./config.guess`" in
8*cygwin)
9	PACKAGER=setup
10	echo Setting CYGWIN sustem environment variable.
11	setx CYGWIN "binmode"
12	chmod -R go-rw /cygdrive/d/a
13	umask 077
14	PACKAGES="$PACKAGES,autoconf,automake,cygwin-devel,gcc-core"
15	PACKAGES="$PACKAGES,make,openssl-devel,zlib-devel"
16	;;
17*-darwin*)
18	PACKAGER=brew
19	brew install automake
20	exit 0
21	;;
22*)
23	PACKAGER=apt
24esac
25
26TARGETS=$@
27
28INSTALL_FIDO_PPA="no"
29export DEBIAN_FRONTEND=noninteractive
30
31#echo "Setting up for '$TARGETS'"
32
33set -ex
34
35if [ -x "`which lsb_release 2>&1`" ]; then
36	lsb_release -a
37fi
38
39# Ubuntu 22.04 defaults to private home dirs which prevent the
40# agent-getpeerid test from running ssh-add as nobody.  See
41# https://github.com/actions/runner-images/issues/6106
42if [ ! -z "$SUDO" ] && ! "$SUDO" -u nobody test -x ~; then
43	echo ~ is not executable by nobody, adding perms.
44	chmod go+x ~
45fi
46
47if [ "${TARGETS}" = "kitchensink" ]; then
48	TARGETS="krb5 libedit pam sk selinux"
49fi
50
51for flag in $CONFIGFLAGS; do
52    case "$flag" in
53    --with-pam)		TARGETS="${TARGETS} pam" ;;
54    --with-libedit)	TARGETS="${TARGETS} libedit" ;;
55    esac
56done
57
58for TARGET in $TARGETS; do
59    case $TARGET in
60    default|without-openssl|without-zlib|c89)
61        # nothing to do
62        ;;
63    clang-sanitize*)
64        PACKAGES="$PACKAGES clang-12"
65        ;;
66    cygwin-release)
67        PACKAGES="$PACKAGES libcrypt-devel libfido2-devel libkrb5-devel"
68        ;;
69    gcc-sanitize*)
70        ;;
71    clang-*|gcc-*)
72        compiler=$(echo $TARGET | sed 's/-Werror//')
73        PACKAGES="$PACKAGES $compiler"
74        ;;
75    krb5)
76        PACKAGES="$PACKAGES libkrb5-dev"
77	;;
78    heimdal)
79        PACKAGES="$PACKAGES heimdal-dev"
80        ;;
81    libedit)
82	case "$PACKAGER" in
83	setup)	PACKAGES="$PACKAGES libedit-devel" ;;
84	apt)	PACKAGES="$PACKAGES libedit-dev" ;;
85	esac
86        ;;
87    *pam)
88        PACKAGES="$PACKAGES libpam0g-dev"
89        ;;
90    sk)
91        INSTALL_FIDO_PPA="yes"
92        PACKAGES="$PACKAGES libfido2-dev libu2f-host-dev libcbor-dev"
93        ;;
94    selinux)
95        PACKAGES="$PACKAGES libselinux1-dev selinux-policy-dev"
96        ;;
97    hardenedmalloc)
98        INSTALL_HARDENED_MALLOC=yes
99        ;;
100    musl)
101	PACKAGES="$PACKAGES musl-tools"
102	;;
103    tcmalloc)
104        PACKAGES="$PACKAGES libgoogle-perftools-dev"
105        ;;
106    openssl-noec)
107	INSTALL_OPENSSL=OpenSSL_1_1_1k
108	SSLCONFOPTS="no-ec"
109	;;
110    openssl-*)
111        INSTALL_OPENSSL=$(echo ${TARGET} | cut -f2 -d-)
112        case ${INSTALL_OPENSSL} in
113          1.1.1_stable)	INSTALL_OPENSSL="OpenSSL_1_1_1-stable" ;;
114          1.*)	INSTALL_OPENSSL="OpenSSL_$(echo ${INSTALL_OPENSSL} | tr . _)" ;;
115          3.*)	INSTALL_OPENSSL="openssl-${INSTALL_OPENSSL}" ;;
116        esac
117        PACKAGES="${PACKAGES} putty-tools"
118       ;;
119    libressl-*)
120        INSTALL_LIBRESSL=$(echo ${TARGET} | cut -f2 -d-)
121        case ${INSTALL_LIBRESSL} in
122          master) ;;
123          *) INSTALL_LIBRESSL="$(echo ${TARGET} | cut -f2 -d-)" ;;
124        esac
125        PACKAGES="${PACKAGES} putty-tools"
126       ;;
127    valgrind*)
128       PACKAGES="$PACKAGES valgrind"
129       ;;
130    *) echo "Invalid option '${TARGET}'"
131        exit 1
132        ;;
133    esac
134done
135
136if [ "yes" = "$INSTALL_FIDO_PPA" ]; then
137    sudo apt update -qq
138    sudo apt install -qy software-properties-common
139    sudo apt-add-repository -y ppa:yubico/stable
140fi
141
142tries=3
143while [ ! -z "$PACKAGES" ] && [ "$tries" -gt "0" ]; do
144    case "$PACKAGER" in
145    apt)
146	sudo apt update -qq
147	if sudo apt install -qy $PACKAGES; then
148		PACKAGES=""
149	fi
150	;;
151    setup)
152	if /cygdrive/c/setup.exe -q -P `echo "$PACKAGES" | tr ' ' ,`; then
153		PACKAGES=""
154	fi
155	;;
156    esac
157    if [ ! -z "$PACKAGES" ]; then
158	sleep 90
159    fi
160    tries=$(($tries - 1))
161done
162if [ ! -z "$PACKAGES" ]; then
163	echo "Package installation failed."
164	exit 1
165fi
166
167if [ "${INSTALL_HARDENED_MALLOC}" = "yes" ]; then
168    (cd ${HOME} &&
169     git clone https://github.com/GrapheneOS/hardened_malloc.git &&
170     cd ${HOME}/hardened_malloc &&
171     make -j2 && sudo cp out/libhardened_malloc.so /usr/lib/)
172fi
173
174if [ ! -z "${INSTALL_OPENSSL}" ]; then
175    (cd ${HOME} &&
176     git clone https://github.com/openssl/openssl.git &&
177     cd ${HOME}/openssl &&
178     git checkout ${INSTALL_OPENSSL} &&
179     ./config no-threads shared ${SSLCONFOPTS} \
180         --prefix=/opt/openssl &&
181     make && sudo make install_sw)
182fi
183
184if [ ! -z "${INSTALL_LIBRESSL}" ]; then
185    if [ "${INSTALL_LIBRESSL}" = "master" ]; then
186        (mkdir -p ${HOME}/libressl && cd ${HOME}/libressl &&
187         git clone https://github.com/libressl-portable/portable.git &&
188         cd ${HOME}/libressl/portable &&
189         git checkout ${INSTALL_LIBRESSL} &&
190         sh update.sh && sh autogen.sh &&
191         ./configure --prefix=/opt/libressl &&
192         make -j2 && sudo make install)
193    else
194        LIBRESSL_URLBASE=https://cdn.openbsd.org/pub/OpenBSD/LibreSSL
195        (cd ${HOME} &&
196         wget ${LIBRESSL_URLBASE}/libressl-${INSTALL_LIBRESSL}.tar.gz &&
197         tar xfz libressl-${INSTALL_LIBRESSL}.tar.gz &&
198         cd libressl-${INSTALL_LIBRESSL} &&
199         ./configure --prefix=/opt/libressl && make -j2 && sudo make install)
200    fi
201fi
202