Files
danbooru/config/docker/build-base-image.sh
evazion 55129b1819 Rework Dockerfile.
* Optimize Dockerfile to minimize size of the Docker image.
* Specify exact versions of important dependencies (Ruby, Node, Vips) to
  ensure our dependencies are up to date and locked to known versions.
* Install Vips from source because the version that ships with Ubuntu is too old.
* Install FFmpeg from source because otherwise using the Ubuntu package
  pulls in tons of video libraries we don't need, bloating the image.
2021-03-29 06:00:37 -05:00

99 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -xeuo pipefail
RUBY_VERSION="${RUBY_VERSION:-2.7.1}"
VIPS_VERSION="${VIPS_VERSION:-8.10.6}"
FFMPEG_VERSION="${FFMPEG_VERSION:-4.3.2}"
COMMON_BUILD_DEPS="
curl ca-certificates build-essential pkg-config git
"
RUBY_BUILD_DEPS="libssl-dev zlib1g-dev"
FFMPEG_BUILD_DEPS="libvpx-dev nasm"
VIPS_BUILD_DEPS="
libfftw3-dev libwebp-dev liborc-dev liblcms2-dev libpng-dev
libjpeg-turbo8-dev libexpat1-dev libglib2.0-dev libgif-dev libexif-dev
"
DANBOORU_RUNTIME_DEPS="
mkvtoolnix postgresql-client-12 libpq5 libxml2 libxslt1.1 zlib1g
libfftw3-3 libwebp6 libwebpmux3 libwebpdemux2 liborc-0.4.0 liblcms2-2
libpng16-16 libjpeg-turbo8 libexpat1 libglib2.0 libgif7 libexif12
libvpx6
"
apt_install() {
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends "$@"
}
install_asdf() {
git clone https://github.com/asdf-vm/asdf.git ~/.asdf
}
install_vips() {
apt_install $VIPS_BUILD_DEPS
VIPS_URL="https://github.com/libvips/libvips/releases/download/v${VIPS_VERSION}/vips-${VIPS_VERSION}.tar.gz"
curl -L "$VIPS_URL" | tar -C /usr/local/src -xzvf -
cd /usr/local/src/vips-${VIPS_VERSION}
./configure --disable-static
CFLAGS="-O2" make -j "$(nproc)"
make install
ldconfig
vips --version
}
install_ffmpeg() {
apt_install $FFMPEG_BUILD_DEPS
FFMPEG_URL="https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n${FFMPEG_VERSION}.tar.gz"
curl -L "$FFMPEG_URL" | tar -C /usr/local/src -xzvf -
cd /usr/local/src/FFmpeg-n${FFMPEG_VERSION}
./configure --disable-ffplay --disable-network --disable-doc --enable-libvpx
make -j "$(nproc)"
cp ffmpeg ffprobe /usr/local/bin
ffmpeg -version
ffprobe -version
}
install_ruby() {
apt_install $RUBY_BUILD_DEPS
asdf plugin add ruby
RUBY_BUILD_OPTS="--verbose" RUBY_CONFIGURE_OPTS="--disable-install-doc" asdf install ruby "$RUBY_VERSION"
asdf global ruby "$RUBY_VERSION"
ruby --version
}
cleanup() {
apt-get purge -y $COMMON_BUILD_DEPS $RUBY_BUILD_DEPS $VIPS_BUILD_DEPS $FFMPEG_BUILD_DEPS
apt-get purge -y --allow-remove-essential \
e2fsprogs git libglib2.0-bin libglib2.0-doc mount perl-modules-5.30 procps \
python3 readline-common shared-mime-info tzdata
apt-get autoremove -y
rm -rf \
/var/lib/apt/lists/* \
/var/log/* \
/usr/local/share/gtk-doc \
/usr/local/src \
/usr/share/doc/* \
/usr/share/info/* \
/usr/share/gtk-doc
cd /
}
apt-get update
apt_install $COMMON_BUILD_DEPS $DANBOORU_RUNTIME_DEPS
install_asdf
install_ffmpeg
install_vips
install_ruby
cleanup