From 73947da7eb052bd229dbadeec0aba37683bd3204 Mon Sep 17 00:00:00 2001 From: zontreck Date: Tue, 3 Sep 2024 17:27:42 -0700 Subject: [PATCH] Add wine --- Jenkinsfile | 32 ++++++++++++++ build.sh | 5 ++- wine/entrypoint.sh | 90 +++++++++++++++++++++++++++++++++++++++ wine/latest/Dockerfile | 30 +++++++++++++ wine/latest/entrypoint.sh | 90 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 246 insertions(+), 1 deletion(-) create mode 100644 wine/entrypoint.sh create mode 100644 wine/latest/Dockerfile create mode 100644 wine/latest/entrypoint.sh diff --git a/Jenkinsfile b/Jenkinsfile index 82734d2..0862cd1 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -124,6 +124,38 @@ pipeline { } } + stage("Build Wine Containers") { + agent { + label 'dockermain' + } + + steps { + script { + sh ''' + #!/bin/bash + + docker build -t git.zontreck.com/ariascreations/yolks:wine_latest wine/latest + ''' + } + } + } + + stage("Push Wine Containers") { + agent { + label 'dockermain' + } + + steps { + script { + sh ''' + #!/bin/bash + + docker push git.zontreck.com/ariascreations/yolks:wine_latest + ''' + } + } + } + stage("Cleanup") { agent { label 'dockermain' diff --git a/build.sh b/build.sh index 1c75ad6..1e4c0d0 100755 --- a/build.sh +++ b/build.sh @@ -17,4 +17,7 @@ docker build -t git.zontreck.com/ariascreations/yolks:jdk11 java/11 docker build -t git.zontreck.com/ariascreations/yolks:jdk16 java/16 docker build -t git.zontreck.com/ariascreations/yolks:jdk17 java/17 docker build -t git.zontreck.com/ariascreations/yolks:jdk19 java/19 -docker build -t git.zontreck.com/ariascreations/yolks:jdk21 java/21 \ No newline at end of file +docker build -t git.zontreck.com/ariascreations/yolks:jdk21 java/21 + +# Build wine +docker build -t git.zontreck.com/ariascreations/yolks:wine_latest wine/latest \ No newline at end of file diff --git a/wine/entrypoint.sh b/wine/entrypoint.sh new file mode 100644 index 0000000..2435c16 --- /dev/null +++ b/wine/entrypoint.sh @@ -0,0 +1,90 @@ +#!/bin/bash +cd /home/container + +# Information output +echo "Running on Debian $(cat /etc/debian_version)" +echo "Current timezone: $(cat /etc/timezone)" +wine --version + +# Make internal Docker IP address available to processes. +INTERNAL_IP=$(ip route get 1 | awk '{print $(NF-2);exit}') +export INTERNAL_IP + +## just in case someone removed the defaults. +if [ "${STEAM_USER}" == "" ]; then + echo -e "steam user is not set.\n" + echo -e "Using anonymous user.\n" + STEAM_USER=anonymous + STEAM_PASS="" + STEAM_AUTH="" +else + echo -e "user set to ${STEAM_USER}" +fi + +## if auto_update is not set or to 1 update +if [ -z ${AUTO_UPDATE} ] || [ "${AUTO_UPDATE}" == "1" ]; then + # Update Source Server + if [ ! -z ${SRCDS_APPID} ]; then + if [ "${STEAM_USER}" == "anonymous" ]; then + ./steamcmd/steamcmd.sh +force_install_dir /home/container +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} $( [[ "${WINDOWS_INSTALL}" == "1" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} +app_update 1007 $( [[ -z ${SRCDS_BETAID} ]] || printf %s "-beta ${SRCDS_BETAID}" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s "-betapassword ${SRCDS_BETAPASS}" ) $( [[ -z ${HLDS_GAME} ]] || printf %s "+app_set_config 90 mod ${HLDS_GAME}" ) $( [[ -z ${VALIDATE} ]] || printf %s "validate" ) +quit + else + numactl --physcpubind=+0 ./steamcmd/steamcmd.sh +force_install_dir /home/container +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} $( [[ "${WINDOWS_INSTALL}" == "1" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} +app_update 1007 $( [[ -z ${SRCDS_BETAID} ]] || printf %s "-beta ${SRCDS_BETAID}" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s "-betapassword ${SRCDS_BETAPASS}" ) $( [[ -z ${HLDS_GAME} ]] || printf %s "+app_set_config 90 mod ${HLDS_GAME}" ) $( [[ -z ${VALIDATE} ]] || printf %s "validate" ) +quit + fi + else + echo -e "No appid set. Starting Server" + fi + +else + echo -e "Not updating game server as auto update was set to 0. Starting Server" +fi + +if [[ $XVFB == 1 ]]; then + Xvfb :0 -screen 0 ${DISPLAY_WIDTH}x${DISPLAY_HEIGHT}x${DISPLAY_DEPTH} & +fi + +# Install necessary to run packages +echo "First launch will throw some errors. Ignore them" + +mkdir -p $WINEPREFIX + +# Check if wine-gecko required and install it if so +if [[ $WINETRICKS_RUN =~ gecko ]]; then + echo "Installing Gecko" + WINETRICKS_RUN=${WINETRICKS_RUN/gecko} + + if [ ! -f "$WINEPREFIX/gecko_x86.msi" ]; then + wget -q -O $WINEPREFIX/gecko_x86.msi http://dl.winehq.org/wine/wine-gecko/2.47.4/wine_gecko-2.47.4-x86.msi + fi + + if [ ! -f "$WINEPREFIX/gecko_x86_64.msi" ]; then + wget -q -O $WINEPREFIX/gecko_x86_64.msi http://dl.winehq.org/wine/wine-gecko/2.47.4/wine_gecko-2.47.4-x86_64.msi + fi + + wine msiexec /i $WINEPREFIX/gecko_x86.msi /qn /quiet /norestart /log $WINEPREFIX/gecko_x86_install.log + wine msiexec /i $WINEPREFIX/gecko_x86_64.msi /qn /quiet /norestart /log $WINEPREFIX/gecko_x86_64_install.log +fi + +# Check if wine-mono required and install it if so +if [[ $WINETRICKS_RUN =~ mono ]]; then + echo "Installing mono" + WINETRICKS_RUN=${WINETRICKS_RUN/mono} + + if [ ! -f "$WINEPREFIX/mono.msi" ]; then + wget -q -O $WINEPREFIX/mono.msi https://dl.winehq.org/wine/wine-mono/9.1.0/wine-mono-9.1.0-x86.msi + fi + + wine msiexec /i $WINEPREFIX/mono.msi /qn /quiet /norestart /log $WINEPREFIX/mono_install.log +fi + +# List and install other packages +for trick in $WINETRICKS_RUN; do + echo "Installing $trick" + winetricks -q $trick +done + +# Replace Startup Variables +MODIFIED_STARTUP=$(echo ${STARTUP} | sed -e 's/{{/${/g' -e 's/}}/}/g') +echo ":/home/container$ ${MODIFIED_STARTUP}" + +# Run the Server +eval ${MODIFIED_STARTUP} \ No newline at end of file diff --git a/wine/latest/Dockerfile b/wine/latest/Dockerfile new file mode 100644 index 0000000..07f695c --- /dev/null +++ b/wine/latest/Dockerfile @@ -0,0 +1,30 @@ +FROM git.zontreck.com/ariascreations/yolks:debian + +RUN dpkg --add-architecture i386 + +RUN apt-get update +RUN apt-get install -y gnupg2 numactl tzdata software-properties-common libntlm0 winbind xvfb xauth python3 libncurses5:i386 libncurses6:i386 libsdl2-2.0-0 libsdl2-2.0-0:i386 + + +RUN mkdir -pm755 /etc/apt/keyrings +RUN wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/winehq.key +RUN wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/bookworm/winehq-bookworm.sources + +RUN apt-get update +RUN apt-get install -y winehq-stable cabextract wine-binfmt + +RUN wget -q -O /usr/sbin/winetricks https://raw.githubusercontent.com/winetricks/winetricks/master/src/winetricks +RUN chmod +x /usr/sbin/winetricks + +ENV HOME=/home/container +ENV WINEPREFIX=/home/container/.wine +ENV WINEDLLOVERRIDES="mscoree,mshtml=" +ENV DISPLAY=:0 +ENV DISPLAY_WIDTH=1024 +ENV DISPLAY_HEIGHT=768 +ENV DISPLAY_DEPTH=16 +ENV AUTO_UPDATE=1 +ENV XVFB=1 + +COPY ./entrypoint.sh /entrypoint.sh +CMD ["/bin/bash", "/entrypoint.sh"] \ No newline at end of file diff --git a/wine/latest/entrypoint.sh b/wine/latest/entrypoint.sh new file mode 100644 index 0000000..2435c16 --- /dev/null +++ b/wine/latest/entrypoint.sh @@ -0,0 +1,90 @@ +#!/bin/bash +cd /home/container + +# Information output +echo "Running on Debian $(cat /etc/debian_version)" +echo "Current timezone: $(cat /etc/timezone)" +wine --version + +# Make internal Docker IP address available to processes. +INTERNAL_IP=$(ip route get 1 | awk '{print $(NF-2);exit}') +export INTERNAL_IP + +## just in case someone removed the defaults. +if [ "${STEAM_USER}" == "" ]; then + echo -e "steam user is not set.\n" + echo -e "Using anonymous user.\n" + STEAM_USER=anonymous + STEAM_PASS="" + STEAM_AUTH="" +else + echo -e "user set to ${STEAM_USER}" +fi + +## if auto_update is not set or to 1 update +if [ -z ${AUTO_UPDATE} ] || [ "${AUTO_UPDATE}" == "1" ]; then + # Update Source Server + if [ ! -z ${SRCDS_APPID} ]; then + if [ "${STEAM_USER}" == "anonymous" ]; then + ./steamcmd/steamcmd.sh +force_install_dir /home/container +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} $( [[ "${WINDOWS_INSTALL}" == "1" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} +app_update 1007 $( [[ -z ${SRCDS_BETAID} ]] || printf %s "-beta ${SRCDS_BETAID}" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s "-betapassword ${SRCDS_BETAPASS}" ) $( [[ -z ${HLDS_GAME} ]] || printf %s "+app_set_config 90 mod ${HLDS_GAME}" ) $( [[ -z ${VALIDATE} ]] || printf %s "validate" ) +quit + else + numactl --physcpubind=+0 ./steamcmd/steamcmd.sh +force_install_dir /home/container +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} $( [[ "${WINDOWS_INSTALL}" == "1" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} +app_update 1007 $( [[ -z ${SRCDS_BETAID} ]] || printf %s "-beta ${SRCDS_BETAID}" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s "-betapassword ${SRCDS_BETAPASS}" ) $( [[ -z ${HLDS_GAME} ]] || printf %s "+app_set_config 90 mod ${HLDS_GAME}" ) $( [[ -z ${VALIDATE} ]] || printf %s "validate" ) +quit + fi + else + echo -e "No appid set. Starting Server" + fi + +else + echo -e "Not updating game server as auto update was set to 0. Starting Server" +fi + +if [[ $XVFB == 1 ]]; then + Xvfb :0 -screen 0 ${DISPLAY_WIDTH}x${DISPLAY_HEIGHT}x${DISPLAY_DEPTH} & +fi + +# Install necessary to run packages +echo "First launch will throw some errors. Ignore them" + +mkdir -p $WINEPREFIX + +# Check if wine-gecko required and install it if so +if [[ $WINETRICKS_RUN =~ gecko ]]; then + echo "Installing Gecko" + WINETRICKS_RUN=${WINETRICKS_RUN/gecko} + + if [ ! -f "$WINEPREFIX/gecko_x86.msi" ]; then + wget -q -O $WINEPREFIX/gecko_x86.msi http://dl.winehq.org/wine/wine-gecko/2.47.4/wine_gecko-2.47.4-x86.msi + fi + + if [ ! -f "$WINEPREFIX/gecko_x86_64.msi" ]; then + wget -q -O $WINEPREFIX/gecko_x86_64.msi http://dl.winehq.org/wine/wine-gecko/2.47.4/wine_gecko-2.47.4-x86_64.msi + fi + + wine msiexec /i $WINEPREFIX/gecko_x86.msi /qn /quiet /norestart /log $WINEPREFIX/gecko_x86_install.log + wine msiexec /i $WINEPREFIX/gecko_x86_64.msi /qn /quiet /norestart /log $WINEPREFIX/gecko_x86_64_install.log +fi + +# Check if wine-mono required and install it if so +if [[ $WINETRICKS_RUN =~ mono ]]; then + echo "Installing mono" + WINETRICKS_RUN=${WINETRICKS_RUN/mono} + + if [ ! -f "$WINEPREFIX/mono.msi" ]; then + wget -q -O $WINEPREFIX/mono.msi https://dl.winehq.org/wine/wine-mono/9.1.0/wine-mono-9.1.0-x86.msi + fi + + wine msiexec /i $WINEPREFIX/mono.msi /qn /quiet /norestart /log $WINEPREFIX/mono_install.log +fi + +# List and install other packages +for trick in $WINETRICKS_RUN; do + echo "Installing $trick" + winetricks -q $trick +done + +# Replace Startup Variables +MODIFIED_STARTUP=$(echo ${STARTUP} | sed -e 's/{{/${/g' -e 's/}}/}/g') +echo ":/home/container$ ${MODIFIED_STARTUP}" + +# Run the Server +eval ${MODIFIED_STARTUP} \ No newline at end of file