pecl の oci8 を更新する

pecl/oci8の新しいのが出ていたので、更新した話。

バージョンとしては、oci8/2.0.11 → 2.0.12 への更新。

リリース日は、2016-08-18 だったので、1年も気づいていなかった(´・ω・`)

PECL oci8
https://pecl.php.net/package/oci8

Changelog for oci8
https://pecl.php.net/package-changelog.php?package=oci8


【環境】
CentOS 6.9/7.4(PHPは標準リポジトリ


現在のバージョン

# pecl list
Installed packages, channel pecl.php.net:
=========================================
Package Version  State
oci8    2.0.11   stable


バージョンを指定して更新(バージョン2.1以降は、PHP7が必要)

# pecl upgrade oci8-2.0.12
downloading oci8-2.0.12.tgz ...
Starting to download oci8-2.0.12.tgz (191,954 bytes)
......................................done: 191,954 bytes
11 source files, building
running: phpize
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
・
・省略
・
Build process completed successfully
Installing '/usr/lib64/php/modules/oci8.so'
upgrade ok: channel://pecl.php.net/oci8-2.0.12
configuration option "php_ini" is not set to php.ini location
You should add "extension=oci8.so" to php.ini
Segmentation fault

CentOS 7の方だけ、何故か最後に「Segmentation fault」が出た。
気持ち悪いので、一度アンインストールして再インストールすることに。

# pecl uninstall oci8
Unable to remove "extension=oci8.so" from php.ini
uninstall ok: channel://pecl.php.net/oci8-2.0.12


バージョンを指定して再インストール・・・したらエラーが出なかったので良し。

# pecl install oci8-2.0.12


バージョンの確認

# pecl list
Installed packages, channel pecl.php.net:
=========================================
Package Version  State
oci8    2.0.12   stable


モジュールを読み直すために、httpdを再起動

CentOS 7
# systemctl restart httpd.service

CentOS 6
# /etc/init.d/httpd restart

cifsマウントのオプションが間違っていた事に気が付いた

CentOS 7.3→7.4に更新した後から、cifsで接続しているNASへ繋がらなくなった。


autofs で自動マントの設定をしているものの、接続しようとすると、次のようなメッセージが出た。

# ls /mnt/nas

Broadcast message from root@xxxxxxx (Fri 2017-09-15 05:33:14 JST):

Password entry required for 'Password for root@//nas/path:' (PID 8688).
Please enter password with the systemd-tty-ask-password-agent tool!

/var/log/messages には、オプションが違う旨のログが出ていた。
(ここで、/path/credential_file はNASの認証情報を記載したファイル)

Sep 15 05:33:14 localhost kernel: CIFS: Unknown mount option "credential=/path/credential_file"


autofs や mount の man でオプションを確認しても、「credential」が無い。

これは cifs-utils のものだと思い出して、そのマニュアルを参照、
https://linux.die.net/man/8/mount.cifs

すると、「credential」が無くて、「credentials」がある。

今まで正常に動作していたのに?と思ったが、とりあえず、

autofs の設定ファイルにて、以下のようにマウントのオプションを修正したら接続できた。

 credential=/path/credential_file
  ↓
 credentials=/path/credential_file


前に使っていた「credential」というオプションで動作していた方が異常だったと思われる。
なお、CentOS 6.x では、このオプションで動作していた。(2017/9/15時点)

どういう訳か調べる事にした。

まずは、RPMソースを入手

# yumdownloader --enablerepo=base-source --source cifs-utils

展開してファイルを確認。

$ rpm -ivh cifs-utils-6.2-10.el7.src.rpm
$ cd ~/rpmbuild/SOURCES
$ ls -1
0001-asn1-fix-use-after-free-in-asn1_write.patch
0001-autoconf-Use-DEFS-when-building-idmapwb.so.patch
0001-autoconf-fix-link-of-libwbclient.patch
0001-cifs-use-krb5_kt_default-to-determine-default-keytab.patch
0001-get-setcifsacl-fix-bad-bit-shifts.patch
0002-getcifsacl-remove-some-dead-code.patch
0002-mount.cifs-on-2nd-try-mount.cifs-must-also-uppercase.patch
0003-asn1-remove-some-usused-functions.patch
0003-mtab.c-include-paths.h-for-_PATH_MOUNTED.patch
0004-data_blob-clean-out-unused-functions.patch
0004-manpage-clarify-use-of-backupuid-and-backupgid-in-mo.patch
0005-mount.cifs-fix-bad-free-of-string-returned-by-dirnam.patch
0005-mount.cifs-ignore-x-mount-options.patch
0007-aclocal-fix-typo-in-idmap.m4.patch
0008-mount.cifs-Removed-extra-comma-in-front-of-domain.patch
0009-mount.cifs-Accept-empty-domains-on-the-command-line.patch
0010-mount.cifs-Fixed-command-line-parsing-and-aligned-wi.patch
0011-mount.cifs-Remove-unneeded-stdbool-header-include.patch
0012-manpage-document-mfsymlinks-in-the-mount.cifs-man-pa.patch
cifs-utils-6.2.tar.bz2


grepで関係しそうなものを検索

$ grep -rl 'cred' ./
./0001-autoconf-Use-DEFS-when-building-idmapwb.so.patch
./0010-mount.cifs-Fixed-command-line-parsing-and-aligned-wi.patch

バージョン6.2.9の方では、パッチが0005-* までしか含まれていないので、「0010-mount~」が該当する。

該当行を表示

$ grep 'cred' ./0010-mount.cifs-Fixed-command-line-parsing-and-aligned-wi.patch
-       if (strncmp(token, "cred", 4) == 0)
+       if (strcmp(token, "cred") == 0 || /* undocumented */
+               strcmp(token, "credentials") == 0)


前のバージョンでは、

-       if (strncmp(token, "cred", 4) == 0)

のように、先頭4文字だけチェックしていた模様。

今回のバージョンでは、

+       if (strcmp(token, "cred") == 0 || /* undocumented */
+               strcmp(token, "credentials") == 0)

のように、"cred" または "credentials" の完全一致をチェックするようになっている。
但し、"cred"はドキュメント化されていない旨がコメントに書いてある。


従って、先頭4文字が一致していた「credential」という存在しないオプション名でも、動作していた事になる。

なお、これは autofs に限らず、mountコマンドで cifs をマウントする時も同じ。

まだ修正されていないCentOS 6.x で、以下を試してみた。

成功:
# mount -t cifs -o cred123=/path/credential_file //host/path /mnt

失敗:
# mount -t cifs -o cre=/path/credential_file //host/path /mnt

といったように、先頭4文字だけで判定されていた。
(そのうち修正されるかも)

mail コマンドで送信したメールが添付になる

【環境】
$ cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

$ mail -V
12.5 7/5/10


やりたかったのは、diff の結果で差分があった時だけメールを送る事。

実査にmailコマンドでdiffの結果をメールしたら、受信側で添付ファイルになってしまった。

テキストメールのつもりが、メールヘッダを見ると、次のようになっていた。

Content-Type: application/octet-stream

diffの結果は何もないはずなのに、見えない何かがある?

となると、怪しいのは制御コードが思い付く。

調べてみると、diff対象のテキストファイルの行末にCRが入っている事がある模様で、diffの結果に改行コード(CR:^M)が含まれてしまうようだった。

diff対象のファイルを出力する側は修正できないため、こちら側で対処するしかない・・・

という訳で、次のようにしてdiffの結果から制御コード(^M)を削除する。

sed -e 's/^M//g' > output.txt

ここで、^M は、ハットと大文字のMではなく、vi で

 Ctrl + v
 Ctrl + m

を入力する。

動作確認には、cat コマンドに -v オプションを付けて制御コードを表示して確認した。

プリンタが壊れたので新しいのを買った

以前、長年連れ添ってきたプリンタ(Canon MP500)の調子が悪くなった記事を書いた。

shobon.hatenablog.com

掃除したら復活したが、その後、何度か使っている間に、ついにダメになった。

そこで、新しいプリンタを買うべく、製品を調査していた。

まず、要件は以下の通り。

  • 主に印刷するのはテキスト(デジカメで撮影したものはショップで印刷する)
  • スキャナがあること
  • A4印刷ができること(A3は不要)
  • 両面が自動で印刷できること(手作業で紙を入れ替えるのはダメ)
  • カラーで独立したインクであること(カラーが無くなっても、白黒印刷できると良い)
  • 設置場所の都合上、既存のMP500より小さいこと
  • 給紙は前面・背面の両方が理想。大きさ(高さ)よっては、背面だけでも可。
  • ネットワーク接続可能なこと(有線・無線どちらでも可)

Canonのプリンタを利用していたので、Canonを中心に探していた訳だけど、途中でブラザーの製品が目にとまり、比較してみたところ良い感じだった。

Canon MP500 Canon MG5730 Canon TS5030 Canon TS6030 brother DCP-J567N
W[mm] 448 455 372 372 400
D[mm] 426 369 315 315 341
H[mm] 205 148 126 139 151
重さ[kg] 9.6 6.3 5.5 6.2 7.1
両面 ×
給紙 F/B F/B F F/B F/B

MG5730は安価なものの、他製品に比べるとサイズが大きい。
TS5030は自動両面が無い。

TS6030とDCP-J567Nを比較すると、TS6030の方がサイズ的に良かったが、要件を満たすDCP-J567Nと価格を比べると、2倍だった。

TS6030:15,000円くらい
DCP-J567N:7,500円くらい

※2017/6中旬頃

brother インクジェットプリンター複合機 PRIVIO DCP-J567N

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

A4薄型インクジェット複合機 DCP-J567N
価格:7285円(税込、送料無料) (2017/8/14時点)



という事で、DCP-J567N を購入した。

セットアップは容易だし、サイズ的にも以前より小さくなったので不満は無い。

インクの交換も、MP500のように上部パネルを開ける必要はなく、手前の蓋を開けるだけなので、高さに制限のある場所でも使える。

10年前のプリンタと比べるのも変だが、起動時間や印刷速度、印刷音なども良くなっているので、良い買い物だった。

LinkStation / TeraStation の Samba バージョンの確認方法

もし LinkStation / TeraStationSSH/telnet でログインできる環境なら、それで確認。

そうでないならなら、以下の方法で確認する。


1.機器のWeb管理画面へログインして、機器の型番とファームウェアのバージョンを調べる。

2.バッファローソースコードページへアクセスする。

Source Code Download - BUFFALO INC.


上記のページは、以下に書いてある通り、GPL/LGPLの定めに従い公開されている。
ダウンロードサービス ドライバ ダウンロード | BUFFALO バッファロー


3.「Network Storage」の隣にある「LinkStation」「TeraStation」のリンクへ行き、型番/ファームウェアバージョンのリンクへ行く。

4.「samba」のキーワードで、パッケージのバージョンを確認する。


Samba の CVE-2017-7494 への対応で、各社から修正バージョンがリリースされてるけど、TeraStation のはリリースされない?

のか、情報を探せない(´・ω・`)

QNAP
Security advisory for the CVE-2017-7494 vulnerability - QNAP NAS Community Forum

Synology
セキュリティ勧告 - サポート | Synology Inc.

Netgear / ReadyNAS
https://kb.netgear.com/000038779/Security-Advisory-for-CVE-2017-7494-Samba-Remote-Code-Execution


==2017/6/19 追記==

TeraStation なども対応されたファームがリリースされる模様。
http:// http://buffalo.jp/support_s/s20170531.html

Canon MP500でプリンタヘッドの種類が違います、と言われる

MP500って何?と言えば、10年以上前に買った複合機プリンタである。

cweb.canon.jp


で、1ヶ月くらいぶりに電源を入れたら、エラーLEDと一緒に次のように出た。

プリントヘッドの種類が違います
正しいプリントヘッドを装着してください

f:id:savakan:20170513142530j:plain


インク切れとか紙ナシじゃなくて、プリンタヘッドとは・・・。

とりあえず、インクを1つずつ外して電源も入れ直してみたが変わらず。

純正でない互換インクも使っていたが、何年も使っているのでたぶん問題ないかと思っていた。

ちなみに、下記の手順でCanonのメンテナンスモードに入ろうとしたものの、最後の手順で「CANON」だけ表示され、エラーLEDが点滅していた。

【メンテナンスモードへ入る方法】
1. [ストップ/リセット] ボタンを押したまま [電源] ボタンを押す。
2. パワーランプが点灯後、[電源] ボタン押したまま[ストップ/リセット] ボタンを離す。
3. [ストップ/リセット] ボタンを2回押す。
4. [電源] ボタンを離す。
5. 液晶画面に「CANON Idle」と表示されればOK。


どうしたものかと思い、とりあえずヘッド部品を見てみる事に。

インクを外して、左側のバーを上げて、部品を取り出した。

f:id:savakan:20170513142705j:plain


部品の底面を見ると、まぁ汚れている。

f:id:savakan:20170513143038j:plain

ちなみに、これを洗浄する際に使ったのは「お湯」「空の豆腐の容器」だった。

急いでいたので仕方が無い。

背面の基盤を濡らさないように保護して、お湯(少し冷ましたもの)で底面とインクタンク側を洗浄。

しっかり水気を切り、ドライヤーでゆっくり乾かした。

f:id:savakan:20170513151501j:plain

写真撮った後に気が付いたが、変な白いゴミ糸が付いてた(´・ω・`)


で、これをプリンタへ戻してインクをセット。

電源を入れたら、きちんと起動した。

ついでに、メンテナンスモードに入り、

1. [ストップ/リセット] ボタンを1回押す。
2. [電源] ボタンを1回押す。

および、

1. [ストップ/リセット] ボタンを2回押す。
2. [電源] ボタンを1回押す。

でレポートを2種類出した。

「D=」の値が、廃インクタンクの使用量らしい。

家のは、D=030.0 だったので3割。印刷枚数は、1500枚くらいか。


この辺の数値を見ると、まだ使えるかなぁと思うけど、USB接続だけだと家族が使えないし、今のインクを使いきったら買い換えようかなと思った次第。

CPU/コア数を変更した時のsar

環境;
CentOS 6.x


sarで次のようなエラーが出る事がある。

$ sar
システム動作情報ファイルの形式が正しくありません: /var/log/sa/sa12

これは、CPU数が変わった場合にも発生する。例えば、仮想マシンの仮想CPU/コア数を変更した場合。

このままでは使えないので、このファイルを削除する。
なお、/var/log/sa/* は日毎のファイルなので、翌日以降は問題ない。同日の統計を取りたい場合の処置。

# rm /var/log/sa/sa12

サービスを再起動

# /etc/init.d/sysstat restart

これ以降の統計情報は正常に閲覧できるようになる。