|
|
#!/usr/bin/env bash
|
|
|
#
|
|
|
# Author: Dmitry Razumov <asmeron@ublinux.com>
|
|
|
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
|
|
|
#
|
|
|
# Initial script for Linux UBLinux
|
|
|
# This script are launching before starting init from initrd script
|
|
|
# Current dir allways must be set to root (/)
|
|
|
# All system path must be relative, except initrd dirs
|
|
|
|
|
|
ENABLED=yes
|
|
|
[[ ${ENABLED} == "yes" ]] || exit 0
|
|
|
DEBUGMODE=no
|
|
|
|
|
|
PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin
|
|
|
|
|
|
[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; }
|
|
|
SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0
|
|
|
SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0
|
|
|
debug_mode "$0" "$@"
|
|
|
|
|
|
SYSCONF="${ROOTFS}${SYSCONF}"
|
|
|
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
|
|
|
SOURCE=${SYSCONF}/system; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
|
|
|
SOURCE=${SYSCONF}/server; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
|
|
|
|
|
|
exec_storage_containers_path(){
|
|
|
STORAGE_CONTAINERS_NAME="storage.containers"
|
|
|
STORAGE_CONTAINERS_PATH_DEFAULT="/memory/layer-base/1/${STORAGE_CONTAINERS_NAME}"
|
|
|
#STORAGE_CONTAINERS_PATH_SYSTEM="/var/lib/containers/storage"
|
|
|
FILE_STORAGE_CONTAINERS_CONF="/etc/containers/storage.conf"
|
|
|
|
|
|
if [[ -n ${STORAGE_CONTAINERS_PATH} ]]; then
|
|
|
if [[ ${STORAGE_CONTAINERS_PATH,,} == @(y|yes|enable) ]]; then
|
|
|
[[ -d ${STORAGE_CONTAINERS_PATH_DEFAULT} ]] || install -dm0755 ${STORAGE_CONTAINERS_PATH_DEFAULT}
|
|
|
STORAGE_CONTAINERS_PATH=${STORAGE_CONTAINERS_PATH_DEFAULT}
|
|
|
elif [[ ${STORAGE_CONTAINERS_PATH} =~ ^/memory/|^/mnt/(livemedia|livedata)/|^/media/|^/run/media/ ]]; then
|
|
|
[[ -d ${STORAGE_CONTAINERS_PATH} ]] || install -dm0755 ${STORAGE_CONTAINERS_PATH}
|
|
|
fi
|
|
|
if ! grep -qi "^\s*graphroot = \"${STORAGE_CONTAINERS_PATH}\"" ${ROOTFS}/${FILE_STORAGE_CONTAINERS_CONF}; then
|
|
|
if grep -qi "^\s*graphroot" ${ROOTFS}/${FILE_STORAGE_CONTAINERS_CONF}; then
|
|
|
sed -r "s:^\s*(graphroot).*:\1 = \"${STORAGE_CONTAINERS_PATH}\":g" -i ${ROOTFS}/${FILE_STORAGE_CONTAINERS_CONF}
|
|
|
elif grep -qi "^\s*#graphroot" ${ROOTFS}/${FILE_STORAGE_CONTAINERS_CONF}; then
|
|
|
sed "/^\s*#graphroot\s*/agraphroot = \"${STORAGE_CONTAINERS_PATH}\"" -i ${ROOTFS}/${FILE_STORAGE_CONTAINERS_CONF}
|
|
|
else
|
|
|
sed "/^\s*\[storage\]\s*/agraphroot = \"${STORAGE_CONTAINERS_PATH}\"" -i ${ROOTFS}/${FILE_STORAGE_CONTAINERS_CONF}
|
|
|
fi
|
|
|
fi
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
exec_storage_docker_path(){
|
|
|
STORAGE_DOCKER_NAME="storage.docker"
|
|
|
STORAGE_DOCKER_PATH_DEFAULT="/memory/layer-base/1/${STORAGE_CONTAINERS_NAME}"
|
|
|
#STORAGE_DOCKER_PATH_SYSTEM="/var/lib/docker"
|
|
|
FILE_DOCKER_CONF="/etc/docker/daemon.json"
|
|
|
FILE_DOCKER_MODPROBE="/etc/modprobe.d/ubconfig-docker.conf"
|
|
|
|
|
|
if [[ -n ${STORAGE_DOCKER_PATH} ]]; then
|
|
|
if [[ ${STORAGE_DOCKER_PATH,,} == @(y|yes|enable) ]]; then
|
|
|
[[ -d ${STORAGE_DOCKER_PATH_DEFAULT} ]] || install -dm0755 ${STORAGE_DOCKER_PATH_DEFAULT}
|
|
|
STORAGE_DOCKER_PATH=${STORAGE_DOCKER_PATH_DEFAULT}
|
|
|
elif [[ ${STORAGE_DOCKER_PATH} =~ ^/memory/|^/mnt/(livemedia|livedata)/|^/media/|^/run/media/ ]]; then
|
|
|
[[ -d ${STORAGE_DOCKER_PATH} ]] || install -dm0755 ${STORAGE_DOCKER_PATH}
|
|
|
fi
|
|
|
[[ -d ${FILE_DOCKER_CONF%/*} ]] || install -dm0755 ${FILE_DOCKER_CONF%/*}
|
|
|
if [[ -f ${FILE_DOCKER_CONF} ]]; then
|
|
|
# Переделать, содержимое в переменную и манипуляции в переменной, в конце зпись переменной в файл
|
|
|
if ! grep -qi "^\s+\"data-root\": \"${STORAGE_DOCKER_PATH}\"" ${ROOTFS}/${FILE_DOCKER_CONF}; then
|
|
|
if grep -qi "^\s+\"data-root\":" ${ROOTFS}/${FILE_DOCKER_CONF}; then
|
|
|
sed -r "s|^\s+(\"data-root\":)|\1 \"${STORAGE_DOCKER_PATH}\"|" -i ${ROOTFS}/${FILE_DOCKER_CONF}
|
|
|
elif grep -qi "^\s*#\s*\"data-root\":" ${ROOTFS}/${FILE_DOCKER_CONF}; then
|
|
|
sed "/^\s*#\s*\"data-root\":/a \"data-root\": \"${STORAGE_DOCKER_PATH}\"" -i ${ROOTFS}/${FILE_DOCKER_CONF}
|
|
|
else
|
|
|
sed "/^\s*{\s*/a \"data-root\": \"${STORAGE_DOCKER_PATH}\"," -i ${ROOTFS}/${FILE_DOCKER_CONF}
|
|
|
fi
|
|
|
fi
|
|
|
else
|
|
|
cat << EOF > ${FILE_DOCKER_CONF}
|
|
|
{
|
|
|
"data-root": "${STORAGE_DOCKER_PATH}"
|
|
|
}
|
|
|
EOF
|
|
|
fi
|
|
|
cat << EOF > ${FILE_DOCKER_MODPROBE}
|
|
|
# For Docker overlay2
|
|
|
options overlay
|
|
|
# Disable overlay redirect dir and metacopy
|
|
|
# options overlay metacopy=off redirect_dir=off
|
|
|
EOF
|
|
|
else
|
|
|
[[ -f ${FILE_DOCKER_MODPROBE} ]] && rm -f ${FILE_DOCKER_MODPROBE} &>/dev/null
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
exec_storage_libvirt_path(){
|
|
|
STORAGE_LIBVIRT_POOL_NAME="storage.libvirt"
|
|
|
STORAGE_LIBVIRT_PATH_DEFAULT="/memory/layer-base/1/${STORAGE_LIBVIRT_POOL_NAME}"
|
|
|
if [[ -n ${STORAGE_LIBVIRT_PATH} ]]; then
|
|
|
if [[ ${STORAGE_LIBVIRT_PATH,,} == @(y|yes|enable) ]]; then
|
|
|
STORAGE_LIBVIRT_PATH=${STORAGE_LIBVIRT_PATH_DEFAULT}
|
|
|
[[ -d ${STORAGE_LIBVIRT_PATH} ]] || install -dm0755 ${STORAGE_LIBVIRT_PATH}
|
|
|
elif [[ ${STORAGE_LIBVIRT_PATH} =~ ^/memory/|^/mnt/(livemedia|livedata)/ ]]; then
|
|
|
[[ -d ${STORAGE_LIBVIRT_PATH} ]] || install -dm0755 ${STORAGE_LIBVIRT_PATH}
|
|
|
fi
|
|
|
cat <<EOF > "${ROOTFS}/etc/libvirt/storage/${STORAGE_LIBVIRT_POOL_NAME}.xml"
|
|
|
<!--
|
|
|
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
|
|
|
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
|
|
|
virsh pool-edit ${STORAGE_LIBVIRT_POOL_NAME}
|
|
|
or other application using the libvirt API.
|
|
|
-->
|
|
|
|
|
|
<pool type='dir'>
|
|
|
<name>${STORAGE_LIBVIRT_POOL_NAME}</name>
|
|
|
<uuid>22e1f043-1fcb-4017-8afd-d44ebea9c8e4</uuid>
|
|
|
<capacity unit='bytes'>0</capacity>
|
|
|
<allocation unit='bytes'>0</allocation>
|
|
|
<available unit='bytes'>0</available>
|
|
|
<source>
|
|
|
</source>
|
|
|
<target>
|
|
|
<path>${STORAGE_LIBVIRT_PATH}</path>
|
|
|
</target>
|
|
|
</pool>
|
|
|
EOF
|
|
|
fi
|
|
|
[[ -d ${ROOTFS}/etc/libvirt/storage/autostart ]] || install -dm0755 ${ROOTFS}/etc/libvirt/storage/autostart
|
|
|
ln -sf /etc/libvirt/storage/${STORAGE_LIBVIRT_POOL_NAME}.xml ${ROOTFS}/etc/libvirt/storage/autostart/${STORAGE_LIBVIRT_POOL_NAME}.xml
|
|
|
}
|
|
|
|
|
|
################
|
|
|
##### MAIN #####
|
|
|
################
|
|
|
|
|
|
# Если файл подключен как ресурс с функциями, то выйти
|
|
|
return 0 2>/dev/null && return 0
|
|
|
if [[ -z $@ ]]; then
|
|
|
while read -r FUNCTION; do
|
|
|
$"${FUNCTION##* }"
|
|
|
done < <(declare -F | grep "declare -f exec_")
|
|
|
else
|
|
|
FUNCTION=
|
|
|
while [[ $# -gt 0 ]]; do
|
|
|
[[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; }
|
|
|
shift
|
|
|
done
|
|
|
eval ${FUNCTION#*; }
|
|
|
fi
|