yum -y install dialog
dialog 설치 이후
console 창에서
dialog --title test --msgbox "hello all" 10 20 # 0 0하면 꽉채워서
[root@sooyeon 0728]# dialog --title "선택하세요" --yesno "is it ok?" 10 20
# no 선택후 엔터 시
[root@sooyeon 0728]# echo $?
1
# yes 선택 후 엔터 시
[root@sooyeon 0728]# echo $?
0
[root@sooyeon 0728]# dialog --title "name" --inputbox "what is your name?" 10 20
# cancel 선택 후 엔터 시
[root@sooyeon 0728]# echo $?
1
# ok 선택 후 엔터 시
[root@sooyeon 0728]# echo $?
0
[root@sooyeon 0728]# dialog --title "name" --inputbox "what is your name?" 10 20 2> name.txt
[root@sooyeon 0728]# cat name.txt
홍길동
[root@sooyeon 0729]# mktemp -t test.XXX
/tmp/test.hhx
[root@sooyeon 0729]# testfile1=$(mktemp -t test.XXX)
[root@sooyeon 0729]# echo $testfile1
/tmp/test.kmM
[root@sooyeon 0729]# dialog --title "vm name" --inputbox "type virtual machine name" 10 40 2> $testfile1
[root@sooyeon 0728]# dialog --textbox name.txt 10 20
[root@sooyeon 0728]# dialog --title "test title" --menu "what is your favorite sports?" 0 0 0 1 "baseball" 2 "football" 3 "running" 2> sports.txt
# 번호를 선택
[root@sooyeon 0728]# cat sports.txt
2
0(높이) 0(너비) 0(보기에서의 행)
[root@sooyeon 0728]# dialog --title "파일선택" --fselect $HOME/ 5 5 2>file.txt
[ * ] centos7 linux centos version 7
[ ] ubuntu linux ubuntu version 18.04
dialog --title "Linux Dist." --radiolist "select one ! " 15 50 4 "CentOS7" "CentOS Version 7.0" ON "Ubuntu" "Ubuntu Linux version 18.04" OFF "RHEL7" "Red Hat Enterprise Linux version 7.0" OFF 2> result.txt

[root@sooyeon 0729]# cat lab1.sh
#!/bin/bash
temp=$(mktemp -t test.XXX)
ans=$(mktemp -t test.XXX)
diskspace(){
df -h > $temp
dialog --textbox $temp 20 60
}
whoseon() {
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 60
}
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)
whoseon ;;
3)
memusage ;;
4)
vmlist ;;
0)
break ;;
*)
dialog --msgbox "잘못된 선택입니다" ;;
esac
done
rm -rf $temp 2> /dev/null
rm -rf $ans 2> /dev/null


[root@sooyeon 0729]# systemctl stop httpd
[root@sooyeon 0729]# systemctl disable httpd
[root@sooyeon 0729]# systemctl start wokd
[root@sooyeon 0729]# systemctl enable wokd
# kvm 종료 맟 재시작
[root@sooyeon 0729]# systemctl stop libvirtd
[root@sooyeon 0729]# systemctl start libvirtd
[root@sooyeon 0729]# systemctl status libvirtd
virsh list --all # file에 저장
virsh net-list --all # file에 저장
OS선택[radiolist] → VM 이름[inputbox] → flavor 선택 (cpu/memory세트) [radiolist]→ 변수 받아서 인스턴스 설치되도록
cp {vmname}.qcow2
[root@sooyeon 0729]# cat lab2.sh
#!/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" "CentOS 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 $vmname 2> /dev/null
rm -rf $flavor 2> /dev/null
Quiz
메뉴 만들기
참고로 삭제 명령은 다음과 같다.
virsh destroy gildong 로 종료 후, virsh undefine gildong —remove-all-storage로 삭제(디스크 포함)
[root@sooyeon 0729]# cat lab2.sh
#!/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 정보 담기 위한 변수
deleteans=$(mktemp -t test.XXX)
deletename=$(mktemp -t test.XXX)
namefile=$(mktemp -t test.XXX)
descriptfile=$(mktemp -t test.XXX)
# 함수 선언
# 가상머신 리스트 출력함수
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" "CentOS 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
}
vmdelete(){
virsh list --all > $temp
n=$[ $(wc -l $temp | gawk '{print $1}') - 2 ]
word=''
namefile=$(virsh list --all | grep -v Name | gawk '{print $2}' | sed '/^$/d')
descriptfile=$(virsh list --all | grep -v Name | gawk '{print $3}' | sed '/^$/d')
for line in $namefile
do
word="$word $line '.' 'OFF'"
done
dialog --title "가상머신 선택" --radiolist "가상머신을 선택하세요" 15 50 $n $word 2> $deleteans
deletename=$(cat $deleteans)
dialog --title "선택하세요" --yesno "삭제하시겠습니까?" 10 20
if [ $? -eq 0 ]
then
virsh destroy $deletename
virsh undefine ${deletename} --remove-all-storage
fi
}
# 메인 코드
while [ 1 ]
do
# 메인메뉴 출력하기
dialog --menu "KVM 관리 시스템" 20 40 8 1 "가상머신 리스트" 2 "가상 네트워크 리스트" 3 "가상머신 생성" 4 "가상머신 제거" 0 "종료" 2> $ans
# 종료 코드 확인하여 cancel이면 프로그램 종료
if [ $? -eq 1 ]
then
break
fi
selection=$(cat $ans)
case $selection in
1)
vmlist ;;
2)
vmnetlist ;;
3)
vmcreation ;;
4)
vmdelete ;;
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 $vmname 2> /dev/null
rm -rf $flavor 2> /dev/null
rm -rf $deleteans 2> /dev/null
rm -rf $deletename 2> /dev/null
rm -rf $namefile 2> /dev/null
rm -rf $descriptfile 2> /dev/null