rss ログイン
JJ1RLWのXOOPS Cube Siteにようこそ

メインメニュー

ログイン


ユーザー名:


パスワード:





パスワード紛失  |新規登録

オンライン状況

2 人のユーザが現在オンラインです。 (2 人のユーザが xpress ブログ を参照しています。)

登録ユーザ: 0
ゲスト: 2

もっと...

アーカイブ

カテゴリー

アクセスカウンタ

今日 : 6969
昨日 : 5959
総計 : 257748257748257748257748257748257748

カレンダー

2018年8月
« 7月    
 1234
567891011
12131415161718
19202122232425
262728293031  

xpress ブログ »

 
WordPress for XOOPS

Raspberry Pi3(ルーター)初めてのトラブル

Raspberry pi3(ルーター)初めてのトラブルを経験しました。

昨日(2018/08/13)16時過ぎ頃に停電(瞬間停電)があった様で、マイロSDカードのルートファイルシステムに矛盾が発生し、起動時にエマージェンシー(メンテナンス)モードになって入力待ち状態で止まって、普通に起動してくれない。

Give root password for maintenance
(or type Control-D to continue):
の様なメッセージで入力待ち状態で止まる。

ディスプレイ、マウス、キーボードを繋ぎ、入力待ち状態でrootのパスワードを入力してログインし、

umount /dev/mmcblk0p2
fsck -y /dev/mmcblk0p2
reboot

正常に起動していることを確認してトラブルシューティングは終わりです。

参考サイト
RaspbianでWelcome to emergency mode!
Linuxを強制終了した場合に、起動不良→回復方法

PHP7対応のまとめ

以前に投稿したxpress ブログのPHP7対応の記事を資料室にまとめて見ました。

※リンクをクリックするとブラウザの新しいウインドウが開きます。
xpress ブログ記事へのリンク、
Analyzer for xcの改造
Analyzer for XC Ver 0.51のPHP7対応
Analyzer for XC Ver 0.51のPHP7対応その2

logcounterx Ver 2.74のUTF-8、MySQL、PHP7対応

myx_backup Ver 1.10のPHP7対応

PHP7とXOOPS Cube環境下でのPHPエラーメッセージ

zen-cart Ver1.5.1-jpのPHP7対応での変更点

資料室の記事へのリンク
Analyzer for XC Ver 0.51のPHP7対応などまとめ

logcounterx Ver 2.74のUTF-8、MySQL、PHP7対応などまとめ

myx_backup Ver 1.10のPHP7対応まとめ

PHP7とXOOPS Cube環境下でのPHPエラーメッセージ

zen-cart Ver1.5.1-jpのPHP7対応での変更点

MySQL 8.0のクラッシュ、その後2

MySQL 8.0のクラッシュ、その後、MySQL 8.0.11から8.0.12にアップグレード後、mysql_upgradeコマンドを実行し、正常に終了しました。
mysqldを再起動してテストしても、やはりクラッシュします。

MyISAMとInnoDBの両方のデータベースエンジンで、クラッシュが発生します。
作成したばかりのデータベースで、「SHOW TABLE STATUS FROM hogehoge」のクエリーでクラッシュが発生します。
やはり、以前と同じで、
[ERROR] [MY-000000] [InnoDB] InnoDB: Assertion failure: row0sel.cc:4603
とのエラーログが出力されて、mysqldが落ちてしまいます。

ほかにもクエリーの応答時間が、MySQL 5.7と較べて「激遅」なのも問題です。

MySQL 8.0のバージョンアップで改善することを期待していましたが、改善していません。

DDNSの情報が他のDNSに反映されない

2018/07/13~16にかけて、DDNSの情報が他のDNSに反映されない状況となり、当サイトにアクセス出来ませんでした。

当サイトが利用しているDDNS(ieServer.netのDDNSサービス)は、結構堅牢なサーバ構成をとっているので、トラブルはめったに無いのですが、一応、DDNSの管理者に連絡し対応して頂きました。

DDNSを無料で提供してくれている管理者の方に感謝します。

参考サイト
無料ダイナミックDNS(DDNS)サービス

MySQL 8.0のクラッシュ、その後

MySQL 8.0のクラッシュ、その後、MySQL 8.0インストール初期のmy.ini(my.cnf)を使って、mysqldを起動してテストしても、やはりクラッシュします。

MyISAMとInnoDBの両方のデータベースエンジンで、クラッシュが発生します。
作成したばかりのデータベースで、「SHOW TABLE STATUS FROM hogehoge」のコマンドでクラッシュが発生します。
MyISAMのデータベースを選択した場合でも、
[ERROR] [MY-012856] [InnoDB] InnoDB: MySQL is trying to perform a consistent read but the read view is not assigned!
[ERROR] [MY-000000] [InnoDB] InnoDB: Assertion failure: row0sel.cc:4603
とのログが出力されて、mysqldが落ちてしまいます。

MySQLのバグリポートに「Bug #90694 Server crashes」という同様の現象が報告されているが、解決策は不明です。

MySQL 8.0ではシステム関連テーブルがInnoDBになっているので、MySQLのシステムに近いレベルで、エラーが発生している様に思えます。
MySQL 8.0の次のバージョンで改善することを期待したいと思います。

※2018/07/04バグリポートについて追記

xCCKモジュールのデータをXOOPSの検索から利用できる様にする

xCCKモジュールのデータをXOOPSの検索から利用できる様にする為に、3個のPHPファイルを弄りまた。

1. html/modules/xcck/search.php
を新しく設置
<?php
/**
* @file
* @package xcck
* @version $Id$
**/

if(!defined(‘XOOPS_ROOT_PATH’))
{
exit;
}

$myDirName = basename(dirname(__FILE__));
require XOOPS_TRUST_PATH . ‘/modules/xcck/search.php’;

?>

2. xoops_trust_path/modules/xcck/xoops_version.php

// Search
//$modversion[‘hasSearch’] = 1;
$modversion[‘hasSearch’] = 0;

// Search
$modversion[‘hasSearch’] = 1;
//$modversion[‘hasSearch’] = 0;
に変更

3. xcckモジュールのアップデートを実行することで、XOOPSの検索対象モジュールとして認識される。

4.xwordsモジュールの html/modules/xwords/include/search.inc.php 参考にして、
xoops_trust_path/modules/xcck/search.php
を変更

<?php

eval( ‘

function xcck_search( $queryarray , $andor , $limit , $offset , $userid )
{
return xcck_search_base( $queryarray , $andor , $limit , $offset , $userid ) ;
}

‘ ) ;

if( ! function_exists( ‘xcck_search_base’ ) ) {

function xcck_search_base( $queryarray, $andor, $limit, $offset, $userid )
{

if(!defined(‘XOOPS_ROOT_PATH’))
{
exit;
}

if(!defined(‘XCCK_TRUST_PATH’))
{
define(‘XCCK_TRUST_PATH’,XOOPS_TRUST_PATH . ‘/modules/xcck’);
}

$ret = array();
// XOOPS Search module

$sql = “SELECT page_id, category_id, title, content, uid, posttime FROM ” . $xoopsDB -> prefix( “xcck_page” ) . ” WHERE posttime < '".time()."' AND posttime > ‘0’ “;

if ( $userid != 0 && strlen($userid) < 9) { $sql .= " AND uid = '".$userid."' "; } // because count() returns 1 even if a supplied variable // is not an array, we must check if $querryarray is really an array $count = count( $queryarray ); if ( $count > 0 && is_array( $queryarray ) )
{
$sql .= “AND (“;
for ( $i = 0; $i < $count; $i++ ) { $binary = (preg_match('/^[[:alnum:]]+$/',$queryarray[$i])) ? "":"BINARY"; $sql .= ($i > 0) ? ” $andor ” : “”;
$sql .= (strlen($userid) > 8) ? “(title LIKE $binary ‘%$queryarray[$i]%’)” : “(content LIKE $binary ‘%$queryarray[$i]%’ )” ;
}
$sql .= ‘) ‘;
}
$sql .= ‘ORDER BY page_id ASC’;
$result = $xoopsDB -> query( $sql, $limit, $offset );
$ret = array() ;
$context = ” ;
$i = 0;
while ( $myrow = $xoopsDB -> fetchArray( $result ) )
{
// $ret[$i][‘image’] = ‘images/xw.gif’;
$ret[$i][‘link’] = ‘index.php?action=PageView&page_id=’.$myrow[‘page_id’];
$ret[$i][‘title’] = $myrow[‘title’];
$ret[$i][‘time’] = $myrow[‘posttime’];
$ret[$i][‘uid’] = $myrow[‘uid’];
$ret[$i][‘context’] = mb_substr( $myrow[‘content’], 0, 100 );

$i++;
}
return $ret;
}
}

?>

なお、xCCKモジュールのほかに以下のモジュールをインストールしています。
1). lecat(カテゴリ(アクセス管理用))
2). letag(タグ管理)

参考サイト
XOOPS Cube Developer Site – Menu/xcck xCCK – wiki

MySQLの運用を8.0から5.7に戻した

ここ一ヶ月程MySQL8.0で運用していましたが、問題がありMySQL5.7に戻しました。

問題点
1.MyISAMテーブルのクラッシュにより、MySQLのサービス(mysqld自体)が落ちる。
これが最大の問題で、長年MySQLを運用しているが初めての経験です。
MySQLの起動パラメーターの問題なのかは判りません。

2.パフォーマンス(レスポンス)の低下。
レスポンス比較(秒)の表
レスポンス比較(秒)の表
上の表は、XOOPS Cubeに設置してある「db response checker」のデータを簡単に集計した結果です。
MySQL8.0での運用だと明らかにWebの応答が遅く感じます。

あくまでも、テストした非力なサーバ環境での話です。
テスト環境
O S:Windows Server 2008R2 x64
メモリ:2GB
HDD:1TB(普通のSATA HDD)
Webサーバ:IIS7.5
PHP:7.0
Webアプリ:XOOPS Cube
※メモリが少なすぎますね。

IPTables log analyzerをulogd2.xで使う

IPTables log analyzerをulogd2.xで使える様に、いつもの「ちょとだけ改造」をして見ました。

おもな変更点は、
1.PHP7.0への対応で、mysql拡張からmysqli拡張へ、廃止された関数の書き換え
2.ulogd2.xでは、IPアドレスの格納形式がlong型からIPv6対応のバイナリ型となったことへの対応

DNSのキャッシュテーブルを参照できない時の画面
DNSのキャッシュテーブルを参照できない時の画面

DNSのキャッシュテーブルを参照できている時の画面
DNSのキャッシュテーブルを参照できている時の画面

サブネットを指定してフィルタリングをした時の画面
サブネットを指定してフィルタリングをした時の画面

参考サイト
[Linux]ファイルの圧縮、解凍方法
Debian 9(Stretch)にPostgreSQL 9.6をapt-getでインストールし、外部アクセスを許可する
postgreSQLにコマンドラインからSQLファイルを実行
18.2.5. vsftpd 設定オプション
[ulogd] seems something wrong with mysql-ulogd2.sql
【PHP】関数 mysql_… を mysqli_… へ書き換える。
MySQL IPアドレスをlong型で記録する方法
ip2long
long2ip
Net_IPv4 – PEARマニュアル
■[MySQL][メモ]MySQLでIPアドレスを記録する方法
MySQLの1つのカラムでIPv4、IPv6両方のIPアドレスを格納する方法を考える
mysqlからmysqliへ移行変換
PHPのip2longとMySQLのINET_ATON
iptablesログ解析(IPTables log analyzer) (最終更新日:2010/02/16)
Raspberry Piでcrondは動いているのにcron.hourlyが動かない?
Debian 6.0 (squeeze) での、cronのログ有効化
run-partsが認識するファイル名ではまった
/etc/crontabと/etc/cron.d設定ファイルの書き方
IPアドレスが指定したIPアドレス範囲の中にあるかチェック
DBでバイナリ型にSELECT文実行
IPv6アドレスを完全表記(省略されていない表記)に変換するPHPコード
PHPでIPアドレス+ネットマスクに適合するかチェック

Raspberry Pi 3 のルーターにcactiを導入

Raspberry Pi 3 のルーターに、ようやくcactiを導入出来ました。

今回、導入する際に引っかかったのは、以下の3箇所です。
1.cacti用DBを作成する際にインデックス長制限
2.SNMPへのアクセス制限
3.直接は関係無いがMIBを人に判り易く表示するプログラムでエラーが発生

Raspberry Pi 3 にcactiを導入した画面
Raspberry Pi 3 にcactiを導入した画面

参考サイト
Ubuntu 14.04, Ubuntu 16.04上のsnmpwalk,snmptranslateでエラーが出力される
SNMPの設定
Ubuntu Server 16.04.2 LTSでSNMPを使えるようにする話
[鯖缶] SNMP(3) NET-SNMP のインストール

ulogd2.xとWebfwlogを設定して見る

ulogd2.0.5とWebfwlog1.1.0を設定して見ました。

ulogdのバージョンが1.x系から2.x系になったので、最初はエラーでulogd2からMySQLのテーブルにデータが挿入出来ず、Webの情報を元に色々と試行錯誤を繰り返し、ようやく設定するととが出来ました。

ポイントは、ulogd2が起動時にチェックするMySQMのlogテーブルに「ulog」(※実態はビュー)を指定するか、取得したいデータのフィールド名(カラム名)を持つダミーのlogテーブルを用意する事でした。

私がハマッタのは、logデータを登録するテーブルだからと思い込み「ulog2」テーブルをulogd2がチェックするテーブルに指定しまって、ulogd2が起動にエラーを吐いてしまいました。(当然、MySQLにデータは登録されません)

ulogd2では、logテーブルが複数ありデータの挿入は関数(FUNCTION)で定義しており、処理を分けて複数のテーブルにデータを挿入する形を取っています。
この為、ulogd2の起動時チェック用logテーブルを用意してやる場合は、ulogd2のMySQL用データベースにある「INSERT_PACKET_FULL」と言う名前の関数(FUNCTION)のCREATEに書かれているカラムを、そのままダミーのlogテーブルを用意する。(実際にテストして見ました)

テスト環境
マシン:Raspberry Pi 3 Model B
OS:Raspbian(Linux raspberrypi 4.14.34-v7+ #1110 SMP Mon Apr 16 15:18:51 BST 2018 armv7l)
MySQL:10.1.23-MariaDB-9+deb9u1 Raspbian 9.0
PHP:PHP 7.1
Webサーバ:Apache/2.4.25 (Raspbian)

手順
1.ulogd2とulogd2-mysqlをインストール
sudo apt install ulogd2 ulogd2-mysql

2.ulogd2用MySQLのデータベースとulogd2用のユーザを用意
以下にsqlファイルがあります。
/usr/share/doc/ulogd2/mysql-ulogd2.sql.gz

3.ulogd2のconfファイルの編集
sudo nano /etc/ulogd.conf
# loglevel: debug(1), info(3), notice(5), error(7) or fatal(8) (default 5)
loglevel=5

loglevel=1
にしてulogd2の起動時の状況を確認出来る様にする(※正常動作する様になったら5に戻す)

#plugin=”/usr/lib/arm-linux-gnueabihf/ulogd/ulogd_output_MYSQL.so”
の先頭にある#を削除し
plugin=”/usr/lib/arm-linux-gnueabihf/ulogd/ulogd_output_MYSQL.so”
とする

# this is a stack for logging packet to MySQL
#stack=log2:NFLOG,base1:BASE,ifi1:IFINDEX,ip2bin1:IP2BIN,mac2str1:HWHDR,mysql1:MYSQL
stack=log2:NFLOGの先頭にある#を削除し
stack=log2:NFLOG,base1:BASE,ifi1:IFINDEX,ip2bin1:IP2BIN,mac2str1:HWHDR,mysql1:MYSQL
とする

[mysql1]
db=”ulogd2用DB名”
host=”localhost”
user=”DBのユーザ名”
table=”ulog”
pass=”DBのユーザのパスワード”
procedure=”INSERT_PACKET_FULL”

4.iptablesの設定
ulogd1.xの時に使っていたスクリプトを修正する
ULOG –nlog-group 1 –nlog-prefix “ほげほげ”

NFLOG –nflog-group 1 –nflog-prefix “ほげほげ”
に変更

iptablesの設定後の状態を保存し、起動時用復元ファイルに保存する
sudo sh -c “iptables-save > /etc/iptables.ipv4.nat”

ネットワーク(インターフェイス)を有効にする前にiptableの設定を復元する処理を追加
sudo nano /etc/network/interfaces
# インターフェイスを有効にする前にiptableの設定を復元する処理
pre-up iptables-restore < /etc/iptables.ipv4.nat

5.Webfwlogのセットアップ
ダウンロードした「webfwlog-1.1.0.tar.bz2」を解凍し、
/usr/local/webfwlog-1.1.0となる様に配置する
ディレクトリを移動してスーパーユーザになる
cd /usr/local/webfwlog-1.1.0
su
./configure
make
make install

※もし、makeが正常に終了しない場合は、automakeをインストール
apt install automake

ここまでで、/usr/local/share/webfwlogとしてWebページが出来ます

※予め、MySQLにwebfwlog用のDBとそのユーザを登録(ulod2用のユーザが操作出来る様にしました)
次にMySQL用セットアップファイルのあるディレクトに移動
cd /usr/local/webfwlog-1.1.0/mysql
./setup

スクリプトの途中の選択では、
snortのlog使うか聞かれるが、「no」を選択する
ulogd2のDBの参照するテーブルは「ulog」を指定する
local hostnameを使うか聞かれる部分では、「no」を選択する

スクリプトの処理メニューで、
v で作成したmysqlスクリプトを見る ※ここは選ばなくても良いと思います
s で作成したmysqlスクリプトをファイルとして保存する ※念のため保存した方が良いと思います
r で作成したmysqlスクリプトを実行し、webfwlogの環境をセットアップを行う ※ここは必ず行う
q でメニューを終了する

su – pi # piユーザに戻ります

GeoIP関連を使える様にする
sudo apt install libapache2-mod-geoip
sudo apt install php7.0-bcmath

フリー版GeoIPデータベースファイルを取得する
GeoLite2 Free Downloadable Databases ≪ MaxMind Developer Site
取得したデータデータベースファイルを以下のディレクトリに配置して解凍する
cd /usr/share/GeoIP
sudo gunzip GeoLite2-City.mmdb.gz
sudo gunzip GeoLite2-Country.mmdb.gz

ついでに、コマンドラインでもGeoIPを使える様にする
sudo apt install geoip-database
sudo apt install geoip-bin

webfwlogの環境設定の編集と確認
sudo nano /usr/local/etc/webfwlog.conf

日付フォーマットを変更する部分
## Default: “m/d/Y h:i:sA”
dformat = “Y/m/d H:i:s”

タイムゾーンを変更する部分
# Default: “UTC”
timezone = “Asia/Tokyo”

GeoIPを使う設定に変更する部分
お好みに応じて、GeoLite2-Country.mmdbかGeoLite2-City.mmdbを指定
# Default: off
geoip_php_lookup = on
# The location for the geoip version 2 file to use as an absolute path
## Default: none
geoip2_file = /usr/share/GeoIP/GeoLite2-City.mmdb

後は、apache2にwebfwlogのページを追加する
sudo service apache2 restart

設定したwebfwlogのページをブラウザで確認する

上手く動かない場合は、syslog、apache2、mysqlのログなど確認し、原因を探って下さい。

6.おまけで、ulogd2がmysqlより早く起動してしまうとエラーとなるので、サービスの起動順を指定
systemdのserviceファイルを探す
find /etc/systemd/system -name ulogd2.service

ulogd2(ulod2..service)は、mysql(mariadb.service)の後にする様に指定
sudo nano /etc/systemd/system/multi-user.target.wants/ulogd2.service

[Unit]
Description=Netfilter Userspace Logging Daemon
Documentation=man:ulogd(8)
After=mariadb.service #ここの部分追加する

[Service]

以上、記憶たよりに投稿しましたので、間違っていたらご免なさい。m(_ _)m

構築したWebfwlogのページの画像
構築したWebfwlogのページの画像

参考サイト
ulogd-2.x
WebFwlog
Iptables logging using NFLOG and ulogd2 on Debian Jessie
[ulogd] seems something wrong with mysql-ulogd2.sql
[arch-general] ulogd fails to start – cannot find key `oob.in’
Linuxでのサービスやデーモンの起動順
9.2. システムサービスの管理
iptablesを使ってファイアーウォール(Debian)
iptablesのLOGをNFLOGにしてみる
ulogd2.xのDBの使い方
iptables+ulogd(2.x系)+WebFwlogでサーバアクセス監視(その1-ulogd-2.xのビルド)
動かないulogdとiptablelog analyzer – from where i live…
GeoLite2 Free Downloadable Databases ≪ MaxMind Developer Site
GeoIP2を使ってIPアドレスの情報を取得 (PHP編)
ApacheでGeoIPを利用する方法
知らなきゃ損するiptablesのTips
iptablesでできるDoS/DDoS対策
Service Name and Transport Protocol Port Number Registry
プロトコル番号 ( IP Protocol Number )
コンソールからグローバルIPアドレスがどこの国のものなのか確認する
SSHの接続元IP制限(国単位)をhosts.allow, hosts.denyで
interfaces 覚書


 

Powered by XOOPS Cube 2.2 © 2001-2016 XOOPS Cube Project Distributed by XOOPS Cube 2.2 Distribution Team.