Skip to content

Commit

Permalink
Build mumble from source
Browse files Browse the repository at this point in the history
  • Loading branch information
QuintenQVD0 committed Jul 17, 2024
1 parent 681ffc4 commit f888177
Show file tree
Hide file tree
Showing 3 changed files with 150 additions and 16 deletions.
44 changes: 31 additions & 13 deletions voice/mumble/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,22 +1,40 @@
FROM --platform=$TARGETOS/$TARGETARCH alpine:edge
FROM --platform=$TARGETOS/$TARGETARCH debian:bookworm-slim AS builder

LABEL author="Michael Parker" maintainer="[email protected]"
# Copy and run the build script
COPY build.sh /build.sh
RUN chmod +x /build.sh
RUN cd / && ./build.sh

LABEL org.opencontainers.image.source="https://github.com/pterodactyl/yolks"
LABEL org.opencontainers.image.licenses=MIT
FROM --platform=$TARGETOS/$TARGETARCH debian:bookworm-slim

## install dependencies
RUN apk add --no-cache murmur tini
# Create necessary directories
RUN mkdir -p /usr/local/bin /usr/local/share/mumble

RUN adduser -D container
# Copy the built Mumble server binary and the latest tag file and the build log from the builder stage
COPY --from=builder /usr/src/mumble/git/build/mumble-server /usr/local/bin/mumble-server
COPY --from=builder /usr/src/mumble/git/build/latest_tag.txt /usr/local/share/mumble/latest_tag.txt
COPY --from=builder /usr/src/mumble/build.log /usr/local/share/mumble/build.log

USER container
ENV USER=container HOME=/home/container
# Install runtime dependencies
RUN apt update \
&& apt -y install curl tar tzdata file ca-certificates sqlite3 iproute2 tini \
&& useradd -m -d /home/container container

# Needed packages to run the mumble server
RUN apt -y install libqt5sql5 libqt5sql5-sqlite libavahi-compat-libdnssd-dev libqt5dbus5 libzeroc-ice-dev libprotobuf-dev qtbase5-dev qtbase5-dev-tools

# Set up user and working directory
USER container
ENV USER=container HOME=/home/container
WORKDIR /home/container

# Set the stop signal
STOPSIGNAL SIGINT

COPY --chown=container:container ./entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/sbin/tini", "-g", "--"]
CMD ["/entrypoint.sh"]
# Copy and set up the entrypoint script
COPY --chown=container:container ./entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# Define entrypoint and command
ENTRYPOINT ["/usr/bin/tini", "-g", "--"]
CMD ["/entrypoint.sh"]
115 changes: 115 additions & 0 deletions voice/mumble/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
#!/bin/bash

# Mumble compile script.
# Runs on Debian 12

LOGFILE="/usr/src/mumble/build.log"

log() {
echo "$(date +'%Y-%m-%d %H:%M:%S') - $1" | tee -a $LOGFILE
}

install_dep(){
log "Installing dependencies..."
apt update && apt -y install \
build-essential \
cmake \
pkg-config \
qtbase5-dev \
qtchooser \
qt5-qmake \
qtbase5-dev-tools \
qttools5-dev \
qttools5-dev-tools \
libqt5svg5-dev \
libboost-dev \
libssl-dev \
libprotobuf-dev \
protobuf-compiler \
libprotoc-dev \
libcap-dev \
libxi-dev \
libasound2-dev \
libogg-dev \
libsndfile1-dev \
libspeechd-dev \
libavahi-compat-libdnssd-dev \
libxcb-xinerama0 \
libzeroc-ice-dev \
libpoco-dev \
g++-multilib \
jq \
python3 \
curl \
git

if [[ $? -ne 0 ]]; then
log "Failed to install dependencies"
exit 1
fi
log "Dependencies installed successfully"
}

clone_mumble(){
log "Cloning the Mumble repository..."

# Create the necessary directories
mkdir -p /usr/src/mumble/git && cd /usr/src/mumble/git

# Fetch the latest release tag from the GitHub API
LATEST_TAG=$(curl -s "https://api.github.com/repos/mumble-voip/mumble/releases/latest" | jq -r .tag_name)
if [[ $? -ne 0 || -z "$LATEST_TAG" ]]; then
log "Failed to fetch the latest release tag"
exit 1
fi
echo "The latest tag is: $LATEST_TAG" | tee -a $LOGFILE

# Clone the repository
echo "Running: git clone --branch \"$LATEST_TAG\" https://github.com/mumble-voip/mumble.git ."
git clone --branch "$LATEST_TAG" https://github.com/mumble-voip/mumble.git .
if [[ $? -ne 0 ]]; then
log "Failed to clone the repository"
exit 1
fi

# Clone the submodules
git submodule update --init --recursive
if [[ $? -ne 0 ]]; then
log "Failed to update submodules"
exit 1
fi

# Create and navigate to the build directory
mkdir -p build && cd build

echo "$LATEST_TAG" > latest_tag.txt

# Run cmake with the specified options
cmake -Dbundled-opus=OFF -Dclient=OFF -Dstatic=ON -DCMAKE_BUILD_TYPE=Release ..
if [[ $? -ne 0 ]]; then
log "CMake configuration failed"
exit 1
fi

log "Repository cloned and configured successfully"
}

build_mumble(){
log "Building Mumble server..."

cd /usr/src/mumble/git/build

echo "Using $(nproc) threads to build Mumble server" | tee -a $LOGFILE
cmake --build . -j $(nproc)
if [[ $? -ne 0 ]]; then
log "Build failed"
exit 1
fi

ls -la | tee -a $LOGFILE
log "Build completed successfully"
}

install_dep
clone_mumble
build_mumble
7 changes: 4 additions & 3 deletions voice/mumble/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
#!/bin/ash
#!/bin/bash
cd /home/container

# Make internal Docker IP address available to processes.
INTERNAL_IP=$(ip route get 1 | awk '{print $(NF-2);exit}')
export INTERNAL_IP

# Print the Muble server version
mumble-server --version
echo -e "Mumble release version:"
cat /usr/local/share/mumble/latest_tag.txt

# Replace Startup Variables
MODIFIED_STARTUP=$(echo -e $(echo -e ${STARTUP} | sed -e 's/{{/${/g' -e 's/}}/}/g'))
echo -e ":/home/container$ ${MODIFIED_STARTUP}"

# Run the Server
eval ${MODIFIED_STARTUP}
eval ${MODIFIED_STARTUP}

0 comments on commit f888177

Please sign in to comment.