Help us understand the problem. What is going on with this article?

KVM 仮想マシン作成

自分用メモ。
CentOSにKVMインストール の続き。

libvirtd 起動

$ systemctl status libvirtd
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:libvirtd(8)
           https://libvirt.org

$ sudo systemctl start libvirtd
$ sudo systemctl enable libvirtd
$ systemctl status libvirtd
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since 水 2019-12-11 09:58:51 JST; 25s ago
     Docs: man:libvirtd(8)
           https://libvirt.org
 Main PID: 29943 (libvirtd)
   CGroup: /system.slice/libvirtd.service
           tq29943 /usr/sbin/libvirtd
           tq30047 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_l...
           mq30048 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_l...

12月 11 09:58:51 kvm_host dnsmasq[30044]: listening on virbr0(#14): 192.168.122.1
12月 11 09:58:51 kvm_host dnsmasq[30047]: started, version 2.76 cachesize 150
12月 11 09:58:51 kvm_host dnsmasq[30047]: compile time options: IPv6 GNU-getopt DBus no-i18n IDN DHCP DHCPv6 no-Lua TFTP no-conntr...inotify
12月 11 09:58:51 kvm_host dnsmasq-dhcp[30047]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease time 1h
12月 11 09:58:51 kvm_host dnsmasq-dhcp[30047]: DHCP, sockets bound exclusively to interface virbr0
12月 11 09:58:51 kvm_host dnsmasq[30047]: reading /etc/resolv.conf
12月 11 09:58:51 kvm_host dnsmasq[30047]: using nameserver 8.8.8.8#53
12月 11 09:58:51 kvm_host dnsmasq[30047]: read /etc/hosts - 2 addresses
12月 11 09:58:51 kvm_host dnsmasq[30047]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses
12月 11 09:58:51 kvm_host dnsmasq-dhcp[30047]: read /var/lib/libvirt/dnsmasq/default.hostsfile
Hint: Some lines were ellipsized, use -l to show in full.

仮想ネットワーク 内部LAN 作成

$ sudo virsh net-list
 名前               状態     自動起動  永続
----------------------------------------------------------
 default              動作中  はい (yes)  はい (yes)

$ cat <<- EOF > /tmp/internal_lan.xml
<network>
  <name>internal_lan</name>
  <bridge name='virbr1' stp='on' delay='0' />
  <ip address='172.19.0.1' netmask='255.255.254.0'>
  </ip>
</network>
EOF
$ sudo virsh net-define /tmp/internal_lan.xml
ネットワーク internal_lan が /tmp/internal_lan.xml から定義されました

$ sudo virsh net-autostart internal_lan
ネットワーク internal_lan が自動起動に設定されました

$ sudo virsh net-start internal_lan
ネットワーク internal_lan が起動されました

$ sudo virsh net-list
 名前               状態     自動起動  永続
----------------------------------------------------------
 default              動作中  はい (yes)  はい (yes)
 internal_lan         動作中  はい (yes)  はい (yes)

仮想ネットワーク default 停止

$ sudo virsh net-list
 名前               状態     自動起動  永続
----------------------------------------------------------
 default              動作中  はい (yes)  はい (yes)
 internal_lan         動作中  はい (yes)  はい (yes)

$ sudo virsh net-destroy default
ネットワーク default は強制停止されました

$ sudo virsh net-undefine default
ネットワーク default の定義が削除されました

$ sudo virsh net-list
 名前               状態     自動起動  永続
----------------------------------------------------------
 internal_lan         動作中  はい (yes)  はい (yes)

仮想ネットワーク 外部接続用 bridge-IF 作成

作成前の状況を確認。

$ ip link show | grep mtu
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
3: eno2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
4: eno1.10@eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
5: virbr1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
6: virbr1-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr1 state DOWN mode DEFAULT group 

ifcfg-eno1 はホストOSが使用しているので ifcfg-eno2 を仮想マシン用のIFとする。

$ cd /etc/sysconfig/network-scripts
$ sudo sed -i ifcfg-eno2 \
  -e s/^BOOTPROTO=dhcp/BOOTPROTO=static/ \
  -e s/^ONBOOT=no/ONBOOT=yes/ \
  -e '$aBRIDGE=br2'

$ sudo cat << EOF > /tmp/ifcfg-br2
DEVICE=br2
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
EOF

$ sudo mv /tmp/ifcfg-br2 .
$ sudo chown root:root ifcfg-br2
$ sudo chmod 644 ifcfg-br2
$ sudo systemctl restart network

仮想マシン用 ストレージ作成

$ sudo virsh pool-list --all
 名前               状態     自動起動
-------------------------------------------

$ sudo virsh pool-define-as vm_images logical - - /dev/sda3 VolGroup01 /dev/VolGroup01
プール vm_images が定義されました

$ sudo virsh pool-start vm_images
プール vm_images が起動されました

$ sudo virsh pool-autostart vm_images
プール vm_images が自動起動としてマークされました

$ sudo virsh pool-list
 名前               状態     自動起動
-------------------------------------------
 vm_images            動作中  はい (yes)

$ sudo virsh vol-create-as vm_images openstack_cmpt 4000G
ボリューム openstack_cmpt が 作成されました

$ sudo virsh vol-create-as vm_images openstack_ctrl 500G
ボリューム openstack_ctrl が 作成されました

$ sudo virsh vol-list --pool vm_images
 名前               パス
------------------------------------------------------------------------------
 lv_home              /dev/VolGroup01/lv_home
 lv_root              /dev/VolGroup01/lv_root
 lv_swap              /dev/VolGroup01/lv_swap
 openstack_cmpt       /dev/VolGroup01/openstack_cmpt
 openstack_ctrl       /dev/VolGroup01/openstack_ctrl

$ sudo lvs
  LV             VG         Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_home        VolGroup01 -wi-ao----  50.00g
  lv_root        VolGroup01 -wi-ao----  50.00g
  lv_swap        VolGroup01 -wi-ao----  20.00g
  openstack_cmpt VolGroup01 -wi-a-----  <3.91t
  openstack_ctrl VolGroup01 -wi-a-----  500.00g

仮想マシン インストールイメージ配置

$ sudo mkdir /var/iso
★WinSCP などで /var/iso 配下にOSインストールイメージ(iso) を配置
$ ls -l /var/iso
合計 4277248
-rw-r--r--. 1 root root 4379901952 11月 26  2017 CentOS-7-x86_64-DVD-1611.iso

仮想マシン OSインストール用 キックスタートファイル作成

ホストOSインストール時に作成された anaconda-ks.cfg を流用する。

$ sudo mkdir /var/ks
$ sudo cp -p /root/anaconda-ks.cfg /var/ks/ctrl.cfg
$ sudo vim /var/ks/ctrl.cfg

参考:26.3. キックスタート構文の参考資料

/var/ks/ctrl.cfg
#version=DEVEL

# -- auto install by udon
install

# System authorization information
auth --enableshadow --passalgo=sha512

# Use CDROM installation media
cdrom

# Use graphical install
# --no use graphical install by udon
#graphical

# Run the Setup Agent on first boot
# --no use setup agent by udon
#firstboot --enable
firstboot --disable

# --change device name by udon
#ignoredisk --only-use=sda
ignoredisk --only-use=vda

# Keyboard layouts
# --change keyboard layouts by udon
#keyboard --vckeymap=jp --xlayouts='jp'
keyboard --vckeymap=jp106 --xlayouts='jp'

# System language
lang ja_JP.UTF-8

# Network information
# --no setup network by udon
#network  --bootproto=dhcp --device=eno1 --onboot=off --ipv6=auto --no-activate
#network  --bootproto=dhcp --device=eno2 --onboot=off --ipv6=auto
#network  --hostname=local.localdomain

# Root password
rootpw --iscrypted $6$gcFdG4Yd19LatI3C$4JJMV/v6xzNbODr3hkLOExDfelbj6q/.EuyWCcjYz2ZfvhqWeECGfFwSuAXrU9ogLH3GtGncaCsfNRgd7tvwx0

# System services
# --no setup ntp at setup by udon
#services --enabled="chronyd"

# System timezone
# --change hardware clock locale by udon
#timezone Asia/Tokyo --isUtc
timezone Asia/Tokyo

# System bootloader configuration
# --change boot-drive name by udon
# --kdump auto by udon
# --no display rhgb on boot by udon
#bootloader --location=mbr --boot-drive=sda
bootloader --location=mbr --boot-drive=vda --append="crashkernel=auto rhgb quiet"

# selinux disable by udon
selinux --disabled

# firewall disable by udon
firewall --disabled

# partition clear by udon
zerombr

# Partition clearing information
# --change device name by udon
#clearpart --all --initlabel --drives=sda
clearpart --all --initlabel --drives=vda

# Disk partitioning information
# --change partition by udon
#part pv.672 --fstype="lvmpv" --ondisk=sda --size=122888
#part biosboot --fstype="biosboot" --ondisk=sda --size=1
#part /boot --fstype="xfs" --ondisk=sda --size=512 --label=/boot
#volgroup VolGroup01 --pesize=4096 pv.672
#logvol /home  --fstype="xfs" --size=51200 --label="/home" --name=lv_home --vgname=VolGroup01
#logvol swap  --fstype="swap" --size=20480 --name=lv_swap --vgname=VolGroup01
#logvol /  --fstype="xfs" --size=51200 --label="/root" --name=lv_root --vgname=VolGroup01

part /boot --fstype="xfs" --asprimary --ondisk=vda --size=512 --label=/boot
part pv.1 --ondisk=vda --grow --asprimary --size=1

volgroup VolGroup01 --pesize=4096 pv.1

logvol swap     --fstype="swap" --size=4096   --name=lv_swap --vgname=VolGroup01
logvol /        --fstype="xfs"  --size=307200 --name=lv_root --vgname=VolGroup01 --label="/root"
logvol /home    --fstype="xfs"  --size=51200  --name=lv_home --vgname=VolGroup01 --label="/home"
logvol /var/log --fstype="xfs"  --size=51200  --name=lv_log  --vgname=VolGroup01 --label="/var/log"

%packages
@^minimal
@core
chrony

%end

%addon com_redhat_kdump --disable --reserve-mb='auto'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=50 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=50 --notstrict --nochanges --notempty
pwpolicy luks --minlen=6 --minquality=50 --notstrict --nochanges --notempty
%end
  • install
    インストールの開始

  • auth --enableshadow --passalgo=sha512
    デフォルトのまま。

    • シャドウパスワードを使用(--enableshadow)
    • SHA512 ハッシュアルゴリズムを使用(--passalgo=sha512)
  • cdrom
    光学メディアからのインストール

  • #graphical
    グラフィカルインストールを使わない

  • firstboot --disable
    初期化セットアップアプリを利用しない

  • ignoredisk --only-use=vda
    /dev/vda のみを使用する。
    KVMはたしか /dev/vda で認識したはず。。

  • keyboard --vckeymap=jp106 --xlayouts='jp'
    キーボードレイアウトを変更

  • lang ja_JP.UTF-8
    UTF-8 っていいよね

  • #network
    ネットワーク周辺はOSインストール後に操作するので無効化

  • rootpw --iscrypted
    楽なのは --plaintext でパスワードを丸見えさせることだけど丸見えである。
    今回はホストOSと同じパスワードのままとした。

  • #services --enabled="chronyd"
    NTPサービスはOSインストール後に操作するので無効化

  • timezone Asia/Tokyo
    別に --isUtc つけてもいいけどなんとなく

  • bootloader
    デバイス名を /dev/vda に変更すること。
    --append=~~ はつけなくてもいい。とおもう。

  • selinux --disabled

  • firewall --disalbed
    どうせ止めるんでしょ?

  • zerombr
    clearpart --all --initlabel --drives=vda
    パーティション初期化。両方やったほうが良い。

  • part /boot
    パーティション /boot を作成。デバイス名注意。

  • part pv.1
    volgroup VolGroup01 --pesize=4096 pv.1
    VGを作成する。

  • logvol
    各パーティションを作成する。
    小さめに作ってあとで LVM で変更でもいい。

  • %packages
    ホストOSに合わせる。

仮想マシン OSインストール

virt-install のオプションは闇が深い。
参考:ソフトウェアエンジニアリング - Linux KVM操作

$ sudo virt-install \
--noreboot \
--name openstack_ctrl \
--connect=qemu:///system \
--ram 8192 \
--vcpu 8 \
--disk path=/dev/VolGroup01/openstack_ctrl \
--network bridge=br2,model=virtio \
--os-type linux \
--os-variant rhel7 \
--nographics \
--hvm \
--virt-type kvm \
--location /var/iso/CentOS-7-x86_64-DVD-1611.iso \
--initrd-inject /var/ks/ctrl.cfg \
--extra-args "ks=file:/ctrl.cfg console=tty0 console=ttyS0,115200n8"

Performing post-installation setup tasks でちょっと待つけど安心して。

:省略

Performing post-installation setup tasks
Installing boot loader
.
Performing post-installation setup tasks
.

Configuring installed system
.
Writing network configuration
.
Creating users
.
Configuring addons
.
Generating initramfs
.
Running post-installation scripts
.
        Use of this product is subject to the license agreement found at /usr/share/centos-release/EULA

        Installation complete.  Press return to quit

上記で Enterキー を押下。
本当はそんなことしなくても自動停止するオプションもあるはず。

$ sudo virsh list --all
 Id    名前                         状態
----------------------------------------------------
 -     openstack_ctrl                 シャットオフ

キックスタートファイルなど間違えてしまいインストールが止まった場合は Ctrl + ] を2回押してコンソールから抜け、以下のコマンドで仮想マシンを削除する。

$ sudo virsh undefine openstack_ctrl
ドメイン openstack_ctrl の定義が削除されました

$ sudo virsh destroy openstack_ctrl
ドメイン openstack_ctrl は強制停止されました
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした