From 5fd5479be1b72b5ebcdf44d320c64ac3f61b70a7 Mon Sep 17 00:00:00 2001 From: Yorhel Date: Sun, 12 Jan 2020 15:00:16 +0100 Subject: Docker: Switch to Alpine Main reason is because I'm more familiar with it, it has less weird surprises than Ubuntu (well, apart from musl + busybox, but that only helps increase VNDB's portability) and it's easier to update to later software versions. Current image comes with PostgreSQL 12 and Perl 5.30, which I will no doubt want to use in the future. --- Dockerfile | 57 +++++++++++++++++++++-------------------------------- Makefile | 2 +- util/docker-init.sh | 30 ++++++++++++---------------- 3 files changed, 37 insertions(+), 52 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6ac0e4f0..5150a9b7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,46 +1,35 @@ -FROM ubuntu:bionic +FROM alpine:3.11 MAINTAINER Yoran Heling -RUN apt-get update \ - && apt-get install -y locales \ - && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 - -ENV LANG en_US.utf8 - -RUN apt-get install -y tzdata \ - && apt-get install -y --no-install-recommends \ - build-essential \ - cpanminus \ +RUN apk add --no-cache \ + build-base \ curl \ git \ graphviz \ imagemagick \ - libalgorithm-diff-xs-perl \ - libanyevent-http-perl \ - libanyevent-irc-perl \ - libanyevent-perl \ - libcrypt-urandom-perl \ - libdbd-pg-perl \ - libhttp-server-simple-perl \ - libimage-magick-perl \ - libjson-xs-perl \ - libperlio-gzip-perl \ - libpq-dev \ - libtext-multimarkdown-perl \ - libxml-parser-perl \ + imagemagick-perlmagick \ + perl-anyevent \ + perl-app-cpanminus \ + perl-dbd-pg \ + perl-dev \ + perl-json-xs \ + perl-module-build \ + perl-xml-parser \ postgresql \ - && cpanm -vn \ + postgresql-dev \ + zlib-dev \ + && cpanm -nq \ + Algorithm::Diff::XS \ + AnyEvent::HTTP \ + AnyEvent::IRC \ AnyEvent::Pg \ Crypt::ScryptKDF \ - SQL::Interp - -# Get TUWF from Git; I tend to experiment with VNDB before releasing new versions to CPAN. -# Get Elm from the binaries. -RUN cd /root \ - && git clone git://g.blicky.net/tuwf.git \ - && cd tuwf \ - && perl Build.PL \ - && ./Build install \ + Crypt::URandom \ + HTTP::Server::Simple \ + PerlIO::gzip \ + SQL::Interp \ + Text::MultiMarkdown \ + git://g.blicky.net/tuwf.git \ && curl -sL https://github.com/elm/compiler/releases/download/0.19.1/binary-for-linux-64-bit.gz | zcat >/usr/bin/elm \ && chmod 755 /usr/bin/elm \ && touch /var/vndb-docker-image diff --git a/Makefile b/Makefile index c50a5cda..60f36ed2 100644 --- a/Makefile +++ b/Makefile @@ -111,7 +111,7 @@ static/f/vndb.min.js: static/f/vndb.js # Order of JS files matters, so we read an '//order:x' comment from the files and sort by that. # Files without that comment are assumed to have '//order:4'. # (This trick will not work if we ever add JS files generated by this Makefile) -JS_FILES=$(shell find elm \! -path 'elm/elm-stuff/*' -name '*.js' -exec sh -c "echo \`grep -Po '(?<=^//order:)[0-9]' \"{}\" || echo 4\` \"{}\"" \; | sort | sed 's/..//') +JS_FILES=$(shell find elm \! -path 'elm/elm-stuff/*' -name '*.js' -exec sh -c "echo \`grep -Eo '^// *order: *[0-9]+' \"{}\" || echo 4\` \"{}\"" \; | sed -E 's/\/\/ *order: *//' | sort | sed 's/..//') ELM_FILES=elm/*.elm elm/*/*.elm ELM_MODULES=$(shell grep -l '^main =' ${ELM_FILES} | sed 's/^elm\///') diff --git a/util/docker-init.sh b/util/docker-init.sh index d6994583..7555fe51 100755 --- a/util/docker-init.sh +++ b/util/docker-init.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh if ! test -f /var/vndb-docker-image; then echo "This script should only be run from within the VNDB docker container." @@ -18,27 +18,23 @@ mkdevuser() { USER_UID=`stat -c '%u' /var/www` USER_GID=`stat -c '%g' /var/www` if test $USER_UID -eq 0; then - groupadd devgroup - useradd -m -s /bin/bash devuser + addgroup devgroup + adduser -s /bin/sh devuser else - groupadd -g $USER_GID devgroup - useradd -u $USER_UID -g $USER_GID -m -s /bin/bash devuser + addgroup -g $USER_GID devgroup + adduser -s /bin/sh -u $USER_UID -G devgroup -D devuser fi - - echo 'LANG=en_US.UTF-8' >>/home/devuser/.profile - echo 'export LANG' >>/home/devuser/.profile - chown devuser:devgroup -R /var/run/postgresql/ + install -d -o devuser -g devgroup /run/postgresql } # Should run as devuser pg_start() { - if [ ! -d /var/www/data/docker-pg/10 ]; then - mkdir -p /var/www/data/docker-pg/10 - /usr/lib/postgresql/10/bin/pg_ctl initdb -D /var/www/data/docker-pg/10 + if [ ! -d /var/www/data/docker-pg/12 ]; then + mkdir -p /var/www/data/docker-pg/12 + initdb -D /var/www/data/docker-pg/12 --locale en_US.UTF-8 -A trust fi - echo 'local all all trust' >/var/www/data/docker-pg/10/pg_hba.conf - /usr/lib/postgresql/10/bin/pg_ctl -D /var/www/data/docker-pg/10 -l /var/www/data/docker-pg/10/logfile start + pg_ctl -D /var/www/data/docker-pg/12 -l /var/www/data/docker-pg/12/logfile start cd /var/www if test -f data/docker-pg/vndb-init-done; then @@ -66,10 +62,10 @@ pg_start() { echo "ALTER ROLE vndb_site LOGIN" | psql postgres echo "ALTER ROLE vndb_multi LOGIN" | psql postgres - if [[ $opt =~ ^[Ee] ]] + if [ $opt = e ] then psql -U vndb -f dump.sql - elif [[ $opt =~ ^[Yy] ]] + elif [ $opt = y ] then curl -L https://dl.vndb.org/dump/vndb-dev-latest.tar.gz | tar -xzf- psql -U vndb -f dump.sql @@ -90,7 +86,7 @@ pg_start() { devshell() { cd /var/www util/vndb-dev-server.pl - bash + sh } -- cgit v1.2.3