1#!/bin/sh 2 3config="$1" 4target="$2" 5 6PACKAGES="tmux" 7 8echo Running as: 9id 10 11echo Environment: 12set 13 14 . .github/configs ${config} 15 16host=`./config.guess` 17echo "config.guess: $host" 18case "$host" in 19*cygwin) 20 PACKAGER=setup 21 echo Setting CYGWIN system environment variable. 22 setx CYGWIN "winsymlinks:native" 23 echo Removing extended ACLs so umask works as expected. 24 set -x 25 setfacl -b . regress 26 icacls regress /c /t /q /Inheritance:d 27 icacls regress /c /t /q /Grant ${USERNAME}:F 28 icacls regress /c /t /q /Remove:g "Authenticated Users" \ 29 BUILTIN\\Administrators BUILTIN Everyone System Users 30 takeown /F regress 31 icacls regress 32 set +x 33 PACKAGES="$PACKAGES,autoconf,automake,cygwin-devel,gcc-core" 34 PACKAGES="$PACKAGES,make,openssl,libssl-devel,zlib-devel" 35 ;; 36*-darwin*) 37 PACKAGER=brew 38 PACKAGES="automake" 39 ;; 40*) 41 PACKAGER=apt 42esac 43 44TARGETS=${config} 45 46INSTALL_FIDO_PPA="no" 47export DEBIAN_FRONTEND=noninteractive 48 49set -e 50 51if [ -x "`which lsb_release 2>&1`" ]; then 52 lsb_release -a 53fi 54 55if [ ! -z "$SUDO" ]; then 56 # Ubuntu 22.04 defaults to private home dirs which prevent the 57 # agent-getpeerid test from running ssh-add as nobody. See 58 # https://github.com/actions/runner-images/issues/6106 59 if ! "$SUDO" -u nobody test -x ~; then 60 echo ~ is not executable by nobody, adding perms. 61 chmod go+x ~ 62 fi 63 # Some of the Mac OS X runners don't have a nopasswd sudo rule. Regular 64 # sudo still works, but sudo -u doesn't. Restore the sudo rule. 65 if ! "$SUDO" grep -E 'runner.*NOPASSWD' /etc/passwd >/dev/null; then 66 echo "Restoring runner nopasswd rule to sudoers." 67 echo 'runner ALL=(ALL) NOPASSWD: ALL' |$SUDO tee -a /etc/sudoers 68 fi 69 if ! "$SUDO" -u nobody -S test -x ~ </dev/null; then 70 echo "Still can't sudo to nobody." 71 exit 1 72 fi 73fi 74 75if [ "${TARGETS}" = "kitchensink" ]; then 76 TARGETS="krb5 libedit pam sk selinux" 77fi 78 79for flag in $CONFIGFLAGS; do 80 case "$flag" in 81 --with-pam) TARGETS="${TARGETS} pam" ;; 82 --with-libedit) TARGETS="${TARGETS} libedit" ;; 83 esac 84done 85 86echo "Setting up for '$TARGETS'" 87for TARGET in $TARGETS; do 88 case $TARGET in 89 default|without-openssl|without-zlib|c89) 90 # nothing to do 91 ;; 92 clang-sanitize*) 93 PACKAGES="$PACKAGES clang-12" 94 ;; 95 cygwin-release) 96 PACKAGES="$PACKAGES libcrypt-devel libfido2-devel libkrb5-devel" 97 ;; 98 gcc-sanitize*) 99 ;; 100 clang-*|gcc-*) 101 compiler=$(echo $TARGET | sed 's/-Werror//') 102 PACKAGES="$PACKAGES $compiler" 103 ;; 104 krb5) 105 PACKAGES="$PACKAGES libkrb5-dev libnss-wrapper krb5-admin-server" 106 ;; 107 heimdal) 108 PACKAGES="$PACKAGES heimdal-dev libnss-wrapper krb5-admin-server" 109 ;; 110 libedit) 111 case "$PACKAGER" in 112 setup) PACKAGES="$PACKAGES libedit-devel" ;; 113 apt) PACKAGES="$PACKAGES libedit-dev" ;; 114 esac 115 ;; 116 *pam) 117 case "$PACKAGER" in 118 apt) PACKAGES="$PACKAGES libpam0g-dev" ;; 119 esac 120 ;; 121 sk) 122 INSTALL_FIDO_PPA="yes" 123 PACKAGES="$PACKAGES libfido2-dev libu2f-host-dev libcbor-dev" 124 ;; 125 selinux) 126 PACKAGES="$PACKAGES libselinux1-dev selinux-policy-dev libaudit-dev" 127 ;; 128 hardenedmalloc) 129 INSTALL_HARDENED_MALLOC=yes 130 ;; 131 musl) 132 PACKAGES="$PACKAGES musl-tools" 133 ;; 134 tcmalloc) 135 PACKAGES="$PACKAGES libgoogle-perftools-dev" 136 ;; 137 openssl-noec) 138 INSTALL_OPENSSL=OpenSSL_1_1_1k 139 SSLCONFOPTS="no-ec" 140 ;; 141 openssl-*) 142 INSTALL_OPENSSL=$(echo ${TARGET} | cut -f2 -d-) 143 case ${INSTALL_OPENSSL} in 144 1.1.1_stable) INSTALL_OPENSSL="OpenSSL_1_1_1-stable" ;; 145 1.*) INSTALL_OPENSSL="OpenSSL_$(echo ${INSTALL_OPENSSL} | tr . _)" ;; 146 3.*) INSTALL_OPENSSL="openssl-${INSTALL_OPENSSL}" ;; 147 esac 148 PACKAGES="${PACKAGES} putty-tools dropbear-bin" 149 ;; 150 libressl-*) 151 INSTALL_LIBRESSL=$(echo ${TARGET} | cut -f2 -d-) 152 case ${INSTALL_LIBRESSL} in 153 master) ;; 154 *) INSTALL_LIBRESSL="$(echo ${TARGET} | cut -f2 -d-)" ;; 155 esac 156 PACKAGES="${PACKAGES} putty-tools dropbear-bin" 157 ;; 158 boringssl) 159 INSTALL_BORINGSSL=1 160 PACKAGES="${PACKAGES} cmake ninja-build" 161 ;; 162 aws-lc) 163 INSTALL_AWSLC=1 164 PACKAGES="${PACKAGES} cmake ninja-build" 165 ;; 166 putty-*) 167 INSTALL_PUTTY=0.83 168 PACKAGES="${PACKAGES} cmake" 169 ;; 170 valgrind*) 171 PACKAGES="$PACKAGES valgrind" 172 ;; 173 zlib-*) 174 ;; 175 *) echo "Invalid option '${TARGET}'" 176 exit 1 177 ;; 178 esac 179done 180 181if [ "yes" = "$INSTALL_FIDO_PPA" ]; then 182 sudo apt update -qq 183 sudo apt install -qy software-properties-common 184 sudo apt-add-repository -y ppa:yubico/stable 185fi 186 187tries=3 188while [ ! -z "$PACKAGES" ] && [ "$tries" -gt "0" ]; do 189 case "$PACKAGER" in 190 apt) 191 sudo apt update -qq 192 if sudo apt install -qy $PACKAGES; then 193 PACKAGES="" 194 fi 195 ;; 196 brew) 197 if [ ! -z "PACKAGES" ]; then 198 if brew install $PACKAGES; then 199 PACKAGES="" 200 fi 201 fi 202 ;; 203 setup) 204 setup="/cygdrive/$(echo "${CYGWIN_SETUP}" | tr -d : | tr '\' '/')" 205 if "${setup}" -q -P `echo "$PACKAGES" | tr ' ' ,`; then 206 PACKAGES="" 207 fi 208 ;; 209 esac 210 if [ ! -z "$PACKAGES" ]; then 211 sleep 90 212 fi 213 tries=$(($tries - 1)) 214done 215if [ ! -z "$PACKAGES" ]; then 216 echo "Package installation failed." 217 exit 1 218fi 219 220if [ "${INSTALL_HARDENED_MALLOC}" = "yes" ]; then 221 (cd ${HOME} && 222 git clone https://github.com/GrapheneOS/hardened_malloc.git && 223 cd ${HOME}/hardened_malloc && 224 make && sudo cp out/libhardened_malloc.so /usr/lib/) 225fi 226 227if [ ! -z "${INSTALL_OPENSSL}" ]; then 228 .github/install_libcrypto.sh \ 229 "${INSTALL_OPENSSL}" /opt/openssl "${SSLCONFOPTS}" 230fi 231 232if [ ! -z "${INSTALL_LIBRESSL}" ]; then 233 if [ "${INSTALL_LIBRESSL}" = "master" ]; then 234 (mkdir -p ${HOME}/libressl && cd ${HOME}/libressl && 235 git clone https://github.com/libressl-portable/portable.git && 236 cd ${HOME}/libressl/portable && 237 git checkout ${INSTALL_LIBRESSL} && 238 sh update.sh && sh autogen.sh && 239 ./configure --prefix=/opt/libressl && 240 make && sudo make install) 241 else 242 LIBRESSL_URLBASE=https://cdn.openbsd.org/pub/OpenBSD/LibreSSL 243 (cd ${HOME} && 244 wget ${LIBRESSL_URLBASE}/libressl-${INSTALL_LIBRESSL}.tar.gz && 245 tar xfz libressl-${INSTALL_LIBRESSL}.tar.gz && 246 cd libressl-${INSTALL_LIBRESSL} && 247 ./configure --prefix=/opt/libressl && make && sudo make install) 248 fi 249fi 250 251if [ ! -z "${INSTALL_BORINGSSL}" ]; then 252 (cd ${HOME} && git clone https://boringssl.googlesource.com/boringssl && 253 cd ${HOME}/boringssl && mkdir build && cd build && 254 cmake -GNinja -DCMAKE_POSITION_INDEPENDENT_CODE=ON .. && ninja && 255 mkdir -p /opt/boringssl/lib && 256 cp ${HOME}/boringssl/build/libcrypto.a /opt/boringssl/lib && 257 cp -r ${HOME}/boringssl/include /opt/boringssl) 258fi 259 260if [ ! -z "${INSTALL_AWSLC}" ]; then 261 (cd ${HOME} && git clone --depth 1 --branch v1.46.1 https://github.com/aws/aws-lc.git && 262 cd ${HOME}/aws-lc && mkdir build && cd build && 263 cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF .. && ninja && 264 mkdir -p /opt/aws-lc/lib && 265 cp ${HOME}/aws-lc/build/crypto/libcrypto.a /opt/aws-lc/lib && 266 cp -r ${HOME}/aws-lc/include /opt/aws-lc) 267fi 268 269if [ ! -z "${INSTALL_ZLIB}" ]; then 270 (cd ${HOME} && git clone https://github.com/madler/zlib.git && 271 cd ${HOME}/zlib && ./configure && make && 272 sudo make install prefix=/opt/zlib) 273fi 274 275if [ ! -z "${INSTALL_PUTTY}" ]; then 276 .github/install_putty.sh "${INSTALL_PUTTY}" 277fi 278 279# If we're running on an ephemeral VM, set a random password and set 280# up to run the password auth test. 281if [ ! -z "${EPHEMERAL_VM}" ]; then 282 283 # This is the github "target" as specified in the yml file. 284 # In particular, ubuntu-latest sets the password field to the locked 285 # value, so unless we reset it here most of the tests will fail. 286 case "${target}" in 287 ubuntu-*) 288 echo ${target} target: setting random password. 289 openssl rand -base64 9 >regress/password 290 pw=$(tr -d '\n' <regress/password | openssl passwd -6 -stdin) 291 sudo usermod --password "${pw}" runner 292 sudo usermod --unlock runner 293 ;; 294 esac 295fi 296