CentOS Stream8 に Oracle19cをサイレントインストール

Oracleも12cはサポートやめてしまったので、最近は19へのアップデートがあちこちで発生しているでしょう。なんならOSもというので、今日はCentOS改め、CentOS Stream 8に、Oracle19cを載せる試みの奮闘記を。

 

 

1.VirtualBoxCentOS Stream8をインストールしておく

VirtualBoxを使います。フリーなので。

 

なお、VirtualBoxのバージョンによるのか、あるいはRHEL8なのか、インストーラがkernel panicになることがあるようです。原因はHyper-Vらしいのですが、詳しくないので詳細は省きます。

 

対処としては、Windowsコマンドプロンプトを管理者権限で起動し以下実行し、PC再起動すると、Hyper-Vのオプションを殺してくれます。
bcdedit /set hypervisorlaunchtype off
DISM /Online /Disable-Feature:Microsoft-Hyper-V
DISM /Online /Get-Features

 


お約束のSELinux無効化とFirewalld停止、sshdのUseDNSをOFFり、/etc/hostsに実IP記載し再起動しておきましょう。

 


2.ユーザ・グループの追加

もちろん、rootで実行します。

useradd oracle
passwd oracle
groupadd oinstall
groupadd dba
groupadd oper
groupadd backupdba
groupadd dgdba
groupadd kmdba
groupadd racdba
usermod -aG oinstall,dba,oper,backupdba,dgdba,kmdba,racdba oracle

 

 

 

3.各種事前インストール
色々、依存パッケージを入れておきましょう。この辺りは好き好きで追加して。

yum install -y unzip libnsl

 

 

4.OracleRPMインストール
有り難いことに、Oracle19cから、サイレントインストール用にrpmが用意されています。事前に/rootにOracle19cのrpmを配置しておきましょう。言わずもがな、でかいです。
oracle-database-ee-19c-1.0-1.x86_64.rpm

 

 

では、インストールです。まずは、依存関係のあるrpmcurlで取得しておきます。

curl -o compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

curl -o compat-libcap1-1.10-7.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/compat-libcap1-1.10-7.el7.x86_64.rpm

rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
rpm -ivh compat-libcap1-1.10-7.el7.x86_64.rpm

 

curl -o oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

 

プレインストーラがあるんですね。ローカルインストールします。
yum -y localinstall oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

 

プレが終わったら、本チャンです。
yum -y localinstall oracle-database-ee-19c-1.0-1.x86_64.rpm

 

 

昔はrootで流すスクリプトがあったのですが、rpm版では不要みたい。

 

 

 


5.DB作成

以下はOracleユーザで実行です。
su - oracle


ホームディレクトリにdbca.rspを配置します。サンプルをコピーして使いましょう。内容は環境次第なのでいいように設定してください。とりあえず動かすだけなら以下のパラメータくらいでいいでしょう。mydbのところは自分の好きなSIDに変えてね。

 

responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v19.0.0
gdbName=mydb
sid=mydb
templateName=New_Database.dbt
sysPassword=oracle
systemPassword=oracle 
characterSet=JA16SJISTILDE
nationalCharacterSet=AL16UTF16

 

ちなみに、このままだやると、後続のdbcaコマンド実行時にパスワードが単純すぎだと怒られます。まあ、構築できるので無視しますけど。本番システムの場合はちゃんとしましょうということで。

 

 

 


環境変数設定

oracleユーザのホームディレクトリ/home/oracleの.bash_profileに以下緑字を追加します。


vi .bash_profile
export ORACLE_BASE=/opt/oracle/product
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1/
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=mydb
export NLS_LANG=Japanese_Japan.JA16SJIS

 

読み込んでおきましょう。

source ~/.bash_profile

 

 

 

構築実行

$ORACLE_HOME/bin/dbca -silent -createDatabase -responseFile ~/dbca.rsp



 

 

いつものことですが、dbcaは時間かかります。

 

 

 

終わったらサーバ再起動。

oracleユーザでログインし、sqlplusで接続してみましょう。

 

sqlplus / as sysdba

 

接続できたら、起動しましょう!

 

SQL>startup

 

リスナも起動

SQL>quit

lsnrctl start

 

 

 

一通り動作確認できたら、停止しときましょう。

 

lsnrctl stop

sqlplus / as sysdba

SQL>shutdown immediate

SQL>quit

 

 

 

 

 

 

rpmはやっぱり楽は楽ですね。/optの下にインストールされます。インストール先をカスタマイズする方法もあるのかもしれませんが、自分は困らないので、これで今日はおしまい。

 

 

LinuxでNICが認識しない場合に気合でデバイスドライバをインストールする

先日、新しいマシンを組み立てました。

 マザーボードはQ470。第10世代のCore i9を載せたハイスペック。そこにCentOSクリーンインストールし、DBサーバとして使おうと思っていました。CentOSのバージョンは7.3。

 

ところが・・・・

 

7.3のインストーラDVDを入れて起動し、インストーラのネットワーク設定画面で、目が点になりました。

 

NICを認識してない!!!

 

NICのないLinuxなど、肉抜きの牛丼です。なんとかしなければなりません。

今日はそんな奮闘記を。コマンドは青字、編集内容は緑字で。

 

 

まず、インストールは、もう、進めるしかありません。ネットワーク設定をスキップし、とりあえず、最小インストールを実行。

 

再起動した後にログインしましたところ、やはりNICは認識していませんでした。

 

lspci | grep Ethernet

Ethernet controller: Intel Corporation Ethernet Connection 0x4d

 

 

マザーボードの製造元サイトを見て、NICの型番を調べました。

intelのI219-LMというものらしい。

 

そこで、I219-Vのデバイスドライバググる

 

どうやらintelLinux用ドライバを提供してくれているようです。

 

downloadcenter.intel.com

 

 

ダウンロードして、コンパイルして、modprobeして、という流れです。

作業の前提として、以下3点。事前にやっときましょう。

SELinuxは無効化しておく

・Firewalldも無効化しておく

BIOSのSecureBootを無効化しておく

 

 

まずは、上のサイトからe1000e-3.8.4.tar.gzをダウンロードし、DVDに焼いて、CentOSに突っ込みます。

 

mount /dev/cdrom /media

cp /media/e1000e-3.8.4.tar.gz ~/

umount /media

 

 

次に、開発ツール類をyumでインストールします。

CentOSインストーラディスクをDVDトレイに入れて。

 

mount /dev/cdrom /media

 

DVDをyumリポジトリにします。

vi /etc/yum.repos.d/CentOS-Media.repo

[dvd]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
file:///media/cdrom/
file:///media/cdrecorder/
file:///media/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

 

 

保存します。

 

yum update

 

開発ツールをインストールします。

yum disablerepo=* enablerepo=dvd groupinstall "Development Tools"

これでたぶん全部入ると思いますが、環境によってはkernel-headersやkernel-develを個別インストールしないとかも。念のため。

 

yum disablerepo=* enablerepo=dvd install kernel-headers kernel-devel

 

ここで再起動する必要があります。

shutdown -r now

 

 

再起動したら、突っ込んだe1000eのソースをコンパイルして、rpmを作り、インストールします。make installしてもいいのですが、後々rpmにしといたほうがスマートなので、rpmbuildしましょう。

 

rpmbuild -tb --clean e1000e-3.8.4.tar.gz

cd rpmbuild/RPMS/x86_64/

rpm -ivh e1000e-3.8.4-1.x86_64.rpm

 

これで、ドライバがインストールされます。

 

 

次は、モジュールをinsmodします。

 

insmod /lib/modules/3.10.0-1160.25.1.el7.x86_64/updates/drivers/net/ethernet/intel/e1000e/e1000e.ko

 

ここで、required key not availableエラーが出ることがあります。なんと、BIOSでSecureBootを有効にしていると、デバイスへのアクセスを遮断するようです。BIOS画面でSecureBootを無効化し、また起動し、再度insmodしましょう。

 

 

insmodが正常にいったら、modprobe。

 

modprobe e1000e

 

 

 

nmcli device show

すると、なにやらeno1というデバイス名で認識されたようです。

 

 

しかし、/etc/sysconfig/network-scripts配下にifcfg-eno1は存在しません。

なので、手で作ります。ここでは固定IPの例。

まずは、NICのUUIDを調べます。

 

nmcli con

表示されたUUIDをコピペしときます。

 

 

vi /etc/sysconfig/network-scripts/ifcfg-eno1

TYPE="Ethernet"

BOOTPROTO="static"

IPV6INIT="no"

NAME="eno1"

UUID="上で調べたUUID文字列"

DEVICE="eno1"

ONBOOT="yes"

NETBOOT="yes"

DNS1=192.168.1.50

DOMAIN=local

IPADDR=192.168.1.3

NETMASK=255.255.255.0

GATEWAY=192.168.1.254

 

赤字のネットワークのパラメータは環境に応じて適宜変えてくださいね。

 

 

/etc/hostsも編集しときますか。

 

vi /etc/hosts

192.168.1.3 myhost myhost.local

 

 

ホスト名も編集しときましょう。

 

vi /etc/hostname

myhost.local

 

 

 

後は、ネットワークを再起動。

 

systemctl restart network

 

 

これでIPアドレスも付与されたはず。

 

ip a

 

 

おしまい。なかなか大変ですね、デバイスは。

 

 

ターミナルソフト RLogin ほんっとに便利!!使えます!!

普段、仕事でLinuxサーバにWindowsマシンから接続する際、PuTTYやTera Termを使っている方が多いと思います。

 

普段使いとしてほしい機能は以下。

 

ssh接続

文字コード切り替え

・操作ログの出力

・複数サーバへのコマンドブロードキャスト

 

Tera Termはこれらすべてに答えてくれる優秀で安定したソフトです。ですが、細かいところでいろいろと不満はありました。例えば・・・

 

・シングルウィンドウなので複数サーバに接続した時にデスクトップ上での大きさをいちいちマウスドラッグで設定しないと見づらい、そして面倒

・コマンドブロードキャスト時、タブによるフォーカス移動が使えずが恐ろしく使いにくい

 

 

最近、RLoginというターミナルソフトを使い始め、TeraTermの欠点をすべて補う素晴らしいソフトであることを確信しました。

 

まだ使い始めなので、おそらくまだまだ素晴らしい機能があるかと思いますが、今日はその導入と設定してみた感触を書きます。勘違いなどもあるかもしれませんので、もしお気づきの点がございましたら、ご指摘いただけるとありがたいです。

 

 

 

■導入

RLoginは、Windowsでしか使えません。残念ですが、Macでは無理です。

 

以下からzipファイルをダウンロードします。適当な場所に解凍します。

http://nanno.dip.jp/softlib/man/rlogin/

 

解凍するとRLogin.exeができます。そう、インストールがいらず、exeを直接たたく形式です。楽ちん!

 

f:id:ponkotsu_engine:20200504204334p:plain

 

 

 

■起動

RLogin.exeを起動します。接続先設定画面が出ます。

 

・サーバー設定

f:id:ponkotsu_engine:20200504204447p:plain

エントリとコメントにはわかりやすい定義名を。

前接続先(下)は自身の定義名を選んでおきます。

プロトコルssh

 IPアドレス、ユーザ名、パスワードを入力。

文字セットはここではUTF8

 

・制御コード設定

f:id:ponkotsu_engine:20200504204744p:plain

C1制御文字を無視する、にはチェックを入れておきます。これでcatコマンド実行時に画面が固まるのを防ぐことができます。

 

 

・ヒストリ設定

f:id:ponkotsu_engine:20200504211606p:plain

TeraTermではおなじみの操作ログ出力設定です。ファイル名に日付を含めることができます。時刻まで入れることもできます。%Dは日付、%tで時刻。あとは%SでIPアドレスなども設定できます。文句なし。

 

通信ログの形式はRAWではなくLINEのほうが、BSで戻った後とかまで出力されず、最終的にコマンド行として実行されたものだけが出力されるので便利かも。あと、WindowsSJISが標準なので、ログ出力コードはSJISにしといたほうがいい。

 

 

クリップボード設定

f:id:ponkotsu_engine:20200505010545p:plain



 

左クリックの範囲指定だけでクリップボードにコピーする にチェック。TeraTermも同じ挙動ですね。

右クリックでペースト のラジオボタンをチェック。これもTeraTermからの移行には助かる。

常にクリップボードからペーストするテキストを確認する にチェック。これはコマンド実行前に本当に間違っていないかチェックするのに役立つ。

 

 

・マウス関連設定

f:id:ponkotsu_engine:20200504205254p:plain

ここではファイルをドロップした時の動作をSCPにします。これはTeraTermにもなかったもの。なんと、開いたターミナル画面にファイルをドラッグ&ドロップすることで、裏ではカレントディレクトリにファイルをSCP転送してくれます。

ただ、バイナリなのかテキストなのかがよくわからないので、これは実際に使えるかどうかまだ未検証。

 

 

・カラー設定

f:id:ponkotsu_engine:20200504205513p:plain

接続ごとに背景やフォントの設定を変えられるのはTeraTermと同じ。ちなみに背景半透明などもできますね。すごい!

 

・背景設定

f:id:ponkotsu_engine:20200504205559p:plain

背景に薄くテキストを表示しておくの、TeraTermでもやりますよね。同じことができます。イメージはこんな感じ。

f:id:ponkotsu_engine:20200504205642p:plain

 

 

・キーボード設定

f:id:ponkotsu_engine:20200505010842p:plain

TeraTermを使っていると、ターミナルにコマンドをペーストする際、Alt+Vでやりますよね。あのショートカットがRLoginにもあるんですが、デフォルトは[$CLIPBOARD]つまりクリップボード表示です。後で下のほうにもクリップボード表示が出てきますが、いちいち履歴が出てきて個人的にはまどろっこしい。私は[$EDIT_PASTE]つまり貼り付けをアサインしました。まあ、好き好きですね。

 

 

文字コード変更

いやもう、なんて簡単。ツールバーのアイコン押すだけ。EUCSJISEUC、UTF切り替えできます。

f:id:ponkotsu_engine:20200504212425p:plain

 

 

 

・マルチ同時接続

これ、笑っちゃいました。作成した定義をまとめて同時にドンと自動接続してくれます。マクロもなんもなし。

 

f:id:ponkotsu_engine:20200504205749p:plain

 

接続定義にパスワードを保存していない場合にはパスワード入力ダイアログが出ます。複数サーバまとめて接続するときには、このダイアログもさくさくと連続で出てくれるので、複数サーバ同時作業などの際、接続の都度いろいろやる手間がありません。楽ちん!

 

f:id:ponkotsu_engine:20200505012247p:plain



 

 

 

接続後の画面がこちら。タブで切り替えます。

f:id:ponkotsu_engine:20200504205856p:plain

 

 

ここで、ツールバーの縦分割アイコンをクリックしていくと・・・マルチウィンドウに!!

f:id:ponkotsu_engine:20200504212814p:plain

 切り替えはCtrl+1、Ctrl+2、Ctrl+3でできちゃう!

これほんと最高です。まさにこれを求めていました。

 

 

では、ブロードキャストしてみましょう。ツールバーの同時送信アイコンをクリック。

f:id:ponkotsu_engine:20200504212831p:plain

 

 

 

 

この状態で、どれかのターミナルにコマンドを入力しEnterを押すと、即座にブロードキャスト対象で同時実行されます。

 

f:id:ponkotsu_engine:20200504210209p:plain

 

TeraTermではブロードキャスト用のウィンドウが別に立ち上がり、いちいち入力欄にコマンドを入力し実行ボタンをマウスクリックしなければなりませんでした。しかも、入力エリアと実行ボタンをタブキー押下で移動することができないので、いちいちマウスでフォーカス移動しなければならなかった。これなら一発です!

 

 

Excelなどからコマンドをコピペする場合は、コマンド内容を確認するためでしょうか。以下のようにクリップボードのリストが出てきます。これも親切ですね。ただ、これが作業の上ではちょっとうっとおしいので、上で書きましたが、Alt+Vのキーボードアサインを単純な貼り付けに変えておいたほうがいいかもです。

 

f:id:ponkotsu_engine:20200504210516p:plain

 

 

 

 

そんなこんなで、まだ使い始めですが、これは便利すぎる!と感動したRLogin、これからどしどし使っていこうと思います。

 

 

ではでは。

 

 

 

 

WSH VBScript で多次元の連想配列を扱う

WSHは何気に便利で、仕事のメインPCはWindowsなので、よく使います。WindowsのバッチコマンドはUNIXのshに比べるとちょっと不便ですが、WSHプログラマにとってはExcelマクロ等でなじみ深い文法、そしてWindowsがバージョンアップしてもWSHが使えなくなることはほぼないので、一度覚えれば保守性もあります。

 

 

最近の開発で多次元の連想配列を使いたい案件があったので、勉強してみました。備忘のためにサンプルソースを載せておきます。

 

sample.vbs ←ファイル名

以下ソース

Option ExplicitOption Explicit

 

'1階層めの連想配列

Dim dicCarsSet dicCars = CreateObject("Scripting.Dictionary")

 

Call dicCars.Add("TOYOTA", CreateObject("Scripting.Dictionary"))

Call dicCars.Add("HONDA", CreateObject("Scripting.Dictionary"))

Call dicCars.Add("NISSAN", CreateObject("Scripting.Dictionary"))

 

'2階層めの連想配列

Call dicCars.Item("TOYOTA").Add("2000GT", "SportsCar")

Call dicCars.Item("TOYOTA").Add("Supra", "SportsCar")

Call dicCars.Item("TOYOTA").Add("Alphard", "MiniVan")

Call dicCars.Item("HONDA").Add("NSX", "SuperCar")

Call dicCars.Item("HONDA").Add("S2000", "SportsCar")

Call dicCars.Item("HONDA").Add("Odyssey", "MiniVan")

Call dicCars.Item("HONDA").Add("Insight", "HybridCar")

Call dicCars.Item("NISSAN").Add("S30Z", "SportsCar")

Call dicCars.Item("NISSAN").Add("GT-R", "SuperCar")

 

'連想配列の中身を表示

WScript.Echo "--- Initial Set ---"
Dim key1, key2

For Each key1 In dicCars

    For Each key2 In dicCars.Item(key1)

        WScript.Echo key1 & "," & key2 & ", " & dicCars.Item(key1).Item(key2)

    Next

Next

 

'連想配列の中身を変更

 If dicCars.Item("HONDA").Exists("Odyssey") Then

    dicCars.Item("HONDA").Item("Odyssey") = "HybridMiniVan"

End If

 

WScript.Echo vbCrLf

 

'変更後の連想配列の中身を表示

WScript.Echo "--- After Modify ---"

For Each key1 In dicCars

    For Each key2 In dicCars.Item(key1)

        WScript.Echo key1 & "," & key2 & ", " & dicCars.Item(key1).Item(key2)

    Next

Next

 

 

 

これをコマンドプロンプトからcscriptで実行した結果は以下のようになります。

 

cscript sample.vbs

 

--- Initial Set ---
TOYOTA,2000GT, SportsCar
TOYOTA,Supra, SportsCar
TOYOTA,Alphard, MiniVan
HONDA,NSX, SuperCar
HONDA,S2000, SportsCar
HONDA,Odyssey, MiniVan
HONDA,Insight, HybridCar
NISSAN,S30Z, SportsCar
NISSAN,GT-R, SuperCar


--- After Modify ---
TOYOTA,2000GT, SportsCar
TOYOTA,Supra, SportsCar
TOYOTA,Alphard, MiniVan
HONDA,NSX, SuperCar
HONDA,S2000, SportsCar
HONDA,Odyssey, HybridMiniVan
HONDA,Insight, HybridCar
NISSAN,S30Z, SportsCar
NISSAN,GT-R, SuperCar

 

 

 

1階層目のkey-valueを設定する際に、valueに"Scripting Dictionary"を設定するところがミソでした。あとはjavajavascriptに近い感覚で扱えます。

 

 

ではでは。今日はここまで。

 

 

 

Windowsで全文検索 Apache Solr をWindows10で構築

全文検索といえば、昔はNamazuでした。Excel/Wordの検索ができましたが、残念ながら、図形オブジェクトは検索できないなど、微妙に使いにくいところがありましたが、それでも重宝しました。プロジェクトのドキュメント検索などには大きな威力を発揮していました。


しかし調べてみると、もう今は開発が止まって久しく、使っている人はほとんどいないのでしょうか。というわけで、今よく使われている無償の全文検索システム、Solrを試してみることにしました。Linuxでの構築記事はいくつかありましたが、Windows環境でやったものはほとんどなく、情報集めに苦労しましたので、いい備忘録になるでしょう。資材さえそろえれば、オフラインで構築可能な手順になっています。

 

Apache Solrは10年以上昔からあるものです。RESTのIFを持ち、文書の登録・インデックス追加削除や、検索まですべてRESTで行えるのが特徴です。また、プレーンテキスト以外、Excel/Wordのオブジェクトもインデックス化でき、PDFにも対応。これだけできれば、普通に業務文書の検索には十分でしょう。どうも画像などのバイナリもできるらしいのですが、それはおいおい試していくとして、今回は導入・初期設定までとします。いつものように、赤字がコマンドです。

 

 

環境
OS:Windows10 64bit
Web:Apache httpd-2.4.41 + PHP 7.1 + PHP-Solr
Solr:Solr 8.4.1

 

f:id:ponkotsu_engine:20200320195527p:plain

 

 

 

1.資材の取得

・Java1.8

Solrを動かすのに必要となります。環境に合ったJREOracleサイトから入手し入れましょう。これはメジャーなので詳細は省きます。


・VisualStudio2015のVisualC++再頒布可能パッケージ
これがないとApache, PHPなどが動きません。Windows10ならおそらく最初から入っていると思いますので、コントロールパネルで探してみてください。なければ以下から取得します。32bit/64bitを間違えないように。
https://www.microsoft.com/en-us/download/detail.aspx?id=48145


Apache httpd
2.4.41をダウンロードします。32bit/64bitを間違えないように。
https://www.apachelounge.com/download/

f:id:ponkotsu_engine:20200320235916p:plain



 

 


PHP
7.1を使います。アーカイブからダウンロード。Apacheと連携する場合は必ずスレッドセーフ版。ファイル名にntfとあるのはNon-Thread-Safeなので違います。紛らわしいですね。あと、32bit/64bitを間違えないように。
https://windows.php.net/downloads/releases/archives/

 

f:id:ponkotsu_engine:20200321000023p:plain

 

PHP-Solr
SolrをPHPで楽に使えるようにするための拡張です。RESTのAPIをとても簡易に利用できます。今回はPHP7.1用の2.4.0を使います。これもスレッドセーフ版を選びます。「TS」はThread-Safe。「NTS(Non-Thread-Safe)」を選ばないように。あとこれも32bit/64bitを間違えないように。
https://pecl.php.net/package/solr/2.4.0/windows

 

f:id:ponkotsu_engine:20200321000127p:plain


2.PHPインストール
・ZIPを解凍
ダウンロードしたphp-7.1.9-Win32-VC14-x64.zipを解凍します。
php-7.1.9-Win32-VC14-x64とか長いフォルダができます。長すぎるので、フォルダ名をphpに変更し、Cドライブ直下に移動します。
C:\phpの下にext、extrasなどがある構成です。


ダウンロードしたphp_solr-2.4.0-7.1-ts-vc14-x64.zipを解凍します。
中にphp_solr.dllが入っていますので、C:\php\extの下にコピーします。


C:\php\php.ini-production を、同じディレクトリにphp.iniとしてコピーし、php.iniを編集します。
以下の1行を追加します。
extension=php_solr.dll

また、以下の行のコメントを外します。
extension=php_curl.dll

編集したら、保存しましょう。php_solrはPHPのsolr拡張機能php_curlcurl拡張機能です。


環境変数追加
PHPのコマンドを使えるように、環境変数Pathに追加します。
スタートボタン右クリック>システム>システム情報>システムの詳細設定>環境変数

ユーザ環境変数Pathに、PHPのフォルダを追加します。
C:\php

 

設定したら、コマンドプロンプトから以下のコマンドを打ってみてください。
php -version
PHP 7.1.9 (cli) (built: Aug 30 2017 18:34:46) ( ZTS MSVC14 (Visual C++ 2015) x64 )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

 

こんなメッセージが出れば、PHPのインストールには成功しています。

 

 

 


2.Apache httpd インストール
・ZIPを解凍
まず、ダウンロードしたhttpd-2.4.41-win64-VC14.zipを解凍します。
解凍すると、Apache24というフォルダができていますので、それをCドライブ直下に移動します。
C:\Apache24配下に、confやhtdocsがある構成になります。

 

httpd.confの編集
C:\Apache24\conf\httpd.confをエディタで開きます。

ServerNameを編集します。IPアドレスとポート番号(ふつうは80)は適宜変更します。
ServerName 端末のIPアドレス:80

 

PHP7モジュールをロードする設定も入れます。LoadModuleの一番下にでも追加しましょう。
LoadModule php7_module c:/php/php7apache2_4.dll

拡張子phpPHPプログラムとして認識する設定を追加します。一番下に追加しましょう。

 

<FilesMatch "\.php$">
AddHandler php7-script .php
AddType application/x-httpd-php .php
</FilesMatch>
PHPIniDir C:/php/


Apache起動
httpd.confを保存したら、Apacheを起動してみましょう。
C:\Apache24\bin\httpd.exe をダブルクリックします。


ブラウザを起動し、以下にアクセスします。
http://localhost/

「It Works!」と表示されれば、httpd起動に成功しています。

 

f:id:ponkotsu_engine:20200320192707p:plain

 


続いて、phpの動作確認です。Apacheのドキュメントルート(C:\Apache24\htdocs)に、phpinfo.phpというファイルを作成し、中身は以下のようにします。

<?php
phpinfo();
?>


ブラウザを起動し、以下にアクセスします。
http://localhost/phpinfo.php


PHPの動作状況が表で表示されると思います。Solrとcurl拡張機能が有効になっていることを確認しましょう。

f:id:ponkotsu_engine:20200320193448p:plain


 Curl拡張

f:id:ponkotsu_engine:20200320193540p:plain

 

Solr拡張

f:id:ponkotsu_engine:20200320193656p:plain

 


3.Solr本体のインストールと起動
・ダウンロードしたsolr-8.4.1.zipを解凍します。
solr-8.4.1ディレクトリができますので、Cドライブ直下に移動します。
C:\solr-8.4.1の下にbinやexampleができている構成になります。


・コレクションの作成
コレクションとは、インデックス構築の大きなくくりです。検索したい業務単位などにすればいいでしょう。ここでは、サンプルとして提供されているものを使います。

コマンドプロンプトを開き、以下のように実行していきましょう。


cd C:\solr-8.4.1

bin\solr.cmd start -e cloud  ←対話形式で起動設定を行うコマンドです。

Welcome to the SolrCloud example!

This interactive session will help you launch a SolrCloud cluster on your local workstation.
To begin, how many Solr nodes would you like to run in your local cluster? (specify 1-4 nodes) [2]:←Enter

Ok, let's start up 2 Solr nodes for your example SolrCloud cluster.
Please enter the port for node1 [8983]:←Enter

Please enter the port for node2 [7574]:←Enter

Creating Solr home directory c:\solr-8.4.1\example\cloud\node1\solr
Cloning c:\solr-8.4.1\example\cloud\node1 into
c:\solr-8.4.1\example\cloud\node2

Starting up Solr on port 8983 using command:
"c:\solr-8.4.1\bin\solr.cmd" start -cloud -p 8983 -s "c:\solr-8.4.1\example\cloud\node1\solr"

Waiting up to 30 to see Solr running on port 8983

Starting up Solr on port 7574 using command:
"c:\solr-8.4.1\bin\solr.cmd" start -cloud -p 7574 -s "c:\solr-8.4.1\example\cloud\node2\solr" -z localhost:9983

Started Solr server on port 8983. Happy searching!
Waiting up to 30 to see Solr running on port 7574
Started Solr server on port 7574. Happy searching!
INFO - 2020-03-20 19:25:34.797; org.apache.solr.common.cloud.ConnectionManager; Waiting for client to connect to ZooKeeper
INFO - 2020-03-20 19:25:34.820; org.apache.solr.common.cloud.ConnectionManager; zkClient has connected
INFO - 2020-03-20 19:25:34.820; org.apache.solr.common.cloud.ConnectionManager; Client is connected to ZooKeeper
INFO - 2020-03-20 19:25:34.836; org.apache.solr.common.cloud.ZkStateReader; Updated live nodes from ZooKeeper... (0) -> (2)
INFO - 2020-03-20 19:25:34.852; org.apache.solr.client.solrj.impl.ZkClientClusterStateProvider; Cluster at localhost:9983 ready

Now let's create a new collection for indexing documents in your 2-node cluster.
Please provide a name for your new collection: [gettingstarted]
techproducts
How many shards would you like to split techproducts into? [2]←Enter

How many replicas per shard would you like to create? [2]←Enter

Please choose a configuration for the techproducts collection, available options are:
_default or sample_techproducts_configs [_default]
sample_techproducts_configs
Created collection 'techproducts' with 2 shard(s), 2 replica(s) with config-set 'techproducts'

Enabling auto soft-commits with maxTime 3 secs using the Config API

POSTing request to Config API: http://localhost:8983/solr/techproducts/config
{"set-property":{"updateHandler.autoSoftCommit.maxTime":"3000"}}
Successfully set-property updateHandler.autoSoftCommit.maxTime to 3000


SolrCloud example running, please visit: http://localhost:8983/solr

 

 

これだけで、裏ではもうSolrサーバが起動しています。

 

ブラウザから管理画面にアクセスしてみましょう。

http://localhost:8983/solr

 

こんな画面が出ればOKです。

f:id:ponkotsu_engine:20200320195703p:plain

 

 

Solrでは、サンプル用として、techproductsというコレクションを準備してくれています。本来はスキーマ設計が必要らしく、なかなかそのあたりは難しそうなので割愛し、今回はサンプルをそのまま使わせてもらいました。

 

 

4.Solrのインデックス構築

では、そのサンプルのコレクションに、検索対象となるドキュメントをインデックス化していきましょう。

 

Linux版のSolrでは、postという簡易コマンドが用意してあり、それを使ってインデックスを作れます。Windows版には、post.jarというJavaが用意してあり、javaコマンドを使うことになります。以下のコマンドをコマンドプロンプトから実行します。事前にc:\solr-8.4.1にcdしておいてください。

 


java -jar -Dc=techproducts -Dauto -Drecursive=10 example\exampledocs\post.jar example\exampledocs\*

 SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/techproducts/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
Entering recursive mode, max depth=10, delay=0s
POSTing file books.csv (text/csv) to [base]
POSTing file books.json (application/json) to [base]/json/docs
POSTing file gb18030-example.xml (application/xml) to [base]
POSTing file hd.xml (application/xml) to [base]
POSTing file ipod_other.xml (application/xml) to [base]
POSTing file ipod_video.xml (application/xml) to [base]
POSTing file manufacturers.xml (application/xml) to [base]
POSTing file mem.xml (application/xml) to [base]
POSTing file money.xml (application/xml) to [base]
POSTing file monitor.xml (application/xml) to [base]
POSTing file monitor2.xml (application/xml) to [base]
POSTing file more_books.jsonl (application/json) to [base]/json/docs
POSTing file mp500.xml (application/xml) to [base]
POSTing file post.jar (application/octet-stream) to [base]/extract
POSTing file sample.html (text/html) to [base]/extract
POSTing file sd500.xml (application/xml) to [base]
POSTing file solr-word.pdf (application/pdf) to [base]/extract
POSTing file solr.xml (application/xml) to [base]
POSTing file test_utf8.sh (application/octet-stream) to [base]/extract
POSTing file utf8-example.xml (application/xml) to [base]
POSTing file vidcard.xml (application/xml) to [base]
21 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/techproducts/update...
Time spent: 0:00:03.108

 

このメッセージを見てわかるとおり、インデックス構築も含めてすべてREST化してあるようです。すごいですね。そのうちAPIを直接たたくようなところまでやってみようと思います。

 

 

では、作ったインデックスを管理画面から検索してみましょう。

http://localhost:8983/solr

 

Collection Selectからtechproductsを選択します。

f:id:ponkotsu_engine:20200320200804p:plain

 

Queryをクリックします。

f:id:ponkotsu_engine:20200320200849p:plain

 

「q」欄に「foundation」と入力し、下の「Execute Query」をクリックすると、右に検索結果が出ます。

f:id:ponkotsu_engine:20200320201012p:plain

 

jsonで返ってくるんですね。GETメソッドで直接APIを叩いてみましょう。

http://localhost:8983/solr/techproducts/select?q=foundation

f:id:ponkotsu_engine:20200320201156p:plain

 

 

こんな感じです。

 

 

5.Solrの停止と起動

Solrを停止するには、コマンドプロンプトから以下のコマンドを実行します。

 

bin\solr.cmd stop -all

 

起動するには、以下のコマンドです。

bin\solr.cmd start -cloud -p 8983 -s c:\solr-8.4.1\example\cloud\node1\solr

bin\solr.cmd start -cloud -p 7574 -s c:\solr-8.4.1\example\cloud\node2\solr -z localhost:9983

 

 

 

 

次回は、php-solrを使った、クライアントプログラムを試してみたいと思います。

 

ではでは。今日はこれまで。

 

 

TortoiseSVN 1.13.1でチェックアウト

先日、CentOS 8.1にSVNを立てました。

 

せっかくなので、TortoiseSVNでチェックアウトしてみました。

環境はWindows10 Home Edition 64bit。

TortoiseSVNは、1.13.1の64bit日本語版です。

 

 

ローカルリポジトリにリモートリポジトリまるごとチェックアウトします。

f:id:ponkotsu_engine:20200312235210p:plain

TortoiseSVN

 

 

f:id:ponkotsu_engine:20200312235323p:plain

 

 

できたっぽい。

f:id:ponkotsu_engine:20200312235419p:plain

 

 

無事にチェックアウトされてました。

f:id:ponkotsu_engine:20200312235447p:plain

 

 

 

ちなみに、Windows10ではTortoiseSVNのオーバーレイアイコンが表示されない事象が以前あって、原因はレジストリ[\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers]のエントリ上限数があり(たしか15だったような)、Windows10はデフォルトでOneDriveに優先的に割り当てられていたため、レジストリにはあるけれど表示されない、といった内容だったと記憶しています。

 

が、今インストールしたばかりでレジストリも触っていないのに、ちゃんとオーバーレイアイコン表示されているのは、なんでだろう。

 

レジストリを見てみました。

 

f:id:ponkotsu_engine:20200312235847p:plain

 

 

せ、せこい・・・よくみると、OneDriveのエントリは頭に半角スペース1つ、それに対してTortoiseSVNのエントリには頭に半角スペース2つが!!!

 

これで、TortoiseSVNがOneDriveよりも優先的に割り当てられているようです。

TortoiseSVNのどのバージョンからそうなったのかはわかりませんが。

 

 

 

ではでは。今日は疲れたので寝ますよ。