Metonymical Deflection

ゆるく日々のコト・たまにITインフラ

CentOS7でCSR1000vのセットアップ

CentOS7でCisco CSR1000vのセットアップを実施したため、その手順を記載しておきます。

c1kvはisoファイルからインストール or runファイルからインタラクティブインストールができるので、vMXやn9kvよりはさらに敷居が下がると思います。

以下の公式Docに沿って記載したいと思います。
Cisco CSR 1000v Series Cloud Services Router Software Configuration Guide - Installing the Cisco CSR 1000v in KVM Environments [Cisco Cloud Services Router 1000V Series] - Cisco


また、c1kvの足回りとしては、virtioとSR-IOVの両方で構成可能です。
また、インストールした後から諸々変更できるので助かります。

1.環境

筐体                             : ProLiant DL360e Gen8
System ROM                       : P73 01/22/2018
NIC                              : Intel X540-AT2
OS                               : CentOS7.4(1708)
Kernel                           : kernel-3.10.0-693.21.1.el7.x86_64
Installed Environment Groups     : Server with GUI
Add-Ons for Selected Environment : Virtualization Client, Virtualization Hypervisor, Virtualization Tools 

2.CSR1000vのインストール

公式Docを読む限り、isoファイルの場合とrunファイルの場合が記載されていますが、今回はvirt-managerによるGUIでのインストール方法をご紹介します。
IPMIなどが無ければ、tigervncなどを起動させておきましょう。*1

まずはisoファイルを/var/lib/libvirt/images/直下にコピー

cp csr1000v-universalk9.16.08.01a.iso /var/lib/libvirt/images/
2-1.virt-managerによるインストール

File>New Virtual Machineを選択
f:id:metonymical:20180428192118j:plain

Local install mediaを選択して、Forwardをクリック
f:id:metonymical:20180429100035j:plain

前項でコピーしたcsr1000v-universalk9.16.08.01a.isoを選択して、Choose Volumeをクリック
f:id:metonymical:20180429100252j:plain

下図の通りであることを確認して、Forwardをクリック
f:id:metonymical:20180429100233j:plain

下図の通りであることを確認して、Forwardをクリック
最低4GBで起動します。
CPUsは1で起動します
f:id:metonymical:20180429100349j:plain
下図の通りであることを確認して、Forwardをクリック
公式Docを読む限り8GBでOKみたいです。
f:id:metonymical:20180429100429j:plain
Nameに任意の名前を入力
Customize configuration before installにチェック(必須)
Network selectionは任意のインターフェースを選択(mgt用なので後で変更可)
f:id:metonymical:20180429100527j:plain

Device modelにvirtioを選択(必須)*2
Applyをクリック
f:id:metonymical:20180429100801j:plain


c1kvではインストール時およびインストール後にConsole出力をVirtualかSerialかで設定や変更が可能ですが、ここではひとまずSerialからConsole出力できるように設定しておきます。

画面左下のAdd Hardwareをクリック
Serialを選択
Device TypeにTCPを選択
Hostに0.0.0.0を入力*3
Portに8888など任意のポート番号を入力
ModeにServer mode(bind)を選択
Use Telnetにチェック
Finishをクリック
f:id:metonymical:20180429100643j:plain

c1kvでは現在のタイミングおよびインストール後にもNICの追加が可能ですが、ここではひとまずSR-IOVのVFを追加しておきます。

画面左下のAdd Hardwareをクリック
PCI Host Deviceを選択
任意のVirtualFunctionを選択*4
Finishをクリック
f:id:metonymical:20180429101259j:plain

Begin Installationをクリックすると、以下の画面でConsole出力方法を選択できます。
VirtualとSerialが選択できますが、ここではSerialを選択して進めます。
ちなみに、Virtualを選択した場合、この画面のままインストールが進みます。
f:id:metonymical:20180429104335j:plain
Serialを選択すると、以下の画面で止まったように見えるため、後はホストOS上からtelnetすることになります。
f:id:metonymical:20180429113936j:plain

2-2.SerialConsoleの出力画面

ホストOS上からTelnetします。
telnet localhost 8889 でも接続可能です。

[root@ ~]# telnet 192.168.12.130 8889
Trying 192.168.12.130...
Connected to 192.168.12.130.
Escape character is '^]'.
%IOSXEBOOT-4-WAIT_FOR_DEVICES: (local/local): Partition "/dev/bootflash1" missing at 20180429013632 Continuing to initialization
%IOSXEBOOT-4-PART_INVALID: (local/local): /dev/bootflash has an invalid partition table that must be repaired.
%IOSXEBOOT-4-PART_REPAIR: (local/local): The system will repair /dev/bootflash now.

この後、自動的にインストールが開始され、一旦c1kvが再起動されます。
再起動と共にtelnetセッションが切断されるため、再度telnet接続します。

%IOSXEBOOT-4-BOOT_SRC: (rp/0): CD-ROM Boot
%IOSXEBOOT-4-BOOT_CDROM: (rp/0): Using Serial console
%IOSXEBOOT-4-BOOT_CDROM: (rp/0): Installing GRUB to /dev/bootflash
%IOSXEBOOT-4-BOOT_CDROM: (rp/0): Copying image to /boot
%IOSXEBOOT-4-BOOT_CDROM: (rp/0): Copying image to /bootflash
%IOSXEBOOT-4-BOOT_CDROM: (rp/0): Creating /boot/grub/menu.lst
%IOSXEBOOT-4-BOOT_CDROM: (rp/0): Ejecting CD-ROM tray
%IOSXEBOOT-4-BOOT_CDROM: (rp/0): CD-ROM Installation finished
%IOSXEBOOT-4-BOOT_CDROM: (rp/0): Rebooting from HD

Connection closed by foreign host.
[root@ ~]# telnet 192.168.12.130 8890
Trying 192.168.12.130...
Connected to 192.168.12.130.
Escape character is '^]'.
The highlighted entry will be booted automatically in 3 seconds.    The highlighted entry will be booted automatically in 2 seconds.    The highlighted entry will be booted automatically in 1 seconds.      Booting 'CSR1000v - packages.conf'

root (hd0,0)
 Filesystem type is ext2fs, partition type 0x83
kernel /packages.conf rw quiet root=/dev/ram console= max_loop=64 HARDWARE=virt
ual SR_BOOT=bootflash:packages.conf
Calculating SHA-1 hash...done
SHA-1 hash:
        calculated   ef2043b5:caad0265:2a268887:a7004ba8:fcfe6506
        expected     ef2043b5:caad0265:2a268887:a7004ba8:fcfe6506
package header rev 3 structure detected
Calculating SHA-1 hash...done
SHA-1 hash:
        calculated   e674e45a:1da6da5e:2e3d73a7:7cf8b076:631b84d8
        expected     e674e45a:1da6da5e:2e3d73a7:7cf8b076:631b84d8
Package type:0x7531, flags:0x0
   [Linux-bzImage, setup=0x3c00, size=0x4c5e00]
   [isord @ 0x7e032000, 0x1fbded6 bytes]

%IOSXEBOOT-4-BOOT_SRC: (rp/0): Checking grub versions 1.0 vs 1.0
%IOSXEBOOT-4-BOOT_SRC: (rp/0): No need for bootloader upgrade.

上記の「%IOSXEBOOT-4-BOOT~」が出力されて、そこそこの時間待たされた後、以下の画面が出力されます。

              Restricted Rights Legend

Use, duplication, or disclosure by the Government is
subject to restrictions as set forth in subparagraph
(c) of the Commercial Computer Software - Restricted
Rights clause at FAR sec. 52.227-19 and subparagraph
(c) (1) (ii) of the Rights in Technical Data and Computer
Software clause at DFARS sec. 252.227-7013.

           Cisco Systems, Inc.
           170 West Tasman Drive
           San Jose, California 95134-1706

Cisco IOS Software [Fuji], Virtual XE Software (X86_64_LINUX_IOSD-UNIVERSALK9-M), Version 16.8.1a, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2018 by Cisco Systems, Inc.
Compiled Tue 03-Apr-18 18:43 by mcpre

PLEASE READ THE FOLLOWING TERMS CAREFULLY. INSTALLING THE LICENSE OR
LICENSE KEY PROVIDED FOR ANY CISCO SOFTWARE PRODUCT, PRODUCT FEATURE,
AND/OR SUBSEQUENTLY PROVIDED SOFTWARE FEATURES (COLLECTIVELY, THE
"SOFTWARE"), AND/OR USING SUCH SOFTWARE CONSTITUTES YOUR FULL
ACCEPTANCE OF THE FOLLOWING TERMS. YOU MUST NOT PROCEED FURTHER IF YOU
ARE NOT WILLING TO BE BOUND BY ALL THE TERMS SET FORTH HEREIN.

Your use of the Software is subject to the Cisco End User License Agreement
(EULA) and any relevant supplemental terms (SEULA) found at
http://www.cisco.com/c/en/us/about/legal/cloud-and-software/software-terms.html.

You hereby acknowledge and agree that certain Software and/or features are
licensed for a particular term, that the license to such Software and/or
features is valid only for the applicable term and that such Software and/or
features may be shut down or otherwise terminated by Cisco after expiration
of the applicable license term (e.g., 90-day trial period). Cisco reserves
the right to terminate any such Software feature electronically or by any
other means available. While Cisco may provide alerts, it is your sole
responsibility to monitor your usage of any such term Software feature to
ensure that your systems and networks are prepared for a shutdown of the
Software feature.

% Failed to initialize nvram
cisco CSR1000V (VXE) processor (revision VXE) with 2186344K/3075K bytes of memory.
Processor board ID 9MJXF16X1D5
1 Gigabit Ethernet interface
32768K bytes of non-volatile configuration memory.
3985000K bytes of physical memory.
20357119K bytes of virtual hard disk at bootflash:.
0K bytes of WebUI ODM Files at webui:.

%INIT: waited 0 seconds for NVRAM to be available
PARSER-ERROR: (3) unexpected stale csb (0)


Press RETURN to get started!

Telnet接続したSerialConsoleに出力されるBootLogを貼り付けておきます。
c1kvのBootLog

3.c1kvへのログインとその他諸々

3-1.n9kvへのログイン

c1kvへのログインはパスワード無しでログイン可能ですので、あとは通常のCiscoIOSライクに扱ってください。

3-2.tftp config取得サービスの停止

起動直後に以下の出力でちょいちょい止まる場合がありますが、

%Error opening tftp://192.168.122.1/Router-confg (Timed out)
%Error opening tftp://192.168.122.1/Router-confg (Timed out)

以下のコマンドで停止することが可能です。

Router#conf t
Router(config)#no service config
3-3.Console出力の変更方法

Console出力ですが、以下のコマンドでSerial or Virtualの変更が可能です。
autoがどのような挙動になるかは未検証なので実際にやってみてください。

Router(config)#platform console ?
  auto     Autodetect console (Serial,VGA) for IOS output
  serial   Use Serial console for IOS output
  virtual  Use VM (VGA) console for IOS output
       
3-4.SR-IOVの確認

インストール時にアサインした2つ目以降のNICはSR-IOVのVFを指定しましたが、正常に認識されているかはshow interfacesで確認可能です。

Router#sh int g2
GigabitEthernet2 is administratively down, line protocol is down 
  Hardware is CSR vNIC, address is 0011.2233.4455 (bia 0011.2233.4455)
  MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec, 
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation ARPA, loopback not set
  Keepalive set (10 sec)
  Full Duplex, 1000Mbps, link type is auto, media type is Virtual
  output flow-control is unsupported, input flow-control is unsupported
  ARP type: ARPA, ARP Timeout 04:00:00
  Last input never, output never, output hang never
  Last clearing of "show interface" counters never
  Input queue: 0/375/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: fifo
  Output queue: 0/40 (size/max)

ポイントはホストOS上のip link showで表示されるVFのMACアドレスと同一か?という点です。

[root@ ~]# ip link show
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1:  mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
    link/ether ac:16:2d:bb:9e:c0 brd ff:ff:ff:ff:ff:ff
3: eno2:  mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
    link/ether ac:16:2d:bb:9e:c1 brd ff:ff:ff:ff:ff:ff
4: ens1f0:  mtu 9198 qdisc mq state UP mode DEFAULT qlen 1000
    link/ether a0:36:9f:3e:6d:68 brd ff:ff:ff:ff:ff:ff
    vf 0 MAC 00:11:22:33:44:55, spoof checking off, link-state auto, trust off, query_rss off
    vf 1 MAC 00:11:22:33:44:56, spoof checking off, link-state auto, trust off, query_rss off
5: eno3:  mtu 1500 qdisc mq state DOWN mode DEFAULT qlen 1000
    link/ether ac:16:2d:bb:9e:c2 brd ff:ff:ff:ff:ff:ff
6: eno4:  mtu 1500 qdisc mq state DOWN mode DEFAULT qlen 1000
    link/ether ac:16:2d:bb:9e:c3 brd ff:ff:ff:ff:ff:ff
7: ens1f1:  mtu 9198 qdisc mq state UP mode DEFAULT qlen 1000
    link/ether a0:36:9f:3e:6d:6a brd ff:ff:ff:ff:ff:ff
    vf 0 MAC 00:11:22:33:44:57, spoof checking off, link-state auto, trust off, query_rss off
    vf 1 MAC 00:11:22:33:44:58, spoof checking off, link-state auto, trust off, query_rss off

以上です。

4.最後に

仮想マシンのインストールはいくつかのパターンがあるので、実際にインストールしてみて&壊してを繰り返していくうちにフィーリングがわかってくると思います。ただ、一度も成功したことがないと、今の状態は正常なのか?といった判断がつかないと思うので、何度か試してみることをお勧めします。

*1:VNCサーバのインストール方法について、ここではあえて触れません、あしからず。

*2:公式Docに従ってvirtioにしています。e1000では未検証です。

*3:ホストOS自身に設定されたIPであれば127.0.0.1でも192.168~でも可。0.0.0.0は自身のどのIPからでも要求を受け付けるために設定しています。

*4:SR-IOVの設定は事前に行っておいてください。 metonymical.hatenablog.com

CentOS7でNexus9000vのセットアップ

CentOS7でCisco Nexus9000vのセットアップを実施したため、その手順を記載しておきます。

n9kvはqcow2ファイルをデプロイできるので、vMXよりは敷居が下がると思います。

以下の公式Docに沿って記載したいところですが、qemu直叩き方法しか記載がないため、直観的にはあまり役に立たないかもしれません。
Cisco Nexus 9000v Guide - Cisco Nexus 9000v [Cisco Nexus 9000 Series Switches] - Cisco

また、n9kvはBIOSではなくUEFIによる起動となるため、その準備をしっかり書きたいと思います。
さらに、ライセンス上、検証用途やコマンド確認用途に制限されているためなのか?足回りとしては、virtio(正確にはe1000)でのみ構成可能です。SR-IOVのVF直掴みはできませんでした。

1.環境

筐体                             : ProLiant DL360e Gen8
System ROM                       : P73 01/22/2018
NIC                              : Intel X540-AT2
OS                               : CentOS7.4(1708)
Kernel                           : kernel-3.10.0-693.21.1.el7.x86_64
Installed Environment Groups     : Server with GUI
Add-Ons for Selected Environment : Virtualization Client, Virtualization Hypervisor, Virtualization Tools 

2.UEFIの準備

以下のサイトを参考にさせて頂きました。
CentOS 7 : KVM : UEFI で起動する : Server World

2-1.リポジトリの作成
[root@ ~]# vi /etc/yum.repos.d/kraxel.repo

[qemu-firmware-jenkins]
name=firmware for qemu, built by jenkins, fresh from git repos
baseurl=https://www.kraxel.org/repos/jenkins/
enabled=0
gpgcheck=0
2-2.OVMF(Open Virtual Machine Firmware)のインストールと確認
yum --enablerepo=qemu-firmware-jenkins -y install OVMF

[root@ ~]#  ls -Fal /usr/share/OVMF/
total 6624
drwxr-xr-x    2 root root      75 Apr 24 09:32 ./
drwxr-xr-x. 263 root root    8192 Apr 24 09:32 ../
-rw-r--r--    1 root root 3653632 Aug  4  2017 OVMF_CODE.secboot.fd
-rw-r--r--    1 root root  540672 Aug  4  2017 OVMF_VARS.fd
-rw-r--r--    1 root root 2576384 Aug  4  2017 UefiShell.iso
2-3.qemu.confファイルの編集

vi /etc/libvirt/qemu.conf
で開いて、
682行目に以下を追記。もしくはコメントアウトでも可能。
nvram = [
"/usr/share/OVMF/OVMF_CODE.secboot.fd:/usr/share/OVMF/OVMF_VARS.fd"
]

[root@ ~]# vi /etc/libvirt/qemu.conf
~・~中略~・~
# Location of master nvram file
#
# When a domain is configured to use UEFI instead of standard
# BIOS it may use a separate storage for UEFI variables. If
# that's the case libvirt creates the variable store per domain
# using this master file as image. Each UEFI firmware can,
# however, have different variables store. Therefore the nvram is
# a list of strings when a single item is in form of:
#   ${PATH_TO_UEFI_FW}:${PATH_TO_UEFI_VARS}.
# Later, when libvirt creates per domain variable store, this list is
# searched for the master image. The UEFI firmware can be called
# differently for different guest architectures. For instance, it's OVMF
# for x86_64 and i686, but it's AAVMF for aarch64. The libvirt default
# follows this scheme.
#nvram = [                                 ←ここをコメントアウトしても可能
#   "/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd",
#   "/usr/share/OVMF/OVMF_CODE.secboot.fd:/usr/share/OVMF/OVMF_VARS.fd", ←ここをコメントアウトして「,」を削除でも可能
#   "/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd"
#]                                     ←ここをコメントアウトしても可能
nvram = [
   "/usr/share/OVMF/OVMF_CODE.secboot.fd:/usr/share/OVMF/OVMF_VARS.fd"
]

# The backend to use for handling stdout/stderr output from
# QEMU processes.
2-4.一旦、libvirtdのリスタート

systemctl restart libvirtd
で、リスタート

[root@ ~]# systemctl status libvirtd
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-04-24 09:34:28 JST; 6s ago
     Docs: man:libvirtd(8)
           http://libvirt.org
 Main PID: 3616 (libvirtd)
   CGroup: /system.slice/libvirtd.service
           tq1879 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/...
           tq1880 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/...
           mq3616 /usr/sbin/libvirtd

Apr 24 09:34:28 c74x645 systemd[1]: Starting Virtualization daemon...
Apr 24 09:34:28 c74x645 systemd[1]: Started Virtualization daemon.
Apr 24 09:34:28 c74x645 dnsmasq[1879]: read /etc/hosts - 2 addresses
Apr 24 09:34:28 c74x645 dnsmasq[1879]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses
Apr 24 09:34:28 c74x645 dnsmasq-dhcp[1879]: read /var/lib/libvirt/dnsmasq/default.hostsfile
2-5.qemu-kvmのアップデート
yum -y install centos-release-qemu-ev
sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/CentOS-QEMU-EV.repo

yumcentos-release-qemu-evをインストール
通常時はrelease-qemu-evを使用しないよう無効化に設定

[root@ ~]# /usr/libexec/qemu-kvm -version
QEMU emulator version 1.5.3 (qemu-kvm-1.5.3-141.el7_4.6), Copyright (c) 2003-2008 Fabrice Bellard

yum --enablerepo=centos-qemu-ev -y install qemu-kvm-ev
systemctl restart libvirtd

[root@ ~]# /usr/libexec/qemu-kvm -version
QEMU emulator version 2.9.0(qemu-kvm-ev-2.9.0-16.el7_4.13.1)
Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers

qemu-kvmのアップデート前のVer確認
qemu-kvmのアップデート(qemu-kvm-evのインストール)
libvirtdのリスタート
qemu-kvmのアップデート後のVer確認

◆補足
以下のコマンドを打った時

yum --enablerepo=centos-qemu-ev -y install qemu-kvm-ev

以下のエラーでqemu-kvm-evがインストールできなかったときの対処法

failure: repodata/repomd.xml from centos-qemu-ev: [Errno 256] No more mirrors to try.
http://mirror.centos.org/altarch/7/virt/x86_64/kvm-common/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found

以下のようにbaseurlを変更してください。*1

[root@c75x645 vm]# vi /etc/yum.repos.d/CentOS-QEMU-EV.repo

# CentOS-QEMU-EV.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/Virtualization for more
# information

[centos-qemu-ev]
name=CentOS-$releasever - QEMU EV
#baseurl=http://mirror.centos.org/$contentdir/$releasever/virt/$basearch/kvm-common/ ←この行をコメントアウト
baseurl=http://mirror.centos.org/centos-7/7/virt/x86_64/kvm-common/ ←追記
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Virtualization

[centos-qemu-ev-test]
name=CentOS-$releasever - QEMU EV Testing
baseurl=http://buildlogs.centos.org/centos/$releasever/virt/$basearch/kvm-common/
gpgcheck=0
enabled=0

これでUEFIによる起動の準備が整いました。

3.Nexus9000vのインストール

公式Docを読む限り、qemu直叩きしてね、と記載があります。
試しにGNS3で起動させた際の ps -auxから引っ張ってきました。
(視認性を良くするため改行してますが、実際は1行になってます)

/usr/bin/qemu-system-x86_64
 -name CiscoNX-OSv9000nxosv-final.7.0.3.I7.3-1
 -m 8096M 
 -smp cpus=2 
 -enable-kvm 
 -machine smm=off 
 -boot order=c 
 -bios /opt/gns3/images/QEMU/OVMF-20160813.fd 
 -device ahci,id=ahci0,bus=pci.0 
 -drive file=/opt/gns3/projects/0d26cd09-1bdb-4be5-8587-28e02306ae72/project-files/qemu/47ac28d1-4e7e-4433-8722-ba7b1feacb2f/hda_disk.qcow2,if=none,id=drive-sata-disk0,index=0,media=disk 
 -device ide-drive,drive=drive-sata-disk0,bus=ahci0.0,id=drive-sata-disk0 
 -uuid 47ac28d1-4e7e-4433-8722-ba7b1feacb2f 
 -serial telnet:127.0.0.1:5001,server,nowait 
 -monitor tcp:127.0.0.1:46521,server,nowait 
 -net none 
 -device e1000,mac=52:ae:72:cb:2f:00,netdev=gns3-0 
 -netdev socket,id=gns3-0,udp=127.0.0.1:10001,localaddr=127.0.0.1:10000 
 -device e1000,mac=52:ae:72:cb:2f:01,netdev=gns3-1 
 -netdev socket,id=gns3-1,udp=127.0.0.1:10003,localaddr=127.0.0.1:10002 
 -device e1000,mac=52:ae:72:cb:2f:02,netdev=gns3-2 
 -netdev socket,id=gns3-2,udp=127.0.0.1:10005,localaddr=127.0.0.1:10004 
 -nographic

これを毎回打つのは辛いので、virt-managerによるGUIでのインストール方法をご紹介します。
IPMIなどが無ければ、tigervncなどを起動させておきましょう。*2
そこで、まずはqcow2ファイルを/var/lib/libvirt/images/直下にコピー

cp nxosv-final.7.0.3.I7.3.qcow2 /var/lib/libvirt/images/
cd /var/lib/libvirt/images/
cp nxosv-final.7.0.3.I7.3.qcow2 n9kv01.qcow2

cd後、qcow2ファイルをコピー。失敗したときにやり直しが可能なので。

3-1.virt-managerによるインストール

File>New Virtual Machineを選択
f:id:metonymical:20180428192118j:plain

Import existing disk imageを選択して、Forwardをクリック
f:id:metonymical:20180428192255j:plain

前項でコピーしたn9kv01.qcow2を選択して、Choose Volumeをクリック
f:id:metonymical:20180428192346j:plain

下図の通りであることを確認して、Forwardをクリック
f:id:metonymical:20180428192735j:plain

下図の通りであることを確認して、Forwardをクリック
エラー出まくりですが4GBでも起動します。
CPUsは1でも起動します
f:id:metonymical:20180428192839j:plain

Nameに任意の名前を入力
Customize configuration before installにチェック(必須)
Network selectionは任意のインターフェースを選択(mgt用なので後で変更可)
f:id:metonymical:20180428193019j:plain

FirmwareUEFI x86_64: を選択(必須)
ChipsetはQ35を選択(必須)
Applyをクリック
f:id:metonymical:20180428193223j:plain

Disk busにSATAを選択(必須)
Applyをクリック
f:id:metonymical:20180428193745j:plain

Device modelにe1000を選択(必須)*3
Applyをクリック
f:id:metonymical:20180428193834j:plain

本項は、n9kvの仕様上、virt-manager上にConsole画面が表示されないため*4、ホストOSからlocalhostに対してtelnet接続をすることによりConsole画面を呼び出すため必須設定となります。

画面左下のAdd Hardwareをクリック
Serialを選択
Device TypeにTCPを選択
Hostに0.0.0.0を入力*5
Portに8888など任意のポート番号を入力
ModeにServer mode(bind)を選択
Use Telnetにチェック
Finishをクリック
f:id:metonymical:20180428194127j:plain

Begin Installationをクリックすると、以下のUEFIにて起動され、n9kv01.qcow2の読み込みが開始されます。
f:id:metonymical:20180428195018j:plain

下画面が表示されたあたりで、以降はTelnet接続したSerialConsoleへの出力オンリーとなります。
f:id:metonymical:20180428195031j:plain

3-2.初期起動時のConsole出力画面

Telnet接続したSerialConsoleに出力されるBootLogを貼り付けておきます。
n9kvのBootLog

4.n9kvへのログインと必須設定

4-1.n9kvへのログイン

以下のように、skipした後、公式Doc記載の通り、admin/パスワード無しで進みます。

Abort Power On Auto Provisioning [yes - continue with normal setup, skip - bypass password and basic configuration, no - continue with Power On Auto Provisioning] (yes/skip/no)[no]: skip
!!! NOTE: You have selected skip option. POAP will be aborted and password configuration will be skipped !!!
Disabling POAP.......
Disabling POAP

2018 Apr 28 08:37:37 switch %$ VDC-1 %$ %POAP-2-POAP_INFO: [9DPJ22T32GT-52:54:00:87:D2:95] - USB Initializing Success
2018 Apr 28 08:37:37 switch %$ VDC-1 %$ %POAP-2-POAP_INFO: [9DPJ22T32GT-52:54:00:87:D2:95] - USB disk not detected
2018 Apr 28 08:37:37 switch %$ VDC-1 %$ last message repeated 1 time
2018 Apr 28 08:37:37 switch %$ VDC-1 %$ %POAP-2-POAP_DHCP_DISCOVER_START: [9DPJ22T32GT-52:54:00:87:D2:95] - POAP DHCP Discover phase started

2018 Apr 28 08:38:17 switch %$ VDC-1 %$ %ACLQOS-SLOT1-2-ACLQOS_FAILED: ACLQOS failure: TCAM region is not configured for feature QoS class IPv4 direction ingress. Please configure TCAM region Ingress COPP [copp] and retry the command. 

Error: There was an error executing atleast one of the command
Please verify the following log for the command execution errors.
2018 Apr 28 08:38:20 switch %$ VDC-1 %$ %PLATFORM-2-MEMORY_ALERT_RECOVERED: Memory Status Alert : CRITICAL ALERT RECOVERED
TCAM region is not configured. Please configure TCAM region and retry the command

2018 Apr 28 08:38:21 switch %$ VDC-1 %$ %PLATFORM-2-MEMORY_ALERT: Memory Status Alert : SEVERE.  Usage 84% of Available Memory

User Access Verification
 login: admin
Password: パスワード無しでそのままEnter

Cisco NX-OS Software
Copyright (c) 2002-2018, Cisco Systems, Inc. All rights reserved.
Nexus 9000v software ("Nexus 9000v Software") and related documentation,
files or other reference materials ("Documentation") are
the proprietary property and confidential information of Cisco
Systems, Inc. ("Cisco") and are protected, without limitation,
pursuant to United States and International copyright and trademark
laws in the applicable jurisdiction which provide civil and criminal
penalties for copying or distribution without Cisco's authorization.

Any use or disclosure, in whole or in part, of the Nexus 9000v Software
or Documentation to any third party for any purposes is expressly
prohibited except as otherwise authorized by Cisco in writing.
The copyrights to certain works contained herein are owned by other
third parties and are used and distributed under license. Some parts
of this software may be covered under the GNU Public License or the
GNU Lesser General Public License. A copy of each such license is
available at
http://www.gnu.org/licenses/gpl.html and
http://www.gnu.org/licenses/lgpl.html
***************************************************************************
*  Nexus 9000v is strictly limited to use for evaluation, demonstration   *
*  and NX-OS education. Any use or disclosure, in whole or in part of     *
*  the Nexus 9000v Software or Documentation to any third party for any   *
*  purposes is expressly prohibited except as otherwise authorized by     *
*  Cisco in writing.                                                      *
***************************************************************************
switch# 
4-2.ログイン後の必須設定

以下のように、起動OSの設定とadminユーザのパスワード設定を行い保存します。

switch(config)# dir bootflash:
       4096    Apr 28 08:15:27 2018  .rpmstore/
       4096    Apr 28 08:15:52 2018  .swtam/
      13176    Apr 28 08:19:09 2018  20180428_081706_poap_30180_init.log
      30602    Apr 28 08:29:41 2018  20180428_082540_poap_30281_init.log
      15451    Apr 28 08:38:03 2018  20180428_083554_poap_30312_init.log
  962771456    Feb 12 19:25:05 2018  nxos.7.0.3.I7.3.bin
          0    Apr 28 08:21:37 2018  platform-sdk.cmd
       4096    Apr 28 08:17:03 2018  scripts/
       4096    Apr 28 08:15:57 2018  virtual-instance/

Usage for bootflash://sup-local
 1242206208 bytes used
 2295013376 bytes free
 3537219584 bytes total
switch(config)# boot nxos bootflash:/nxos.7.0.3.I7.3.bin
Performing image verification and compatibility check, please wait....
switch(config)# username admin password cisco
WARNING: it is based on a dictionary word
WARNING: Configuration accepted because password strength check is disabled
switch(config)# copy running-config startup-config 
[########################################] 100%
Copy complete, now saving to disk (please wait)...
Copy complete.
switch# 
4-3.上記設定の保存が上手くいってなかった場合の対処

起動OSとパスワード設定の保存がうまくいってなかった場合、reloadや次回起動時には「loader>」のプロンプトで止まります。

その場合、以下の通り、dirで.binファイルの名前を確認した後、bootコマンドで手動起動させてください。

                Loader Version 5.01.0
Entering interactive mode

loader > dir
Setting listing for bootflash: 
Number of devices detected by BIOS is 1
Number of devices detected by BIOS is 1
Number of devices detected by BIOS is 1
Going to print files for device bootflash: 1 
 .rpmstore
 nxos.7.0.3.I7.3.bin
Number of devices detected by BIOS is 1
Number of devices detected by BIOS is 1
Number of devices detected by BIOS is 1
Clearing listing for bootflash: 

loader > boot nxos.7.0.3.I7.3.bin
Booting nxos.7.0.3.I7.3.bin 
Trying diskboot 
dev_str: bootflash: partition_str: 3 filename_str /nxos.7.0.3.I7.3.bin 
command = root (hd0,3)
 Filesystem type is ext2fs, partition type 0x83
Formed cmdline  console=ttyS0,115200n8nn  loader_ver="5.01.0"  quiet debug  
Formed cmdline  console=ttyS0,115200n8nn  loader_ver="5.01.0"  quiet debug  ksimg=nxos.7.0.3.I7.3.bin  card_index=21099 dummy_sprom swiotlb=48000  
Booting kickstart image: bootflash::3:/nxos.7.0.3.I7.3.bin....
Number of devices detected by BIOS is 1
NBI header
magic: 1b031336, len: 54, location: 94400000 (bx=0, ds=9440), exec addr: 92800000 16 16 

5.インターフェースの追加

上記までのインストール方法だとmgt用インターフェースしかないため、足回り用インターフェースを追加しますので、一旦n9kvをforce offするなどして停止させてください。

5-1.インターフェース追加設定

Add Hardwareを選択
Networkを選択
Network sourceから任意のbrインターフェースを選択
Device modelからe1000を選択
Finishをクリック
f:id:metonymical:20180428195056j:plain
下図の通り、とりあえず2~3個のインターフェースを追加します。
f:id:metonymical:20180428195105j:plain

5-2.インターフェース追加後の確認

インターフェース追加前後のshow int statusを確認してみます。

インターフェース追加前

switch# sh int status

--------------------------------------------------------------------------------
Port          Name               Status    Vlan      Duplex  Speed   Type
--------------------------------------------------------------------------------
mgmt0         --                 connected routed    full    1000    --         

--------------------------------------------------------------------------------
Port          Name               Status    Vlan      Duplex  Speed   Type
--------------------------------------------------------------------------------
Eth1/1        --                 notconnec 1         auto    auto    10g        
Eth1/2        --                 notconnec 1         auto    auto    10g        
Eth1/3        --                 notconnec 1         auto    auto    10g        
Eth1/4        --                 notconnec 1         auto    auto    10g        
Eth1/5        --                 notconnec 1         auto    auto    10g        
Eth1/6        --                 notconnec 1         auto    auto    10g        
Eth1/7        --                 notconnec 1         auto    auto    10g        
Eth1/8        --                 notconnec 1         auto    auto    10g        
Eth1/9        --                 notconnec 1         auto    auto    10g        
Eth1/10       --                 notconnec 1         auto    auto    10g        

インターフェース追加後

switch# sh int status

--------------------------------------------------------------------------------
Port          Name               Status    Vlan      Duplex  Speed   Type
--------------------------------------------------------------------------------
mgmt0         --                 connected routed    full    1000    --         

--------------------------------------------------------------------------------
Port          Name               Status    Vlan      Duplex  Speed   Type
--------------------------------------------------------------------------------
Eth1/1        --                 connected 1         full    auto    10g        
Eth1/2        --                 connected 1         full    auto    10g        
Eth1/3        --                 notconnec 1         auto    auto    10g        
Eth1/4        --                 notconnec 1         auto    auto    10g        
Eth1/5        --                 notconnec 1         auto    auto    10g        
Eth1/6        --                 notconnec 1         auto    auto    10g        
Eth1/7        --                 notconnec 1         auto    auto    10g        
Eth1/8        --                 notconnec 1         auto    auto    10g        
Eth1/9        --                 notconnec 1         auto    auto    10g        
Eth1/10       --                 notconnec 1         auto    auto    10g        

6.最後に

6-1.足回りに関する考察

n9kvのPCI Host DeviceからSR-IOVのVFを直接指定した場合、show int statusでは認識されませんでした。このため、インターフェースを増やしていくには、もう少し検証が必要かなと考えています。

パッと思いつくのは、

  • ixgbevfをmodprobeしてホストOS上でVFとして認識させる
  • brインターフェースを作成しUpLinkとしてVFを指定する
  • NIC追加時のNetwork sourceに作成したbrインターフェースを指定する

といった方法です。

しかし、この方法だとixgbevfをmodprobeしなければならないため、VFを直掴みさせたい子(仮想マシン)とn9kvを共存させることができないなぁ・・・と考えており、ちょっと悩んでいます。
ただ、単なる思い付きですが、ネストしたKVM上にn9kvを展開するって方法はアリかもしれません。

               :第1階層 :第2階層
物理SW-ホストOS:NestedKVM:Nexus9000v
        :vMX
        :CSR1000v
        :vThunder
  • 第1階層ではixgbevfをmodprobeせず、全員VFを直掴みさせる
  • 第2階層ではNestedKVMでbrを作成し、それを掴ませる

AWS VPC内であれば

aws ec2 modify-instance-attribute --instance-id instance_id --sriov-net-support simple

ってな感じで、ネスト上でVFをさらにパススルーさせてるっぽい。
って考えると、ネスト上でパススルーさせなくても、brインターフェースを掴ませるくらいなら、できるかもしれないので、ダメ元でやってみる価値はありそう?

*1:URL直書きなため少々ダサい方法ですが、$basearch=x86_64のディレクトリが別なPathに移動しているようなので。

*2:VNCサーバのインストール方法について、ここではあえて触れません、あしからず。

*3:これをvirtioにすると、そもそもn9kvが起動せず「loader>」のプロンプトになります。また、後で追加するインターフェースも全てe1000で統一してください

*4:.binファイルの読み込み途中で画面が止まります。

*5:ホストOS自身に設定されたIPであれば127.0.0.1でも192.168~でも可。0.0.0.0は自身のどのIPからでも要求を受け付けるために設定しています。

CentOS7でvMXのセットアップ

CentOS7でJuniper vMXのセットアップを実施したため、その手順を記載しておきます。

vMXはCiscoやA10と異なり、qcow2ファイルをVirt-InstallVirt-Managerでデプロイするのではなく、インストール用のvmx.shを使います。
これが中々くせ者で、少しでも環境が違うと、エラーを吐いてインストールが停止してしまうため、環境構築や事前準備をしっかりやっておかないといけません。

なので、基本的には公式Docに沿って記載しつつも、その辺りのポイントをなるべく細かく書きたいと思います。
https://www.juniper.net/documentation/en_US/vmx17.2/information-products/pathway-pages/getting-started/getting-started.pdf

また、VFPの足回りとして、virtioとSR-IOVの2パターンで構成可能ですが、それぞれ特有の箇所には注釈を入れていきますので、特に注釈の無い箇所は2パターンとも共通項目だと考えてください。

1.環境

筐体                             : ProLiant DL360e Gen8, DL360p Gen8
System ROM                       : P73 01/22/2018, P71 01/22/2018
NIC                              : Intel X540-AT2, X520-SR2(82599ES)
OS                               : CentOS7.2(1511)
Kernel                           : kernel-3.10.0-327.22.2.el7.x86_64
Installed Environment Groups     : Server with GUI
Add-Ons for Selected Environment : Virtualization Client, Virtualization Hypervisor, Virtualization Tools 

2.環境構築

2-1.各種アップデート
yum -y groupinstall "virtualization-host-environment"
yum -y install "http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm"
yum -y install centos-release-scl
yum -y install python27-python-pip python27-python-devel numactl-libs libpciaccess-devel parted-devel yajl-devel libxml2-devel glib2-devel libnl-devel libxslt-devel libyaml-devel numactl-devel redhat-lsb kmod-ixgbe libvirt-daemon-kvm numactl telnet net-tools
yum -y install gcc
yum -y install "ftp://ftp.riken.jp/Linux/cern/centos/7/updates/x86_64/Packages/kernel-3.10.0-327.22.2.el7.x86_64.rpm"
yum -y install "ftp://ftp.riken.jp/Linux/cern/centos/7/updates/x86_64/Packages/kernel-devel-3.10.0-327.22.2.el7.x86_64.rpm"

解かる方には説明不要かと思いますが、上から5行目までが公式Docに記載の通り、下の2行はSystem Requirementに合わせるべくKernelのVersionを指定しています。
yum -y install kernel kernel-develとかやってしまうと最新版をDLしてしまうので。
また2行目は公式Docだとelrepo-release-7.0-2.el7.elrepo.noarch.rpmですが、既に存在しないファイルなため、上記の通りにしています。
kernel-develを入れている時点で気付かれている方がいると思いますが、vmx.shを動作させた(vMXのインストールの)際にixgbeやi40eドライバのコンパイルが走ります。

rpm -qa | grep kernel*
ls -Fal /usr/src/kernels/
ls -Fal /lib/modules/3.10.0-327.22.2.el7.x86_64/build/

一通り完了したら上記コマンドで確認しておきましょう。

2-2.SR-IOV周りの事前設定

vi /etc/default/grub
で開いて、
GRUB_CMDLINE_LINUX=の行末に以下を追記。
intel_iommu=on iommu=pt pci=realloc

[root@ ~]# vi /etc/default/grub
"/etc/default/grub" 7L, 279CGRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on iommu=pt pci=realloc"
GRUB_DISABLE_RECOVERY="true"

その後、以下を実施。

grub2-mkconfig -o /etc/grub2.cfg
grubby --update-kernel=ALL
grub2-editenv list
shutdown -r now

grub2の設定反映
kernel-3.10.0-327.22.2での起動設定
kernel-3.10.0-327.22.2での起動確認
一旦、reboot

3.事前準備

vmx.shがインストール時にPyYAML libraryを使うための準備となります。
公式Docだと3行くらいしか記載されてないですが、pipでyamlをインストールする際にしくじったため、RedHatのサイトを見ながら肉付けをしています。わからない人はこの順番でコマンド投入してください。

以下は公式Doc通り。この後すぐにpip install netifaces pyyamlするとしくじるので、

PATH=/opt/rh/python27/root/usr/bin:$PATH
export PATH

以下のコマンドを実行。

scl enable python27 bash
source scl_source enable python27

新規ファイルを作成し、再起動後も有効化させる。

[root@ ~]# vi /etc/profile.d/enablepython27.sh

#!/bin/bash
source scl_source enable python27

正しい環境変数を設定し、

export LD_LIBRARY_PATH=/opt/rh/python27/root/usr/lib64
env | grep -i LD_LIBRARY_PATH

pipをアップグレード後、netifacesとpyyamlをインストール。

pip install --upgrade pip
pip install netifaces pyyaml

以下は公式Doc通りです。

ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-system-x86_64
chattr +i /etc/resolv.conf
ls -Fal /etc/libvirt/qemu.conf

リンクを張る
NetworkMangerを無効化したくない場合の対処
qemu.confのオーナー&グループがrootであることの確認

4.各種ファイル準備と注意点

tgzファイルを以下のパスに格納して作業します。
/var/lib/libvirt/images

cd /var/lib/libvirt/images/
tar zxvf vmx-bundle-17.2R1.13.tgz
cd vmx

作業パスへ移動
tgzファイルの展開
展開したディレクトリへ移動

この後、全部で2箇所いじった後、confファイルを作成していきます。
さらに、confファイル作成後の注意点を4-5以降に記載していますが、個人的にはここが一番大事かなと思っています。

4-1.envファイルの修正

以下の修正は、vmx.shの実行中にWarringを出さないようにするための対処。
vi env/centos_sriov.env
で開いて、以下の行を
PARAMS_grub_file='/boot/grub/grub.cfg'
以下のように修正。
PARAMS_grub_file='/boot/grub2/grub.cfg'

[root@vmx]# vi env/centos_sriov.env
"env/centos_sriov.env" 37L, 843C#!/bin/sh
#
# Set environment as detected
#
CHECK_ENV=1
#
# Centos checks to be enabled
#
CHECK_GRUB=1
CHECK_pkg=1
CHECK_kernel_ver=1
CHECK_qemu_ver=1
CHECK_libvirt_ver=1
CHECK_virsh=1
CHECK_ixgbe=1
CHECK_i40e=1
#
# Define values for Centos
#
PARAMS_pkg_list='qemu-kvm libvirt-client bridge-utils python libyaml-devel numactl numactl-devel parted-devel libpciaaccess-devel yajl-devel libxml2-devel glib2-devel libnl-devel'
PARAMS_pkg_cmd='yum list installed'
PARAMS_grub_file='/boot/grub2/grub.cfg'
PARAMS_grub_user_file='/etc/default/grub'
PARAMS_kernel_ver='3.10.0-327' # or greater
PARAMS_kernel_delimiter='-generic'
PARAMS_qemu_ver='1.5.3' # or greater
PARAMS_qemu_bin='qemu-system-x86_64'
PARAMS_libvirt_ver='1.2.17' # or greater
PARAMS_libvirt_bin='libvirtd'
PARAMS_libvirt_service='libvirtd'
PARAMS_num_hugepages_per_numa_node=8192
4-2.ヘッダファイルの修正(SR-IOVのみ)

以下の修正は、vmx.shの実行中、i40eドライバのコンパイルを停止させないための対処。
vi drivers/i40e-1.3.46/src/i40e/kcompat.h
で開いて、以下の行を検索
#define NDO_DFLT_BRIDGE_GETLINK_HAS_BRFLAGS
上記の行の直下に以下を追記。
#define NDO_BRIDGE_GETLINK_HAS_FILTER_MASK_PARAM

[root@vmx]# vi drivers/i40e-1.3.46/src/i40e/kcompat.h
~・~中略~・~
/* RHEL 7.2 backported napi_alloc_skb and friends */
static inline struct sk_buff *__kc_napi_alloc_skb(struct napi_struct *napi, unsigned int length)
{return netdev_alloc_skb_ip_align(napi->dev, length);
}
#define napi_alloc_skb(napi,len) __kc_napi_alloc_skb(napi,len)
#define __napi_alloc_skb(napi,len,mask) __kc_napi_alloc_skb(napi,len)
#endif /* SKB_ALLOC_NAPI */
#define HAVE_CONFIG_PM_RUNTIME
#if (RHEL_RELEASE_CODE && (RHEL_RELEASE_CODE > RHEL_RELEASE_VERSION(6,7)) && \(RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7,0)))
#define HAVE_RXFH_HASHFUNC
#endif /* 6.7 < RHEL < 7.0 */
#if RHEL_RELEASE_CODE && (RHEL_RELEASE_CODE > RHEL_RELEASE_VERSION(7,1))
#define HAVE_RXFH_HASHFUNC
#define NDO_DFLT_BRIDGE_GETLINK_HAS_BRFLAGS
#define NDO_BRIDGE_GETLINK_HAS_FILTER_MASK_PARAM
#endif /* RHEL > 7.1 */
#ifndef napi_schedule_irqoff
#define napi_schedule_irqoff    napi_schedule
#endif
#ifndef READ_ONCE
#define READ_ONCE(_x) ACCESS_ONCE(_x)
#endif
#if RHEL_RELEASE_CODE && (RHEL_RELEASE_CODE > RHEL_RELEASE_VERSION(7,2))
#define HAVE_NDO_FDB_ADD_VID
#endif

!注意!
上記の方法は、vmx.shを最後まで走らせるため(i40eドライバのコンパイルを完了させるためだけ)の措置なので、商用でX710使うぜッ!っていう方は、必ずJTACに確認しましょう。

4-3.confファイル作成:SR-IOVの場合

以下にサンプルconfファイルを記載しておきます。
ポイントは、#vPFE VM parametersの項で、device-type : sriov と記載している点です。

[root@vmx]# vi config/vmx01.conf

##############################################################
#
#  vmx.conf
#  Config file for vmx on the hypervisor.
#  Uses YAML syntax.
#  Leave a space after ":" to specify the parameter value.
#
##############################################################

#Configuration on the host side - management interface, VM images etc.
HOST:
    identifier                : vmx01   # Maximum 6 characters
    host-management-interface : eno1
    routing-engine-image      : "/var/lib/libvirt/images/vmx/images/junos-vmx-x86-64-17.2R1.13.qcow2"
    routing-engine-hdd        : "/var/lib/libvirt/images/vmx/images/vmxhdd.img"
    forwarding-engine-image   : "/var/lib/libvirt/images/vmx/images/vFPC-20170523.img"

#External bridge configuration
BRIDGES:
    - type  : external
      name  : br-ext                  # Max 10 characters

#vRE VM parameters
CONTROL_PLANE:
    vcpus       : 1
    memory-mb   : 4096
    console_port: 8603

    interfaces  :
      - type      : static
        ipaddr    : 192.168.11.217
        macaddr   : "0A:00:DD:C0:DE:03"

#vPFE VM parameters
FORWARDING_PLANE:
    vcpus       : 3
    memory-mb   : 12288
    console_port: 8604
    device-type : sriov

    interfaces  :
      - type      : static
        ipaddr    : 192.168.11.218
        macaddr   : "0A:00:DD:C0:DE:13"

#Interfaces
JUNOS_DEVICES:
   - interface            : ge-0/0/0
     port-speed-mbps      : 10000
     nic                  : ens1f0
     mtu                  : 9198
     virtual-function     : 0
     mac-address          : "02:06:0A:0E:FF:E3"
     description          : "ge-0/0/0 con to ens1f0vf0"

   - interface            : ge-0/0/1
     port-speed-mbps      : 10000
     nic                  : ens1f1
     mtu                  : 9198
     virtual-function     : 0
     mac-address          : "02:06:0A:0E:FF:F3"
     description          : "ge-0/0/1 con to ens1f0vf1"
4-4.confファイル作成:virtioの場合

以下にサンプルconfファイルを記載しておきます。
ポイントは、#vPFE VM parametersの項で、device-type : virtio と記載している点です。
また、ge-0/0/0やge-0/0/1におけるホストOS側インターフェースとのバインドは、後から変更できるため、インストール時はこのままでOKです。

[root@vmx]# vi config/vmx02.conf

##############################################################
#
#  vmx.conf
#  Config file for vmx on the hypervisor.
#  Uses YAML syntax.
#  Leave a space after ":" to specify the parameter value.
#
##############################################################
#Configuration on the host side - management interface, VM images etc.
HOST:
    identifier                : vmx02   # Maximum 6 characters
    host-management-interface : eno1
    routing-engine-image      : "/var/lib/libvirt/images/vmx/images/junos-vmx-x86-64-17.2R1.13.qcow2"
    routing-engine-hdd        : "/var/lib/libvirt/images/vmx/images/vmxhdd.img"
    forwarding-engine-image   : "/var/lib/libvirt/images/vmx/images/vFPC-20170523.img"

#External bridge configuration
BRIDGES:
    - type  : external
      name  : br-ext                  # Max 10 characters


#vRE VM parameters
CONTROL_PLANE:
    vcpus       : 1
    memory-mb   : 1024
    console_port: 8601

    interfaces  :
      - type      : static
        ipaddr    : 192.168.11.215
        macaddr   : "0A:00:DD:C0:DE:01"

#vPFE VM parameters
FORWARDING_PLANE:
    memory-mb   : 4096
    vcpus       : 3
    console_port: 8602
    device-type : virtio

    interfaces  :
      - type      : static
        ipaddr    : 192.168.11.216
        macaddr   : "0A:00:DD:C0:DE:11"

#Interfaces
JUNOS_DEVICES:
   - interface            : ge-0/0/0
     mac-address          : "02:06:0A:0E:FF:E1"
     description          : "ge-0/0/0 interface"

   - interface            : ge-0/0/1
     mac-address          : "02:06:0A:0E:FF:F1"
     description          : "ge-0/0/1 interface"
4-5.注意点その1

virtioおよびSR-IOVに共通することで、host-management-interface : eno1と記載している点についてです。
私のホストOS環境上では、以下のようなインターフェース設定となっています。(RXやTXの行は不要なので削除しています)

[root@ vmx]# ifconfig
eno1: flags=4163  mtu 1500
        inet 192.168.11.161  netmask 255.255.255.0  broadcast 192.168.11.255
        inet6 fe80::ae16:2dff:febb:9ec0  prefixlen 64  scopeid 0x20
        ether ac:16:2d:bb:9e:c0  txqueuelen 1000  (Ethernet)

eno2: flags=4163  mtu 1500
        inet 192.168.12.130  netmask 255.255.255.0  broadcast 192.168.12.255
        inet6 fe80::ae16:2dff:febb:9ec1  prefixlen 64  scopeid 0x20
        ether ac:16:2d:bb:9e:c1  txqueuelen 1000  (Ethernet)

ens1f0: flags=4163  mtu 1500
        ether a0:36:9f:3e:6d:68  txqueuelen 1000  (Ethernet)

ens1f1: flags=4163  mtu 1500
        ether a0:36:9f:3e:6d:6a  txqueuelen 1000  (Ethernet)

上記の設定理由として、host-management-interface : eno1の項に書くインターフェースの要件を記載します。
(ここでは例として、eno1とします)

  1. eno1はDefaultGatewayが設定されていること。
  2. eno1は物理インターフェースであること。
  3. eno1以外のインターフェースにeno1と同一SubnetのIPを設定していないこと。

上記要件を満たさないと、いずれもvmx.shが途中で止まります。
検証した結果、

  • ダミーのDefaultGatewayIPでもOKですが、DefaultGatewayIPが2つ以上設定されてるとNG
  • eno1の代わりにbrインターフェースを指定したらvmx.shが途中で停止(bondは未検証ですが、イケるっぽい?です)
  • eno2にeno1と同一SubnetのIPを設定してもvmx.shが途中で停止

vmx.shが停止するたびに、sshセッションが切れてしまい、IPMI(iLO)経由でホストOSのIP設定をやり直すことになります。
(IPMI無し環境であれば、D-Sub9ピン or KVM(キーボード・ビデオ・マウス)経由で頑張る?)

また、vMXは起動するたびにvmx.shを実行するのですが、毎回以下のようなインターフェース設定へと変更してくれます。

[root@ vmx]# ifconfig
br-ext: flags=4163  mtu 1500
        inet 192.168.11.161  netmask 255.255.255.0  broadcast 192.168.11.255
        ether 52:54:00:9f:a0:77  txqueuelen 0  (Ethernet)

br-int-vmx01: flags=4163  mtu 1500
        ether 52:54:00:27:d7:53  txqueuelen 0  (Ethernet)

eno1: flags=4163  mtu 1500
        inet6 fe80::ae16:2dff:febb:9ec0  prefixlen 64  scopeid 0x20
        ether ac:16:2d:bb:9e:c0  txqueuelen 1000  (Ethernet)

eno2: flags=4163  mtu 1500
        inet 192.168.12.130  netmask 255.255.255.0  broadcast 192.168.12.255
        inet6 fe80::ae16:2dff:febb:9ec1  prefixlen 64  scopeid 0x20
        ether ac:16:2d:bb:9e:c1  txqueuelen 1000  (Ethernet)

ens1f0: flags=4163  mtu 1500
        ether a0:36:9f:3e:6d:68  txqueuelen 1000  (Ethernet)

ens1f1: flags=4163  mtu 1500
        ether a0:36:9f:3e:6d:6a  txqueuelen 1000  (Ethernet)

vcp-ext-vmx01: flags=4163  mtu 1500
        inet6 fe80::fc00:ddff:fec0:de01  prefixlen 64  scopeid 0x20
        ether fe:00:dd:c0:de:01  txqueuelen 500  (Ethernet)

vcp-int-vmx01: flags=4163  mtu 1500
        inet6 fe80::fc54:ff:fe2e:402b  prefixlen 64  scopeid 0x20
        ether fe:54:00:2e:40:2b  txqueuelen 500  (Ethernet)

vfp-ext-vmx01: flags=4163  mtu 1500
        inet6 fe80::fc00:ddff:fec0:de11  prefixlen 64  scopeid 0x20
        ether fe:00:dd:c0:de:11  txqueuelen 500  (Ethernet)

vfp-int-vmx01: flags=4163  mtu 1500
        inet6 fe80::fc54:ff:fe28:65a2  prefixlen 64  scopeid 0x20
        ether fe:54:00:28:65:a2  txqueuelen 500  (Ethernet)

ここで怖いなと思ったことは、

  • eno1がbr-extにバインド
  • eno1のIPがbr-extに再アサイ

という動作がvmx.sh上で行われることです。
また、vMXを停止させると、br-extらが削除され元の状態に戻ります。

なので、私は先に記載したようなインターフェース設定で、vmx.shを走らせています。
ちなみに、eno1とeno2は同一VLANとし、sshクライアントPC側では192.168.12.0/24のIPをセカンダリとして設定しています。

4-6.注意点その2

SR-IOVの場合、#Interfacesの項で1PF1VFとしている点です。
本来のsriovであれば1つのPFに複数のVFが作成可能なため、

#Interfaces
JUNOS_DEVICES:
   - interface            : ge-0/0/0
     port-speed-mbps      : 10000
     nic                  : ens1f0
     mtu                  : 9198
     virtual-function     : 0
     mac-address          : "02:06:0A:0E:FF:E3"
     description          : "ge-0/0/0 con to ens1f0vf0"

   - interface            : ge-0/0/1
     port-speed-mbps      : 10000
     nic                  : ens1f0
     mtu                  : 9198
     virtual-function     : 1
     mac-address          : "02:06:0A:0E:FF:F3"
     description          : "ge-0/0/1 con to ens1f0vf1"

としてもいいはずですが、vmx.shがエラーを吐いて止まります。
vMXのVer17系は1筐体に複数VMをサポートしていないためと思われます。
Ver18以降では1筐体に複数VMをサポートしていないとの記載が削除されているため、たぶん大丈夫なのでは?と考えています。

4-7.注意点その3

SR-IOVの場合、以下2つのNICで試しましたが、82599しか成功していません。

X540の場合、インストールは成功しますが、ip link showで確認すると、NO-CARRIERと表示されLinkUpせずの状態となります。
もしかしたら、FibreはOKだけど、CopperはNGなのでは?と推測しています。

5.インストール

以下のコマンドでインストールします。

./vmx.sh -lvf --install --cfg config/vmx01.conf

virtioの場合は、confファイル名(vmx02.conf)を変えればOKです。
-lvfはDebug用なので一発でインストールできるようになったら外して構いませんが、最初はどこでvmx.shが停止するのかわからないので付けていて損はないと思います。

出力例は長いので以下のリンクにtxtファイルを貼り付けました。
SR-IOVの場合
virtioの場合

vmx.shが正常に終了すると、virshからでも確認できるようになります。

[root@c72x642 vmx]# virhsh list
 Id    Name                           State
----------------------------------------------------
 1     vcp-vmx01                      running
 2     vfp-vmx01                      running
 3     vcp-vmx02                      running
 4     vfp-vmx02                      running

vcpやvfpへの接続は、以下のようにvmx.shで実施可能です。

[root@ vmx]# .vmx./vmx.sh --console vfp vmx02

Login Console Port For vfp-vmx02 - 8602
Press Ctrl-] to exit anytime

Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Wind River Linux 6.0.0.13 vfp-vmx02 console

vfp-vmx02 login: 
telnet> close
Connection closed.

6.インターフェースのバインド設定:virtioの場合

SR-IOVの場合はインストール時にホストOSのインターフェースとバインドさせますが、
virtioの場合はインストール後、vMX起動中のままでも変更可能です。

そこで、まずはホストOS上にbrインターフェースを準備します。
ここでは例として、ens1f0にbr300とbr301を作成します。

nmcli connection add type bridge autoconnect yes con-name br300 ifname br300
nmcli connection modify br300 bridge.stp no
nmcli connection modify br300 ipv4.method manual ipv4.address 192.168.30.130/24
nmcli connection up br300

nmcli connection add type vlan autoconnect yes con-name ens1f0.300 ifname ens1f0.300 dev ens1f0 id 300
nmcli connection modify ens1f0.300 connection.master br300 connection.slave-type bridge
nmcli connection up ens1f0.300


nmcli connection add type bridge autoconnect yes con-name br301 ifname br301
nmcli connection modify br301 bridge.stp no
nmcli connection modify br301 ipv4.method manual ipv4.address 192.168.31.130/24
nmcli connection up br301

nmcli connection add type vlan autoconnect yes con-name ens1f0.301 ifname ens1f0.301 dev ens1f0 id 301
nmcli connection modify ens1f0.301 connection.master br301 connection.slave-type bridge
nmcli connection up ens1f0.301

次にbindファイルを作成します。

[root@ vmx]# vi config/bind01.conf

##############################################################
#  vmx-junos-dev.conf
#  - Config file for junos device bindings.
#  - Uses YAML syntax.
#  - Leave a space after ":" to specify the parameter value.
#  - For physical NIC, set the 'type' as 'host_dev'
#  - For junos devices, set the 'type' as 'junos_dev' and
#    set the mandatory parameter 'vm-name' to the name of
#    the vPFE where the device exists
#  - For bridge devices, set the 'type' as 'bridge_dev'
##############################################################
interfaces :

     - link_name  : vmx_link1
       mtu        : 1500
       endpoint_1 :
         - type        : junos_dev
           vm_name     : vmx02
           dev_name    : ge-0/0/0
       endpoint_2 :
         - type        : bridge_dev
           dev_name    : br300

     - link_name  : vmx_link2
       mtu        : 1500
       endpoint_1 :
         - type        : junos_dev
           vm_name     : vmx02
           dev_name    : ge-0/0/1
       endpoint_2 :
         - type        : bridge_dev
           dev_name    : br301

endpoint_1がvMX側のインターフェースで、endpoint_2がホストOS側のインターフェースとなります。
endpoint_2のtypeには、 host_dev, junos_devなども付けられます。

作成が終わったら、以下のコマンドでバインドさせます。

[root@ vmx]# ./vmx.sh --bind-dev --cfg config/bind01.conf
Checking package ethtool..........................[OK]
Bind Bridge port br300(ge-0.0.0-vmx02)............[OK]
Bind Bridge port br301(ge-0.0.1-vmx02)............[OK]

今回はens1f0(X540やX520)にbr&vlanインターフェースを作成しましたが、これだとvMX側でVLANインターフェースを作りたい場合に困るので、ens1f0にVFを複数作成し、typeにhost_devを指定してバインドさせるのもアリだなと考えています。

7.最後に

vMXのインストールには本当に手こずりました。オンプレのこういう面が敬遠されがちなのでしょうか。。。
ただ、その一方でクラウドとの接続にはオンプレ環境が必要となる場面も出てくるため、バイモーダルITを念頭に、どっちも良いとこ取りができるようにしていこうと思っています。

また、仮想マシンのインストールにshを使い、しかもその中でドライバのコンパイルまで走らせるとは・・・という感じです。
大変よく作り込まれているなと思う反面、ドライバのヘッダファイル修正をしないとコンパイルが通らないという点については、もう少し作り込んで欲しいとも思います。

さらに、ルータを仮想化した旨みが失われないよう、他社の仮想マシンと共存させた場合のことも、考慮しないとダメな感じがしています。
というのも、Red Hat Virtualization 4.1からは、SR-IOVのVFにアタッチされた仮想マシンのライブマイグレーションが正式サポートされたので、可用性やメンテナンス性も加味した柔軟なネットワーク設計が重要になってくると考えているからです。

CentOS7でSR-IOV設定

CentOS7でSR-IOV設定を行ったため、その手順を記載しておきます。

1.環境

筐体:ProLiant DL360e Gen8
System ROM:P73 08/02/2014
NIC:Intel X540-AT2 ※1
OS:CentOS7.4
Installed Environment Groups:サーバー (GUI 使用) (graphical-server-environment) ※2

※1
X540-T2として販売されているもので、HP純正ではなくAmazonで購入したOEM提供のものです。
※2
最小限のインストール (minimal)の場合、lspciの追加インストールなどが必要なので、graphical-server-environmentを使用しています。
※3
BIOS上でSR-IOVを有効化する方法はHPガイドを参照してください。なお、私はBIOSでSR-IOVを有効化した後、OSをインストールしています。しかし、OSインストール後に、BIOS上でSR-IOVを有効化しても可能だ、という記事を見つけましたが、真相は確かめていません。

2.物理状態の確認

(1)PCIeのSlot1にX540を挿入していること。
HPガイドの14ページ目にARI(Alternative Routing ID Interpretation)機能がサポートしていないSlot番号が記載されています。ARI機能をサポートしていないPCIeのSlotにX540などSR-IOV対応NICを挿入しても、SR-IOVが有効化できない場合があるため事前に確認しておきましょう。


(2)X540のリンクが10Gbpsでリンクアップしていること。
UTPなので1Gbpsでもリンクアップした状態にすることは可能ですが、SR-IOVの有効化を行うと1Gbpsではダメだというメッセージがdmesgに表示されます。
RJ45の10Gスイッチがすぐに用意できない場合
X540-AT2は10Gポートが2ポートあるため、ループバック接続(X540-AT2の1ポート目と2ポート目をUTPで直結)にて対応しました。

3.NIC状態の確認

(1)NICが認識されていること。

# lspci |grep Eth
02:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
02:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
02:00.2 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
02:00.3 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
08:00.0 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
08:00.1 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)

(2)10000Mb/s(10Gbps)でリンクアップしていること。

# ethtool ens1f0
Settings for ens1f0:
Supported ports: [ TP ]
Supported link modes: 100baseT/Full
1000baseT/Full
10000baseT/Full
Supported pause frame use: Symmetric
Supports auto-negotiation: Yes
Advertised link modes: 100baseT/Full
1000baseT/Full
10000baseT/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Speed: 10000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: external
Auto-negotiation: on
MDI-X: Unknown
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes

4.iommuの有効化

SR-IOVを有効化する準備として、iommuを有効にします。

vi /etc/default/grub

以下のようにGRUB_CMDLINE_LINUX=行の最後に、intel_iommu=on iommu=ptを追加

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on iommu=pt"

以下のコマンドでgrub2.cfgに反映

grub2-mkconfig -o /etc/grub2.cfg

出力例

# grub2-mkconfig -o /etc/grub2.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-0b4fb8fdbcf94115af972373627c94dc
Found initrd image: /boot/initramfs-0-rescue-0b4fb8fdbcf94115af972373627c94dc.img
done

5.SR-IOVの有効化設定

起動時にVFがPCIバイスとして認識されるように設定します。

vi /etc/rc.local

最終行に以下の内容を追加

echo 2 > /sys/class/net/ens1f0/device/sriov_numvfs
echo 1 > /sys/class/net/ens1f1/device/sriov_numvfs
exit 0

上記について補足
ens1f0はX540のインターフェース名なので、ご自身の環境に合わせて変更してください。

X540-AT2は2ポートあるため、1ポート目がens1f0、2ポート目がens1f1となります。
上記設定の場合、ens1f0にVFを2ポート、ens1f1にVFを1ポートとする設定となります。

私の環境でmodprobeを行ったところ、以下の結果となってしまったため、上記の設定を行いました。

# modprobe ixgbe max_vfs=2,1
modprobe: ERROR: could not insert 'ixgbe': Invalid argument

但し、RedhatのDocを読む限り、上記設定はよろしくないそうなので、別な方法を模索しています。
理由は、systemctlになってからOS起動時に各種サービスなどが並列で実行されるらしく、rc.localも例外ではないそうなので、X540のドライバが読み込まれる前にrc.localが実行されると予期せぬエラーを引き起こす可能性があるため、だそうです。

6.rc.localに実行権限を付与

Defaultでは実行権限がないため、起動時に実行されるよう権限を付与します。

chmod +x /etc/rc.d/rc.local

7.ここで一旦再起動

reboot
もしくは
shutdown -r now

8.再びNIC状態の確認

Virtual Functionが追加表示されていればOK
★の付いてる行がVF(Virtual Function)

# lspci |grep Eth
02:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
02:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
02:00.2 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
02:00.3 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
08:00.0 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
08:00.1 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
08:10.0 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) ★1
08:10.1 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) ★2
08:10.2 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) ★3

上記出力だけだと、どのVFが、どのPCIバス、スロット、ファンクション番号に紐づいているかがわからないため、★の横に数字を記載しています。
また後述するMACアドレス固定の項も併せて参照してください。

上記について補足

再起動後にVFが作成されなかった場合、dmesg上に以下のエラーが出力されている可能性があります。
 kernel: igb 0000:02:00.1: not enough MMIO resources for SR-IOV

このときの対処方法

vi /etc/default/grub

以下のようにGRUB_CMDLINE_LINUX=行の最後に、pci=reallocを追加して再起動。

GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on iommu=pt pci=realloc"

本来、BIOSがVF用リソース割り当てを行うそうなのですが、BIOSNICの組み合わせによって、うまくいかない場合があるそうです。このため上記設定を行うことによりカーネルがVF用リソース割り当てを行えるようになるそうです。

9.modprobeのblacklistへの追加

ixgbevfを外すことによりホストOS上でVFがNICとして認識されるのを防ぎます。
但し、ホストOS上ではPCIバイスとして認識しているため、ゲストOSにアタッチすることは可能です。

vi /lib/modprobe.d/dist-blacklist.conf

最終行に以下の内容を追加

# ixgbevf driver
blacklist ixgbevf

10.VFのMACアドレス固定設定

上記9.の設定を実施するとVFのMACアドレスはオール0(00:00:00:00:00:00)となります。
このため、任意の被らないMACアドレスを指定します。

vi /etc/rc.d/rc.local

最終行に以下の内容を追加

ip link set ens1f0 vf 0 mac 00:11:22:33:44:55
ip link set ens1f0 vf 1 mac 00:11:22:33:44:56
ip link set ens1f1 vf 0 mac 00:11:22:33:44:57

上述した通り、VFとPCIバス番号などの紐付きがわからないため、
以下に紐づきがわかるよう★の横に記載しておきます。

ip link set ens1f0 vf 0 mac 00:11:22:33:44:55 ★1 08:10.0
ip link set ens1f0 vf 1 mac 00:11:22:33:44:56 ★3 08:10.2
ip link set ens1f1 vf 0 mac 00:11:22:33:44:57 ★2 08:10.1

今のところ、これを把握するには、VFをゲストOSにアタッチ後、ゲストOS上にてip link showなどでMACアドレスを確認する以外、方法はないのかな?と悩んでいます。

最後に

SR-IOV設定のHow toサイトは色々見て回ったのですが、H/WとOSの環境情報が詳細に記載されているサイトが少なかったため、環境をしっかりと記載してみました。一度でも成功すれば、どうってことない事だったりするものですが、一度も成功したことが無いときは、何が原因なのか?切り分けがつかない場合があるため、環境情報も大切だなと実感しています。

お勉強Lab

何もかかないと、いつ頃、どんなことをやってたか忘れてしまうので書き残しておきます。

社内のお勉強用として、自腹でLabを作りました。

このLabでMVNEを想定した社員一人一台EPCを提供できるようなネットワークやらサーバやら、まるっとごりっとインフラ(NW,Srv,Storageとか一々区分けする意味がない)を構築しています。

6~7年くらい前は自宅にクラウドを作って喜んでいましたが、これから自宅にEPCを作って、EAP-AKAの検証がしたいです笑

そろそろ

大学卒業も決まったみたいなので、
こちらもそろそろ再開しようかなと思います。

ずっと、ツイッターだったし!

140文字だと表現しきれないこともあったから、
実はちょいフラストレーション溜まってたし!

数日書いてみてツイッターやFBと連携するかを
検討してみたいと思います。

今は大学で所属してる音楽サークルの
追いコン(追い出しコンサート)の準備で
ちょいちょい忙しかったりするのですが、
そういったことも含めて色々書けたらなと思っています。

遊び半分と遊び感覚の違い

遊び半分
遊び半分とは、中途半端な状態である。


噛み砕いて解釈すると。。。


何かの半分であって、もう半分は遊んでいる状態。


とはいえ、ブレーキにも多少の遊びが必要なように
物事には遊びが必要な場合が往々にしてあると思う。


しかしながら、その遊びが半分を占めているのはあまり頂けない。


所謂、「箸にも棒にもならない」っていう状態に陥りかねない。


まぁ、1人で2〜3人分の才能がある方であれば、
1/2〜1/3までの遊びなら常人と同程度で、
何事もこなせちゃうんでしょうけど(笑)


遊び感覚
遊び感覚とは、集中した状態である。


噛み砕いて解釈すると。。。


自分の好きなことを時間を忘れるくらい
夢中で且つ超真剣にやっているときの感覚


とするならば、極めて集中した状態であると言える。


すごい勢いでイマジネーションが湧いてきたり、
所謂、「天が降ってくる」ような状態だと言える。


まぁ、拡大解釈とも言えるけど(笑)


人によっては「遊び感覚でやれること」を仕事にすると、
愉しくて仕方ないという状態を得られるかもしれない。


もちろん、そうではないことを仕事にした方が、
性に合っているという方も居る。


なので、決して「良し悪しのこと」を言っているわけではない。


ちなみにオレはどちらかと言えば、前者の方が好きかなぁ。


なぜかというと、孫正義さんの言葉を借りるなら、
「引きちぎれるくらい夢中になる(没頭する)」
ってことに、とても魅力を感じるから。


引きちぎれるくらい夢中になっている自分に対して、
『「オレは生きている!」と感じられるんじゃね〜の?』
って、オレは思う。