diff --git a/create-lx-container.sh b/create-lx-container.sh index daaa73b..33fee71 100755 --- a/create-lx-container.sh +++ b/create-lx-container.sh @@ -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 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