docker: Add a unified image for fedora
authorJordan Petridis <jordan@centricular.com>
Sun, 25 Nov 2018 00:03:29 +0000 (02:03 +0200)
committerJordan Petridis <jordan@centricular.com>
Tue, 27 Nov 2018 12:29:36 +0000 (14:29 +0200)
This is meant to replace both the runtime and build images.
Spliting it in two increasing the maintainance required without
any big benefits.

.gitlab-ci.yml
docker/build-base-images/Dockerfile-fedora [deleted file]
docker/fedora/Dockerfile [new file with mode: 0644]
docker/fedora/cleanup.sh [new file with mode: 0644]
docker/fedora/prepare.sh [new file with mode: 0644]
docker/runtime-images/Dockerfile-fedora [deleted file]

index f076999..971027f 100644 (file)
@@ -1,6 +1,8 @@
 stages:
   - "build runtime"
   - "build base"
+  # Eventually will replace both of the above stages
+  - "build docker"
   - "preparation"
   # Test just one basic build, if succeds procced to test the rest
   - "build"
@@ -74,29 +76,17 @@ alpine amd64 manifest builder docker:
       - 'docker/runtime-images/Dockerfile-manifest-builder'
       - 'gitlab/build_manifest.py'
 
-fedora amd64 run docker:
-  stage: "build runtime"
-  variables:
-    ARCH: "amd64"
-    TAG: "fedora-runtime"
-    CONTEXT_DIR: "docker/runtime-images/"
-    DOCKERFILE: "docker/runtime-images/Dockerfile-fedora"
-  extends: .base
-  only:
-    changes:
-      - 'docker/runtime-images/Dockerfile-fedora'
-
-fedora amd64 build docker:
-  stage: "build base"
+fedora amd64 docker:
+  stage: "build docker"
   variables:
     ARCH: "amd64"
-    TAG: "fedora-build"
-    CONTEXT_DIR: "docker/build-base-images/"
-    DOCKERFILE: "docker/build-base-images/Dockerfile-fedora"
+    TAG: "fedora"
+    CONTEXT_DIR: "docker/fedora/"
+    DOCKERFILE: "docker/fedora/Dockerfile"
   extends: .base
   only:
     changes:
-      - 'docker/build-base-images/Dockerfile-fedora'
+      - 'docker/fedora/*'
 
 ubuntu amd64 run docker:
   stage: "build runtime"
@@ -128,7 +118,7 @@ include: "gitlab/ci_template.yml"
 build fedora x86_64 local:
   extends: '.build'
   stage: 'build'
-  image: "${CI_REGISTRY_IMAGE}/amd64/fedora-build:latest"
+  image: "${CI_REGISTRY_IMAGE}/amd64/fedora:latest"
 
 build ubuntu x86_64 local:
   extends: '.build'
diff --git a/docker/build-base-images/Dockerfile-fedora b/docker/build-base-images/Dockerfile-fedora
deleted file mode 100644 (file)
index 2c15aec..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-FROM registry.freedesktop.org/gstreamer/gst-ci/amd64/fedora-runtime
-# Add rpmfusion repositories and install all build dependencies of GStreamer
-RUN dnf builddep -y \
-        gstreamer1 \
-        gstreamer1-plugins-base \
-        gstreamer1-plugins-good \
-        gstreamer1-plugins-good-extras \
-        gstreamer1-plugins-ugly \
-        gstreamer1-plugins-ugly-free \
-        gstreamer1-plugins-bad-nonfree \
-        gstreamer1-plugins-bad-free \
-        gstreamer1-plugins-bad-free-extras \
-        gstreamer1-plugins-bad-freeworld \
-        gstreamer1-libav \
-        gstreamer1-rtsp-server  \
-        gstreamer1-vaapi \
-        python3-gstreamer1 \
-    && \
-    rpm -e \
-        gstreamer1-devel \
-        gstreamer1-plugins-base-devel \
-        gstreamer1-plugins-bad-free-devel \
-    && \
-    dnf install -y \
-        ccache \
-        gcc \
-        gcc-c++ \
-        gdb \
-        git \
-        ffmpeg \
-        ffmpeg-libs \
-        ffmpeg-devel \
-        procps-ng \
-        patch \
-        redhat-rpm-config \
-        json-glib \
-        json-glib-devel \
-        libnice \
-        libnice-devel \
-        libunwind \
-        libunwind-devel \
-        opencv \
-        opencv-devel \
-        openjpeg2 \
-        openjpeg2-devel \
-        x264 \
-        x264-libs \
-        x264-devel \
-        pygobject3-devel \
-        python3-gobject \
-        python3-cairo \
-        python3-cairo-devel \
-        xorg-x11-server-utils \
-        xorg-x11-server-Xvfb \
-        ninja-build \
-        cmake && \
-    dnf clean all && \
-    pip3 install meson hotdoc && \
-    export PATH="$PATH:/usr/local/lib/python3.6/site-packages"
-
-ENV GST_BUILD_PATH="/gst-build/"
-
-# Configure git for various usage
-RUN git config --global user.email "gst-build@gstreamer.net" && git config --global user.name "Gstbuild Runner"
-
-# get gst-build and make all subprojects available
-RUN git clone git://anongit.freedesktop.org/gstreamer/gst-build $GST_BUILD_PATH && \
-    cd $GST_BUILD_PATH && \
-    meson build/ && \
-    rm -rf build/
diff --git a/docker/fedora/Dockerfile b/docker/fedora/Dockerfile
new file mode 100644 (file)
index 0000000..0e80c32
--- /dev/null
@@ -0,0 +1,6 @@
+FROM fedora:29
+
+COPY prepare.sh cleanup.sh /root/
+
+RUN /usr/bin/sh /root/prepare.sh && \
+    /usr/bin/sh /root/cleanup.sh
diff --git a/docker/fedora/cleanup.sh b/docker/fedora/cleanup.sh
new file mode 100644 (file)
index 0000000..73d62c7
--- /dev/null
@@ -0,0 +1,7 @@
+set -eu
+
+echo "Removing DNF cache"
+dnf clean all
+
+rm -R /root/*
+rm -rf /var/cache/dnf /var/log/dnf*
diff --git a/docker/fedora/prepare.sh b/docker/fedora/prepare.sh
new file mode 100644 (file)
index 0000000..9de5b6d
--- /dev/null
@@ -0,0 +1,84 @@
+set -eu
+
+dnf install -y git ninja-build dnf-plugins-core
+
+# Configure git for various usage
+git config --global user.email "gst-build@gstreamer.net"
+git config --global user.name "Gstbuild Runner"
+
+# Add rpm fusion repositories in order to access all of the gst plugins
+dnf install -y "http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-29.noarch.rpm" \
+  "http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-29.noarch.rpm"
+
+rpm --import "/etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-nonfree-fedora-29"
+rpm --import "/etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-free-fedora-29"
+dnf upgrade -y
+
+# Enable the cisco openh264 repo
+dnf config-manager --set-enabled fedora-cisco-openh264
+
+# install rest of the extra deps
+dnf install -y ccache \
+    cmake \
+    elfutils \
+    gcc \
+    gcc-c++ \
+    gdb \
+    gtk3 \
+    gtk3-devel \
+    ffmpeg \
+    ffmpeg-libs \
+    ffmpeg-devel \
+    procps-ng \
+    patch \
+    redhat-rpm-config \
+    json-glib \
+    json-glib-devel \
+    libnice \
+    libnice-devel \
+    libunwind \
+    libunwind-devel \
+    opencv \
+    opencv-devel \
+    openjpeg2 \
+    openjpeg2-devel \
+    openh264 \
+    openh264-devel \
+    x264 \
+    x264-libs \
+    x264-devel \
+    python3-gobject \
+    python3-cairo \
+    python3-cairo-devel \
+    vulkan \
+    vulkan-devel \
+    xorg-x11-server-utils \
+    xorg-x11-server-Xvfb
+
+pip3 install meson
+# Add the pip3 installation to the path
+export PATH="$PATH:/usr/local/lib/python3.7/site-packages"
+
+# Install the dependencies of gstreamer
+dnf builddep -y gstreamer1 \
+    gstreamer1-plugins-base \
+    gstreamer1-plugins-good \
+    gstreamer1-plugins-good-extras \
+    gstreamer1-plugins-ugly \
+    gstreamer1-plugins-ugly-free \
+    gstreamer1-plugins-bad-nonfree \
+    gstreamer1-plugins-bad-free \
+    gstreamer1-plugins-bad-free-extras \
+    gstreamer1-plugins-bad-freeworld \
+    gstreamer1-libav \
+    gstreamer1-rtsp-server  \
+    gstreamer1-vaapi \
+    python3-gstreamer1 \
+    -x meson
+
+# Remove gst-devel packages installed by builddep above
+dnf remove -y "gstreamer1*devel"
+
+# get gst-build and make all subprojects available
+git clone git://anongit.freedesktop.org/gstreamer/gst-build /gst-build/
+cd /gst-build && meson build/ && rm -rf build/
\ No newline at end of file
diff --git a/docker/runtime-images/Dockerfile-fedora b/docker/runtime-images/Dockerfile-fedora
deleted file mode 100644 (file)
index 936ffb9..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-FROM fedora:29
-
-# install the config manager
-RUN dnf install -y dnf-plugins-core
-
-# Add rpmfusion repositories and install all build dependencies of GStreamer
-# and then remove the gst packages themselves
-RUN echo "fastestmirror=true" >>  /etc/dnf/dnf.conf && \
-    dnf install -y http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-29.noarch.rpm \
-    http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-29.noarch.rpm && \
-    rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-nonfree-fedora-29 && \
-    rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-free-fedora-29 && \
-    dnf upgrade -y && \
-    dnf install -y \
-        dnf-plugins-core \
-        git \
-        meson \
-        json-glib \
-        libnice \
-        libunwind \
-        openjpeg2 \
-        procps-ng \
-        x264 \
-        x264-libs \
-        python3-gobject \
-        python3-cairo \
-        ffmpeg \
-        ffmpeg-libs \
-        xorg-x11-server-utils \
-        xorg-x11-server-Xvfb \
-    && \
-    dnf install -y \
-        gstreamer1 \
-        gstreamer1-plugins-base \
-        gstreamer1-plugins-good \
-        gstreamer1-plugins-good-extras \
-        gstreamer1-plugins-ugly \
-        gstreamer1-plugins-ugly-free \
-        gstreamer1-plugins-bad-nonfree \
-        gstreamer1-plugins-bad-free \
-        gstreamer1-plugins-bad-free-extras \
-        gstreamer1-plugins-bad-freeworld \
-        gstreamer1-libav \
-        gstreamer1-rtsp-server  \
-    && \
-    rpm -e \
-        gstreamer1 \
-        gstreamer1-plugins-base \
-        gstreamer1-plugins-good \
-        gstreamer1-plugins-good-extras \
-        gstreamer1-plugins-ugly \
-        gstreamer1-plugins-ugly-free \
-        gstreamer1-plugins-bad-nonfree \
-        gstreamer1-plugins-bad-free \
-        gstreamer1-plugins-bad-free-extras \
-        gstreamer1-plugins-bad-freeworld \
-        gstreamer1-rtsp-server \
-        gstreamer1-libav \
-    && \
-    dnf clean all
\ No newline at end of file