2020-02-06 04:32:56 +01:00
#!/usr/bin/env bash
# shellcheck disable=SC1117
# Copyright 2019 Jacob Hrbek <kreyren@rixotstudio.cz>
# Distributed under the terms of the GNU General Public License v3 (https://www.gnu.org/licenses/gpl-3.0.en.html) or later
# Based in part upon 'install.sh' from rsplib (https://raw.githubusercontent.com/dreibh/rsplib/master/ci/install), which is:
# Copyright (C) 2018-2019 by Thomas Dreibholz <dreibh@iem.uni-due.de> as GPLv3 or any other GPL at your option
# shellcheck source=QA/travis-ci/travis-common.sh
2020-02-09 17:45:47 +01:00
. "QA/travis-ci/travis-common.sh"
2020-02-06 04:32:56 +01:00
# shellcheck source=QA/travis-ci/get-container.sh
2020-02-09 17:45:47 +01:00
. "QA/travis-ci/get-container.sh"
2020-02-06 04:32:56 +01:00
fixme "Travis - install.sh is disabling SC1117 as hotfix"
# Linux as-is
2020-02-09 17:45:47 +01:00
if [ " $TRAVIS_OS_NAME " = linux ] && [ -z " $DOCKER " ] && [ -z " $QEMU " ] ; then
2020-02-06 04:32:56 +01:00
2020-02-09 17:45:47 +01:00
# Update repositories based on available package manager
if command -v apt >/dev/null; then
sudo apt update || die 1 " Unable to update repositories on VARIANT ' $VARIANT ' "
elif command -v cave >/dev/null; then
cave sync || die 1 "Unable to update repositories on paludis"
2020-02-06 04:32:56 +01:00
else
2020-02-09 17:45:47 +01:00
die 256 "Unsupported package manager has been used"
2020-02-06 04:32:56 +01:00
fi
2020-02-09 17:45:47 +01:00
# Install dependencies based on variant used
case " $VARIANT " in
ubuntu-19.10)
# Install dependencies
if [ -n " $PACKAGES " ] ; then
sudo apt install -y " $PACKAGES " || die 1 " Unable to install following packages: ' $PACKAGES ' "
elif [ -z " $PACKAGES " ] ; then
info "Dependencies are not specified in PACKAGES variable"
else
die 256 "Unexpected happend while processing PACKAGES variable"
fi
; ;
*) die 2 " Unsupported variant ' $VARIANT ' has been parsed "
esac
# Do not clean repositories since docker images are not saved
2020-02-06 04:32:56 +01:00
# Linux via Docker
elif [ " $TRAVIS_OS_NAME " = linux ] && [ -n " $DOCKER " ] && [ -z " $QEMU " ] ; then
2020-02-09 17:45:47 +01:00
fixme "Fix duplicates of repository update"
case " $VARIANT " in
2020-02-09 18:24:40 +01:00
ubuntu-*| debian-*)
2020-02-09 17:45:47 +01:00
# Update repositories
docker exec " $CONTAINER " apt update || die 1 " Unable to update repositories on ' $VARIANT ' using DOCKER ' $DOCKER ' "
# Install dependencies
if [ -n " $PACKAGES " ] ; then
2020-02-09 18:32:20 +01:00
# NOTICE: DO not double quote PACKAGES
docker exec " $CONTAINER " apt install -y $PACKAGES || die 1 " Unable to install following packages on ' $CONTAINER ': ' $PACKAGES ' "
2020-02-09 17:48:58 +01:00
elif [ -z " $PACKAGES " ] ; then
2020-02-09 17:45:47 +01:00
true
else
die 256 " Resolving packages for ' $CONTAINER ' "
fi
; ;
*) die 256 " Unsupported variant ' $VARIANT ' has been parsed in DOCKER ' $DOCKER ' "
esac
info " Fetching repository for $VARIANT "
sudo docker exec " $CONTAINER " git clone " $REPOSITORY " || die 1 " Unable to fetch ' $REPOSITORY ' "
2020-02-06 04:32:56 +01:00
# MacOS X
elif [ " $TRAVIS_OS_NAME " = osx ] ; then
# Homebrew takes lots of time on runtime due to the cleanup used, this is a hotfix (https://travis-ci.community/t/macosx-brew-update-takes-too-much-time/6295)
HOMEBREW_NO_INSTALL_CLEANUP = 1 brew update || die "Unable to update brew"
info "Installing dependencies"
brew install shellcheck cppcheck shfmt || die " Unable to install dependencies on $TRAVIS_OS_NAME "
# FreeBSD via QEMU
elif [ " $TRAVIS_OS_NAME " = "linux" ] && [ " $QEMU " = "FreeBSD" ] ; then
if [ -n " $VARIANT " ] ; then
# Install packages
# Ensure the file system is true (fuse-ufs2 in write mode is unreliable!)
ssh -p 8829 -oStrictHostKeyChecking= no -i " $HOME /.ssh/id_rsa " root@localhost \
"mount -fr / ; fsck -y /dev/gpt/rootfs ; mount -fw / ; df -h"
# Basic dependencies:
ssh -p 8829 -oStrictHostKeyChecking= no -i " $HOME /.ssh/id_rsa " root@localhost \
env ASSUME_ALWAYS_YES = yes pkg update
ssh -p 8829 -oStrictHostKeyChecking= no -i " $HOME /.ssh/id_rsa " root@localhost \
env ASSUME_ALWAYS_YES = yes pkg install -y bash autoconf meson cppcheck fusefs-libs3 gcc git ninja bison libtool autoconf pkg-config indent fakeroot gzip rsync autopoint shellcheck
# Bash shell:
# Use bash, and make sure it is available under /bin/bash.
ssh -p 8829 -oStrictHostKeyChecking= no -i " $HOME /.ssh/id_rsa " root@localhost \
chsh -s /usr/local/bin/bash
ssh -p 8829 -oStrictHostKeyChecking= no -i " $HOME /.ssh/id_rsa " root@localhost \
ln -s /usr/local/bin/bash /bin/bash || true
# Ports collection:
# This is the slow method via portsnap:
# --- ssh -p 8829 -oStrictHostKeyChecking=no -i "$HOME/.ssh/id_rsa" root@localhost \
# --- "portsnap --interactive fetch extract | grep -v ^/usr/ports"
# Using Git is much faster:
ssh -p 8829 -oStrictHostKeyChecking= no -i " $HOME /.ssh/id_rsa " root@localhost \
"rm -rf /usr/ports ; git clone --depth=1 --filter=tree:0 https://github.com/freebsd/freebsd-ports /usr/ports"
# Package's dependencies:
ssh -p 8829 -oStrictHostKeyChecking= no -i " $HOME /.ssh/id_rsa " root@localhost \
"cd /travis/freebsd/*/ && ( make build-depends-list && make run-depends-list ) | sed -e 's/^.*\///g' -e 's/glib20/glib/g' | sort -u | xargs -r env ASSUME_ALWAYS_YES=yes pkg install -y"
echo "===== The FreeBSD VM is ready! ====="
elif [ -z " $VARIANT " ] ; then
die "Variable VARIANT is not set for FreeBSD via QEMU which is fatal, This should be set in travis.yml"
else
die "Unexpected in FreeBSD using QEMU"
fi
else
die " Invalid setting of TRAVIS_OS_NAME= $TRAVIS_OS_NAME , DOCKER= $DOCKER , QEMU= $QEMU ! "
fi