Skip to content

Commit

Permalink
Release 7.3.0 - See CHANGELOG.md
Browse files Browse the repository at this point in the history
  • Loading branch information
tiredofit committed Feb 10, 2022
1 parent 25e9479 commit 42695b5
Show file tree
Hide file tree
Showing 27 changed files with 561 additions and 393 deletions.
20 changes: 10 additions & 10 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ jobs:
builder: ${{ steps.buildx.outputs.name }}
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64
platforms: linux/amd64,linux/arm/v7,linux/arm64
push: true
tags: ${{ steps.prep.outputs.tags }}
v3_15:
Expand Down Expand Up @@ -198,7 +198,7 @@ jobs:
builder: ${{ steps.buildx.outputs.name }}
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64
platforms: linux/amd64,linux/arm/v7,linux/arm64
push: true
tags: ${{ steps.prep.outputs.tags }}
v3_14:
Expand Down Expand Up @@ -293,7 +293,7 @@ jobs:
builder: ${{ steps.buildx.outputs.name }}
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64
platforms: linux/amd64,linux/arm/v7,linux/arm64
push: true
tags: ${{ steps.prep.outputs.tags }}
v3_13:
Expand Down Expand Up @@ -389,7 +389,7 @@ jobs:
builder: ${{ steps.buildx.outputs.name }}
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64
platforms: linux/amd64,linux/arm/v7,linux/arm64
push: true
tags: ${{ steps.prep.outputs.tags }}
v3_12:
Expand Down Expand Up @@ -485,7 +485,7 @@ jobs:
builder: ${{ steps.buildx.outputs.name }}
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64
platforms: linux/amd64,linux/arm/v7,linux/arm64
push: true
tags: ${{ steps.prep.outputs.tags }}
v3_11:
Expand Down Expand Up @@ -581,7 +581,7 @@ jobs:
builder: ${{ steps.buildx.outputs.name }}
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64
platforms: linux/amd64,linux/arm/v7,linux/arm64
push: true
tags: ${{ steps.prep.outputs.tags }}
v3_10:
Expand Down Expand Up @@ -677,7 +677,7 @@ jobs:
builder: ${{ steps.buildx.outputs.name }}
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64
platforms: linux/amd64,linux/arm/v7,linux/arm64
push: true
tags: ${{ steps.prep.outputs.tags }}
v3_9:
Expand Down Expand Up @@ -773,7 +773,7 @@ jobs:
builder: ${{ steps.buildx.outputs.name }}
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64
platforms: linux/amd64,linux/arm/v7,linux/arm64
push: true
tags: ${{ steps.prep.outputs.tags }}
v3_8:
Expand Down Expand Up @@ -965,7 +965,7 @@ jobs:
builder: ${{ steps.buildx.outputs.name }}
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm/v6,linux/arm64
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.prep.outputs.tags }}
v3_6:
Expand Down Expand Up @@ -1061,7 +1061,7 @@ jobs:
builder: ${{ steps.buildx.outputs.name }}
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm/v6,linux/arm64
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.prep.outputs.tags }}
v3_5:
Expand Down
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,23 @@
## 7.3.0 2022-02-07 <dave at tiredofit dot ca>

### Added
- S6 Overlay 3.0.0.2
- FluentBit 1.7.12
- Zabbix Agent 5.4.10
- New functions (create_zabbix) for easier development
- doas package for eventual replacement of sudo
- Added new helpers on command line (service_up/service_down/changelog/version)
- Added banner showing image name and version upon startup
- Custom Bash Prompt when entering in container

### Changed
- Stop relying on /usr/bin/with-contenv - Instead use recommended /command/ folder as outlined in S6 overlay documentation
- Cleanup of code and allow for CaMeLCasE environment variables (specifically for var_true/var_false and others)
- Many optimizations and cleanup of scripts for pure modernization sake

### Removed
- Removed fix-attrs.d reliance due to deprecation by S6 Overlay

## 7.2.19 2022-01-20 <dave at tiredofit dot ca>

### Changed
Expand Down
78 changes: 61 additions & 17 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,16 @@ FROM docker.io/alpine:3.15
LABEL maintainer="Dave Conroy (github.com/tiredofit)"

ARG GOLANG_VERSION=1.17.6
ARG ZABBIX_VERSION
ARG DOAS_VERSION
ARG FLUENTBIT_VERSION
ARG S6_OVERLAY_VERSION
ARG ZABBIX_VERSION

### Set defaults
ENV FLUENTBIT_VERSION=${FLUENTBIT_VERSION:-"1.8.11"} \
S6_OVERLAY_VERSION=${S6_OVERLAY_VERSION:-"v2.2.0.3"} \
ZABBIX_VERSION=${ZABBIX_VERSION:-"5.4.9"} \
ENV FLUENTBIT_VERSION=${FLUENTBIT_VERSION:-"1.8.12"} \
S6_OVERLAY_VERSION=${S6_OVERLAY_VERSION:-"3.0.0.2"} \
ZABBIX_VERSION=${ZABBIX_VERSION:-"5.4.10"} \
DOAS_VERSION=${DOAS_VERSION:-"v6.8.2"} \
DEBUG_MODE=FALSE \
TIMEZONE=Etc/GMT \
CONTAINER_ENABLE_SCHEDULING=TRUE \
Expand All @@ -18,16 +20,20 @@ ENV FLUENTBIT_VERSION=${FLUENTBIT_VERSION:-"1.8.11"} \
CONTAINER_MESSAGING_BACKEND=msmtp \
CONTAINER_ENABLE_MONITORING=TRUE \
CONTAINER_MONITORING_BACKEND=zabbix \
CONTAINER_ENABLE_LOGSHIPPING=FALSE
CONTAINER_ENABLE_LOGSHIPPING=FALSE \
S6_GLOBAL_PATH=/command:/usr/bin:/bin:/usr/sbin:sbin:/usr/local/bin:/usr/local/sbin \
S6_KEEP_ENV=1 \
IMAGE_NAME="tiredofit/alpine" \
IMAGE_REPO_URL="https://github.com/tiredofit/docker-alpine/"

## Mono Repo workarounds
RUN case "$(cat /etc/os-release | grep VERSION_ID | cut -d = -f 2 | cut -d . -f 1,2)" in \
3.5|3.6) no_upx=true ;; \
"3.5" | "3.6" ) no_upx=true ;; \
*) busybox_extras="busybox-extras" ;; \
esac ; \
\
case "$(cat /etc/os-release | grep VERSION_ID | cut -d = -f 2 | cut -d . -f 1,2)" in \
"3.11" |"3.12" | "3.13" | "3.14" | "3.15" ) zabbix_args=" --enable-agent2 " ; zabbix_agent2=true ; fluentbit_make=true ;; \
"3.11" |"3.12" | "3.13" | "3.14" | "3.15" | "edge" ) zabbix_args=" --enable-agent2 " ; zabbix_agent2=true ; fluentbit_make=true ;; \
*) : ;; \
esac ; \
\
Expand All @@ -38,18 +44,24 @@ RUN case "$(cat /etc/os-release | grep VERSION_ID | cut -d = -f 2 | cut -d . -f
esac; \
\
case "$(cat /etc/os-release | grep VERSION_ID | cut -d = -f 2 | cut -d . -f 1,2)" in \
3.5|3.6) upx="" ;; \
"3.5"| "3.6") upx="" ;; \
esac ; \
\
##
case "$(cat /etc/os-release | grep VERSION_ID | cut -d = -f 2 | cut -d . -f 1,2)" in \
"3.5" | "3.6" | "3.7" | "3.8" ) build_doas=true ;; \
*) doas_package="doas" ;; \
esac ; \
##
set -ex && \
apk update && \
apk upgrade && \
### Add core utils
apk add -t .base-rundeps \
bash \
bc \
${busybox_extras} \
curl \
${doas_package} \
fts \
grep \
iputils \
Expand Down Expand Up @@ -102,7 +114,18 @@ RUN case "$(cat /etc/os-release | grep VERSION_ID | cut -d = -f 2 | cut -d . -f
## Quiet down sudo
echo "Set disable_coredump false" > /etc/sudo.conf && \
\
### Golang installation
### Build Doas
if [ "$build_doas" = "true" ] ; then \
mkdir -p /usr/src/doas ; \
curl -sSL https://github.com/Duncaen/OpenDoas/archive/${DOAS_VERSION}.tar.gz | tar xfz - --strip 1 -C /usr/src/doas ; \
cd /usr/src/doas ; \
./configure --prefix=/usr \
--enable-static \
--without-pam ; \
make ; \
make install ; \
fi ; \
### Golang installation
if [ "$zabbix_agent2" = "true" ] ; then \
mkdir -p /usr/src/golang ; \
curl -sSL https://dl.google.com/go/go${GOLANG_VERSION}.src.tar.gz | tar xvfz - --strip 1 -C /usr/src/golang ; \
Expand Down Expand Up @@ -218,7 +241,7 @@ RUN case "$(cat /etc/os-release | grep VERSION_ID | cut -d = -f 2 | cut -d . -f
-DFLB_RELEASE=Yes \
-DFLB_SHARED_LIB=No \
-DFLB_SIGNV4=No \
-DFLB_SMALL=No \
-DFLB_SMALL=Yes \
. && \
if [ "$fluentbit_make" = "true" ] ; then if [ "$apkArch" = "x86_64" ] ; then make -j"$(nproc)" ; make install ; mv /usr/etc/fluent-bit /etc/fluent-bit ; mkdir -p /etc/fluent-bit/parsers.d; mkdir -p /etc/fluent-bit/conf.d ; strip /usr/bin/fluent-bit ; if [ "$apkArch" = "x86_64" ] && [ "$no_upx" != "true" ]; then upx /usr/bin/fluent-bit ; fi ; fi ; fi ;\
\
Expand All @@ -231,29 +254,50 @@ RUN case "$(cat /etc/os-release | grep VERSION_ID | cut -d = -f 2 | cut -d . -f
#mv promtail /usr/sbin && \
\
### Clean up
mkdir -p /etc/logrotate.d && \
mkdir -p /etc/logrotate && \
mkdir -p /etc/doas.d && \
apk del --purge \
.fluentbit-build-deps \
.golang-build-deps \
.zabbix-build-deps \
&& \
rm -rf /etc/logrotate.d/* && \
rm -rf /etc/doas.conf /etc/doas.d/* && \
rm -rf /root/.cache && \
rm -rf /root/go && \
rm -rf /tmp/* && \
rm -rf /usr/src/* && \
rm -rf /var/cache/apk/* && \
\
### S6 overlay installation
apkArch="$(apk --print-arch)" && \
case "$apkArch" in \
x86_64) s6Arch='amd64' ;; \
armv7) s6Arch='arm' ;; \
x86_64) s6Arch='x86_64' ;; \
armv7) s6Arch='armhf' ;; \
armhf) s6Arch='armhf' ;; \
aarch64) s6Arch='aarch64' ;; \
ppc64le) s6Arch='ppc64le' ;; \
*) echo >&2 "Error: unsupported architecture ($apkArch)"; exit 1 ;; \
esac; \
curl -sSL https://github.com/just-containers/s6-overlay/releases/download/${S6_OVERLAY_VERSION}/s6-overlay-${s6Arch}.tar.gz | tar xfz - -C /
curl -sSL https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch-${S6_OVERLAY_VERSION}.tar.xz | tar xvpfJ - -C / && \
curl -sSL https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${s6Arch}-${S6_OVERLAY_VERSION}.tar.xz | tar xvpfJ - -C / && \
curl -sSL https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-noarch-${S6_OVERLAY_VERSION}.tar.xz | tar xvpfJ - -C / && \
curl -sSL https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-arch-${S6_OVERLAY_VERSION}.tar.xz | tar xvpfJ - -C / && \
mkdir -p /etc/cont-init.d && \
mkdir -p /etc/cont-finish.d && \
mkdir -p /etc/services.d && \
chown -R 0755 /etc/cont-init.d && \
chown -R 0755 /etc/cont-finish.d && \
chmod -R 0755 /etc/services.d && \
# To remove when S6 3.1.0 is released
echo "/command:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin" > /etc/s6-overlay/config/global_path && \
##
sed -i "s|s6-rc -v2|s6-rc -v1|g" /package/admin/s6-overlay/etc/s6-linux-init/skel/rc.init && \
sed -i "s|s6-rc -v2|s6-rc -v1|g" /package/admin/s6-overlay/etc/s6-linux-init/skel/rc.shutdown && \
sed -i "s|echo|# echo |g" /package/admin/s6-overlay/etc/s6-rc/scripts/cont-init && \
sed -i "s|echo|# echo |g" /package/admin/s6-overlay/etc/s6-rc/scripts/cont-finish && \
sed -i "s|echo ' (no readiness notification)'|# echo ' (no readiness notification)'|g" /package/admin/s6-overlay/etc/s6-rc/scripts/services-up && \
sed -i "s|s6-echo -n|# s6-echo -n|g" /package/admin/s6-overlay/etc/s6-rc/scripts/services-up


### Networking configuration
EXPOSE 2020/TCP 10050/TCP
Expand All @@ -262,4 +306,4 @@ EXPOSE 2020/TCP 10050/TCP
ENTRYPOINT ["/init"]

### Add folders
ADD install/ /
COPY install/ /
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
The MIT License (MIT)

Copyright (c) 2021 Dave Conroy
Copyright (c) 2022 Dave Conroy

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
31 changes: 16 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -122,19 +122,20 @@ The following directories are used for configuration and can be mapped for persi

Below is the complete list of available options that can be used to customize your installation.
#### Container Options
| Parameter | Description | Default |
| ----------------------------------- | ---------------------------------------------------------------------- | ------------------------ |
| `CONAINER_ENABLE_LOG_TIMESTAMP` | Prefix this images container logs with timestamp | `TRUE` |
| `CONTAINER_COLORIZE_OUTPUT` | Enable/Disable colorized console output | `TRUE` |
| `CONTAINER_CUSTOM_PATH` | Used for adding custom files into the image upon startup | `/assets/custom` |
| `CONTAINER_CUSTOM_SCRIPTS_PATH` | Used for adding custom scripts to execute upon startup | `/assets/custom-scripts` |
| `CONTAINER_ENABLE_PROCESS_COUNTER` | Show how many times process has executed in console log | `TRUE` |
| `CONTAINER_LOG_LEVEL` | Control level of output of container `INFO`, `WARN`, `NOTICE`, `DEBUG` | `NOTICE` |
| `CONTAINER_LOG_TIMESAMP_TIME_FMT` | Timestamp Time Format | `%H:%M:%S` |
| `CONTAINER_LOG_TIMESTAMP_DATE_FMT` | Timestamp Date Format | `%Y-%m-%d` |
| `CONTAINER_LOG_TIMESTAMP_SEPERATOR` | Timestamp seperator | `-` |
| `CONTAINER_NAME` | Used for setting entries in Monnitoring and Log Shipping | (hostname) |
| `TIMEZONE` | Set Timezone | `Etc/GMT` |
| Parameter | Description | Default |
| ----------------------------------- | ----------------------------------------------------------------------------------- | ------------------------ |
| `CONAINER_ENABLE_LOG_TIMESTAMP` | Prefix this images container logs with timestamp | `TRUE` |
| `CONTAINER_COLORIZE_OUTPUT` | Enable/Disable colorized console output | `TRUE` |
| `CONTAINER_CUSTOM_BASH_PROMPT` | If you wish to set a different bash prompt then '(imagename):(version) HH:MM:SS # ' | |
| `CONTAINER_CUSTOM_PATH` | Used for adding custom files into the image upon startup | `/assets/custom` |
| `CONTAINER_CUSTOM_SCRIPTS_PATH` | Used for adding custom scripts to execute upon startup | `/assets/custom-scripts` |
| `CONTAINER_ENABLE_PROCESS_COUNTER` | Show how many times process has executed in console log | `TRUE` |
| `CONTAINER_LOG_LEVEL` | Control level of output of container `INFO`, `WARN`, `NOTICE`, `DEBUG` | `NOTICE` |
| `CONTAINER_LOG_TIMESAMP_TIME_FMT` | Timestamp Time Format | `%H:%M:%S` |
| `CONTAINER_LOG_TIMESTAMP_DATE_FMT` | Timestamp Date Format | `%Y-%m-%d` |
| `CONTAINER_LOG_TIMESTAMP_SEPERATOR` | Timestamp seperator | `-` |
| `CONTAINER_NAME` | Used for setting entries in Monnitoring and Log Shipping | (hostname) |
| `TIMEZONE` | Set Timezone | `Etc/GMT` |


#### Scheduling Options
Expand Down Expand Up @@ -380,7 +381,7 @@ See `/assets/functions/00-container` for more detailed documentation for the var
Put at the top:

````bash
#!/usr/bin/with-contenv bash # Pull in Container Environment Variables from Dockerfile/Docker Runtime
#!/command/with-contenv bash # Pull in Container Environment Variables from Dockerfile/Docker Runtime
source /assets/functions/00-container # Pull in all custom container functions from this image
prepare_service single # Read functions and defaults only from files matching this script filename - see detailed docs for more
PROCESS_NAME="process" # set the prefix for any logging
Expand All @@ -398,7 +399,7 @@ liftoff # this writes to the state files at /tmp/s
Put at the top:

````bash
#!/usr/bin/with-contenv bash # Pull in Container Environment Variables from Dockerfile/Docker Runtime
#!/command/with-contenv bash # Pull in Container Environment Variables from Dockerfile/Docker Runtime
source /assets/functions/00-container # Pull in all custom container functions from this image
prepare_service defaults single # Read defaults only from files matching this script filename - see detailed docs for more
PROCESS_NAME="process" # set the prefix for any logging
Expand Down
17 changes: 14 additions & 3 deletions install/assets/defaults/00-container
Original file line number Diff line number Diff line change
@@ -1,21 +1,32 @@
#!/usr/bin/with-contenv bash
#!/command/with-contenv bash

### Set defaults
CONTAINER_CUSTOM_PATH=${CONTAINER_CUSTOM_PATH:-"/assets/custom/"}
CONTAINER_CUSTOM_SCRIPTS_PATH=${CONTAINER_CUSTOM_SCRIPTS_PATH:-"/assets/custom-scripts/"}
CONTAINER_ENABLE_CUSTOM_BASH_PROMPT=${CONTAINER_ENABLE_CUSTOM_BASH_PROMPT:-"TRUE"}
CONTAINER_ENABLE_DOCKER_SECRETS=${CONTAINER_ENABLE_DOCKER_SECRETS:-"TRUE"}
CONTAINER_ENABLE_PROCESS_COUNTER=${CONTAINER_ENABLE_PROCESS_COUNTER:-"TRUE"}
CONTAINER_ENABLE_LOGROTATE=${CONTAINER_ENABLE_LOGROTATE:-"TRUE"}
CONTAINER_ENABLE_LOGSHIPPING=${CONTAINER_ENABLE_LOGSHIPPING:-"FALSE"}
CONTAINER_ENABLE_LOG_PREFIX=${CONTAINER_ENABLE_LOG_PREFIX:-"TRUE"}
CONTAINER_ENABLE_MESSAGING=${CONTAINER_ENABLE_MESSAGING:-"TRUE"}
CONTAINER_ENABLE_MONITORING=${CONTAINER_ENABLE_MONITORING:-"TRUE"}
CONTAINER_ENABLE_PERMISSIONS=${CONTAINER_ENABLE_PERMISSIONS:-"TRUE"}
CONTAINER_ENABLE_PROCESS_COUNTER=${CONTAINER_ENABLE_PROCESS_COUNTER:-"TRUE"}
CONTAINER_ENABLE_PROCESS_HELPER=${CONTAINER_ENABLE_PROCESS_HELPER:-"TRUE"}
CONTAINER_ENABLE_SCHEDULING=${CONTAINER_ENABLE_SCHEDULING:-"TRUE"}
CONTAINER_LOGSHIPPING_BACKEND=${CONTAINER_LOGSHIPPING_BACKEND:-"fluent-bit"}
CONTAINER_LOG_LEVEL=${CONTAINER_LOG_LEVEL:-"NOTICE"}
CONTAINER_LOG_PREFIX_DATE_FMT=${CONTAINER_LOG_PREFIX_DATE_FMT:-"%Y-%m-%d"}
CONTAINER_LOG_PREFIX_SEPERATOR=${CONTAINER_LOG_PREFIX_SEPERATOR:-"-"}
CONTAINER_LOG_PREFIX_SEPERATOR=${CONTAINER_LOG_PREFIX_SEPERATOR:-"."}
CONTAINER_LOG_PREFIX_TIME_FMT=${CONTAINER_LOG_PREFIX_TIME_FMT:-"%H:%M:%S"}
CONTAINER_MESSAGING_BACKEND=${CONTAINER_MESSAGING_BACKEND:-"msmtp"}
CONTAINER_MONITORING_BACKEND=${CONTAINER_MONITORING_BACKEND:-"zabbix"}
CONTAINER_NAME=${CONTAINER_NAME:-"$(hostname)"}
CONTAINER_PROCESS_HELPER_DATE_FMT=${CONTAINER_PROCESS_HELPER_DATE_FMT:-"%Y-%m-%d"}
CONTAINER_PROCESS_HELPER_PATH=${CONTAINER_PROCESS_HELPER_PATH:-"/assets/container/processhelper/"}
CONTAINER_PROCESS_HELPER_SCRIPT=${CONTAINER_PROCESS_HELPER_SCRIPT:-"processhelper.sh"}
CONTAINER_PROCESS_HELPER_TIME_FMT=${CONTAINER_PROCESS_HELPER_TIME_FMT:-"%H:%M:%S"}
CONTAINER_SCHEDULING_BACKEND=${CONTAINER_SCHEDULING_BACKEND:-"cron"}
CONTAINER_SCHEDULING_LOCATION=${CONTAINER_SCHEDULING_LOCATION:-"/assets/cron/"}
CONTAINER_SKIP_SANITY_CHECK=${CONTAINER_SKIP_SANITY_CHECK:-"FALSE"}
DEBUG_MODE=${DEBUG_MODE:-"FALSE"}
Expand Down
3 changes: 1 addition & 2 deletions install/assets/defaults/02-permissions
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
#!/usr/bin/with-contenv bash
#!/command/with-contenv bash

CONTAINER_ENABLE_PERMISSIONS=${CONTAINER_ENABLE_PERMISSIONS:-"TRUE"}
DEBUG_PERMISSIONS=${DEBUG_PERMISSIONS:-"FALSE"}
Loading

0 comments on commit 42695b5

Please sign in to comment.