スポンサーリンク

2015年12月22日火曜日

java の実行エラーの原因が SELinux である場合の対処

 java で作られたプログラムを実行したときに以下のエラーが出た。環境は CentOS 5.5。

Error: dl failure on line 863
Error: failed /opt/jdk1.7.0_79/jre/lib/i386/client/libjvm.so, because /opt/jdk1.7.0_79/jre/lib/i386/client/libjvm.so: cannot restore segment prot after reloc: Permission denied

 原因は SELinux。実際に機能を落としてみるとちゃんと実行される。

# setenforce 0

 SELinux 自体の機能は生かしたまま java を実行したい場合、Permission denied と出ているライブラリに対してコンテキストの変更を行う必要がある。

# chcon -t textrel_shlib_t /opt/jdk1.7.0_79/jre/lib/i386/client/libjvm.so

 ライブラリに対してのパスは適宜読み替えを。

2015年12月21日月曜日

ESXi 6.0 のインストールで NIC または HDD/SSD が認識しない場合の対処

 ESXi は標準で Intel 系以外の NIC と SATA 接続の HDD/SSD は認識しないためインストールできない。
 この場合、ESXi-Customizer-PS を使用して手動で上記ドライバを組み込んだカスタム ISO を作成することで解決する。

前提条件

  • .NET Framework 4.0 以降
  • Windows PowerShell 2.0 以降
  • VMware vSphere PowerCLI 5.1 以降

 今回の記事では VMware vSphere PowerCLI 6.0 Release 3 を使用するので、.NET Framework は 4.5 以降、Windows PowerShell は 3.0 以降が必要です。

2015年12月9日水曜日

Oracle Grid Infrastructure のインストールで管理データベース構成アシスタントに失敗する~その後②

 少し時間が空いてしまいました。
 その他諸々の環境構築に時間を取られてしまい、なかなかその後を追記する余裕がなかった。

 結果として、原因はブロックサイズが 4K の ASM ディスクにサーバパラメータファイル(spfile)が配置されていると読み込みに失敗する、らしい。
 Oracle パッチを適用すれば解決する、ということで Oracle のサポートを受けながら作業したけど結局管理データベース構成アシスタント、mgmtdb は動きませんでした。

 なくてもクラスタは動作するのでとりあえず無効化して運用することとなりました。

 mgmtdb 自体、Oracle Database(しかもどこかで見た記憶によると XE……これがパッチを当てても駄目な理由じゃないか?と邪推)なので、本番の Oracle Database 12c も同じ理由でこけるんじゃないかと思ったけど、意外にもすんなりインストール完了。
 もちろん、パッチは適用しました。
 パッチ番号は「p16870214」です。My Oracle Support が利用できないと入手できないかも?

 結局無効化するサービス、つまり極論を言えばなくてもいいサービスである mgmtdb を動かすのにほぼ 1 週間を費やしてしまった。

 サーバパラメータファイルの配置場所とか細かく設定してインストールすれば動かせるかも知れないけど……Oracle Grid Infrastructure のインストーラでこれに関する設定ってインストールするかしないかのラジオボタン 1 つしかないんだよね。
 インストール後でもサーバパラメータファイルの場所を変更できるかどうかは調査しきれてません。

2015年10月23日金曜日

Oracle Grid Infrastructure のインストールで管理データベース構成アシスタントに失敗する~その後①

 いろいろログを漁ってみたところ……記憶域に設定している ASM ディスクのブロックサイズが 4096 バイトなのに対し、Oracle Grid Infrastructure の OUI で作成される ASM ディスクグループの設定が 512 バイトなのが原因かも。
 管理データベース構成アシスタント、mgmtdb の起動に失敗するわけだけど、その起動ログに以下のようなエラーが出ていた。

ORA-17507: I/O request size 512 is not a multiple of logical block size

 これからいろいろ調べたら上記が原因ではないか、と。
 とりあえず、OUI ではソフトウェアのみインストールして、ASM インスタンスなどを自力で作成する必要がありそう。その際にブロックサイズを 4096 に指定する。
 Oracle Grid Infrastructure はもちろんのこと、Oracle Database も 11.2 の頃にソフトウェア自体は対応したそうなんだけど、OUI が対応していないとか。
 もう 12.1 なのにね……。

 とりあえず手順まとめて検証したいところ。

2015/10/26追記:
 以下のような記事を発見。

Oracle Fixes The 4k SPFILE Problem…But It’s Still Broken - flashdba

 oracle のインスタンスを起動するときに必要とされるパラメータファイルがブロックサイズ 4096 バイトの ASM ディスクグループに配置されているとうまく読み込めない、というものらしい。
 これ、11.2.0.4 で直ったけど直ってないんじゃない?的な。
 4096 バイトではない場所にパラメータファイルを配置すれば大丈夫?的な?ことが書いてあるけど、既にインスタンスがある場合は変更できるのかどうか……。

2015/10/28追記:
 どうやら Oracle のバグらしい……詳細はまた後日。

2015年10月22日木曜日

Oracle Grid Infrastructure のインストールで管理データベース構成アシスタントに失敗する

 VMWare 上に ESXi をインストールして、その上に Oracle Linux を 2 つ立てて検証したときも発生した。
 このときはメモリが足りなかったりスワップが足りなかったり、そもそもとしてディスク容量をケチっていたりしたのが原因だった。メモリ増やしたりスワップ増やしたりディスク容量増やしたら直った。

 が、検証を終えて仕事で本番機に構築してるんだけど……当然メモリもいっぱいスワップもその 2 倍、ディスク容量なんて TB 単位で溢れてる。
 しかし、Oracle Grid Infrastructure のインストールの構成段階でエラーが発生する。

INS-20802: 管理データベース構成アシスタントに失敗しました。

 検証してたときと同じエラー。でも、上に書いたように原因不明。現在ログを漁って調査中。

2015年10月8日木曜日

oracleasm createdisk で Instantiating disk が failed になる場合の対処

 Oracle の RAC 環境(Real Application Cluster)を構築する過程で共有ディスクを作成するが、そのときに使用するコマンド oracleasm createdisk で失敗する場合がある。

# oracleasm createdisk data1 /dev/sdb1
Writing disk header: done
Instantiating disk: failed
Crearing disk header: done

 ほとんどの場合、以下のどちらかの対処で解決する(らしい)。

1. 再起動する
2. selinux を無効にする

 Google 先生に聞いてもこの解決方法しか見つからない。
 がしかし、このどちらの対処を行っても解決しなかった。

 というわけで、今回対処した方法は以下。

2015年9月15日火曜日

CentOS 7 への VMWare Tools のインストールで失敗した場合の対処

 VMWare に最小構成の CentOS 7 をインストールした場合、VMWare Tools のインストールで失敗する場合があるかも。

 例えば GCC がインストールされていない場合。

Searching for GCC...
The path "" is not valid path to the gcc binary.
Would you like to change it? [yes]

 この場合は素直に GCC をインストールすれば解決する。

# yum install gcc

 もしくは、カーネルヘッダがインストールされていない場合。

Searching for a valid kernel header path...
The path "" is not a valid path to the 3.10.0-229.el7.x86_64 kernel headers.
Would you like to change it? [yes]

 念のためカーネルのバージョンとパスを確認する。

# uname -mr
3.10.0-229.el7.x86_64 x86_64
# ls /lib/modules/3.10.0-229.el7.x86_64/build/include
ls: /lib/modules/3.10.0-229.el7.x86_64/build/include: No such file or directory


 この場合は確認したカーネルバージョンのモジュールをインストールする。

# yum install kernel-devel-3.10.0-229.el7.x86_64

 これで改めて VMWare Tools のインストールスクリプトを実行すれば大丈夫なはず。

 ちなみに Oracle Linux 7 でも同じ原因で失敗、同じ対処で問題なかった。

2015年9月11日金曜日

VMWare 上の仮想 PC の BIOS を起動する方法

 KNOPPIX や GParted など、OS がすでにインストールされている仮想 PC 上で別 OS やアプリケーションを起動したい場合、CD/DVD に iso イメージを設定して起動してもまるで何事もなかったかのように通常の OS が起動してくる。
 これは仮想 PC 上の BIOS の設定で、CD/DVD のブート順序が HDD よりも低いからなのだけど、そもそも 仮想 PC の BIOS ってどうやって起動するの?ということで調べてみた。

 仮想 PC の設定ファイル(*.vmx)に以下を追記することで BIOS が起動する。

bios.forceSetupOnce = "TRUE"

 起動するとこの記述は削除されるので、項目名の通り一度しか起動しない。

2015年7月23日木曜日

IE11 でローカルの pac ファイルを使用する

 IE11 になってからローカルに配置したプロキシ自動取得ファイルが使用できなくなったっぽい。

 つまり、file:// から始まるパスを設定しても動かない。

 けど、運用上の問題とか環境上の問題でローカルに配置せざるをえない場合もあるわけで。
 そんなときはレジストリに以下のキーを登録することで従来と同様の動きをさせることができるようになるらしい。

Key: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings
Value: EnableLegacyAutoProxyFeatures
Type: REG_DWORD
Data: 1

Chrome とかはこの値がなくても動作するのでとりあえずは IE だけのようだ。
以下は参考にしたサイト。

2015年4月24日金曜日

VB.NET で構造体に FieldInfo クラスを使用して値を設定する方法

 リフレクションを使ったオブジェクトに対する値の取得や設定で使用する PropertyInfo クラスや FieldInfo クラス。
 構造体は値型だけど、C# の場合は object 型に一度ボックス化して参照型に変換することで解決できる。

 だがしかし。

 VB.NET の場合は上手くいかない。内部でボックス化されたものが値型か参照型かを判定して処理しているため、結局ボックス化が無意味になっていまっている。

 じゃあ、VB.NET ではリフレクションを使って構造体に値を設定できないのか……。

 と、いろいろ調べてみたところ、ValueType クラスを経由することで解決できる模様。

Dim s As New S
Dim v As ValueType = s
Dim f As FiledInfo = s.GetType().GetField("Name")

f.SetValue(v, "Hoge2")

s = DirectCast(v, S)

 うん、やっぱり VB は好きになれない。

VMWare Toolsのインストールでブルースクリーン

 VMWare Player または VMWare Workstation にホスト OS として Windows Server 2003 を使用し、VMWare Tools をインストールすると途中でエラーが発生してブルースクリーンに切り替わることがある。(自分の環境でしか試していない)
 いろいろ試行錯誤した結果、VMWare Tools によってインストールされる VMCI のインストールでこける模様。
 VMCI は、ある仮想 OS とホスト OS 上のアプリケーションの通信、または、同一ホスト上における仮想 OS 間の通信の性能向上を実現するためのインターフェース。  詳細は公式ドキュメントを参照。

VMCI Overview

 ちなみにこれをインストールすると起動時にもエラーが発生してログインできなくなったりする。
 また、VMWare Tools のインストール途中で再起動がかかるためか、マウスカーソルが表示されなくなったりする場合もある。
 エラー自体はレジストリの NetworkProvider の参照順の設定から vmhgfs を削除すれば消える。が、マウスカーソルが表示されるようになったりはしない。

 対処としては、VMWare Tools のインストールでカスタムを選択肢、VMCI をインストール対象から除外すればよい。

 VMCI ライブラリを使用してアプリケーションを組むことってそうそうないだろうけど、必要になったときにどうするか。
 今回は Windows Server 2003 だったのでもっと新しいバージョンでは発生しないのかなぁ。

2015年2月6日金曜日

ASP.NET MVC 5 で実装したファイルアップロードで 404 エラー

 IISの設定でハマったのでメモ。

 ASP.NET MVC 5 で ファイルをアップロードし、そのファイルに対して何らかの処理を行う WebAPI を実装。
 Visual Studio 2013 のデバッグで起動される IIS Express では問題なく動作したものをリリース、いざ Windows Server の IIS で確認してみると 404 エラー(Not Found)が返ってくる。

 最初は ASP.NET MVC 5 のルーティングの設定に問題があるのか、などいろいろ疑ったり調査したりしてみたが解決せず。
 同様の処理を行う View を作成したところ、以下のようなありがたいエラーが表示された。



 その下部に解決の糸口となりそうな詳細情報があった。


 というわけで、Web.config の system.webServer セクションに以下を追加。
<security>
  <requestfiltering>
    <requestlimits maxallowedcontentlength="1048576000"></requestlimits>
  </requestfiltering>
</security>
無事ファイルのアップロードが完了。まさかこれで 404(Not Found)が返ってくるとは思わなかった。

2015年1月16日金曜日

Sambaで共有したフォルダが見えるが書き込めない原因がSELinuxである場合とその対処

 CentOS 7 に Samba を導入し、共有フォルダを作成した。

 設定各種を行い、実際に Windows からアクセスしてみたが、共有フォルダの中身は見えるものの書き込みができない。
 設定の中で共有フォルダに対して書き込みは許可しているにも関わらず、新しいフォルダを作成したりファイルの作成ができない。

 と、ここで疑わしいのが SELinux の設定。
 とりあえず SELinux を無効にして実行してみる。

# setenforce 0

 すると共有フォルダに対して書き込みが可能となる。
 というわけで原因は SELinux であることが判明。