A collection of shell scripts to make my live easier.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.3 KiB

#!/bin/sh
function lxc-snapshot()
{
local BTRFS=/sbin/btrfs
local CHMOD=/bin/chmod
local CHOWN=/bin/chown
local CUT=/usr/bin/cut
local ECHO=/bin/echo
local GREP=/bin/grep
local ID=/usr/bin/id
local LXC_USERNSEXEC=/usr/bin/lxc-usernsexec
local MKDIR=/bin/mkdir
local SED=/bin/sed
local TEST=/usr/bin/test
local SOURCE=$1
local TARGET=$2
local IP=$3
local SUBUIDS=$(${GREP} ${USER} /etc/subuid)
local SUBGIDS=$(${GREP} ${USER} /etc/subgid)
local SUID_START=$(${ECHO} "${SUBUIDS}" | ${CUT} -d: -f2)
local SGID_START=$(${ECHO} "${SUBGIDS}" | ${CUT} -d: -f2)
local HUID=$(${ID} -u)
local HGID=$(${ID} -g)
${MKDIR} "${HOME}/.local/share/lxc/${TARGET}"
${CHMOD} 770 "${HOME}/.local/share/lxc/${TARGET}"
${SED} 's/'${SOURCE}'/'${TARGET}'/;/lxc.network.ipv4 *=/s/= *.*/= '${IP//\//\\/}'/' \
"${HOME}/.local/share/lxc/${SOURCE}/config" >"${HOME}/.local/share/lxc/${TARGET}/config"
${LXC_USERNSEXEC} -m 'u:0:'${SUID_START}':1' -m 'g:0:'${SGID_START}':1' \
-m 'u:'${HUID}':'${HUID}':1' -m 'g:'${HGID}':'${HGID}':1' -- \
${CHOWN} 0 "${HOME}/.local/share/lxc/${TARGET}"
${LXC_USERNSEXEC} -m 'u:0:'${SUBUIDS#*:} -m 'g:0:'${SUBGIDS#*:} -- \
${BTRFS} subvolume snapshot \
"${HOME}/.local/share/lxc/${SOURCE}/rootfs" \
"${HOME}/.local/share/lxc/${TARGET}/rootfs"
}
export -f lxc-snapshot
# vim: set ft=sh ts=4 sw=4: