Hatena::ブログ(Diary)

tk4168の日記 Twitter

2018-10-20

個人的必須Cygwin設定

Cygwinデフォルトで使うと少々不便な点があるため以下の設定を行う。

noaclを設定

Cygwinを単なる便利コマンドラインツールとして使う場合、ACL機能は不要だしデメリットの方が大きい。無効にするため /etc/fstab を編集する。その際、すべてのCygwin関係のプロセスを落とさないと反映しないようだ。

参考:技術/Windows/Cygwin/NTFSをnoaclでマウントする - Glamenv-Septzen.net

エンコード

デフォルトだと日本語ファイル名を扱えないため、環境変数にLANG=ja_JP.SJISを入れる。ただし、UTF-8な設定で無いと問題が発生する場合もあるため注意が必要。

2017-08-30

Oracle DBの自動起動設定(CentOS 7)

OracleインストールしただけではOS起動時に自動的にOracleが起動するようにはならないので、手動で設定する必要がある*1CentOS 7はsystemdを採用しているので、systemdを使って自動起動を構成するのが正統だと思うが、Oracleが配布しているDeveloper VMRHEL 7.3をベースとしたOracle Linux 7.3*2)では、systemdであるにも関わらずrcスクリプトを用いて構成しているので、これがOracle推奨なのであろうと判断*3し、これを流用してCentOS自動起動できるようにした。

手順

以下の手順はrootユーザで行う。

/etc/rc.d/init.d/oracle というファイルを作成し、以下のような記述にする(環境変数は適宜合わせる)。

#!/bin/sh
#
# chkconfig: 2345 99 99

#
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1
export ORACLE_HOME_LISTENER=$ORACLE_HOME
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=orcl

# Source function library.
. /etc/rc.d/init.d/functions

# See how we were called.
case "$1" in
  start)
        su  oracle -c "$ORACLE_HOME/bin/lsnrctl start"
        su  oracle -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
        ;;
  stop)
        su  oracle -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
        su  oracle -c "$ORACLE_HOME/bin/lsnrctl stop"
        ;;
  restart|reload)
        su  oracle -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
        su  oracle -c "$ORACLE_HOME/bin/lsnrctl stop"
        su  oracle -c "$ORACLE_HOME/bin/lsnrctl start"
        su  oracle -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
        ;;
  status)
        $ORACLE_HOME/bin/lsnrctl status
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload}"
        exit 1
esac

exit 0

※XDB向けの設定(iptables)はよくわからない。無くても支障はなさそう*4

このスクリプトを実行可能にする。

# chmod 755 /etc/rc.d/init.d/oracle

このスクリプト自動起動対象として追加する。

# chkconfig --add oracle

/etc/oratab を編集し、自動起動したいインスタンスの行を「Y」にする。

orcl:/u01/app/oracle/product/12.2.0/dbhome_1:Y

OS再起動し、Oracle自動起動するかを確認する。

2017/9/6 追記

不要と思われる箇所を削除。oratabの編集について追記。

*1:OUIに自動起動オプション用意してほしいところではある

*2:/etc/redhat-release にはRed Hat Enterprise Linuxと書いてあるけど書き換えなくてよいのだろうか・・・

*3:単にOracleが手を抜いて過去のスクリプトを流用しているだけかもしれないが

*4そもそもXDBが何か知らない・・・

2017-07-24

Oracle DB Developer VMにサンプルスキーマをセットアップする

なぜサンプルスキーマセットアップするのか

Oracle関連のドキュメントにはサンプルスキーマを例にしたものが多数あるため、用意しておいた方が手軽に試行できるため何かと都合が良い。Oracleの学習を進める上でも、自由に使え、かつ、それなりに複雑なDB*1として便利。実際に複数テーブルを設計して実装して、というのは、もちろん勉強する上では将来的には必要だが、まず最初にすることとしては敷居が高く、手間がかかる。

サンプルスキーマを入れるには?

Oracle DBインストール時に、オプションで選べるようだ。しかし、Oracleインストールは、それ自体それなりに手間がかかることなので、すでにOracleセットアップされている仮想マシンイメージ「Developer VM」を使う場合も多いだろう*2。というわけで、すでにあるOracle環境にサンプルスキーマを後からインストールすることを考える。

既存の手順

ネットでOracleインストール後にサンプルスキーマインストールする方法を調べたところ、「Oracle Database Examplesをインストールすることでサンプルスキーマインストールスクリプトが所定の場所に配置される」という記述が見つかったが、実際試したところ、そうならなかった。いろいろ調べたところ、OracleGitHubインストールスクリプトが配布されていることがわかった。もしかしたら配布方法が変わって、Examplesには同梱されなくなったのかもしれない。

実際の手順

以下はoracleユーザで行う。

作成するスキーマパスワードは全てoracleとする。

cd ~
wget https://github.com/oracle/db-sample-schemas/archive/master.zip
unzip master.zip
cd db-sample-schemas-master/
perl -p -i.bak -e 's#__SUB__CWD__#'$(pwd)'#g' *.sql */*.sql */*.dat
mkdir log
sqlplus system/oracle@localhost:1521/orcl
@mksample oracle oracle oracle oracle oracle oracle oracle oracle users temp /home/oracle/db-sample-schemas-master/log/ localhost:1521/orcl

なお、上記コマンドラインは、試行錯誤して導き出した最短で完了する手順であるが、完全にこの通りに実際に実行したわけではないのでどこかに漏れや誤りがあるかも知れない。一行ずつ、そのコマンドの意味を把握して実行していくことをオススメする。

2017/8/20 追記

やっぱり間違っていた。最後のコマンドの引数スクリプトの実行ログを保存するディレクトリを指定するが、そのパスが間違っていた(修正済み)。まあ、ログが保存されないだけで、処理自体は成功しているようだが。

*1:本番環境は論外としても、たとえ検証環境であったとしても学習目的で自由に弄れる訳ではないことが多いだろう。かといって自分でそれなりの構成のDBを用意するのも大変。というかそのスキルがないから学習するわけで・・・

*2:もちろん、Oracleインストールは出来るようになっておくべきだが、Oracleの学習について言えば、導入方法より導入済みのOracleの操作方法の方が優先度が高いと思う。まずは自由に使えるOracleを用意してそれを弄ってスキルを上げ、その後のステップアップとして、導入やチューニングが出来るようになる、という道筋が妥当かと思われる。

2017-07-11

ホストOS(Windows 10)とVirtualBox上のゲストOSとの通信がキャプチャできない

環境

現象

ホストで動かしたWiresharkでホスト<->ゲスト間のキャプチャが正常に出来ない。

正確には、ホストからゲストへのパケットがキャプチャできず、ゲストからホストに届いたパケットのみキャプチャできる。

ゲストOSNICはブリッジにしている。

類似の障害は、ネット上でも散見されるが、根本解決した例は見当たらなかった。

原因の推測

RawCapではキャプチャできたので、WinPcapの不具合を疑っている。

元々、WinPcapWindows 10で正常に動かない場合があるとも聞いたので、代替のWin10Pcapを導入したが、改善せず*1

対処

  1. RawCapを使う
  2. ゲストOS上でキャプチャする(Wireshark or tcpdump

追記

WinPcapのもう1つの代替であるNpcap*2を使うと、完全にホストゲスト間のパケットがキャプチャできなくなった。ゲスト<->ホスト外の通信はキャプチャできているが。

仮想化ソフトの仮想ブリッジの実装とキャプチャソフトの実装によってはこのようなことが起こりうるのか?「ホストゲスト間のキャプチャはゲスト側で行う」というのが定石か。

*1:余談だが、Win10PcapではWinPcapでは認識していたNICWi-Fi)を認識しなくなった。このNICドライバのNDISバージョンが6.70と新しすぎるのが問題なのか?別のWi-Fi子機は認識したがこのNDISバージョンは6.50だった

*2Wireshark公式Wikiにも記述があることを考えるとこちらの方が主流?

2017-07-10

Tera TermをHTTPとかの簡易クライアントとして使うための準備

プロトコルの勉強として、テキストベースのシンプルなプロトコル*1Telnetクライアントでコマンドを一行一行打ち込んで動きを見る、という方法がある。最近のWindowsにはTelnetクライアントが標準で入ってない*2ので、Tera Termで同じようなことをしたい。しかし、デフォルトだとうまく動かないので、以下の設定を変える。

[設定]-[端末]-[改行コード]

送受信ともに、送信CR+LFへ変更

※検証したいプロトコルの規格に合わせる

[設定]-[端末]-[ローカルエコー]

有効にした方がわかりやすい

[設定]-[TCP/IP]-[自動的にウィンドウを閉じる]

無効にしないと、セッション切断時にTera Termが終了してしまって不便(特にHTTP

*1HTTPとかSMTPとかFTPとか

*2:追加で入れることは可能ではある