From 0e0a993f9a26b3aa1e5563027f08d3ba8c5dcefa Mon Sep 17 00:00:00 2001 From: bsilvereagle Date: Fri, 5 May 2023 11:10:58 -0700 Subject: [PATCH] Add support for building AppImage via docker --- .dockerignore | 2 ++ COMPILE.md | 6 ++++++ Dockerfile | 19 +++++++++++++------ appimage/AppImage.sh | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 .dockerignore create mode 100755 appimage/AppImage.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..95d7144b8 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +Dockerfile +.git/ diff --git a/COMPILE.md b/COMPILE.md index 6ad7b85b0..bbac2c92d 100644 --- a/COMPILE.md +++ b/COMPILE.md @@ -76,6 +76,12 @@ cp -v install/bin/* AppDir/usr/bin --plugin qt --output appimage ``` +## Deploy as an AppImage via Docker + +```shell +docker buildx build -o . . +``` + # Compile in Mac On Mac, the dependencies can be installed using [brew](https://brew.sh/) with the following command: diff --git a/Dockerfile b/Dockerfile index 276616dfe..5433cd92b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,17 @@ -#Download base image ubuntu 18.04 -FROM ubuntu:18.04 +FROM ubuntu:22.04 as builder -RUN apt update +RUN apt-get update && \ + apt-get -y install cmake build-essential wget file qtbase5-dev libqt5svg5-dev libqt5websockets5-dev libqt5opengl5-dev libqt5x11extras5-dev libprotoc-dev libzmq3-dev liblz4-dev libzstd-dev libmosquittopp-dev -RUN apt install cmake git build-essential qtbase5-dev libqt5svg5-dev libqt5websockets5-dev libqt5opengl5-dev libqt5x11extras5-dev nano qt5-default -y && \ - rm -rf /var/lib/apt/lists/* && \ - apt clean +RUN mkdir -p /opt/plotjuggler +COPY . /opt/plotjuggler +RUN mkdir /opt/plotjuggler/build +WORKDIR /opt/plotjuggler/build +RUN cmake .. -DCMAKE_INSTALL_PREFIX=/usr +RUN make -j `nproc` +RUN make install DESTDIR=AppDir +RUN /opt/plotjuggler/appimage/AppImage.sh +FROM scratch as exporter +COPY --from=builder /opt/plotjuggler/build/PlotJuggler-x86_64.AppImage / diff --git a/appimage/AppImage.sh b/appimage/AppImage.sh new file mode 100755 index 000000000..bb43a695e --- /dev/null +++ b/appimage/AppImage.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +APPDIRPATH=../build/AppDir + +# Uses linuxdeploy with linuxdeploy-plugin-qt to generate an AppImage +LINUXDEPLOY_URL="https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" +LINUXDEPLOY_QT_URL="https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" + +LINUXDEPLOY_APPIMAGE="linuxdeploy-x86_64.AppImage" +LINUXDEPLOY_QT_APPIMAGE="linuxdeploy-plugin-qt-x86_64.AppImage" + +# Get and extract linuxdeploy AppImage. Extraction is necessary since we are in a container without FUSE support +wget ${LINUXDEPLOY_URL} +chmod +x ${LINUXDEPLOY_APPIMAGE} +mkdir linuxdeploy/ +mv ${LINUXDEPLOY_APPIMAGE} linuxdeploy/ +cd linuxdeploy +./${LINUXDEPLOY_APPIMAGE} --appimage-extract +cd - + +# Same for the plugin +wget ${LINUXDEPLOY_QT_URL} +chmod +x ${LINUXDEPLOY_QT_APPIMAGE} +mkdir linuxdeploy-plugin-qt/ +mv ${LINUXDEPLOY_QT_APPIMAGE} linuxdeploy-plugin-qt/ +cd linuxdeploy-plugin-qt +./${LINUXDEPLOY_QT_APPIMAGE} --appimage-extract +# Rename the plugin to match linuxdeploy's expected format +mv squashfs-root/AppRun squashfs-root/linuxdeploy-plugin-qt +cd - + +PATH=$PATH:linuxdeploy-plugin-qt/squashfs-root ./linuxdeploy/squashfs-root/AppRun --appdir $APPDIRPATH -d ../PlotJuggler.desktop -i ../plotjuggler.png --plugin qt --output appimage +