diff options
Diffstat (limited to 'community/minio/minio.initd')
-rw-r--r-- | community/minio/minio.initd | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/community/minio/minio.initd b/community/minio/minio.initd new file mode 100644 index 00000000000..cb482ba50d9 --- /dev/null +++ b/community/minio/minio.initd @@ -0,0 +1,75 @@ +#!/sbin/openrc-run + +name="MinIO" +description="Minio Block Storage Server" + +: ${data_dirs:="/var/lib/minio/data"} +: ${logfile="/var/log/$RC_SVCNAME.log"} +: ${command_user:="minio:minio"} +: ${healthcheck_timer:=30} +: ${respawn_delay:=5} +: ${respawn_max:=0} + +command="/usr/bin/minio" +command_args="server + ${certs_dir:+"--certs-dir=$certs_dir"} + ${command_args-"--quiet --anonymous"} + $data_dirs + " +command_background="yes" +pidfile="/run/$RC_SVCNAME.pid" +output_log="$logfile" +error_log="$logfile" + +depend() { + need localmount net + use dns +} + +start_pre() { + # Replace root user and password placeholders with random strings. + if [ "$MINIO_ROOT_USER" = 'change-me' ] || [ "$MINIO_ROOT_PASSWORD" = 'change-me' ]; then + local conf + for conf in "/etc/conf.d/${RC_SVCNAME%%.*}" "/etc/conf.d/$RC_SVCNAME" ""; do + [ -w "$conf" ] && break + done + if [ "$conf" ]; then + _randomize_secrets "$conf" + else # no writable config found + ewarn "Change MINIO_ROOT_USER and MINIO_ROOT_PASSWORD in /etc/conf.d/" + ewarn "to unique and long values!" + fi + fi + + # If the first directory is a local directory (starts with "/"), ensure it exists. + case "$data_dirs" in /*) + local first_dir=$(echo "$data_dirs" | grep -Eo '\S+' | head -n1) + + checkpath --directory --mode 0700 --owner "$command_user" "$first_dir" || return 1 + esac + + if [ "$logfile" ]; then + checkpath --file --mode 0640 --owner "$command_user" "$logfile" || return 1 + fi +} + +healthcheck() { + [ -x /usr/bin/curl ] || return 0 + /usr/bin/curl -q "${MINIO_ADDRESS:-"localhost:9000"}"/minio/health/ready +} + +_randomize_secrets() { + einfo "Replacing MINIO_ROOT_USER and MINIO_ROOT_PASSWORD in $1 with random values..." + + local user=$(cat /proc/sys/kernel/random/uuid 2>/dev/null || _gen_pass 16) + local pass=$(_gen_pass 32) + + sed -Ei \ + -e 's/^(MINIO_ROOT_USER)="change-me"/\1="'"$user"'"/' \ + -e 's/^(MINIO_ROOT_PASSWORD)="change-me"/\1="'"$pass"'"/' \ + "$1" +} + +_gen_pass() { + head /dev/urandom | tr -dc A-Za-z0-9 | head -c $1 && echo '' +} |