Мне потребовалось создать rpm пакет для CentOS. Пакет при установке должен создавать базу в MySQL. Почитав доки федоры, выяснил, что rpm может (и должен) работать только в не интерактивном режиме (в отличие от дебиана, у которого несколько интерактивных фронтендов и в котором при установке можно задавать вопросы). Далее выяснил, что mariadb-server устанавливается в CentOS с пустым паролем администратора и слушает на 0.0.0.0 (а также, в одном из вариантов он у меня установился с правами 755 на unix сокет mysql, что привело к невозможности подключению через localhost к MySQL нерутовому пользователю). Настройкой MariaDB я заниматься не хочу, т.к. ей может пользоваться не только мой пакет, и такими настройками должен заниматься админ и установочные скрипты mariadb-server.
Теперь я пытаюсь понять, какой у меня должен быть алгоритм работы установочного скрипта пакета, которому нужно создать базу. Как вообще это принято в мире rpm? Пароль администратора (который должен быть установлен) я спросить не могу, сообщить пользователю, что пароль не подходит тоже (это могу, но не факт, что он заметит сообщение). Скрипт должен уметь работать как с только что установленным сервером базы данных (по зависимостям пакета) так и с уже давно установленным и настроенным. Я, пока, додумался лишь до того, чтобы пытаться подключиться без пароля и с использованием того, что написано в ~root/.my.cnf
, и если не получится, то сообщать, что нужно создать ~root/.my.cnf
и руками запустить скрипт, который подготовит пакет к работе (создаст базу, зальет данные...). (Тут, однако, не понятно, почему при установке Машки, редхатовцы по умолчанию не создают ~root/.my.cnf
с админским паролем, ибо пароль должен быть, при неинтерактивной установке его больше девать некуда, а линкусовый рут при необходимости, всегда может запустить Машку в режиме без привелегий, т.е. знание рутом пароля от базы никак не повлияет на его возможности доступа к данным)
Однако, я, наверняка, не первый, кто решает такую задачу (создания базы в установочных скрпитах). Как такое принято делать в федоре-редхате?