mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-29 21:56:42 +00:00
Merge pull request #3190 from vpeter4/mariadb_addon
mariadb: initial addon
This commit is contained in:
commit
41d2c65fd3
2
packages/addons/service/mariadb/changelog.txt
Normal file
2
packages/addons/service/mariadb/changelog.txt
Normal file
@ -0,0 +1,2 @@
|
||||
100
|
||||
- initial version
|
BIN
packages/addons/service/mariadb/icon/icon.png
Normal file
BIN
packages/addons/service/mariadb/icon/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
97
packages/addons/service/mariadb/package.mk
Normal file
97
packages/addons/service/mariadb/package.mk
Normal file
@ -0,0 +1,97 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="mariadb"
|
||||
PKG_VERSION="10.3.11"
|
||||
PKG_REV="100"
|
||||
PKG_SHA256="211655b794c9d5397ba3be6c90737eac02e882f296268299239db47ba328f1b2"
|
||||
PKG_LICENSE="GPL2"
|
||||
PKG_SITE="https://mariadb.org"
|
||||
PKG_URL="https://downloads.mariadb.org/interstitial/${PKG_NAME}-${PKG_VERSION}/source/${PKG_NAME}-${PKG_VERSION}.tar.gz"
|
||||
PKG_DEPENDS_HOST="toolchain ncurses:host"
|
||||
PKG_DEPENDS_TARGET="toolchain binutils bzip2 libaio libxml2 lzo ncurses openssl systemd zlib mariadb:host"
|
||||
PKG_SHORTDESC="MariaDB is a community-developed fork of the MySQL."
|
||||
PKG_LONGDESC="MariaDB (${PKG_VERSION}) is a fast SQL database server and a drop-in replacement for MySQL."
|
||||
PKG_TOOLCHAIN="cmake"
|
||||
PKG_BUILD_FLAGS="-gold"
|
||||
|
||||
PKG_IS_ADDON="yes"
|
||||
PKG_SECTION="service"
|
||||
PKG_ADDON_NAME="MariaDB SQL database server"
|
||||
PKG_ADDON_TYPE="xbmc.service"
|
||||
|
||||
configure_package() {
|
||||
PKG_CMAKE_OPTS_HOST=" \
|
||||
-DCMAKE_INSTALL_MESSAGE=NEVER \
|
||||
-DSTACK_DIRECTION=-1 \
|
||||
-DHAVE_IB_GCC_ATOMIC_BUILTINS=1 \
|
||||
-DCMAKE_CROSSCOMPILING=OFF \
|
||||
import_executables"
|
||||
|
||||
PKG_CMAKE_OPTS_TARGET=" \
|
||||
-DCMAKE_INSTALL_MESSAGE=NEVER \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DBUILD_CONFIG=mysql_release \
|
||||
-DFEATURE_SET=classic \
|
||||
-DSTACK_DIRECTION=1 \
|
||||
-DDISABLE_LIBMYSQLCLIENT_SYMBOL_VERSIONING=ON \
|
||||
-DCMAKE_CROSSCOMPILING=ON \
|
||||
-DIMPORT_EXECUTABLES=${PKG_BUILD}/.${HOST_NAME}/import_executables.cmake \
|
||||
-DWITHOUT_AWS_KEY_MANAGEMENT=ON \
|
||||
-DWITH_EXTRA_CHARSETS=complex \
|
||||
-DWITH_SSL=system \
|
||||
-DWITH_SSL=${SYSROOT_PREFIX}/usr \
|
||||
-DWITH_JEMALLOC=OFF \
|
||||
-DWITH_PCRE=bundled \
|
||||
-DWITH_ZLIB=bundled \
|
||||
-DWITH_EDITLINE=bundled \
|
||||
-DWITH_LIBEVENT=bundled \
|
||||
-DCONNECT_WITH_LIBXML2=bundled \
|
||||
-DSKIP_TESTS=ON \
|
||||
-DWITH_DEBUG=OFF \
|
||||
-DWITH_UNIT_TESTS=OFF \
|
||||
-DENABLE_DTRACE=OFF \
|
||||
-DSECURITY_HARDENED=OFF \
|
||||
-DWITH_EMBEDDED_SERVER=OFF \
|
||||
-DWITHOUT_SERVER=OFF \
|
||||
-DPLUGIN_AUTH_SOCKET=STATIC \
|
||||
-DDISABLE_SHARED=NO \
|
||||
-DENABLED_PROFILING=OFF \
|
||||
-DENABLE_STATIC_LIBS=OFF \
|
||||
-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \
|
||||
-DWITH_SAFEMALLOC=OFF \
|
||||
-DWITHOUT_AUTH_EXAMPLES=ON"
|
||||
}
|
||||
|
||||
make_host() {
|
||||
ninja ${NINJA_OPTS} import_executables
|
||||
}
|
||||
|
||||
makeinstall_host() {
|
||||
:
|
||||
}
|
||||
|
||||
makeinstall_target() {
|
||||
# use only for addon
|
||||
DESTDIR=${PKG_BUILD}/.install_addon ninja ${NINJA_OPTS} install
|
||||
rm -rf "${PKG_BUILD}/.install_addon/usr/mysql-test"
|
||||
}
|
||||
|
||||
addon() {
|
||||
local ADDON="${ADDON_BUILD}/${PKG_ADDON_ID}"
|
||||
local MARIADB="${PKG_BUILD}/.install_addon/usr"
|
||||
|
||||
mkdir -p ${ADDON}/bin
|
||||
mkdir -p ${ADDON}/config
|
||||
|
||||
cp ${MARIADB}/bin/mysql \
|
||||
${MARIADB}/bin/mysqld \
|
||||
${MARIADB}/bin/mysqladmin \
|
||||
${MARIADB}/bin/mysql_secure_installation \
|
||||
${MARIADB}/bin/my_print_defaults \
|
||||
${MARIADB}/bin/resolveip \
|
||||
${MARIADB}/scripts/mysql_install_db \
|
||||
${ADDON}/bin
|
||||
|
||||
cp -PR ${MARIADB}/share ${ADDON}
|
||||
}
|
59
packages/addons/service/mariadb/source/bin/mariadb.start
Executable file
59
packages/addons/service/mariadb/source/bin/mariadb.start
Executable file
@ -0,0 +1,59 @@
|
||||
#!/bin/sh
|
||||
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
. /etc/profile
|
||||
oe_setup_addon service.mariadb
|
||||
|
||||
# create dir for socket and pid
|
||||
mkdir -p /var/run/mysqld
|
||||
|
||||
# exit if already running
|
||||
PID=$(ps aux | awk '/\/bin\/mysqld/ {print $1; exit 0}')
|
||||
if [ -n "$PID" ]; then
|
||||
echo "MariaDB server is already running"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# check for first run and generate passwords
|
||||
DEF_XML="$ADDON_DIR/settings-default.xml"
|
||||
CUR_XML="$ADDON_HOME/settings.xml"
|
||||
|
||||
if grep -q "@MYSQL_ROOT_PASS@" $DEF_XML; then
|
||||
MYSQL_ROOT_PASS="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 8)"
|
||||
MYSQL_KODI_PASS="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 8)"
|
||||
|
||||
sed -i "s|@MYSQL_ROOT_PASS@|$MYSQL_ROOT_PASS|g" $DEF_XML
|
||||
sed -i "s|@MYSQL_KODI_PASS@|$MYSQL_KODI_PASS|g" $DEF_XML
|
||||
|
||||
cp $DEF_XML $CUR_XML
|
||||
fi
|
||||
|
||||
# copy config file
|
||||
if [ ! -f $ADDON_HOME/my.cnf ]; then
|
||||
cp $ADDON_DIR/config/my.cnf $ADDON_HOME
|
||||
fi
|
||||
|
||||
# install database
|
||||
if [ ! -d "$ADDON_HOME/data/mysql" ]; then
|
||||
echo "Installing database"
|
||||
$ADDON_DIR/bin/mysql_install_db --basedir=$ADDON_DIR --datadir=$ADDON_HOME/data
|
||||
fi
|
||||
|
||||
# init script to create user kodi and change passwords
|
||||
if [[ ! -f $ADDON_DIR/set_mysql_passwords.sql ]] || [[ $CUR_XML -nt $ADDON_DIR/set_mysql_passwords.sql ]]; then
|
||||
cat << SQL_DATA > $ADDON_DIR/set_mysql_passwords.sql
|
||||
SET PASSWORD FOR 'root'@'localhost'=PASSWORD('$MYSQL_ROOT_PASS');
|
||||
CREATE USER IF NOT EXISTS 'kodi';
|
||||
SET PASSWORD FOR 'kodi'=PASSWORD('$MYSQL_KODI_PASS');
|
||||
GRANT ALL ON *.* TO 'kodi';
|
||||
flush privileges;
|
||||
|
||||
SQL_DATA
|
||||
|
||||
init_file="--init-file=$ADDON_DIR/set_mysql_passwords.sql"
|
||||
fi
|
||||
|
||||
echo "Starting mysqld"
|
||||
MYSQL_HOME="$ADDON_HOME" exec $ADDON_DIR/bin/mysqld $init_file &
|
6
packages/addons/service/mariadb/source/bin/mariadb.stop
Executable file
6
packages/addons/service/mariadb/source/bin/mariadb.stop
Executable file
@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
kill $(cat /var/run/mysqld/mysqld.pid)
|
206
packages/addons/service/mariadb/source/config/my.cnf
Normal file
206
packages/addons/service/mariadb/source/config/my.cnf
Normal file
@ -0,0 +1,206 @@
|
||||
# MariaDB database server configuration file.
|
||||
#
|
||||
# You can copy this file to one of:
|
||||
# - "/etc/mysql/my.cnf" to set global options,
|
||||
# - "~/.my.cnf" to set user-specific options.
|
||||
#
|
||||
# One can use all long options that the program supports.
|
||||
# Run program with --help to get a list of available options and with
|
||||
# --print-defaults to see which it would actually understand and use.
|
||||
#
|
||||
# For explanations see
|
||||
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
|
||||
|
||||
# This will be passed to all mysql clients
|
||||
# It has been reported that passwords should be enclosed with ticks/quotes
|
||||
# escpecially if they contain "#" chars...
|
||||
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
|
||||
[client]
|
||||
port = 3306
|
||||
socket = /var/run/mysqld/mysqld.sock
|
||||
|
||||
# Here is entries for some specific programs
|
||||
# The following values assume you have at least 32M ram
|
||||
|
||||
# This was formally known as [safe_mysqld]. Both versions are currently parsed.
|
||||
[mysqld_safe]
|
||||
socket = /var/run/mysqld/mysqld.sock
|
||||
nice = 0
|
||||
|
||||
[mysqld]
|
||||
#
|
||||
# * Basic Settings
|
||||
#
|
||||
user = root
|
||||
pid-file = /var/run/mysqld/mysqld.pid
|
||||
socket = /var/run/mysqld/mysqld.sock
|
||||
port = 3306
|
||||
basedir = /storage/.kodi/addons/service.mariadb
|
||||
datadir = /storage/.kodi/userdata/addon_data/service.mariadb/data
|
||||
log-error = /storage/.kodi/userdata/addon_data/service.mariadb/mysqld.log
|
||||
tmpdir = /tmp
|
||||
#lc_messages_dir = /usr/share/mysql
|
||||
lc_messages = en_US
|
||||
skip-external-locking
|
||||
# Kodi needs more for library (256K should probably be enough)
|
||||
#thread_stack = 128K
|
||||
thread_stack = 384K
|
||||
#
|
||||
# Instead of skip-networking the default is now to listen only on
|
||||
# localhost which is more compatible and is not less secure.
|
||||
#bind-address = 127.0.0.1
|
||||
#
|
||||
# * Fine Tuning
|
||||
#
|
||||
max_connections = 100
|
||||
connect_timeout = 5
|
||||
wait_timeout = 600
|
||||
max_allowed_packet = 16M
|
||||
thread_cache_size = 128
|
||||
sort_buffer_size = 4M
|
||||
bulk_insert_buffer_size = 16M
|
||||
tmp_table_size = 32M
|
||||
max_heap_table_size = 32M
|
||||
#
|
||||
# * MyISAM
|
||||
#
|
||||
# This replaces the startup script and checks MyISAM tables if needed
|
||||
# the first time they are touched. On error, make copy and try a repair.
|
||||
myisam_recover_options = BACKUP
|
||||
key_buffer_size = 128M
|
||||
#open-files-limit = 2000
|
||||
#table_open_cache = 400
|
||||
table_open_cache = 1000
|
||||
myisam_sort_buffer_size = 512M
|
||||
concurrent_insert = 2
|
||||
read_buffer_size = 2M
|
||||
read_rnd_buffer_size = 1M
|
||||
#
|
||||
# * Query Cache Configuration
|
||||
#
|
||||
# Cache only tiny result sets, so we can fit more in the query cache.
|
||||
query_cache_limit = 128K
|
||||
query_cache_size = 64M
|
||||
# for more write intensive setups, set to DEMAND or OFF
|
||||
#query_cache_type = DEMAND
|
||||
#
|
||||
# * Logging and Replication
|
||||
#
|
||||
# Both location gets rotated by the cronjob.
|
||||
# Be aware that this log type is a performance killer.
|
||||
# As of 5.1 you can enable the log at runtime!
|
||||
#general_log_file = /var/log/mysql/mysql.log
|
||||
#general_log = 1
|
||||
#
|
||||
# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
|
||||
#
|
||||
# we do want to know about network errors and such
|
||||
log_warnings = 2
|
||||
#
|
||||
# Enable the slow query log to see queries with especially long duration
|
||||
#slow_query_log[={0|1}]
|
||||
slow_query_log_file = /var/log/mysql/mariadb-slow.log
|
||||
long_query_time = 10
|
||||
#log_slow_rate_limit = 1000
|
||||
log_slow_verbosity = query_plan
|
||||
|
||||
#log-queries-not-using-indexes
|
||||
#log_slow_admin_statements
|
||||
#
|
||||
# The following can be used as easy to replay backup logs or for replication.
|
||||
# note: if you are setting up a replication slave, see README.Debian about
|
||||
# other settings you may need to change.
|
||||
#server-id = 1
|
||||
#report_host = master1
|
||||
#auto_increment_increment = 2
|
||||
#auto_increment_offset = 1
|
||||
# disable binary log
|
||||
#log_bin = /var/log/mysql/mariadb-bin
|
||||
#log_bin_index = /var/log/mysql/mariadb-bin.index
|
||||
# not fab for performance, but safer
|
||||
#sync_binlog = 1
|
||||
expire_logs_days = 10
|
||||
max_binlog_size = 100M
|
||||
# slaves
|
||||
#relay_log = /var/log/mysql/relay-bin
|
||||
#relay_log_index = /var/log/mysql/relay-bin.index
|
||||
#relay_log_info_file = /var/log/mysql/relay-bin.info
|
||||
#log_slave_updates
|
||||
#read_only
|
||||
#
|
||||
# If applications support it, this stricter sql_mode prevents some
|
||||
# mistakes like inserting invalid dates etc.
|
||||
#sql_mode = NO_ENGINE_SUBSTITUTION,TRADITIONAL
|
||||
#
|
||||
# * InnoDB
|
||||
#
|
||||
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
|
||||
# Read the manual for more InnoDB related options. There are many!
|
||||
default_storage_engine = InnoDB
|
||||
# you can't just change log file size, requires special procedure
|
||||
#innodb_log_file_size = 50M
|
||||
|
||||
# optimizations https://forum.kodi.tv/showthread.php?tid=329046&pid=2708799 #pid2708799
|
||||
# https://discourse.coreelec.org/t/kodi-and-mariadb-part-2/513
|
||||
# innodb_buffer_pool_size=2G # MariaDB recommends using 80% of your available memory but the default 1G might be enough. Always set to multiples of 1G.
|
||||
# innodb_buffer_pool_instances=2 # When innodb_buffer_pool_size is > 1G, MariaDB will split the pool in instances. They should be even dividers of 1G.
|
||||
# innodb_file_format=Barracuda # Gone in 10.3 / This is an optimized storage engine not available in MySQL
|
||||
# innodb_log_block_size=4096 # Gone in 10.3 / Default is 512, when using an SSD or 4k drives, block size should be 4096
|
||||
# innodb_adaptive_hash_index=OFF # For Kodi no benefit is gained from additional indexes. This should only be used with large databases.
|
||||
# character-set-server=utf8 # I really hope you all used this in MySQL already. This avoids potential pitfalls with text in exotic codepages.
|
||||
# key-buffer-size=64k # When not using MyISAM as storage engine, this buffer can be reduced to a minimum
|
||||
# skip-name-resolve # Avoids name resolving in the local network, thus reducing overhead. That also means that all connections are done by IP only.
|
||||
# optimizer_search_depth=1 # Here we are, this is winner of the year.
|
||||
|
||||
innodb_buffer_pool_size = 256M
|
||||
innodb_log_buffer_size = 8M
|
||||
innodb_file_per_table = 1
|
||||
innodb_open_files = 400
|
||||
innodb_io_capacity = 400
|
||||
innodb_flush_method = O_DIRECT
|
||||
character-set-server=utf8 # This avoids potential pitfalls with text in exotic codepages.
|
||||
#skip-name-resolve # Avoids name resolving in the local network, thus reducing overhead. That also means that all connections are done by IP only.
|
||||
optimizer_search_depth=1 # Here we are, this is winner of the year.
|
||||
|
||||
#
|
||||
# * Security Features
|
||||
#
|
||||
# Read the manual, too, if you want chroot!
|
||||
# chroot = /var/lib/mysql/
|
||||
#
|
||||
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
|
||||
#
|
||||
# ssl-ca=/etc/mysql/cacert.pem
|
||||
# ssl-cert=/etc/mysql/server-cert.pem
|
||||
# ssl-key=/etc/mysql/server-key.pem
|
||||
|
||||
#
|
||||
# * Galera-related settings
|
||||
#
|
||||
[galera]
|
||||
# Mandatory settings
|
||||
#wsrep_on=ON
|
||||
#wsrep_provider=
|
||||
#wsrep_cluster_address=
|
||||
#binlog_format=row
|
||||
#default_storage_engine=InnoDB
|
||||
#innodb_autoinc_lock_mode=2
|
||||
#
|
||||
# Allow server to accept connections on all interfaces.
|
||||
#
|
||||
#bind-address=0.0.0.0
|
||||
#
|
||||
# Optional setting
|
||||
#wsrep_slave_threads=1
|
||||
#innodb_flush_log_at_trx_commit=0
|
||||
|
||||
[mysqldump]
|
||||
quick
|
||||
quote-names
|
||||
max_allowed_packet = 16M
|
||||
|
||||
[mysql]
|
||||
#no-auto-rehash # faster start of mysql but no tab completion
|
||||
|
||||
[isamchk]
|
||||
key_buffer = 16M
|
18
packages/addons/service/mariadb/source/default.py
Normal file
18
packages/addons/service/mariadb/source/default.py
Normal file
@ -0,0 +1,18 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
import subprocess
|
||||
import xbmc
|
||||
import xbmcaddon
|
||||
|
||||
class Monitor(xbmc.Monitor):
|
||||
def __init__(self, *args, **kwargs):
|
||||
xbmc.Monitor.__init__(self)
|
||||
self.id = xbmcaddon.Addon().getAddonInfo('id')
|
||||
|
||||
def onSettingsChanged(self):
|
||||
subprocess.call(['systemctl', 'restart', self.id])
|
||||
|
||||
if __name__ == "__main__":
|
||||
Monitor().waitForAbort()
|
||||
|
@ -0,0 +1,22 @@
|
||||
# Kodi Media Center language file
|
||||
# Addon Name: mariadb
|
||||
# Addon id: service.mariadb
|
||||
# Addon Provider: Team LibreELEC
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30000"
|
||||
msgid "Accounts"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30001"
|
||||
msgid "Passwords"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30002"
|
||||
msgid "root"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30003"
|
||||
msgid "kodi"
|
||||
msgstr ""
|
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<settings>
|
||||
<category label="30000">
|
||||
<setting label="30001" type="lsep"/>
|
||||
<setting label="30002" id="MYSQL_ROOT_PASS" type="text" default="" />
|
||||
<setting label="30003" id="MYSQL_KODI_PASS" type="text" default="" />
|
||||
</category>
|
||||
</settings>
|
@ -0,0 +1,4 @@
|
||||
<settings version="2">
|
||||
<setting id="MYSQL_ROOT_PASS" default="">@MYSQL_ROOT_PASS@</setting>
|
||||
<setting id="MYSQL_KODI_PASS" default="">@MYSQL_KODI_PASS@</setting>
|
||||
</settings>
|
@ -0,0 +1,18 @@
|
||||
[Unit]
|
||||
Description=MariaDB server
|
||||
After=graphical.target network-online.service
|
||||
Before=kodi.service
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
PIDFile=/var/run/mysqld/mysqld.pid
|
||||
ExecStart=/bin/sh -c "exec sh /storage/.kodi/addons/service.mariadb/bin/mariadb.start"
|
||||
ExecStop=/bin/sh -c "exec sh /storage/.kodi/addons/service.mariadb/bin/mariadb.stop"
|
||||
TimeoutStartSec=60
|
||||
TimeoutStopSec=60
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
StartLimitInterval=0
|
||||
|
||||
[Install]
|
||||
WantedBy=kodi.service
|
Loading…
x
Reference in New Issue
Block a user