From 2ef9f9547729770373f5243308839df985b2d06e Mon Sep 17 00:00:00 2001 From: tschettervictor <85497460+tschettervictor@users.noreply.github.com> Date: Mon, 3 Mar 2025 14:58:51 -0700 Subject: [PATCH] clone: Allow to clone with VLANs --- usr/local/share/bastille/clone.sh | 44 ++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/usr/local/share/bastille/clone.sh b/usr/local/share/bastille/clone.sh index 617a3994..7466a786 100644 --- a/usr/local/share/bastille/clone.sh +++ b/usr/local/share/bastille/clone.sh @@ -230,15 +230,28 @@ update_jailconf_vnet() { sed -i '' "/${_new_host_epair}/ s|vnet host interface for Bastille jail ${TARGET}|vnet host interface for Bastille jail ${NEWNAME}|g" "${_jail_conf}" # Update /etc/rc.conf local _jail_vnet="$(grep ${_target_jail_epair} "${_rc_conf}" | grep -Eo -m 1 "vnet[0-9]+")" + local _jail_vnet_vlan="$(grep "vlans_${_jail_vnet}" "${_rc_conf}" | sed 's/.*=//g')" sed -i '' "s|${_target_jail_epair}_name|${_new_jail_epair}_name|" "${_rc_conf}" if grep "vnet0" "${_rc_conf}" | grep -q "${_new_jail_epair}_name"; then - if [ "${IP}" = "0.0.0.0" ]; then - sysrc -f "${_rc_conf}" ifconfig_vnet0="SYNCDHCP" + if [ -n "${_jail_vnet_vlan}" ]; then + if [ "${IP}" = "0.0.0.0" ] || [ "${IP}" = "DHCP" ]; then + sysrc -f "${_rc_conf}" ifconfig_vnet0_${_jail_vnet_vlan}="SYNCDHCP" + else + sysrc -f "${_rc_conf}" ifconfig_vnet0_${_jail_vnet_vlan}="inet ${IP}" + fi else - sysrc -f "${_rc_conf}" ifconfig_vnet0="inet ${IP}" + if [ "${IP}" = "0.0.0.0" ] || [ "${IP}" = "DHCP" ]; then + sysrc -f "${_rc_conf}" ifconfig_vnet0="SYNCDHCP" + else + sysrc -f "${_rc_conf}" ifconfig_vnet0="inet ${IP}" + fi fi else - sysrc -f "${_rc_conf}" ifconfig_${_jail_vnet}="SYNCDHCP" + if [ -n "${_jail_vnet_vlan}" ]; then + sysrc -f "${_rc_conf}" ifconfig_${_jail_vnet}_${_jail_vnet_vlan}="SYNCDHCP" + else + sysrc -f "${_rc_conf}" ifconfig_${_jail_vnet}="SYNCDHCP" + fi fi break fi @@ -249,7 +262,8 @@ update_jailconf_vnet() { if ! grep -oq "bastille${_num}" ${bastille_jailsdir}/*/jail.conf; then # Update jail.conf epair name local uniq_epair="bastille${_num}" - local _if_vnet="$(grep ${_if} "${_rc_conf}" | grep -Eo -m 1 "vnet[0-9]+")" + local _jail_vnet="$(grep ${_if} "${_rc_conf}" | grep -Eo -m 1 "vnet[0-9]+")" + local _jail_vnet_vlan="$(grep "vlans_${_jail_vnet}" "${_rc_conf}" | sed 's/.*=//g')" sed -i '' "s|${_if}|${uniq_epair}|g" "${_jail_conf}" # If jail had a static MAC, generate one for clone if grep ether ${_jail_conf} | grep -qoc ${uniq_epair}; then @@ -262,13 +276,25 @@ update_jailconf_vnet() { # Update /etc/rc.conf sed -i '' "s|ifconfig_e0b_${_if}_name|ifconfig_e0b_${uniq_epair}_name|" "${_rc_conf}" if grep "vnet0" "${_rc_conf}" | grep -q ${uniq_epair}; then - if [ "${IP}" = "0.0.0.0" ]; then - sysrc -f "${_rc_conf}" ifconfig_vnet0="SYNCDHCP" + if [ -n "${_jail_vnet_vlan}" ]; then + if [ "${IP}" = "0.0.0.0" ] || [ "${IP}" = "DHCP" ]; then + sysrc -f "${_rc_conf}" ifconfig_vnet0_${_jail_vnet_vlan}="SYNCDHCP" + else + sysrc -f "${_rc_conf}" ifconfig_vnet0_${_jail_vnet_vlan}="inet ${IP}" + fi else - sysrc -f "${_rc_conf}" ifconfig_vnet0=" inet ${IP} " + if [ "${IP}" = "0.0.0.0" ] || [ "${IP}" = "DHCP" ]; then + sysrc -f "${_rc_conf}" ifconfig_vnet0="SYNCDHCP" + else + sysrc -f "${_rc_conf}" ifconfig_vnet0="inet ${IP}" + fi fi else - sysrc -f "${_rc_conf}" ifconfig_${_if_vnet}="SYNCDHCP" + if [ -n "${_jail_vnet_vlan}" ]; then + sysrc -f "${_rc_conf}" ifconfig_${_jail_vnet}_${_jail_vnet_vlan}="SYNCDHCP" + else + sysrc -f "${_rc_conf}" ifconfig_${_jail_vnet}="SYNCDHCP" + fi fi break fi