master
commit
cd054f3e4f
@ -0,0 +1,122 @@ |
|||||||
|
#!/usr/bin/bash |
||||||
|
<<! |
||||||
|
editor : NewRain |
||||||
|
date : 2022-08-14 |
||||||
|
for kvm virtual machine |
||||||
|
! |
||||||
|
|
||||||
|
# 脚本控制区域 |
||||||
|
|
||||||
|
MAIN_PATH=$(cd $(dirname $0); cd ..; pwd) |
||||||
|
CONTROL_PATH=$MAIN_PATH/control |
||||||
|
MOUNT_PATH=$MAIN_PATH/mount |
||||||
|
VDISKS_PATH=$MAIN_PATH/vdisks |
||||||
|
TEMPLATE_IMAGE_NAME="template.qcow2" |
||||||
|
TEMPLATE_CONFIG_NAME="template.xml" |
||||||
|
TEMPLATE_NETWORK_NAME="template.conf" |
||||||
|
TEMPLATE_PATH=$MAIN_PATH/template |
||||||
|
CONFIG_PATH=/etc/libvirt/qemu |
||||||
|
|
||||||
|
ERROR_INFO=' |
||||||
|
"Usage: $0 [OPTION]..."\n |
||||||
|
\t -h, --help \t查看帮助"\n |
||||||
|
\t -a, --address \t虚拟机的IP地址"\n |
||||||
|
\t -p, --port \t虚拟机的VNC端口"\n |
||||||
|
\t -n, --name \t虚拟机的名称"\n |
||||||
|
\t -c, --cpus \t选填,虚拟机的CPU数量,默认为1"\n |
||||||
|
\t -m, --memory \t选填,虚拟机的内存大小,单位M,默认为512M"\n |
||||||
|
' |
||||||
|
|
||||||
|
options=$(getopt -l "help,address:,port:,name:,cpus::,memory::" -o "a:p:n:c:m:" -a -- "$@") |
||||||
|
if [ $# -lt 1 ];then |
||||||
|
echo -e $ERROR_INFO |
||||||
|
exit 0 |
||||||
|
fi |
||||||
|
eval set -- "$options" |
||||||
|
|
||||||
|
while true |
||||||
|
do |
||||||
|
case "$1" in |
||||||
|
-h|--help) |
||||||
|
echo -e $ERROR_INFO |
||||||
|
exit |
||||||
|
;; |
||||||
|
-a|--address) |
||||||
|
shift |
||||||
|
ping -c 2 -w 1 $1 &>/dev/null |
||||||
|
if [ $? -eq 0 ]; then |
||||||
|
echo "IP地址已被使用,请更换" |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
KVM_ADDRESS=$1 |
||||||
|
shift |
||||||
|
;; |
||||||
|
-p|--port) |
||||||
|
shift |
||||||
|
ss -tnlp | grep :$1 &>/dev/null |
||||||
|
if [ $? -eq 0 ]; then |
||||||
|
echo "端口已被使用,请更换" |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
KVM_PORT=$1 |
||||||
|
shift |
||||||
|
;; |
||||||
|
-n|--name) |
||||||
|
shift |
||||||
|
virsh list --all | awk '{print $2}' | grep -E "^$1$" &>/dev/null |
||||||
|
if [ $? -eq 0 ]; then |
||||||
|
echo "名称已被使用,请更换" |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
VM_HOSTNAME=$1 |
||||||
|
shift |
||||||
|
;; |
||||||
|
-c|--cpus) |
||||||
|
shift |
||||||
|
cpus=`lscpu | awk '/^CPU\(s\):/{print $2}'` |
||||||
|
vmcpus=${1:-"1"} |
||||||
|
if [ $vmcpus -ge $cpus ]; then |
||||||
|
echo "CPU数量不能大于系统的CPU数量,宿主机cpu数量为:$cpus" |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
KVM_CPUS=$vmcpus |
||||||
|
shift |
||||||
|
;; |
||||||
|
-m|--memory) |
||||||
|
shift |
||||||
|
vmmemory=${1:-"512"} |
||||||
|
memory=`free -m | awk '/^Mem:/{print $2}'` |
||||||
|
if [ $vmmemory -ge $memory ]; then |
||||||
|
echo "内存不能大于系统的内存,宿主机内存为:$memory" |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
KVM_MEMORY=`echo $vmmemory | grep -o -P '\d+'` |
||||||
|
shift |
||||||
|
;; |
||||||
|
--) |
||||||
|
shift |
||||||
|
break |
||||||
|
;; |
||||||
|
*) |
||||||
|
echo "参数错误!" |
||||||
|
exit 1 |
||||||
|
;; |
||||||
|
esac |
||||||
|
done |
||||||
|
qemu-img create -f qcow2 -b ${TEMPLATE_PATH}/${TEMPLATE_IMAGE_NAME} ${VDISKS_PATH}/${VM_HOSTNAME}.qcow2 |
||||||
|
guestmount -a ${VDISKS_PATH}/${VM_HOSTNAME}.qcow2 -m /dev/centos/root ${MOUNT_PATH} |
||||||
|
/usr/bin/cp -f ${TEMPLATE_PATH}/${TEMPLATE_NETWORK_NAME} ${MOUNT_PATH}/etc/sysconfig/network-scripts/ifcfg-eth0 |
||||||
|
sed -ri "s/^IPADDR.*/IPADDR=${KVM_ADDRESS}/" ${MOUNT_PATH}/etc/sysconfig/network-scripts/ifcfg-eth0 |
||||||
|
sed -ri "s/^GATEWAY.*/GATEWAY=${KVM_ADDRESS%.*}.1/" ${MOUNT_PATH}/etc/sysconfig/network-scripts/ifcfg-eth0 |
||||||
|
sed -ri "s/.*/${VM_HOSTNAME}/" ${MOUNT_PATH}/etc/hostname |
||||||
|
guestunmount ${MOUNT_PATH} |
||||||
|
|
||||||
|
cp ${TEMPLATE_PATH}/${TEMPLATE_CONFIG_NAME} ${CONFIG_PATH}/${VM_HOSTNAME}.xml |
||||||
|
sed -ri "s/VM_NAME/${VM_HOSTNAME}/" ${CONFIG_PATH}/${VM_HOSTNAME}.xml |
||||||
|
sed -ri "s/VM_VNC_PORT/${KVM_PORT}/" ${CONFIG_PATH}/${VM_HOSTNAME}.xml |
||||||
|
sed -ri "s#IMAGE_PATH#${VDISKS_PATH}/${VM_HOSTNAME}.qcow2#" ${CONFIG_PATH}/${VM_HOSTNAME}.xml |
||||||
|
sed -ri "s/VM_UUID/`uuidgen`/" ${CONFIG_PATH}/${VM_HOSTNAME}.xml |
||||||
|
sed -ri "s/VM_MEMORY/$[${KVM_MEMORY} * 1024 ]/" ${CONFIG_PATH}/${VM_HOSTNAME}.xml |
||||||
|
sed -ri "s/VM_CPUS/${KVM_CPUS}/" ${CONFIG_PATH}/${VM_HOSTNAME}.xml |
||||||
|
virsh define ${CONFIG_PATH}/${VM_HOSTNAME}.xml |
||||||
|
virsh start ${VM_HOSTNAME} |
@ -0,0 +1,26 @@ |
|||||||
|
#!/usr/bin/bash |
||||||
|
|
||||||
|
# editor : NewRain |
||||||
|
# date : 2020-08-14 |
||||||
|
# for kvm virtual machine template |
||||||
|
|
||||||
|
MAIN_PATH=$(cd $(dirname $0); cd ..; pwd) |
||||||
|
IMAGE_PATH=/tmp/CentOS-7-x86_64-Minimal-2009.iso |
||||||
|
VM_CPUS=1 |
||||||
|
VM_TEMPLATE_NAME=template |
||||||
|
VM_MEMORY=2050 # 不能低于2G,单位为M |
||||||
|
VM_DISK_SIZE=5 # 单位为G |
||||||
|
VM_DISK_PATH=${MAIN_PATH}/template/${VM_TEMPLATE_NAME}.qcow2 |
||||||
|
|
||||||
|
cpus=`lscpu | awk '/^CPU\(s\):/{print $2}'` |
||||||
|
if [ $VM_CPUS -ge $cpus ]; then |
||||||
|
echo "CPU数量不能大于系统的CPU数量,宿主机cpu数量为:$cpus" |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
memory=`free -m | awk '/^Mem:/{print $2}'` |
||||||
|
if [ $VM_MEMORY -ge $memory ]; then |
||||||
|
echo "内存不能大于系统的内存,宿主机内存为:$memory" |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
|
||||||
|
virt-install --connect qemu:///system -n ${VM_TEMPLATE_NAME} -r ${VM_MEMORY} --disk path=${VM_DISK_PATH},size=${VM_DISK_SIZE} --os-type=linux --os-variant=centos7.0 --vcpus=${VM_CPUS} --location=${IMAGE_PATH} -x console=ttyS0 --nographics |
@ -0,0 +1,13 @@ |
|||||||
|
TYPE="Ethernet" |
||||||
|
PROXY_METHOD="none" |
||||||
|
BROWSER_ONLY="no" |
||||||
|
BOOTPROTO="static" |
||||||
|
DEFROUTE="yes" |
||||||
|
IPV4_FAILURE_FATAL="no" |
||||||
|
DEVICE="eth0" |
||||||
|
ONBOOT="yes" |
||||||
|
IPADDR= |
||||||
|
PREFIX=24 |
||||||
|
GATEWAY= |
||||||
|
DNS1=114.114.114.114 |
||||||
|
DNS2=8.8.8.8 |
@ -0,0 +1,106 @@ |
|||||||
|
<!-- |
||||||
|
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE |
||||||
|
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using: |
||||||
|
virsh edit template |
||||||
|
or other application using the libvirt API. |
||||||
|
--> |
||||||
|
|
||||||
|
<domain type='kvm'> |
||||||
|
<name>VM_NAME</name> |
||||||
|
<uuid>VM_UUID</uuid> |
||||||
|
<memory unit='KiB'>VM_MEMORY</memory> |
||||||
|
<currentMemory unit='KiB'>VM_MEMORY</currentMemory> |
||||||
|
<vcpu placement='static'>VM_CPUS</vcpu> |
||||||
|
<os> |
||||||
|
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> |
||||||
|
<boot dev='hd'/> |
||||||
|
</os> |
||||||
|
<features> |
||||||
|
<acpi/> |
||||||
|
<apic/> |
||||||
|
</features> |
||||||
|
<cpu mode='custom' match='exact' check='partial'> |
||||||
|
<model fallback='allow'>Broadwell-noTSX-IBRS</model> |
||||||
|
<feature policy='require' name='md-clear'/> |
||||||
|
<feature policy='require' name='spec-ctrl'/> |
||||||
|
<feature policy='require' name='ssbd'/> |
||||||
|
</cpu> |
||||||
|
<clock offset='utc'> |
||||||
|
<timer name='rtc' tickpolicy='catchup'/> |
||||||
|
<timer name='pit' tickpolicy='delay'/> |
||||||
|
<timer name='hpet' present='no'/> |
||||||
|
</clock> |
||||||
|
<on_poweroff>destroy</on_poweroff> |
||||||
|
<on_reboot>restart</on_reboot> |
||||||
|
<on_crash>destroy</on_crash> |
||||||
|
<pm> |
||||||
|
<suspend-to-mem enabled='no'/> |
||||||
|
<suspend-to-disk enabled='no'/> |
||||||
|
</pm> |
||||||
|
<devices> |
||||||
|
<emulator>/usr/libexec/qemu-kvm</emulator> |
||||||
|
<disk type='file' device='disk'> |
||||||
|
<driver name='qemu' type='qcow2'/> |
||||||
|
<source file='IMAGE_PATH'/> |
||||||
|
<target dev='vda' bus='virtio'/> |
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> |
||||||
|
</disk> |
||||||
|
<disk type='file' device='cdrom'> |
||||||
|
<driver name='qemu' type='raw'/> |
||||||
|
<target dev='hda' bus='ide'/> |
||||||
|
<readonly/> |
||||||
|
<address type='drive' controller='0' bus='0' target='0' unit='0'/> |
||||||
|
</disk> |
||||||
|
<controller type='usb' index='0' model='ich9-ehci1'> |
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/> |
||||||
|
</controller> |
||||||
|
<controller type='usb' index='0' model='ich9-uhci1'> |
||||||
|
<master startport='0'/> |
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/> |
||||||
|
</controller> |
||||||
|
<controller type='usb' index='0' model='ich9-uhci2'> |
||||||
|
<master startport='2'/> |
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/> |
||||||
|
</controller> |
||||||
|
<controller type='usb' index='0' model='ich9-uhci3'> |
||||||
|
<master startport='4'/> |
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/> |
||||||
|
</controller> |
||||||
|
<controller type='pci' index='0' model='pci-root'/> |
||||||
|
<controller type='ide' index='0'> |
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> |
||||||
|
</controller> |
||||||
|
<controller type='virtio-serial' index='0'> |
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> |
||||||
|
</controller> |
||||||
|
<interface type='network'> |
||||||
|
<source network='default'/> |
||||||
|
<model type='virtio'/> |
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> |
||||||
|
</interface> |
||||||
|
<serial type='pty'> |
||||||
|
<target type='isa-serial' port='0'> |
||||||
|
<model name='isa-serial'/> |
||||||
|
</target> |
||||||
|
</serial> |
||||||
|
<console type='pty'> |
||||||
|
<target type='serial' port='0'/> |
||||||
|
</console> |
||||||
|
<channel type='unix'> |
||||||
|
<target type='virtio' name='org.qemu.guest_agent.0'/> |
||||||
|
<address type='virtio-serial' controller='0' bus='0' port='1'/> |
||||||
|
</channel> |
||||||
|
<input type='mouse' bus='ps2'/> |
||||||
|
<input type='keyboard' bus='ps2'/> |
||||||
|
<graphics type='vnc' port='VM_VNC_PORT' autoport='no' listen='0.0.0.0'> |
||||||
|
<listen type='address' address='0.0.0.0'/> |
||||||
|
</graphics> |
||||||
|
<memballoon model='virtio'> |
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> |
||||||
|
</memballoon> |
||||||
|
<rng model='virtio'> |
||||||
|
<backend model='random'>/dev/urandom</backend> |
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> |
||||||
|
</rng> |
||||||
|
</devices> |
||||||
|
</domain> |
Binary file not shown.
Loading…
Reference in new issue