From 7128327294ca1af70867cf766aa4384b224549be Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Thu, 11 Jul 2019 14:40:18 +0200 Subject: [PATCH 1/5] Dockerfile: run apt-get with 'DEBIAN_FRONTEND=noninteractive' to avoid user interaction Without that setting, the docker build fails to install postfix. See https://askubuntu.com/questions/556385/how-can-i-install-apt-packages-non-interactively for further details. Fixes https://github.com/haskell/hackage-server/issues/835. --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5913057f2..e349f16d5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,8 +23,8 @@ RUN apt-add-repository ppa:hvr/ghc RUN apt-get update # Dependencies -RUN apt-get install -yy unzip libicu-dev postfix -RUN apt-get install -y ghc-8.2.1 cabal-install-2.0 +RUN DEBIAN_FRONTEND=noninteractive apt-get install -y unzip libicu-dev postfix +RUN DEBIAN_FRONTEND=noninteractive apt-get install -y ghc-8.2.1 cabal-install-2.0 ENV PATH /opt/ghc/bin:$PATH RUN cabal update From e5dc04768697dae97d6d81f535371bba2cc03afa Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Thu, 11 Jul 2019 14:44:32 +0200 Subject: [PATCH 2/5] Dockerfile: ghc-8.2.1 no longer exists; use version 8.2.2 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e349f16d5..1184310b0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,7 +24,7 @@ RUN apt-get update # Dependencies RUN DEBIAN_FRONTEND=noninteractive apt-get install -y unzip libicu-dev postfix -RUN DEBIAN_FRONTEND=noninteractive apt-get install -y ghc-8.2.1 cabal-install-2.0 +RUN DEBIAN_FRONTEND=noninteractive apt-get install -y ghc-8.2.2 cabal-install-2.0 ENV PATH /opt/ghc/bin:$PATH RUN cabal update From bed385a302eefe0e80a389067755b7389a64597f Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Thu, 11 Jul 2019 14:53:32 +0200 Subject: [PATCH 3/5] Dockerfile: we need cabal-install 2.4.x to parse the Cabal file Older versions fail with: cabal: ./hackage-server.cabal:347: Parse of field 'build-depends' failed. --- Dockerfile | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1184310b0..b55285166 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,9 +24,9 @@ RUN apt-get update # Dependencies RUN DEBIAN_FRONTEND=noninteractive apt-get install -y unzip libicu-dev postfix -RUN DEBIAN_FRONTEND=noninteractive apt-get install -y ghc-8.2.2 cabal-install-2.0 +RUN DEBIAN_FRONTEND=noninteractive apt-get install -y ghc-8.2.2 cabal-install-2.4 ENV PATH /opt/ghc/bin:$PATH -RUN cabal update +RUN cabal v1-update # Required Header files RUN apt-get install -y zlib1g-dev libssl-dev @@ -35,13 +35,13 @@ RUN apt-get install -y zlib1g-dev libssl-dev RUN mkdir /build WORKDIR /build ADD ./hackage-server.cabal ./hackage-server.cabal -RUN cabal sandbox init +RUN cabal v1-sandbox init # TODO: Switch to Nix-style cabal new-install -RUN cabal install --only-dependencies --enable-tests -j --force-reinstalls +RUN cabal v1-install --only-dependencies --enable-tests -j --force-reinstalls ENV PATH /build/.cabal-sandbox/bin:$PATH # needed for creating TUF keys -RUN cabal install hackage-repo-tool +RUN cabal v1-install hackage-repo-tool # add code # note: this must come after installing the dependencies, such that @@ -56,13 +56,13 @@ RUN hackage-repo-tool create-root --keys keys -o datafiles/TUF/root.json RUN hackage-repo-tool create-mirrors --keys keys -o datafiles/TUF/mirrors.json # build & test & install hackage -RUN cabal configure -f-build-hackage-mirror --enable-tests -RUN cabal build +RUN cabal v1-configure -f-build-hackage-mirror --enable-tests +RUN cabal v1-build # tests currently don't pass: the hackage-security work introduced some # backup/restore errors (though they look harmless) # see https://github.com/haskell/hackage-server/issues/425 -#RUN cabal test -RUN cabal copy && cabal register +# RUN cabal v1-test +RUN cabal v1-copy && cabal v1-register # setup server runtime environment RUN mkdir /runtime From 86caeb285c52b78667cf45a3f65562b3c0dd2206 Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Thu, 11 Jul 2019 19:10:33 +0200 Subject: [PATCH 4/5] Dockerfile: clean up the new-style builds --- Dockerfile | 42 +++++++++--------------------------------- 1 file changed, 9 insertions(+), 33 deletions(-) diff --git a/Dockerfile b/Dockerfile index b55285166..40a6962f4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,56 +13,32 @@ FROM ubuntu RUN apt-get update - -# Install apt-add-repository RUN apt-get install -y software-properties-common - -# Use Herbert's PPA on Ubuntu for getting GHC and cabal-install RUN apt-add-repository ppa:hvr/ghc - RUN apt-get update - -# Dependencies RUN DEBIAN_FRONTEND=noninteractive apt-get install -y unzip libicu-dev postfix RUN DEBIAN_FRONTEND=noninteractive apt-get install -y ghc-8.2.2 cabal-install-2.4 ENV PATH /opt/ghc/bin:$PATH -RUN cabal v1-update - -# Required Header files +RUN cabal v2-update RUN apt-get install -y zlib1g-dev libssl-dev - -# haskell dependencies RUN mkdir /build WORKDIR /build -ADD ./hackage-server.cabal ./hackage-server.cabal -RUN cabal v1-sandbox init -# TODO: Switch to Nix-style cabal new-install -RUN cabal v1-install --only-dependencies --enable-tests -j --force-reinstalls -ENV PATH /build/.cabal-sandbox/bin:$PATH - -# needed for creating TUF keys -RUN cabal v1-install hackage-repo-tool - -# add code -# note: this must come after installing the dependencies, such that -# we don't need to rebuilt the dependencies every time the code changes -ADD . /build - -# generate keys (needed for tests) +ADD hackage-server.cabal cabal.project ./ +RUN cabal v2-build --only-dependencies --enable-tests -j +RUN cabal v2-install hackage-repo-tool +ENV PATH /root/.cabal/bin:$PATH +ADD . ./ RUN hackage-repo-tool create-keys --keys keys RUN cp keys/timestamp/*.private datafiles/TUF/timestamp.private RUN cp keys/snapshot/*.private datafiles/TUF/snapshot.private RUN hackage-repo-tool create-root --keys keys -o datafiles/TUF/root.json RUN hackage-repo-tool create-mirrors --keys keys -o datafiles/TUF/mirrors.json - -# build & test & install hackage -RUN cabal v1-configure -f-build-hackage-mirror --enable-tests -RUN cabal v1-build +RUN cabal v2-build # tests currently don't pass: the hackage-security work introduced some # backup/restore errors (though they look harmless) # see https://github.com/haskell/hackage-server/issues/425 -# RUN cabal v1-test -RUN cabal v1-copy && cabal v1-register +#RUN cabal v2-test +RUN cabal v2-install -j . # setup server runtime environment RUN mkdir /runtime From f4169620d4a90d1c8660781c765dee3a56f63660 Mon Sep 17 00:00:00 2001 From: Peter Simons Date: Fri, 12 Jul 2019 16:20:40 +0200 Subject: [PATCH 5/5] Dockerfile: build with the HEAD version of cabal-install This is necessary to avoid https://github.com/haskell/cabal/issues/6125. Fixes https://github.com/haskell/cabal/issues/6125 at last. --- Dockerfile | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 40a6962f4..9a8c8d8f2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,35 +10,43 @@ # Docker> # hackage-server run --static-dir=datafiles # +# Set up the system environment. FROM ubuntu - RUN apt-get update RUN apt-get install -y software-properties-common RUN apt-add-repository ppa:hvr/ghc RUN apt-get update -RUN DEBIAN_FRONTEND=noninteractive apt-get install -y unzip libicu-dev postfix RUN DEBIAN_FRONTEND=noninteractive apt-get install -y ghc-8.2.2 cabal-install-2.4 ENV PATH /opt/ghc/bin:$PATH RUN cabal v2-update -RUN apt-get install -y zlib1g-dev libssl-dev + +# Install current HEAD version of cabal-install. +RUN DEBIAN_FRONTEND=noninteractive apt-get install -y curl zlib1g-dev +WORKDIR /tmp +RUN curl --silent -L https://github.com/haskell/cabal/tarball/dc138034d469973fee43af86764567e4202ca84b | tar xz +WORKDIR /tmp/haskell-cabal-dc13803 +RUN cabal v2-install -j cabal-install +ENV PATH /root/.cabal/bin:$PATH + +# Build hackage-server. +RUN DEBIAN_FRONTEND=noninteractive apt-get install -y zlib1g-dev libssl-dev unzip libicu-dev postfix RUN mkdir /build WORKDIR /build ADD hackage-server.cabal cabal.project ./ -RUN cabal v2-build --only-dependencies --enable-tests -j -RUN cabal v2-install hackage-repo-tool -ENV PATH /root/.cabal/bin:$PATH +RUN cabal v2-build --only-dependencies --enable-tests +RUN cabal v2-install --help +RUN cabal v2-install --installdir=/root/.cabal/bin hackage-repo-tool ADD . ./ RUN hackage-repo-tool create-keys --keys keys RUN cp keys/timestamp/*.private datafiles/TUF/timestamp.private RUN cp keys/snapshot/*.private datafiles/TUF/snapshot.private RUN hackage-repo-tool create-root --keys keys -o datafiles/TUF/root.json RUN hackage-repo-tool create-mirrors --keys keys -o datafiles/TUF/mirrors.json -RUN cabal v2-build # tests currently don't pass: the hackage-security work introduced some # backup/restore errors (though they look harmless) # see https://github.com/haskell/hackage-server/issues/425 #RUN cabal v2-test -RUN cabal v2-install -j . +RUN cabal v2-install --installdir=/root/.cabal/bin all # setup server runtime environment RUN mkdir /runtime