From 6e31552b7c9b707ca51447c8322529c2dd544f91 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Mon, 30 Sep 2019 20:25:40 +0000 Subject: [PATCH] Updated docker files to build and run an image based on devuan:ascii instead of debian:jessie. - Legacy-Id: 16784 --- docker/Dockerfile | 92 +++++++++++++++++++++++----------------- docker/docker-init.sh | 9 ++-- docker/run | 5 ++- docker/settings_local.py | 53 ++++------------------- 4 files changed, 68 insertions(+), 91 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 4309ad137..5847778bd 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -19,7 +19,7 @@ # but the database has *not* been loaded with a dump, and supporting files (drafts, charters, etc.) # have *not* been downloaded. -FROM debian:jessie +FROM dyne/devuan:ascii LABEL maintainer="Henrik Levkowetz " # Default django runserver port @@ -27,15 +27,16 @@ EXPOSE 8000 # Run apt-get noninteractive ENV DEBIAN_FRONTEND=noninteractive +ENV DEVUAN_FRONTEND=noninteractive RUN apt-get update RUN apt-get install -qy apt-transport-https -# Use backports, updates, and security updates; over https if possible -RUN echo "deb https://deb.debian.org/debian jessie main contrib non-free" > /etc/apt/sources.list -RUN echo "deb https://deb.debian.org/debian jessie-backports main contrib non-free" >> /etc/apt/sources.list -RUN echo "deb https://deb.debian.org/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list -RUN echo "deb http://security.debian.org/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list +# Use backports, updates, and security updates +RUN echo "deb http://deb.devuan.org/merged ascii main contrib non-free" > /etc/apt/sources.list +RUN echo "deb http://deb.devuan.org/merged ascii-security main contrib non-free" >> /etc/apt/sources.list +RUN echo "deb http://deb.devuan.org/merged ascii-updates main contrib non-free" >> /etc/apt/sources.list +RUN echo "deb http://deb.devuan.org/merged ascii-backports main contrib non-free" >> /etc/apt/sources.list # Install needed packages # @@ -44,27 +45,44 @@ RUN echo "deb http://security.debian.org/debian-security jessie/updates main con # 15%, about 100MB. # Fetch apt package information, and upgrade to latest package versions + RUN apt-get update RUN apt-get -qy upgrade # Install the packages we need RUN apt-get install -qy \ + build-essential \ bzip2 \ ca-certificates \ colordiff \ gawk \ gcc \ ipython \ + jq \ less \ - libfreetype6 \ - libfontconfig \ + libbz2-dev \ + libdb5.3-dev \ + libexpat1-dev \ + libffi-dev \ + libgdbm-dev \ libjpeg62-turbo-dev \ + liblzma-dev \ + libmagic1 \ + libmariadbclient-dev \ + libncurses5-dev \ + libncursesw5-dev \ + libreadline-dev \ + libsqlite3-dev \ + libssl-dev \ libsvn1 \ libxml2-dev \ libxslt-dev \ libz-dev \ locales \ + make \ man \ + mariadb-client \ + mariadb-server \ openssh-client \ patch \ procps \ @@ -77,33 +95,12 @@ RUN apt-get install -qy \ rsync \ subversion \ sudo \ + uuid-dev \ vim \ - wget - -# Install SystemV init -RUN apt-get install -qy sysvinit-core \ - && cp /usr/share/sysvinit/inittab /etc/inittab - -# Get rid of systemd -RUN apt-get remove --yes --purge --auto-remove systemd \ - && echo -e "\nPackage: systemd\nPin: release *\nPin-Priority: -1\n" > /etc/apt/preferences.d/no-systemd - -# ------------------------------------------------------------------------------ -# The following section is all about installing mysql server 5.6, instead of -# 5.5 which is provided in jessie. It's a bit convoluted. -# ------------------------------------------------------------------------------ - -# Get the key used to sign the mysql repo -RUN gpg --keyserver pgp.mit.edu --recv-keys 5072E1F5 -RUN gpg --export -a 5072E1F5 | apt-key add - - -# Install a package which will install apt sources entries for current mysql -RUN echo 'mysql-apt-config mysql-apt-config/select-server select mysql-5.6' | debconf-set-selections -RUN echo 'mysql-apt-config mysql-apt-config/repo-url string https://repo.mysql.com/apt/' | debconf-set-selections -RUN echo "deb https://repo.mysql.com/apt/debian/ jessie mysql-apt-config" >> /etc/apt/sources.list.d/mysql-apt-config.list -RUN apt-get update -RUN apt-get install -qy mysql-apt-config -RUN rm /etc/apt/sources.list.d/mysql-apt-config.list + wget \ + xz-utils\ + zile \ + zlib1g-dev # Get the key used to sign the libyang repo RUN wget -nv http://download.opensuse.org/repositories/home:liberouter/Debian_9.0/Release.key @@ -111,14 +108,14 @@ RUN apt-key add - < Release.key RUN rm Release.key # Add apt source entry for libyang -RUN echo "deb http://download.opensuse.org/repositories/home:/liberouter/Debian_8.0/ /" >> /etc/apt/sources.list.d/libyang.list +RUN echo "deb http://download.opensuse.org/repositories/home:/liberouter/Debian_9.0/ /" >> /etc/apt/sources.list.d/libyang.list # Update the package defs, and install the desired mysql from the mysql repo RUN apt-get update -RUN apt-get install -qy mysql-community-server libmysqlclient-dev libyang +RUN apt-get install -qy libyang # This is expected to exist by the mysql startup scripts: -RUN touch /etc/mysql/debian.cnf +#RUN touch /etc/mysql/debian.cnf # ------------------------------------------------------------------------------ # Get rid of installation files we don't need in the image, to reduce size @@ -154,12 +151,29 @@ RUN ln -s /usr/local/phantomjs-1.9.8-linux-x86_64/bin/phantomjs . ADD https://tools.ietf.org/tools/idnits/idnits /usr/local/bin/ RUN chmod +rx /usr/local/bin/idnits +# # Python 3 +ENV PYVER=3.6.9 +ENV PYREV=3.6 + +WORKDIR /usr/src +RUN wget -q https://www.python.org/ftp/python/$PYVER/Python-$PYVER.tar.xz +RUN tar xJf Python-$PYVER.tar.xz +RUN rm Python-$PYVER.tar.xz +WORKDIR /usr/src/Python-$PYVER/ +RUN ./configure +RUN make +RUN make altinstall +WORKDIR /usr/src +RUN rm -rf /usr/src/Python-$PYVER/ + +ENV HOSTNAME="datatracker" + ENV DDIR="/usr/local/share/datatracker" RUN mkdir -p $DDIR WORKDIR $DDIR -COPY requirements.txt ./ -RUN pip --no-cache-dir install -r requirements.txt +COPY requirements3.txt ./ +RUN pip$PYREV --no-cache-dir install -r requirements3.txt COPY settings_local.py ./ COPY setprompt ./ diff --git a/docker/docker-init.sh b/docker/docker-init.sh index 4cda79698..5d9b5d008 100644 --- a/docker/docker-init.sh +++ b/docker/docker-init.sh @@ -84,10 +84,9 @@ fi VIRTDIR="/opt/home/$USER/$TAG" echo "Checking that there's a virtual environment for $TAG ..." if [ ! -f $VIRTDIR/bin/activate ]; then - echo "Setting up python virtualenv at /opt/home/$USER ..." - mkdir -p /opt/home/$USER - mkdir $VIRTDIR - virtualenv --system-site-packages $VIRTDIR + echo "Setting up python virtualenv at $VIRTDIR ..." + mkdir -p $VIRTDIR + python3.6 -m venv $VIRTDIR echo -e " # This is from $VIRTDIR/bin/activate, to activate the # datatracker virtual python environment on docker container entry: @@ -103,7 +102,7 @@ echo "Activating the virtual python environment ..." if ! python -c "import django"; then echo "Installing requirements ..." - pip install -r /usr/local/share/datatracker/requirements.txt + pip install -r /usr/local/share/datatracker/requirements3.txt fi if [ ! -f $VIRTDIR/lib/site-python/settings_local.py ]; then diff --git a/docker/run b/docker/run index 236ad3759..a6593c0b4 100755 --- a/docker/run +++ b/docker/run @@ -230,7 +230,8 @@ else echo "" echo "Committing changes in the container to an image:" - latest=$(docker ps -lq) + image=$( docker images -q $REPO:$TAG) + latest=$(docker ps -lq -f "ancestor=$image") docker commit $latest $REPO:$TAG echo "" @@ -239,7 +240,7 @@ else DANGLING=$( docker images -f dangling=true -q ) if [ -n "$DANGLING" ]; then echo "Dangling images: $DANGLING" - docker rmi -f $DANGLING; + docker rmi -f $DANGLING fi fi diff --git a/docker/settings_local.py b/docker/settings_local.py index 0737d97a2..8fb3a3e93 100644 --- a/docker/settings_local.py +++ b/docker/settings_local.py @@ -1,4 +1,9 @@ -import os +# Copyright The IETF Trust 2007-2019, All Rights Reserved +# -*- coding: utf-8 -*- + +import six +if six.PY3: + from typing import Collection, Dict, List, Tuple # pyflakes:ignore SECRET_KEY = 'jzv$o93h_lzw4a0%0oz-5t5lk+ai=3f8x@uo*9ahu8w4i300o6' @@ -9,7 +14,7 @@ DATABASES = { 'USER': 'django', 'PASSWORD': 'RkTkDPFnKpko', }, - } + } # type: Dict[str, Dict[str, Collection[str]]] DATABASE_TEST_OPTIONS = { 'init_command': 'SET storage_engine=InnoDB', @@ -31,7 +36,7 @@ EMAIL_PORT=2025 TRAC_WIKI_DIR_PATTERN = "test/wiki/%s" TRAC_SVN_DIR_PATTERN = "test/svn/%s" TRAC_CREATE_ADHOC_WIKIS = [ -] +] # type: List[Tuple[str, str, str]] MEDIA_BASE_DIR = 'test' MEDIA_ROOT = MEDIA_BASE_DIR + '/media/' @@ -49,45 +54,3 @@ SUBMIT_YANG_IANA_MODEL_DIR = 'data/developers/ietf-ftp/yang/ianamod/' SUBMIT_YANGLINT_COMMAND = 'yanglint --verbose -p {rfclib} -p {draftlib} -p {tmplib} {model}' -API_PUBLIC_KEY_PEM = """ ------BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuIm3wBpMEhFmy40ZBNHU -jn6cMVeDwynedDtww+071mQFIyidDn0UYCTfLn8dLQDpbdoreMz9Zzb0tMygMyMb -5fsOItkEd7J5jVqpPWqlvspaa5qb5zuB8NHAxRjPfomgn0Sl1Uvwl1Gc3N2UElCb -mJ+wEK+C55YVLj1k/9GU34G//XLcSnBF7bmjcycP+z8wkAtjE51ZR2Y6oP6o11jO -yL5X7Y+1Nk9cPlUbtrvmmyXEKnjUXbRUoK4CJ87dYjFk8CHWmqolY++bgp4Ro6gK -k6RAy1XaC6uCaVnlJQKpIZ8XvJyv34ku65KUuLQMlxBbVt7z+ybrMvU7NNpCVTGp -kwIDAQAB ------END PUBLIC KEY----- -""" - -API_PRIVATE_KEY_PEM = """ ------BEGIN PRIVATE KEY----- -MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC4ibfAGkwSEWbL -jRkE0dSOfpwxV4PDKd50O3DD7TvWZAUjKJ0OfRRgJN8ufx0tAOlt2it4zP1nNvS0 -zKAzIxvl+w4i2QR3snmNWqk9aqW+ylprmpvnO4Hw0cDFGM9+iaCfRKXVS/CXUZzc -3ZQSUJuYn7AQr4LnlhUuPWT/0ZTfgb/9ctxKcEXtuaNzJw/7PzCQC2MTnVlHZjqg -/qjXWM7Ivlftj7U2T1w+VRu2u+abJcQqeNRdtFSgrgInzt1iMWTwIdaaqiVj75uC -nhGjqAqTpEDLVdoLq4JpWeUlAqkhnxe8nK/fiS7rkpS4tAyXEFtW3vP7Jusy9Ts0 -2kJVMamTAgMBAAECggEBAKV46EnbysaQ0ApKFVsbBGxZ35jnDoGcM5sqCa3GNlfC -DFFAg8SQKAsmRPIejXzjSm10qnKB7d/1iWvt6OCx5LxOaJia3MSwRwqXdxZZYRI5 -xOakFpQ76gKVMzQJUVX39w2ZstIWbEBjsDLkhXf+y+cJmgj8OHeNPqTd7Ijv13yq -B8JVFhtrARTE9X5bxxl5FMrqchVv7HyCS6FBTK+rPPaE3gK2XyiNKHokcV2NfmeF -OHqqDn9LPN4ERRU13FNv5/wvH6/Z0AXsRWFkxuCdYcVzG9xEnf/72b0jumRqnSAN -bVK+/b37SOky/L0mwfXwhQoMvePgbYE1qv2Lx4maVcECgYEA5Im7Ys2FfFAGWV3Y -eNizNHmJYXuvLVsEEYtxT1tM/yPTvlljA27s5rrXdtRDS67Hnj28b9nrHp0COlZp -GycbppQcPEKiDupLlvstdQ+b+t1MO3xAqW2ZeM47A1SmPKa7XmTAL+6ZReeN/Eg6 -QCmqY5HHANhX+OwN+zwAg9ZQlBECgYEAzrZ1qr8RBBP4/0NY3WMkAiJpluIOc6kO -8lP0tNk6FJ9OaIMAI6FKxh/7KKcgWzINWSVqz+8te5HUCUt5JWZXcn2NMkk2ufm4 -4OV0vXz3ba6RhIXtDxJW9qbihhZ+EJYPvgwWUF3W1Onu4BuirD+74LSTWG8Ko3lK -m0qbAl5s92MCgYEAuJQxHwyE6jEr35O3GWtT2WbruSsPAd/Hum/X9VL1Lf/+rXc+ -S/CUL4nqKdQoAgFIwhp0jhYAGrqOqRVPUJnWcEShRV4/yzIaGPgG78vKm+OOBWFG -TFDzqilOalM87DFxlTxkKJJZgqcQ+xhOy7GbJ03+30TcUHQ+mpIMjG5UqDECgYBG -yc8T0OiX1+seJ0cIUYokPPqh0/oU+6EFtWCIihdMtp1YRvxGN1bu8EbHTixTbpmJ -nLmuSX7u4SqWoET1XM23hG1U+iOGnpEEWy+WMHRfGDf3BRIAZkxnnRDX0F4NegYc -E/GURf5q3U2Ta4NSr2S8d7o5v5UKFGBLO8pHjmSMdwKBgQCbZMPV/ogqNbsuEXsP -rZQg+DTonX55os7Dnii715NAzzP7zaZ/RF/zEJrYKKATiaYFNIpz66wuAIX6UrcO -N1mb6IlkRXoou2mawSFAPuwOFyKHDfohlA7lCiUsgB40uc90pa1evX8tctSXOuzh -qlOfAYmntqZaggU8f3gGh7EPjw== ------END PRIVATE KEY----- -"""