From 325f0477adddcf02c0e53338e142ef5267e29233 Mon Sep 17 00:00:00 2001 From: Leon Date: Mon, 25 May 2020 21:39:33 +0200 Subject: [PATCH] Initial commit --- .SRCINFO | 36 +++++++++++++++ PKGBUILD | 86 ++++++++++++++++++++++++++++++++++++ icon256.png | Bin 0 -> 42780 bytes install.sh | 102 +++++++++++++++++++++++++++++++++++++++++++ karaokemugen.desktop | 10 +++++ karaokemugen.install | 14 ++++++ run.sh | 28 ++++++++++++ 7 files changed, 276 insertions(+) create mode 100644 .SRCINFO create mode 100644 PKGBUILD create mode 100644 icon256.png create mode 100755 install.sh create mode 100644 karaokemugen.desktop create mode 100644 karaokemugen.install create mode 100755 run.sh diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 00000000000..4d55b416877 --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,36 @@ +pkgbase = karaokemugen + pkgdesc = Karaoke playlist manager/player app used in parties or events. + pkgver = 3.2.2 + pkgrel = 1 + url = https://mugen.karaokes.moe/ + install = karaokemugen.install + arch = any + license = MIT + makedepends = git + makedepends = npm + makedepends = typescript + makedepends = yarn + makedepends = nodejs>=12 + makedepends = python2 + depends = mpv + depends = ffmpeg + depends = postgresql + depends = electron + optdepends = sudo: for using karaokemugen-install script + provides = karaokemugen + conflicts = karaokemugen + source = karaokemugen::git+https://lab.shelter.moe/karaokemugen/karaokemugen-app.git#tag=v3.2.2 + source = karaokemugen-lib::git+https://lab.shelter.moe/karaokemugen/lib.git + source = install.sh + source = run.sh + source = icon256.png + source = karaokemugen.desktop + md5sums = SKIP + md5sums = SKIP + md5sums = 4ad5390b139dc5b5e78e6eef8411e90b + md5sums = 0d0d432f35c56a962f9d386f391c6036 + md5sums = 5e9a33a42fef7572b7e0fa504c586f32 + md5sums = 10561eed906a5efeed427f90501b4f49 + +pkgname = karaokemugen + diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 00000000000..967dc0e11f1 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,86 @@ +# Maintainer: leonekmi +pkgname=karaokemugen +pkgver=3.2.2 +pkgrel=1 +pkgdesc="Karaoke playlist manager/player app used in parties or events." +arch=('any') +url="https://mugen.karaokes.moe/" +license=('MIT') +groups=() +depends=('mpv' 'ffmpeg' 'postgresql' 'electron') # Warning : to be replaced with electron8 when Electron 9 will be pushed to [community] +makedepends=('git' 'npm' 'typescript' 'yarn' 'nodejs>=12' 'python2') +optdepends=('sudo: for using karaokemugen-install script') +provides=("${pkgname%-git}") +conflicts=("${pkgname%-git}") +replaces=() +backup=() +options=() +install=${pkgname%-git}.install +source=('karaokemugen::git+https://lab.shelter.moe/karaokemugen/karaokemugen-app.git#tag=v3.2.2' + 'karaokemugen-lib::git+https://lab.shelter.moe/karaokemugen/lib.git' + 'install.sh' + 'run.sh' + 'icon256.png' + 'karaokemugen.desktop') +noextract=() +md5sums=('SKIP' + 'SKIP' + '4ad5390b139dc5b5e78e6eef8411e90b' + '0d0d432f35c56a962f9d386f391c6036' + '5e9a33a42fef7572b7e0fa504c586f32' + '10561eed906a5efeed427f90501b4f49') + +prepare() { + cd "$srcdir/${pkgname}" + git submodule init + git config submodule.src/lib.url $srcdir/${pkgname}-lib + git submodule update +} + +build() { + cd "$srcdir/${pkgname}" + + # Prepare dependencies + export HOME="$srcdir/$pkgname-home" + export XDG_CACHE_HOME="$srcdir/$pkgname-cache" + export npm_config_devdir="$srcdir/$pkgname-npm-dev" + export npm_config_cache="$srcdir/$pkgname-npm-cache" + yarn global add electron-builder + yarn install + yarn installFrontend + yarn installSystemPanel + # Build and package with electron-builder + export NODE_ENV='production' + electronDist=$(dirname $(realpath $(which electron))) + electronVer=$(electron --version | tail -c +2) + yarn build + yarn buildFrontend + yarn buildSystemPanel + "$(yarn global dir)/node_modules/.bin/electron-builder" --linux --x64 -c.electronDist=$electronDist -c.electronVersion=$electronVer --dir +} + +package() { + cd "$srcdir/${pkgname}" + + # Application itself + install -dm755 "$pkgdir/usr/lib/${pkgname}" + cp -dr --no-preserve=ownership packages/linux-unpacked/resources/* "$pkgdir/usr/lib/${pkgname}/" + install -dm 755 "$pkgdir/usr/lib/${pkgname}/asar" + mv "$pkgdir/usr/lib/${pkgname}/app.asar" "$pkgdir/usr/lib/${pkgname}/asar" + chmod -R 755 "$pkgdir/usr/lib/${pkgname}/" + + # License + install -dm755 "$pkgdir/usr/share/licenses/${pkgname}" + install -m644 LICENSE.md "$pkgdir/usr/share/licenses/${pkgname}/LICENSE" + + # Runtimes + install -dm755 "$pkgdir/usr/bin/" + install -m755 "$srcdir/run.sh" "$pkgdir/usr/bin/karaokemugen" + install -m755 "$srcdir/install.sh" "$pkgdir/usr/bin/karaokemugen-install" + + # .desktop entry + install -dm755 "$pkgdir/usr/share/pixmaps/" + install -dm755 "$pkgdir/usr/share/applications/" + install -m644 "$srcdir/icon256.png" "$pkgdir/usr/share/pixmaps/${pkgname}.png" + install -m644 "$srcdir/${pkgname}.desktop" "$pkgdir/usr/share/applications/${pkgname}.desktop" +} \ No newline at end of file diff --git a/icon256.png b/icon256.png new file mode 100644 index 0000000000000000000000000000000000000000..134c7b1f42f51426cecb408f1ebcb1fe4e70dd8e GIT binary patch literal 42780 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⩔g_vXIigdds7Aqc(*5Ee|e*snhI@8#xMWuj`R( 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 x_cl3ACN{(TY9Sz2;0RNQ0fMJWW zau=5>inEq5pv6f**Gk~8S>~J2KaBBby@HThynXkqs6cL>J3(9S>ndJASUBcWr*Q61 z_YAM=1i$M|hT*3XdCP4$><*kKa=~f=oeqIiO$Q3dHV48#0K=dm1fD&g=o@b)`kHI; zOYV(mWLdbsUNBNA=jPvWZ z-uQ0OUaMPq0U;qc4MuF6H�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 literal 0 HcmV?d00001 diff --git a/install.sh b/install.sh new file mode 100755 index 00000000000..03dd52470cd --- /dev/null +++ b/install.sh @@ -0,0 +1,102 @@ +#!/usr/bin/env bash + +# _ __ _ __ __ +# | |/ /__ _ _ _ __ _ ___| |_____ | \/ |_ _ __ _ ___ _ _ +# | ' /dev/null + EXIT_STATUS=$? + if [ $EXIT_STATUS -eq 4 ]; then + echo -e "${_COL_YELLOW_}Postgres is not initialized, initializing..." + sudo -H -u postgres -g postgres initdb -D /var/lib/postgres/data + check_postgres + elif [ $EXIT_STATUS -eq 3 ]; then + echo -e "${_COL_YELLOW_}Postgres is not running, starting..." + sudo systemctl restart postgresql + check_postgres + else + echo -e "${_COL_GREEN_}Postgres seems OK." + fi +} + +check_mugen() { + if [ -f "/opt/karaokemugen/karaokemugen" ]; then + echo -e "${_COL_GREEN_}Karaoke Mugen is installed in /opt/karaokemugen." + else + echo -e "${_COL_BRED_}Karaoke Mugen is not installed in /opt/karaokemugen. Exiting." + exit 1 + fi +} + +setup_postgres() { + echo -e "${_BEGIN_}Creating the karaokemugen_app database..." + # Create the DB for Mugen + # Check if the DB already exists + sudo -u postgres -g postgres -H -- psql -d karaokemugen_app -c "" + if [ $? -eq 0 ]; then + echo -e "${_COL_YELLOW_}karaokemugen_app database is existing, do you want to keep its content or reset it?" + select dbch in "Keep data" "Reset database"; do + case $dbch in + "Keep data" ) echo -e "${_COL_GREEN_}karaokemugen_app database will be used." ; return 0;; # TODO : maybe do some integrity checks + "Reset database" ) sudo -u postgres -g postgres -H -- psql -c "DROP DATABASE karaokemugen_app;"; sudo -u postgres -g postgres -H -- psql -c "DROP ROLE IF EXISTS karaokemugen_app;";; + esac + done + fi + # Creating the database + sudo -u postgres -g postgres -H -- psql -c "CREATE DATABASE karaokemugen_app ENCODING 'UTF8';" + sudo -u postgres -g postgres -H -- psql -c "CREATE USER karaokemugen_app WITH ENCRYPTED PASSWORD 'musubi'; GRANT ALL PRIVILEGES ON DATABASE karaokemugen_app TO karaokemugen_app;" + sudo -u postgres -g postgres -H -- psql -d karaokemugen_app -c "CREATE EXTENSION unaccent;" + echo -e "${_COL_GREEN_}karaokemugen_app database created!" +} + +# use colors only if we have them +if [[ $(which tput > /dev/null 2>&1 && tput -T "${TERM}" colors || echo -n '0') -ge 8 ]] ; then + _COL_YELLOW_='\e[0;33m' + _COL_GREEN_='\e[0;32m' + _COL_LIGHTGREY_='\e[0;37m' + _COL_BRED_='\e[1;31m' + _COL_BBLUE_='\e[1;34m' + _COL_BWHITE_='\e[1;37m' + _COL_DEFAULT_='\e[0m' + _BEGIN_="${_COL_BRED_}-> ${_COL_BBLUE_}" +fi + +while getopts ":g" opt; do + case ${opt} in + g ) + #target=$OPTARG + echo -e "${_COL_YELLOW_}You may have to enter your sudo password" + add_user_to_group + echo -e "${_BEGIN_}Done! You need to restart your session to apply these changes." + exit 0 + ;; + \? ) + echo "Invalid option: $OPTARG" 1>&2 + exit 1 + ;; + esac +done +shift $((OPTIND -1)) + +echo -e "${_BEGIN_}Welcome to the Karaoke Mugen installer!" +echo -e "${_COL_YELLOW_}⚠️ You may have to enter your sudo password a couple times during this installation." +echo -e "${_COL_YELLOW_}This script may not work if you tweaked your PostgreSQL configuration." +echo -e "${_COL_YELLOW_}If you encounter any problems during installation, contact the package maintainer." +echo -e "${_COL_YELLOW_}The installation will begin in 5 seconds." +sleep 5 + +echo -e "${_BEGIN_}Doing some initial checks..." +check_postgres +check_mugen + +setup_postgres + +echo -e "${_BEGIN_}Done! Go ahead and launch Karaoke Mugen using the desktop entry" + diff --git a/karaokemugen.desktop b/karaokemugen.desktop new file mode 100644 index 00000000000..4aaa3d3da36 --- /dev/null +++ b/karaokemugen.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Name=Karaoke Mugen +Comment=Karaoke playlist manager/player app used in parties or events. +Exec=karaokemugen +Icon=karaokemugen +Terminal=false +Type=Application +Categories=AudioVideo;Video \ No newline at end of file diff --git a/karaokemugen.install b/karaokemugen.install new file mode 100644 index 00000000000..76aeede9d7c --- /dev/null +++ b/karaokemugen.install @@ -0,0 +1,14 @@ +post_install() { + echo "TIP: This package ships with tools to help you with Karaoke Mugen installation" + echo "- karaokemugen-install interactively creates the initial configuration and helps you with database setup." + echo "- karaokemugen launches the app with Electron UI." +} + +post_upgrade() { + echo "You may need to run karaokemugen-install again. Keep that in mind." +} + +post_remove() { + echo "The media files downloaded are still in the directory you set (~/KaraokeMugen/ by default)." + echo "Delete them to free space if you want." +} \ No newline at end of file diff --git a/run.sh b/run.sh new file mode 100755 index 00000000000..07de3a7a7d7 --- /dev/null +++ b/run.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# _ __ _ __ __ +# | |/ /__ _ _ _ __ _ ___| |_____ | \/ |_ _ __ _ ___ _ _ +# | ' /dev/null 2>&1 && tput -T "${TERM}" colors || echo -n '0') -ge 8 ]] ; then + _COL_YELLOW_='\e[0;33m' + _COL_BLUE_='\e[0;34m' + _COL_DEFAULT_='\e[0m' +fi + +# Check if postgres is running +if systemctl is-active postgresql -q ; then + echo "Starting Karaoke Mugen..." +else + echo -e "${_COL_YELLOW_}⚠️ Postgres seems down... Trying to start PostgreSQL before Karaoke Mugen.${_COL_DEFAULT_}" + echo -e "${_COL_BLUE_}You may want to start PostgreSQL at boot with `systemctl enable postgresql`.${_COL_DEFAULT_}" + systemctl start postgresql +fi +# Launch Karaoke Mugen +exec electron /usr/lib/karaokemugen/asar/app.asar "$@"