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のどのバージョンからそうなったのかはわかりませんが。

 

 

 

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

 

 

 

CentOSによるVMWare環境構築を通した振り返り

今日はCentOSの環境構築について、のんびり書いていきます。自分の復習用であり、UNIXに慣れた人には退屈でしかないただの回顧録みたいになるので読まないでくださいね。

 

 

世の中の一般人が家庭で使うパソコンのOSは、WindowsMacがほとんどですが、インターネットその他で業務システムを動かすサーバのOSは、UNIXがかなりを占めていると思います。

 

UNIXは、1969年AT&Tベル研究所で生まれました。その後、SystemV系とBSD系の2つの流れに分かれ、それぞれ開発が進んでいきます。SystemVの流れからはHP-UXAIX、IRIXなどの商用UNIXがいくつか出た後、フィンランドの大学院生リーナス・トーバルズLinuxを生み出します。そしてさらに近年はLinuxからスマホタブレット端末用OSであるAndroidが生まれました。一方、BSDは研究機関(BSDはBerkeley Software Distribution)で育ってゆき、NetBSDFreeBSD、珍しいものではNECPC-98シリーズで動くFreeBSD(98)などができ、最近ではMacOSNetBSDから派生して生まれ、今のMacの繁栄を支えています。

 

そんな中で、今回のCentOSは、Linuxのひとつとしてここ10年くらいの間に出てきました。Linuxには大きく3種類系統があります。

 

 

この中でサーバ用途でシェアが最も多いのがRedHat系であり、事実上Red Hat Enterprise Linuxの独壇場です。CentOSは、RedHat完全互換OSであり、RedHat社が後援しています。バージョンなどもRedHatCentOSは同じ番号でリリースされていきます。The CentOS Projectが開発しています。さっそくサイトをのぞいてみましょう。

 

https://www.centos.org/

 

f:id:ponkotsu_engine:20181118163035p:plain

 

Get CentOS Now とありますので、クリックしてみましょう。

 

f:id:ponkotsu_engine:20181118170719p:plain

 

DVD ISO や、Everything ISO などのボタンがあります。

Linuxを導入する時にも、Windowsと同じようにDVDメディアから導入することが多いです。このサイトには、こうしたインストール用のDVDメディアをISOデータとしてダウンロードできるように置いてくれているんですね。これをダウンロードしてDVDに焼けば、それを使って自宅PCにクリーンインストールしたり、自宅PCのWindowsマシンに入れたVMWare仮想環境にダウンロードしたISOファイルをマウント(ようはDVDをトレイに入れておくようなもの)して、CentOSVM構築ができます。

 

では、DVD ISO をクリックしてみます。

 

f:id:ponkotsu_engine:20181118171305p:plain

 

すると、ダウンロード先のサイト一覧ぽいものが出てきました。たくさんあります。世界中にありますので、できるだけ近いところが良いです。上に Mirror List とあるのがミラーサイト一覧です。これをクリックしてみましょう。

 

 

f:id:ponkotsu_engine:20181118171516p:plain

 

CentOSのミラーリスト一覧を下へスクロールしていくと、日本のサイトがいくつかあります。この中のどれかをクリックしてみましょう。理研にしましょうか。

 

http://ftp.riken.jp/Linux/centos/

 

f:id:ponkotsu_engine:20181118171751p:plain

 

 下のほうに行くと、7.5があります。今は最新バージョンが7.5だからです。ここでは7.3を入れようと思いますので、7.3.1611をクリックします。

 

 

f:id:ponkotsu_engine:20181118172016p:plain

 

 なんと、中身はReadmeだけ。ISOはどこにもありませんでした。

CentOSに限らずですが、7系列は7系列の最新のISOしか置いていません。

では、古いものを導入したいときにはどうすればよいのかというと、古いもの専用の置き場があるのです。それがVaultです。

 

http://vault.centos.org/

 

ここにも7.3.1611のフォルダがありますが、中身はあるんでしょうか。

 

f:id:ponkotsu_engine:20181118172347p:plain

 

 ありました!良かったですね。

さて。ISOファイルはどこにあるかというと、isos にありそうです。クリックしてみましょう。するとx86_64フォルダを経て、やっと目当てのISOファイルにたどり着きました。

 

f:id:ponkotsu_engine:20181118172535p:plain

 

あれ。ISOファイルがたくさんあります。どれなんでしょう。

※ちなみに、torrentファイルはダウンロードソフト用のもので、気にしなくていいです。

 

サイズ的には一番上のが4.1GBですから、一番それっぽい。その通りです。これが普通にインストールする時のDVDメディアです。NetInstallはインストーラのサイズを小さくしてパッケージ類はインストール中に都度ネットワーク経由で取得するタイプ。Everythingがフルインストール用ですが、二層式DVDでないと焼けません。ここでは一般的な4.1GBのやつをダウンロードしましょう。

 

 

 

CentOSのISOが手に入りましたので、次は導入する先の準備。VMWare Playerです。

 

VMWareは仮想環境ソフトの最大手で、商用のクラウドの多くがこれを使っています。また、個人用で使える無償のVMWare Playerがあります。今回はこれを使います。

 

https://www.vmware.com/jp/products/workstation-player.html

 

f:id:ponkotsu_engine:20181118173320p:plain

 

今すぐダウンロード をクリックします。

 

f:id:ponkotsu_engine:20181118173420p:plain

 

Windows用とLinux用の2種類のインストーラが用意されているようです。

VMWare PlayerをホストOS上にインストールし、インストールしたVMWare上にゲストとしてCentOSを構築します。ここではホストPCをWindows と想定していますので、Windows用をダウンロードしましょう。今はバージョン15が最新のようです。

 

 もし、すでに古いバージョンのVMWare Playerをインストール済みであった場合、アンインストールして最新をインストールすることになりますが、VMWare はバックグラウンドでいくつかサービスを動かしていますので、普通にコントロールパネルからアンインストールすると、「アンインストール」ボタンが非活性状態になっていて、一見アンインストールできません。

 

f:id:ponkotsu_engine:20181118182425p:plain

 

そういう場合はまず先にサービスを停止します。スタートボタンからWindows管理ツール >  サービス を起動します。

 

f:id:ponkotsu_engine:20181118182613p:plain

 

以下の4つのサービスを停止します。

 

 

 これで、アンインストールできるようになります。

 

 

疲れたので今日はここまで。

 

 

CentOS8.1にSVN導入

CentOS 8.1が1/15に公開されました。

 

 

8系はまだ触ったことがないのですが、7系は初代からだいぶ年月が経ち、商用でも普通に使われていますので、そろそろ8系でも勉強してみるかと、VMWare仮想環境にインストールし、手始めにApache Subversionを立ててみました。

 

参考URLはこちら。ほとんどこの手順そのままです。

https://computingforgeeks.com/install-apache-subversion-svn-on-centos-rhel-8/

 

OSの導入部分はさすがに省略します。ちなみに、7系ではデフォルトのインストールが最小構成でしたが、8系はGUIのサーバ構成がデフォルトになっていました。ここでは勉強のために最小構成に変更してCentOS8.1を構築し、SELinux、Firewalldをオフにしたところから、メモ書きを転載します。コマンドは赤字です。

 

 

作業はすべてrootで実施しています。

 

 

SVNインストール

dnf install subversion mod_dav_svn

 

/usr/bin/dnfコマンドは8系から入ったもので、yumの後継コマンドの位置づけだそうです。 yumのオプションが普通に使えました。インストール時の出力内容もほとんど変りません。じゃあyumコマンドはどこへ行ったんだろうと思ったら、なんと/usr/bin/yumがdnfのシンボリックリンクになっていました。なお、rpmコマンドは消えていませんでした。

ll /usr/bin/yum
lrwxrwxrwx. 1 root root 5 11月 12 10:35 /usr/bin/yum -> dnf-3
ll /usr/bin/dnf
lrwxrwxrwx. 1 root root 5 11月 12 10:35 /usr/bin/dnf -> dnf-3
file /usr/bin/dnf-3
/usr/bin/dnf-3: Python script, ASCII text executable

 

本体はPythonなんですね。

 

ここではSVNとmod_dav_svn を入れました。subversionのバージョンは1.10.2でした。

dnf info subversion
メタデータの期限切れの最終確認: 0:36:24 時間前の 2020年03月11日 10時49分17秒 に実施しました。
インストール済みパッケージ
名前 : subversion
バージョン : 1.10.2
リリース : 1.module_el8.0.0+45+75bba4f4
Arch : x86_64
サイズ : 5.1 M
ソース : subversion-1.10.2-1.module_el8.0.0+45+75bba4f4.src.rpm
リポジトリー : @System
repo から : AppStream
概要 : A Modern Concurrent Version Control System
URL : https://subversion.apache.org/
ライセンス : ASL 2.0
説明 : Subversion is a concurrent version control system which enables one
: or more users to collaborate in developing and maintaining a
: hierarchy of files and directories while keeping a history of all
: changes. Subversion only stores the differences between versions,
: instead of every complete file. Subversion is intended to be a
: compelling replacement for CVS.

 

 

httpdSVN用config作成 

vi /etc/httpd/conf.d/subversion.conf

以下の内容で保存します。ベーシック認証です。

 

<Location /svn>
DAV svn
SVNParentPath /var/www/svn
AuthType Basic
AuthName "SVN Authentication"
AuthUserFile /etc/svn/svn-auth
Require valid-user
</Location>

 

 

SVNリポジトリディレクトリと、認証ファイルの置き場所を作ります。

mkdir /var/www/svn /etc/svn

 

 

・さっそくリポジトリを作ります。

cd /var/www/svn

svnadmin create test

 

 

リポジトリディレクトリにhttp経由の書き込み権限を付与します。
chown -R apache.apache test

 

 

・ベーシック認証ファイルの作成

htpasswdコマンドで認証ファイルを作成します。
touch /etc/svn/svn-auth

htpasswd -cm /etc/svn/svn-auth adminuser
New password:
Re-type new password:
Adding password for user adminuser

 

権限を変えておきます。
chown root:apache /etc/svn/svn-auth

chmod 640 /etc/svn/svn-auth

 

ついでにテスト用ユーザも。
htpasswd -m /etc/svn/svn-auth testuser
New password:
Re-type new password:
Adding password for user testuser

 


httpdを起動
systemctl start httpd

よかった。systemctlコマンドは変わってないですね。

 

httpdプロセスが起動したことを確認します。

ps -efw | grep httpd

root 9754 1 0 10:50 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 9755 9754 0 10:50 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 9756 9754 0 10:50 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 9757 9754 0 10:50 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 9758 9754 0 10:50 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 9971 1313 0 10:50 pts/0 00:00:00 grep --color=auto httpd

 

 

・ブラウザでリポジトリにアクセス

http://ipaddress/svn/test/

正常に表示された・・・のかな?

 

f:id:ponkotsu_engine:20200312002837p:plain

SVN on CentOS8.1

 

 

・最後にサービスを有効にしておしまい。

systemctl enable httpd 

 

 

 

さて、CentOSを再起動してみました。

 

Tortoisesvnで接続してみましたが、応答がありません。

・・・起動してない???

 

httpdは起動していました。

ps -efw | grep httpd

root 839 1 0 09:49 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 890 839 0 09:49 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 891 839 0 09:49 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 892 839 0 09:49 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 893 839 0 09:49 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 1577 1554 0 09:50 pts/0 00:00:00 grep --color=auto httpd

 

ps -efw | grep svnserve

svnのプロセスがありません。svnserveが起動に失敗していました。

 

 

再度、svnserveを起動してみます。

 

systemctl start svnserve

Job for svnserve.service failed because the control process exited with error code.
See "systemctl status svnserve.service" and "journalctl -xe" for details.

 

仕方なく言われたとおりにジャーナルを確認。

journalctl -xe

3月 12 10:05:49 cent81.local svnserve[1643]: svnserve: E200009: Root path '/var/svn' does not exist or is not a directory

 

こんなエラーメッセージが。/var/svnがないよと言ってます。設定の問題かな?

 

 

svnserveの設定ファイルのありかを調べます。systemctlの起動スクリプトを見ます。

cat /usr/lib/systemd/system/svnserve.service

 

[Unit]
Description=Subversion protocol daemon
After=syslog.target network.target
Documentation=man:svnserve(8)

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/svnserve
ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid $OPTIONS
PrivateTmp=yes

[Install]
WantedBy=multi-user.target

 

 

環境設定ファイルが/etc/sysconfig/svnserveにあるようです。

 

cat /etc/sysconfig/svnserve

OPTIONS="-r /var/svn"

 

ありました・・・

どうやらインストールのデフォルトリポジトリは/var/svnのようです。

私は/var/www/svnに作ったのでした。

 ここを変えればいいのかな。

 

vi /etc/sysconfig/svnserve

以下のように変更しました。

 

OPTIONS="-r /var/www/svn"

 

 

これで保存し、もう一度起動してみます。

 

 

systemctl start svnserve

できたー!!

 

 

 ・trunk tags branchesの作成

/tmp/svnを一時的に作成し、リポジトリにインポートします。

 

cd /tmp
mkdir svn
cd svn
mkdir trunk tags branches
echo test > trunk/test.txt
svn import file:////var/www/svn/test -m "My First Commit."
追加しています branches
追加しています tags
追加しています trunk
追加しています trunk/test.txt
Committing transaction...
リビジョン 1 をコミットしました。

 

 

 

どうやらうまくいきました。TortoiseSVNでも接続してみます。

 

f:id:ponkotsu_engine:20200312232546p:plain

Trunk Tags Branches

 

 

できてましたー!

 

 

 

以上です。これからCentOS8.1を使ってどんどん8系に慣れていきたいと思います。