snap: added all the files required for building snap package

This commit is contained in:
rafal1137 2024-02-28 19:52:29 +01:00
parent 0e9d5b3872
commit 31f00fda0e
10 changed files with 436 additions and 0 deletions

21
LICENCE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright © 2021 Canonical Ltd.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,13 @@
[Desktop Entry]
Type=Application
Name=ET: Legacy
GenericName=World War II first-person shooter
Comment=World War II first-person shooter
Icon=${SNAP}/usr/local/share/icons/hicolor/scalable/apps/etl.svg
Exec=etlegacy.etl
Terminal=false
MimeType=x-scheme-handler/et;
Categories=Game;ActionGame;
StartupNotify=false
Keywords=team-based;multiplayer;tactical;WWII;enemy;territory;etl;etlegacy;
PrefersNonDefaultGPU=true

20
snap/hooks/configure vendored Normal file
View File

@ -0,0 +1,20 @@
#!/bin/bash
set -euo pipefail
daemon=$(snapctl get daemon)
case "$daemon" in
true)
# start the daemon
if snapctl services "$SNAP_INSTANCE_NAME" | grep -q inactive; then
snapctl start --enable "$SNAP_INSTANCE_NAME" 2>&1 || true
fi
;;
false)
# stop the daemon
snapctl stop --disable "$SNAP_INSTANCE_NAME" 2>&1 || true
;;
*)
echo "ERROR: Set 'daemon' to one of true|false"
exit 1
;;
esac

11
snap/hooks/install Normal file
View File

@ -0,0 +1,11 @@
#!/bin/sh
set -x
if [ "$(snapctl get daemon)" = "" ]
then
if grep -q -e snap_core= -e snapd_recovery_mode= /proc/cmdline
then snapctl set daemon=true
else snapctl set daemon=false
fi
fi

11
snap/hooks/post-refresh Normal file
View File

@ -0,0 +1,11 @@
#!/bin/sh
set -x
if [ "$(snapctl get daemon)" = "" ]
then
if grep -q -e snap_core= -e snapd_recovery_mode= /proc/cmdline
then snapctl set daemon=true
else snapctl set daemon=false
fi
fi

177
snap/snapcraft.yaml Normal file
View File

@ -0,0 +1,177 @@
name: etlegacy
summary: FPS Game
description: |
Welcome to ET: Legacy, an open source project that aims to create a fully compatible client
and server for the popular online FPS game Wolfenstein: Enemy Territory - whose gameplay
is still considered unmatched by many, despite its great age.
adopt-info: etl
base: core22
compression: lzo
confinement: strict
apps:
etl:
command-chain: &_command-chain
- bin/graphics-core22-wrapper
- bin/wayland-launch
command: &_command bin/run
plugs: &_plugs
- opengl
- wayland
- hardware-observe
- audio-playback
- joystick
- network
- alsa
environment: &_environment
PULSE_SERVER: unix:$XDG_RUNTIME_DIR/../pulse/native
PULSE_SYSTEM: 1
PULSE_RUNTIME_PATH: /var/run/pulse
LD_LIBRARY_PATH: ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}${SNAP}/usr/lib/${SNAPCRAFT_ARCH_TRIPLET}:${SNAP}/usr/lib/${SNAPCRAFT_ARCH_TRIPLET}/pulseaudio
etlded:
command: bin/runded
plugs:
- hardware-observe
- network
- network-bind
environment:
LD_LIBRARY_PATH: ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}${SNAP}/usr/lib/${SNAPCRAFT_ARCH_TRIPLET}
daemon:
daemon: simple
restart-delay: 3s
restart-condition: always
command-chain: *_command-chain
command: *_command
plugs: *_plugs
environment: *_environment
# This is one of four snippets that relate to providing the userspace graphics needed by your application.
# You can treat this as "magic" so long as you don't need to make changes.
# On the Mir website there's a lot more detail on [the graphics-core22 Snap interface](https://mir-server.io/docs/the-graphics-core22-snap-interface) and it's use.
plugs:
graphics-core22:
interface: content
target: $SNAP/graphics
default-provider: mesa-core22
environment:
# Other, generally useful environment settings...
# XDG config
XDG_CACHE_HOME: $SNAP_USER_COMMON/.cache
XDG_CONFIG_HOME: $SNAP_USER_DATA/.config
XDG_CONFIG_DIRS: $SNAP/etc/xdg
XDG_DATA_DIRS: $SNAP/usr/local/share:$SNAP/usr/share
# XKB config
XKB_CONFIG_ROOT: $SNAP/usr/share/X11/xkb
# The `layout` ensures that files can be found by applications where they are expected by the toolkit or application.
layout:
/usr/share/libdrm:
bind: $SNAP/graphics/libdrm
/usr/share/drirc.d:
symlink: $SNAP/graphics/drirc.d
# Other, generally useful paths
/usr/share/fonts:
bind: $SNAP/usr/share/fonts
/usr/share/icons:
bind: $SNAP/usr/share/icons
/usr/share/sounds:
bind: $SNAP/usr/share/sounds
/etc/fonts:
bind: $SNAP/etc/fonts
/usr/share/alsa:
bind: $SNAP/usr/share/alsa
parts:
etl:
plugin: cmake
cmake-parameters:
- -DCROSS_COMPILE32=OFF
- -DBUNDLED_LIBS=OFF
- -DRENDERER_DYNAMIC=OFF
- -DINSTALL_OMNIBOT=OFF
- -DBUILD_MOD_PK3=OFF
source-type: git
source-branch: master
source: https://github.com/etlegacy/etlegacy
parse-info: [usr/local/share/metainfo/com.etlegacy.ETLegacy.metainfo.xml]
build-packages:
- g++
- gcc
- make
- libcurl4-openssl-dev
- libsdl2-dev
- liblua5.4-dev
- libopenal-dev
- libtheora-dev
- libglew-dev
- libogg-dev
- libvorbis-dev
- libgl1-mesa-dev
- freeglut3-dev
- zlib1g-dev
- libminizip-dev
- libturbojpeg0-dev
- libssl-dev
- libcjson-dev
- libfreetype6-dev
- libpng-dev
- libsqlite3-dev
- libx11-dev
- libc-devtools
- libc6-dev
- nasm
- zip
stage-packages:
- libsdl2-2.0-0
- libcjson1
- libcurl4
- libminizip1
- libtheora-bin
- libvorbisfile3
- libglew2.2
- libgl1
- libglu1-mesa
- freeglut3
- libjpeg8
- libstdc++6
- liblua5.4-0
- libsqlite3-0
- wget
- curl
- unzip
# Some utility scripts for setting up the Wayland environment
setup:
plugin: dump
source: wayland-launch
override-build: |
# The plugs needed to run Wayland. (wayland-launch checks them, setup.sh connects them)
# You may add further plugs here if you want these options
PLUGS="opengl wayland graphics-core22 hardware-observe audio-playback joystick network"
sed --in-place "s/%PLUGS%/$PLUGS/g" $CRAFT_PART_BUILD/bin/wayland-launch
sed --in-place "s/%PLUGS%/$PLUGS/g" $CRAFT_PART_BUILD/bin/setup.sh
craftctl default
stage-packages:
- inotify-tools
graphics-core22:
after:
# Your application packaging
- setup
source: https://github.com/MirServer/graphics-core22.git
plugin: dump
override-prime: |
craftctl default
${CRAFT_PART_SRC}/bin/graphics-core22-cleanup mesa-core22 nvidia-core22
cd "$CRAFT_PRIME/usr/share/"
rm -rf bug drirc.d glvnd libdrm lintian man
rm -rf applications apport bash-completion dbus-1 doc-base doc gtk-doc\
help pkgconfig libthai metainfo themes thumbnailers xml
prime:
- bin/graphics-core22-wrapper

53
wayland-launch/bin/run Normal file
View File

@ -0,0 +1,53 @@
#!/bin/sh
set -e
pack_downloader() {
if [ -f /usr/bin/curl ]; then
curl -P ${SNAP_USER_DATA}/.etlegacy/etmain $1
else
wget -P ${SNAP_USER_DATA}/.etlegacy/etmain $1
fi
}
for dir in */ ;
do
if [ ! -d ${SNAP_USER_DATA}/.etlegacy ]; then
mkdir ${SNAP_USER_DATA}/.etlegacy
if [ ! -d ${SNAP_USER_DATA}/.etlegacy/etmain ]; then
mkdir ${SNAP_USER_DATA}/.etlegacy/etmain
cp -R ${SNAP}/usr/local/lib/etlegacy/etmain ${SNAP_USER_DATA}/.etlegacy
fi
if [ ! -d ${SNAP_USER_DATA}/.etlegacy/legacy ]; then
mkdir ${SNAP_USER_DATA}/.etlegacy/legacy
cp -R ${SNAP}/usr/local/lib/etlegacy/legacy ${SNAP_USER_DATA}/.etlegacy
wget `curl https://www.etlegacy.com/download | grep "All supported archive" | grep -Eoi '<a [^>]+>' | grep -Eo 'href=\"[^\\\"]+\"' | grep -Eo '(http|https):\/\/[^\"]+'` -O ${SNAP_USER_DATA}/.etlegacy/etl.zip
unzip ${SNAP_USER_DATA}/.etlegacy/etl.zip -d ${SNAP_USER_DATA}/.etlegacy/etl
mv ${SNAP_USER_DATA}/.etlegacy/etl/*.pk3 ${SNAP_USER_DATA}/.etlegacy/legacy
rm -rf ${SNAP_USER_DATA}/.etlegacy/etl
rm -rf ${SNAP_USER_DATA}/.etlegacy/*.zip
fi
if [ ! -f ${SNAP_USER_DATA}/.etlegacy/etmain/pak0.pk3 ]; then
pack_downloader https://mirror.etlegacy.com/etmain/pak0.pk3
fi
if [ ! -f ${SNAP_USER_DATA}/.etlegacy/etmain/pak1.pk3 ]; then
pack_downloader https://mirror.etlegacy.com/etmain/pak1.pk3
fi
if [ ! -f ${SNAP_USER_DATA}/.etlegacy/etmain/pak2.pk3 ]; then
pack_downloader https://mirror.etlegacy.com/etmain/pak2.pk3
fi
fi
done
case "${SNAP_ARCH}" in
amd64)
${SNAP}/usr/local/bin/etl.x86_64 ;;
arm64)
# We will launch etl with prefix since snapcraft compiled it with it.
${SNAP}/usr/local/bin/etl.aarch64 ;;
esac

53
wayland-launch/bin/runded Normal file
View File

@ -0,0 +1,53 @@
#!/bin/sh
set -e
pack_downloader() {
if [ -f /usr/bin/curl ]; then
curl -P ${SNAP_USER_DATA}/.etlded/etmain $1
else
wget -P ${SNAP_USER_DATA}/.etlded/etmain $1
fi
}
for dir in */ ;
do
if [ ! -d ${SNAP_USER_DATA}/.etlded ]; then
mkdir ${SNAP_USER_DATA}/.etlded
if [ ! -d ${SNAP_USER_DATA}/.etlded/etmain ]; then
mkdir ${SNAP_USER_DATA}/.etlded/etmain
cp -R ${SNAP}/usr/local/lib/etlegacy/etmain ${SNAP_USER_DATA}/.etlded
fi
if [ ! -d ${SNAP_USER_DATA}/.etlded/legacy ]; then
mkdir ${SNAP_USER_DATA}/.etlded/legacy
cp -R ${SNAP}/usr/local/lib/etlegacy/legacy ${SNAP_USER_DATA}/.etlded
wget `curl https://www.etlegacy.com/download | grep "All supported archive" | grep -Eoi '<a [^>]+>' | grep -Eo 'href=\"[^\\\"]+\"' | grep -Eo '(http|https):\/\/[^\"]+'` -O ${SNAP_USER_DATA}/.etlded/etl.zip
unzip ${SNAP_USER_DATA}/.etlded/etl.zip -d ${SNAP_USER_DATA}/.etlded/etl
mv ${SNAP_USER_DATA}/.etlded/etl/*.pk3 ${SNAP_USER_DATA}/.etlded/legacy
rm -rf ${SNAP_USER_DATA}/.etlded/etl
rm -rf ${SNAP_USER_DATA}/.etlded/*.zip
fi
if [ ! -f ${SNAP_USER_DATA}/.etlded/etmain/pak0.pk3 ]; then
pack_downloader https://mirror.etlegacy.com/etmain/pak0.pk3
fi
if [ ! -f ${SNAP_USER_DATA}/.etlded/etmain/pak1.pk3 ]; then
pack_downloader https://mirror.etlegacy.com/etmain/pak1.pk3
fi
if [ ! -f ${SNAP_USER_DATA}/.etlded/etmain/pak2.pk3 ]; then
pack_downloader https://mirror.etlegacy.com/etmain/pak2.pk3
fi
fi
done
case "${SNAP_ARCH}" in
amd64)
${SNAP}/usr/local/bin/etlded.x86_64 +set fs_homepath ${SNAP_USER_DATA}/.etlded +set g_protect 1 +set omnibot_enable 1 +set omnibot_path "${SNAP_USER_DATA}/.etlded/legacy/omni-bot" +exec etl_server.cfg ;;
arm64)
# We will launch etl with prefix since snapcraft compiled it with it.
${SNAP}/usr/local/bin/etlded.aarch64 +set fs_homepath ${SNAP_USER_DATA}/.etlded +set g_protect 1 +set omnibot_enable 1 +set omnibot_path "${SNAP_USER_DATA}/.etlded/legacy/omni-bot" +exec etl_server.cfg ;;
esac

View File

@ -0,0 +1,31 @@
#!/bin/sh
set -e
SNAP_INSTANCE_NAME="$(readlink -f $0 | cut -f 3 -d /)"
snap_connect_harder() {
# Note the available slot providers
if ! snap connections ${SNAP_INSTANCE_NAME} | grep --quiet "^content.*${SNAP_INSTANCE_NAME}:$1.*$"; then
available_providers="$(snap interface "$1" | sed -e '1,/slots:/d')"
else
available_providers="$(snap interface content | sed -e '1,/slots:/d' | grep "$1")"
fi
# For wayland try some well known providers
if [ "wayland" = "$1" ]; then
for PROVIDER in ubuntu-frame mir-kiosk; do
if echo "$available_providers" | grep --quiet "\- ${PROVIDER}"; then
sudo snap connect "${SNAP_INSTANCE_NAME}:$1" "${PROVIDER}:$1"
return 0
fi
done
fi
echo "Warning: Failed to connect '$1'. Please connect manually, available providers are:\n$available_providers"
}
for PLUG in %PLUGS%; do
if ! snap connections ${SNAP_INSTANCE_NAME} | grep --quiet "^.*${SNAP_INSTANCE_NAME}:${PLUG}.*${PLUG}.*$"; then
sudo snap connect "${SNAP_INSTANCE_NAME}:${PLUG}" 2> /dev/null || snap_connect_harder ${PLUG}
fi
done

View File

@ -0,0 +1,46 @@
#!/bin/sh
set -e
for PLUG in %PLUGS%; do
if ! snapctl is-connected ${PLUG}
then
echo "WARNING: ${PLUG} interface not connected! Please run: /snap/${SNAP_INSTANCE_NAME}/current/bin/setup.sh"
fi
done
if ! command -v inotifywait > /dev/null
then
echo "ERROR: inotifywait could not be found, mir-kiosk-snap-launch expects:"
echo " . . : stage-packages:"
echo " . . : - inotify-tools"
exit 1
fi
wait_for()
{
until
until
inotifywait --event create "$(dirname "$1")"&
inotify_pid=$!
[ -e "$1" ] || sleep 2 && [ -e "$1" ]
do
wait "${inotify_pid}"
done
kill "${inotify_pid}"
[ -O "$1" ]
do
sleep 1
done
}
real_xdg_runtime_dir=$(dirname "${XDG_RUNTIME_DIR}")
export WAYLAND_DISPLAY="${real_xdg_runtime_dir}/${WAYLAND_DISPLAY:-wayland-0}"
# On core systems may need to wait for real XDG_RUNTIME_DIR
wait_for "${real_xdg_runtime_dir}"
wait_for "${WAYLAND_DISPLAY}"
mkdir -p "$XDG_RUNTIME_DIR" -m 700
unset DISPLAY
exec "$@"