155 lines
3.7 KiB
Bash
155 lines
3.7 KiB
Bash
#!/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
|