From 0ceb257fc7d7e2c0c48db5650bc6c22706dbbac4 Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Fri, 24 May 2024 04:28:51 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=BB=D0=B8=D0=B7=200.1.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 14 ++++++++++++++ README.md | 35 +++++++++++++++++++++++++++++++++++ build | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 build diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..15a93b1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM alpine:3.20.0 +LABEL maintainer="Alexander Zhirov " +COPY --chmod=0755 build /bin/build +RUN apk add --no-cache binutils rpm2cpio bash fuse wget patch file desktop-file-utils && \ + wget https://git.zhirov.kz/alexander/appimage-builder/archive/0.2.0.tar.gz && \ + tar xf 0.2.0.tar.gz -C / && rm 0.2.0.tar.gz && \ + cd /appimage-builder/src && \ + wget https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage && \ + wget https://github.com/AppImage/type2-runtime/releases/download/continuous/runtime-x86_64 && \ + chmod +x appimagetool-x86_64.AppImage runtime-x86_64 && \ + mkdir /input /output /cache +VOLUME /input /output /cache +ENV PATH $PATH:/appimage-builder/src +ENTRYPOINT ["build"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..affb71a --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# AppImage Builder Docker + +### Сборка образа + +``` +git clone https://git.zhirov.kz/alexander/appimage-builder-docker.git +cd appimage-builder-docker +docker build --no-cache -t appimage-builder:0.2.0 . +``` + +### Подготовка + +Перед сборкой необходимы три директории +- `input` - директория с рецептами сборки AppImage, [согласно иерархии AppImage Builder](https://git.zhirov.kz/alexander/appimage-builder/src/branch/master/src/apps) +- `cache` - директория для промежуточного буфера скачиваемых пакетов `deb`/`rpm` +- `output` - директория для готовых файлов AppImage и журнала сборки + +``` +mkdir output cache +``` + +### Запуск + +``` +docker run --rm \ + --device /dev/fuse \ + --cap-add SYS_ADMIN \ + --security-opt apparmor:unconfined \ + --volume ./input:/input \ + --volume ./output:/output \ + --volume ./cache:/cache \ + appimage-builder:0.2.0 -u 1001 +``` + +где флаг `-u` указывает UID пользователя для установки прав (`user:group`) на полученные файлы в `output` и `cache` (по умолчанию `1000`) diff --git a/build b/build new file mode 100644 index 0000000..ee271aa --- /dev/null +++ b/build @@ -0,0 +1,49 @@ +#!/bin/bash + +while [[ $# -gt 0 ]]; do + key="${1}" + value="${2}" + case "${key}" in + -u|--user) + if [[ ! "${value}" =~ ^[0-9]+$ ]]; then + echo "Пользователь должен быть указан в числовом представлении" + exit 1 + fi + user="${value}" + echo "На готовые файлы будут установлены права ${user}:${user} в output и cache" + shift + ;; + -t|--appimage-tool|-r|--appimage-runtime|-i|--input-path|-o|--output-path|-c|--cache-path|-l|--log-path) + echo "Переданы недопустимые флаги" + exit 1 + ;; + -h|--help) + echo -e "\n" \ + "Использование: docker-container [ОПЦИИ]... [СПИСОК ПАКЕТОВ ДЛЯ СБОРКИ]\n" \ + "Основные опции:\n" \ + "\t-u\t--user\t\t\tУказать UID пользователя для установки прав на полученные файлы в output и cache\n" \ + "Дополнительно:\n" \ + "\t-h\t--help\t\t\tПоказать справку\n" \ + "\t-v\t--version\t\tВерсия скрипта appimage-builder\n" + exit 0 + ;; + bash|ash|sh) + ${key} + exit 0 + ;; + *) + apps+=("${key}") + ;; + esac + shift +done + +[ -z "${apps}" ] && echo "Не указан ни один пакет для сборки AppImage" && exit 1 + +appimage-builder.sh -i /input -o /output -c /cache "${apps}" + +if [ -v user ] && [ -n "${user}" ] ; then + chown -R -v ${user}:${user} /output /cache +else + chown -R -v 1000:1000 /output /cache +fi