So-net無料ブログ作成

last rebootの実行結果が正しくない [Linux]

[ソフトウェアのバージョン]
・systemd 215-17+deb8u4 (on Debian 8)
・systemd-219-19.el7_2.11.x86_64 (on CentOS 7)

1. 発生事象


last reboot の実行結果が正しくない。

・開始時刻のみが 9 時間進んだ時刻となる。

(誤) -- 時間の逆行が発生
reboot   system boot  3.16.0-4-686-pae Wed Jul 27 10:00 - 01:14  (-8:-45)
reboot   system boot  3.10.0-229.20.1. Sat Jul 23 09:12 - 00:18  (-8:-53)

(正) -- 開始時刻を 9 時間遅らせた場合
reboot   system boot  3.16.0-4-686-pae Wed Jul 27 01:00 - 01:14  (00:14)
reboot   system boot  3.10.0-229.20.1. Sat Jul 23 00:12 - 00:18  (00:06)


(補足)
・ハードウェアクロック(RTC) のタイムゾーンに local TZ (JST) を設定している。
・Debian 7/8、CentOS 6/7、Windows 7 でマルチブートを行っている。
 (Debian 7、CentOS 6、Windows 7 の RTC のタイムゾーン: local TZ (JST))
・Debian 7、CentOS 6 では発生しない。
・Debian 7、CentOS 6 の last コマンドを使用しても状況は変わらない。
 (/var/log/wtmp に保存されている値の問題である。)
・上記以外で時間に関する問題は発生していない。


2. 原因と対処方法


(1) systemd のバグとの情報がある。


RTC のタイムゾーンに local TZ を設定した場合に対応できていない。
(完全には対応できていない。)

(補足)
timedatectl コマンドでもその旨のワーニングが出力される。

# timedatectl status
...
 RTC in local TZ: yes
...

Warning:
The system is configured to read the RTC time in the local time zone. This
mode can not be fully supported. It will create various problems with time
zone changes and daylight saving time adjustments. The RTC time is never
updated, it relies on external facilities to maintain it. If at all
possible, use RTC in UTC by calling 'timedatectl set-local-rtc 0'.


(2) RTC のタイムゾーンを UTC に統一することで改善されるとの情報がある。


下記の事象に基づいており、理論的には正しいと思われる。

・systemd は RTC のタイムゾーンを UTC に設定することを前提としている。
・マルチブートするすべての OS で、RTC のタイムゾーンを統一する。


(3) 今回は何もしない。


下記の理由により、今回は何もしない。

・last reboot の実行結果以外での問題は発生していない。
・hwclock --systohc の実行により、RTC を更新できている。
・BIOS 設定画面で表示される時刻を統一したい。


[追記]


Gmailでの条件付きメール転送 [misc]

現在、ある種のメールの受信にのみ、Gmail を使用している。
また、メール転送機能を使用して、別のメールアドレスにコピー転送を行っている。

今回、特定のメールをコピー転送の対象外とする必要があり、その実現方法について調べてみた。
詳細は、以下の通りである。

1. メール転送の種類


(1) すべてのメールを対象とする転送


[メール転送と POP/IMAP] でメール転送の設定を行う。

(補足)
・元のメールの削除の有無を選択できる。
・設定を残したまま、メール転送を無効にできる。


(2) 条件を満たすメールのみを対象とする転送


フィルタを作成し、受信時の動作としてメールの転送を指定する。

(補足)
・受信時の動作で [削除する] を選択しない限り、元のメールは保存される。
・転送を無効にするには、メールの転送の設定を止めるかフィルタを削除する。


2. 実施手順


(1) メール転送の設定の無効化


下記の手順により、すべての受信メールを転送の対象とする設定を無効にする。

・右上の歯車のアイコンをクリックする。
・[設定] を選択する。
・[メール転送と POP/IMAP] をクリックする。
・[転送:] で [転送を無効にする] を選択する。


(2) フィルタの作成


下記のようなフィルタを作成する。
(フィルタの作成方法については、備考を参照。)

(a) 検索条件


転送するメールを検索する条件を設定する。
(単独の条件以外にも、否定、論理積、論理和、等を使用できる。)


(b) 受信時の動作


・指定アドレスへの転送を行う。
・コピー転送とするため、[削除する] を選択しない。


3. 備考


(1) フィルタの作成方法


下記のいずれかの手順実施する。

(a) 検索条件をすべて自分で設定する場合


・検索ボックスにある [検索オプションを表示] をクリックする。
・検索条件を入力する。
・右下の [この検索条件でフィルタを作成] をクリックする


(b) 検索条件に送信者を自動入力する場合


・該当するメールを選択する。
・送信者が表示されている行の右側にある [その他] をクリックする。
・[メールの自動振り分け設定] を選択する。
・以降は、上記 (a) と同じ。


(2) フィルタの編集方法


・右上の歯車のアイコンをクリックする。
・[設定] を選択する。
・[フィルタとブロック中のアドレス] をクリックする。
・フィルタを選択し、右側の [編集] または [削除] をクリックする。

(補足)
この画面の下方にある [新しいフィルタを作成] からもフィルタを作成できる。


(3) 複数のフィルタを組み合わせて使用する場合の注意点


フィルタは、フィルタの一覧の上から順に適用される。

また、フィルタの順番をダイレクトに変更する機能は提供されていない。
よって、適用順序の変更は、下記の手順を繰り返すことで対応する。
(選択したフィルタを一覧の一番下に移動する。)

・フィルタの編集画面において、当該フィルタを選択する。
・[続行]、[フィルタを更新] の順にクリックする。

(補足)
移動されない場合には、検索条件を一時的に変更する。
その後、[続行]、[フィルタを更新] を実施する。
さらに、検索条件を元に戻し、[続行]、[フィルタを更新] を実施する。



Linuxのログイン履歴のバックアップ [Linux]

先日、Linux のログイン履歴の外部メディアへのバックアップに関する相談を受けた。
少々面白い話題であったので、そのやり取りの要点をまとめてみた。

1. ログイン履歴の所在


Linux のログイン履歴は、下記のファイルに保存されている。
また、これらはバイナリ・ファイルであり、特定のコマンドの実行によりテキスト・データでの情報が取得できる。

(1) /var/log/wtmp


・ログインに成功した場合のログイン履歴
・last コマンドを実行することでテキスト・データでの情報が取得できる。
・-f オプションで参照するファイルを指定可能
 (デフォルト値は、/var/log/wtmp である。)


(2) /var/log/btmp


・ログインに失敗した場合のログイン履歴
・lastb コマンドを実行することでテキスト・データでの情報が取得できる。
・-f オプションで参照するファイルを指定可能
 (デフォルト値は、/var/log/btmp である。)


(補足)
バイナリ・ファイルからテキスト・データを抜き出し整形することも可能であるが、手間がかかったり、整形ミスが発生したりするため、あまり勧められない。


2. テキスト・ファイルでのログが求められる場合の対応


本番環境以外はすべて Windows である場合、このような要件が追加されることがある。

(1) 運用スクリプトの追加作成が許される場合


ログのバックアップの際に、テキスト・ファイルへの変換を行う。

(例)
# last -f <wtmp-file> | gzip -c > wtmp-yyyy-mm-dd.txt.gz
# lastb -f <btmp-file> | gzip -c > btmp-yyyy-mm-dd.txt.gz
# (back up wtmp-*.gz and btmp-*.gz to external media)


(2) 運用スクリプトの追加作成が許されない場合


(a) RedHat 系の場合


/var/log/secure をバックアップする。

・/var/log/secure は、テキスト・ファイルである。
・システムログの authpriv.* が出力される。


(b) Debian 系の場合


/var/log/auth.log をバックアップする。

・/var/log/auth.log は、テキスト・ファイルである。
・システムログの auth,authpriv.* が出力される。


3. 備考


(1) 本番環境とは別に Linux 環境を用意することを勧める。


この提案が受け入れられるなら、バイナリ・ファイルでのバックアップが可能となる。

(補足)
・スキルされあれば、別途費用をかけず構築することが可能がある。
・今回の要件だけなら、minimal 環境で十分である。


(2) バイナリ・ファイルをバックアップする運用をしばらく実施することを勧める。


本番サーバーを含め、どこかのサーバーにバイナリ・ファイルをバックアップする運用をしばらく実施することを勧める。
本当に不要か(テキスト形式でないといけないのか)を見極めるのは、それからでも遅くないと思われる。



fsckの実施条件のカスタマイズ [Linux]

fsck について、実施条件のカスタマイズの必要があり、その仕様をまとめてみた。
詳細は、以下の通りである。

1. 自動実行

1-1. ブート時の fsck の自動実行


/etc/fstab の第 6 項目の値を 0 以外にする。

・通常は、root ファイルシステムには 1、それ以外には 2 を設定する。
・設定値が 0 の場合には、fsck は自動実行されない。

(補足)
ブート時に fsck の実行条件が判断される。
また、fsck の実行が必要と判断された場合には、fsck が実行される。


1-2. fsck が実行される条件


(1) マウント回数による指定


fsck の実行なしにマウントできる回数の最大値を指定する。

(a) 設定値の確認

# tune2fs -l <device-path> | grep -i mount
...
Mount count: 10
Maximum mount count: 30    … fsck の実行なしにマウントできる回数の最大値


(b) 設定値の変更

# tune2fs -c <count> <device-path>


指定できる値は、下記の通りである。
・正の整数: マウント回数の最大値
・0, -1: チェックを無効化する


(2) 時間間隔による指定


最後の fsck の実行からの経過時間を指定する。

(a) 設定値の確認

# tune2fs -l <device-path> | grep -i interval
Check interval: 15552000 (6 months)


(b) 設定値の変更

# tune2fs -i <interval> <device-path>


指定できる値は、下記の通りである。
・x[d]: x 日
・xw: x 週
・xm: x ヶ月
・0: チェックを無効化する


2. 手動実行


ブート時以外でのマウント時に、fsck の実行条件が判断される。
また、fsck の実行が必要と判断された場合には、その旨のメッセージが出力される。
(fsck が自動実行されることはない。)

(補足)
必要なら、アン・マウントし、fsck を実行した後に再度マウントする。


3. 備考


(1) fsck が実行される条件の初期値


ディストリビューション、およびそのバージョンによって異なる。



PostgreSQL 9.4、PHP 5.6への更新後の不具合 [Debian]

Debian 8 において、PostgreSQL、PHP の更新後に不具合が発生するようになってしまった。
詳細は、以下の通りである。

[更新前]
postgresql-9.1 9.1.16-0+deb7u1
php5 5.4.45-0+deb7u4
postgresql-9.1-903.jdbc3.jar

[更新後]
postgresql-9.4 9.4.8-0+deb8u1
php5 5.6.23+dfsg-0+deb8u1
postgresql-9.4.1209.jdbc42.jar

1. 不具合-1


(1) 発生事象


JDBC において、日本語を含むテーブルへの操作でエラーが発生する。

・UTF8 以外の日本語を含む場合に、SQLException が発生する。
・同様の設定でも、PostgreSQL 9.1 ではエラーは発生しない。
・当該データベースの文字コードに関する設定は、下記の通りである。
 (Encoding: SQL_ASCII, Collate: C, Ctype: C)

(補足)
エラーログは、下記の通りである。
(/var/log/postgresql/postgresql-9.4-main.log)

ERROR:  invalid byte sequence for encoding "UTF8": 0xa5


(2) 対処方法


データベースの作成時に、エンコーディングを指定する。

(例) EUC_JP を使用する場合
% createdb -E EUC_JP -T template0 test

2. 不具合-2


(1) 発生事象


PHP において、HTTP ヘッダーでのエンコーディングの設定が効かない。
このため、文字化けするページがある。

・下記の設定が効かない。
 <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">

(補足)
PHP 5.6 での仕様の変更のためである。


(2) 対処方法


PHP の default_charset の設定で対応する。

(a) /etc/php5/apache2/php.ini で設定する。

(例) EUC-JP を使用する場合
default_charset = EUC-JP


(b) ページ毎に変更する場合には、HTTP ヘッダーで設定する。


HTTP ヘッダーに下記のコードを追加する。

(例) Shift_JIS を使用する場合
<?php
  if (PHP_VERSION >= 5.6) {
    ini_set('default_charset', 'Shift_JIS');
  }
?>

3. 備考


PostgreSQL の更新により、ブート時に下記のようなワーニングが出力されなくなった。

postgres (1416): /proc/1416/oom_adj is deprecated, \
please use /proc/1416/oom_score_adj instead.


CentOS 6.8でディスプレイをオープンできない件のその後 [CentOS]

1. 発生事象


CentOS 6.8 において、ノード名を付けて指定したディスプレイをオープンできない。


2. 対処方法


下記のパッケージへの更新を行う。

・xorg-x11-server-Xorg-1.17.4-9.5.el6.centos.i686
・xorg-x11-server-common-1.17.4-9.5.el6.centos.i686

(補足)
ほとんどの xorg-x11-drv-* は、依存パッケージとなっている。
依存関係のないパッケージは、下記の通りである。
・xorg-x11-drv-ati-firmware-7.6.1-2.el6.noarch
・xorg-x11-drv-geode-2.11.17-1.el6.i686
・xorg-x11-drv-neomagic-1.2.9-1.el6.i686


3. 備考


更新パッケージがリリースされる前の対処方法は、下記の通りである。
http://dan-project.blog.so-net.ne.jp/2016-06-25



snd-mixer-oss.koの所在 [CentOS]

CentOS 6 において、snd-mixer-oss モジュールを使用する必要があり、その所在を調べた。
(カーネルの再構成を行う場合を除く。)
詳細は、以下の通りである。

1. kernel 2.6.32-71.29.1.el6.i686 の場合


(1) カーネル・パッケージには含まれない。

(2) alsa-kmdl-2.6.32-71.29.1.el6.i686-1.0.23-85.el6.i686.rpm (ATrpms)


・kernel-2.6.32-71.29.1.el6.i686 のみを対象とする。

・/lib/modules/2.6.32-71.29.1.el6.i686/updates/sound/acore/oss/\
 snd-mixer-oss.ko


(3) kmod-alsa-1.0.23-1.el6.elrepo.i686.rpm


kernel-2.6.32-71.el6.i686 以降で使用可能である。


(補足)
2.6 系で、ivtv モジュールのロードでエラーが発生しないカーネルである。
これより後の 2.6 系バージョンでは、ivtv モジュールのロードでエラーが発生する。


2. kernel-2.6.32-431.20.3.el6.i686 の場合


(1) カーネル・パッケージに含れる。


(補足)
カーネル・パッケージに含まれるようになった最初のバージョンは不明である。
これ以降のバージョンでは、カーネル・パッケージに含まれる。



MDデバイスでのmd127問題 [CentOS]

/dev/md2 デバイスの再作成後、再起動により左記のデバイス名が変わってしまうという問題が発生した(md127 問題というらしい)。
詳細は、以下の通りである。

1. 発生事象


/dev/md2 の再作成後、再起動すると /dev/md127 に変わってしまう。

(補足)
・/etc/mdadm.conf の UUID の設定は、新しい値に更新済である。
・再起動前には、/dev/md2 として認識されていた。
・CentOS 7、Debian 7/8 では発生しない。
 (mdadm.conf の UUID の更新のみを実施。CentOS 6 とのマルチブートを行っている。)
・ソフトウェアのバージョン
 mdadm-3.3.2-5.el6.i686、kernel-2.6.32-431.29.2.el6.i686


2. 対処方法


MD デバイスの作製後に、initramfs(/boot/initramfs-`uname -r`.img) を更新する。
(下記 (3) の手順を実施する。)

(1) MD デバイスの作製

(例)
# mdadm --create /dev/md2 --metadata=0.90 --level=raid1 \
--raid-devices=2 /dev/sda7 /dev/sdb7


(2) /etc/mdadm.conf の更新

# mdadm --detail --scan >> /etc/mdadm.conf


・UUID の古い設定は削除する。


(3) initramfs の更新

# cd /boot
# mv initramfs-`uname -r`.img initramfs-`uname -r`.img.old
# mkinitrd /boot/initramfs-`uname -r`.img `uname -r`


または

# cd /boot
# mv initramfs-`uname -r`.img initramfs-`uname -r`.img.old
# dracut /boot/initramfs-`uname -r`.img `uname -r`


・動作確認後に、/boot/initramfs-`uname -r`.img.old を削除する。


3. 備考


initramfs 内のディスク情報と実際のディスク上の情報が一致しない場合に、md127 から降順に必要分のデバイス名が割り当てられるとのこと。
また、以前には、Debian 系でも同様の事象が発生し、同様の手順で対応できたとのこと。



CentOS 6.8へのアップデート後にshutdownでエラーメッセージが表示される(2) [CentOS]

1. 発生事象


shutdown 時に /sbin/blkdeactivate のエラーが発生する。
・/sbin/blkdeactivate: line 187: SKIP_DEVICE_LIST: bad array subscript

(補足)
・CentOS 6.7 から CentOS 6.8 へのアップデート後に発生するようになった。
・該当するパッケージ: lvm2-2.02.143-7.el6.i686


2. 対処方法


下記のパッケージを CentOS 6.7 のパッケージにバージョンダウンする。

(1) 該当する CentOS 6.8 のパッケージ

device-mapper-1.02.117-7.el6.i686  … (注1)
device-mapper-event-1.02.117-7.el6.i686  … (注1)
device-mapper-event-libs-1.02.117-7.el6.i686  … (注1)
device-mapper-libs-1.02.117-7.el6.i686  … (注1)
lvm2-2.02.143-7.el6.i686
lvm2-libs-2.02.143-7.el6.i686

(注1) 依存パッケージ


(2) 使用した CentOS 6.7 のパッケージ

device-mapper-1.02.95-3.el6_7.4.i686.rpm  … (注2)
device-mapper-event-1.02.95-3.el6_7.4.i686.rpm  … (注2)
device-mapper-event-libs-1.02.95-3.el6_7.4.i686.rpm  … (注2)
device-mapper-libs-1.02.95-3.el6_7.4.i686.rpm  … (注2)
lvm2-2.02.118-3.el6_7.4.i686.rpm
lvm2-libs-2.02.118-3.el6_7.4.i686.rpm

(注2) 依存パッケージ


CentOS 6.8の不具合への対応(2) [CentOS]

下記の CentOS 6.8 の不具合について、残件の対応を行った。

http://dan-project.blog.so-net.ne.jp/2016-05-27-1
http://dan-project.blog.so-net.ne.jp/2016-06-25

1. rsh-server が正常に機能しない件

1-1. 発生事象


(1) 初回の実行では、ログイン直後に入力を受け付けなくなる。


しばらく経過した後に、ターミナルの Full Reset で入力可能となる。
ただし、プロンプトが表示されない。

% rsh `hostname`              … テストのためローカルノード上で実行
→ 入力を受け付けない
(しばらく待って、ターミナルを Full Reset する)
→ 入力可能となる
exit                          … プロンプトの表示がないが、コマンドの実行は可能


(2) 2 回目以降は、ログインシェルを引数指定しないと、即座にクローズされる。


ログインしても、プロンプトが表示されない。
ただし、コマンドの実行は可能である。

% rsh `hostname`              … テストのためローカルノード上で実行
rlogin: connection closed.    … 即座にクローズされる
% rsh `hostname` /bin/bash
exit                          … プロンプトの表示がないが、コマンドの実行は可能

1-2. 対処方法


下記のパッケージを CentOS 6.7 のパッケージにバージョンダウンする。

(1) 該当する CentOS 6.8 のパッケージ

libblkid-2.17.2-12.24.el6.i686.rpm    … 依存パッケージ
libuuid-2.17.2-12.24.el6.i686.rpm     … 依存パッケージ
util-linux-ng-2.17.2-12.24.el6.i686.rpm


(2) 使用した CentOS 6.7 のパッケージ

libblkid-2.17.2-12.18.el6.i686.rpm    … 依存パッケージ
libuuid-2.17.2-12.18.el6.i686.rpm     … 依存パッケージ
util-linux-ng-2.17.2-12.18.el6.i686.rpm

2. telnet-server が正常に機能しない件

2-1. 発生事象


(1) ログイン時のプロンプトが正しく表示されない。


・1 行目の 1 カラム目が表示されない。
・1 行目の改行が正しく実施されない。

% telnet `hostname`    … テストのためローカルノード上で実行
Trying 192.168.0.11...
Connected to xxx.xxx.xxx.
Escape character is '^]'.
CentOS release 6.8 (Final)
Kernel 2.6.32-71.29.1.el6.i686 on an i686
ogin:               … プロンプトの 1 カラム目が表示されない
      Password:     … プロンプトの表示位置がおかしい


(2) ログイン後の出力がおかしい。


・プロンプトが表示されない。
・入力がエコーされない。
・コマンドの実行はできるが、実行結果の 1 行目が正しく表示されない。
 (1 カラム目が表示されない、改行が正しく実施されない。)


2-2. 対処方法


1-2. の対処方法と同じ。


[追記]