成功と成長
成功をめざすのではなく、成長をめざそう。
CentOS Stream8 に Oracle19cをサイレントインストール
Oracleも12cはサポートやめてしまったので、最近は19へのアップデートがあちこちで発生しているでしょう。なんならOSもというので、今日はCentOS改め、CentOS Stream 8に、Oracle19cを載せる試みの奮闘記を。
1.VirtualBoxにCentOS 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
では、インストールです。まずは、依存関係のあるrpmをcurlで取得しておきます。
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作成
ホームディレクトリに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は認識していませんでした。
Ethernet controller: Intel Corporation Ethernet Connection 0x4d
マザーボードの製造元サイトを見て、NICの型番を調べました。
intelのI219-LMというものらしい。
どうやらintelがLinux用ドライバを提供してくれているようです。
ダウンロードして、コンパイルして、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でインストールします。
mount /dev/cdrom /media
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を直接たたく形式です。楽ちん!
■起動
RLogin.exeを起動します。接続先設定画面が出ます。
・サーバー設定
エントリとコメントにはわかりやすい定義名を。
前接続先(下)は自身の定義名を選んでおきます。
IPアドレス、ユーザ名、パスワードを入力。
文字セットはここではUTF8
・制御コード設定
C1制御文字を無視する、にはチェックを入れておきます。これでcatコマンド実行時に画面が固まるのを防ぐことができます。
・ヒストリ設定
TeraTermではおなじみの操作ログ出力設定です。ファイル名に日付を含めることができます。時刻まで入れることもできます。%Dは日付、%tで時刻。あとは%SでIPアドレスなども設定できます。文句なし。
通信ログの形式はRAWではなくLINEのほうが、BSで戻った後とかまで出力されず、最終的にコマンド行として実行されたものだけが出力されるので便利かも。あと、WindowsはSJISが標準なので、ログ出力コードはSJISにしといたほうがいい。
・クリップボード設定
左クリックの範囲指定だけでクリップボードにコピーする にチェック。TeraTermも同じ挙動ですね。
右クリックでペースト のラジオボタンをチェック。これもTeraTermからの移行には助かる。
常にクリップボードからペーストするテキストを確認する にチェック。これはコマンド実行前に本当に間違っていないかチェックするのに役立つ。
・マウス関連設定
ここではファイルをドロップした時の動作をSCPにします。これはTeraTermにもなかったもの。なんと、開いたターミナル画面にファイルをドラッグ&ドロップすることで、裏ではカレントディレクトリにファイルをSCP転送してくれます。
ただ、バイナリなのかテキストなのかがよくわからないので、これは実際に使えるかどうかまだ未検証。
・カラー設定
接続ごとに背景やフォントの設定を変えられるのはTeraTermと同じ。ちなみに背景半透明などもできますね。すごい!
・背景設定
背景に薄くテキストを表示しておくの、TeraTermでもやりますよね。同じことができます。イメージはこんな感じ。
・キーボード設定
TeraTermを使っていると、ターミナルにコマンドをペーストする際、Alt+Vでやりますよね。あのショートカットがRLoginにもあるんですが、デフォルトは[$CLIPBOARD]つまりクリップボード表示です。後で下のほうにもクリップボード表示が出てきますが、いちいち履歴が出てきて個人的にはまどろっこしい。私は[$EDIT_PASTE]つまり貼り付けをアサインしました。まあ、好き好きですね。
・文字コード変更
いやもう、なんて簡単。ツールバーのアイコン押すだけ。EUC、SJIS、EUC、UTF切り替えできます。
・マルチ同時接続
これ、笑っちゃいました。作成した定義をまとめて同時にドンと自動接続してくれます。マクロもなんもなし。
接続定義にパスワードを保存していない場合にはパスワード入力ダイアログが出ます。複数サーバまとめて接続するときには、このダイアログもさくさくと連続で出てくれるので、複数サーバ同時作業などの際、接続の都度いろいろやる手間がありません。楽ちん!
接続後の画面がこちら。タブで切り替えます。
ここで、ツールバーの縦分割アイコンをクリックしていくと・・・マルチウィンドウに!!
切り替えはCtrl+1、Ctrl+2、Ctrl+3でできちゃう!
これほんと最高です。まさにこれを求めていました。
では、ブロードキャストしてみましょう。ツールバーの同時送信アイコンをクリック。
この状態で、どれかのターミナルにコマンドを入力しEnterを押すと、即座にブロードキャスト対象で同時実行されます。
TeraTermではブロードキャスト用のウィンドウが別に立ち上がり、いちいち入力欄にコマンドを入力し実行ボタンをマウスクリックしなければなりませんでした。しかも、入力エリアと実行ボタンをタブキー押下で移動することができないので、いちいちマウスでフォーカス移動しなければならなかった。これなら一発です!
Excelなどからコマンドをコピペする場合は、コマンド内容を確認するためでしょうか。以下のようにクリップボードのリストが出てきます。これも親切ですね。ただ、これが作業の上ではちょっとうっとおしいので、上で書きましたが、Alt+Vのキーボードアサインを単純な貼り付けに変えておいたほうがいいかもです。
そんなこんなで、まだ使い始めですが、これは便利すぎる!と感動した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"を設定するところがミソでした。あとはjavaやjavascriptに近い感覚で扱えます。
ではでは。今日はここまで。
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
1.資材の取得
・Java1.8
Solrを動かすのに必要となります。環境に合ったJREをOracleサイトから入手し入れましょう。これはメジャーなので詳細は省きます。
・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/
・PHP
7.1を使います。アーカイブからダウンロード。Apacheと連携する場合は必ずスレッドセーフ版。ファイル名にntfとあるのはNon-Thread-Safeなので違います。紛らわしいですね。あと、32bit/64bitを間違えないように。
https://windows.php.net/downloads/releases/archives/
・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
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_curlはcurl拡張機能です。
・環境変数追加
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
拡張子phpをPHPプログラムとして認識する設定を追加します。一番下に追加しましょう。
<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起動に成功しています。
続いて、phpの動作確認です。Apacheのドキュメントルート(C:\Apache24\htdocs)に、phpinfo.phpというファイルを作成し、中身は以下のようにします。
<?php
phpinfo();
?>
ブラウザを起動し、以下にアクセスします。
http://localhost/phpinfo.php
PHPの動作状況が表で表示されると思います。Solrとcurlの拡張機能が有効になっていることを確認しましょう。
Curl拡張
Solr拡張
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サーバが起動しています。
ブラウザから管理画面にアクセスしてみましょう。
こんな画面が出ればOKです。
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を直接たたくようなところまでやってみようと思います。
では、作ったインデックスを管理画面から検索してみましょう。
Collection Selectからtechproductsを選択します。
Queryをクリックします。
「q」欄に「foundation」と入力し、下の「Execute Query」をクリックすると、右に検索結果が出ます。
jsonで返ってくるんですね。GETメソッドで直接APIを叩いてみましょう。
http://localhost:8983/solr/techproducts/select?q=foundation
こんな感じです。
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でチェックアウト
せっかくなので、TortoiseSVNでチェックアウトしてみました。
環境はWindows10 Home Edition 64bit。
TortoiseSVNは、1.13.1の64bit日本語版です。
ローカルリポジトリにリモートリポジトリまるごとチェックアウトします。
できたっぽい。
無事にチェックアウトされてました。
ちなみに、Windows10ではTortoiseSVNのオーバーレイアイコンが表示されない事象が以前あって、原因はレジストリ[\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers]のエントリ上限数があり(たしか15だったような)、Windows10はデフォルトでOneDriveに優先的に割り当てられていたため、レジストリにはあるけれど表示されない、といった内容だったと記憶しています。
が、今インストールしたばかりでレジストリも触っていないのに、ちゃんとオーバーレイアイコン表示されているのは、なんでだろう。
レジストリを見てみました。
せ、せこい・・・よくみると、OneDriveのエントリは頭に半角スペース1つ、それに対してTortoiseSVNのエントリには頭に半角スペース2つが!!!
これで、TortoiseSVNがOneDriveよりも優先的に割り当てられているようです。
TortoiseSVNのどのバージョンからそうなったのかはわかりませんが。
ではでは。今日は疲れたので寝ますよ。