個人的必須Cygwin設定

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

noaclを設定

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

エンコード

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

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が何か知らない・・・

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を用意してそれを弄ってスキルを上げ、その後のステップアップとして、導入やチューニングが出来るようになる、という道筋が妥当かと思われる。

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

環境

現象

ホストで動かしたWiresharkでホスト<->ゲスト間のキャプチャが正常に出来ない。
正確には、ホストからゲストへのパケットがキャプチャできず、ゲストからホストに届いたパケットのみキャプチャできる。
ゲストOSのNICはブリッジにしている。
類似の障害は、ネット上でも散見されるが、根本解決した例は見当たらなかった。

原因の推測

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だった

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

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

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

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

送受信ともに、送信をCR+LFへ変更
※検証したいプロトコルの規格に合わせる

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

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

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

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

*1:HTTPとかSMTPとかFTPとか

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

PC再インストールのメモ

数年ぶりに自分のPCのOS再インストールをする羽目になったので、作業記録を残しておく。
【注意】大した参考にならない、チラシの裏です!

前兆

このPCは5年以上前に購入し、当時はWindows 7がプリインストールされていた。
去年ぐらいから、コミットチャージが設定の上限を超えて無制限に増え続けるという不可解な不具合を発症しており、OS再インストールするかPCのリプレイスを検討していた。内蔵HDDも異音がしたり、ファイルアクセスが不審な挙動をしてたりしていたため、遠からずリプレイスしないといけないとは思ってはいたが、先延ばしにしていた。そんな状態で去年Windows 10に無理やりアップデートしたりしてOS内部の問題が蓄積でもしていたのかもしれない。

起動不可に

今日、Windows Updateを行った後、再起動しようとしたら起動しなくなった。
Windows 10はセーフモードで起動するのも難しく、断念した。
(起動途中に電源を落とすことで次回起動時にセーフモードで起動する、と書いてあるサイトもあったが、うまくいかず。というか無理やりすぎる…)
Windows 10のインストールCDを作っていたため、それで起動できないか試してみることに。
結果は、インストールCDからの起動には問題がなかったが、sfcを実行しても空振り、chkdskも問題なし、スタートアップ修復しても変わらず。システムの復元はおろか、「初期化」(データを退避して丸ごと再インストール、らしい)すらエラーとなって手詰まりに。
この時点で、OSの再インストールかPCリプレイスか、どちらかしか選択肢にならない状態となってしまった。

データサルベージ

余っているHDDをPCにプライマリ*1として接続して、そこにWindows 10をクリーンインストールセカンダリに今まで使っていた起動しなくなったWindowsが入ってるHDDを接続してデータを取り出そうと考えていた。
しかし、今は使っていないPCからHDDを抜き出そうとしたが、思いのほか分解が難しそうで断念。
USB接続の外付けHDDを分解しようとしたが、これも困難であったため断念。
あとは、内蔵ディスク(SSD)を取り外して別PCに接続して、ということも考えたが、上述の経緯より、取り外し困難そうだと考え選択肢から外した。
となると、残る方法は、何とかして内蔵SSDを取り外さずしてそこからデータを吸い上げるしかない。
手元にあったLinux CD/DVDで吸い上げようとしたが、起動しなかったり、古すぎるディストリのためNTFSがマウントできなかったりで、これも断念。
最後の手段として、HDDイメージバックアップソフトのTrue Imageを使って外付けHDDへイメージバックアップすることを試みた。
最初に試した外付けHDDはGPTであったため、そこへの書き出しがTrue Image Home 2010ではサポートされてなかったようでうまくいかなかった。次に試した外付けHDDは、空き容量がギリギリであったがなんとかバックアップに成功した。

再インストール

バックアップからきちんとデータが読み取れたさえすれば内蔵SSDは消しても構わないので、再インストールすることとなる。
本来なら、リカバリテストをしてから再インストールすべきであったが、端折ってしまった。今回は問題なかったが、今後は気を付けるべき。
再インストールは、上述のWindows 10のインストールCDを利用した。今回はテンパってて初期のWindows 10のインストールCDを利用してしまったが、出来るなら最新のもの(現時点ではAnniversary Update)でクリーンインストールしたい。
インストール自体はスムーズにいった。足りないドライバはテレビチューナくらいだったし、無線LANアダプタも自動認識したので助かった。ネットに繋がらなかったらドライバの入手もできないし。

リカバリ

あとは、True Imageでバックアップしたデータを吸い上げることができるかどうか、となるが、True Imageのバージョンが古く、Windows 10にインストールできるか不安であった。
試したところ何の問題もなくインストールが完了し、イメージデータのマウントも問題なくできた。素晴らしい*2。専用形式でイメージ化するバックアップソフトは汎用的ではないという短所はある。

続々とアプリインストール

まずはTweenをインストール。バックアップからフォルダを持ってくるだけ。特に問題なし。
次にFirefoxをインストール。64bit OSだが、なぜか自動で32bit版がインストールされた。再インストールする前の環境だと64bit版の方が重いと感じてたのでそのまま32bit版を使用することとする*3。デフォルトで32bit版が入るのも、64bit版が不安定だから、とかで意図した挙動かもしれないし。

このPCの今後

ハードウェアの障害でないなら当面使い続けるのもありかもしれない。そうはいっても内蔵HDDの怪しさもあるし*4、リプレイスするべきなのは変わらないだろとも思うが。なかなか面倒なことだ。

断念するか?

テレビの録画データにはDRMが掛かっているので単純に再インストールすると見れなくなるのは覚悟していた。
予想通り見れなくなってしまったので、復旧を試みるも、インストールしたチューナソフトのバージョン違い*5もあって失敗した。DRMなメディアはテンポラリな扱いで妥協するとして、断念しようかと思っている。

教訓

  • バックアップすべし(当たり前)
  • 不調だなという予想は当たる
  • インストールCDは必ず準備しておくべし
  • 予備のHDDがあると助かる。できれば裸のHDDとSATAケーブルの組み合わせがよい
  • メーカー製PCや外付けHDDの分解しづらさをなめていた。その気になればHDDくらい簡単に換装できるものだと高をくくっていた
  • HDDイメージバックアップはやっぱり便利。True ImageがNTFSへの書き出し、USB接続HDDへの書き出しができるのが非常に良い。オススメ
  • 所有PCで起動可能な、NTFSマウントできるLinuxディストリビューションを探して、CD/DVDに焼いて用意しておく
  • リカバリテストをすべし

要検証

追記

True Image 2010はやはりWindows 10では完全には動かなかった。
管理ツールが起動できないし、イメージファイルからのデータ抽出も不安定だった*6。仕方ないので2017を購入。シリアルキーが短くなったのはよいが、インストーラが立ち上がるまで数分無反応でフリーズしたかのようだったのはいただけないし、専用アカウント作らないとライセンス認証できなくなってしまってる*7。認証のためだけにアカウントの用意を強いるのはよくない。というかマニュアルにはそんなこと書いてないのもアレ。
また、上記の復旧の試行で、Windows 10のインストールCDから起動して復旧させようとしてできなかったと書いたが、よくよく確かめると、Anniversary UpdateでないインストールCDで起動してたので、それが問題だった可能性があることに気づいた。

*1:実はSATAの接続方法は全然知らない。IDEの頃はマスター・スレーブとかあったのは知っていたが。であるため、詳しい優先順位は後程調べることとする

*2:ライセンスキーが64文字もあるのには閉口したが

*3:後日判明したことだが、32bit版はある一定以上のメモリ使用量を超えると正常に終了しない不具合があった。また、多くのタブを開いたときの挙動も明らかに64bit版の方が良好だった。64bit版の方がオススメかも知れない

*4:後日壊れた。やっぱり・・・

*5:元々プリインストールされていたバージョンはPCメーカから配布されてはいたが、Windows 7用であるし、Windows 10にアップデートした後いろいろ不具合が出てたので使いたくなかったため、チューナの開発元からダウンロードした。そもそもPCメーカの配布しているインストーラは、電子署名が失効しているためインストールできないし

*6:イメージファイルをダブルクリックしての簡易マウントではなくドライブレターを割り当てるきちんとしたマウントをすれば安定していたかもしれないが。まあどのみち保証外だし

*7:後日気づいたが、実はすでにアカウントを作っていた。少なくとも2010の頃からこの形式だったようだ

PCの不調の切り分け

PCの調子が悪いとき、それがハードウェアの故障によるものか、そうではなくOSの再インストールで復旧するのか、切り分けたいときがある。実際に再インストールしたら切り分けられるが、できればその手間を掛けずに切り分けたい。

なお、この記事では、オーバークロックは想定していない。
「メーカ製PCを買ってそのまま使い続けていたら不調になった」という、身の回りで一番あり得るパターンを念頭に置いている。

PCメーカ独自のハードウェア検査ツールを使う
「Diagnostic」などと言われているツールを使う。

利点

ツールが標準装備であれば、簡単に実行可能

欠点

汎用的では無い。そういったツールがあるかはメーカ、機種次第。
個人的な経験として、この手のツールで診断してエラー無しで、OS再セットアップしても不調が継続した、というパターンもあるので、あんまり信用できないかもしれない。

商用の検査ツールを使う
おそらくあると思うが、個人で気軽に利用できる金額では無いのだろう。
フリーのツールを使う

利点

フリー

欠点

それなりに手間とスキルが必要。


以下にフリーのツールを列挙する。具体的な使い方はググること。

Prime95(CPU、メモリ周り)

オーバークロッカー御用達のため、ググるオーバークロックを前提とした記事が多くヒットするが、定格動作の場合は以下のような感じの判断基準でよいと思う。

Prime95の起動時のデフォルト(Blend)でテスト

一般に数時間以上テストすることが望ましいらしいが、本当に不調なPCだと数秒から数分でFATAL ERRORが出るのでまずはその程度持つかどうかで切り分けられるかもしれない。
エラーが出た場合は間違いなく何らかの問題がある。しかし、これだけではハードウェアの問題とは言い切れないようだ。

デバイスドライバに起因する障害

Prime95がエラーを出す原因として、デバイスドライバが考えられる。全てのデバイスを外しセーフモードで起動してPrime95を実行してどうなるか?
それでエラーが出ない場合、ハードには異常が無い(かもしれない)。エラーが出た場合、Memtest86でもテストし、それでエラーが出た場合はメモリが怪しい。Memtestが異常ない場合はCPUやマザーボード、あるいは電源が怪しい。(しかし、CPUが壊れることは滅多に無い。マザーボードコンデンサは劣化しやすい)

2018/1/12 追記
Microsoft Message Analyzerを導入した環境にて、Prime95実行時にエラーが発生する事例を確認。同時にイベントログにstunnelのエラーが大量に出力されていた。
アンインストールすると改善したため、Message Analyzerが原因なのは確実だが、環境依存なのかは不明。

Memtest86(メモリ)

日常用途で不安定になっているような事象について本当にそれがメモリ起因なのを調べるのであれば、1周だけで充分だと思う。
メモリ自体が壊れることはあんまり無いらしい(つまりメモリの相性問題の洗い出しが主用途)ので、メーカ製PCでメモリ交換、増設をしてない場合はあんまり意味が無いかも。

ddコマンドでゼロフィル(ディスク)

ディスク全領域に「書き込めること」を確認する。ブロックサイズは適切な大きさにすること(時間が掛かるため)。回数は1回でよい。
もちろん、全データが消去されるので、バックアップ必須。OS再インストール直前に、念のために行っておく、といった位置づけか。
なお、最近のメーカ製PCはディスク上にリカバリイメージを配置している場合が多いため、あらかじめリカバリメディアを作成しておくこと。

負荷を掛けて検査する、という行為について

高負荷を掛けるのに特化したツールとはいえ、一ソフトウェアを実行した結果ハードウェア自体が故障することは滅多に無いしむしろあってはならない(定格動作の場合)。もし高負荷を掛けた結果故障したというのであれば、それは元々壊れかけだったというわけで、少し寿命を早めただけと言える。データのバックアップだけは取っておく必要があるが、必要以上に故障することを危惧しても仕方ない。むしろ、壊れかけのPCを使い続ける方がストレスが増え生産性が落ちるとも考えられる。
※個人の見解です

参考

BSODs and Prime95 failures - Super User http://superuser.com/questions/109738/bsods-and-prime95-failures