내가 원하는 정보를 넣은 커스텀이미지를 생성한다.
예를 들면 내가 웹페이지를 배포하고 싶다면, 미리 해당 서버에 웹서버를 설치하고, enable도 해주고, 웹페이지도 넣어놓으면 내가 그 이미지를 부팅하기만 해도 웹페이지가 배포될 것이다.
[root@kvm-host ~]# yum install -y libguestfs-tools libguestfs libguestfs-xfs
# virt-builder 명령 설치 패키지.
지원하는 목록을 보기위해
[root@kvm-host ~]# virt-builder --list
# 지원하는 이미지 목록.
지원하는 목록은 https://libguestfs.org/virt-builder.1.html 여기 사이트에서 확인 할 수 있다.
virt-builder os-version
[-o|--output DISKIMAGE] [--size SIZE] [--format raw|qcow2]
[--arch ARCHITECTURE] [--attach ISOFILE]
[--append-line FILE:LINE] [--chmod PERMISSIONS:FILE]
[--chown UID:GID:PATH] [--commands-from-file FILENAME]
[--copy SOURCE:DEST] [--copy-in LOCALPATH:REMOTEDIR]
[--delete PATH] [--edit FILE:EXPR] [--firstboot SCRIPT]
[--firstboot-command 'CMD+ARGS'] [--firstboot-install PKG,PKG..]
[--hostname HOSTNAME] [--inject-blnsvr METHOD]
[--inject-qemu-ga METHOD] [--inject-virtio-win METHOD]
[--install PKG,PKG..] [--link TARGET:LINK[:LINK..]] [--mkdir DIR]
[--move SOURCE:DEST] [--password USER:SELECTOR]
[--root-password SELECTOR] [--run SCRIPT]
[--run-command 'CMD+ARGS'] [--scrub FILE]
[--ssh-inject USER[:SELECTOR]] [--tar-in TARFILE:REMOTEDIR]
[--timezone TIMEZONE] [--touch FILE] [--truncate FILE]
[--truncate-recursive PATH] [--uninstall PKG,PKG..] [--update]
[--upload FILE:DEST] [--write FILE:CONTENT] [--no-logfile]
[--password-crypto md5|sha256|sha512] [--no-selinux-relabel]
[--selinux-relabel]
virt-builder -l|--list [--long] [--list-format short|long|json] [os-version]
virt-builder --notes os-version
virt-builder --print-cache
virt-builder --cache-all-templates
virt-builder --delete-cache
virt-builder --get-kernel DISKIMAGE
[--format raw|qcow2] [--output OUTPUTDIR]
우리가 사용할 이미지는 centos-7.8이다
[root@kvm-host ~]# virt-builder centos-7.8 --size=5G --format=qcow2 -o /remote/vm/cent7-pass.img --root-password password:test123
# root 패스워드를 test123으로 설정한 이미지. 앞으로 이 이미지를 복사해서 쓸 예정.
# 볼륨 사이즈를 20GB 로 지정하고, 포맷을 qcow2 로 하며, output 은 remote 디렉터리의 cent7-pass.img 로 저장한다.
[root@kvm-host ~]# virt-install --name cen1 --vcpus=2 --ram=2048 --network bridge=br0 --import --disk=/remote/vm/cen1.img --noautoconsole --graphic=vnc
# cen1.img를 베이스로 cen1이라는 vm을 생성
[root@kvm-host ~]# virsh console cen1
# 콘솔 접속
: virt-builder로 생성된 순수한 이미지에 내가 원하는 설정을 추가해야한다.
[root@kvm-host ~]# virt-customize --help
# 호스트로 나와서 사용법 확인.
[root@kvm-host ~]# virt-customize -a /remote/vm/cen2.img --firstboot-command 'systemctl disable --now firewalld'
방화벽 off 명령은 처음 부팅할때 한번만 실행주면 된다. 그래서 --first-command 옵션으로 수행.
--firstboot-command : 게스트 운영체제가 처음 부팅될 때(루트 권한으로, 부팅 과정 후반에) 게스트 내부에서 명령(및 인수)을 실행합니다.
virt-install --name cen2 --vcpus=2 --ram=2048 --network bridge=br0 --import --disk=/remote/vm/cen2.img --noautoconsole --graphic=vnc # cen2.img를 베이스로 cen2이라는 vm을 생성
[root@kvm-host vm]# virt-customize -a /remote/vm/cen3.img --firstboot-command 'systemctl disable --now firewalld' --root-password password:test1234 --selinux-relabel
# --selinux-relabel : 보안관련 옵션. 셀리눅스 정책에 위반이 되는 옵션들을 허용. 앞으로도 항상 붙여주세요!
virt-install --name cen3 --vcpus=2 --ram=2048 --network bridge=br0 --import --disk=/remote/vm/cen3.img --noautoconsole --graphic=vnc
# 커스터마이징한 이미지로 VM생성
virsh console cen3
# 콘솔 접속
[root@kvm-host vm]# ssh-keygen
# 키페어 만드는 명령.
키페어를 만들어준다. 경로는 /root/.ssh/id_rsa에 만들어주고 기본값으로 해서 만든다.
그럼 ls ~/.ssh/를 통해 보면
id_rsa, id_rsa.pub, known_hosts가 있다.
다시 console cen3으로
[root@localhost ~]# mkdir ~/.ssh
[root@localhost ~]# vi ~/.ssh/authorized_keys
# 복사한 공개키를 붙여준다.
ssh root@[IP주소] -i ~/.ssh/id_rsa를 통해 접속한다.
접속할땐 프라이빗키로 식별(-i)하겠다는 옵션을 적어주면 된다.
내 계정 user1
~ : /home/user1
내 계정 root
~ : /root
오늘은 KVM에서 이미지를 커스텀하는것을 주제로 공부를 했다. 실습은 4개 정도가있지만 이제는 개념을 위주로 블로그를 작성하는 방향으로 해야겠다. 월요일 잘 버틴듯 하다.