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

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

HDDからSSDへ移行したメモ

家のPCの1台について、この年末年始を使ってHDD→SSDへ移行したのでメモ。

ディスクを移行した目的は、
 ・CrystalDiskInfo でHDDのステータスに注意が出てる
 ・容量が不足しそうな気配
といったところ。

ステータスは以下の状態。

f:id:savakan:20170122142130p:plain


単純にHDD→HDDへコピーして付け替えるだけでも良かったが、SSDも手頃になってきた事もあり、まだ3年くらいはしっかり使うのでSSDへ。

が、残念ながらマザーボードが古めで、SATA2にしか対応していないため、SSDを全力で使えないかもしれない事を覚悟の上で。

SSD/HDDの調達

CrucialやCFDを狙ってたけど、少しケチってTranscend(TS128GSSD370S)。

マザーがSATA2なので、高性能は諦めてコストパフォーマンスを優先。

SSDは、サンワダイレクト楽天市場店にて、5,680円(クーポン利用)で購入。

HDDは、WD(WD20EZRZ)をPC工房にて、6,980円で購入。

いずれも、2016年末に購入した価格。

f:id:savakan:20170103141514j:plain

環境

移行前後の環境は以下の通り。

OS:Windows 7 SP1

移行前の構成:1台目:C/Eドライブ、2台目:Fドライブ
HDD:HITACH / HDS721010CLA332(1TB, SATA300, 7200rpm)
   WD / WD5000AAKS(500GB, SATA300, 7200rpm)

移行後の構成:SSDにCドライブ
SSDTranscend / TS128GSSD370S(128GB, SATA600, MLC
HDD:WD / WD20EZRZ(2TB, SATA600, 5400rpm)

事前準備

PCのSATAに新しいHDDを接続して、Windows上で新しいHDDをフォーマット。

EドライブとFドライブのデータを、新しいHDDへコピー。

この時、いらないデータは捨てる。

Cドライブの容量が150GBあったので、128GB(実効容量:119GB)に収まるよう、ディスクの管理にて100GBへ縮小。

縮小できない場合は、HDD領域の後ろの方にファイルが存在するので、「Auslogics Disk Defrag Free」などを使って原因となっているファイルを探す。

自分の場合、「システムの保護」のファイルがデフラグしても移動されず存在していたようなので、復元に利用される最大使用量を減らしたところ、目的の縮小領域を確保できた。

システムドライブの移行

作業の邪魔になるので、データをコピーした新しいHDDをいったん取り外し。

SSDSATAへ取り付けて、PCを起動。

Windowsのディスクの管理から、SSDが認識した事を確認して、MBRで初期化(ファイルシステムのフォーマットはしない)。

TranscendのWebサイトから、SSDの管理ツール「SSD Scope」を入手してインストール。

SSD Scope」を起動し、SSDファームウェアの更新がないかチェック(更新は無かった)。

「EaseUS Todo Backup Home 10.0」をインストールし、メニューから「システムクローン」を選択。

※システムクローンは、Free版でもHome評価版でも可能。

ソースのドライブとして、「*.\ C:\」となっている事を確認。

ターゲットに新しく繋いだSSDを選択する。

SSDに最適化」と「セクタバイセクタクローン」にチェックを入れる。

クローンは1時間かからないぐらいで終了。

f:id:savakan:20170122143318p:plain


SSDで起動

PCの電源を落として、SATAに繋いであるシステムドライブをHDD→SSDへ交換。

SSDだけ繋いだ状態(データ用HDDは繋がない)で起動させる。

Windows7が起動し、ドライバがインストールされ、再起動を要求されるので、再起動する。

再起動後、アプリケーションの起動などを行い、簡単に動作を確認する。

ディスクの管理にて、SSDの未使用領域を利用するよう、Cドライブの領域を拡張する。

PCの電源を落とし、データ用の新しいHDDを接続して起動する。

HDD/SSD以外の構成は同じのため、Windowsの再アクティベーションは発生しない。


AHCIモードへ変更

IDEモードで使っていたので、Windows7にてレジストリを変更。

「HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msahci」にて、「Start」キーの値を0へ変更。

OSを再起動して、BIOSにてIDE→AHCIへ変更。

Windwos7起動後に、ドライバが自動的にインストールされ、再起動を促されるので、再び再起動して完了。


ベンチマーク

ベンチマーク結果は、300MB/s 手前。

IDEモードよりAHCIモードの方が、高パフォーマンス。

IDEモード
f:id:savakan:20170122143709p:plain


・AHCIモード
f:id:savakan:20170122143723p:plain


SSD的にはもっと性能が出る?かもしれないが、今回使っているマザーボードは古いもので、SATA3のポートが無く、SATA2のポートしかない。

たぶん、これがボトルネック。SATA3ポートなら、もう少し良い結果になるかも。


OSの起動も早くなり、以前の環境より良くなったので、とりあえず目的は達成。