blob: 0f0b24a69e2dad05e827345fc79e90c9745caff2 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
{ pkgs ? import <nixpkgs> {} }:
let
shellDrv =
{
mkShell,
mariadb,
apacheHttpd,
...
}:
mkShell {
nativeBuildInputs = [
mariadb
apacheHttpd
];
# Thanks https://github.com/JianZcar/LAMP-nix-shell-env/blob/main/default.nix
shellHook = ''
: ''${MYSQL_HOME:="$HOME/.config/mysql"}
: ''${MYSQL_DATADIR:="$MYSQL_HOME/data"}
: ''${MYSQL_PID_FILE:="$MYSQL_HOME/mysql.pid"}
: ''${MYSQL_UNIX_PORT:="$MYSQL_HOME/mysql.sock"}
export MYSQL_UNIX_PORT
__first_time=""
if [ ! -d "$MYSQL_HOME" ]
then
echo 'Installing mysql database...'
mkdir -p "$MYSQL_HOME" "$MYSQL_DATADIR"
mysql_install_db \
--auth-root-authentication-method=normal \
--basedir="${mariadb}" \
--datadir="$MYSQL_DATADIR" \
--pid-file="$MYSQL_PID_FILE" \
--user="$USER" >/tmp/install_log 2>&1 || {
echo 'Could not install mysql database! Log:';
cat /tmp/install_log;
exit 1;
}
__first_time="y"
fi
# Start mysql
echo 'Starting mysql...'
mysqld \
--no-defaults \
--basedir="${mariadb}" \
--datadir="$MYSQL_DATADIR" \
--pid-file="$MYSQL_PID_FILE" \
--socket="$MYSQL_UNIX_PORT" \
--bind-address=0.0.0.0 \
--log-error="$MYSQL_HOME"/mysql.err \
--user="$USER" >>"$MYSQL_HOME"/mysql.log &
MYSQL_PID=$!
until mysqladmin ping >/dev/null 2>&1
do
sleep 0.5
ps -p $MYSQL_PID >/dev/null 2>&1 || {
echo "mysql daemon stopped initializing!";
exit 1;
}
done
if [ -n "$__first_time" ]
then
mysql \
--user="root" \
-e "CREATE USER '$USER'@'localhost'; GRANT ALL PRIVILEGES ON *.* TO '$USER'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;"
fi
unset __first_time
# Start user's shell
"$(getent passwd $USER | cut -d : -f 7)"
# Stop mysql
echo 'Shutting down mysql...'
mysqladmin \
--user="root" \
--socket="$MYSQL_UNIX_PORT" \
shutdown || pkill mysqld
exit 0
'';
};
in
shellDrv pkgs
|