diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 35d4d115f1..0000000000 --- a/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM ubuntu:xenial - -RUN apt-get update && \ - apt-get dist-upgrade --yes && \ - apt-get install --yes \ - git \ - snapcraft \ - && \ - apt-get autoclean --yes && \ - apt-get clean --yes - -# Required by click. -ENV LC_ALL C.UTF-8 -ENV SNAPCRAFT_SETUP_CORE 1 diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index bffb2192c4..0000000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,74 +0,0 @@ -ARG RISK=edge -ARG UBUNTU=xenial - -FROM ubuntu:$UBUNTU as builder -ARG RISK -ARG UBUNTU -RUN echo "Building snapcraft:$RISK in ubuntu:$UBUNTU" - -# Grab dependencies -RUN apt-get update -RUN apt-get dist-upgrade --yes -RUN apt-get install --yes \ - curl \ - jq \ - squashfs-tools - -# Grab the core snap (for backwards compatibility) from the stable channel and -# unpack it in the proper place. -RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/core' | jq '.download_url' -r) --output core.snap -RUN mkdir -p /snap/core -RUN unsquashfs -d /snap/core/current core.snap - -# Grab the core18 snap (which snapcraft uses as a base) from the stable channel -# and unpack it in the proper place. -RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/core18' | jq '.download_url' -r) --output core18.snap -RUN mkdir -p /snap/core18 -RUN unsquashfs -d /snap/core18/current core18.snap - -# Grab the core20 snap (which snapcraft uses as a base) from the stable channel -# and unpack it in the proper place. -RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/core20' | jq '.download_url' -r) --output core20.snap -RUN mkdir -p /snap/core20 -RUN unsquashfs -d /snap/core20/current core20.snap - -# Grab the snapcraft snap from the $RISK channel and unpack it in the proper -# place. -RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/snapcraft?channel='$RISK | jq '.download_url' -r) --output snapcraft.snap -RUN mkdir -p /snap/snapcraft -RUN unsquashfs -d /snap/snapcraft/current snapcraft.snap - -# Fix Python3 installation: Make sure we use the interpreter from -# the snapcraft snap: -RUN unlink /snap/snapcraft/current/usr/bin/python3 -RUN ln -s /snap/snapcraft/current/usr/bin/python3.* /snap/snapcraft/current/usr/bin/python3 -RUN echo /snap/snapcraft/current/lib/python3.*/site-packages >> /snap/snapcraft/current/usr/lib/python3/dist-packages/site-packages.pth - -# Create a snapcraft runner (TODO: move version detection to the core of -# snapcraft). -RUN mkdir -p /snap/bin -RUN echo "#!/bin/sh" > /snap/bin/snapcraft -RUN snap_version="$(awk '/^version:/{print $2}' /snap/snapcraft/current/meta/snap.yaml | tr -d \')" && echo "export SNAP_VERSION=\"$snap_version\"" >> /snap/bin/snapcraft -RUN echo 'exec "$SNAP/usr/bin/python3" "$SNAP/bin/snapcraft" "$@"' >> /snap/bin/snapcraft -RUN chmod +x /snap/bin/snapcraft - -# Multi-stage build, only need the snaps from the builder. Copy them one at a -# time so they can be cached. -FROM ubuntu:$UBUNTU -COPY --from=builder /snap/core /snap/core -COPY --from=builder /snap/core18 /snap/core18 -COPY --from=builder /snap/core20 /snap/core20 -COPY --from=builder /snap/snapcraft /snap/snapcraft -COPY --from=builder /snap/bin/snapcraft /snap/bin/snapcraft - -# Generate locale and install dependencies. -RUN apt-get update && apt-get dist-upgrade --yes && apt-get install --yes snapd sudo locales && locale-gen en_US.UTF-8 - -# Set the proper environment. -ENV LANG="en_US.UTF-8" -ENV LANGUAGE="en_US:en" -ENV LC_ALL="en_US.UTF-8" -ENV PATH="/snap/bin:/snap/snapcraft/current/usr/bin:$PATH" -ENV SNAP="/snap/snapcraft/current" -ENV SNAP_NAME="snapcraft" -ENV SNAP_ARCH="amd64" diff --git a/docker/README.md b/docker/README.md index 528fb9acfb..d0fe6cbc51 100644 --- a/docker/README.md +++ b/docker/README.md @@ -1,16 +1,26 @@ -# Creating docker containers for snapcraft +# Docker images for `snapcraft` -By default the `Dockerfile` builds Ubuntu 16.04 (Xenial) image with `snapcraft` from the `edge` channel. +OCI-compliant container images and their sources are officially supported by +https://github.com/canonical/snapcraft-rocks/ project. - docker build . --no-cache +To build a snap with the docker container, you need to choose an image that +matches snap `base`. For example, to build `base: core24` snap: -It is however possible to choose the base Ubuntu version and the Snapcraft channel (risk levels): + docker run -it -v `pwd`:/project ghcr.io/canonical/snapcraft:8_core24 -- `edge` -- `beta` -- `candidate` -- `stable` + * `8` in `8_core24` is the version of snapcraft. + * `\; -v` construction at the end is required to see `snapcraft` output. -To do that, use `--build-arg RISK=` and `--build-arg UBUNTU=` arguments: +For more details, see official `snapcraft-rocks` repo from Canonical. - docker build . --no-cache --build-arg RISK=beta --build-arg UBUNTU=bionic +### Building snaps with `podman` + +`podman` was born as a rootless alternative to Docker. It is default on Fedora +to have `podman` instead of Docker, but SELinux there doesn't allow containers +to write to volumes, so we just turn this "feature" off with + `--security-opt label=disable`. + +```sh +podman run -it --rm --security-opt label=disable \ + -v `pwd`:/project ghcr.io/canonical/snapcraft:8_core24 \; -v +```