2012/11/14

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ターゲットデバイス側でも必要があれば同様の設定を行っておくこと。