54abbf35cd00dabc180c64608efc87425f158e19
[lhc/ateliers.git] / etc / sv / mysql / local.sh
1 "$tool"/local/apt-get-install mysql-server-5.5
2 "$tool"/local/insserv-remove mysql
3
4 eval "home=~$sv"
5
6 "$tool"/local/adduser mysql \
7 --disabled-login \
8 --disabled-password \
9 --group \
10 --home "$home" \
11 --shell /bin/false \
12 --system
13 "$tool"/local/adduser mysql-data \
14 --disabled-login \
15 --disabled-password \
16 --group \
17 --home "$home"/data \
18 --no-create-home \
19 --shell /bin/false \
20 --system
21 sudo usermod --home "$home" mysql
22 sudo adduser mysql mysql-data
23 sudo install -d -m 755 -o mysql -g mysql \
24 "$home" \
25 "$home"/bin
26 sudo rm -rf /etc/mysql
27 sudo install -d -m 750 -o mysql -g mysql-data \
28 /etc/mysql \
29 /etc/mysql/conf.d \
30 "$home"/etc
31 sudo ln -fns \
32 /etc/mysql \
33 "$home"/etc/mysql
34 sudo install -m 644 -o mysql -g mysql \
35 "$tool"/etc/mysql/my.cnf \
36 /etc/mysql/my.cnf
37 if sudo test ! -d "$home"/data
38 then
39 sudo install -d -m 750 -o mysql -g mysql-data \
40 "$home"/data
41 sudo -u mysql mysql_install_db \
42 --datadir="$home"/data \
43 --no-defaults
44 fi
45
46 sudo find "$tool"/etc/mysql/bin/ -type f -perm /+x -exec \
47 install -m 755 -o root -g root \
48 -t /home/mysql/bin/ {} +
49
50 sudo ln -fns \
51 ../sv/"$sv" \
52 /etc/service/"$sv"
53 "$tool"/local/runit-sv-start "$sv"
54 while ! sudo -u mysql mysql -u mysql </dev/null
55 do sleep 1; done
56
57 # NOTE:
58 # - ajoute l'accès par socket Unix à mysql
59 # - ajoute les droits de super-utilisateur à mysql
60 # - supprime l'accès par mot-de-passe à root
61 # - supprime les bases de données de l'utilisateurice anonyme
62 # - supprime l'utilisateurice anonyme
63 # NOTE: mémo :
64 # GRANT USAGE ON *.* TO 'root'@'*' IDENTIFIED WITH auth_socket;
65 # CREATE USER 'root'@'localhost' IDENTIFIED WITH auth_socket;
66 # UPDATE mysql.user SET Password='' WHERE user='root';
67 # DELETE FROM mysql.user WHERE user = 'root' AND host NOT IN ('localhost', '127.0.0.1', '::1');
68 sudo mysql -u root --batch --verbose <<-EOF
69 DELETE FROM mysql.user WHERE user = 'root' and plugin = '';
70
71 DROP PROCEDURE IF EXISTS mysql.create_user_mysql;
72 DELIMITER //
73 CREATE PROCEDURE mysql.create_user_mysql ()
74 BEGIN
75 IF NOT (EXISTS (SELECT User
76 FROM mysql.user
77 WHERE User='mysql'
78 AND Host='localhost'
79 LIMIT 1))
80 THEN GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'localhost' IDENTIFIED WITH auth_socket;
81 END IF;
82 END;
83 //
84 CALL mysql.create_user_mysql();
85 DROP PROCEDURE mysql.create_user_mysql;
86 UPDATE mysql.user SET grant_priv='Y',super_priv='Y' WHERE user='mysql';
87 DELETE FROM mysql.db WHERE user = '';
88 DELETE FROM mysql.user WHERE user = '';
89
90 DROP PROCEDURE IF EXISTS mysql.create_user;
91 CREATE PROCEDURE mysql.create_user (username VARCHAR(16), hostname VARCHAR(60))
92 BEGIN
93 IF NOT (EXISTS (SELECT User
94 FROM mysql.user
95 WHERE User = username
96 AND Host = hostname
97 LIMIT 1))
98 THEN
99 SET @QUERY = CONCAT("CREATE USER ", username, "@", hostname, " IDENTIFIED WITH auth_socket");
100 PREPARE stmt FROM @QUERY;
101 EXECUTE stmt;
102 END IF;
103 END;
104 //
105
106 DROP PROCEDURE IF EXISTS mysql.create_database;
107 CREATE PROCEDURE mysql.create_database (dbname VARCHAR(16), username VARCHAR(16), hostname VARCHAR(60))
108 BEGIN
109 IF NOT (EXISTS (SELECT SCHEMA_NAME
110 FROM INFORMATION_SCHEMA.SCHEMATA
111 WHERE SCHEMA_NAME = dbname
112 LIMIT 1))
113 THEN
114 SET @QUERY = CONCAT("CREATE DATABASE ", dbname, " CHARACTER SET utf8 COLLATE utf8_general_ci");
115 PREPARE stmt FROM @QUERY;
116 EXECUTE stmt;
117 END IF;
118 SET @QUERY = CONCAT("GRANT ALL PRIVILEGES ON ", dbname, ".* TO ", username, "@", hostname);
119 PREPARE stmt FROM @QUERY;
120 EXECUTE stmt;
121 END;
122 //
123
124 FLUSH PRIVILEGES;
125 EOF