2012/12/23

Windows Server 2012でリモートデスクトップを有効化するコマンド (PowerShell v3準拠版)

前のエントリでは2008/2008R2でも使える、ある意味歴史的なリモートデスクトップ接続の有効化手順を掲載したので、2012から搭載されたPowerShell v3+cmdletによる有効化手順も作ってみました。

■PowerShellから、拡張されたファイアウォール規則を有効化する


PS C:\Windows\system32> Get-NetFirewallRule -Group "@FirewallAPI.dll,-28752"

Name                  : RemoteDesktop-UserMode-In-TCP
DisplayName           : リモート デスクトップ - ユーザー モード (TCP 受信)
Description           : RDP トラフィックを許可するためのリモート デスクトップ サービスの受信規則です。[TCP 3389]
DisplayGroup          : リモート デスクトップ
Group                 : @FirewallAPI.dll,-28752
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow
EdgeTraversalPolicy   : Block
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 : 
PrimaryStatus         : OK
Status                : 規則は、ストアから正常に解析されました。 (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local

Name                  : RemoteDesktop-UserMode-In-UDP
DisplayName           : リモート デスクトップ - ユーザー モード (UDP 受信)
Description           : RDP トラフィックを許可するためのリモート デスクトップ サービスの受信規則です。[UDP 3389]
DisplayGroup          : リモート デスクトップ
Group                 : @FirewallAPI.dll,-28752
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow
EdgeTraversalPolicy   : Block
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 : 
PrimaryStatus         : OK
Status                : 規則は、ストアから正常に解析されました。 (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local


PS C:\Windows\system32> Enable-NetFirewallRule -Group "@FirewallAPI.dll,-28752"

PS C:\Windows\system32>

@FirewallAPI.dll,-28752 は、「リモート デスクトップ」の内部名。
(見たまんまですがメッセージカタログIDですね…表示上はDLLから日本語名にして返してくれてるんだと思います)

<追記>

■メッセージカタログIDの対照表 (日本語CP932の環境の場合)



PS C:\Windows\system32> Get-NetFirewallRule | Sort-Object -Unique -Property Group | Format-List -Property Group,DisplayName


Group       : @comres.dll,-3400
DisplayName : COM+ ネットワーク アクセス (DCOM-受信)

Group       : @comres.dll,-3405
DisplayName : COM+ リモート管理 (DCOM-受信)

Group       : @FirewallAPI.dll,-25000
DisplayName : コア ネットワーク - ルーター アドバタイズ (ICMPv6 受信)

Group       : @FirewallAPI.dll,-28002
DisplayName : キー管理サービス (TCP 受信)

Group       : @FirewallAPI.dll,-28502
DisplayName : ファイルとプリンターの共有 (NB データグラム送信)

Group       : @FirewallAPI.dll,-28602
DisplayName : SMBDirect でのファイルとプリンターの共有 (iWARP 受信)

Group       : @FirewallAPI.dll,-28752
DisplayName : リモート デスクトップ - ユーザー モード (UDP 受信)

Group       : @FirewallAPI.dll,-29002
DisplayName : iSCSI サービス (TCP 送信)

Group       : @FirewallAPI.dll,-29252
DisplayName : リモート イベントのログ管理 (NP 受信)

Group       : @FirewallAPI.dll,-29502
DisplayName : リモート サービス管理 (RPC-EPMAP)

Group       : @FirewallAPI.dll,-30002
DisplayName : Windows ファイアウォール リモート管理 (RPC-EPMAP)

Group       : @FirewallAPI.dll,-30252
DisplayName : Windows リモート管理 - 互換モード (HTTP-In)

Group       : @FirewallAPI.dll,-30267
DisplayName : Windows リモート管理 (HTTP 受信)

Group       : @FirewallAPI.dll,-32752
DisplayName : ネットワーク探索 (SSDP 受信)

Group       : @FirewallAPI.dll,-33252
DisplayName : スケジュールされたリモート タスク管理 (RPC-EPMAP)

Group       : @FirewallAPI.dll,-33502
DisplayName : 分散トランザクション コーディネーター (TCP 受信)

Group       : @FirewallAPI.dll,-33752
DisplayName : ルーティングとリモート アクセス (PPTP 送信)

Group       : @FirewallAPI.dll,-34251
DisplayName : Windows Management Instrumentation (非同期受信)

Group       : @FirewallAPI.dll,-34501
DisplayName : リモート ボリューム管理 - 仮想ディスク サービス (RPC)

Group       : @FirewallAPI.dll,-34752
DisplayName : パフォーマンス ログと警告 (TCP 受信)

Group       : @FirewallAPI.dll,-36501
DisplayName : TPM 仮想スマートカード管理 (TCP 送信)

Group       : @firewallapi.dll,-36751
DisplayName : リモート シャットダウンの受信規則 (RPC-EP 受信)

Group       : @netlogon.dll,-1010
DisplayName : Netlogon サービス (NP 受信)

Group       : @peerdistsh.dll,-9000
DisplayName : BranchCache コンテンツ取得 (HTTP-送信)

Group       : @peerdistsh.dll,-9001
DisplayName : BranchCache ピア検出 (WSD-受信)

Group       : @peerdistsh.dll,-9002
DisplayName : BranchCache ホスト型キャッシュ サーバー (HTTP-送信)

Group       : @peerdistsh.dll,-9003
DisplayName : BranchCache ホスト型キャッシュ クライアント (HTTP-送信)

Group       : @scwcmd.exe,-8000
DisplayName : SCW リモート アクセス ファイアウォール規則 - Scshost - 動的 RPC

Group       : @snmptrap.exe,-3
DisplayName : SNMP トラップ サービス (UDP 受信)

Group       : @sstpsvc.dll,-35001
DisplayName : Secure Socket トンネリング プロトコル (SSTP 受信)

Group       : @vmicres.dll,-700
DisplayName : 仮想マシンの監視 (RPC)




PS C:\Windows\system32> 




Windows Server 2012でリモートデスクトップを有効化するコマンド


ServerCoreでもHyper-V上のでも、とりあえずリモートデスクトップを最初に有効化することが多いと思うのでコマンド類をメモ。

■リモートデスクトップ接続を有効にする

PS C:\Users\Administrator> cscript c:\windows\system32\scregedit.wsf /ar 0
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

レジストリが更新されました。
PS C:\Users\Administrator>

■リモートデスクトップのファイアウォール規則を有効化 (RDPポートの開放)

PS C:\Users\Administrator> netsh advfirewall firewall set rule group="リモート デスクトップ" new enable=yes

2 規則を更新しました。
OK

PS C:\Users\Administrator>

■とりあえず対話的にやりたいときは

Sconfigコマンドを使えば、コマンドプロンプト上でメニュー形式で設定変更も出来ますね。




以上、ご参考までに。

2012/12/10

TrendMicroウイルススキャンが入っている環境で、Hyper-Vの仮想ディスク追加が失敗する場合の対処方法

TrendMicroのウイルススキャンソフトなどが導入された環境で、Hyper-V管理コンソール上で仮想マシンに仮想ディスクの作成・追加などが失敗する場合の対処方法をメモ。

<発生するエラー>


  • デバイス 'Synthetic Disk Drive' を追加できませんでした。
    '仮想マシン'は、デバイス 'Synthetic Disk Drive' を追加できませんでした。(仮想マシンID …)
    'C:\ProgramData\Microsoft\Windows\Hyper-V'にある Virtual Machines 構成 … はアクセス出来なくなりました: 要求された操作はユーザマップセクションで開いたファイルでは実行出来ません。(0x800704C8)


<対処方法>

この問題を解決するには、ウイルス対策ソフトウェア内のリアルタイム スキャン コンポーネントで次のディレクトリおよびファイルが除外されるように構成します。
  • 既定の仮想マシン構成ディレクトリ (C:\ProgramData\Microsoft\Windows\Hyper-V)
  • カスタム仮想マシン構成ディレクトリ
  • 既定の仮想ハード ディスク ドライブ ディレクトリ (C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks)
  • カスタム仮想ハード ディスク ドライブ ディレクトリ
  • スナップショット ディレクトリ
  • Vmms.exe
  • Vmwp.exe
また、Windows Server 2008 R2 でクラスターの共有ボリューム (CSV) と一緒にライブ マイグレーションを使用するときは、CSV パス "C:\Clusterstorage" とそのすべてのサブディレクトリを除外します。
(KB情報より引用)
たとえば、トレンドマイクロウイルススキャンの場合は、設定画面で上記設定を実施すれば良い。
が、コーポレートエディションなどで管理者コンソールが封じられている場合は、たとえば下記のようなレジストリを設定すれば良い。


[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\TrendMicro\PC-cillinNTCorp\CurrentVersion\Real Time Scan Configuration]
"Enable"=dword:00000001
"ExcludedFolder"="C:\\ProgramData\\Microsoft\\Windows\\Hyper-V"

(Enableをdword:0にすると、リアルタイムスキャンが止まってしまうので注意)


<参考>

Hyper-V をインストールした Windows Server 2008 ベースのコンピューターまたは Microsoft Hyper-V Server 2008 ベースのコンピューターで仮想マシンを作成または起動すると、エラー コード "0x800704C8"、"0x80070037"、または "0x800703E3" が表示されることがある [KB961804]

2012/12/09

RHEL/CentOSにHyper-V統合サービス3.4をインストールした。

RHEL 6.3にHyper-V統合サービスをインストールしたときの手順メモとして。

■マイクロソフトからHyper-V統合サービスのISOファイルをダウンロード

Linux Integration Services Version 3.4 for Hyper-V からLinuxICv34.isoをダウンロードする。

■NICを認識させたい仮想マシンにHyper-V統合サービスのISOファイルをマウントする。

GUIで操作しても良いですけど、気分的にPowerShellでやってみた。
  1. PowerShellを管理者として実行。
  2. Get-VMコマンドでISOディスクをマウントしたい仮想マシン名(Name)を一応確認。
  3. Get-VMDvdDriveコマンドで仮想マシンに何もマウントされてないかどうか確認。
  4. Set-VMDvdDriveコマンドでISOディスクのパスを設定しマウント。
  5. Get-VMDvdDriveコマンドでISOディスクがマウントできたか確認。

■Hyper-V統合サービスのインストールを行う。

LinuxICの中をマウントすると、対応OS毎にディレクトリが分かれているので、入れたいものに合わせてinstall.shを実行する。
主な流れは下のとおり。

  • mount /dev/cdrom /mnt
  • cd /mnt/RHEL63
  • ./install.sh
  • shutdown -r now



■Hyper-V統合NICの設定

あとは普通のethXとして見えてくるのでIPアドレスの設定などを行えばOK。




2012/11/14

Amazon RDSでMySQLなDBを作ってみたよ。

■Amazon RDS向けのSecurity Groupの作成

  1. DB Security Groupsに移動し、「Create DB Security Group」を選択。
    image
  2. DB Security Groupの名前、説明を入力し作成する。
    image
  3. DB Security Groupが追加されたことを確認し、接続元となるNWアドレスやAmazon EC2のSecurity Group名などで接続元を絞る設定を入れる。
    (画面では0.0.0.0/0 = すべてのIPアドレスからの接続を許可しようとしている)
    image
  4. 「Add」ボタンを押し、Statusがauthorizing→authorizedに変化したことを確認する。
    image

■Amazon RDS向けのParameter Groupの作成

  1. DB Parameter Groupsから「Create DB Parameter Group」を実行する。
    image
  2. DB Parameter Groupが追加されるので、Viewingに変更したいパラメータ名を入力し、値の変更などを行う。
    image
    image
    image

■Amazon RDS DBインスタンスの作成

  1. DB Instancesから「Launch DB Instance」を実行する。
    image
  2. DBインスタンスとしてMySQLを選択。
    image
  3. DBインスタンスの詳細設定を行う。
    image
  4. 追加設定を行う。
     image
  5. 管理用オプションの設定を行う。(今回は自動バックアップ不要なので変更する)
    image
    image
  6. 最終確認が出てくるので「Launch DB Instance」を押す。
    image
    image

■MySQLクライアントから接続確認を行う。

$ mysql -h clouderadbinstance.xxxxxxx.us-east-1.rds.amazonaws.com -u cloudera –p

Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.27 Source distribution

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| clouderadb         |
| innodb             |
| mysql              |
| performance_schema |
+--------------------+
5 rows in set (0.00 sec)

mysql>

Amazon Linux上にSun JDK 1.7を入れてみた。(修正)


■Sun JDKのダウンロード

OracleのダウンロードページからJavaScriptが動くブラウザでダウンロードしておく。
ダウンロードしたらLinux上にSCPなどでコピーする。

■Sun JDKの展開

Amazon Linuxだと/usr/lib/jvmの配下に置くのがよさそうなのでそこに展開することにした。
cd /usr/lib/jvm
sudo tar xvzf ~ec2-user/jdk-7u9-linux-x64.gz
sudo ln -s java-1.6.0-openjdk-1.6.0.0.x86_64 jdk-1.7.0-sunjava.x86_64
sudo ln -s jdk1.7.0_09/jre jre-1.7.0-sunjdk.x86_64

cd /usr/lib/jvm/jdk1.7.0_09/man/man1
sudo gzip *

■JRE(java)のインストール

alternatives (update-alternatives)コマンドを使ってJava関連ファイルへのリンクを設定していく。

cd /usr/lib/jvm
sudo alternatives --install /usr/bin/java java /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/java 17009 \
--slave /usr/bin/java_vm java_vm /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/java_vm \
--slave /usr/bin/javaws javaws /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/javaws \
--slave /usr/bin/jcontrol jcontrol /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/jcontrol \
--slave /usr/bin/keytool keytool /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/keytool \
--slave /usr/bin/orbd orbd /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/orbd \
--slave /usr/bin/pack200 pack200 /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/pack200 \
--slave /usr/bin/policytool policytool /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/policytool \
--slave /usr/bin/rmid rmid /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/rmid \
--slave /usr/bin/rmiregistry rmiregistry /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/rmiregistry \
--slave /usr/bin/servertool servertool /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/servertool \
--slave /usr/bin/tnameserv tnameserv /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/tnameserv \
--slave /usr/bin/unpack200 unpack200 /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/bin/unpack200 \
--slave /usr/lib/jvm-exports/jre jre_exports /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64/lib \
--slave /usr/lib/jvm/jre jre /usr/lib/jvm/jre-1.7.0-sunjdk.x86_64 \
--slave /usr/share/man/man1/java.1.gz java.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/java.1.gz \
--slave /usr/share/man/man1/keytool.1.gz keytool.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/keytool.1.gz \
--slave /usr/share/man/man1/orbd.1.gz orbd.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/orbd.1.gz \
--slave /usr/share/man/man1/pack200.1.gz pack200.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/pack200.1.gz \
--slave /usr/share/man/man1/rmid.1.gz rmid.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/rmid.1.gz\
--slave /usr/share/man/man1/rmiregistry.1.gz rmiregistry.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/rmiregistry.1.gz \
--slave /usr/share/man/man1/servertool.1.gz servertool.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/servertool.1.gz \
--slave /usr/share/man/man1/tnameserv.1.gz tnameserv.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/tnameserv.1.gz \
--slave /usr/share/man/man1/unpack200.1.gz unpack200.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/unpack200.1.gz

sudo alternatives --config java

■JDK(javac)のインストール

javaコマンドと同様に、javacコマンドもリンクを作成していく。
sudo alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_09/bin/javac 17009 \
--slave /usr/bin/appletviewer appletviewer /usr/lib/jvm/jdk1.7.0_09/bin/appletviewer \
--slave /usr/bin/apt apt /usr/lib/jvm/jdk1.7.0_09/bin/apt \
--slave /usr/bin/extcheck extcheck /usr/lib/jvm/jdk1.7.0_09/bin/extcheck \
--slave /usr/bin/idlj idlj /usr/lib/jvm/jdk1.7.0_09/bin/idlj \
--slave /usr/bin/jar jar /usr/lib/jvm/jdk1.7.0_09/bin/jar \
--slave /usr/bin/jarsigner jarsigner /usr/lib/jvm/jdk1.7.0_09/bin/jarsigner \
--slave /usr/bin/javadoc javadoc /usr/lib/jvm/jdk1.7.0_09/bin/javadoc \
--slave /usr/bin/javafxpackager javafxpackager /usr/lib/jvm/jdk1.7.0_09/bin/javafxpackager \
--slave /usr/bin/javah javah /usr/lib/jvm/jdk1.7.0_09/bin/javah \
--slave /usr/bin/javap javap /usr/lib/jvm/jdk1.7.0_09/bin/javap \
--slave /usr/bin/java-rmi.cgi java-rmi.cgi /usr/lib/jvm/jdk1.7.0_09/bin/java-rmi.cgi \
--slave /usr/bin/javaws javaws /usr/lib/jvm/jdk1.7.0_09/bin/javaws \
--slave /usr/bin/jcmd jcmd /usr/lib/jvm/jdk1.7.0_09/bin/jcmd \
--slave /usr/bin/jconsole jconsole /usr/lib/jvm/jdk1.7.0_09/bin/jconsole \
--slave /usr/bin/jcontrol jcontrol /usr/lib/jvm/jdk1.7.0_09/bin/jcontrol \
--slave /usr/bin/jdb jdb /usr/lib/jvm/jdk1.7.0_09/bin/jdb \
--slave /usr/bin/jhat jhat /usr/lib/jvm/jdk1.7.0_09/bin/jhat \
--slave /usr/bin/jinfo jinfo /usr/lib/jvm/jdk1.7.0_09/bin/jinfo \
--slave /usr/bin/jmap jmap /usr/lib/jvm/jdk1.7.0_09/bin/jmap \
--slave /usr/bin/jps jps /usr/lib/jvm/jdk1.7.0_09/bin/jps \
--slave /usr/bin/jrunscript jrunscript /usr/lib/jvm/jdk1.7.0_09/bin/jrunscript \
--slave /usr/bin/jsadebugd jsadebugd /usr/lib/jvm/jdk1.7.0_09/bin/jsadebugd \
--slave /usr/bin/jstack jstack /usr/lib/jvm/jdk1.7.0_09/bin/jstack \
--slave /usr/bin/jstat jstat /usr/lib/jvm/jdk1.7.0_09/bin/jstat \
--slave /usr/bin/jstatd jstatd /usr/lib/jvm/jdk1.7.0_09/bin/jstatd \
--slave /usr/bin/jvisualvm jvisualvm /usr/lib/jvm/jdk1.7.0_09/bin/jvisualvm \
--slave /usr/bin/keytool keytool /usr/lib/jvm/jdk1.7.0_09/bin/keytool \
--slave /usr/bin/native2ascii native2ascii /usr/lib/jvm/jdk1.7.0_09/bin/native2ascii \
--slave /usr/bin/orbd orbd /usr/lib/jvm/jdk1.7.0_09/bin/orbd \
--slave /usr/bin/pack200 pack200 /usr/lib/jvm/jdk1.7.0_09/bin/pack200 \
--slave /usr/bin/policytool policytool /usr/lib/jvm/jdk1.7.0_09/bin/policytool \
--slave /usr/bin/rmic rmic /usr/lib/jvm/jdk1.7.0_09/bin/rmic \
--slave /usr/bin/rmid rmid /usr/lib/jvm/jdk1.7.0_09/bin/rmid \
--slave /usr/bin/rmiregistry rmiregistry /usr/lib/jvm/jdk1.7.0_09/bin/rmiregistry \
--slave /usr/bin/schemagen schemagen /usr/lib/jvm/jdk1.7.0_09/bin/schemagen \
--slave /usr/bin/serialver serialver /usr/lib/jvm/jdk1.7.0_09/bin/serialver \
--slave /usr/bin/servertool servertool /usr/lib/jvm/jdk1.7.0_09/bin/servertool \
--slave /usr/bin/tnameserv tnameserv /usr/lib/jvm/jdk1.7.0_09/bin/tnameserv \
--slave /usr/bin/unpack200 unpack200 /usr/lib/jvm/jdk1.7.0_09/bin/unpack200 \
--slave /usr/bin/wsgen wsgen /usr/lib/jvm/jdk1.7.0_09/bin/wsgen \
--slave /usr/bin/wsimport wsimport /usr/lib/jvm/jdk1.7.0_09/bin/wsimport \
--slave /usr/bin/xjc xjc /usr/lib/jvm/jdk1.7.0_09/bin/xjc \
--slave /usr/share/man/man1/appletviewer.1.gz appletviewer.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/appletviewer.1.gz \
--slave /usr/share/man/man1/apt.1.gz apt.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/apt.1.gz \
--slave /usr/share/man/man1/extcheck.1.gz extcheck.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/extcheck.1.gz \
--slave /usr/share/man/man1/idlj.1.gz idlj.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/idlj.1.gz \
--slave /usr/share/man/man1/jar.1.gz jar.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jar.1.gz \
--slave /usr/share/man/man1/jarsigner.1.gz jarsigner.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jarsigner.1.gz \
--slave /usr/share/man/man1/java.1.gz java.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/java.1.gz \
--slave /usr/share/man/man1/javac.1.gz javac.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/javac.1.gz \
--slave /usr/share/man/man1/javadoc.1.gz javadoc.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/javadoc.1.gz \
--slave /usr/share/man/man1/javafxpackager.1.gz javafxpackager.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/javafxpackager.1.gz \
--slave /usr/share/man/man1/javah.1.gz javah.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/javah.1.gz \
--slave /usr/share/man/man1/javap.1.gz javap.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/javap.1.gz \
--slave /usr/share/man/man1/javaws.1.gz javaws.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/javaws.1.gz \
--slave /usr/share/man/man1/jcmd.1.gz jcmd.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jcmd.1.gz \
--slave /usr/share/man/man1/jconsole.1.gz jconsole.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jconsole.1.gz \
--slave /usr/share/man/man1/jdb.1.gz jdb.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jdb.1.gz \
--slave /usr/share/man/man1/jhat.1.gz jhat.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jhat.1.gz \
--slave /usr/share/man/man1/jinfo.1.gz jinfo.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jinfo.1.gz \
--slave /usr/share/man/man1/jmap.1.gz jmap.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jmap.1.gz \
--slave /usr/share/man/man1/jps.1.gz jps.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jps.1.gz \
--slave /usr/share/man/man1/jrunscript.1.gz jrunscript.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jrunscript.1.gz \
--slave /usr/share/man/man1/jsadebugd.1.gz jsadebugd.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jsadebugd.1.gz \
--slave /usr/share/man/man1/jstack.1.gz jstack.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jstack.1.gz \
--slave /usr/share/man/man1/jstat.1.gz jstat.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jstat.1.gz \
--slave /usr/share/man/man1/jstatd.1.gz jstatd.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jstatd.1.gz \
--slave /usr/share/man/man1/jvisualvm.1.gz jvisualvm.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/jvisualvm.1.gz \
--slave /usr/share/man/man1/keytool.1.gz keytool.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/keytool.1.gz \
--slave /usr/share/man/man1/native2ascii.1.gz native2ascii.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/native2ascii.1.gz \
--slave /usr/share/man/man1/orbd.1.gz orbd.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/orbd.1.gz \
--slave /usr/share/man/man1/pack200.1.gz pack200.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/pack200.1.gz \
--slave /usr/share/man/man1/policytool.1.gz policytool.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/policytool.1.gz \
--slave /usr/share/man/man1/rmic.1.gz rmic.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/rmic.1.gz \
--slave /usr/share/man/man1/rmid.1.gz rmid.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/rmid.1.gz \
--slave /usr/share/man/man1/rmiregistry.1.gz rmiregistry.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/rmiregistry.1.gz \
--slave /usr/share/man/man1/schemagen.1.gz schemagen.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/schemagen.1.gz \
--slave /usr/share/man/man1/serialver.1.gz serialver.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/serialver.1.gz \
--slave /usr/share/man/man1/servertool.1.gz servertool.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/servertool.1.gz \
--slave /usr/share/man/man1/tnameserv.1.gz tnameserv.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/tnameserv.1.gz \
--slave /usr/share/man/man1/unpack200.1.gz unpack200.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/unpack200.1.gz \
--slave /usr/share/man/man1/wsgen.1.gz wsgen.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/wsgen.1.gz \
--slave /usr/share/man/man1/wsimport.1.gz wsimport.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/wsimport.1.gz \
--slave /usr/share/man/man1/xjc.1.gz xjc.1.gz /usr/lib/jvm/jdk1.7.0_09/man/man1/xjc.1.gz

sudo alternatives --config javac

■環境変数JAVA_HOMEの設定

Amazon Linuxの場合は、APIツール自身が使うために下記ファイルで環境変数を設定しているため特に対応不要。
/etc/profile.d/aws-apitools-common.sh

# Prefer JDK if presentif [ -d /usr/lib/jvm/java ]; then    export JAVA_HOME=/usr/lib/jvm/javaelif [ -d /usr/lib/jvm/jre ]; then    export JAVA_HOME=/usr/lib/jvm/jrefi

↑もしAmazon Linux以外の場合は自分で/etc/profile.dにjavahome.shとでもして
export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-sunjdk.x86_64
とでもしておけばよい。

■メモ

--slave節を組み立てるのが面倒臭いときは、実行ファイルやmanファイルが転がっているディレクトリに行って
$ ls * | xargs -I% echo --slave /usr/share/man/man1/% % $PWD/% \\
としてから適当に取捨選択すればよい。

2012/11/13

Amazon Linux上にSun JDK 1.7を入れてみた。

Amazon Linux AMI上でSun JDK 1.7を入れるのにちょっと苦労したのでメモ。

2012/11/14追記:
⇒ Amazon Linux上にSun JDK 1.7を入れてみた。(修正) にて再修正したやり方を書いています。
(下のやり方をした場合、/usr/lib/jvm/jreが正常に作成されないため、JAVA_HOME環境変数が自動設定されなくなります)


Sun Java SE (JDK)のダウンロード

http://www.oracle.com/technetwork/java/javase/downloads/index.html あたりからJavaScriptが動くブラウザを使ってダウンロードしておく。
# w3mやlynxからは上手くいかないので注意。


rpmのインストール

上でダウンロードしてきたrpmをインストールする。
root# rpm -ivh jdk-7u9-linux-x64.rpm


利用するJavaの切り換え



作業前の状態
root# java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.5) (amazon-53.1.11.5.47.amzn1-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

root# update-alternatives --display java
java - status is auto.
 link currently points to /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java - priority 16000
 slave keytool: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/keytool
 slave orbd: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/orbd
 slave pack200: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/pack200
 slave rmid: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/rmid
 slave rmiregistry: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/rmiregistry
 slave servertool: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/servertool
 slave tnameserv: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/tnameserv
 slave unpack200: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/unpack200
 slave jre_exports: /usr/lib/jvm-exports/jre-1.6.0-openjdk.x86_64
 slave jre: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64
 slave java.1.gz: /usr/share/man/man1/java-java-1.6.0-openjdk.1.gz
 slave keytool.1.gz: /usr/share/man/man1/keytool-java-1.6.0-openjdk.1.gz
 slave orbd.1.gz: /usr/share/man/man1/orbd-java-1.6.0-openjdk.1.gz
 slave pack200.1.gz: /usr/share/man/man1/pack200-java-1.6.0-openjdk.1.gz
 slave rmid.1.gz: /usr/share/man/man1/rmid-java-1.6.0-openjdk.1.gz
 slave rmiregistry.1.gz: /usr/share/man/man1/rmiregistry-java-1.6.0-openjdk.1.gz
 slave servertool.1.gz: /usr/share/man/man1/servertool-java-1.6.0-openjdk.1.gz
 slave tnameserv.1.gz: /usr/share/man/man1/tnameserv-java-1.6.0-openjdk.1.gz
 slave unpack200.1.gz: /usr/share/man/man1/unpack200-java-1.6.0-openjdk.1.gz
Current `best' version is /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java.

インストールしてきたJDKを追加する
root# update-alternatives --install /usr/bin/java java /usr/java/jdk1.7.0_09/bin/java 17009 \
--slave /usr/bin/keytool keytool /usr/java/jdk1.7.0_09/bin/keytool \
--slave /usr/bin/orbd orbd /usr/java/jdk1.7.0_09/bin/orbd \
--slave /usr/bin/pack200 pack200 /usr/java/jdk1.7.0_09/bin/pack200 \
--slave /usr/bin/rmid rmid /usr/java/jdk1.7.0_09/bin/rmid \
--slave /usr/bin/rmiregistry rmiregistry /usr/java/jdk1.7.0_09/bin/rmiregistry \
--slave /usr/bin/servertool servertool /usr/java/jdk1.7.0_09/bin/servertool \
--slave /usr/bin/tnameserv tnameserv /usr/java/jdk1.7.0_09/bin/tnameserv \
--slave /usr/bin/unpack200 unpack200 /usr/java/jdk1.7.0_09/bin/unpack200

root# update-alternatives --display java
java - status is manual.
 link currently points to /usr/java/jdk1.7.0_09/bin/java
/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java - priority 16000
 slave keytool: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/keytool
 slave orbd: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/orbd
 slave pack200: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/pack200
 slave rmid: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/rmid
 slave rmiregistry: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/rmiregistry
 slave servertool: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/servertool
 slave tnameserv: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/tnameserv
 slave unpack200: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/unpack200
 slave jre_exports: /usr/lib/jvm-exports/jre-1.6.0-openjdk.x86_64
 slave jre: /usr/lib/jvm/jre-1.6.0-openjdk.x86_64
 slave java.1.gz: /usr/share/man/man1/java-java-1.6.0-openjdk.1.gz
 slave keytool.1.gz: /usr/share/man/man1/keytool-java-1.6.0-openjdk.1.gz
 slave orbd.1.gz: /usr/share/man/man1/orbd-java-1.6.0-openjdk.1.gz
 slave pack200.1.gz: /usr/share/man/man1/pack200-java-1.6.0-openjdk.1.gz
 slave rmid.1.gz: /usr/share/man/man1/rmid-java-1.6.0-openjdk.1.gz
 slave rmiregistry.1.gz: /usr/share/man/man1/rmiregistry-java-1.6.0-openjdk.1.gz
 slave servertool.1.gz: /usr/share/man/man1/servertool-java-1.6.0-openjdk.1.gz
 slave tnameserv.1.gz: /usr/share/man/man1/tnameserv-java-1.6.0-openjdk.1.gz
 slave unpack200.1.gz: /usr/share/man/man1/unpack200-java-1.6.0-openjdk.1.gz
/usr/java/jdk1.7.0_09/bin/java - priority 17009
 slave keytool: /usr/java/jdk1.7.0_09/bin/keytool
 slave orbd: /usr/java/jdk1.7.0_09/bin/orbd
 slave pack200: /usr/java/jdk1.7.0_09/bin/pack200
 slave rmid: /usr/java/jdk1.7.0_09/bin/rmid
 slave rmiregistry: /usr/java/jdk1.7.0_09/bin/rmiregistry
 slave servertool: /usr/java/jdk1.7.0_09/bin/servertool
 slave tnameserv: /usr/java/jdk1.7.0_09/bin/tnameserv
 slave unpack200: /usr/java/jdk1.7.0_09/bin/unpack200
 slave jre_exports: (null)
 slave jre: (null)
 slave java.1.gz: (null)
 slave keytool.1.gz: (null)
 slave orbd.1.gz: (null)
 slave pack200.1.gz: (null)
 slave rmid.1.gz: (null)
 slave rmiregistry.1.gz: (null)
 slave servertool.1.gz: (null)
 slave tnameserv.1.gz: (null)
 slave unpack200.1.gz: (null)
Current `best' version is /usr/java/jdk1.7.0_09/bin/java.

追加したJDKを標準で利用するように設定する
root# update-alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
 + 1           /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
*  2           /usr/java/jdk1.7.0_09/bin/java

Enter to keep the current selection[+], or type selection number: 2

作業後の状態
root# java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)



Amazon EC2上で、内部IP(Private IP)をベースにhostsファイルを作成するスクリプト。

Amazon EC2インスタンスでは、標準でPublic DNS名と、Private DNS名が割り当てられる。

自分が作ったノード同士は出来れば固定したホスト名でやりとりしたいが、Public DNS名もPrivate DNS名もインスタンスをstopしてstartした場合は付け直されてしまうため、何かと困ってしまう状況が発生する。

そういう場合に、インスタンスに設定したタグ:Nameに基づいて、各ノード上で動的に/etc/hostsファイルを生成するスクリプトを書いてみた。

☆ec2-describe-instancesコマンドでは、自分のアカウントに紐付くインスタンス情報が全て出てきてしまうので、各ノードに設定しているタグ:GroupNameが同じものだけhostsに出てくるようにしている。

==== create_hosts.sh ====

#!/bin/sh

# 必要な環境変数の定義
export PATH=${PATH}:/opt/aws/bin/
export EC2_HOME=/opt/aws/apitools/ec2
export JAVA_HOME=/usr/lib/jvm/jre

cd /tmp

# AWS Access Key, Secret Access Keyを設定しておく
export AWS_ACCESS_KEY=XXXXXXXXXXXXXXXX
export AWS_SECRET_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

# 自分のインスタンスを求めるために内部IPを求める
MY_LOCAL_ADDR=`curl -s http://169.254.169.254/latest/meta-data/local-ipv4` >/dev/null 2>&1
MY_PUBLIC_ADDR=`curl -s http://169.254.169.254/latest/meta-data/public-ipv4` >/dev/null 2>&1

EC2_INSTANCES_FILENAME=instances.$$
ec2-describe-instances > ${EC2_INSTANCES_FILENAME}

# 内部IPに基づいて、インスタンスIDを見つける
MY_INSTANCE_ID=`grep ${MY_LOCAL_ADDR} ${EC2_INSTANCES_FILENAME} | grep -w ^INSTANCE | awk '{print $2;}'`
# インスタンスIDに紐付いているタグGroupNameの値を引っ張る
MY_GROUPNAME=`grep ${MY_INSTANCE_ID} ${EC2_INSTANCES_FILENAME} | grep -w ^TAG | grep -w GroupName | awk '{print $5;}'`

# タグGroupNameが同じインスタンスの一覧を取得する
EC2_GROUP_INSTANCES_FILENAME=group_instances.$$
ec2-describe-instances -F tag:GroupName=${MY_GROUPNAME} > ${EC2_GROUP_INSTANCES_FILENAME}

# インスタンス一覧から、インスタンスID・内部IP・名前(tag:Name)の紐付けを作成する
EC2_GROUP_IPADDRS_FILENAME=group_ipaddr.$$
grep -w ^INSTANCE ${EC2_GROUP_INSTANCES_FILENAME} | awk '{print $2,$15;}' | sort > ${EC2_GROUP_IPADDRS_FILENAME}
EC2_GROUP_HOSTNAME_FILENAME=group_hosts.$$
grep -w ^TAG ${EC2_GROUP_INSTANCES_FILENAME} | grep -w Name | awk '{print $3,$5;}' | sort > ${EC2_GROUP_HOSTNAME_FILENAME}

# 内部IP・名前から/etc/hostsを作成し上書きする
EC2_GROUP_HOSTS=hosts.$$
echo "127.0.0.1   localhost localhost.localdomain" > ${EC2_GROUP_HOSTS}
join -j1 1 -j2 1 ${EC2_GROUP_IPADDRS_FILENAME} ${EC2_GROUP_HOSTNAME_FILENAME} | awk '{print $2,$3;}' >> ${EC2_GROUP_HOSTS}

cat ${EC2_GROUP_HOSTS} > /etc/hosts

# 一時作業ファイルを削除する
rm ${EC2_INSTANCES_FILENAME} ${EC2_GROUP_INSTANCES_FILENAME} ${EC2_GROUP_IPADDRS_FILENAME} ${EC2_GROUP_HOSTNAME_FILENAME}
rm ${EC2_GROUP_HOSTS}
==== end. ====

とりあえずこれでタグ:GroupNameが同じもの同士は、/etc/hostsに書き出されるようになったので、crontabなどで定期的に実行されるように設定しておく。


<追記>
スクリプトだけだと何をやってるのか分かりにくかったので、コマンド例を。

※インスタンスのインスタンスID($2)と内部IP($15)を拾ってくる。

[root@ip-10-145-150-102 shell]# ec2-describe-instances | grep -w ^INSTANCE | awk '{print $2,$15}'
i-56aa7a1b 10.123.102.108
i-54ab7ab1 10.123.148.222

※インスタンスのインスタンスID($3)とタグ名・設定値($4,$5)を拾ってくる。

[root@ip-10-145-150-102 shell]# ec2-describe-instances | grep -w ^TAG | awk '{print $3,$4,$5;}'
i-56aa7a1b Name CDHMGR01
i-56aa7a1b GroupName Cloudera
i-54ab7ab1 Name CDHMGR02
i-54ab7ab1 GroupName Cloudera

↓これらをUNIXのjoinコマンドでつなげてやると、

i-56aa7a1b 10.123.102.108 CDHMGR01
i-54ab7ab1 10.123.148.222 CDHMGR02

となるので、あとは頭のいらない部分を捨てた上で、hostsに追記している。

2012/09/17

Windows 8で起動時にNum Lockをオフにしておく方法。

Windows 7やXPだと、明示的にレジストリをいじらないと起動時にはNum Lockキーがオフになっていたが、Windows 8からは勝手にNum Lockキーがオンになって起動するようになったのでレジストリを直しておいたときのメモ。
# IBM/LenovoのTravel Keyboardを使っていると勝手にNum Lockが入ると英文字入力がおかしくなってパスワード入力がうまくいかなくなるため。

レジストリのHKEY_USERS\.DEFAULT\Control Panel\Keyboardを開く

DWORD型で InitialKeyBoardIndicators を作成し、値として「0」を入力。

もしうまくいかないような場合は、個別ユーザ側のHKEY_USERS\<SID>\Control Panel\Keyboardの InitialKeyBoardIndicators も同様に値を「0」にしておく。

元に戻すときは「2147483648」にすること。

参考: http://www.itmedia.co.jp/help/tips/windows/w0311.html

2012/08/22

Outlook.comにAndroid端末から接続するときのメモ。

手元のGalaxy Nexus (Android 4.0.4)から、Outlook.comへActiveSyncの設定をしたときのメモ。

アカウントの追加手順

  1. 「設定」→「アカウントと同期」を開いて、「アカウントの追加」を選択。
  2. 「コーポレート」を選択。
  3. 「Exchangeアカウントを追加」画面が出てくるので、以下を入力し「次へ」をタップ。
    • メールアドレス … hoge@outlook.com
    • パスワード … 設定しているパスワード
  4. 「アカウント設定」画面が出てくるので、以下項目を入力。
    • ドメイン\ユーザ名 … hoge@outlook.com
      ※この画面上では先頭に\をつける必要は無い。
    • パスワード … 前画面で入力したもののまま
    • サーバー  … m.hotmail.com (outlook.comから変更する)
    • 安全な接続(SSL)を使用する にチェック
    • すべてのSSL証明書を承認 はデフォルトのままチェックしない
    • クライアント証明書  … 選択不要。
  5. アカウントの同期頻度、同期日数などが設定できるのでお好みに応じて設定。
以上でOutlook.comにメールが届くとプッシュ通知されるようになりました♪

注意: 他サイトなどで「ドメイン\ユーザ名は、"\hoge@outlook.com"と入力すると記載されていることが多いですが、ユーザ入力としては先頭の"\"は不要です。認証後に自動的に付与されるみたい。
(逆に入力するとUPNとして不正になるためユーザ名・パスワードがいくら合っていても通らない)



2012/08/19

CentOS 6.3をHyper-V (2008R2)にインストールしたよ…Hyper-V統合サービスで躓いたからメモするよ。


Hyper-V (2008R2)上にCentOS 6.3をインストールしたときのメモ。

仮想マシン(VM)を構成する。

CPUコア数、メモリ量はお好みで。
ネットワークインターフェースは標準のものを指定する。
※ Hyper-V 統合サービスをインストールするまではethXとして起動できないので注意。


CentOS 6.3をISOイメージからインストールする。

http://www.centos.org/ から適当なミラーサイトを選んでCentOSのISOイメージをダウンロード。
あとはDVDドライブにISOイメージをマウントして、インストールを実施する。

Hyper-V 統合サービス (Integration Services) v3.3をインストールする。


Linux Integration Services Version v3.3 for Hyper-V [Microsoft] からHyper-V 統合サービス Ver. 3.3をダウンロードする。
※Ver. 3.2はRHEL 6.x系には対応しないみたいなので注意。

次に落としてきたISOイメージをマウント。



# mount /dev/cdrom /mnt
# cd /mnt
# ./install.sh

※ install.shによる自動インストールが出来ない場合は、以下のコマンドでインストールする。
# rpm -Uvh --nodeps microsoft-hyper-v-rhel63.3-4.20120605.x86_64.rpm
# rpm -Uvh --nodeps kmod-microsoft-hyper-v-rhel63.3-4.20120605.x86_64.rpm

上記、INSTALLING HYPER-V INTEGRATION SERVICES ON CENTOS 6.3/RHEL 6.3 を参考にしたんですけどね。


ネットワークインターフェース(ethX)にIPアドレスを設定する。

まずはホスト名やデフォルトゲートウェイを定義します。
# vi /etc/sysconfig/network
NETWORKING=yes
GATEWAY=10.2.234.1
HOSTNAME=RIKUZB01

次にethXのインターフェース毎にIPアドレスなどを設定します。
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
IPADDR=10.2.234.90
NETWORK=10.2.234.0
BROADCAST=10.2.234.255
NETMASK=255.255.255.0
ONBOOT=yes

もしも複数のネットワークインターフェースを割り振ったりした場合にethXの順番を入れ替えたい場合は以下のファイルを編集します。
# vi /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:15:5d:fe:82:19", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

↑MACアドレスがATTR{address}==の文字列のものと一致していれば、eth0という名前を与えるという設定。
 なので、eth1とeth0をひっくり返したい場合はNAMEを入れ替えればOKです。

全ての設定が終わったら、networkサービスを再起動して確認します。
# service network restart

上手くいかない場合は、 ifdown eth0 → ifup eth0 コマンドを個別に実行すればある程度のエラーメッセージが表示されるので切り分けできるはず。

以上。

2012/06/03

WindowsのiSCSI Initiatorを利用する上で必須のチューニング項目メモ


■Disable Nagle Algorithm

HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E97B-E325-11CE-BFC1-08002BE10318}\<Instance Number>\Parameters

iSCSIDisableNagle
: (DWORD) 0x1

■Disabling delayed ACK

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\<Interface GUID>

TcpDelAckTicks
: (DWORD) 0x0
TcpAckFrequency
: (DWORD) 0x1

iSCSIターゲットデバイス側でも必要があれば同様の設定を行っておくこと。

2012/05/13

IBM System x3200でもディスク障害。

今し方HP ML110G7でのRAIDディスク障害が起こっておりましたが、こちらでも起こっていたので対応中。
こっちは割と古いサーバでまともにDirectorやRSA2を利用していなかったので発覚が遅くなりました。

ディスクの状態を確認する

管理用の画面などを入れてないので、そこら辺にあるフリーソフトを使ってみます。
今回はその中でも有名な?CrystalDiskInfoで見てみました。


S.M.A.R.T.情報を見るのはどのディスク管理ソフトでも共通しているので、分かりやすいですね。
このディスクはどうも代替セクタを使う状態になってる模様。(物理的にどこかおかしなところがあるようです)

ベイ番号などが分からないので、シリアルナンバーを控えてOSシャットダウン。
ホットスワップモデルであればオンラインでディスク交換可能なのですが、このサーバはシンプルスワップモデルなので電源オフ時でないとディスクの抜き差しができないので。。。

ディスクを交換する

ディスク交換ついでにほこり取りも…



RAIDの再ミラー

x3200に標準搭載されているLSI LogicのRAIDコントローラ(MegaRAID)は、障害状態を起こしたディスクなどの情報をNVRAM上にも保持してたはずなので、ディスク交換後は、正常なディスクから新しいディスクに、自動的に再ミラー(RESYNC)をかけてくれます。

RAID状態の確認

きちんと再ミラーが進んでいるかは、MegaRAID Storage Manager上で確認できます。


一応最後に、交換後のディスクのS.M.A.R.T.情報も見ておきます。


大丈夫そうですね。
これも優雅に放置しておきます。

HP ML110G7でディスク障害が起こったときのメモ。

我が家で先日導入したHP ML110G7に、大掃除で発掘されたSeagateの1TB HDDを積み込んで動かしてましたが、どうも調子が悪い様子…と思ってたらついにお亡くなりになりました。

障害ディスクを確認する

内蔵RAIDコントローラ(SmartArray B110i SATA RAID)の場合、HP System Management Homepage (SMH)を入れてるとこんな感じで表示されます。

障害予兆…もうすぐ壊れそうって感じ

障害…壊れちゃってますねw

さらに進むとドライブ情報すら取れなくなる

いずれの場合も左側や中央のボックス・ベイから障害を起こしているディスクは簡単に特定できると思います。

ディスクを交換する

ホットスワップモデルの場合は、このままディスクを物理的にオンラインで引っこ抜いて、新しい正常なディスクを挿入してあげれば済むのですが、今回はノンホットスワップモデルなので一回シャットダウンしてオフラインで交換してあげます。





RAIDを再ミラーする

ディスクを交換後、サーバを起動するとPOST画面のあとにSmartArrayのところで「データを再ミラー(リカバリー)するけど良い?」って聞かれるのでF1キーを押して自動リカバリーさせます。


サーバ起動後はオンラインで再ミラーが進みますが、状況を確認するにはまたSMHを見れば分かります。(とはいえ結構時間がかかるので優雅に待ちます)


安鯖とは言え、上位機種(DL3xx,5xxなど)と同じ感じなのでとてもお手軽ですね。

2012/05/06

謎のiSCSIストレージ…?


とりあえず環境情報も何も出さずに見ると、以下の結果が「何かおかしい?」と思ってもらえるかと貼り付けてみた。


ちょっといろいろ検証してみますかねぇ。。。

2012/05/03

Solaris COMSTARでクラスタ共有ディスクを公開するコマンドのメモ。

Solaris 11上でCOMSTARを使ってiSCSIストレージ領域を公開する手順メモ。
大まかにはブロックデバイスの作成と、iSCSIターゲットの作成、そしてLUNマスキングという流れ。


iSCSIターゲットの作成

root@LAINSS01:~# itadm create-target
Target iqn.1986-03.com.sun:02:ada42f3b-da72-6dd5-ec33-f176bc61f0d2 successfully created
root@LAINSS01:~# stmfadm offline-target iqn.1986-03.com.sun:02:ada42f3b-da72-6dd5-ec33-f176bc61f0d2

iSCSIターゲットをビュー(LUN Maskingグループ)に追加するときにエラーになるので、先にターゲットをオフラインにしておきます。

iSCSIターゲットグループの作成

root@LAINSS01:~# stmfadm create-tg TG-LAINCL01
root@LAINSS01:~# stmfadm add-tg-member -g TG-LAINCL01 iqn.1986-03.com.sun:02:ada42f3b-da72-6dd5-ec33-f176bc61f0d2

先の手順で作成したiSCSIターゲットを一つだけ含んだ、iSCSIターゲットグループを作成します。
(ビューに所属させて、実際にイニシエータからアクセスさせるのはこのターゲットグループになります)

iSCSIホスト(イニシエータ)グループの作成

root@LAINSS01:~# stmfadm create-hg HG-LAINSV01
root@LAINSS01:~# stmfadm create-hg HG-LAINSV02
root@LAINSS01:~# stmfadm add-hg-member -g HG-LAINSV01 iqn.1991-05.com.microsoft:lainsv01.wirednet.local
root@LAINSS01:~# stmfadm add-hg-member -g HG-LAINSV02 iqn.1991-05.com.microsoft:lainsv02.wirednet.local

Windows上でiSCSIを構成するとIQNと呼ばれるホスト識別子が生成されるので、それをホストグループに所属させます。

ブロックデバイス(LUN)の作成

root@LAINSS01:~# zfs list
root@LAINSS01:~# zfs create -V 1G hugepool/block/iscsi/LAINCL01-DriveQ

root@LAINSS01:~# sbdadm create-lu /dev/zvol/rdsk/hugepool/block/iscsi/LAINCL01-DriveQ
Created the following LU:

              GUID                    DATA SIZE           SOURCE
--------------------------------  -------------------  ----------------
600144f090960c0000004fa153370001  1073741824           /dev/zvol/rdsk/hugepool/block/iscsi/LAINCL01-DriveQ

ZFS上で1GBのブロックデバイス領域を切り出した上で、sbdadmコマンドで管理サービスに登録するとGUIDが生成されます。(ビューにはGUID単位で登録していきます。)


ビュー(LUN Masking)の作成

ビューには、iSCSIターゲットグループ&iSCSIホストグループに対して、公開するブロックデバイスを登録する感じになります。(どこから:target、どこに:host、なにを:LUN、公開するという関係)

root@LAINSS01:~# stmfadm add-view -t TG-LAINCL01 -h HG-LAINSV01 600144f090960c0000004fa153370001
root@LAINSS01:~# stmfadm add-view -t TG-LAINCL01 -h HG-LAINSV02 600144f090960c0000004fa153370001

実際にブロックデバイスがどのビューに紐づけられているかは下のコマンドで確認。
root@LAINSS01:~# stmfadm list-view -l 600144f090960c0000004fa153370001

最後にターゲットをオンラインにすれば、配下のiSCSIホストから認識できるようになります。

root@LAINSS01:~# stmfadm online-target iqn.1986-03.com.sun:02:ada42f3b-da72-6dd5-ec33-f176bc61f0d2


以上。