create-lx-container.sh: add support vor LXC Version 3.

This commit is contained in:
Christoph 2019-04-18 19:52:22 +02:00
parent 3eddc9adb6
commit 4a7ebb6a19

View File

@ -142,6 +142,35 @@ netmask2cidr() {
echo "${len}"
}
detect_os_1 () {
if $(which lsb_release > /dev/null 2>&1) ; then
os_dist="$(lsb_release -i | awk '{print tolower($3)}')"
os_version="$(lsb_release -r | awk '{print tolower($2)}')"
os_codename="$(lsb_release -c | awk '{print tolower($2)}')"
if [[ "$os_dist" = "debian" ]]; then
if $(echo "$os_version" | grep -q '\.') ; then
os_version=$(echo "$os_version" | cut --delimiter='.' -f1)
fi
fi
elif [[ -e "/etc/os-release" ]]; then
. /etc/os-release
os_dist=$ID
os_version=${VERSION_ID}
fi
# remove whitespace from os_dist and os_version
os_dist="${os_dist// /}"
os_version="${os_version// /}"
}
# -------------
# - Running in a terminal?
@ -166,9 +195,10 @@ DEFAULT_IPV4_NETMASK_1="255.255.255.0"
DEFAULT_IPV6_PREFIX=64
DEFAULT_CODENAME="$(lsb_release -c | awk '{print tolower($2)}')"
if [[ -f "$conf_file" ]]; then
source "$conf_file"
fatal "Configuration file '$(basename ${conf_file})' not found!"
else
warn "No Configuration file '$(basename ${conf_file})'. Using default values.."
fi
@ -278,16 +308,19 @@ echo ""
echo " # Insert the Code name of the Linux Distribution."
echo " #"
echo " # Example for debian: 'stretch'"
echo " # Type <return> to accept the default '$DEFAULT_CODENAME'."
echo ""
echononl "\033[1mCode name:\033[m "
echononl "\033[1mCode name [${DEFAULT_CODENAME}]:\033[m "
read LXC_RELEASE
if [[ -z "$(trim $LXC_RELEASE)" ]] ; then
LXC_RELEASE="$DEFAULT_CODENAME"
fi
while [[ -z "$(trim $LXC_RELEASE)" ]]; do
warn "Parameter is needed. Try again.."
echononl "\033[1mCode name:\033[m "
read LXC_RELEASE
done
#while [[ -z "$(trim $LXC_RELEASE)" ]]; do
# warn "Parameter is needed. Try again.."
# echononl "\033[1mCode name:\033[m "
# read LXC_RELEASE
#done
echo ""
echo -e "\033[32m--\033[m"
@ -541,6 +574,11 @@ while [[ -z "$(trim $IPV4_NETMASK_1)" ]]; do
done
HOSTNAME="$(echo "$FQ_HOSTNAME" | cut -f1 -d'.')"
# - Determin LXC Version
# -
LXC_VERSION="$(lxc-info --version)"
declare -i LXC_MAJOR_VERSION=$(echo $LXC_VERSION | cut -d '.' -f1)
echo ""
echo ""
@ -548,6 +586,9 @@ echo -e " \033[32m---\033[m"
echo -e " \033[32m\033[1mParameter Summary - create new LX Container \033[m\033[1m$LXC_NAME\033[m"
echo -e " \033[32m---\033[m"
echo ""
echo " LXC Version..............................: $LXC_VERSION"
echo " LXC Major Version........................: $LXC_MAJOR_VERSION"
echo ""
echo " Base directory LX Containers.............: $LXC_ROOT_DIR"
echo " Root directory new LX Container..........: $LXC_CONTAINER_DIR"
echo ""
@ -556,16 +597,18 @@ echo " Linux distribution.......................: $LXC_DIST"
echo " Code name (or release number)............: $LXC_RELEASE"
echo ""
echo " MAC Address (first) network device.......: $MAC_ADDRESS_1"
echo ""
echo " IPv4 Address (first).....................: $IPV4_ADDRESS_1"
echo " IPv4 Gateway Address (first).............: $IPV4_GATEWAY_1"
echo " Netmask first IPv4 Address...............: $IPV4_NETMASK_1"
echo " CIDR (IPv4 Prefix) of netmask............: $IPV4_PREFIX_1"
echo ""
if [[ -n "$IPV6_ADDRESS_1" ]] ; then
echo " IPv6 Address (first).....................: $IPV6_ADDRESS_1"
echo " IPv6 Gateway Address (first).............: $IPV6_GATEWAY_1"
else
echo -e " IPv6 Address (first).....................: - \033[33mNot set\033[m - "
fi
echo " Netmask first IPv4 Address...............: $IPV4_NETMASK_1"
echo " CIDR (IPv4 Prefix) of netmask............: $IPV4_PREFIX_1"
if $_second_ipv4 ; then
echo ""
echo " MAC Address (second) network device......: $MAC_ADDRESS_2"
@ -861,11 +904,12 @@ fi
# - Create the Container configuration file
# -
msg="Create Container Configuration '${LXC_CONTAINER_DIR}/config' .."
msg="Create Container Configuration '${LXC_CONTAINER_DIR}/config (LXC Version $LXC_VERSION)' .."
echo -en "\033[1G \033[1;30m[ ... ] \033[32m$msg\033[m"
_failed=false
cat << EOF > ${LXC_CONTAINER_DIR}/config 2> $err_msg
if [[ $LXC_MAJOR_VERSION -lt 3 ]]; then
cat << EOF > ${LXC_CONTAINER_DIR}/config 2> $err_msg
lxc.rootfs = ${LXC_CONTAINER_DIR}/rootfs
# Common configuration
@ -893,25 +937,25 @@ lxc.network.ipv4 = ${IPV4_ADDRESS_1}/$IPV4_PREFIX_1
lxc.network.ipv4.gateway = ${IPV4_GATEWAY_1}
# IPv6
EOF
if [[ -n "${IPV6_ADDRESS_1}" ]] ; then
cat << EOF >> ${LXC_CONTAINER_DIR}/config 2>> $err_msg
if [[ -n "${IPV6_ADDRESS_1}" ]] ; then
cat << EOF >> ${LXC_CONTAINER_DIR}/config 2>> $err_msg
lxc.network.ipv6 = ${IPV6_ADDRESS_1}/$IPV6_PREFIX_1
lxc.network.ipv6.gateway = $IPV6_GATEWAY_1
EOF
else
cat << EOF >> ${LXC_CONTAINER_DIR}/config 2>> $err_msg
else
cat << EOF >> ${LXC_CONTAINER_DIR}/config 2>> $err_msg
#lxc.network.ipv6 = ${IPV6_ADDRESS_1}/$IPV6_PREFIX_1
#lxc.network.ipv6.gateway = $IPV6_GATEWAY_1
EOF
fi
fi
if [[ $? -ne 0 ]]; then
_failed=true
fi
if [[ $? -ne 0 ]]; then
_failed=true
fi
if [[ -n "$IPV4_ADDRESS_2" ]]; then
cat << EOF >> ${LXC_CONTAINER_DIR}/config 2>> $err_msg
if [[ -n "$IPV4_ADDRESS_2" ]]; then
cat << EOF >> ${LXC_CONTAINER_DIR}/config 2>> $err_msg
### Device 2
lxc.network.type = veth
lxc.network.flags = up
@ -922,20 +966,103 @@ lxc.network.hwaddr = $MAC_ADDRESS_2
lxc.network.ipv4 = ${IPV4_ADDRESS_2}/$IPV4_PREFIX_2
## IPv6
EOF
if [[ -n "$IPV4_ADDRESS_2" ]]; then
cat << EOF >> ${LXC_CONTAINER_DIR}/config 2>> $err_msg
if [[ -n "$IPV6_ADDRESS_2" ]]; then
cat << EOF >> ${LXC_CONTAINER_DIR}/config 2>> $err_msg
lxc.network.ipv6 = ${IPV6_ADDRESS_2}/$IPV6_PREFIX_2
EOF
else
cat << EOF >> ${LXC_CONTAINER_DIR}/config 2>> $err_msg
#lxc.network.ipv6 = ${IPV6_ADDRESS_2}/$IPV6_PREFIX_2
EOF
fi
if [[ $? -ne 0 ]]; then
_failed=true
fi
fi
else
cat << EOF > ${LXC_CONTAINER_DIR}/config 2> $err_msg
lxc.rootfs.path = ${LXC_CONTAINER_DIR}/rootfs
# Common configuration
lxc.include = /usr/share/lxc/config/${LXC_DIST}.common.conf
# Container specific configuration
lxc.mount.fstab = ${LXC_CONTAINER_DIR}/fstab
lxc.uts.name = $LXC_NAME
lxc.arch = amd64
lxc.autodev = 1
# Network configuration
### Device 1
lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.link = br0
lxc.net.0.name = eth0
lxc.net.0.hwaddr = $MAC_ADDRESS_1
# IPv4
lxc.net.0.ipv4.address = ${IPV4_ADDRESS_1}/$IPV4_PREFIX_1
lxc.net.0.ipv4.gateway = ${IPV4_GATEWAY_1}
# IPv6
EOF
if [[ -n "${IPV6_ADDRESS_1}" ]] ; then
cat << EOF >> ${LXC_CONTAINER_DIR}/config 2>> $err_msg
lxc.net.0.ipv6.address = ${IPV6_ADDRESS_1}/$IPV6_PREFIX_1
lxc.net.0.ipv6.gateway = $IPV6_GATEWAY_1
EOF
else
cat << EOF >> ${LXC_CONTAINER_DIR}/config 2>> $err_msg
lxc.network.ipv6 = ${IPV6_ADDRESS_2}/$IPV6_PREFIX_2
#lxc.net.0.ipv6.address = ${IPV6_ADDRESS_1}/$IPV6_PREFIX_1
#lxc.net.0.ipv6.gateway = $IPV6_GATEWAY_1
EOF
fi
if [[ $? -ne 0 ]]; then
_failed=true
fi
if [[ $? -ne 0 ]]; then
_failed=true
fi
if [[ -n "$IPV4_ADDRESS_2" ]]; then
cat << EOF >> ${LXC_CONTAINER_DIR}/config 2>> $err_msg
### Device 2
lxc.net.1.type = veth
lxc.net.1.flags = up
lxc.net.1.link = br0
lxc.net.1.name = eth1
lxc.net.1.hwaddr = $MAC_ADDRESS_2
## IPv4
lxc.net.1.ipv4.address = ${IPV4_ADDRESS_2}/$IPV4_PREFIX_2
## IPv6
EOF
if [[ -n "$IPV6_ADDRESS_2" ]]; then
cat << EOF >> ${LXC_CONTAINER_DIR}/config 2>> $err_msg
lxc.net.1.ipv6.address = ${IPV6_ADDRESS_2}/$IPV6_PREFIX_2
EOF
else
cat << EOF >> ${LXC_CONTAINER_DIR}/config 2>> $err_msg
#lxc.net.1.ipv6.address = ${IPV6_ADDRESS_2}/$IPV6_PREFIX_2
EOF
fi
if [[ $? -ne 0 ]]; then
_failed=true
fi
fi
fi
cat << EOF >> ${LXC_CONTAINER_DIR}/config 2>> $err_msg
@ -950,6 +1077,10 @@ cat << EOF >> ${LXC_CONTAINER_DIR}/config 2>> $err_msg
lxc.start.auto = 1
lxc.start.delay = 5
lxc.start.order = 100
# Limt memory to 1GB less than full Memory of the server
# -
lxc.cgroup.memory.limit_in_bytes = $(( $(free -b | grep -oP '\d+' | head -n 1)-1000000000 ))
EOF
if [[ $? -ne 0 ]]; then
_failed=true