forked from pterodactyl/yolks
-
Notifications
You must be signed in to change notification settings - Fork 270
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #254 from pelican-eggs/mumble
Build mumble from source
- Loading branch information
Showing
3 changed files
with
190 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,155 @@ | ||
#!/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 \ | ||
jq \ | ||
python3 \ | ||
curl \ | ||
git | ||
|
||
if [[ $? -ne 0 ]]; then | ||
log "Failed to install dependencies" | ||
exit 1 | ||
fi | ||
log "Dependencies installed successfully" | ||
} | ||
|
||
# Function to install g++-multilib on amd64 | ||
install_amd64_multilib() { | ||
apt -y install g++-multilib | ||
|
||
if [[ $? -ne 0 ]]; then | ||
log "Failed to install amd multilib dependency" | ||
exit 1 | ||
fi | ||
|
||
log "Multilib AMD64 installed successfully" | ||
} | ||
|
||
# Function to install multilib support on arm64 | ||
install_arm64_multilib() { | ||
apt -y install g++-multilib-x86-64-linux-gnu g++-aarch64-linux-gnu libc6-dev-armhf-cross | ||
|
||
if [[ $? -ne 0 ]]; then | ||
log "Failed to install amd multilib dependency" | ||
exit 1 | ||
fi | ||
|
||
log "Multilib ARM64 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 normal deps | ||
install_dep | ||
|
||
# Detect the architecture | ||
ARCH=$(dpkg --print-architecture) | ||
|
||
# Install ARCH specific deps | ||
if [ "$ARCH" = "amd64" ]; then | ||
echo "Detected architecture: amd64" | ||
install_amd64_multilib | ||
elif [ "$ARCH" = "arm64" ]; then | ||
echo "Detected architecture: arm64" | ||
install_arm64_multilib | ||
else | ||
echo "Unsupported architecture: $ARCH" | ||
exit 1 | ||
fi | ||
|
||
clone_mumble | ||
build_mumble |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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} |