Настройка возможностей, как описано в другом ответе, необходима, но недостаточна, по крайней мере, если вместо mySQL используется MariaDB.
В дополнение к добавлению возможностей, NoNewPrivileges
должно быть ложно (или нет ).
Поскольку NoNewPrivileges
подразумевается PrivateDevices
, установленным в mariadb.service
, мы должны изменить это значение на false.
У меня все получилось в Ubuntu 18 LTS (, где Galera не работает с поставляемым пакетом mysql )с этими настройками в/etc/systemd/system/mariadb.service.d/mariadb-sudo.conf
(нет необходимости редактировать исходныйmariadb.service
):[Service]
CapabilityBoundingSet=CAP_SETUID
CapabilityBoundingSet=CAP_SETGID
CapabilityBoundingSet=CAP_AUDIT_WRITE
PrivateDevices=false
Поскольку mariadb.service
имеет Alias=mysql.service
, его можно начать с service mysql start
, так что это, кажется, соответствует исходному вопросу.
read_a_key() (
exec </dev/tty
t=$(stty -g)
trap 'stty "$t"; return' EXIT INT QUIT TERM
stty raw -echo isig
dd count=1 2>/dev/null
)
printf '%s ' 'Press ANY KEY to continue... '
key=$(read_a_key)
echo OK, continuing
Используйте его как read_a_key >/dev/null
, если вам все равно, какую клавишу нажал пользователь.
Это также должно нормально работать с клавишами, которые превращаются в несколько символов (, например. F1
), в отличие от bash read -n1
, который оставляет ложные символы OP
или [[A
для следующей команды;-)
Я нашел комментарий пользователя epileg на сайте, предлагающий этот фрагмент кода(слегка отредактированный ), в котором утверждалось, что «есть способ аккуратно сделать это в Linux :"
#!/bin/bash
...
echo -n "Press <ENTER> to continue..."
stty -echo
dd count=1 1>/dev/null 2>&1
stty echo
echo #Produces an empty line in the end, can be removed.
...
Хотя это очевидно для некоторых пользователей, следует также упомянуть, что шебанг #!/bin/bash
не решает, что использовать, если вы это сделаете. Допустим, приведенный выше скрипт назывался demo, и вы набрали sh demo
или zsh demo
, соответственно вызывается sh
или zsh
, а не bash
.