CentOS7にmininetを入れたらシャットダウンできなくなった話
Posted on 2015/08/10(Mon) 16:05 in technical
サマリー
CentOS7-1503にmininetを入れます。
systemdの影響でmininetを一度でも起動すると、正常にシャットダウンできなくなるので、簡単なワークアラウンドも併記します。
SDNアプリの開発やOpenDaylightの動作確認など、ちょこちょこ出番があるんだろうなぁ、と思いました(他人事)
手順
- openvswitchを入れる
- mininetを入れる
- 起動する
ここまで。
openvswitchを入れる
どこからでも良いので、RDOを使います。:
$ sudo yum install -y https://repos.fedorapeople.org/repos/openstack/openstack-icehouse/epel-7/rdo-release-icehouse-4.noarch.rpm $ sudo yum install -y openvswitch $ sudo systemctl enable openvswitch $ sudo systemctl start openvswitch $ systemctl status openvswitch openvswitch.service - Open vSwitch Loaded: loaded (/usr/lib/systemd/system/openvswitch.service; enabled) Active: active (exited) since Mon 2015-08-10 01:47:06 JST; 1min 16s ago Main PID: 14410 (code=exited, status=0/SUCCESS) $ sudo ovs-vsctl show 2da623d8-6095-45ac-92f4-4d1f7a043758 ovs_version: "2.1.3"
通報
mininetのインストーラにはopenvswitchを同時にインストールするオプション(-v)もあるのですが、何となく yum install openvswitch を叩いているだけな気がするので、とりあえず別々に入れます。
mininetを入れる
参考: http://techandtrains.com/2014/09/13/mininet-and-open-vswitch-on-centos-7/
入れます。:
$ sudo yum install -y git net-tools $ git clone git://github.com/mininet/mininet.git $ cd mininet $ sed -i -e "s/Fedora/CentOS/" util/install.sh $ sed -i -e "s/fedora-release/centos-release/" util/install.sh $ util/install.sh -nf $ mn --version 2.2.1
通報
mininetがifconfigでアドレス設定しようとしやがるので、ifconfigのためにnet-toolsも入れています。
これでインストール自体は完了なので、以後は諸問題に対する話です。
mininetを起動する前に
今のところ、systemd環境では、mininet起動後にシャットダウンできなくなる問題がありそうです。
こんな感じです。
$ sudo mn
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding switches:
s1
*** Adding links:
(h1, s1) (h2, s1)
*** Configuring hosts
h1 h2
*** Starting controller
c0
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet> ports
s1 lo:0 s1-eth1:1 s1-eth2:2
mininet> net
h1 h1-eth0:s1-eth1
h2 h2-eth0:s1-eth2
s1 lo: s1-eth1:h1-eth0 s1-eth2:h2-eth0
c0
mininet> exit
*** Stopping 1 controllers
c0
*** Stopping 2 links
..
*** Stopping 1 switches
s1
*** Stopping 2 hosts
h1 h2
*** Done
completed in 10.252 seconds
$ sudo systemctl poweroff
ここで、何時まで待ってもシャットダウンされないので、Ctrl+Cで無理矢理抜けて状況を見ます。
$ sudo systemctl --failed
UNIT LOAD ACTIVE SUB DESCRIPTION
firewalld.service loaded failed failed firewalld - dynamic firewall daemon
kdump.service loaded failed failed Crash recovery kernel arming
lvm2-monitor.service loaded failed failed Monitoring of LVM2 mirrors, snapshots etc. using dmeventd or progress
lvm2-pvscan@252:2.service loaded failed failed LVM2 PV scan on device 252:2
network.service loaded failed failed LSB: Bring up/down networking
openvswitch-nonetwork.service loaded failed failed Open vSwitch Internal Unit
openvswitch.service loaded failed failed Open vSwitch
plymouth-poweroff.service loaded failed failed Show Plymouth Power Off Screen
postfix.service loaded failed failed Postfix Mail Transport Agent
systemd-random-seed.service loaded failed failed Load/Save Random Seed
systemd-update-utmp.service loaded failed failed Update UTMP about System Reboot/Shutdown
systemd-user-sessions.service loaded failed failed Permit User Sessions
tuned.service loaded failed failed Dynamic System Tuning Daemon
dev-dm\x2d1.swap loaded failed failed /dev/dm-1
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
14 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
openvswitch.service 辺りを見ると、
$ sudo systemctl status openvswitch.service
openvswitch.service - Open vSwitch
Loaded: loaded (/usr/lib/systemd/system/openvswitch.service; enabled)
Active: failed (Result: exit-code) since Mon 2015-08-10 15:49:43 JST; 59s ago
Process: 2458 ExecStop=/bin/true (code=exited, status=219/CGROUP)
Process: 1105 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 1105 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/openvswitch.service
Aug 10 15:48:56 odl.localdomain systemd[1]: Starting Open vSwitch...
Aug 10 15:48:56 odl.localdomain systemd[1]: Started Open vSwitch.
Aug 10 15:49:43 odl.localdomain systemd[1]: Stopping Open vSwitch...
Aug 10 15:49:43 odl.localdomain systemd[1]: openvswitch.service: control process exited, code=exited status=219
Aug 10 15:49:43 odl.localdomain systemd[1]: Stopped Open vSwitch.
Aug 10 15:49:43 odl.localdomain systemd[1]: Unit openvswitch.service entered failed state.
$ sudo journalctl _PID=2458
-- Logs begin at Mon 2015-08-10 15:48:40 JST, end at Mon 2015-08-10 15:51:10 JST. --
Aug 10 15:49:43 odl.localdomain systemd[2458]: Failed at step CGROUP spawning /bin/true: No such file or directory
で、どうも cgroup 辺りで問題がありそうです。
流石にmininet界隈で問題になっていないはずがないだろうと思って探したところ、このIssueが参考になりそうでした。
参考: https://github.com/mininet/mininet/issues/509
結論としては、暫定的な対処ですが、mininet起動前に mount --make-rprivate / を叩いておけば回避できるようです。:
$ sudo mount --make-rprivate / $ sudo mn
現場からは以上です。