From 43a5848a3cedbaabd9161d958207ba8c479be0cb Mon Sep 17 00:00:00 2001 From: yuvipanda Date: Fri, 28 Jul 2017 19:27:54 -0700 Subject: [PATCH] Move a set of packages to 'base' This is inevitable - so let's just steal from a popular docker image made for this purpose --- repo2docker/detectors.py | 86 ++++++++++++++++++++++++++++++++-------- 1 file changed, 70 insertions(+), 16 deletions(-) diff --git a/repo2docker/detectors.py b/repo2docker/detectors.py index 2a9824d3..0a6ff624 100644 --- a/repo2docker/detectors.py +++ b/repo2docker/detectors.py @@ -44,6 +44,15 @@ RUN adduser --disabled-password \ ${NB_USER} WORKDIR ${HOME} +RUN apt-get update && \ + apt-get install --yes --no-install-recommends \ + {% for package in base_packages -%} + {{ package }} \ + {% endfor -%} + && apt-get purge && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + RUN apt-get update && \ apt-get install --yes \ {% for package in packages -%} @@ -127,6 +136,64 @@ class BuildPack(LoggingConfigurable): are usually installed as apt packages. """ ) + + base_packages = Set( + { + # Utils! + "git", + "tar", + "curl", + "wget", + "less", + # Include everything from the popular buildpack-deps docker image + "autoconf", + "automake", + "bzip2", + "file", + "g++", + "gcc", + "imagemagick", + "libbz2-dev", + "libc6-dev", + "libcurl4-openssl-dev", + "libdb-dev", + "libevent-dev", + "libffi-dev", + "libgdbm-dev", + "libgeoip-dev", + "libglib2.0-dev", + "libjpeg-dev", + "libkrb5-dev", + "liblzma-dev", + "libmagickcore-dev", + "libmagickwand-dev", + "libncurses-dev", + "libpng-dev", + "libpq-dev", + "libreadline-dev", + "libsqlite3-dev", + "libssl-dev", + "libtool", + "libwebp-dev", + "libxml2-dev", + "libxslt-dev", + "libyaml-dev", + "make", + "patch", + "xz-utils", + "zlib1g-dev", + }, + help=""" + Base set of apt packages that are installed for all images. + + These contain useful images that are commonly used by a lot of images, + where it would be useful to share a base docker image layer that contains + them. + + These would be installed with a --no-install-recommends option. + """ + ) + env = List( [], help=""" @@ -242,6 +309,7 @@ class BuildPack(LoggingConfigurable): labels.update(other.labels) result.labels = labels result.packages = self.packages.union(other.packages) + result.base_packages = self.base_packages.union(other.base_packages) result.path = self.path + other.path # FIXME: Deduplicate Env result.env = self.env + other.env @@ -294,7 +362,8 @@ class BuildPack(LoggingConfigurable): labels=self.labels, build_script_directives=build_script_directives, assemble_script_directives=assemble_script_directives, - build_script_files=self.build_script_files + build_script_files=self.build_script_files, + base_packages=self.base_packages ) def build(self, image_spec): @@ -330,21 +399,6 @@ class BuildPack(LoggingConfigurable): class BaseImage(BuildPack): name = "repo2docker" version = "0.1" - packages = { - # Utils! - "git", - "tar", - "curl", - "wget", - "less", - # Build tools - "build-essential", - "pkg-config", - } - - labels = { - "io.openshift.s2i.scripts-url": "image:///usr/libexec/s2i" - } env = [ ("APP_BASE", "/srv")