1
0

initial working build

This commit is contained in:
tbelway 2024-12-02 11:30:20 -05:00
parent a85ca31b65
commit 03e91c5905
3 changed files with 261 additions and 0 deletions

34
Containerfile Normal file
View File

@ -0,0 +1,34 @@
# Caddy recommended way to build the custom image
FROM registry.belway.me/belwayhome/almalinux9-minimal:latest
ARG foundry_url
ARG nodejs_version
ENV foundry_url $foundry_url
ENV nodejs_version $nodejs_version
# Because pipeline is rootless
VOLUME /var/lib/containers
VOLUME /home/podman/.local/share/containers
RUN microdnf update \
&& microdnf -y install \
openssl-devel \
tar \
unzip \
wget \
&& rm -rf /var/cache/yum
RUN curl --silent --location https://rpm.nodesource.com/setup_${nodejs_version}.x | bash - \
&& microdnf -y install \
nodejs \
&& rm -rf /var/cache/yum
WORKDIR /foundryvtt/foundryvtt
RUN wget -O foundryvtt.zip ${foundry_url} && unzip foundryvtt.zip && rm foundryvtt.zip
WORKDIR /foundryvtt
VOLUME /foundryvtt/foundrydata
EXPOSE 30000
ENTRYPOINT /usr/bin/node /foundryvtt/foundryvtt/resources/app/main.js --dataPath=/foundryvtt/foundrydata

View File

@ -1,2 +1,38 @@
# foundryvtt_container # foundryvtt_container
## Builidng the Container
Just run the script with the URL and Version declared as follows:
```bash
./build.sh -U $FOUNDRY_URL -I -v $VERSION
```
## Running the Container
I'm using quadlets, so here's an example quadlet:
```bash
# in your rootless podman container direction, ie: /etc/containers/systemd/users/${USER_UID}/
# foundryvtt.container
[Unit]
Description=FoundryVTT Custom Container
Requires=var-mnt-data01.mount
[Container]
AutoUpdate=registry
HostName=${VM_HOSTNAME}
Image=registry.belway.me/public/foundryvtt_container:latest
Label=registry
Network=slirp4netns:port_handler=slirp4netns
PublishPort=30000:30000
Timezone=America/Montreal
Volume=${YOUR_DATA_DIRECTORY_HERE}:/foundryvtt/foundrydata:z
[Service]
Restart=always
[Install]
WantedBy=multi-user.target default.target
```
Then as the user, run:
```bash
systemctl --user daemon-reload
systemctl --user start foundryvtt
```

191
build.sh Executable file
View File

@ -0,0 +1,191 @@
#!/bin/bash
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Name: build.sh
# Author(s): Thomas Belway
# Source: https://gitea.belway.me/Public/foundryvtt_container.git
# Example: ./build.sh -U $FOUNDRY_URL -I -v $VERSION
# Description: Builds custom foundryvtt container and pushes to registry.
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
####################################################################
# Variables
####################################################################
# General Variables
REGISTRY="registry.belway.me"
REGISTRY_NAMESPACE="public/foundryvtt_container"
###############################################################################################################################
# Functions
###############################################################################################################################
# Informational Functions
usage() {
cat << EOF
usage: ${SCRIPT_NAME} [options]
This script exports data from one database to be compared with data from another database
OPTIONS:
-D Enable DEBUG mode
-f Custom Containerfile with absolute or relative directory
-F Format of containerfile
-h Show this message
-I Initialize the registry
-n Node version
-R For rebuild the image.
-S Scheduled build, should only be used by automation (gitea actions).
-U Foundry URL for downloading the version
-v Version to build, defaults to 'latest'
EOF
exit 1
}
get_parameters() {
while getopts "Df:F:hIRSU:v:" option_name; do
case "$option_name" in
"D")
DEBUG="YES"
;;
"f")
OPT_CONTAINERFILE="$OPTARG"
;;
"F")
OPT_FORMAT_TYPE="$OPTARG"
;;
"h")
usage
;;
"I")
INITIALIZE="TRUE"
;;
"n")
NODEJS_VERSION="$OPTARG"
;;
"R")
OPT_REBUILD="TRUE"
;;
"S")
OPT_SCHEDULED="TRUE"
;;
"U")
FOUNDRY_URL="$OPTARG"
;;
"v")
OPT_VERSION="$OPTARG"
;;
"?")
echo "Error: Unknown option $OPTARG"
usage
;;
":")
echo "Error: No argument value for option $OPTARG"
usage
;;
*)
echo "Error: Unknown error while processing options"
usage
;;
esac
done
if [[ -z $FOUNDRY_URL ]]; then
echo "Need the foundry URL, please try again..."
exit 1
fi
if [[ -z $OPT_CONTAINERFILE ]]; then
OPT_CONTAINERFILE="Containerfile"
fi
if [[ -z $OPT_FORMAT_TYPE ]]; then
OPT_FORMAT="--format docker"
elif [[ $OPT_FORMAT_TYPE == "podman" ]]; then
OPT_FORMAT=""
else
OPT_FORMAT="--format ${OPT_FORMAT_TYPE}"
fi
if [[ $DEBUG == "YES" ]]; then
SILENCE_OUTPUT=""
SILENCE_STOUT=" "
echo "Debug mode enabled."
fi
if [[ -z $OPT_REBUILD ]]; then
OPT_REBUILD="FALSE"
fi
if [[ -z $OPT_SCHEDULED ]]; then
OPT_SCHEDULED="FALSE"
fi
if [[ -z $OPT_VERSION ]]; then
OPT_VERSION="12.331"
fi
if [[ "${OPT_SCHEDULED}" == "TRUE" ]]; then
OPT_REBUILD="FALSE"
fi
if [[ -z $NODEJS_VERSION ]]; then
NODEJS_VERSION=$(curl https://foundryvtt.com/article/installation/ | grep nodesource | grep rpm | tr -d -c 0-9)
fi
TAG="$OPT_VERSION"
}
# Build Functions
container_initialize() {
echo "Initializing container build..."
podman login ${REGISTRY}
podman build -f ${OPT_CONTAINERFILE} -t ${REGISTRY}/${REGISTRY_NAMESPACE}:${TAG} -t ${REGISTRY}/${REGISTRY_NAMESPACE}:latest --build-arg foundry_url=${FOUNDRY_URL} --build-arg nodejs_version=${NODEJS_VERSION}
podman push ${REGISTRY}/${REGISTRY_NAMESPACE}:${TAG}
podman push ${REGISTRY}/${REGISTRY_NAMESPACE}:latest
podman logout ${REGISTRY}
echo "Container build initialized!"
}
container_scheduled_build() {
echoo "Scheduled build starting..."
if [[ "${CADDY_IMAGE_VERSION}" != "${CUSTOM_CADDY_IMAGE_VERSION}" ]]; then
podman login ${REGISTRY}
podman build -f ${OPT_CONTAINERFILE} -t ${REGISTRY}/${REGISTRY_NAMESPACE}:${TAG} -t ${REGISTRY}/${REGISTRY_NAMESPACE}:latest --build-arg foundry_url=${FOUNDRY_URL}
podman push ${REGISTRY}/${REGISTRY_NAMESPACE}:${TAG}
podman push ${REGISTRY}/${REGISTRY_NAMESPACE}:latest
podman logout ${REGISTRY}
else
echo "No new version, exiting..."
exit 1
fi
echo "Scheduled build complete!"
}
container_rebuild() {
echo "Rebuilding container..."
podman login ${REGISTRY}
podman build -f ${OPT_CONTAINERFILE} -t ${REGISTRY}/${REGISTRY_NAMESPACE}:${TAG} -t ${REGISTRY}/${REGISTRY_NAMESPACE}:latest --build-arg foundry_url=${FOUNDRY_URL}
podman push ${REGISTRY}/${REGISTRY_NAMESPACE}:${TAG}
podman push ${REGISTRY}/${REGISTRY_NAMESPACE}:latest
podman logout ${REGISTRY}
echo "Rebuild complete!"
}
###############################################################################################################################
# Main Script
###############################################################################################################################
get_parameters "$@"
if [[ "$OPT_SCHEDULED" == "TRUE" ]]; then
container_scheduled_build
fi
if [[ "$OPT_REBUILD" == "TRUE" ]]; then
container_rebuild
fi
if [[ "$INITIALIZE" == "TRUE" ]]; then
container_initialize
fi