Created
August 2, 2019 16:46
-
-
Save TNick/3d154707c24a332dab32d98aa160655c to your computer and use it in GitHub Desktop.
Revisions
-
TNick created this gist
Aug 2, 2019 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,167 @@ #!/bin/bash # Inspired by https://github.com/whiskerz007/proxmox_tuya-convert_container/blob/master/create_container.sh # Arguments # # 1 - LXC_STORAGE (local-lvm by default) # 2 - DISK_SIZE (1G by default) can be a number and must be followed # by either a G or a M # 3 - TEMPLATE (local:vztmpl/openwrt-18.06-openwrt_18.06.4_amd64.tar.gz by default) # 4 - CORES (1 by default) # 5 - SWAP (512 by default) # 6 - MEMORY (512 by default) # 7 - PASSWORD (123456789 by default) # 8 - HOSTNAME (openwrt by default) # 9 - OSTYPE (unmanaged by default) # 10 - POOL (Others by default) # 11 - ONBOOT (1 by default) 1 to enable, 0 to disble # 12 - NET_NAME (eth0 by default) the name of the interface # 13 - BRIDGE (vmbr0 by default) the name of the bridge # 14 - IP (dhcp by default) the IP to assogn on NET_NAME # 15 - SIMULATE (0 by default) only print commands, do not execute # 16 - DEBUG (0 by default) print debug info # Setup script set -o pipefail shopt -s expand_aliases alias die='EXIT=$? LINE=$LINENO error_exit' trap die ERR function error_exit() { REASON=$1 MSG="\e[91mERROR: \e[93m$EXIT@" if [ -z "$REASON" ]; then MSG="$MSG$LINE:" REASON="A failure has occured." else MSG="$MSG`echo $(( $LINE - 1 ))`:" fi echo -e "$MSG \e[97m$REASON\e[39m\e[49m" exit $EXIT } function debug() { MSG=$1 if [ "$DEBUG" == "1" ] ; then echo "$MSG" fi } # Verify valid storage location; use local-lvm by default. LXC_STORAGE=${1:-local-lvm} SIMULATE=${15:-0} DEBUG=${16:-1} pvesm list $LXC_STORAGE >&/dev/null || die "'$LXC_STORAGE' is not a valid storage ID.\n\n\n" pvesm status -content images -storage $LXC_STORAGE >&/dev/null || die "'$LXC_STORAGE' does not allow 'Disk image' to be stored." debug "LXC_STORAGE = ${LXC_STORAGE}" # Get storage type STORAGE_TYPE=`pvesm status -storage $LXC_STORAGE | awk 'NR>1 {print $2}'` debug "STORAGE_TYPE = ${STORAGE_TYPE}" # Get the next guest VM/LXC ID CTID=$(cat<<EOF | python3 import json with open('/etc/pve/.vmlist') as vmlist: vmids = json.load(vmlist) if 'ids' not in vmids: print(100) else: for i in range(100, 10000): if not str(i) in vmids['ids']: print(i) break # last_vm = sorted(vmids['ids'].keys())[-1:][0] # print(int(last_vm)+1) EOF ) debug "CTID = ${CTID}" # For dir add special extensions. if [ "$STORAGE_TYPE" = "dir" ]; then DISK_EXT=".raw" DISK_REF="$CTID/" fi debug "DISK_EXT = ${DISK_EXT}" debug "DISK_REF = ${DISK_REF}" # Compute storage info. DISK=vm-${CTID}-disk-0${DISK_EXT} ROOTFS=${LXC_STORAGE}:${DISK_REF}${DISK} DISK_PATH=`pvesm path $ROOTFS` DISK_SIZE=${2:-1G} debug "DISK = ${DISK}" debug "ROOTFS = ${ROOTFS}" debug "DISK_PATH = ${DISK_PATH}" debug "DISK_SIZE = ${DISK_SIZE}" # Allocate the disk and format it. PVESM_COMMAND="pvesm alloc $LXC_STORAGE $CTID $DISK $DISK_SIZE" MKEFS_COMMAND="mke2fs $DISK_PATH" if [ $SIMULATE == "1" ] ; then echo "$PVESM_COMMAND" echo "$MKEFS_COMMAND" else $PVESM_COMMAND $MKEFS_COMMAND fi # Create the container TEMPLATE=${3:-local:vztmpl/openwrt-18.06-openwrt_18.06.4_amd64.tar.gz} CORES=${4:-1} SWAP=${5:-512} MEMORY=${6:-512} PASSWORD=${7:-123456789} HOSTNAME=${8:-openwrt} OSTYPE=${9:-unmanaged} POOL=${10:-Others} ONBOOT=${11:-1} NET_NAME=${12:-eth0} BRIDGE=${13:-vmbr0} IP=${14:-dhcp} debug "TEMPLATE = ${TEMPLATE}" debug "CORES = ${CORES}" debug "SWAP = $SWAP{}" debug "MEMORY = ${MEMORY}" debug "PASSWORD = ${PASSWORD}" debug "HOSTNAME = ${HOSTNAME}" debug "OSTYPE = ${OSTYPE}" debug "POOL = ${POOL}" debug "ONBOOT = ${ONBOOT}" debug "NET_NAME = ${NET_NAME}" debug "BRIDGE = ${BRIDGE}" debug "IP = ${IP}" PCT_COMMAND="pct create $CTID $TEMPLATE \ -arch amd64 -cores $CORES \ -swap $SWAP -memory $MEMORY -password "$PASSWORD" -hostname $HOSTNAME \ -ostype $OSTYPE -pool $POOL \ -onboot $ONBOOT \ -net0 name=$NET_NAME,bridge=$BRIDGE,ip=$IP,type=veth \ -rootfs $ROOTFS -storage $LXC_STORAGE" if [ $SIMULATE == "1" ] ; then echo "$PCT_COMMAND" else $PCT_COMMAND cat <<EOF >> /etc/pve/lxc/${CTID}.conf lxc.include: /usr/share/lxc/config/openwrt.common.conf lxc.include: /usr/share/lxc/config/common.conf lxc.cap.drop: sys_admin lxc.mount.entry: tmp tmp tmpfs rw,nodev,relatime,mode=1777 0 0 EOF echo -e "\n\n\n" \ "******************************\n" \ "* Successfully Create New CT *\n" \ "* CT ID is $CTID *\n" \ "******************************\n\n" fi