From dcb090dcd779581c1eddb20b4860848b02139145 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 7 Jul 2019 00:15:13 +0200 Subject: Docker build for ARM (Raspberry Pi) (#2436) * Docker build for ARM (Raspberry Pi) Inspired by https://github.com/stas-demydiuk/domoticz-docker * Execution rights * Readme typo * Move QEMU higher up * Change tar command * Try to fix COPY error * Fix path bug --- Docker/hooks/pre_build | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100755 Docker/hooks/pre_build (limited to 'Docker/hooks/pre_build') diff --git a/Docker/hooks/pre_build b/Docker/hooks/pre_build new file mode 100755 index 000000000..f6c8211c0 --- /dev/null +++ b/Docker/hooks/pre_build @@ -0,0 +1,12 @@ +#!/bin/bash + +if [[ "$DOCKERFILE_PATH" == *-ARM ]]; +then + # https://github.com/balena-io/qemu + # Download a local copy of QEMU on Docker Hub build machine + curl -LSs 'https://github.com/balena-io/qemu/releases/download/v3.0.0%2Bresin/qemu-3.0.0+resin-arm.tar.gz' | tar -xzv --strip-components=1 --wildcards '*/qemu-*' + + # https://github.com/multiarch/qemu-user-static + # Register qemu-*-static for all supported processors except the current one, but also remove all registered binfmt_misc before + docker run --rm --privileged multiarch/qemu-user-static:register --reset +fi -- cgit v1.2.3 From 8c2cf1b4dd3a6c79d77f9dc1a256e9d4a8db6a68 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 7 Jul 2019 20:07:01 +0200 Subject: Docker healthcheck+ labels (#2438) * Add Docker labels And try to fix the platform metadata for ARM, and add health check * Execution rights * Remove experimental features not supported by Docker Hub "--squash" is only supported on a Docker daemon with experimental features enabled. build hook failed! (1) * Fix paths --- Docker/Dockerfile | 21 ++++++++++++++++++++- Docker/Dockerfile-Alpine | 20 ++++++++++++++++++++ Docker/Dockerfile-QEMU-ARM | 26 ++++++++++++++++++++++++-- Docker/hooks/build | 22 ++++++++++++++++++++++ Docker/hooks/pre_build | 4 +++- app/install.php | 1 + 6 files changed, 90 insertions(+), 4 deletions(-) create mode 100755 Docker/hooks/build (limited to 'Docker/hooks/pre_build') diff --git a/Docker/Dockerfile b/Docker/Dockerfile index e5581efe7..eea2ea49c 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -5,7 +5,7 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN apt update && \ apt install --no-install-recommends -y \ - ca-certificates cron \ + ca-certificates cron curl \ apache2 libapache2-mod-php \ php-curl php-intl php-mbstring php-xml php-zip \ php-sqlite3 php-mysql php-pgsql && \ @@ -17,6 +17,22 @@ WORKDIR /var/www/FreshRSS COPY . /var/www/FreshRSS COPY ./Docker/*.Apache.conf /etc/apache2/sites-available/ +ARG FRESHRSS_VERSION +ARG SOURCE_BRANCH +ARG SOURCE_COMMIT + +LABEL \ + org.opencontainers.image.authors="Alkarex" \ + org.opencontainers.image.description="A self-hosted RSS feed aggregator" \ + org.opencontainers.image.documentation="https://freshrss.github.io/FreshRSS/" \ + org.opencontainers.image.licenses="AGPL-3.0" \ + org.opencontainers.image.revision="${SOURCE_BRANCH}.${SOURCE_COMMIT}" \ + org.opencontainers.image.source="https://github.com/FreshRSS/FreshRSS" \ + org.opencontainers.image.title="FreshRSS" \ + org.opencontainers.image.url="https://freshrss.org/" \ + org.opencontainers.image.vendor="FreshRSS" \ + org.opencontainers.image.version="$FRESHRSS_VERSION" + RUN a2dismod -f alias autoindex negotiation status && \ a2enmod deflate expires headers mime setenvif && \ a2disconf '*' && \ @@ -38,3 +54,6 @@ EXPOSE 80 CMD ([ -z "$CRON_MIN" ] || cron) && \ . /etc/apache2/envvars && \ exec apache2 -D FOREGROUND + +HEALTHCHECK --start-period=8s --interval=67s --timeout=5s --retries=3 \ + CMD curl -fsS 'http://localhost/i/' | grep -q 'jsonVars' || exit 1 diff --git a/Docker/Dockerfile-Alpine b/Docker/Dockerfile-Alpine index 798a57de1..4078ad0cb 100644 --- a/Docker/Dockerfile-Alpine +++ b/Docker/Dockerfile-Alpine @@ -3,6 +3,7 @@ FROM alpine:3.10 ENV TZ UTC RUN apk add --no-cache \ + curl \ apache2 php7-apache2 \ php7 php7-curl php7-gmp php7-intl php7-mbstring php7-xml php7-zip \ php7-ctype php7-dom php7-fileinfo php7-iconv php7-json php7-session php7-simplexml php7-xmlreader php7-zlib \ @@ -14,6 +15,22 @@ WORKDIR /var/www/FreshRSS COPY . /var/www/FreshRSS COPY ./Docker/*.Apache.conf /etc/apache2/conf.d/ +ARG FRESHRSS_VERSION +ARG SOURCE_BRANCH +ARG SOURCE_COMMIT + +LABEL \ + org.opencontainers.image.authors="Alkarex" \ + org.opencontainers.image.description="A self-hosted RSS feed aggregator" \ + org.opencontainers.image.documentation="https://freshrss.github.io/FreshRSS/" \ + org.opencontainers.image.licenses="AGPL-3.0" \ + org.opencontainers.image.revision="${SOURCE_BRANCH}.${SOURCE_COMMIT}" \ + org.opencontainers.image.source="https://github.com/FreshRSS/FreshRSS" \ + org.opencontainers.image.title="FreshRSS" \ + org.opencontainers.image.url="https://freshrss.org/" \ + org.opencontainers.image.vendor="FreshRSS" \ + org.opencontainers.image.version="$FRESHRSS_VERSION" + RUN rm -f /etc/apache2/conf.d/languages.conf /etc/apache2/conf.d/info.conf \ /etc/apache2/conf.d/status.conf /etc/apache2/conf.d/userdir.conf && \ sed -r -i "/^\s*LoadModule .*mod_(alias|autoindex|negotiation|status).so$/s/^/#/" \ @@ -34,3 +51,6 @@ ENTRYPOINT ["./Docker/entrypoint.sh"] EXPOSE 80 CMD ([ -z "$CRON_MIN" ] || crond -d 6) && \ exec httpd -D FOREGROUND + +HEALTHCHECK --start-period=8s --interval=67s --timeout=5s --retries=3 \ + CMD curl -fsS 'http://localhost/i/' | grep -q 'jsonVars' || exit 1 diff --git a/Docker/Dockerfile-QEMU-ARM b/Docker/Dockerfile-QEMU-ARM index 889be2cb8..926bac98e 100644 --- a/Docker/Dockerfile-QEMU-ARM +++ b/Docker/Dockerfile-QEMU-ARM @@ -4,14 +4,14 @@ FROM arm32v7/ubuntu:19.04 # Requires ./hooks/* -COPY ./Docker/qemu-* /usr/bin/ +COPY ./Docker/qemu-arm-* /usr/bin/ ENV TZ UTC RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN apt update && \ apt install --no-install-recommends -y \ - ca-certificates cron \ + ca-certificates cron curl \ apache2 libapache2-mod-php \ php-curl php-intl php-mbstring php-xml php-zip \ php-sqlite3 php-mysql php-pgsql && \ @@ -23,6 +23,22 @@ WORKDIR /var/www/FreshRSS COPY . /var/www/FreshRSS COPY ./Docker/*.Apache.conf /etc/apache2/sites-available/ +ARG FRESHRSS_VERSION +ARG SOURCE_BRANCH +ARG SOURCE_COMMIT + +LABEL \ + org.opencontainers.image.authors="Alkarex" \ + org.opencontainers.image.description="A self-hosted RSS feed aggregator" \ + org.opencontainers.image.documentation="https://freshrss.github.io/FreshRSS/" \ + org.opencontainers.image.licenses="AGPL-3.0" \ + org.opencontainers.image.revision="${SOURCE_BRANCH}.${SOURCE_COMMIT}" \ + org.opencontainers.image.source="https://github.com/FreshRSS/FreshRSS" \ + org.opencontainers.image.title="FreshRSS" \ + org.opencontainers.image.url="https://freshrss.org/" \ + org.opencontainers.image.vendor="FreshRSS" \ + org.opencontainers.image.version="$FRESHRSS_VERSION" + RUN a2dismod -f alias autoindex negotiation status && \ a2enmod deflate expires headers mime setenvif && \ a2disconf '*' && \ @@ -36,6 +52,9 @@ RUN sed -r -i "/^\s*(CustomLog|ErrorLog|Listen) /s/^/#/" /etc/apache2/apache2.co su www-data -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' \ 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" | crontab - +# Useful with the `--squash` build option +RUN rm /usr/bin/qemu-* + ENV COPY_SYSLOG_TO_STDERR On ENV CRON_MIN '' ENTRYPOINT ["./Docker/entrypoint.sh"] @@ -44,3 +63,6 @@ EXPOSE 80 CMD ([ -z "$CRON_MIN" ] || cron) && \ . /etc/apache2/envvars && \ exec apache2 -D FOREGROUND + +HEALTHCHECK --start-period=8s --interval=67s --timeout=5s --retries=3 \ + CMD curl -fsS 'http://localhost/i/' | grep -q 'jsonVars' || exit 1 diff --git a/Docker/hooks/build b/Docker/hooks/build new file mode 100755 index 000000000..73bc90e74 --- /dev/null +++ b/Docker/hooks/build @@ -0,0 +1,22 @@ +#!/bin/bash + +cd .. +FRESHRSS_VERSION=`grep "'FRESHRSS_VERSION'" constants.php | cut -d "'" -f4` +echo "$FRESHRSS_VERSION" + +if [[ "$DOCKERFILE_PATH" == *-ARM ]] +then + #TODO: Add --squash --platform arm options when Docker Hub deamon supports them + docker build \ + --build-arg FRESHRSS_VERSION="$FRESHRSS_VERSION" \ + --build-arg SOURCE_BRANCH="$SOURCE_BRANCH" \ + --build-arg SOURCE_COMMIT="$SOURCE_COMMIT" \ + -f "$DOCKERFILE_PATH" -t "$IMAGE_NAME" . +else + #TODO: Add --squash option when Docker Hub deamon supports it + docker build \ + --build-arg FRESHRSS_VERSION="$FRESHRSS_VERSION" \ + --build-arg SOURCE_BRANCH="$SOURCE_BRANCH" \ + --build-arg SOURCE_COMMIT="$SOURCE_COMMIT" \ + -f "$DOCKERFILE_PATH" -t "$IMAGE_NAME" . +fi diff --git a/Docker/hooks/pre_build b/Docker/hooks/pre_build index f6c8211c0..32074059c 100755 --- a/Docker/hooks/pre_build +++ b/Docker/hooks/pre_build @@ -1,6 +1,8 @@ #!/bin/bash -if [[ "$DOCKERFILE_PATH" == *-ARM ]]; +cp README.md ../ + +if [[ "$DOCKERFILE_PATH" == *-ARM ]] then # https://github.com/balena-io/qemu # Download a local copy of QEMU on Docker Hub build machine diff --git a/app/install.php b/app/install.php index e5142628d..c3aff3826 100644 --- a/app/install.php +++ b/app/install.php @@ -724,6 +724,7 @@ case 5: + <?php echo _t('install.title'); ?> -- cgit v1.2.3 From a394d7ab10dbaaca78cc8ca3c6536d7a808d7931 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 13 Jul 2019 15:19:39 +0200 Subject: Docker Hub readme (#2441) * Docker Hub readme Try to use anothe readme. And update info for https://alpinelinux.org/posts/Alpine-3.10.1-released.html * Test another variant * /tmp/ did not work --- CHANGELOG.md | 2 +- Docker/hooks/post_checkout | 4 ++++ Docker/hooks/pre_build | 2 -- 3 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 Docker/hooks/post_checkout (limited to 'Docker/hooks/pre_build') diff --git a/CHANGELOG.md b/CHANGELOG.md index f548bc86b..4b734e22f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ * Docker: Add automatic health check [#2438](https://github.com/FreshRSS/FreshRSS/pull/2438) * Docker: Add a version for ARM achitecture such as for Raspberry Pi [#2436](https://github.com/FreshRSS/FreshRSS/pull/2436) * Docker: Ubuntu image updated to 19.04 with PHP 7.2.19 and Apache 2.4.38 [#2422](https://github.com/FreshRSS/FreshRSS/pull/2422) - * Docker: Alpine image updated to 3.10 with PHP 7.3.6 and Apache 2.4.39 [#2238](https://github.com/FreshRSS/FreshRSS/pull/2238) + * Docker: Alpine image updated to 3.10 with PHP 7.3.7 and Apache 2.4.39 [#2238](https://github.com/FreshRSS/FreshRSS/pull/2238) * I18n * Improve Occitan [#2358](https://github.com/FreshRSS/FreshRSS/pull/2358) * Misc. diff --git a/Docker/hooks/post_checkout b/Docker/hooks/post_checkout new file mode 100644 index 000000000..b33c941e5 --- /dev/null +++ b/Docker/hooks/post_checkout @@ -0,0 +1,4 @@ +#!/bin/bash + +mv ../README.md ../README.en.md +mv README.md ../ diff --git a/Docker/hooks/pre_build b/Docker/hooks/pre_build index 32074059c..5946b045b 100755 --- a/Docker/hooks/pre_build +++ b/Docker/hooks/pre_build @@ -1,7 +1,5 @@ #!/bin/bash -cp README.md ../ - if [[ "$DOCKERFILE_PATH" == *-ARM ]] then # https://github.com/balena-io/qemu -- cgit v1.2.3 From ad92518fe44279b69308aaf0a757469f5bf42910 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Mon, 22 Jul 2019 16:07:40 +0200 Subject: [CI] Run shellcheck and shfmt (#2454) * [CI] Run shellcheck and shfmt Cf. https://github.com/FreshRSS/FreshRSS/pull/2436#discussion_r305640019 * rename * no need for disable anymore * also remove leftover indentation flags even if it makes no difference to syntax checking * define colors and reset before exit for local use --- .travis.yml | 1 + Docker/entrypoint.sh | 11 +++++++---- Docker/hooks/build | 5 ++--- Docker/hooks/pre_build | 3 +-- p/themes/Ansum/sass.sh | 1 + p/themes/Mapco/sass.sh | 1 + tests/shellchecks.sh | 29 +++++++++++++++++++++++++++++ 7 files changed, 42 insertions(+), 9 deletions(-) create mode 100755 tests/shellchecks.sh (limited to 'Docker/hooks/pre_build') diff --git a/.travis.yml b/.travis.yml index 078a91109..ee510ee84 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,6 +16,7 @@ script: - phpenv rehash - find . -not -path "./lib/JSON.php" -name \*.php -print0 | xargs -0 -n1 -P4 php -l 1>/dev/null 2>php-l-results - if [ -s php-l-results ]; then cat php-l-results; exit 1; fi + - bash tests/shellchecks.sh - | if [[ $VALIDATE_STANDARD == yes ]]; then COMPOSER_BIN=$(composer global config --absolute bin-dir) diff --git a/Docker/entrypoint.sh b/Docker/entrypoint.sh index b7a961569..bb0e1bde0 100755 --- a/Docker/entrypoint.sh +++ b/Docker/entrypoint.sh @@ -1,15 +1,18 @@ #!/bin/sh -php -f ./cli/prepare.php > /dev/null +php -f ./cli/prepare.php >/dev/null chown -R :www-data . chmod -R g+r . && chmod -R g+w ./data/ -find /etc/php*/ -name php.ini -exec sed -r -i "\#^;?date.timezone#s#^.*#date.timezone = $TZ#" {} \; +find /etc/php*/ -name php.ini -exec sed -r -i "\\#^;?date.timezone#s#^.*#date.timezone = $TZ#" {} \; if [ -n "$CRON_MIN" ]; then - (echo "export TZ=$TZ" ; echo "export COPY_SYSLOG_TO_STDERR=$COPY_SYSLOG_TO_STDERR") > /var/www/FreshRSS/Docker/env.txt - crontab -l | sed -r "\#FreshRSS#s#^[^ ]+ #$CRON_MIN #" | crontab - + ( + echo "export TZ=$TZ" + echo "export COPY_SYSLOG_TO_STDERR=$COPY_SYSLOG_TO_STDERR" + ) >/var/www/FreshRSS/Docker/env.txt + crontab -l | sed -r "\\#FreshRSS#s#^[^ ]+ #$CRON_MIN #" | crontab - fi exec "$@" diff --git a/Docker/hooks/build b/Docker/hooks/build index 73bc90e74..84e759a80 100755 --- a/Docker/hooks/build +++ b/Docker/hooks/build @@ -1,11 +1,10 @@ #!/bin/bash cd .. -FRESHRSS_VERSION=`grep "'FRESHRSS_VERSION'" constants.php | cut -d "'" -f4` +FRESHRSS_VERSION=$(grep "'FRESHRSS_VERSION'" constants.php | cut -d "'" -f4) echo "$FRESHRSS_VERSION" -if [[ "$DOCKERFILE_PATH" == *-ARM ]] -then +if [[ $DOCKERFILE_PATH == *-ARM ]]; then #TODO: Add --squash --platform arm options when Docker Hub deamon supports them docker build \ --build-arg FRESHRSS_VERSION="$FRESHRSS_VERSION" \ diff --git a/Docker/hooks/pre_build b/Docker/hooks/pre_build index 5946b045b..b2cda0e48 100755 --- a/Docker/hooks/pre_build +++ b/Docker/hooks/pre_build @@ -1,7 +1,6 @@ #!/bin/bash -if [[ "$DOCKERFILE_PATH" == *-ARM ]] -then +if [[ $DOCKERFILE_PATH == *-ARM ]]; then # https://github.com/balena-io/qemu # Download a local copy of QEMU on Docker Hub build machine curl -LSs 'https://github.com/balena-io/qemu/releases/download/v3.0.0%2Bresin/qemu-3.0.0+resin-arm.tar.gz' | tar -xzv --strip-components=1 --wildcards '*/qemu-*' diff --git a/p/themes/Ansum/sass.sh b/p/themes/Ansum/sass.sh index a653acace..6c65128ea 100644 --- a/p/themes/Ansum/sass.sh +++ b/p/themes/Ansum/sass.sh @@ -1 +1,2 @@ +#!/bin/sh sass --watch ansum.scss:ansum.css diff --git a/p/themes/Mapco/sass.sh b/p/themes/Mapco/sass.sh index 316d04cf2..c0b3d47df 100644 --- a/p/themes/Mapco/sass.sh +++ b/p/themes/Mapco/sass.sh @@ -1 +1,2 @@ +#!/bin/sh sass --watch mapco.scss:mapco.css diff --git a/tests/shellchecks.sh b/tests/shellchecks.sh new file mode 100755 index 000000000..648f2766e --- /dev/null +++ b/tests/shellchecks.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# Based on https://github.com/koreader/koreader/blob/master/.ci/helper_shellchecks.sh + +ANSI_RED="\\033[31;1m" +ANSI_GREEN="\\033[32;1m" +ANSI_RESET="\\033[0m" + +mapfile -t shellscript_locations < <({ git grep -lE '^#!(/usr)?/bin/(env )?(bash|sh)' && git ls-files ./*.sh; } | sort | uniq) + +SHELLSCRIPT_ERROR=0 + +for shellscript in "${shellscript_locations[@]}"; do + echo -e "${ANSI_GREEN}Running shellcheck on ${shellscript}" + shellcheck "${shellscript}" || SHELLSCRIPT_ERROR=1 + echo -e "${ANSI_GREEN}Running shfmt on ${shellscript}" + if ! shfmt "${shellscript}" >/dev/null 2>&1; then + echo -e "${ANSI_RED}Warning: ${shellscript} contains the following problem:" + shfmt "${shellscript}" || SHELLSCRIPT_ERROR=1 + continue + fi + if [ "$(cat "${shellscript}")" != "$(shfmt "${shellscript}")" ]; then + echo -e "${ANSI_RED}Warning: ${shellscript} does not abide by coding style, diff for expected style:" + shfmt "${shellscript}" | diff "${shellscript}" - || SHELLSCRIPT_ERROR=1 + fi +done + +echo -ne "${ANSI_RESET}" + +exit "${SHELLSCRIPT_ERROR}" -- cgit v1.2.3