[Linux] Dialog

gununoo·2022년 7월 29일
1

Linux

목록 보기
10/10
post-thumbnail

mktemp

[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

-> 임시 변수로 활용할 수 있음

dialog

inputbox

[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

-> 파일에 입력 값이 저장되었음

radiolist

여러 개 중에 한 개를 선택

[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를 선택하셨습니다"

실습 1 - 시스템 관리 프로그램

#!/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
  1. 디스크 공간 확인
  2. 로그인 사용자 확인
  3. 메모리 정보 확인
  4. 가상머신 리스트 확인

실습 2 - 가상머신 관리 프로그램

wok 실행

[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
  1. 가상머신 리스트

  2. 가상 네트워크 리스트

  3. 가상머신 생성

실습 3 - 가상머신 삭제 기능 추가

가상 머신 삭제 메뉴를 만들고
해당 메뉴로 들어가면, 생성된 가상머신들의 리스트가 보인다. 이때, 리스트를 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
  1. 가상머신 삭제

3 node architecture

https://docs.oracle.com/cd/E69402_01/html/E74916/archover.html

NETWORK

  • VPC(셔브넷)
  • DHCP
  • NAT
  • LB(HAproxy)

CONTROL

  • 인증 서비스
  • 사용자 접속
  • 작업 지시
  • Database

COMPUTE

  • cpu, ram -> 가상화(Hypervisor)
  • STORAGE와 연결

STORAGE

  • block storage
  • object storage
  • file storage

실습을 위한 KVM spec

KVM1

  • 용도: compute
  • 4 cores
  • ram 6144 mb
  • 외부(VMnet10): 211.183.3.101
  • 마이그레이션, storage 연결(VMnet1): 172.16.1.101
  • 관리용(VMnet2): 172.16.2.101
  • 디스크 용량: 20GB (auto partitioning)
  • Server with GUI

KVM2

  • 용도: compute
  • 4 cores
  • ram 6144 mb
  • 외부(VMNet10): 211.183.3.102
  • 마이그레이션, storage 연결(VMnet1): 172.16.1.102
  • 관리용(VMnet2): 172.16.2.102
  • 디스크 용량: 20GB (auto partitioning)
  • Server with GUI

STORAGE

  • 용도: storage
  • 2 cores
  • ram: 2048 mb
  • 외부(VMNet10): 211.183.3.100
  • 마이그레이션, storage 연결(VMnet1): 172.16.1.100
  • 관리용(VMnet2): 172.16.2.100
  • 디스크 용량: 120GB (/cloud: 100GB, swap: 4GB, /boot: 1GB, /: 나머지)
  • minimum install

네트워크 설정 변경

virtual network editor

profile
take a look

0개의 댓글