この製品のマニュアルセットは、偏向のない言語を使用するように配慮されています。このマニュアルセットでの偏向のない言語とは、年齢、障害、性別、人種的アイデンティティ、民族的アイデンティティ、性的指向、社会経済的地位、およびインターセクショナリティに基づく差別を意味しない言語として定義されています。製品ソフトウェアのユーザーインターフェイスにハードコードされている言語、RFP のドキュメントに基づいて使用されている言語、または参照されているサードパーティ製品で使用されている言語によりドキュメントに例外が存在する場合があります。シスコのインクルーシブランゲージに対する取り組みの詳細は、こちらをご覧ください。
このドキュメントは、米国シスコ発行ドキュメントの参考和訳です。リンク情報につきましては、日本語版掲載時点で、英語版にアップデートがあり、リンク先のページが移動/変更されている場合がありますことをご了承ください。あくまでも参考和訳となりますので、正式な内容については米国サイトのドキュメントを参照ください。
Cisco Nexus 9000 シリーズ デバイスは、基盤となる Linux 環境での NX-OS CLI および Bash へのアクセスに加えて、「ゲスト シェル」と呼ばれる Linux Container(LXC)内で実行される切り離された実行空間へのアクセスをサポートします。
ネットワーク管理者は、ゲスト シェル内から以下の機能を実行できます。
Linux ネットワーク インターフェイスを通じたネットワーク アクセス
Cisco Nexus 9000 ブートフラッシュへのアクセス
Cisco Nexus 9000 volatile tmpfs へのアクセス
Cisco Nexus 9000 CLI へのアクセス
Cisco NX-API REST へのアクセス
Python スクリプトのインストールおよび実行の機能
32 ビットおよび 64 ビットの Linux アプリケーションのインストールおよび実行の機能
ネイティブ ホスト システムから実行空間を切り離すことによって、他の Linux コンテナで実行しているホスト システムやアプリケーションに影響を与えることなく、アプリケーションの要件に適合するように Linux 環境をカスタマイズできます。
NX-OS デバイスでは、Linux コンテナのインストールおよび管理は、仮想サービス コマンドを使用して実行されます。ゲスト シェルは、仮想サービスの show コマンドの出力に表示されます。
(注) | デフォルトでは、ゲスト シェルは、有効化されている場合、RAM の約 5 MB およびブートフラッシュの 200 MB を占有します。Cisco NX-OS リリース 7.0(3)I2(1) 以降は、ゲスト シェルは RAM の約 35 MB を占有します。ゲスト シェルを使用しない場合は、guestshell destroy コマンドを使用すると、リソースを再利用できます。 |
Cisco NX-OS では、ゲスト シェルにアクセスできるのはネットワーク管理者です。ゲスト シェルは、システムで自動的に有効化され、run guestshell コマンドを使用してアクセスできます。これらのコマンドは、run bash コマンドと整合しており、これらのコマンドは、ゲスト シェル内で NX-OS CLI コマンドの run guestshellcommand 形式を使用して発行できます。
(注) | ゲスト シェルは、Cisco Nexus 9000 の場合は自動的に有効化されますが、Cisco Nexus 3000 の場合は有効化されません。 |
switch# run guestshell ls -al /bootflash/*.ova -rw-rw-rw- 1 2002 503 117616640 Aug 21 18:04 /bootflash/chef.ova -rw-rw-rw- 1 2002 503 83814400 Aug 21 18:04 /bootflash/pup.ova -rw-rw-rw- 1 2002 503 40724480 Apr 15 2012 /bootflash/red.ova
(注) | ゲスト シェルで実行中のユーザには、ネットワーク管理者レベルの権限が与えられています。 |
ゲスト シェルでは、多数のユーティリティと機能がデフォルトで使用できます。
ゲスト シェルには、このディストリビューション向けにビルドされたソフトウェア パッケージを Yum でインストールする機能を提供する CentOS 7 Linux で実装されます。ゲスト シェルには、ネットワーク デバイスに不可欠とされる一般的なツール(net-tools、iproute、tcpdump、OpenSSH など)が事前に実装されています。PIP と同様、追加の Python パッケージのインストール用に、Python 2.7.5 がデフォルトで含まれています。
デフォルトのゲスト シェルは、64 ビットの実行空間です。32 ビットのサポートが必要な場合は、glibc.i686 パッケージを Yum でインストールすることができます。
ゲスト シェルは、スイッチの管理ポートとデータ ポートを表示するために使用される Linux ネットワーク インターフェイスにアクセスできます。標準的な Linux メソッドおよびユーティリティ(ifconfig、ethtool など)を使用してカウンタを収集できます。インターフェイスが NX-OS CLI の VRF 内に配置されている場合、Linux ネットワーク インターフェイスはその VRF のネットワーク名前空間に配置されます。名前空間は /var/run/netns に存在し、ip netns ユーティリティは、異なる名前空間のコンテキストで実行する場合に使用できます。ユーティリティ chvrf および vrfinfo の 2 つは、異なる名前空間で実行し、プロセスが実行されている namespace/vrf に関する情報を取得する際の利便性を向上するために提供されています。
systemd は、ゲスト シェルを含む CentOS 環境のサービスを管理するために使用されます。
ゲスト シェルでは、ユーザがゲスト シェル環境からホスト ネットワーク要素に NX-OS コマンドを発行するためのアプリケーションを利用できます。dohost アプリケーションは、任意の有効な NX-OS 設定や exec コマンドを受付け、これらをホスト ネットワーク要素に発行します。
dohost コマンドを呼び出す場合、各 NX-OS コマンドを一重引用符または二重引用符で囲みます。
dohost "<NXOS CLI>"
NX-OS CLI はチェーン化が可能です。
[guestshell@guestshell ~]$ dohost "sh lldp time | in Hold" "show cdp global" Holdtime in seconds: 120 Global CDP information: CDP enabled globally Refresh time is 21 seconds Hold time is 180 seconds CDPv2 advertisements is enabled DeviceID TLV in System-Name(Default) Format [guestshell@guestshell ~]$
NX-OS CLI は、各コマンドの間にセミコロンを追加するという NX-OS スタイルのコマンド チェーン化テクニックを使用してチェーン化することもできます(セミコロンの両側にはスペースが必要です)。
[guestshell@guestshell ~]$ dohost "conf t ; cdp timer 13 ; show run | inc cdp" Enter configuration commands, one per line. End with CNTL/Z. cdp timer 13 [guestshell@guestshell ~]$
(注) | ホストで dohost コマンドを使用して発行されたコマンドは、ネットワーク管理者レベルの権限で実行されます。 NX-API に対する UDP 接続数が許容最大数である場合、dohost コマンドは失敗します。 |
NX-OS スイッチ ポートは、Linux ネットワーク インターフェイスとしてゲスト シェルに表示されます。/proc/net/dev の view stats のような標準的な Linux メソッドは、ifconfig から ethtool まですべてサポートされています。
ゲスト シェルには、多数の標準的なネットワーク ユーティリティがデフォルトで含まれており、これらは chvrfvrfcommand コマンドを使用して、さまざまな VRF で使用されます。
[guestshell@guestshell bootflash]$ ifconfig Eth1-47 Eth1-47: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 13.0.0.47 netmask 255.255.255.0 broadcast 13.0.0.255 ether 54:7f:ee:8e:27:bc txqueuelen 100 (Ethernet) RX packets 311442 bytes 21703008 (20.6 MiB) RX errors 0 dropped 185 overruns 0 frame 0 TX packets 12967 bytes 3023575 (2.8 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ゲスト シェル内では、ネットワーク状態のモニタリングが可能ですが、変更はできません。ネットワークの状態を変更するには、NX-OS CLI またはホストの bash シェルで適切な Linux ユーティリティを使用してください。
tcpdump コマンドは、ゲスト シェルでパッケージ化されており、管理ポートまたはスイッチ ポート上のパントされたトラフィックのパケット トレースが可能です。
sudo ip netns exec management ping ユーティリティは、特定のネットワーク名前空間のコンテキストでコマンドを実行するための一般的な方法です。これにより、ゲストのシェル内で以下の機能を実行できます。
[guestshell@guestshell bootflash]$ sudo ip netns exec management ping 10.28.38.48 PING 10.28.38.48 (10.28.38.48) 56(84) bytes of data. 64 bytes from 10.28.38.48: icmp_seq=1 ttl=48 time=76.5 ms
chvrf ユーティリティは、利便性向上を目的として提供されています。
guestshell@guestshell bootflash]$ chvrf management ping 10.28.38.48 PING 10.28.38.48 (10.28.38.48) 56(84) bytes of data. 64 bytes from 10.28.38.48: icmp_seq=1 ttl=48 time=76.5 ms
(注) | chvrf コマンドなしで動作するコマンドは、デフォルト VRF のコンテキスト内で実行されます。 |
たとえば、管理 VRF を通じて IP アドレス 10.0.0.1 の ping を実行する場合、コマンドは chvrfmanagementping 10.0.0.1 となります。scp や ssh など、その他のユーティリティも同様です。
例:
switch# guestshell [guestshell@guestshell ~]$ cd /bootflash [guestshell@guestshell bootflash]$ chvrf management scp foo@10.28.38.48:/foo/index.html index.html foo@10.28.38.48's password: index.html 100% 1804 1.8KB/s 00:00 [guestshell@guestshell bootflash]$ ls -al index.html -rw-r--r-- 1 guestshe users 1804 Sep 13 20:28 index.html [guestshell@guestshell bootflash]$ [guestshell@guestshell bootflash]$ chvrf management curl cisco.com <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> <p>The document has moved <a href="http://www.cisco.com/">here</a>.</p> </body></html> [guestshell@guestshell bootflash]$
システム上の VRF の一覧を取得するには、show vrf コマンドを NX-OS からネイティブに実行するか、dohost コマンド経由で実行します。
例:
[guestshell@guestshell bootflash]$ dohost 'sh vrf' VRF-Name VRF-ID State Reason default 1 Up -- management 2 Up -- red 6 Up --
ゲスト シェル内では、VRF と関連付けられたネットワーク名前空間が実際に使用される名前空間です。存在しているネットワーク名前空間を確認するだけなら、次の方法が便利です。
[guestshell@guestshell bootflash]$ ls /var/run/netns default management red [guestshell@guestshell bootflash]$
ゲスト シェル内からドメイン名を解決するには、リゾルバを設定する必要があります。ゲスト シェルで /etc/resolv.conf ファイルを編集し、ネットワークに対して適切な DNS ネームサーバとドメインを含めます。
例:
nameserver 10.1.1.1 domain cisco.com
ネーム サーバおよび ドメイン情報は、NX-OS 設定から設定された内容と一致する 必要があります。
例:
switch(config)# ip domain-name cisco.com switch(config)# ip name-server 10.1.1.1 switch(config)# vrf context management switch(config-vrf)# ip domain-name cisco.com switch(config-vrf)# ip name-server 10.1.1.1
Cisco Nexus 9000 デバイスが HTTP プロキシ サーバを使用する ネットワーク内にある場合、 http_proxy および https_proxy の環境変数を ゲスト シェル内でも設定する必要があります。
例:
export http_proxy=http://proxy.esl.cisco.com:8080 export https_proxy=http://proxy.esl.cisco.com:8080
これらの環境変数は、その永続性を保証するように、.bashrc ファイルまたは適切なスクリプトで設定する必要があります。
ネットワーク管理者は、NX-OS CLI コマンドを使用する以外に、Linux コマンドおよびユーティリティでもファイルを管理できます。ネットワークの管理者は、ゲスト シェル環境の /bootflash にシステム ブートフラッシュを配置することによって、Linux コマンドを使用して、これらのファイルを操作できます。
例:
find . –name “foo.txt” rm “/bootflash/junk/foo.txt”
Python は対話形式で使用できますが、Python スクリプトをゲスト シェルで実行することもできます。
例:
guestshell:~$ python Python 2.7.5 (default, Jun 24 2015, 00:41:19) [GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> guestshell:~$
Pip Python Package Manager はゲスト シェルに含まれており、これにより、ネットワーク管理者は新規の Python パッケージをインストールできます。
例:
(注) | 先に sudo su コマンドを入力した後で、pip install コマンドを入力する必要があります。 |
[guestshell@guestshell ~]$ sudo su [root@guestshell guestshell]# pip install Markdown Collecting Markdown Downloading Markdown-2.6.2-py2.py3-none-any.whl (157kB) 100% |################################| 159kB 1.8MB/s Installing collected packages: Markdown Successfully installed Markdown-2.6.2 [root@guestshell guestshell]# pip list | grep Markdown Markdown (2.6.2) [root@guestshell guestshell]#
/etc/yum.repos.d/CentOS-Base.repo ファイルは、デフォルトで CentOS ミラー リストを使用するようにセットアップされています。変更が必要な場合は、ファイル内の指示に従ってください。
Yum は、yumrepo_x86_64.repo ファイルを変更するか、新規の .repo ファイルを repos.d ディレクトリに追加することにより、いつでも複数のリポジトリをポイントできます。
ゲスト シェル 2.1 内にインストールされるアプリケーションの場合は、http://mirror.centos.org/centos/7/os/x86_64/Packages/の CentOS 7 repo に移動してください。
Yum は、依存関係を解決し、必要なパッケージのすべてをインストールします。
[guestshell@guestshell ~]$ sudo chvrf management yum -y install glibc.i686 Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: bay.uchicago.edu * extras: pubmirrors.dal.corespace.com * updates: mirrors.cmich.edu Resolving Dependencies "-->" Running transaction check "--->" Package glibc.i686 0:2.17-78.el7 will be installed "-->" Processing Dependency: libfreebl3.so(NSSRAWHASH_3.12.3) for package: glibc-2.17-78.el7.i686 "-->" Processing Dependency: libfreebl3.so for package: glibc-2.17-78.el7.i686 "-->" Running transaction check "--->" Package nss-softokn-freebl.i686 0:3.16.2.3-9.el7 will be installed "-->" Finished Dependency Resolution Dependencies Resolved ============================================================================================================================================================================ Package Arch Version Repository Size ============================================================================================================================================================================ Installing: glibc i686 2.17-78.el7 base 4.2 M Installing for dependencies: nss-softokn-freebl i686 3.16.2.3-9.el7 base 187 k Transaction Summary ============================================================================================================================================================================ Install 1 Package (+1 Dependent package) Total download size: 4.4 M Installed size: 15 M Downloading packages: Delta RPMs disabled because /usr/bin/applydeltarpm not installed. (1/2): nss-softokn-freebl-3.16.2.3-9.el7.i686.rpm | 187 kB 00:00:25 (2/2): glibc-2.17-78.el7.i686.rpm | 4.2 MB 00:00:30 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Total 145 kB/s | 4.4 MB 00:00:30 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : nss-softokn-freebl-3.16.2.3-9.el7.i686 1/2 Installing : glibc-2.17-78.el7.i686 2/2 error: lua script failed: [string "%triggerin(glibc-common-2.17-78.el7.x86_64)"]:1: attempt to compare number with nil Non-fatal "<"unknown">" scriptlet failure in rpm package glibc-2.17-78.el7.i686 Verifying : glibc-2.17-78.el7.i686 1/2 Verifying : nss-softokn-freebl-3.16.2.3-9.el7.i686 2/2 Installed: glibc.i686 0:2.17-78.el7 Dependency Installed: nss-softokn-freebl.i686 0:3.16.2.3-9.el7 Complete!
(注) | パッケージのインストールや実行のためにゲスト シェルのルート ファイル システムの容量拡大が必要になった場合には、guestshell resize roofssize-in-MB コマンドを使用して、ファイル システムのサイズを拡大してください。 |
(注) | 一部のリポジトリのオープン ソース ソフトウェア パッケージは、ホスト システムの整合性を保護するための制約の結果として、ゲスト シェルで期待通りのインストールまたは実行されないことがあります。 |
デフォルトでは、ゲスト シェルのリソースは、通常のスイッチの動作に使用可能なリソースに対してほどんど影響しません。ネットワーク管理者がゲスト シェルに追加のリソースを要求する場合には、guestshell resize {cpu | memory | rootfs} コマンドでこれらの制限を変更できます。
Resource |
デフォルト |
最小/最大 |
---|---|---|
CPU |
1 % |
1/ % |
メモリ |
256 MB |
256/3840 MB |
ストレージ |
200 MB |
200/2000 MB |
CPU の制限は、システム内の他のコンピューティング負荷との競合があるときに、ゲスト シェル内で実行するタスクに与えられるシステムのコンピューティング容量のパーセンテージを表します。CPU リソースの競合がない場合、ゲスト シェル内のタスクは制限されません。
(注) | リソース割り当ての変更後には、ゲスト シェルの再起動が必要です。これは、guestshell reboot コマンドで実行できます。 |
Cisco Nexus 9000 シリーズ デバイスでのゲスト シェルおよび仮想サービスの使用は、ネットワーク管理者がシステムの機能を管理または拡張するための数多くの手段の内の 2 つにすぎません。これらの選択肢は、ネイティブ ホスト コンテキストから切り離された実行環境の提供を目的としたものです。この分離により、ネイティブ実行環境との互換性がない可能性のあるソフトウェアのシステムへの導入が可能になります。また、システムの動作、パフォーマンス、拡張を阻害しない環境でのソフトウェアの実行も可能になります。
シスコの各種ネットワーク要素はデフォルトで、アプリケーションが有効なシスコ デジタル署名を実行時に提供することを要求します。シスコ デジタル署名により、シスコが開発したパッケージとアプリケーションの整合性が確保されます。
Cisco Nexus 9000 シリーズ スイッチは、署名なしの OVA ソフトウェア パッケージの対応として、署名レベルのポリシーの設定をサポートします。署名なしのパッケージとシスコの署名付きのパッケージを仮想サービスの作成に使用するために、ネットワーク管理者は次のような設定ができます。
virtual-service signing level unsigned
(注) | ゲスト シェルのソフトウェア パッケージにはシスコの署名があり、この設定は不要です。 |
シスコでは、既知の脆弱性に対応するプラットフォームのアップデートで、関連の Common Vulnerabilities and Exposures(CVE)に対応しています。
Cisco Nexus 9000 NX-OS は、ランタイムの保護に Address Space Layout Randomization(ASLR)および Executable Space Protection(X-Space)の使用をサポートします。シスコの署名付きのパッケージ内のソフトウェアは、この機能を利用します。他のソフトウェアがシステムにインストールされている場合、これらのテクノロジーをサポートするホスト OS および開発ツールチェーンを使用してシステムを構築することが推奨されます。この推奨に従うことで、ソフトウェアが原因で潜在的な侵入者がアクセス可能になる攻撃対象を狭めることができます。
セキュアなコード開発のためのベスト プラクティスとして、割り当てられたタスクの実行に必要な最小限の権限でアプリケーションを実行することが推奨されます。意図しないアクセスを回避するために、ゲスト シェルに追加するソフトウェアは、このベスト プラクティスに従う必要があります。
仮想サービス内のすべてのプロセスには、Linux 機能の縮小によって生じる制約事項があります。アプリケーションでルート権限を必要とする動作を実行する場合、絶対にルート アクセスを必要とする動作の最小セットのみにルート アカウントの使用を制限し、その他、アプリケーションがそのモードで実行できる時間に対して厳密な制限を設けるなどの制御を適用します。
仮想サービス内のルートでドロップされる Linux 機能は以下のとおりです。
CAP_SYS_BOOT |
CAP_MKNOD |
CAP_SYS_PACCT |
CAP_SYS_MODULE |
CAP_MAC_OVERRIDE |
CAP_SYS_RESOURCE |
CAP_SYS_TIME |
CAP_SYS_RAWIO |
CAP_AUDIT_WRITE |
CAP_AUDIT_CONTROL |
CAP_SYS_NICE |
CAP_NET_ADMIN |
CAP_MAC_ADMIN |
CAP_SYS_PTRACE |
仮想サービス内のルートとして、tmpfs および ramfs マウントと同様に、bind マウントを使用できます。他のマウントは使用が制限されています。
ホストと仮想サービスは、別々の名前空間に分離されています。これは、仮想サービスの実行空間をホストから分離するための基盤となります。名前空間の分離は、信頼境界間での偶発的または故意のデータ上書きによるデータ消失やデータ破壊からの保護に役立ちます。また、信頼境界間のデータ漏えい防止によって、機密データの整合性が保証されます。ある仮想サービスのアプリケーションは別の仮想サービスのデータにアクセスできません。
仮想サービス内のファイルの整合性を維持するために、仮想サービスのファイル システムは NX-OS CLI からアクセスできないようになっています。特定の仮想サービスでファイルの変更を許可する場合は、変更を実現するための代替手段(yum install、scp、ftp など)を提供する必要があります。
ゲスト シェルは、ホスト システムの bootflash を /bootflash にマウントします。ネットワーク管理者は、ゲスト シェル内から NX-OS CLI または Linux コマンドを使用してファイルにアクセスできます。
サービス拒否(DoS)攻撃は、マシンやネットワーク リソースを本来の利用者が使用できないようにしようとする試みです。不正動作や悪意のあるアプリケーション コードは、接続帯域幅、ディスク容量、メモリ、その他のリソースの過剰消費を引き起こし、DoS につながります。ホストは、ホスト上のすべての仮想サービスにリソースを公平に割り当てるためのリソース管理機能を提供します。
ゲスト シェルには次の注意事項と制約事項があります。
各スイッチにログインし、各ゲスト シェル 1.0 でカスタム作業を実行している場合は、リリース 7.0(3)i2(1) にアップグレードする前に、そのカスタム コンテンツをブートフラッシュまたはオフボックス ストレージに保存し、新しいイメージをブートした後、その固有のコンテンツのコピーを戻す(またはブートフラッシュから使用する)ことをお勧めします。
.conf ファイルのオフボックス リポジトリおよびゲスト シェル 1.0 にコンテンツをプルするユーティリティがある場合は、ゲスト シェル 2.1 で同じ導入手順を繰り返す必要があります。導入スクリプトは、CentOS の違いに対応するように調整する必要があります。
ゲスト シェル 1.0 の場合と同様に、Cisco Nexus デバイスのゲスト シェル 2.1 にアクセスする CLI は、ホスト シェルのアクセスに使用する run bash コマンドと並列実行する run guestshell コマンドです。このコマンドでは、ゲスト シェルにアクセスして bash プロンプトを取得したり、ゲスト シェルのコンテキスト内でコマンドを実行することができます。このコマンドは、デフォルトのネットワーク名前空間の localhost で使用可能なポートへのアクセスにパスワードなしの SSH を使用します。
事前設定された SSH のゲスト シェル内へのアクセスを保護するために、多数の手法が使用されています。
外部ネットワークからの接続試行を防ぐために、sshd は localhost でリスニングします
sshd は、パスワードへのフォールバックなしのキー ベースの認証用に設定されています
アクセスに使用されるキーは、ゲスト シェルが再起動されるたびに再生成され、ホスト システムのルート プロセスのみが読み取りできます
ホスト上のキーが含まれるファイルは、ルートのみが読み取り可能です。これにより、ホストの Bash にアクセスできる非特権ユーザがキーを使用してゲスト シェルに接続することを防止できます。
ネットワーク管理ユーザは、ゲスト シェルで sshd の別のインスタンスを起動して、ゲスト シェルへの直接的なリモート アクセスを許可できますが、ゲスト シェルにログインするすべてのユーザにネットワーク管理者権限が付与されます。
認証キー ファイルのアクセス許可を設定してルートのみが読み取り可能にすることで、非ネットワーク管理者ユーザがホストの Bash シェルにアクセスし、コンテナ内への ssh 接続を試みて、コマンド権限を昇格することを防止できます。ホストのルート アクセス権を持つユーザは、これをバイパスしたり、nsenter などのユーティリティを使用して、任意の名前空間のコンテキストで直接実行することができます。
ネットワーク状態のモニタリングは許可されますが、ネットワーク状態の変更は許可されません。
管理ポートおよびスイッチ ポートでのパントされたパケットのキャプチャは許可されますが、内部 EOBC インターフェイス上でのパケット キャプチャまたは通信は許可されません。
これらを行う必要がある場合、次のホスト bash セッションを使用できます。
- configure "feature bash"
- exec "run bash"
ゲスト シェルは、ホストシステムの /etc/localtime を共有します。
Cisco Nexus 9000 NX-OS は、デフォルトで自動的にゲスト シェルのインストールおよび有効化を行います。ただし、ゲスト シェルをサポートしない Cisco NX-OS イメージでデバイスがリロードされる場合、既存のゲスト シェルが自動的に削除され、%VMAN-2-INVALID_PACKAGE メッセージが発行されます。
(注) | RAM が 4 GB のシステムでは、ゲスト シェルはデフォルトで有効化されません。guestshell enable コマンドを入力してインストールする必要があります。 |
ベスト プラクティスとして、以前の Cisco NX-OS イメージをリロードする前に、guestshell destroy コマンドでゲスト シェルを削除してください。
install all コマンドを使用して、最新の Cisco NX-OS イメージとターゲットの Cisco NX-OS イメージとの互換性を検証します。
switch# install all nxos 9kpregs.bin Installer will perform compatibility check first. Please wait. uri is: /n9kpregs.bin 2014 Aug 29 20:08:51 switch %$ VDC-1 %$ %VMAN-2-ACTIVATION_STATE: Successfully activated virtual service 'guestshell+' Verifying image bootflash:/n9kpregs.bin for boot variable "nxos". [####################] 100% -- SUCCESS Verifying image type. [####################] 100% -- SUCCESS Preparing "lcn9k" version info using image bootflash:/n9kpregs.bin. [####################] 100% -- SUCCESS Preparing "bios" version info using image bootflash:/n9kpregs.bin. [####################] 100% -- SUCCESS Preparing "lcn9k" version info using image bootflash:/n9kpregs.bin. [####################] 100% -- SUCCESS Preparing "lcn9k" version info using image bootflash:/n9kpregs.bin. [####################] 100% -- SUCCESS Preparing "nxos" version info using image bootflash:/n9kpregs.bin. [####################] 100% -- SUCCESS Preparing "lcn9k" version info using image bootflash:/n9kpregs.bin. [####################] 100% -- SUCCESS Preparing "lcn9k" version info using image bootflash:/n9kpregs.bin. [####################] 100% -- SUCCESS "Running-config contains configuration that is incompatible with the new image (strict incompatibility). Please run 'show incompatibility-all nxos <image>' command to find out which feature needs to be disabled.". Performing module support checks. [####################] 100% -- SUCCESS Notifying services about system upgrade. [# ] 0% -- FAIL. Return code 0x42DD0006 ((null)). "Running-config contains configuration that is incompatible with the new image (strict incompatibility). Please run 'show incompatibility-all nxos <image>' command to find out which feature needs to be disabled." Service "vman" in vdc 1: Guest shell not supported, do 'guestshell destroy' to remove it and then retry ISSU Pre-upgrade check failed. Return code 0x42DD0006 ((null)). switch#
ゲスト シェル 2.1 には、Guest Shell Centos 7.0 ディストリビューション用に修正済みの Common Vulnerabilities and Exposures(CVE)が複数含まれています。ゲスト シェル 2.0 以降、新しい機能は追加されていません。
新しく Cisco Nexus 9000 シリーズ スイッチの 7.0(3)I3(1) リリースをインストールすると、自動的にゲスト シェル バージョン 2.1 が取得されます。
7.0(3)I2(2a) リリースから 7.0(3)I3(1) リリースにアップグレードすると、引き続き 7.0(3)I3(1) リリースでゲスト シェル 2.0 が実行されます。
guestshell upgrade コマンドを使用すると、ゲスト シェルを 2.0 から 2.1 にアップグレードできます。
ゲスト シェル 2.1 にアップグレードする前に、カスタム コンテンツ(該当する場合)をブートフラッシュまたはオフボックス ストレージに保存し、アップグレード後に、その固有のコンテンツのコピーを戻す(またはブートフラッシュから使用する)ことができます。
(注) | ゲスト シェルは、システム イメージのアップグレード時に最新の 2.X リリースに自動的にアップグレードされることはありません。これは、意図的に rootfs の内容を維持するための処置です。ゲスト シェルをアップグレードすると、既存の rootfsが破棄され、最新版に置き換えられるためです。 |
次の手順は、ゲスト シェルの Common Vulnerabilities and Exposures(CVE)による影響を判断し、対処するために役立ちます。
次に、ゲスト シェルを管理するためのコマンドを示します。
コマンド |
説明 |
||
---|---|---|---|
guestshell enable [packageguest shell OVA file] |
システム イメージに組み込まれた OVA を使用してゲスト シェルのインストールおよびアクティブ化を行います。 指定されているソフトウェア パッケージ(OVA ファイル)またはシステム イメージの組み込みパッケージ(パッケージが指定されていない場合)を使用して、ゲスト シェルのインストールおよびアクティブ化を行います。初期状態では、ゲスト シェル パッケージはシステム イメージに組み込まれている場合にのみ使用可能になります。 ゲスト シェルがすでにインストールされている場合は、このコマンドによってインストール済みゲスト シェルが有効化されます。通常、これは guestshell disable コマンドの後に使用されます。 |
||
guestshell disable |
ゲスト シェルをシャットダウンし、無効化します。 |
||
guestshell upgrade [packageguest shell OVA file] |
指定されているソフトウェア パッケージ(OVA ファイル)またはシステム イメージの組み込みパッケージ(パッケージが指定されていない場合)を使用して、ゲスト シェルの非アクティブ化およびアップグレードを行います。初期状態では、ゲスト シェル パッケージはシステム イメージに組み込まれている場合にのみ使用可能になります。 ゲスト シェルの現在の rootfs は、ソフトウェア パッケージの rootfs に置き換えられます。ゲスト シェルは、アップグレード後も持続するセカンダリ ファイルシステムを使用しません。永続的なセカンダリ ファイルシステムなしでも、guestshell destroy コマンドの後に guestshell enable コマンドを使用することで、rootfs を置き換えることができます。アップグレードが成功すると、ゲスト シェルが有効化されます。 アップグレード コマンドの実行前には確認が求められます。 |
||
guestshell reboot |
ゲスト シェルを非アクティブ化した後、再度アクティブ化します。 リブート コマンドの実行前には確認が求められます。
|
||
guestshell destroy |
ゲスト シェルを非アクティブ化して、アンインストールします。ゲスト シェルに関連付けられたすべてのリソースがシステムに戻されます。show virtual-service global コマンドで、これらのリソースが利用可能になるタイミングが示されます。 このコマンドを実行すると、破棄コマンドを実行する前に確認が求められます。 |
||
guestshell run guestshell |
シェル プロンプトですでに実行中のゲスト シェルに接続します。ユーザ名とパスワードは不要です。 |
||
guestshell runcommand run guestshellcommand |
ゲスト シェル環境のコンテキスト内で Linux / UNIX コマンドを実行します。 コマンドの実行後、スイッチのプロンプトに戻ります。 |
||
guestshell resize [cpu | memory | rootfs] |
ゲスト シェルに利用可能なリソースの割り当てを変更します。変更は、次にゲスト シェルが有効化またはリブートされたときに有効になります。 |
||
guestshell sync |
アクティブ スーパーバイザとスタンバイ スーパーバイザを備えたシステムでは、このコマンドは、アクティブ スーパーバイザのゲスト シェルの内容をスタンバイ スーパーバイザに同期させます。ネットワーク管理者は、スタンバイ スーパーバイザがアクティブ スーパーバイザに移行されるときに、スタンバイ スーパーバイザで使用されていたものと同じ rootfs を必要とするようにゲスト シェル rootfs がセットアップされている場合に、このコマンドを発行します。このコマンドを使用しない場合、スタンバイ スーパーバイザで利用可能なゲスト シェル パッケージを使用してスタンバイ スーパーバイザがアクティブ ロールに移行するときに、ゲスト シェルが新規インストールされます。 |
||
virtual-service reset force |
システムをリロードした後でもゲスト シェルや仮想サービスを管理できない場合に、このリセット コマンドを使用して、ゲスト シェルおよびすべての仮想サービスを強制的に削除します。クリーンアップを実行するには、システムをリロードする必要があります。このコマンドを発行した後は、システムのリロードが完了するまで、ゲスト シェルや追加の仮想サービスをインストールまたは有効化できません。 リセットの実行前には確認が求められます。 |
(注) | ゲスト シェル環境の有効化/無効化やアクセス権の取得には、管理者権限が必要です。 |
(注) | ゲスト シェルは、Linux コンテナ(LXC)としてホスト システムに実装されます。NX-OS デバイスでは、LXC のインストールおよび管理は、仮想サービス コマンドを使用して実行されます。ゲスト シェルは、guestshell+ という名前の仮想サービスとして virtual-service コマンドに表示されます。 |
guestshell disable コマンドを使用することで、ゲスト シェルを終了して無効化できます。
ゲスト シェルが無効化された状態でシステムをリロードすると、ゲスト シェルは無効化されたままになります。
例:
switch# show virtual-service list Virtual Service List: Name Status Package Name ----------------------------------------------------------- guestshell+ Activated guestshe11.ova switch# guestshell disable You will not be able to access your guest shell if it is disabled. Are you sure you want to disable the guest shell? (y/n) [n) y 2014 Jul 30 19:47:23 switch %$ VDC-1 %$ %VMAN-2-ACTIVATION_STATE: Deactivating virtual service 'guestshell+' 2014 Jul 30 18:47:29 switch %$ VDC-1 %$ %VMAN-2-ACTIVATION_STATE: Successfully deactivated virtual service 'guestshell+' switch# show virtual-service list Virtual Service List: Name Status Package Name guestshell+ Deactivated guestshell.ova
(注) | ゲスト シェルを再度アクティブ化する場合は、guestshell enable コマンドを使用します。 |
guestshell destroy コマンドは、ゲスト シェルおよびそのアーティファクトをアンインストールします。このコマンドを実行しても、ゲスト シェル OVA は削除されません。
ゲスト シェルが削除された状態でシステムをリロードすると、ゲスト シェルは削除されたままになります。
switch# show virtual-service list Virtual Service List: Name Status Package Name ------------------------------------------------- guestshell+ Deactivated guestshell.ova switch# guestshell destroy You are about to destroy the guest shell and all of its contents. Be sure to save your work. Are you sure you want to continue? (y/n) [n] y 2014 Jul 30 18:49:10 switch %$ VDC-1 %$ %VMAN-2-INSTALL_STATE: Destroying virtual service 'guestshell+' 2014 Jul 30 18:49:10 switch %$ VDC-1 %$ %VMAN-2-INSTALL_STATE: Successfully destroyed virtual service 'guestshell +' switch# show virtual-service list Virtual Service List:
(注) | ゲスト シェルを再度有効化する場合は、guestshell enable コマンドを使用します。 |
(注) | ゲスト シェルを使用しない場合は、guestshell destroy コマンドでゲスト シェルを削除できます。ゲスト シェルを削除すると、以降のリロードでも削除されたままになります。これは、ゲスト シェル コンテナが削除されると、スイッチをリロードしても、ゲスト シェル コンテナや oneP 機能は自動的には起動されないことを意味します。 |
guestshell enable コマンドは、ゲスト シェル ソフトウェア パッケージからゲスト シェルをインストールします。デフォルトでは、システム イメージに埋め込まれたパッケージがインストールに使用されます。このコマンドは、無効化されたゲスト シェルを再アクティブ化する際にも使用されます。
ゲスト シェルが有効化された状態でシステムをリロードすると、ゲスト シェルは有効化されたままになります。
例:
switch# show virtual-service list Virtual Service List: switch# guestshell enable 2014 Jul 30 18:50:27 switch %$ VDC-1 %$ %VMAN-2-INSTALL_STATE: Installing virtual service 'guestshell+' 2014 Jul 30 18;50;42 switch %$ VDC-1 %$ %VMAN-2-INSTALL_STATE: Install success virtual service 'guestshell+'; Activating 2014 Jul 30 18:50:42 switch %$ VDC-1 %$ %VMAN-2-ACTIVATION_STATE: Activating virtual service 'guestshell+' 2014 Jul 30 18:51:16 switch %$ VDC-1 %$ %VMAN-2-ACTIVATION_STATE: Successfully activated virtual service 'guestshell+' switch# show virtual-service list Virtual Service List: Name Status Package Name guestshell+ Activated guestshell.ova
次のコマンドを使用して、仮想サービスおよびゲスト シェルの情報を検証できます。
コマンド |
説明 |
---|---|
show virtual-service global switch# show virtual-service global Virtual Service Global State and Virtualization Limits: Infrastructure version : 1.9 Total virtual services installed : 1 Total virtual services activated : 1 Machine types supported : LXC Machine types disabled : KVM Maximum VCPUs per virtual service : 1 Resource virtualization limits: Name Quota Committed Available ----------------------------------------------------------------------- system CPU (%) 20 1 19 memory (MB) 3840 256 3584 bootflash (MB) 8192 200 7992 switch#
|
仮想サービスのグローバル状態と制限が表示されます。 |
show virtual-service list switch# show virtual-service list Virtual Service List: Name Status Package Name ----------------------------------------------------------------------- guestshell+ Activated guestshell.ova
|
仮想サービスの概要、仮想サービスのステータス、およびインストール済みのソフトウェア パッケージが表示されます。 |
show guestshell detail switch# show guestshell detail Virtual service guestshell+ detail State : Activated Package information Name : guestshell.ova Path : /isanboot/bin/guestshell.ova Application Name : GuestShell Installed version : 2.0; (preFCS.8) Description : Cisco Systems Guest Shell Signing Key type : Cisco development key Method : SHA-1 Licensing Name : None Version : None Resource reservation Disk : 200 MB Memory : 256 MB CPU : 1% system CPU Attached devices Type Name Alias --------------------------------------------- Disk _rootfs Disk /cisco/core Serial/shell Serial/aux Serial/Syslog serial2 Serial/Trace serial3 switch#
|
ゲスト シェル パッケージに関する詳細(バージョン、シグニチャのリソース、デバイスなど)が表示されます。 |
アプリケーションに systemd / systemctl サービス ファイルがあり、このファイルが in/usr/lib/systemd/system/application_name.service にインストールされている必要があります。このサービス ファイルは、次の一般形式であることが必要です。
[Unit] Description=Put a short description of your application here [Service] ExecStart=Put the command to start your application here Restart=always RestartSec=10s [Install] WantedBy=multi-user.target
次の例では、ゲスト シェル内のアプリケーションを示しています。
root@guestshell guestshell]# cat /etc/init.d/hello.sh #!/bin/bash OUTPUTFILE=/tmp/hello rm -f $OUTPUTFILE while true do echo $(date) >> $OUTPUTFILE echo 'Hello World' >> $OUTPUTFILE sleep 10 done [root@guestshell guestshell]# [root@guestshell guestshell]# [root@guestshell system]# cat /usr/lib/systemd/system/hello.service [Unit] Description=Trivial "hello world" example daemon [Service] ExecStart=/etc/init.d/hello.sh & Restart=always RestartSec=10s [Install] WantedBy=multi-user.target [root@guestshell system]# [root@guestshell system]# systemctl start hello [root@guestshell system]# systemctl enable hello [root@guestshell system]# systemctl status -l hello hello.service - Trivial "hello world" example daemon Loaded: loaded (/usr/lib/systemd/system/hello.service; enabled) Active: active (running) since Sun 2015-09-27 18:31:51 UTC; 10s ago Main PID: 355 (hello.sh) CGroup: /system.slice/hello.service ##355 /bin/bash /etc/init.d/hello.sh & ##367 sleep 10 Sep 27 18:31:51 guestshell hello.sh[355]: Executing: /etc/init.d/hello.sh & [root@guestshell system]# [root@guestshell guestshell]# exit exit [guestshell@guestshell ~]$ exit logout switch# reload This command will reboot the system. (y/n)? [n] y
リロード後
[root@guestshell guestshell]# ps -ef | grep hello root 20 1 0 18:37 ? 00:00:00 /bin/bash /etc/init.d/hello.sh & root 123 108 0 18:38 pts/4 00:00:00 grep --color=auto hello [root@guestshell guestshell]# [root@guestshell guestshell]# cat /tmp/hello Sun Sep 27 18:38:03 UTC 2015 Hello World Sun Sep 27 18:38:13 UTC 2015 Hello World Sun Sep 27 18:38:23 UTC 2015 Hello World Sun Sep 27 18:38:33 UTC 2015 Hello World Sun Sep 27 18:38:43 UTC 2015 Hello World [root@guestshell guestshell]#
アプリケーションを systemd / systemctl で実行すると、動作異常時 (または、強制終了した場合)に自動的に再起動されます。最初のプロセス ID は 226 です。アプリケーションを強制終了した後、そのアプリケーションがプロセス ID 257 で自動的に再起動されます。
[root@guestshell guestshell]# ps -ef | grep hello root 226 1 0 19:02 ? 00:00:00 /bin/bash /etc/init.d/hello.sh & root 254 116 0 19:03 pts/4 00:00:00 grep --color=auto hello [root@guestshell guestshell]# [root@guestshell guestshell]# kill -9 226 [root@guestshell guestshell]# [root@guestshell guestshell]# ps -ef | grep hello root 257 1 0 19:03 ? 00:00:00 /bin/bash /etc/init.d/hello.sh & root 264 116 0 19:03 pts/4 00:00:00 grep --color=auto hello [root@guestshell guestshell]#