Table of Contents

About

This is a Docker build for the Corrade scripted agent. There exists an official container of Corrade that is online on the Docker HUB.

Filesystem Layout

.
├── Dockerfile
└── rootfs
    └── usr
        └── local
            └── bin
                └── run

5 directories, 2 files

Dockerfile

# add build arguments for specific architectures
ARG TARGETPLATFORM
 
# using alpine
FROM alpine:edge
 
# unzip required for unpacking Corrade and all the rest are libraries
RUN apk add --no-cache bash unzip curl icu-libs gcompat fontconfig ttf-dejavu libstdc++ dotnet9-runtime
 
# retrieve latest Corrade
RUN mkdir -p /tmo/kitchen
WORKDIR /tmp/kitchen
 
ARG TARGETOS
ARG TARGETARCH
RUN curl \
        --retry 5 --max-time 120 --retry-delay 10 --retry-max-time 120 --retry-all-errors --retry-connrefused \
        -fsSL "https://corrade.grimore.org/download/corrade/${TARGETOS}-${TARGETARCH}/LATEST.zip" -o /tmp/kitchen/Corrade.zip && \
    unzip /tmp/kitchen/Corrade.zip -d /opt/corrade
 
# cleanup
WORKDIR /opt/corrade
RUN rm -rf /tmp/kitchen
 
# remove unneeded
RUN apk del -r unzip curl
 
# add filesystem requirements
ADD rootfs /
 
# expose just the Nucleus port, all the rest is up to the user 
EXPOSE 54377
 
# HTTP, MQTT, TCP, UDP and WebSockets are not exposed but the user can map the port if they wish
# EXPOSE 8080 1883 8085 8086 8088
 
# Corrade volumes storing configuration
VOLUME /etc/corrade
 
# execute the bootstrapper that will start Corrade
ENTRYPOINT ["bash", "/usr/local/bin/run"]
 
# metadata labels
LABEL \
    org.opencontainers.image.vendor="Corrade" \
    org.opencontainers.image.authors="Wizardry and Steamworks <wizardry.steamworks@outlook.com>" \
    org.opencontainers.image.title="Official Corrade Docker Container Image" \
    org.opencontainers.image.description="the libOpenMetaverse scripted agent" \
    org.opencontainers.image.version="latest" \
    org.opencontainers.image.url="https://corrade.grimore.org/" \
    org.opencontainers.image.licenses="MIT"

Files

Here are the files associated with this Corrade build.

run

#!/usr/bin/bash
 
# create a directory that will be mountable as a regular Docker volume
mkdir -p /etc/corrade
 
# now pivot user-editable files as a symlink into the Docker mountable volume directory
if [ ! -f /etc/corrade/CorradeConfiguration.xml ]; then
    cp /opt/corrade/CorradeConfiguration.xml.default /etc/corrade/CorradeConfiguration.xml    
fi
ln -sf /etc/corrade/CorradeConfiguration.xml /opt/corrade/CorradeConfiguration.xml
 
if [ ! -f /etc/corrade/NucleusConfiguration.xml ]; then
    cp /opt/corrade/NucleusConfiguration.xml.default /etc/corrade/NucleusConfiguration.xml    
fi
ln -sf /etc/corrade/NucleusConfiguration.xml /opt/corrade/NucleusConfiguration.xml
 
if [ ! -f /etc/corrade/Log4Net.config ]; then
    cp /opt/corrade/Log4Net.config.default /etc/corrade/Log4Net.config    
fi
ln -sf /etc/corrade/Log4Net.config /opt/corrade/Log4Net.config
 
# DEBUG
#LD_PRELOAD=/lib/libgcompat.so ldd /opt/corrade/Corrade
#ls -l /opt/corrade/
/opt/corrade/Corrade