CentOS7 KVM

KVMで遊んでみます。

[root@centos7 ~]# yum install qemu-kvm
[root@centos7 ~]# yum install libvirt
[root@centos7 ~]# yum install virt-install

カーネルモジュールを確認します。

[root@centos7 ~]# lsmod | grep kvm
kvm_intel             138567  0 
kvm                   441119  1 kvm_intel

libvirtd を有効にします。CentOS7 からsystemdなので、流儀が違いますね。/usr/lib/systemd/system 以下に起動スクリプトが入っているそうなのですが、設定ファイル風なので慣れるまでは時間がかかりそうです。

サービスの一覧を取得して確認し、enabled にします。

[root@centos7 ~]# systemctl list-unit-files | grep libvirt
libvirt-guests.service                      disabled
libvirtd.service                            disabled
[root@centos7 ~]# systemctl enable libvirt-guests.service
ln -s '/usr/lib/systemd/system/libvirt-guests.service' '/etc/systemd/system/multi-user.target.wants/libvirt-guests.service'
[root@centos7 ~]# systemctl enable libvirtd.service
ln -s '/usr/lib/systemd/system/libvirtd.service' '/etc/systemd/system/multi-user.target.wants/libvirtd.service'
[root@centos7 ~]# systemctl list-unit-files | grep libvirt
libvirt-guests.service                      enabled 
libvirtd.service                            enabled 

起動しておきますか。

[root@centos7 ~]# systemctl start libvirtd.service
[root@centos7 ~]# systemctl start libvirt-guests.service

systemd周りはまだよくわからないので、後でまとめておきます。

KVMではゲストOSのネットワークにブリッジを使うので、あらかじめ設定します。これもだいぶ流儀が違いますね。

[root@centos7 ~]# nmcli connection add type bridge autoconnect yes con-name br0 ifname br0
接続 'br0' (96d8e039-89a5-4cc3-bcf3-a7580550ec7a) が正常に追加されました。
[root@centos7 ~]# nmcli connection modify br0 ipv4.addresses "192.168.0.230/24 192.168.0.1"
[root@centos7 ~]# nmcli connection modify br0 ipv4.method manual
[root@centos7 ~]# nmcli connection modify br0 ipv4.dns 192.168.0.1

既存のネットワークインタフェースを消して繋ぎ直します。まず ip addr でインタフェース名を取得します。いまどきは ifconfig は使わないんですよね。

[root@centos7 ~]# ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno16777736:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:8d:5a:36 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.230/24 brd 192.168.0.255 scope global eno16777736
       valid_lft forever preferred_lft forever
(以下略)

eth0 とかではなく eno16777736 なんですね。なんでこんなことになってるのかわかりませんが、これを削除して後から繋ぎ直します。remoteから入っているときはここで切れちゃうので要注意です。

[root@centos7 ~]# nmcli connection delete eno16777736
[root@centos7 ~]# nmcli connection add type bridge-slave autoconnect yes con-name eno16777736 ifname eno16777736 master br0
Connection 'eno16777736' (fc4ccf45-8356-4a81-9bf0-9b44b260b139) successfully added.
[root@centos7 ~]# systemctl restart NetworkManager
[root@centos7 ~]#

再度 ip addr で確認してみます。br0 にアドレスが付いていて、インタフェース側は master br0 となっていればOKです。

[root@centos7 ~]# ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno16777736:  mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
    link/ether 00:0c:29:8d:5a:36 brd ff:ff:ff:ff:ff:ff
3: virbr0:  mtu 1500 qdisc noqueue state DOWN 
    link/ether a2:e3:ba:1b:b9:79 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: br0:  mtu 1500 qdisc noqueue state UP 
    link/ether 00:0c:29:8d:5a:36 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.230/24 brd 192.168.0.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 2001:c90:8224:afe:20c:29ff:fe8d:5a36/64 scope global dynamic 
       valid_lft 2591762sec preferred_lft 604562sec
    inet6 fe80::20c:29ff:fe8d:5a36/64 scope link 
       valid_lft forever preferred_lft forever

これでまた外からsshで繋げられるようになったので、作業もやりやすくなります。

ようやく仮想マシンを作成できるようになりました。あとはこれまでのやり方と同じですね。

[root@centos7 ~]# virt-install --name guest1 --ram 1024 \
> --disk path=/var/lib/libvirt/images/guest1.img,size=8 \
> --vcpus 1 \
> --os-type=linux --os-variant rhel7 \
> --network bridge=br0 \
> --graphics none \
> --console 'pty,target_type=serial' \
> --location 'http://ftp.iij.ad.jp/pub/linux/centos/7/os/x86_64' \
> --extra-args 'console=ttyS0,115200n8 serial'

(参考文献)

いったんここまで。

CentOS7

始めてみました。まずはインストールのみ。

CentOS7

Solaris11

IPMPを除去してやり直し。

root@solaris:~# dladm show-phys
LINK              MEDIA                STATE      SPEED  DUPLEX    DEVICE
net0              Ethernet             up         1000   full      e1000g0
net1              Ethernet             up         1000   full      e1000g1
root@solaris:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
net0/v4           static   ok           192.168.0.220/24
lo0/v6            static   ok           ::1/128

zoneも一旦削除。消したり作ったりを繰り返すと勉強になりますね。

root@solaris:~# zonecfg -z zone1 delete 
Are you sure you want to delete zone zone1 (y/[n])? y
root@solaris:~# zonecfg -z zone2 delete 
Are you sure you want to delete zone zone2 (y/[n])? y
root@solaris:~# zoneadm list -vc
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
root@solaris:~# 

これでインストール直後の状態に戻ったので、再度zoneを作り直し。作る方法はすでに書いた通りです。

root@solaris:~# zoneadm -z zone1 install
root@solaris:~# zoneadm -z zone2 clone zone1
root@solaris:~# zoneadm list -vc
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   - zone1            installed   /mypool/zone1                solaris    excl  
   - zone2            installed   /mypool/zone2                solaris    excl

root@solaris:~# zoneadm boot -z zone1
root@solaris:~# zoneadm boot -z zone2
root@solaris:~# zoneadm list -vc
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   2 zone1            running     /mypool/zone1                solaris    excl  
   3 zone2            running     /mypool/zone2                solaris    excl 

起動できたのでconsoleからログインし、それぞれにIPアドレスを振っておきます。

root@solaris:~# zlogin -C zone1
...
  • global: 192.168.0.220/24
  • zone1: 192.168.0.221/24
  • zone2: 192.168.0.222/24

一応できましたが、zone1やzone2からインターネットに出ることができずにいます。引き続き検証中。

pkg ほにゃらら でパッケージのインストールはできるようなのですが、どうもよくわかりません。中途半端ですがここらへんで一段落としようと思います。

20年

あの震災から20年。京都でしたが体験者の一人として忘れません。5:46。黙祷。。

Solaris11 Zones

zone を作ってみます。 まずZFSのpoolは先日このように用意しておきました。mypoolの下にzoneを2つ作ってみます。

(いまのところネットワークがうまく繋がっていないです。IPMPと併用するとうまくいかないのか、他の理由なのか…)

root@solaris:~# zpool list
NAME     SIZE  ALLOC   FREE  CAP  DEDUP  HEALTH  ALTROOT
mypool  19.9G   124K  19.9G   0%  1.00x  ONLINE  -
rpool   15.6G  4.87G  10.8G  31%  1.00x  ONLINE  -

zfs create で領域を作ります。

root@solaris:~# zfs create mypool/zone1
root@solaris:~# zfs create mypool/zone2

zonecfg で zone を作ってみます。

root@solaris:~# zonecfg -z zone1
Use 'create' to begin configuring a new zone.
zonecfg:zone1> create
create: Using system default template 'SYSdefault'
zonecfg:zone1> set zonepath=/mypool/zone1
zonecfg:zone1> verify
zonecfg:zone1> commit
zonecfg:zone1> exit
root@solaris:~# 

zone2 も同様に作りました。

root@solaris:~# zoneadm list -cv
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   - zone1            configured  /mypool/zone1                solaris    excl  
   - zone2            configured  /mypool/zone2                solaris    excl 

install してみます。pkg.oracle.com からパッケージを取ってくるので時間がかかります。頻繁にやるならローカルに立てたほうがいいでしょう。立て方は公式ドキュメントの Oracle Solaris 11 パッケージリポジトリのコピーおよび作成 に書いてあります。今回は普通にインターネット経由で取得してきました。

root@solaris:~# zoneadm -z zone1 install
The following ZFS file system(s) have been created:
    mypool/zone1
Progress being logged to /var/log/zones/zoneadm.20150108T050021Z.zone1.install
       Image: Preparing at /mypool/zone1/root.

 Install Log: /system/volatile/install.10561/install_log
 AI Manifest: /tmp/manifest.xml.IeaOMu
  SC Profile: /usr/share/auto_install/sc_profiles/enable_sci.xml
    Zonename: zone1
Installation: Starting ...

        Creating IPS image
開始 リンクされたイメージ: 1/1 完了
        Installing packages from:
            solaris
                origin:  http://pkg.oracle.com/solaris/release/
ダウンロード                 パッケージ  ファイル  転送 (MB)  速度
database/berkeleydb-5                 40/282    5682/53275   42.2/351.9  120k/s
...
スピード検索データベースを作成しています      完了 
パッケージキャッシュを更新しています         1/1 
Installation: Succeeded

        Note: Man pages can be obtained by installing pkg:/system/manual

 done.

        Done: Installation completed in 1406.873 seconds.


  Next Steps: Boot the zone, then log into the zone console (zlogin -C)

              to complete the configuration process.

Log saved in non-global zone as /mypool/zone1/root/var/log/zones/zoneadm.20150108T050021Z.zone1.install
root@solaris:~# 
root@solaris:~# zoneadm list -vc
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   - zone1            installed   /mypool/zone1                solaris    excl  
   - zone2            configured  /mypool/zone2                solaris    excl 

もし失敗したらやり直します。(例)

root@solaris:~# zoneadm -z zone1 mark incomplete
root@solaris:~# zoneadm -z zone1 uninstall
root@solaris:~# zoneadm -z zone1 install

無事installが完了したら、起動することを確認してみます。

root@solaris:~# zoneadm -z zone1 boot
root@solaris:~# 

起動したらコンソールを取ります。

root@solaris:~# zlogin -C zone1
[Connected to zone 'zone1' console]

通常のSolaris11のインストール画面のような初期設定が終わると、ログインできるようになります。

Hostname: zone1

zone1 console login: 

一旦落とします。zlogin から抜けるには ~. です。ssh で global zone に入っているときは、~~. で抜けられます。

sugimura@zone1:~$ su -
Password: 
Jan  8 14:30:38 zone1 su: 'su root' succeeded for sugimura on /dev/console
Oracle Corporation      SunOS 5.11      11.2    June 2014
root@zone1:~# shutdown -i0 -g0 -y

Shutdown started.    Thu Jan  8 14:30:44 JST 2015
~.
[Connection to zone 'zone1' console closed]

zone1をzone2にコピーしてみます。zone2 は zone1 の clone ですよと指定するんですね。

root@solaris:~# zoneadm -z zone2 clone zone1
/mypool/zone2 must not be group readable.
/mypool/zone2 must not be group executable.
/mypool/zone2 must not be world readable.
/mypool/zone2 must not be world executable.
changing zonepath permissions to 0700.
Progress being logged to /var/log/zones/zoneadm.20150108T053529Z.zone2.clone
Log saved in non-global zone as /mypool/zone2/root/var/log/zones/zoneadm.20150108T053529Z.zone2.clone
root@solaris:~# 
root@solaris:~# zoneadm list -vc
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   - zone1            installed   /mypool/zone1                solaris    excl  
   - zone2            installed   /mypool/zone2                solaris    excl  
root@solaris:~# 

これで2つのzoneをそれぞれ使えるようになりました。両方起動すると次のようになります。

root@solaris:~# zoneadm list -vc
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   3 zone1            running     /mypool/zone1                solaris    excl  
   4 zone2            running     /mypool/zone2                solaris    excl 

引き続きこの環境でいろいろ実験していきます。

(参考文献)