forked from aki/docker-aseprite-linux
fix(Dockerfile, Makefile, manifest): Address user/group ID mapping and attempt to resolve ninja errors
This commit is contained in:
parent
78c3eed0fc
commit
1b4744024b
32
Dockerfile
32
Dockerfile
@ -4,7 +4,11 @@ FROM debian:12-slim
|
|||||||
# Set environment variables for non-interactive install
|
# Set environment variables for non-interactive install
|
||||||
ENV DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC
|
ENV DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC
|
||||||
|
|
||||||
# Install necessary tools: Flatpak, builder, git, etc.
|
# Arguments for user and group ID
|
||||||
|
ARG UID=1000
|
||||||
|
ARG GID=1000
|
||||||
|
|
||||||
|
# Install necessary tools: Flatpak, builder, git, ccache, etc.
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y --no-install-recommends \
|
apt-get install -y --no-install-recommends \
|
||||||
flatpak \
|
flatpak \
|
||||||
@ -14,6 +18,7 @@ RUN apt-get update && \
|
|||||||
unzip \
|
unzip \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
elfutils \
|
elfutils \
|
||||||
|
ccache \
|
||||||
# Build dependencies for system libraries
|
# Build dependencies for system libraries
|
||||||
build-essential \
|
build-essential \
|
||||||
ninja-build \
|
ninja-build \
|
||||||
@ -28,15 +33,28 @@ RUN flatpak remote-add --system --if-not-exists flathub https://flathub.org/repo
|
|||||||
flatpak install --system --noninteractive flathub org.freedesktop.Sdk//23.08 && \
|
flatpak install --system --noninteractive flathub org.freedesktop.Sdk//23.08 && \
|
||||||
flatpak install --system --noninteractive flathub org.freedesktop.Platform//23.08
|
flatpak install --system --noninteractive flathub org.freedesktop.Platform//23.08
|
||||||
|
|
||||||
|
# Create a non-root user for the build process
|
||||||
|
RUN groupadd -g $GID builder && \
|
||||||
|
useradd -u $UID -g $GID -ms /bin/bash builder && \
|
||||||
|
mkdir -p /home/builder/.cache/ccache && \
|
||||||
|
chown -R builder:builder /home/builder
|
||||||
|
|
||||||
|
# Create directories needed for the build and set ownership
|
||||||
|
# /sources will be mounted from host, /build is for build artifacts
|
||||||
|
RUN mkdir -p /sources /build && \
|
||||||
|
chown -R builder:builder /build
|
||||||
|
|
||||||
|
# Set user and home directory
|
||||||
|
USER builder
|
||||||
|
ENV HOME /home/builder
|
||||||
|
ENV CCACHE_DIR /home/builder/.cache/ccache
|
||||||
|
ENV PATH /usr/lib/ccache:$PATH
|
||||||
|
|
||||||
# Set working directory for the build process
|
# Set working directory for the build process
|
||||||
WORKDIR /build
|
WORKDIR /build
|
||||||
|
|
||||||
# Create cache-friendly directory structure
|
# Copy the Flatpak manifest into the build directory (owned by builder due to WORKDIR and USER settings)
|
||||||
# This creates a clear layer separation for better Docker/Flatpak caching
|
COPY --chown=builder:builder com.aseprite.Aseprite.yaml .
|
||||||
RUN mkdir -p /sources /build/cache /build/build-dir /build/repo
|
|
||||||
|
|
||||||
# Copy the Flatpak manifest into the build directory
|
|
||||||
COPY com.aseprite.Aseprite.yaml .
|
|
||||||
|
|
||||||
# Default command for interactive use
|
# Default command for interactive use
|
||||||
CMD ["bash"]
|
CMD ["bash"]
|
||||||
|
|||||||
32
Makefile
32
Makefile
@ -6,8 +6,13 @@ TARGET_DIR := ${PWD}/target
|
|||||||
OUTPUT_FILE := ${TARGET_DIR}/aseprite.flatpak
|
OUTPUT_FILE := ${TARGET_DIR}/aseprite.flatpak
|
||||||
BUILD_DIR := ${PWD}/build
|
BUILD_DIR := ${PWD}/build
|
||||||
SRC_DIR := ${PWD}/src
|
SRC_DIR := ${PWD}/src
|
||||||
FLATPAK_STATE_DIR := ${PWD}/flatpak-state
|
|
||||||
FLATPAK_CACHE_DIR := ${PWD}/flatpak-cache
|
# Host-side cache directories for Flatpak builder and ccache
|
||||||
|
# These will be mounted into the container
|
||||||
|
FLATPAK_BUILDER_CACHE_DIR := ${PWD}/.flatpak-builder-cache
|
||||||
|
FLATPAK_STATE_DIR := ${FLATPAK_BUILDER_CACHE_DIR}/state
|
||||||
|
FLATPAK_CACHE_DIR := ${FLATPAK_BUILDER_CACHE_DIR}/cache
|
||||||
|
CCACHE_DIR := ${PWD}/.ccache
|
||||||
|
|
||||||
# Get current user and group IDs to avoid permission issues with Docker
|
# Get current user and group IDs to avoid permission issues with Docker
|
||||||
USER_ID := $(shell id -u)
|
USER_ID := $(shell id -u)
|
||||||
@ -30,28 +35,30 @@ prepare-sources:
|
|||||||
.PHONY: build-image
|
.PHONY: build-image
|
||||||
build-image:
|
build-image:
|
||||||
@echo "--- Building Aseprite Flatpak builder image (${IMAGE_NAME}) ---"
|
@echo "--- Building Aseprite Flatpak builder image (${IMAGE_NAME}) ---"
|
||||||
@docker build -t ${IMAGE_NAME} -f ${DOCKERFILE} .
|
@docker build \
|
||||||
|
--build-arg UID=${USER_ID} \
|
||||||
|
--build-arg GID=${GROUP_ID} \
|
||||||
|
-t ${IMAGE_NAME} -f ${DOCKERFILE} .
|
||||||
|
|
||||||
# Run flatpak-builder inside a privileged container with proper user permissions
|
# Run flatpak-builder inside a privileged container with proper user permissions
|
||||||
.PHONY: run-flatpak-builder
|
.PHONY: run-flatpak-builder
|
||||||
run-flatpak-builder:
|
run-flatpak-builder:
|
||||||
@echo "--- Running flatpak-builder inside container ---"
|
@echo "--- Running flatpak-builder inside container ---"
|
||||||
@mkdir -p ${BUILD_DIR} ${FLATPAK_STATE_DIR} ${FLATPAK_CACHE_DIR}
|
@mkdir -p ${BUILD_DIR} ${FLATPAK_STATE_DIR} ${FLATPAK_CACHE_DIR} ${CCACHE_DIR}
|
||||||
@docker run \
|
@docker run \
|
||||||
--rm \
|
--rm \
|
||||||
--privileged \
|
--privileged \
|
||||||
--device /dev/fuse \
|
--device /dev/fuse \
|
||||||
|
-u ${USER_ID}:${GROUP_ID} \
|
||||||
-v ${SRC_DIR}:/sources:ro \
|
-v ${SRC_DIR}:/sources:ro \
|
||||||
-v ${BUILD_DIR}:/build \
|
-v ${BUILD_DIR}:/build \
|
||||||
-v ${FLATPAK_STATE_DIR}:/root/.local/share/flatpak-builder \
|
-v ${FLATPAK_STATE_DIR}:/home/builder/.local/share/flatpak-builder \
|
||||||
-v ${FLATPAK_CACHE_DIR}:/root/.cache/flatpak-builder \
|
-v ${FLATPAK_CACHE_DIR}:/home/builder/.cache/flatpak-builder \
|
||||||
|
-v ${CCACHE_DIR}:/home/builder/.cache/ccache \
|
||||||
-v ${PWD}/com.aseprite.Aseprite.yaml:/build/com.aseprite.Aseprite.yaml:ro \
|
-v ${PWD}/com.aseprite.Aseprite.yaml:/build/com.aseprite.Aseprite.yaml:ro \
|
||||||
-e FLATPAK_USER_DIR=/build/.flatpak \
|
|
||||||
-e USER_ID=${USER_ID} \
|
|
||||||
-e GROUP_ID=${GROUP_ID} \
|
|
||||||
-w /build \
|
-w /build \
|
||||||
${IMAGE_NAME} \
|
${IMAGE_NAME} \
|
||||||
sh -c "flatpak-builder --disable-rofiles-fuse --state-dir=/root/.local/share/flatpak-builder --ccache build-dir com.aseprite.Aseprite.yaml --repo=repo && if [ -d 'build-dir/files/third_party/externals/emsdk' ]; then rm -rf build-dir/files/third_party/externals/emsdk; fi && chown -R ${USER_ID}:${GROUP_ID} /build"
|
sh -c "flatpak-builder --disable-rofiles-fuse --state-dir=/home/builder/.local/share/flatpak-builder --ccache build-dir com.aseprite.Aseprite.yaml --repo=repo && if [ -d 'build-dir/files/third_party/externals/emsdk' ]; then rm -rf build-dir/files/third_party/externals/emsdk; fi"
|
||||||
|
|
||||||
# Create the Flatpak bundle from the repo built in the previous step
|
# Create the Flatpak bundle from the repo built in the previous step
|
||||||
.PHONY: create-bundle
|
.PHONY: create-bundle
|
||||||
@ -61,12 +68,11 @@ create-bundle: run-flatpak-builder
|
|||||||
--rm \
|
--rm \
|
||||||
--privileged \
|
--privileged \
|
||||||
--device /dev/fuse \
|
--device /dev/fuse \
|
||||||
|
-u ${USER_ID}:${GROUP_ID} \
|
||||||
-v ${BUILD_DIR}:/build \
|
-v ${BUILD_DIR}:/build \
|
||||||
-e USER_ID=${USER_ID} \
|
|
||||||
-e GROUP_ID=${GROUP_ID} \
|
|
||||||
-w /build \
|
-w /build \
|
||||||
${IMAGE_NAME} \
|
${IMAGE_NAME} \
|
||||||
sh -c "flatpak build-bundle repo aseprite.flatpak com.aseprite.Aseprite && chown ${USER_ID}:${GROUP_ID} aseprite.flatpak"
|
sh -c "flatpak build-bundle repo aseprite.flatpak com.aseprite.Aseprite"
|
||||||
|
|
||||||
# Copy the final bundle from the intermediate directory to the output directory
|
# Copy the final bundle from the intermediate directory to the output directory
|
||||||
.PHONY: extract-flatpak
|
.PHONY: extract-flatpak
|
||||||
|
|||||||
@ -218,23 +218,24 @@ modules:
|
|||||||
- -DSKIA_DIR=/app
|
- -DSKIA_DIR=/app
|
||||||
- -DSKIA_LIBRARY_DIR=/app/lib
|
- -DSKIA_LIBRARY_DIR=/app/lib
|
||||||
- -DSKIA_LIBRARY=/app/lib/libskia.a
|
- -DSKIA_LIBRARY=/app/lib/libskia.a
|
||||||
# Use Skia's bundled libraries instead of system libraries
|
# Use Skia's bundled libraries (static) or SDK-provided shared libraries
|
||||||
- -DUSE_SHARED_LIBJPEG=OFF
|
- -DUSE_SHARED_JPEG=OFF # Bundled static with Skia
|
||||||
- -DUSE_SHARED_LIBPNG=ON
|
- -DUSE_SHARED_LIBPNG=ON # Provided by SDK (shared)
|
||||||
- -DUSE_SHARED_ZLIB=ON
|
- -DUSE_SHARED_ZLIB=ON # Provided by SDK (shared)
|
||||||
- -DUSE_SHARED_GIFLIB=ON
|
- -DUSE_SHARED_GIFLIB=ON # Provided by SDK (shared)
|
||||||
- -DUSE_SHARED_WEBP=OFF
|
- -DUSE_SHARED_WEBP=OFF # Bundled static with Skia
|
||||||
- -DUSE_SHARED_FREETYPE=OFF
|
- -DUSE_SHARED_FREETYPE=OFF # Bundled static with Skia
|
||||||
- -DUSE_SHARED_HARFBUZZ=OFF
|
- -DUSE_SHARED_HARFBUZZ=OFF # Bundled static with Skia
|
||||||
# Set library locations explicitly
|
# Set library locations explicitly for bundled static libs
|
||||||
- -DWEBP_INCLUDE_DIR=/app/third_party/externals/libwebp/src
|
# CMake standard variable names (often plural for DIRS/LIBRARIES)
|
||||||
- -DWEBP_LIBRARIES=/app/lib/libwebp.a
|
- -DWebP_INCLUDE_DIRS=/app/third_party/externals/libwebp/src
|
||||||
- -DLIBJPEG_TURBO_INCLUDE_DIR=/app/third_party/externals/libjpeg-turbo
|
- -DWebP_LIBRARIES=/app/lib/libwebp.a
|
||||||
- -DLIBJPEG_TURBO_LIBRARY=/app/lib/libjpeg.a
|
- -DJPEG_INCLUDE_DIRS=/app/third_party/externals/libjpeg-turbo
|
||||||
- -DFREETYPE_INCLUDE_DIR=/app/third_party/externals/freetype/include
|
- -DJPEG_LIBRARIES=/app/lib/libjpeg.a
|
||||||
- -DFREETYPE_LIBRARY=/app/lib/libfreetype.a
|
- -DFreetype_INCLUDE_DIRS=/app/third_party/externals/freetype/include
|
||||||
- -DHARFBUZZ_INCLUDE_DIR=/app/third_party/externals/harfbuzz/src
|
- -DFreetype_LIBRARIES=/app/lib/libfreetype.a
|
||||||
- -DHARFBUZZ_LIBRARY=/app/lib/libharfbuzz.a
|
- -DHarfBuzz_INCLUDE_DIRS=/app/third_party/externals/harfbuzz/src
|
||||||
|
- -DHarfBuzz_LIBRARIES=/app/lib/libharfbuzz.a
|
||||||
build-commands:
|
build-commands:
|
||||||
# Standard ninja build
|
# Standard ninja build
|
||||||
- ninja
|
- ninja
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user