2017/06/06

JP1/AJS3環境でRHEL7/CentOS7ファイアウォールを設定する

はじめに

JP1/Automatic Job Management System 3 (JP1/AJS3)環境において、firewalldを設定する方法を紹介する。

参考: 『JP1/AJS3環境でWindowsファイアウォールを設定する

JP1/Automatic Job Management System 3 (JP1/AJS3)は、業務を自動化する製品。
詳細は、マニュアルを参照。

JP1/AJS3 を構成する主な要素には、マネージャホスト・エージェントホストがある。
マネージャホストは、エージェントホストを制御し、ジョブを実行させる。
マネージャホストは、エージェントホストの機能を含む。
このため、マネージャホスト自身にジョブを実行させることもできる。

JP1/AJS3 は、企業内ネットワーク内部で使用されることが多い。
このため、各構成要素のパーソナルファイアウォールが無効化されていても、一概に安全でないとは言えない。
しかし、無効化しない方がセキュリティ上より安全である。

RHEL 7/CentOS 7では、firewalld がパーソナルファイアウォール機能を提供する。

JP1/AJS3 環境でのファイアウォール設定要件については、以下を参考にした。


ファイアウォールの設定方針

RHEL 7/CentOS 7では、パーソナルファイアウォールとして、firewalld と iptables が利用できる。この iptables は、TCP/UDP ポートを一つづつ追加していくか、連続した TCP/UDP ポートを追加するかのいずれかの方法でルールを定義する。
一方、firewalld は、iptables と同様の方法に加えて、複数の TCP/UDP ポートをひとまとめにして扱うことができる。
ひとまとめにした TCP/UDP ポートは、サービスと呼ばれ、名前を付けて扱うことが出来る。

マネージャホストおよびエージェントホストの両方で同じサービスを定義し、必要に応じてサービス単位で通信を許可する。


Firewalldサービスの定義

Firewalld のサービスは、/etc/firewalld/services以下に XML ファイルを作成することで定義する。

Firewalldサービスの定義/設定前状態の確認

マネージャホストおよびエージェントホストで以下の通り実行する。
定義したサービスの一覧をfirewall-cmd --get-servicesで得ることができる。

[root@agent ~]# cd /etc/firewalld/services
[root@agent services]# ls *JP1*
ls: cannot access *JP1*: No such file or directory
[root@agent services]# for SERVICE in $(firewall-cmd --get-services); do [[ $SERVICE = *JP1* ]] && echo $SERVICE; done
[root@agent services]#

何も定義されていないことが解る。

Firewalldサービスの定義/設定


マネージャホストおよびエージェントホストで以下の通り実行する。

[root@agent services]# cat <<'EOF' > JP1Base-to-JP1Base.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1Base-to-JP1Base</short>
>   <description>JP1/Base to JP1/Base</description>
>   <port protocol="tcp" port="20098"/>
>   <port protocol="tcp" port="20306"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > JP1AJS3-to-JP1Base.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1AJS3-to-JP1Base</short>
>   <description>JP1/AJS3 (both Manager and Agent) to JP1/Base</description>
>   <port protocol="tcp" port="20240"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > JP1AJS3-View-to-Manager.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1AJS3-View-to-Manager</short>
>   <description>JP1/AJS3 View to JP1/AJS3 Manaer</description>
>   <port protocol="tcp" port="20244"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > JP1AJS3-Agent-to-Manager.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1AJS3-Agent-to-Manager</short>
>   <description>JP1/AJS3 Agent to JP1/AJS3 Manaer</description>
>   <port protocol="tcp" port="20241"/>
>   <port protocol="tcp" port="20243"/>
>   <port protocol="tcp" port="20246"/>
>   <port protocol="tcp" port="20301"/>
>   <port protocol="tcp" port="22251"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > JP1AJS3-Manager-to-Agent.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1AJS3-Manager-to-Agent</short>
>   <description>JP1/AJS3 Manager to JP1/AJS3 Aent</description>
>   <port protocol="tcp" port="20242"/>
>   <port protocol="tcp" port="20247"/>
>   <port protocol="tcp" port="20300"/>
>   <port protocol="tcp" port="22251"/>
>   <port protocol="tcp" port="23139"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > JP1AJS3-Manager-to-Manager.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1AJS3-Manager-to-Manager</short>
>   <description>JP1/AJS3 Manager to JP1/AJS3 Manager</description>
>   <port protocol="tcp" port="20241"/>
>   <port protocol="tcp" port="20244"/>
>   <port protocol="tcp" port="20245"/>
>   <port protocol="tcp" port="23160"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > JP1AJS3-SDK-to-Manager.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1AJS3-SDK-to-Manager</short>
>   <description>JP1/AJS3 SDK to JP1/AJS3 Manager</description>
>   <port protocol="tcp" port="22250"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > JP1AJS3-Agent-to-Agent.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1AJS3-Agent-to-Agent</short>
>   <description>JP1/AJS3 Agent to JP1/AJS3 Agent</description>
>   <port protocol="tcp" port="22251"/>
>   <port protocol="udp" port="22251"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > JP1AJS3-Web-Console-to-Manager.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>JP1AJS3-Web-Console-to-Manager</short>
>   <description>JP1/AJS3 Web Console to JP1/AJS3 Manager</description>
>   <port protocol="tcp" port="22250"/>
> </service>
> EOF
[root@agent services]# cat <<'EOF' > Web-Browser-to-JP1AJS3-Web-Console.xml
> <?xml version="1.0" encoding="utf-8"?>
> <service>
>   <short>Web-Browser-to-JP1AJS3-Web-Console</short>
>   <description>Web Browser to JP1/AJS3 Web Console</description>
>   <port protocol="tcp" port="22252"/>
>   <port protocol="tcp" port="22253"/>
> </service>
> EOF
[root@agent services]#


Firewalld サービスの定義/設定後状態の確認

マネージャホストおよびエージェントホストで以下の通り実行する。
定義されたサービスは、定義をfirewall-cmd --reloadでリロードすることによって反映される。

[root@agent services]# ls *JP1*
JP1AJS3-Agent-to-Agent.xml      JP1AJS3-SDK-to-Manager.xml          JP1Base-to-JP1Base.xml
JP1AJS3-Agent-to-Manager.xml    JP1AJS3-View-to-Manager.xml         Web-Browser-to-JP1AJS3-Web-Console.xml
JP1AJS3-Manager-to-Agent.xml    JP1AJS3-Web-Console-to-Manager.xml
JP1AJS3-Manager-to-Manager.xml  JP1AJS3-to-JP1Base.xml
[root@agent services]# firewall-cmd --reload
success
[root@agent services]# for SERVICE in $(firewall-cmd --get-services); do [[ $SERVICE = *JP1* ]] && echo $SERVICE; done
JP1AJS3-Agent-to-Agent
JP1AJS3-Agent-to-Manager
JP1AJS3-Manager-to-Agent
JP1AJS3-Manager-to-Manager
JP1AJS3-SDK-to-Manager
JP1AJS3-View-to-Manager
JP1AJS3-Web-Console-to-Manager
JP1AJS3-to-JP1Base
JP1Base-to-JP1Base
Web-Browser-to-JP1AJS3-Web-Console
[root@agent services]# for SERVICE in $(firewall-cmd --get-services); do if [[ $SERVICE = *JP1* ]]; then echo "### $SERVICE"; firewall-cmd --info-service=$SERVICE; fi; done
### JP1AJS3-Agent-to-Agent
JP1AJS3-Agent-to-Agent
  ports: 22251/tcp 22251/udp
  protocols:
  source-ports:
  modules:
  destination:
### JP1AJS3-Agent-to-Manager
JP1AJS3-Agent-to-Manager
  ports: 20241/tcp 20243/tcp 20246/tcp 20301/tcp 22251/tcp
  protocols:
  source-ports:
  modules:
  destination:
### JP1AJS3-Manager-to-Agent
JP1AJS3-Manager-to-Agent
  ports: 20242/tcp 20247/tcp 20300/tcp 22251/tcp 23139/tcp
  protocols:
  source-ports:
  modules:
  destination:
### JP1AJS3-Manager-to-Manager
JP1AJS3-Manager-to-Manager
  ports: 20241/tcp 20244/tcp 20245/tcp 23160/tcp
  protocols:
  source-ports:
  modules:
  destination:
### JP1AJS3-SDK-to-Manager
JP1AJS3-SDK-to-Manager
  ports: 22250/tcp
  protocols:
  source-ports:
  modules:
  destination:
### JP1AJS3-View-to-Manager
JP1AJS3-View-to-Manager
  ports: 20244/tcp
  protocols:
  source-ports:
  modules:
  destination:
### JP1AJS3-Web-Console-to-Manager
JP1AJS3-Web-Console-to-Manager
  ports: 22250/tcp
  protocols:
  source-ports:
  modules:
  destination:
### JP1AJS3-to-JP1Base
JP1AJS3-to-JP1Base
  ports: 20240/tcp
  protocols:
  source-ports:
  modules:
  destination:
### JP1Base-to-JP1Base
JP1Base-to-JP1Base
  ports: 20098/tcp 20306/tcp
  protocols:
  source-ports:
  modules:
  destination:
### Web-Browser-to-JP1AJS3-Web-Console
Web-Browser-to-JP1AJS3-Web-Console
  ports: 22252/tcp 22253/tcp
  protocols:
  source-ports:
  modules:
  destination:
[root@agent services]#


Firewalld ルールの定義

Firewalld ルールの定義/設定前状態の確認

マネージャホストおよびエージェントホストで以下の通り実行する。

[root@agent services]# firewall-cmd --get-default-zone
public
[root@agent services]# firewall-cmd --info-zone=public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources:
  services: dhcpv6-client http https ntp smtp ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

[root@agent services]#

Firewalld ルールの定義/設定

エージェントホストで以下の通り実行する。

[root@agent services]# firewall-cmd --permanent --zone=public --add-service=JP1Base-to-JP1Base --add-service=JP1AJS3-to-JP1Base
success
[root@agent services]# firewall-cmd --permanent --zone=public --add-service=JP1AJS3-Manager-to-Agent --add-service=JP1AJS3-Agent-to-Agent
success
[root@agent services]#

マネージャホストでは、これらのサービスの他に、JP1AJS3-Agent-to-Manager、JP1AJS3-Manager-to-Manager、JP1AJS3-SDK-to-Manager、JP1AJS3-View-to-ManagerおよびJP1AJS3-Web-Console-to-Managerを追加する。

Firewalld ルールの定義/設定後状態の確認

マネージャホストおよびエージェントホストで以下の通り実行する。

[root@agent services]# firewall-cmd --reload
success
[root@agent services]# firewall-cmd --info-zone=public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources:
  services: JP1AJS3-Agent-to-Agent JP1AJS3-Manager-to-Agent JP1AJS3-to-JP1Base JP1Base-to-JP1Base dhcpv6-client http https ntp smtp ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

[root@agent services]#

2017/05/29

JP1/AJS3環境でWindowsファイアウォールを設定する

はじめに

JP1/Automatic Job Management System 3 (JP1/AJS3)環境において、「セキュリティが強化された Windows ファイアウォール」を Windows Powershell を用いて設定する方法を紹介する。

参考: 『JP1/AJS3環境でRHEL7/CentOS7ファイアウォールを設定する

JP1/Automatic Job Management System 3 (JP1/AJS3)は、業務を自動化する製品。
詳細は、マニュアルを参照。

JP1/AJS3 を構成する主な要素には、マネージャホスト・エージェントホストがある。
マネージャホストは、エージェントホストを制御し、ジョブを実行させる。
マネージャホストは、エージェントホストの機能を含む。
このため、マネージャホスト自身にジョブを実行させることもできる。

JP1/AJS3 は、企業内ネットワーク内部で使用されることが多い。
このため、各構成要素のパーソナルファイアウォールが無効化されていても、一概に安全でないとは言えない。
しかし、無効化しない方がセキュリティ上より安全である。

Windows Serverでは、「セキュリティが強化された Windows ファイアウォール」がパーソナルファイアウォール機能を提供する。
これをGUIで設定する方法もあるが、今回はPowershellを用いて設定する。

JP1/AJS3 環境でのファイアウォール設定要件については、以下を参考にした。

ファイアウォールの設定方針

「セキュリティが強化された Windows ファイアウォール」の流儀に従い、マネージャホストおよびエージェントホストの両方で同じルールを定義し、必要に応じてルールを有効化して使うことにする。
JP1/Base、JP1/AJS3 - ManagerおよびJP1/AJS3 - Agent必要となるファイアウォールルールをグループ化し、グループ名をぞれぞれ、JP1Base、JP1AJS3-ManagerおよびJP1AJS3-Agentとする。
エージェントホストでは、JP1BaseおよびJP1AJS3-Agentに属するルールのみを有効化する。
マネージャホストでは、JP1Base、JP1AJS3-ManagerおよびJP1AJS3-Agentすべてのグループに属するルールを有効化する。
これは、前述の通り、マネージャホストがエージェントホストの機能も併せ持つためである。

なお、以下の実行例では、Powershell のリモート処理機能を用いて作業した。
このため、実行例中のコマンドプロンプトには、[ホスト名]の様にホスト名が含まれている。
マネージャホストのホスト名をmanager、エージェントホストのホスト名をagentとしている。

ルールの定義

Powershellでは、「セキュリティが強化された Windows ファイアウォール」を操作するコマンドレットが提供されている。
新規にルールを作成するためには、New-NetFirewallRuleコマンドレットを使う。
このコマンドレットをそのまま使うとコマンドが長くなるため、作業に先立って、ヘルパ関数fwrhelperを定義する。

このヘルパ関数で定義されるルールは、一旦無効化(-Enabled False)されていることに注意。
従って、定義に続いて、必要なルールのみを有効化する必要がある。

また、適用対象のプロファイルは、Public以外のDomainおよびPrivateとしている。
Publicプロファイルは、信頼性の低い接続の場合に使われるため、JP1/AJS3環境には適切でない場合が多いだろう。

ヘルパ関数fwrhelperの定義

マネージャホストおよびエージェントホストで以下の通り実行する。

[agent]: PS C:\> function fwrhelper($Group,$Name,$DisplayName,$Protocol,$LocalPort){
>>     New-NetFirewallRule -Profile Domain,Private -Action Allow -Enabled False -Direction Inbound `
>>         -Group $Group `
>>         -Name $Name `
>>         -DisplayName $DisplayName `
>>         -Protocol $Protocol `
>>         -LocalPort $LocalPort | ft
>> }
[agent]: PS C:\>

JP1/Base 用ルールの定義

JP1/Base 用のルールを定義する。
マネージャホストおよびエージェントホストで以下の通り実行する。

[agent]: PS C:\> fwrhelper JP1AJS3-Manager JP1AJS3-Agent-to-Manager 'JP1/AJS3 Agent to JP1/AJS3 Manaer' TCP @(20241,20243,20246,20301,22251)

Name                     DisplayName                       DisplayGroup    Enabled Profile         Direction Action
----                     -----------                       ------------    ------- -------         --------- ------
JP1AJS3-Agent-to-Manager JP1/AJS3 Agent to JP1/AJS3 Manaer JP1AJS3-Manager False   Domain, Private Inbound   Allow


[agent]: PS C:\> fwrhelper JP1AJS3-Agent JP1AJS3-Manager-to-Agent 'JP1/AJS3 Manager to JP1/AJS3 Aent' TCP @(20242,20247,20300,22251,23139)

Name                     DisplayName                       DisplayGroup  Enabled Profile         Direction Action
----                     -----------                       ------------  ------- -------         --------- ------
JP1AJS3-Manager-to-Agent JP1/AJS3 Manager to JP1/AJS3 Aent JP1AJS3-Agent False   Domain, Private Inbound   Allow


[agent]: PS C:\> fwrhelper JP1AJS3-Manager JP1AJS3-Manager-to-Manager 'JP1/AJS3 Manager to JP1/AJS3 Manager' TCP @(20241,20244,20245,23160)

Name                       DisplayName                          DisplayGroup    Enabled Profile         Direction Actio
                                                                                                                  n
----                       -----------                          ------------    ------- -------         --------- -----
JP1AJS3-Manager-to-Manager JP1/AJS3 Manager to JP1/AJS3 Manager JP1AJS3-Manager False   Domain, Private Inbound   Allow


[agent]: PS C:\> fwrhelper JP1AJS3-Manager JP1AJS3-SDK-to-Manager 'JP1/AJS3 SDK to JP1/AJS3 Manager' TCP @(22250)

Name                   DisplayName                      DisplayGroup    Enabled Profile         Direction Action
----                   -----------                      ------------    ------- -------         --------- ------
JP1AJS3-SDK-to-Manager JP1/AJS3 SDK to JP1/AJS3 Manager JP1AJS3-Manager False   Domain, Private Inbound   Allow


[agent]: PS C:\> fwrhelper JP1AJS3-Agent JP1AJS3-Agent-to-Agent-TCP 'JP1/AJS3 Agent to JP1/AJS3 Agent (TCP)' TCP @(22251)

Name                       DisplayName                            DisplayGroup  Enabled Profile         Direction Actio
                                                                                                                  n
----                       -----------                            ------------  ------- -------         --------- -----
JP1AJS3-Agent-to-Agent-TCP JP1/AJS3 Agent to JP1/AJS3 Agent (TCP) JP1AJS3-Agent False   Domain, Private Inbound   Allow


[agent]: PS C:\> fwrhelper JP1AJS3-Agent JP1AJS3-Agent-to-Agent-UDP 'JP1/AJS3 Agent to JP1/AJS3 Agent (UDP)' UDP @(22251)

Name                       DisplayName                            DisplayGroup  Enabled Profile         Direction Actio
                                                                                                                  n
----                       -----------                            ------------  ------- -------         --------- -----
JP1AJS3-Agent-to-Agent-UDP JP1/AJS3 Agent to JP1/AJS3 Agent (UDP) JP1AJS3-Agent False   Domain, Private Inbound   Allow


[agent]: PS C:\> fwrhelper JP1AJS3-Manager JP1AJS3-Web-Console-to-Manager 'JP1/AJS3 Web Console to JP1/AJS3 Manager' TCP @(22250)

Name                           DisplayName                              DisplayGroup    Enabled Profile         Directi
                                                                                                                on
----                           -----------                              ------------    ------- -------         -------
JP1AJS3-Web-Console-to-Manager JP1/AJS3 Web Console to JP1/AJS3 Manager JP1AJS3-Manager False   Domain, Private Inbound


[agent]: PS C:\> fwrhelper JP1AJS3-Web-Console Web-Browser-to-JP1AJS3-Web-Console 'Web Browser to JP1/AJS3 Web Console' TCP @(22252,22253)

Name                               DisplayName                         DisplayGroup        Enabled Profile         Dire
                                                                                                                   ctio
                                                                                                                   n
----                               -----------                         ------------        ------- -------         ----
Web-Browser-to-JP1AJS3-Web-Console Web Browser to JP1/AJS3 Web Console JP1AJS3-Web-Console False   Domain, Private I...


[agent]: PS C:\>

定義されたルールの確認

定義されたルールを確認してみよう。
マネージャホストおよびエージェントホストで以下の通り実行する。

[agent]: PS C:\> Get-NetFirewallRule -Group JP1* | ft

Name                               DisplayName                              DisplayGroup        Enabled Profile
----                               -----------                              ------------        ------- -------
JP1Base-to-JP1Base                 JP1/Base to JP1/Base                     JP1Base             False   Domain, Private
JP1AJS3-to-JP1Base                 JP1/AJS3 to JP1/Base                     JP1Base             False   Domain, Private
JP1AJS3-Agent-to-Manager           JP1/AJS3 Agent to JP1/AJS3 Manaer        JP1AJS3-Manager     False   Domain, Private
JP1AJS3-Manager-to-Agent           JP1/AJS3 Manager to JP1/AJS3 Aent        JP1AJS3-Agent       False   Domain, Private
JP1AJS3-Manager-to-Manager         JP1/AJS3 Manager to JP1/AJS3 Manager     JP1AJS3-Manager     False   Domain, Private
JP1AJS3-SDK-to-Manager             JP1/AJS3 SDK to JP1/AJS3 Manager         JP1AJS3-Manager     False   Domain, Private
JP1AJS3-Agent-to-Agent-TCP         JP1/AJS3 Agent to JP1/AJS3 Agent (TCP)   JP1AJS3-Agent       False   Domain, Private
JP1AJS3-Agent-to-Agent-UDP         JP1/AJS3 Agent to JP1/AJS3 Agent (UDP)   JP1AJS3-Agent       False   Domain, Private
JP1AJS3-Web-Console-to-Manager     JP1/AJS3 Web Console to JP1/AJS3 Manager JP1AJS3-Manager     False   Domain, Private
Web-Browser-to-JP1AJS3-Web-Console Web Browser to JP1/AJS3 Web Console      JP1AJS3-Web-Console False   Domain, Private


[agent]: PS C:\>

すべてのルールが無効化されていることに注意。

必要なルールの有効化

マネージャホストおよびエージェントホストそれぞれで、その役割に必要となるルールを有効化する。

必要なルールの有効化 @ エージェントホストt

ファイアウォールグループ JP1Base および JP1AJS3-Agent を有効化する。

[agent]: PS C:\> Enable-NetFirewallRule -Group JP1Base,JP1AJS3-Agent
[agent]: PS C:\> Get-NetFirewallRule -Group JP1* | ft

Name                               DisplayName                              DisplayGroup        Enabled Profile
----                               -----------                              ------------        ------- -------
JP1Base-to-JP1Base                 JP1/Base to JP1/Base                     JP1Base             True    Domain, Private
JP1AJS3-to-JP1Base                 JP1/AJS3 to JP1/Base                     JP1Base             True    Domain, Private
JP1AJS3-Agent-to-Manager           JP1/AJS3 Agent to JP1/AJS3 Manaer        JP1AJS3-Manager     False   Domain, Private
JP1AJS3-Manager-to-Agent           JP1/AJS3 Manager to JP1/AJS3 Aent        JP1AJS3-Agent       True    Domain, Private
JP1AJS3-Manager-to-Manager         JP1/AJS3 Manager to JP1/AJS3 Manager     JP1AJS3-Manager     False   Domain, Private
JP1AJS3-SDK-to-Manager             JP1/AJS3 SDK to JP1/AJS3 Manager         JP1AJS3-Manager     False   Domain, Private
JP1AJS3-Agent-to-Agent-TCP         JP1/AJS3 Agent to JP1/AJS3 Agent (TCP)   JP1AJS3-Agent       True    Domain, Private
JP1AJS3-Agent-to-Agent-UDP         JP1/AJS3 Agent to JP1/AJS3 Agent (UDP)   JP1AJS3-Agent       True    Domain, Private
JP1AJS3-Web-Console-to-Manager     JP1/AJS3 Web Console to JP1/AJS3 Manager JP1AJS3-Manager     False   Domain, Private
Web-Browser-to-JP1AJS3-Web-Console Web Browser to JP1/AJS3 Web Console      JP1AJS3-Web-Console False   Domain, Private


[agent]: PS C:\>

必要なルールの有効化 @ マネージャホストt

ファイアウォールグループ JP1Base、JP1AJS3-Manager および JP1AJS3-Agentを有効化する。
Manager は、Agent の機能も併せ持つため、Agent 用のルールも有効化する必要がある。

[manager]: PS C:\> Enable-NetFirewallRule -Group JP1Base,JP1AJS3-Manager,JP1AJS3-Agent
[manager]: PS C:\> Get-NetFirewallRule -Group JP1* | ft

Name                               DisplayName                              DisplayGroup        Enabled Profile
----                               -----------                              ------------        ------- -------
JP1Base-to-JP1Base                 JP1/Base to JP1/Base                     JP1Base             True    Domain, Private
JP1AJS3-to-JP1Base                 JP1/AJS3 to JP1/Base                     JP1Base             True    Domain, Private
JP1AJS3-Agent-to-Manager           JP1/AJS3 Agent to JP1/AJS3 Manaer        JP1AJS3-Manager     True    Domain, Private
JP1AJS3-Manager-to-Agent           JP1/AJS3 Manager to JP1/AJS3 Aent        JP1AJS3-Agent       True    Domain, Private
JP1AJS3-Manager-to-Manager         JP1/AJS3 Manager to JP1/AJS3 Manager     JP1AJS3-Manager     True    Domain, Private
JP1AJS3-SDK-to-Manager             JP1/AJS3 SDK to JP1/AJS3 Manager         JP1AJS3-Manager     True    Domain, Private
JP1AJS3-Agent-to-Agent-TCP         JP1/AJS3 Agent to JP1/AJS3 Agent (TCP)   JP1AJS3-Agent       True    Domain, Private
JP1AJS3-Agent-to-Agent-UDP         JP1/AJS3 Agent to JP1/AJS3 Agent (UDP)   JP1AJS3-Agent       True    Domain, Private
JP1AJS3-Web-Console-to-Manager     JP1/AJS3 Web Console to JP1/AJS3 Manager JP1AJS3-Manager     True    Domain, Private
Web-Browser-to-JP1AJS3-Web-Console Web Browser to JP1/AJS3 Web Console      JP1AJS3-Web-Console False   Domain, Private


[manager]: PS C:\>

2017/03/21

section フィルタ / Cisco IOS の小技

Cisco IOS で「show running-config」などを実行すると、出力が長くなり、本当に見たい部分を探すのに手間がかかる。
従来から、includeexclude および begin 等のフィルタは準備されていたが、コンフィグの文法に基づいて動作するものではないため、少々不便。
そこで今回紹介するのが section フィルタ。
文字通り、指定したセクションのみを週出してくれるフィルタ。

以下の様に使うことができる:
Switch#sh run | section line
line con 0
line vty 0 4
 transport input ssh
line vty 5 15
 transport input ssh
Switch#

|」(パイプ)の後で使えるフィルタのバリエーションが限られているため、省略形「s」のみで使用することができる。
Switch#sh run | s interface
interface FastEthernet0
 no ip address
interface GigabitEthernet1/0/1
interface GigabitEthernet1/0/2
<<略>>
interface GigabitEthernet1/0/27
interface GigabitEthernet1/0/28

空白で区切って、長いセクション名を指定することができる。
Switch#show conf | s interface FastEthernet
interface FastEthernet0
 no ip address
Switch#

ただし、省略形を使用できない(場合がある)。
Switch#show run | s int Fas
Switch#

正規表現が使えるので、以下の様に実行すれば、期待した動作になる。
Switch#show run | s int.* Fas.*
interface FastEthernet0
 no ip address
Switch#

GigabitEthernet ポートの 20 番台のみを表示しようとして、以下の様に実行しても、ポート 2 が表示され、思った結果にならない。
Switch#show run | s interface GigabitEthernet1/0/2
interface GigabitEthernet1/0/2
interface GigabitEthernet1/0/20
interface GigabitEthernet1/0/21
interface GigabitEthernet1/0/22
interface GigabitEthernet1/0/23
interface GigabitEthernet1/0/24
interface GigabitEthernet1/0/25
interface GigabitEthernet1/0/26
interface GigabitEthernet1/0/27
interface GigabitEthernet1/0/28
Switch#
この場合は、以下の様に実行すればよい。
Switch#show run | s interface GigabitEthernet1/0/2.
interface GigabitEthernet1/0/20
interface GigabitEthernet1/0/21
interface GigabitEthernet1/0/22
interface GigabitEthernet1/0/23
interface GigabitEthernet1/0/24
interface GigabitEthernet1/0/25
interface GigabitEthernet1/0/26
interface GigabitEthernet1/0/27
interface GigabitEthernet1/0/28
Switch#

show コマンドではなく、more コマンドの後でも来した通り動作する。
Switch#$/archive/config-Mar-19-14-03-06.375-41 | section interface Vlan
interface Vlan1
 no ip address
interface Vlan1000
 ip address 10.0.0.1 255.255.255.0
Switch#

2017/02/27

システム起動時のfsck

現状の確認

インストール直後の既定値を確認する。

/etc/fstab

[root@centos01 ~]# cat /etc/fstab | grep /dev/mapper/vg_centos01-lv_root
/dev/mapper/vg_centos01-lv_root /                       ext4    defaults        1 1
[root@centos01 ~]#
第6フィールドが「1」となっている。
この設定では、起動の際にfsck実施条件をチェックし、適宜fsckを実施する。

ボリュームのパラメータ

CentOS 6/RHEL 6の場合、既定ではext4のボリュームは、fsckを実施しない様設定されている。
# ちなみに、CentOS 7/RHEL 7では、既定でxfsのため、起動にfsckは実行されない。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              4
Maximum mount count:      -1
Last checked:             Thu Feb 23 06:06:05 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

現在は、以下の通り設定されていることが判る。
  • マウントされた回数(Mount count)が4、
  • マウント回数によるfsck実行(Maximum mount count)は無し、
  • 最後にfsckが実行されたの(Last checked)が2017.2.23(木) 06:06:05、
  • 経過時間によるfsck実行(Check interval)は無し
結果、既定状態では起動時のfsckは、実行されないことが判る。

マウント回数による条件の検証

Maximum mount countの設定

前に確認した通り、現在のマウント回数は4回なので、Maximum mount countを5に設定する。
[root@centos01 ~]# tune2fs -c 5 /dev/mapper/vg_centos01-lv_root
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to 5
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              3
Maximum mount count:      5
Last checked:             Thu Feb 23 06:06:05 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

確認1: fsckされない場合

再度再起動する。
[root@centos01 ~]# shutdown -r now
起動後、確認する。
この時点でマウント回数5回だが、Maximum mount countの設定値5を超えていないため、fsckされない。
最後にfsckした時刻(Last checked)が変わっていないことで確認できる。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              5
Maximum mount count:      5
Last checked:             Thu Feb 23 06:06:05 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

確認2: fsckされる場合

再度再起動する。
[root@centos01 ~]# shutdown -r now
起動後、確認する。
この時点でマウント回数6回に達し、Maximum mount countの設定値5を超えるため、fsckされる。
最後にfsckした時刻(Last checked)が変わったことで確認できる。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              1
Maximum mount count:      5
Last checked:             Sat Feb 25 13:42:42 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

復旧

設定を元に戻す。
[root@centos01 ~]# tune2fs -c -1 /dev/mapper/vg_centos01-lv_root
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to -1
[root@centos01 ~]#

/fastbootの検証

ファイル/fastbootを作成すると、次回起動時にfsckされなくなることを確認する。

設定

[root@centos01 ~]# tune2fs -c 1 /dev/mapper/vg_centos01-lv_root
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to 1
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              1
Maximum mount count:      1
Last checked:             Sat Feb 25 13:42:42 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

確認1: fsckされない場合

/fastbootを作成し、再起動する。
[root@centos01 ~]# touch /fastboot
[root@centos01 ~]# shutdown -r now
起動後、確認する。
この時点でマウント回数2回で、Maximum mount countの設定値2を超えているが、/fastbootが作成されていたため、fsckされない。
最後にfsckした時刻(Last checked)が変わっていないことで確認できる。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              2
Maximum mount count:      1
Last checked:             Sat Feb 25 13:42:42 2017
Check interval:           0 (<none>)
[root@centos01 ~]#
再起動前に作成した/fastbootは削除されている。
[root@centos01 ~]# ls /fastboot
ls: cannot access /fastboot: そのようなファイルやディレクトリはありません
[root@centos01 ~]#

確認2: fsckされる場合

/fastbootが設定されていない状態で再起動する。
[root@centos01 ~]# shutdown -r now
起動後、確認する。
この時点でマウント回数3回に達し、Maximum mount countの設定値1を超えるため、fsckされる。
最後にfsckした時刻(Last checked)が変わったことで確認できる。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              1
Maximum mount count:      1
Last checked:             Sat Feb 25 14:35:52 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

復旧

設定を戻す。
[root@centos01 ~]# tune2fs -c -1 /dev/mapper/vg_centos01-lv_root
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to -1
[root@centos01 ~]#

/forcefsckの検証

ファイル/forcefsckを作成すると、強制的にfsckを実行させることができる。
これを確認する。

現在状態の確認

現在の状態を確認する。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              1
Maximum mount count:      -1
Last checked:             Sat Feb 25 14:35:52 2017
Check interval:           0 (<none>)
[root@centos01 ~]#
マウント回数、経過時間共にfsckされる条件を満たしていないことが判る。

確認

/forcefsckを作成し、再起動する。
[root@centos01 ~]# touch /forcefsck
[root@centos01 ~]# shutdown -r now
強制的にfsckが実行される。
起動後、確認する。
最後にfsckした時刻(Last checked)が変わったことで確認できる。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              1
Maximum mount count:      -1
Last checked:             Sat Feb 25 14:48:14 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

/etc/fstabの第6フィールドの検証

/etc/fstabの第6フィールドを0に設定すると、fsckが抑制される。

設定

/etc/fstabの第6フィールドを0に設定する。
[root@centos01 ~]# cp -p /etc/fstab /etc/fstab.orig
[root@centos01 ~]# grep lv_root /etc/fstab
/dev/mapper/vg_centos01-lv_root /                       ext4    defaults        1 1
[root@centos01 ~]# sed -i '/lv_root/s/1$/0/' /etc/fstab
[root@centos01 ~]# grep lv_root /etc/fstab
/dev/mapper/vg_centos01-lv_root /                       ext4    defaults        1 0
[root@centos01 ~]#

Maximum mount countを1に設定する。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              1
Maximum mount count:      -1
Last checked:             Sat Feb 25 14:48:14 2017
Check interval:           0 (<none>)
[root@centos01 ~]# tune2fs -c 1 /dev/mapper/vg_centos01-lv_root
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to 1
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              1
Maximum mount count:      1
Last checked:             Sat Feb 25 14:48:14 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

確認1: fsckされない

再起動する。
[root@centos01 ~]# shutdown -r now
起動後、確認する。
この時点でマウント回数2回に達し、Maximum mount countの設定値1を超えるが、/etc/fstabでfsckを抑制しているため、fsckされない。
最後にfsckした時刻(Last checked)が変わっていないことで確認できる。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              2
Maximum mount count:      1
Last checked:             Sat Feb 25 14:48:14 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

確認2: /etc/fstabの第6フィールド VS /forcefsck

/etc/fstabの第6フィールドを0にした状態で/forcefsckを作成した場合どうなるか検証する。

/forcefsckを作成し、再起動する。
[root@centos01 ~]# touch /forcefsck
[root@centos01 ~]# shutdown -r now
起動後、確認する。
この時点でマウント回数3回に達し、Maximum mount countの設定値1を超え、さらに/etc/forcefsckが作成されているが、/etc/fstabでfsckを抑制しているため、fsckされない。
最後にfsckした時刻(Last checked)が変わっていないことで確認できる。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              3
Maximum mount count:      1
Last checked:             Sat Feb 25 14:48:14 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

復元1: /etc/fstabのみ

/etc/fsckの第6フィールドのみ設定を戻す。
[root@centos01 ~]# mv -f /etc/fstab.orig /etc/fstab
[root@centos01 ~]# grep lv_root /etc/fstab
/dev/mapper/vg_centos01-lv_root /                       ext4    defaults        1 1
[root@centos01 ~]#

確認3: fsckされる

/etc/fsckの第6フィールドの設定を戻すと、fsckされることを確認する。
[root@centos01 ~]# shutdown -r now
起動後、確認する。
この時点でマウント回数4回に達し、Maximum mount countの設定値1を超えるので、fsckされる。
最後にfsckした時刻(Last checked)が変わったことで確認できる。
[root@centos01 ~]# tune2fs -l /dev/mapper/vg_centos01-lv_root | egrep -i 'mount count|check'
Mount count:              1
Maximum mount count:      1
Last checked:             Sat Feb 25 15:21:03 2017
Check interval:           0 (<none>)
[root@centos01 ~]#

復元2: Maximum mount count

Maximum mount countの設定を戻す。
[root@centos01 ~]# tune2fs -c -1 /dev/mapper/vg_centos01-lv_root
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to -1
[root@centos01 ~]#

2017/02/21

PowerShellからCMD.exeやpowershell.exeのフォントを追加する

Cmd.exeやpowershell.exeなどで、Windowsのコンソール(ターミナル)を使う場合、既定では日本語が表示できるTrueTypeフォントは、MSゴシックしか選べない。
今回は、PowerShellを使ってWindowsのコンソールにフォントを追加し、選択できるようにする方法を紹介する。

フォントの準備

Windowのコンソールに追加するフォントを準備する。
これらは、いわゆる等幅フォントでなければならない。
RictyMyrica等、好みのフォントをインストールしておく。

現状設定の確認

続いて、現状の設定を確認する。
PowerShellを管理者モードで起動し、以下の通り実行する
PS C:\> $ttf = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont'
PS C:\> Get-Item $ttf


    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console


Name                           Property
----                           --------
TrueTypeFont                   949 : *굴림체
                               0   : Lucida Console
                               950 : *細明體
                               932 : *MS ゴシック
                               936 : *新宋体
                               00  : Consolas


PS C:\>
「MS ゴシック」とある行の「932」は、いわゆるMicrosoftコードページ932 (CP932)のこと。
既定では、CP932に対して、MSゴシック一つのみが登録されており、唯一選択可能になっていることが解る。

CP932に対して、フォントを追加する場合、この部分を932.1, 932.2, 932.3,…の様に「コードページ.番号」の様な形で追加する必要がある。

なお、選択されたフォントは、フォント名の直前に「*」がついている。
上の例では、CP932に対しては、MSゴシックが選択されていることが解る(と言っても唯一の選択肢だが)。

フォントの追加

今回は、
  • Ricty Discord
  • Ricty
  • MyricaM M
  • Myrica M
を追加する。
フォント名の部分は、適宜読み替える。

以下の通り実行する。
PS C:\> New-ItemProperty $ttf -Name 932.1 -PropertyType string -Value 'Ricty Discord'


932.1        : Ricty Discord
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFon
               t
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console
PSChildName  : TrueTypeFont
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry



PS C:\> New-ItemProperty $ttf -Name 932.2 -PropertyType string -Value 'Ricty'


932.2        : Ricty
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFon
               t
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console
PSChildName  : TrueTypeFont
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry



PS C:\> New-ItemProperty $ttf -Name 932.3 -PropertyType string -Value 'MyricaM M'


932.3        : MyricaM M
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFon
               t
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console
PSChildName  : TrueTypeFont
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry



PS C:\> New-ItemProperty $ttf -Name 932.4 -PropertyType string -Value 'Myrica M'


932.4        : Myrica M
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFon
               t
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console
PSChildName  : TrueTypeFont
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry



PS C:\>

結果の確認

結果を確認する。
PS C:\> Get-Item $ttf


    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console


Name                           Property
----                           --------
TrueTypeFont                   949   : *굴림체
                               0     : Lucida Console
                               950   : *細明體
                               932   : *MS ゴシック
                               936   : *新宋体
                               00    : Consolas
                               932.1 : Ricty Discord
                               932.2 : Ricty
                               932.3 : MyricaM M
                               932.4 : Myrica M


PS C:\>
932.[1-4]にそれぞれフォントが追加されたのが判る。

この状態で、cmd.exeやpowershell.exeを起動し、プロパティ画面のフォントタブから、複数のフォントが選べるようになっていることを確認できる。

2017/02/06

IOS.shの実行中断

前回紹介したIOS.shの実行中断に関する補足。
前回は、以下のように紹介した:
他のコマンド(ping等)と同様、[Ctrl]+[Alt]+[6] (HEX 1E。MacのTerminalからだと[Ctrl]+[^]らしい)で実行を中断することができる。
しかし、実際には止まらない場合がある。例えば:
Switch#while true; do echo "#### `show clock`"; ping 10.0.0.3 repeat 1; sleep 1; done
#### 04:26:14.555 JST Tue Feb 7 2017
Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 10.0.0.3, timeout is 2 seconds:
!
Success rate is 100 percent (1/1), round-trip min/avg/max = 7/7/7 ms
#### 04:26:15.569 JST Tue Feb 7 2017
Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 10.0.0.3, timeout is 2 seconds:
!
Success rate is 100 percent (1/1), round-trip min/avg/max = 1/1/1 ms
#### 04:26:16.576 JST Tue Feb 7 2017
Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 10.0.0.3, timeout is 2 seconds:
!
これを実行しているときに[Ctrl]+[Alt]+[6]を入力しても、実行中断することができない。

この場合、他のセッションを開いて、上のコマンドを実行中のセッションごと強制終了する。
例えば、上のコマンドを、シリアルコンソール(console 0)から実行している場合、SSHで新しいセッションを開いておいて、以下の通り実行する。
Switch#clear line console 0
[confirm]y [OK]
Switch#
もとのシリアルコンソールは、強制的にログアウトされ、ログインプロンプトが表示される。
Switch con0 is now available





Press RETURN to get started.









User Access Verification

Username:

2017/02/05

Cisco IOSでshell: IOS.sh

Cisco IOS (Apple iOSではない)は、CatalystやCiscoルータと言ったCiscoのネットワーク機器のOS。

コの業界、特にインフラ系では、Ciscoがデファクトスタンダードで、避けては通れない。

で、このIOSは主にCLIで操作するのだが、独自のコマンド体系で、UNIX/Linux系のシェルに慣れている技術者には、少々とっつきにくい。
例えば、パイプ(|)はサポートされているが、grepコマンドではなくincludeコマンドを使う、などなど。

これを少しだけ解決するのが、今回紹介するIOS.sh
IOS上でUNIX系のコマンドの一部と、Bourne Shell系の制御構造が使える。
バッチファイルを使うこともできる(エディタは無いが…)

IOS.shは、IOS 15.1(4)M、15.1(2)S以降のバージョンでサポートされている。
サポートしているIOS上で「cat ?」と入力すると、
Switch>cat ?
The command you have entered is available in the IOS.sh.
However, the shell is currently disabled. You can enable
it on this terminal by typing
   'term shell'
You can also enable it for all terminals by configuring the
   'shell processing full'
command. There is additional information in the man command.
For more information, enable shell, and then enter:
'man IOS.sh'
Switch>cat
と表示されることが確認できる。

起動と停止

IOSにログインして、「terminal shell」あるは短縮形で「term shell」と入力して起動する。
Switch>terminal shell
Switch>
停止は、「terminal no shell」もしくは「term no shell(「no term shell」じゃないんだな、これが)
Switch>terminal no shell
Switch>
または、ログアウトしても停止する。

現在状態の確認

「show terminal」コマンドで調べる。
Switch>show terminal | include Shell
Shell: enabled
Shell trace: off
Switch>

実行中断

他のコマンド(ping等)と同様、[Ctrl]+[Alt]+[6] (HEX 1E。MacのTerminalからだと[Ctrl]+[^]らしい)で実行を中断することができる。
Switch>i=0; while true; do echo $i; ((i=i+1)); done
0
1
2
<<略>>
[Shift]+[Ctrl]+[6]
105
106
107       ^
% Invalid input detected at '^' marker.

Switch>
ちょっとゴミが出てるが気にしない。
追記: [Shift]+[Ctrl]+[6]で実行停止できない場合について、補足した。

マニュアル

Linux/Unix同様、manコマンドが使える。
まずは、「man IOS.sh」を見よ。
Switch>man IOS.sh
NAME
    IOS.sh - process shell input

DESCRIPTION
The IOS.sh is a set of add-on features to the IOS
CLI. These features enables users to write scripts,
execute functions, evaluate numeric and logical expressions,
and perform loops over data using a standard, easy to learn
syntax.

In addition, the IOS.sh offers variable substitution, enhanced
quoting, and a series of builtin functions that are designed to
simplify the job of interacting with an IOS router.

In order to learn about the IOS.sh, a set of man pages such as
this one have been prepared to describe the various new features.
The following man pages may be used learn about the shell.

 man compatibility   -  gives a quick overview of compatibility between
                        shell and traditional IOS CLI
 man variables       -  describes the usage of variables
 man scripting       -  gives a quick overview of the scripting
                        capabilities of IOS.sh
 man expressions     -  describes the expression syntax built into the IOS.sh
 man loops           -  describes loop structures built into IOS.sh
 man functions       -  describes how to use and write functions
 man quoting         -  describes the new quoting facility
Switch>
ちなみに、上の「man .*」の内、手元の環境15.2(2)E5では、「man loops」のみエラーとなった。

なお、単に「man」だけ入力すると、manコマンドで調査可能な項目の一覧が表示される。
Switch>man
((              evaluate a numeric test expression
IOS.sh          The IOS shell
[[              evaluate a logical test expression
cat             output data from a pipe or file to the terminal
compatibility   compatibility information on IOS.sh
control         control constructs in IOS.sh
<<略>>
variables       usage of variables in IOS.sh
wc              count lines, words, and chars
while           iterate while an expression is TRUE

Switch>

2015/11/26

Dell PowerEdge上のVMware ESXi 5.5を6.0 U1に更新する・その7・ライセンスの入力

メジャーバージョンが変わったので、ライセンスを入力しなおす必要がある。
まず、現状を確認する。
[root@esxi03:~] vim-cmd vimsvc/license --show
[200] Sending request for installed licenses...[200] Complete, result is:
   serial: 00000-00000-00000-00000-00000
   vmodl key: eval
   name: Evaluation Mode
   total: 1
   used:  1
   unit: host
   Properties:
     [ProductName] = VMware ESX Server
     [ProductVersion] = 6.0
     [evaluation] = License has not been set, evaluation Period in effect.
     [expirationHours] = 1439
     [expirationMinutes] = 45
     [expirationDate] = 2016-01-25T06:21:17.894699Z
     [system_time] = 2015-11-26T06:36:17.899722Z
     [feature] = vsmp:0 ("Unlimited virtual SMP")
     [feature] = h264remote ("H.264 for Remote Console Connections")
<<略>>
     [feature] = vgpu ("vGPU")
     [FileVersion] = 6.0.1.2
     [LicenseFilePath] = /usr/lib/vmware/licenses/site/license-esx-60-e16-suite-vsom-c1-201306
     [LicenseFilePath] = /usr/lib/vmware/licenses/site/license-esx-60-e18-robo-c3-201306
<<略>>
     [LicenseFilePath] = /usr/lib/vmware/licenses/site/license-esx-60-e9-sub-c1-201306
     [Localized] = 

[200] End of report.
[root@esxi03:~]
現在は、ライセンスキー(serial)が入力されておらず、評価モード(Evaluation Mode)であることが判る。

Dell PowerEdge上のVMware ESXi 5.5を6.0 U1に更新する・その6・再起動と確認

Message:」行に、再起動が必要とあるので、再起動する。
~ # esxcli system shutdown reboot --reason="ESXi Upgrade from 5.5 to 6.0u1"
~ #

起動されるまで待ち、SSHで接続する。
バージョンを確認する。
[root@esxi03:~] esxcli system version get
   Product: VMware ESXi
   Version: 6.0.0
   Build: Releasebuild-3029758
   Update: 1
   Patch: 17
[root@esxi03:~]
バージョン6.0.0、ビルド3029758(ESXi 6.0 Update 1)に更新されたことが判る。
また、ESXi 5.5の時とはプロンプトが変わっていることも確認できる。

[root@esxi03:~] esxcli software vib list
Name                           Version                              Vendor  Acceptance Level  Install Date
-----------------------------  -----------------------------------  ------  ----------------  ------------
lsi-mr3                        6.606.12.00-1OEM.600.0.0.2159203     Avago   VMwareCertified   2015-11-26  
scsi-megaraid-sas              6.804.60.00-1OEM.600.0.0.2159203     Avago   VMwareCertified   2015-11-26  
net-tg3                        3.137l.v60.1-1OEM.600.0.0.2494585    BRCM    VMwareCertified   2015-11-26  
OpenManage                     7.4.0.1-0000                         Dell    PartnerSupported  2014-08-21  
elxnet                         10.6.126.0-1OEM.600.0.0.2159203      EMU     VMwareCertified   2015-11-26  
lpfc                           10.6.126.0-1OEM.600.0.0.2159203      EMU     VMwareCertified   2015-11-26  
net-ixgbe                      3.21.6-1OEM.600.0.0.2159203          INT     VMwareCertified   2015-11-26  
net-igb                        5.3.0-1OEM.550.0.0.1331820           Intel   VMwareCertified   2015-11-26  
ima-qla4xxx                    500.2.01.31-1vmw.0.3.100400          QLogic  VMwareCertified   2015-11-26  
<<略>>
ehci-ehci-hcd                  1.0-3vmw.600.0.0.2494585             VMware  VMwareCertified   2015-11-26  
esx-base                       6.0.0-1.17.3029758                   VMware  VMwareCertified   2015-11-26  
esx-dvfilter-generic-fastpath  6.0.0-0.0.2494585                    VMware  VMwareCertified   2015-11-26  
<<略>>
uhci-usb-uhci                  1.0-3vmw.600.0.0.2494585             VMware  VMwareCertified   2015-11-26  
tools-light                    6.0.0-1.17.3029758                   VMware  VMwareCertified   2015-11-26  
[root@esxi03:~]
更新されたことが判る。

メンテナンスモードを解除する。
[root@esxi03:~] esxcli system maintenanceMode get
Enabled
[root@esxi03:~] esxcli system maintenanceMode set --enable false
[root@esxi03:~] esxcli system maintenanceMode get
Disabled
[root@esxi03:~]


その0・概要
その1・アップロード
その2・現状の確認
その3・RBSDファイルの内容の確認
その4・メンテナンスモードへの切替
その5・ESXiの更新
その6・再起動と確認
その7・ライセンスの入力

Dell PowerEdge上のVMware ESXi 5.5を6.0 U1に更新する・その5・ESXiの更新

更新する。
~ # time esxcli software vib update --depot=/vmfs/volumes/datastore1/Patch/VMware-VMvisor-Installer-6.0.0-3029758.x86_64-Dell_Customized-A00.zip
Installation Result
   Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.
   Reboot Required: true
   VIBs Installed: Avago_bootbank_lsi-mr3_6.606.12.00-1OEM.600.0.0.2159203, Avago_bootbank_scsi-megaraid-sas_6.804.60.00-1OEM.600.0.0.2159203, BRCM_bootbank_net-tg3_3.137l.v60.1-1OEM.600.0.0.2494585, <<略>>
   VIBs Removed: VMware_bootbank_ata-pata-amd_0.3.10-3vmw.550.0.0.1331820, VMware_bootbank_ata-pata-atiixp_0.4.6-4vmw.550.0.0.1331820, VMware_bootbank_ata-pata-cmd64x_0.2.5-3vmw.550.0.0.1331820, <<略>>
   VIBs Skipped: Dell_bootbank_dell-configuration-vib_6.0-1A00, EMU_bootbank_ima-be2iscsi_10.6.150.3-1OEM.600.0.0.2159203, EMU_bootbank_scsi-be2iscsi_10.6.150.3-1OEM.600.0.0.2159203, <<略>>
real 0m 46.53s
user 0m 0.30s
sys 0m 0.00s
~ #
数十秒で完了する。


その0・概要
その1・アップロード
その2・現状の確認
その3・RBSDファイルの内容の確認
その4・メンテナンスモードへの切替
その5・ESXiの更新
その6・再起動と確認
その7・ライセンスの入力

Dell PowerEdge上のVMware ESXi 5.5を6.0 U1に更新する・その4・メンテナンスモードへの切替

メンテナンスモードへ切替える。
まず、現在の状態を確認する。
~ # esxcli system maintenanceMode get
Disabled
~ # 
現在は、メンテナンスモードではない(Disabled)であることが判る。

メンテナンスモードへ切替える。
~ # esxcli system maintenanceMode set --enable true
~ # 

確認する。
~ # esxcli system maintenanceMode get
Enabled
メンテナンスモードへ変更された(Enabled)ことが判る。


その0・概要
その1・アップロード
その2・現状の確認
その3・RBSDファイルの内容の確認
その4・メンテナンスモードへの切替
その5・ESXiの更新
その6・再起動と確認
その7・ライセンスの入力

Dell PowerEdge上のVMware ESXi 5.5を6.0 U1に更新する・その3・RBSDファイルの内容の確認

RBSDファイルの中を確認する。
~ # esxcli software sources vib get --depot=/vmfs/volumes/datastore1/Patch/VMware-VMvisor-Installer-6.0.0-3029758.x86_64-Dell_Customized-A00.zip
VMware_bootbank_sata-sata-sil_2.3-4vmw.600.0.0.2494585
   Name: sata-sata-sil
   Version: 2.3-4vmw.600.0.0.2494585
   Type: bootbank
   Vendor: VMware
   Acceptance Level: VMwareCertified
   Summary: sata_sil: sata driver for VMware ESX
   Description: Silicon Image SATA controllers Driver
   ReferenceURLs: 
   Creation Date: 2015-02-06
   Depends: vmkapi_2_3_0_0, com.vmware.driverAPI-9.2.3.0, com.vmware.libata-9.2.3.0
   Conflicts: 
   Replaces: 
   Provides: 
   Maintenance Mode Required: True
   Hardware Platforms Required: 
   Live Install Allowed: False
   Live Remove Allowed: False
   Stateless Ready: True
   Overlay: False
   Tags: driver, module
   Payloads: sata-sat

INT_bootbank_net-ixgbe_3.21.6-1OEM.600.0.0.2159203
   Name: net-ixgbe
   Version: 3.21.6-1OEM.600.0.0.2159203
   Type: bootbank
<<略>>
Overlay: False
   Tags: driver, module
   Payloads: scsi-aic

EMU_bootbank_ima-be2iscsi_10.6.150.3-1OEM.600.0.0.2159203
   Name: ima-be2iscsi
   Version: 10.6.150.3-1OEM.600.0.0.2159203
   Type: bootbank
   Vendor: EMU
   Acceptance Level: VMwareCertified
   Summary: beima: IMA plugin for VMware ESX
   Description: OneConnect IMA plugin
   ReferenceURLs: 
   Creation Date: 2015-06-09
   Depends: 
   Conflicts: 
   Replaces: 
   Provides: ima-version1, ima-version2
   Maintenance Mode Required: True
   Hardware Platforms Required: 
   Live Install Allowed: False
   Live Remove Allowed: False
   Stateless Ready: True
   Overlay: False
   Tags: 
   Payloads: ima-be2i
~ #
メンテナンスモードへの切替が必要か否かは、「Maintenance Mode Required:」の行で判断する。
今回はメンテナンスモードへの切替が必要なものが多そうに見える。

さらに確認する。
~ # esxcli software sources vib get --depot=/vmfs/volumes/datastore1/Patch/VMware-VMvisor-Installer-6.0.0-3029758.x86_64-Dell_Customized-A00.zip | grep 'Maintenance Mode Required:'
   Maintenance Mode Required: True
   Maintenance Mode Required: True
   Maintenance Mode Required: True
<<略>>
   Maintenance Mode Required: True
~ #
メンテナンスモードへの切替を要するものが多いことが判る。


その0・概要
その1・アップロード
その2・現状の確認
その3・RBSDファイルの内容の確認
その4・メンテナンスモードへの切替
その5・ESXiの更新
その6・再起動と確認
その7・ライセンスの入力

Dell PowerEdge上のVMware ESXi 5.5を6.0 U1に更新する・その2・現状の確認

更新に先立って、前の記事でアップロードしたRBSDファイルを調べてみる。
通常は、メンテナンスモードに切替え、更新するが、場合によってはメンテナンスモードへの切替が不要な場合もある。

SSHで対象ホストに接続する。
まず、対象ホストのバージョンを確認する。
~ # esxcli system version get
Product: VMware ESXi
Version: 5.5.0
Build: Releasebuild-1892794
Update: 1
~ # 
バージョン番号(5.5.0)とビルド番号(1892794)を確認できる。
なお、プロンプトが「~ # 」であることも確認できるが、これはESXi 5.5まで。
ESXi 6.0に更新後は変化するので後で確認してみよう。

現状のソフトウェア(VIB)構成を確認する。
~ # esxcli software vib list
Name                           Version                               Vendor  Acceptance Level  Install Date
-----------------------------  ------------------------------------  ------  ----------------  ------------
OpenManage                     7.4.0.1-0000                          Dell    PartnerSupported  2014-08-21  
ata-pata-amd                   0.3.10-3vmw.550.0.0.1331820           VMware  VMwareCertified   2014-08-21  
ata-pata-atiixp                0.4.6-4vmw.550.0.0.1331820            VMware  VMwareCertified   2014-08-21  
<<略>>
elxnet                         10.0.100.0v-1vmw.550.0.0.1331820      VMware  VMwareCertified   2014-08-21
esx-base                       5.5.0-1.28.1892794                    VMware  VMwareCertified   2014-08-25
esx-dvfilter-generic-fastpath  5.5.0-0.0.1331820                     VMware  VMwareCertified   2014-08-21
<<略>>
uhci-usb-uhci                  1.0-3vmw.550.0.0.1331820              VMware  VMwareCertified   2014-08-21  
tools-light                    5.5.0-1.28.1892794                    VMware  VMwareCertified   2014-08-25  
~ #
「Install Date」が以前にインストール・更新した日付になっていることが確認できる。


その0・概要
その1・アップロード
その2・現状の確認
その3・RBSDファイルの内容の確認
その4・メンテナンスモードへの切替
その5・ESXiの更新
その6・再起動と確認
その7・ライセンスの入力

Dell PowerEdge上のVMware ESXi 5.5を6.0 U1に更新する・その1・アップロード

主なサーバベンダは、独自にカスタマイズされたESXiのメディアを配布しているので、できる限りそれを使うのが良い。
今回は、Dell PowerEdgeを使用したので、Dellのカスタマイズ版を使う。
主なサーバベンダのものは、Dellのサイトにある
作業に先立ち、ここからRBSDファイル(VMware-ESXi-6.0.0.update01-3073146.x86_64-Dell_Customized-offline-bundle-A01.zip)を適当な場所にダウンロードしておく。

vShphere Clientを起動、バージョンアップ対象ホストに接続する。


「サマリ」タブをクリックし、「リソース」→「ストレージ」から、一時的にRBSDファイルを置くデータストア(ここではdatastore1)を選び、右クリック、コンテキストメニューから「データストアの参照(B)...」を選択する。
「データストアブラウザ」画面が開く。

Dell PowerEdge上のVMware ESXi 5.5を6.0 U1に更新する・その0・概要

VMware ESXi 6.0 Update 1がリリースされた。
今回は、Dell PowerEdge上のESXi 5.5 Patch 2をESXi 6.0 Update 1に更新する。
正確なバージョンは以下の通り。
  • ESXi 5.5 Patch 2 (Build 1892794)
  • ESXi 6.0 U1 (Build 3029758), Dell Customized A00


その0・概要
その1・アップロード
その2・現状の確認
その3・RBSDファイルの内容の確認
その4・メンテナンスモードへの切替
その5・ESXiの更新
その6・再起動と確認
その7・ライセンスの入力

2015/11/20

VMware ESXiを5.5u1から6.0.0bに更新・その7・メンテナンスモードの終了

vSphere Clientのメイン画面を表示する。
対象ホストがメンテナンスモードであることを確認し、右クリックする。


コンテキストメニューから「メンテナンスモードの終了(E)」を選択する。


下ペインで、「メンテナンスモードの終了」の「ステータス」が「完了」になるまで待つ。
左ペインで、対象ホストのメンテナンスモードが終了したことを確認する。


その0・概要
その1・メンテナンスモードへの切替
その2・ホストの停止
その3・インストールディスクで起動
その4・ESXi 6.0の起動
その5・vSphere Clientの接続
その6・ライセンスの割り当て
その7・メンテナンスモードの終了

VMware ESXiを5.5u1から6.0.0bに更新・その6・ライセンスの割り当て

コマンドラインから実施する方法については、『Dell PowerEdge上のVMware ESXi 5.5を6.0 U1に更新する・その7・ライセンスの入力 』参照。

vSphere Clientが起動したら、画面上で「ホーム」→「インベントリ」→「インベントリ」の順で選び、対象ホストをクリックする。


画面上に「評価(残り60日)」と表示されていることを確認する。
この状態で使用し続けると、60日後にライセンス切れになる。

画面中央の「構成」タブをクリック、「ソフトウェア」の「ライセンス機能」をクリックする。


「製品: 評価モード」表示されていることと、その直下の評価モードの有効期限を確認する。
画面右の「編集...」をクリックする。


「ライセンスの割り当て: <<対象ホスト名>>」画面が表示される。
この時点では、「評価モード」で、「ライセンスキーなし」の状態であることを確認する。

VMware ESXiを5.5u1から6.0.0bに更新・その5・vSphere Clientの接続

起動が完了したら、vSphere Clientを起動する。
VMware vSphere Clientのログイン画面が表示される。


以下を入力し、「ログイン(L)」ボタンをクリックする。
  • IPアドレス/名前(N): 対象ホストのホスト名もしくはIPアドレス。ここでは「esxi01」。
  • ユーザ名(U): ユーザ名。ここでは「root」。
  • パスワード(P): パスワード。


「セキュリティ警告」画面が表示される。
「無視(I)」ボタンをクリックする。


ライセンスをインストールするまでは、「VMware評価の通知」ダイアログが表示される。
「OK」ボタンをクリックする。


その0・概要
その1・メンテナンスモードへの切替
その2・ホストの停止
その3・インストールディスクで起動
その4・ESXi 6.0の起動
その5・vSphere Clientの接続
その6・ライセンスの割り当て
その7・メンテナンスモードの終了

VMware ESXiを5.5u1から6.0.0bに更新・その4・ESXi 6.0の起動

しばらく待つと、対象ホストが再起動される


さらに待つと、「Loading VMware ESXi」画面にプログレスバーが表示される。


「VMware ESXi 6.0.0 (VMKernel Release Build 2809209)」画面が表示される。


タイトル直下にハードウェア情報が表示されるので、正しいことを確認する。
しばらく待つと、起動が完了する。

VMware ESXiを5.5u1から6.0.0bに更新・その3・インストールディスクで起動

VMware ESXiを5.5u1から6.0.0bに更新・その3・インストールディスクで起動

インストールディスクが対象ホストに接続されていることを確認する。
今回は、IBM BladeCenter上のブレードを対象ホストとしたため、AMM (Advanced Management Module)のRemote Control機能を使い、ローカルPC上のISOファイルをネットワーク越しにマウントした。
この辺りは、ハードウェアにより差異があるため、適宜読み替えてほしい。

続いて、対象ホストを起動する。
起動画面が表示される。


しばらくすると、メッセージが表示される。


F12キーを押下し、起動デバイスの選択を指示する。
しばらくすると、「Select Boot Device」画面が表示される。


カーソルキーで「CD ROM」を選択し、Enterキーを押下する。
ISOファイルがCD-ROMとして読まれ、「ESXi-6.0.0-20150704001-standard Boot Menu」画面が表示される。