#!/bin/bash set -exuo pipefail export DEBIAN_FRONTEND=noninteractive echo -e "section_start:$(date +%s):install_packages\r\e[0K==> Installing packages…" apt-get clean apt-get update -q apt-get install -y --no-install-recommends \ apt-transport-https \ apt-utils \ autoconf \ automake \ bison \ bsdmainutils \ build-essential \ bzip2 \ ca-certificates \ cmake \ coreutils \ curl \ default-libmysqlclient-dev \ dirmngr \ elixir \ gettext \ git \ gnupg \ gnupg2 \ gpg \ jq \ libbz2-dev \ libcurl4 \ libcurl4-openssl-dev \ libedit-dev \ libffi-dev \ libicu-dev \ libjpeg-dev \ libkrb5-dev \ liblttng-ctl-dev \ liblttng-ctl0 \ liblzma-dev \ libncurses-dev \ libncurses5-dev \ libncursesw5-dev \ libonig-dev \ libpng-dev \ libpq-dev \ libre2-dev \ libreadline-dev \ libsqlite3-dev \ libssl-dev \ libtool \ libxml2-dev \ libxslt-dev \ libyaml-dev \ libzip-dev \ llvm \ locate \ make \ openssl \ pkg-config \ python-openssl \ re2c \ rebar \ software-properties-common \ sudo \ tk-dev \ unixodbc-dev \ unzip \ wget \ xz-utils \ zlib1g \ zlib1g-dev \ zstd echo -e "section_end:$(date +%s):install_packages\r\e[0K" echo -e "section_start:$(date +%s):install_asdf\r\e[0K==> Installing asdf…" dpkg --install /opt/toolcache/license*.deb rm -fr /root ln -s /opt/gitlab /root mkdir -p "$ASDF_DATA_DIR" git clone https://github.com/asdf-vm/asdf.git "$ASDF_DATA_DIR" cd "$ASDF_DATA_DIR" git checkout "$(git describe --abbrev=0 --tags)" # shellcheck source=/dev/null . "$ASDF_DATA_DIR"/asdf.sh while IFS= read -r line; do tool=$(echo "$line" | cut -d' ' -f1) asdf plugin-add "$tool" done < "/opt/gitlab/.tool-versions" bash "$ASDF_DATA_DIR/plugins/nodejs/bin/import-release-team-keyring" asdf install rm -fr "$ASDF_DATA_DIR/installs/rust" rm -fr "$ASDF_DATA_DIR/installs/php" asdf reshim asdf current for version in $(asdf list python); do asdf shell python "$version" pip download -d "/opt/gitlab/.config/virtualenv/app-data" pip-licenses pip setuptools wheel done wait echo -e "section_end:$(date +%s):install_asdf\r\e[0K" echo -e "section_start:$(date +%s):install_dotnet\r\e[0K==> Installing dotnet/mono…" wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/microsoft.asc.gpg wget -q -O /etc/apt/sources.list.d/microsoft-prod.list https://packages.microsoft.com/config/debian/10/prod.list apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF echo "deb https://download.mono-project.com/repo/debian stable-buster main" | tee /etc/apt/sources.list.d/mono-official-stable.list curl -o /usr/local/bin/nuget.exe https://dist.nuget.org/win-x86-commandline/latest/nuget.exe curl -o /tmp/dotnet-install.sh https://dotnet.microsoft.com/download/dotnet-core/scripts/v1/dotnet-install.sh bash /tmp/dotnet-install.sh --install-dir /opt/asdf/installs/dotnet/latest --channel LTS --version latest echo -e "section_end:$(date +%s):install_dotnet\r\e[0K" echo -e "section_start:$(date +%s):cleanup\r\e[0K==> Beginning cleanup…" apt purge -y libx11-6 libwayland-client0 apt autoremove -y rm -fr /tmp mkdir -p /tmp chmod 777 /tmp chmod +t /tmp rm -fr "$ASDF_DATA_DIR/docs" \ "$ASDF_DATA_DIR"/installs/golang/**/go/test \ "$ASDF_DATA_DIR"/installs/java/**/demo \ "$ASDF_DATA_DIR"/installs/java/**/man \ "$ASDF_DATA_DIR"/installs/java/**/sample \ "$ASDF_DATA_DIR"/installs/python/**/lib/**/test \ "$ASDF_DATA_DIR"/installs/ruby/**/lib/ruby/gems/**/cache \ "$ASDF_DATA_DIR"/installs/**/**/share \ "$ASDF_DATA_DIR"/test \ /opt/gitlab/.config/configstore/update-notifier-npm.json \ /opt/gitlab/.config/pip/selfcheck.json \ /opt/gitlab/.gem \ /opt/gitlab/.npm \ /opt/gitlab/.wget-hsts \ /etc/apache2/* \ /etc/bash_completion.d/* \ /etc/calendar/* \ /etc/cron.d/* \ /etc/cron.daily/* \ /etc/emacs/* \ /etc/fonts/* \ /etc/ldap/* \ /etc/mysql/* \ /etc/php/*/apache2/* \ /etc/profile.d/* \ /etc/systemd/* \ /etc/X11/* \ /lib/systemd/* \ /usr/lib/apache2/* \ /usr/lib/systemd/* \ /usr/lib/valgrid/* \ /usr/share/applications/* \ /usr/share/apps/* \ /usr/share/bash-completion/* \ /usr/share/calendar/* \ /usr/share/doc-base/* \ /usr/share/emacs/* \ /usr/share/fontconfig/* \ /usr/share/fonts/* \ /usr/share/gtk-doc/* \ /usr/share/icons/* \ /usr/share/menu/* \ /usr/share/pixmaps/* \ /usr/share/themes/* \ /usr/share/X11/* \ /usr/share/zsh/* \ /var/cache/* \ /var/cache/apt/archives/ \ /var/lib/apt/lists/* \ /var/lib/systemd/* \ /var/log/* echo -e "section_end:$(date +%s):cleanup\r\e[0K" echo -e "section_start:$(date +%s):compress_files\r\e[0K==> Starting compression…" zstd_command="/usr/bin/zstd -19 -T0" cd /opt tar --use-compress-program "$zstd_command" -cf /opt/asdf.tar.zst asdf & cd /opt/gitlab tar --use-compress-program "$zstd_command" -cf /opt/gitlab/.cache.tar.zst .cache & tar --use-compress-program "$zstd_command" -cf /opt/gitlab/.config.tar.zst .config & tar --use-compress-program "$zstd_command" -cf /opt/gitlab/.m2.tar.zst .m2 & tar --use-compress-program "$zstd_command" -cf /opt/gitlab/embedded.tar.zst embedded & cd /usr tar --use-compress-program "$zstd_command" -cf /usr/include.tar.zst include & tar --use-compress-program "$zstd_command" -cf /usr/share.tar.zst share & cd /usr/lib tar --use-compress-program "$zstd_command" -cf /usr/lib/elixir.tar.zst elixir & tar --use-compress-program "$zstd_command" -cf /usr/lib/erlang.tar.zst erlang & tar --use-compress-program "$zstd_command" -cf /usr/lib/gcc.tar.zst gcc & tar --use-compress-program "$zstd_command" -cf /usr/lib/git-core.tar.zst git-core & tar --use-compress-program "$zstd_command" -cf /usr/lib/llvm-7.tar.zst llvm-7 & wait # shellcheck disable=SC2114 rm -fr \ "$ASDF_DATA_DIR" \ /opt/gitlab/.m2 \ /opt/gitlab/.cache \ /opt/gitlab/.config \ /opt/gitlab/embedded \ /usr/include \ /usr/lib/elixir \ /usr/lib/erlang \ /usr/lib/gcc \ /usr/lib/git-core \ /usr/lib/llvm-7 \ /usr/share echo -e "section_end:$(date +%s):compress_files\r\e[0K"