[root@gunwoo 0729]# mktemp test.XXX
test.KWp
[root@gunwoo 0729]# ls
test.KWp
-> 임시 파일을 생성함
[root@gunwoo 0729]# mktemp -t test.XXX
/tmp/test.5u7
-> -t: /tmp 안에 임시 파일을 생성함
[root@gunwoo 0729]# testfile1=$(mktemp -t test.XXX)
[root@gunwoo 0729]# echo $testfile1
/tmp/test.9Zx
-> 임시 변수로 활용할 수 있음
[root@gunwoo 0729]# testfile1=$(mktemp -t test.XXX)
[root@gunwoo 0729]# dialog --title "vm name" --inputbox "type vm name" 0 0 2> $testfile1
-> centos1이라고 입력
[root@gunwoo 0729]# cat $testfile1
centos1
-> 변수에 입력값이 저장되었음
[root@gunwoo 0729]# dialog --menu "select one" 10 20 4 \
> 1 "test1" 2 "test2" 3 "test3" \
> 2> result.txt
-> 2번 선택
[root@gunwoo 0729]# cat result.txt
2
-> 파일에 입력 값이 저장되었음
여러 개 중에 한 개를 선택
[root@gunwoo 0729]# dialog --title "Linux Dist." \
> --radiolist "select one" 15 50 4 \
> "CentOS7" "Ceersion 7.0" ON \
> "Ubuntu" "Ubuntu Linux Version 18.04" OFF \
> "RHEL7" "Red Hat Enterprise Linux version 7.0" OFF \
> 2> result.txt
-> Ubuntu 선택
[root@gunwoo 0729]# cat result.txt
Ubuntu
-> 파일에 입력 값이 저장되었음
예)
가상머신 만들기를 한다면? while 내에서 메뉴를 띄운다.
spec을 선택하세요
[*] m1.small 1 vcpu, 1GB RAM
[ ] m1.medium 2 vcpus, 2GB RAM
case $spec in
m1.small)
vcpu=1
ram=1024
dialog --msgbox "CPUL $vcpu 개, RAM: $ram MB를 선택하셨습니다"
#!/bin/bash
temp=$(mktemp -t test.XXX)
ans=$(mktemp -t test.XXX )
diskspace() {
df -h > $temp
dialog --textbox $temp 20 60
}
whoson() {
who > $temp
dialog --textbox $temp 20 50
}
memusage() {
cat /proc/meminfo > $temp
dialog --textbox $temp 20 50
}
vmlist() {
virsh list --all > $temp
dialog --textbox $temp 20 50
}
while [ 1 ]
do
dialog --menu "시스템 관리 메뉴" 20 30 7 \
1 "디스크 공간 확인" \
2 "로그인 사용자 확인" \
3 " 메모리 정보 확인" \
4 "가상머신 리스트 확인" \
0 "종료하기" \
2> $ans
# 메뉴에서 esc 선택 시 프로그램 종료
if [ $? -eq 1 ]
then
break
fi
# 메뉴 선택과 OK 선택 시에는 결과에 따라 함수가 실행되도록 설정
select=$(cat $ans)
case $select in
1)
diskspace ;;
2)
whoson ;;
3)
memusage ;;
4)
vmlist ;;
0)
break ;;
*)
dialog --msgbox "잘못된 선택입니다" ;;
esac
done
rm -rf $temp 2> /dev/null
rm -rf $ans 2> /dev/null
[root@gunwoo 0729]# systemctl stop httpd
[root@gunwoo 0729]# systemctl disable httpd
[root@gunwoo 0729]# systemctl start wokd
[root@gunwoo 0729]# systemctl enable wokd
[root@gunwoo 0729]# systemctl stop libvirtd
[root@gunwoo 0729]# systemctl start libvirtd
[root@gunwoo 0729]# systemctl status libvirtd | grep Active
Active: active (running) since Fri 2022-07-29 10:49:21 KST; 27s ago
[root@gunwoo 0729]# getenforce
Disabled
만약 Enabled라면
[root@gunwoo 0729]# setenforce 0
setenforce: SELinux is disabled
[가상머신 생성 메뉴]
step 1) os 이미지 선택
step 2) vm 이름 입력
step 3) flavor 선택(cpu/memory 세트)
step 4) 인스턴스 설치
#!/bin/bash
# 변수 선언
temp=$(mktemp -t test.XXX) # 함수내에서 결과를 파일로 저장하기위해
ans=$(mktemp -t test.XXX) # 메뉴에서 선택한 번호담기위한 변수
image=$(mktemp -t test.XXX) # 템플릿 이미지를 담기위한 변수
vmname=$(mktemp -t test.XXX) # 가상머신 이름 담기위한 변수
flavor=$(mktemp -t test.XXX) # CPU/RAM 세트인 flavor 정보 담기위한 변수
# 함수 선언
# 가상머신 리스트 출력 함수
vmlist(){
virsh list --all > $temp
dialog --textbox $temp 20 50
}
# 가상 네트워크 리스트 출력 함수
vmnetlist(){
virsh net-list --all > $temp
dialog --textbox $temp 20 50
}
# 가상머신 생성 함수
vmcreation(){
dialog --title "이미지 선택하기" \
--radiolist "베이스 이미지를 아래에서 선택하세요" 15 50 5 \
"CentOS7" "센토스 7 베이스 이미지" ON \
"Ubuntu" "우분투 20.04 베이스 이미지" OFF \
"RHEL" "레드햇 엔터프라이즈 리눅스 8.0" OFF \
2> $image
vmimage=$(cat $image)
case $vmimage in
CentOS7)
os=/cloud/CentOS7-Base.qcow2 ;;
Ubuntu)
os=/cloud/Ubuntu20-Base.qcow2 ;;
RHEL)
os=/cloud/RHEL-Base.qcow2 ;;
*)
dialog --msgbox "잘못된 선택 입니다" 10 40 ;;
esac
# OS 선택이 정상처리라면 인스턴스 이름 입력하기로 이동
if [ $? -eq 0 ]
then
dialog --title "인스턴스 이름" --inputbox "인스턴스의 이름을 입력하세요 : " 10 50 2> $vmname
# 선택된 이름 이용하여 Base 이미지로 부터 새로운 볼륨 생성
name=$(cat $vmname)
cp $os /cloud/${name}.qcow2
# 종료 코드가 0(OK) 인경우 flavor 선택으로 이동하기
if [ $? -eq 0 ]
then
dialog --title "스펙 선택" \
--radiolist "필요한 자원을 선택하세요" 15 50 5 \
"m1.small" "가상 CPU 1개, 메모리 1GB" ON \
"m1.medium" "가상 CPU 2개, 메모리 2GB" OFF \
"m1.large" "가상 CPU 4개, 메모리 8GB" OFF \
2> $flavor
# flavor 에 따라 변수에 cpu 개수,메모리 사이즈 입력
spec=$(cat $flavor)
case $spec in
m1.small)
vcpus="1"
ram="1024"
dialog --msgbox "CPU: ${vcpus}core(s), RAM: ${ram}MB" 10 50 ;;
m1.medium)
vcpus="2"
ram="2048"
dialog --msgbox "CPU: ${vcpus}core(s), RAM: ${ram}MB" 10 50 ;;
m1.large)
vcpus="4"
ram="8192"
dialog --msgbox "CPU: ${vcpus}core(s), RAM: ${ram}MB" 10 50 ;;
esac
# 종료코드가 0(OK) 인 경우 설치 진행
if [ $? -eq 0 ]
then
virt-install --name $name \
--vcpus $vcpus \
--ram $ram \
--disk /cloud/${name}.qcow2 \
--import \
--network network:default,model=virtio \
--os-type linux \
--os-variant rhel7.0 \
--noautoconsole \
> /dev/null
fi
dialog --msgbox "설치가 시작되었습니다" 10 50
fi
fi
}
# 메인코드
while [ 1 ]
do
# 메인메뉴 출력하기
dialog --menu "KVM 관리 시스템" 20 40 8 \
1 "가상머신 리스트" \
2 "가상 네트워크 리스트" \
3 "가상머신 생성" \
0 "종료" \
2> $ans
# 종료코드 확인하여 cancel 이면 프로그램 종료
if [ $? -eq 1 ]
then
break
fi
selection=$(cat $ans)
case $selection in
1)
vmlist ;;
2)
vmnetlist ;;
3)
vmcreation ;;
0)
break ;;
*)
dialog --msgbox "잘못된 번호 선택됨" 10 40
esac
done
# 종료전 임시파일 삭제하기
rm -rf $temp 2> /dev/null
rm -rf $ans 2> /dev/null
rm -rf $image 2> /dev/null
rm -rf $vmnet 2> /dev/null
rm -rf $flavor 2> /dev/null
가상머신 리스트
가상 네트워크 리스트
가상머신 생성
가상 머신 삭제 메뉴를 만들고
해당 메뉴로 들어가면, 생성된 가상머신들의 리스트가 보인다. 이때, 리스트를 radio 로 처리하고 선택된 가상머신을 삭제하는 메뉴를 생성하세요!!! 단, 삭제직전에 "삭제하시겠습니까?" 를 yes no 로 물어보고 yes 인경우에 삭제되어야 함!!! (삭제시에는 디스크까지 함께 삭제되도록 해 주세요)
참고로... 삭제 명령은 다음과 같다.
virsh destroy gildong 로 종료후,
virsh undefine gildong --remove-all-storage 로 삭제(디스크 포함)
deletion=$(mktemp -t test.XXX) # 삭제할 인스턴스 이름을 담기 위한 변수
# 함수 선언
# 가상 머신 삭제 함수
vmdeletion() {
COUNTER=1
RADIOLIST=""
for i in $(virsh list --all | grep -v "Name" | gawk '{print $2}' | sed '/^$/d')
do
RADIOLIST="$RADIOLIST $i $COUNTER off "
let COUNTER=COUNTER+1
done
dialog --backtitle "Radiolist" \
--radiolist "test" 0 0 $COUNTER \
$RADIOLIST 2> $deletion
if [ $? -eq 0 ]
then
dialog --yesno "정말로 삭제하시겠습니까?" 0 0
if [ $? -eq 0 ]
then
todelete=$(cat $deletion)
virsh destroy $todelete
virsh undefine $todelete --remove-all-storage
if [ $? -eq 0 ]
then
dialog --msgbox "성공적으로 삭제되었습니다" 0 0
vmlist
fi
else
break
fi
fi
}
# 종료 전 임시파일 삭제하기
rm -rf $deletion 2> /dev/null
https://docs.oracle.com/cd/E69402_01/html/E74916/archover.html
KVM1
KVM2
STORAGE
virtual network editor