Mewでの数値文字参照のデコード [Linux]
・#12354; または #x3042; のようなデータの羅列が表示される。
・数値文字参照のデータを quoted-printable でエンコードしたメールである。
(お金を要求する内容のスパムメールである。)
(補足)
スマホの Gmail アプリではデコードされる。
以下は、Mew で数値文字参照をデコードする手順に関する記述である。
1. 対処方法 - nkf コマンドの使用
(1) 該当するメールで , (mew-summary-display-asis) を押下する。
(2) 該当するデータをリージョンに設定する。
(3) shell-command-on-region で nkf --numchar-input を実行する。
2. 備考
・数値文字参照: NCR(numeric character reference)
表記したい文字を Unicode/ISO 10646 の文字番号(コードポイント)で表す。
10進数での表記と 16進数での表記がある。
(例)
'あ'(文字番号 U+3042) の場合
・10進数で表記の場合は、'あ'
・16進数で表記の場合は、'あ'
udevへのストレージに関するルールの追加 [Linux]
1. 要件
指定したデバイスへのシンボリック・リンク(パス名を固定)を /dev に作成する。
対象とするデバイスは、下記の通りである。
また、ルールは /etc/udev/rules.d/60-persistent-strage.rules に設定する。
(1) 2 個のバードディスクの一方にインストールされている Windows のパーティション
・/dev/part-win-1
・/dev/part-win-2
(2) SATA1、STAT2 に接続されているハードディスク
・/dev/ata-disk-1
・/dev/ata-disk-2
2. 作成したルール
(1) Windows のパーティションへのシンポリック・リンクの作成
(a) /dev/sda[12] を使用の場合
# NTFS partitions SUBSYSTEM=="block", ENV{ID_BUS}=="ata", ENV{ID_FS_TYPE}=="ntfs", \ SYMLINK+="part-win-%n"
(b) /dev/sda{1+x,2+x} を使用の場合
# NTFS partitions SUBSYSTEM=="block", ENV{ID_BUS}=="ata", ENV{ID_FS_TYPE}=="ntfs", \ PROGRAM="/bin/sh -c 'echo $((%n-x))'", SYMLINK+="part-win-%c"
・実際には一行で設定する。
・%n: デバイスの番号
・%c: PROGRAM で指定したコマンドの標準出力
(2) SATA1、STAT2 に接続されているハードディスクへのシンボリック・リンクの作成
# pci-0000:00:1f.2-ata-1.0 SUBSYSTEM=="block", ENV{ID_BUS}=="ata", ENV{DEVTYPE}=="disk", \ ENV{ID_PATH}=="pci-0000:00:1f.2-ata-1.0", SYMLINK+="ata-disk-1" # pci-0000_00_1f_2-ata-1.1 SUBSYSTEM=="block", ENV{ID_BUS}=="ata", ENV{DEVTYPE}=="disk", \ ENV{ID_PATH}=="pci-0000:00:1f.2-ata-1.1", SYMLINK+="ata-disk-2"
または
# pci-0000:00:1f.2-ata-1.0, pci-0000_00_1f_2-ata-1.1 SUBSYSTEM=="block", ENV{ID_BUS}=="ata", ENV{DEVTYPE}=="disk", \ ENV{ID_PATH}=="pci-0000:00:1f.2-ata-1.?", \ PROGRAM="/bin/sh -c \"echo $((`echo %E{ID_PATH} | sed 's/.*\.//'` +1))\"", \ SYMLINK+="ata-disk-%c"
・実際には一行で設定する。
・%E{ID_PATH}: ID_PATH の値
・同様のシンボリック・リンクが /dev/disk/by-path に存在する。
/dev/disk/by-path/pci-0000:00:1f.2-ata-1.0
/dev/disk/by-path/pci-0000:00:1f.2-ata-1.1
3. 備考
(1) ルールで指定できる項目の確認
% udevadm info --query=all --name=<dev-path>
clamdscanの使用方法に関するメモ [Linux]
以下は、clamdscan を使いやすくすることを目的としたメモ(備忘録)である。
(clamdscan のバージョン: 0.103.6)
1. スキャンしたファイルの表示
(1) -i オプションを指定せず、-z オプションを指定
下記の情報が追加表示される。 ・ウイルスが発見されなかったファイルのパス名 ただし、表示の対象はコマンドラインで直接指定されたファイルのみである。
(補足)
・-z を指定しないと表示されない。
-z: ウイルスが発見された後もスキャンを継続
・-i を指定の場合には、上記の追加表示は実施されない。
2. 再帰的なスキャンが実施されることの確認
対象がディレクトリの場合には、再帰的にスキャンが実施される。
明確な説明がないため、テストの実行結果から判断した。
(1) 階層の深さの制限
・設定ファイルの MaxDirectoryRecursion で指定する。
・設定値に関する詳細な説明資料はない。
(a) -z オプションを指定しないと必要な情報が出力されない。
(b) 設定値に誤りがある場合、エラーメッセージが出力される。
ERROR: Incorrect argument format for option MaxDirectoryRecursion ERROR: Can't parse clamd configuration file /tmp/clamd.conf (終了ステータスは 2 となる。)
(c) 設定値を超える深さにファイルが存在する場合、ワーニングが出力される。
WARNING: Directory recursion limit reached (終了ステータスは 2 となる。)
(d) 実行結果からの判断
・設定できる値は 0 以上である。 ・n(>=1) の場合: 指定ディレクトリの n 階層下のディレクトリまでが対象 指定ディレクトリ内の全ファイル(ディレクトリを含)が対象 指定ディレクトリ内のサブディレクトリは、指定された階層までが対象 ・0 の場合: 無制限となっているように思われる。 少なくとも、指定ディレクトリのみに限定するようにはならない。
(2) 再帰的なスキャンが実施されていることの証明
・サブディレクトリ内のテスト用ウイルスを見つけている。
(eicar.zip は、ウイルス検索のテストファイルである。)
・サブディレクトリ内の除外パスを除外している。
# clamdscan -z --stdout /work /work/backup: Excluded /work/lost+found: Excluded /work/linux/grub2/super_grub2_disk_hybrid_2.04s1.iso: Excluded /work/test/cache: Excluded /work/test/xxx.iso: Excluded /work/test/x1/x2/eicar.zip: Win.Test.EICAR_HDB-1 FOUND ----------- SCAN SUMMARY ----------- Infected files: 1 Time: 3.750 sec (0 m 2 s) ...
3. 一時的に設定を変更しての実行
別の設定ファイルを使用することにより、対応可能である。
(例) -- 除外パスの追加
・元の設定ファイルをコピーし、別の設定ファイルを作成
・上記で作成した設定ファイルに、除外パス(ExcludePath) を追加
・clamdscan の --config-file オプションで上記で作成した設定ファイルを指定
(補足)
上記で --config-file を使用した clamdscan にのみ追加設定が適用される。
--config-file を使用しない clamdscan には元の設定が適用される。
(ExcludePath、MaxDirectoryRecursion について動作を確認)
4. 効果が不明のオプション
(1) -v オプション
'be verbose' とのみ説明されており、効果が不明である。
また、-v の指定の有無による実行結果の違いを見つけられない。
Windowsのパーティションのマウント・エラーへの対応 [Linux]
autofs で Windows の NTFS パーティションをマウントできないことがある。
・/etc/auto.misc の設定は、下記の通りである。
win_1 -fstype=ntfs,locale=ja_JP.eucJP,umask=022,ro /dev/sda1 win_2 -fstype=ntfs,locale=ja_JP.eucJP,umask=022 /dev/sda2
(補足)
・Linux と Windows をマルチブートしている環境である。
・文字コードに unicode を使用する場合には、locale に ja_JP.UTF-8 を指定する。
2. 原因
原因は、/dev/sda と /dev/sdb のディスクが入れ替わることがあるためである。
・起動時に、OS がディスクを認識した順序で /dev/sda、/dev/sdb となる。
・この順序は SATA ケーブルの接続方法とは関係ないため、順序を固定できない。
(補足)
・発生頻度が低いため、これまで気付かなかった。
・LVM を使用している環境では、下記の理由により上記問題は発生しない。
mdadm + LVM での RAID 1 構成のため、UUID が使用されている。
3. 対処方法
パーティションのラベルを使用したマウントを実施する。
(1) Windows 用パーティションへのラベルの設定
C/D ドライブ用パーティションに win_1/2 を設定する。
# ntfslabel /dev/sda1 win_1 # ntfslabel /dev/sda2 win_2
(2) /etc/auto.misc の編集
win_1 -fstype=ntfs,locale=ja_JP.eucJP,umask=022,ro :LABEL=win_1 win_2 -fstype=ntfs,locale=ja_JP.eucJP,umask=022 :LABEL=win_2
(補足)
UUID を使用したマウントも可能である。
(デバイスの UUID は、`lsblk -f` で確認できる。)
Rocky Linux 8.4の最小インストール [Linux]
CentOS から Rocky Linux へ移行するための準備である。
当初は boot.iso を使用する予定であったが、メタデータのダウンロードがなかなか終了しない状態となってしまい、取り敢えずは minimal.iso を使用してインストールを行った。
その後、状況が改善したため、boot.iso でのインストールを行った。
このため、2 種類の iso を使用したインストールで構築される環境についての比較を行った。
詳細は、以下の通りである。
(手順的には、CentOS 8.3 の場合と同じである。)
1. インストールで使用する iso ファイルのダウンロード
Rocky-8.4-x86_64-boot.iso
または
Rocky-8.4-x86_64-minimal.iso
2. インストーラーの起動
KVM の機能を使用して、インストーラーを起動する。
(1) ディスク・イメージの作成
(例) # qemu-img create -f qcow2 /var/lib/libvirt/images/rocky-8_1.qcow2 6.0G
(2) VM の作成とインストーラーの起動
(例) # virt-install --virt-type kvm \ --name rocky-8_1 --vcpus 1 --memory 1024 \ --disk path=/var/lib/libvirt/images/rocky-8_1.qcow2 \ --cdrom /shared_tmp/iso/rocky-linux/Rocky-8.4-x86_64-boot.iso
下記のメッセージが出力されるまで待ち、virt-manager を起動する。
Starting install... Domain installation still in progress. Waiting for installation to \ complete.
(3) virt-manager の起動
# virt-manager
(4) 作成された VM への接続
該当する VM を右クリックし、[Open] を選択する。
3. インストールの実施
3-1. 言語の選択
・[日本語] を選択する。
・[続行] を選択する。
3-2. インストール方法の選択とインストールの開始
(1) ネットワークとホスト名の設定
・[全般] タブで、[優先的に自動接続する] を選択する。
・[IPv6] タブで、[無効] の選択、または適当な設定を行う。
・[IPv4] タブで、IPアドレス、GW、DNS サーバー、ホスト名を設定する。
・[IPv4] タブで、右側上部の [オン] を選択し、[接続済み] 状態にする。
(補足)
boot.iso の場合、メタデータのダウンロードが開始される。
(2) 時刻と日付の設定
・[アジア/東京] を選択する。
・右側上部の [ネットワーク時刻] で [オン] を選択する。
(補足)
boot.iso の場合、初期値でのメタデータのダウンロードがエラー終了する。
これにより、インストールソースの設定変更が可能となる。
(3) root パスワードの設定
(4) インストールソースの設定
boot.iso の場合、下記の内容でインストールソースを設定する。
・[ネットワーク上] を選択
・[ftp://ftp.riken.jp/Linux/rocky/8.4/BaseOS/x86_64/os/] を指定
(5) KDUMP の無効化
[kdump を有効にする] を選択しない。
(6) インストール先の設定
ストレージの設定で [自動構成] が選択されていることを確認する。
(7) ソフトウェアの選択
[最小限のインストール] を選択する。
(8) インストールの開始
・右下の [インストールの開始] を選択する。
・インストールの終了後、右下の [システムの再起動] を選択する。
4. 備考
(1) 使用する iso ファイルによるインストール・パッケージの違い
・Rocky-8.4-x86_64-boot.iso (720MB)
・Rocky-8.4-x86_64-minimal.iso (1.9GB)
minimal.log の場合、logrotate、rsyslog がインストールされない。
上記パッケージの追加とパッケージの更新後の比較結果は、以下の通りである。
# diff pkg_list_mininal.log pkg_list_boot.log > geolite2-city-20180605-1.el8.noarch > geolite2-country-20180605-1.el8.noarch < glibc-all-langpacks-2.28-151.el8.x86_64 > glibc-langpack-ja-2.28-151.el8.x86_64 > langpacks-ja-1.0-12.el8.noarch > libestr-0.1.10-1.el8.x86_64 > libevent-2.1.8-5.el8.x86_64 > libfastjson-0.99.8-2.el8.x86_64 > libmaxminddb-1.2.0-10.el8.x86_64 > libsecret-0.18.6-1.el8.x86_64 > libxkbcommon-0.9.1-1.el8.x86_64 > pinentry-1.1.0-2.el8.x86_64 > plymouth-0.9.4-9.20200615git1e36e30.el8.x86_64 > plymouth-core-libs-0.9.4-9.20200615git1e36e30.el8.x86_64 > plymouth-scripts-0.9.4-9.20200615git1e36e30.el8.x86_64 > python3-unbound-1.7.3-15.el8.x86_64
GmailのPOPサーバーにおいて、メールの存在を認識できないことがある [Linux]
Gmail の POP サーバーにおいて、メールの存在を正しく認識できないことがある。
このため、クライアント側での既読情報の管理には工夫が必要である。
(例) (1) 時刻 X + 0 分の確認結果: 3 通のメールが存在 この時点でのクライアントの管理情報を下記のようにする。 ・未読のメール数/メールの総数: 3/3 その後、すべてのメールを参照し、クライアントの管理情報を下記のようにする。 ・未読のメール数/メールの総数: 0/3 (2) 時刻 X + 10 分の確認結果: メールなし ← 実際には 3 通のメールが存在 メールが存在しないため、既読メールに関する情報が初期化される。 よって、クライアントの管理情報は下記のようになる。 ・未読のメール数/メールの総数: 0/0 ← 正しくは 0/3 (3) 時刻 X + 20 分の確認結果: 3 通のメールが存在 3 通を新規メールと判断し、クライアントの管理情報は下記のようになる ・未読のメール数/メールの総数: 3/3 ← 正しくは 0/3 (4) メールの存在が認識される場合には、メールの UID は正しい値が得られる。
・メールが存在する場合に、メールなしと回答されることがある。
・発生頻度は低い。
2021-08 の上旬に数回発生した。
・少し時間をあけ再実行すると、正しい結果が得られる。
現在、10 分毎に確認を行っている。
・現時点では、Gmail 以外の POP サーバーでは発生していない。
・存在確認には、Perl の Mail::POP3Client.pm を使用したスクリプトを使用している。
2. 対処方法
上記のスクリプトに、下記の機能を追加する。
(1) クライアント側で既読情報を一定の期間保持する。
(変更前)
サーバー上で存在が確認されたメールの既読情報しか保持しない。
(変更後)
一度作成した既読情報は、メールなしと判断された後も一定期間保持する。
・例えば、メールなしと判断された後の 3 回目の確認時まで保持する。
Mewのメール返信で引用する送信日付のフォーマット変更 [Linux]
Mew 6.8 on Emacs 26.1
Mew 6.3 on Emacs 24.3.1
Mew のメール返信で、mew-cite-fields、mew-cite-format を使用して送信日時を引用する場合、メールヘッダーの Date: 行の値が使用される。
今回は、これを 'YYYY-MM-DD hh:mm:ss tz' のように変更する。
(理由)
・曜日の情報が不要。
・日付のフォーマットが複数存在。
(曜日の有無、秒の有無)
詳細は、以下の通りである。
1. 変更前後での引用のイメージの違い(例)
(1) 変更前
On Tue, 8 Jun 2021 01:23:34 +0900 : From: xxx Subject: xxx > ...
(2) 変更後
On 2021-06-08 01:23:34 +0900 : From: xxx Subject: xxx > ...
2. 設定
~/.mew.el の mew-cite-format の設定の後に、下記の設定を追加する。
(setq mew-cite-strings-function 'my-mew-cite-strings) (defun my-mew-cite-strings () (let ((date (mew-cite-get-value mew-date:)) (str (mew-cite-strings)) item tmzn) (if (not (string-match mew-time-rfc-regex date)) str (setq item (parse-time-string date)) (setq date (format "%04d-%02d-%02d %02d:%02d:%02d" (nth 5 item) (nth 4 item) (nth 3 item) (nth 2 item) (nth 1 item) (nth 0 item))) (when (setq tmzn (nth 8 item)) (setq tmzn (format "%+03d%02d" (/ tmzn 3600) (/ (% tmzn 3600) 60))) (setq date (concat date " " tmzn))) (replace-regexp-in-string "^On [^\n]+" (format "On %s :" date) str))))
・mew-time-rfc-regex を使用するチェックは、異常な値を除外するためである。
・mew-time-rfc-regex は、有効なデータを下記のように定義している。
下記の項目を空白文字で連結した文字列
日(数字)
月(文字列)
時分秒(数字を : で接続。秒は省略可。)
タイムゾーン(符号付きの数字、または文字列。省略可。)
EmacsでのPDFファイルの表示 [Linux]
・Emacs のバージョン:
Emacs 26.1 (on Debian 10)、Emacs 24.3.1 (on CentOS 7)
・DocView mode を使用する。
1. PDF ファイルの表示
*.pdf ファイルを開く。
2. DocView の主な機能
(1) 表示位置の変更
# 次ページ doc-view-next-page (n) # 前ページ doc-view-previous-page (p) # 次の行 doc-view-next-line-or-next-page (C-n, <down>) # 前の行 doc-view-previous-line-or-previous-page (C-p, <up>) # 上方にスクロール doc-view-scroll-up-or-next-page (SPC) # 下方にスクロール doc-view-scroll-down-or-previous-page (S-SPC) # 最初のページ doc-view-first-page (M-<) # 最後のページ doc-view-last-page (M->)
(2) 表示の拡大/縮小
# 拡大 doc-view-enlarge (+, =) # 縮小 doc-view-shrink (-) # リセット doc-view-scale-reset (0) # 縦方向のサイズをウィンドウに合わせる doc-view-fit-height-to-window (H) # 横方向のサイズをウィンドウに合わせる doc-view-fit-width-to-window (W) # ページ全体がウィンドウに収まるサイズに変更 doc-view-fit-page-to-window (P)
(3) 表示方法の変更
# テキストのみの表示 doc-view-open-text (C-c C-t)
・Emacs のバージョンにより、実現方法が異なる。
Emacs 26.1 (on Debian 10) の場合: 表示データの変更
Emacs 24.3.1 (on CentOS 7) の場合: バッファーの追加
・表示されたテキストについては、通常の検索が可能である。
# ドキュメント編集、ドキュメント閲覧の切替 doc-view-toggle-display (C-c C-c) # テキストのみの表示の終了 Emacs のバージョンにより、手順が異なる。 ・Emacs 26.1 (on Debian 10) の場合: doc-view-toggle-display (C-c C-c) 2 回実行し、ドキュメント閲覧に切り替える。 ・Emacs 24.3.1 (on CentOS 7) の場合: DocView モードのバッファーを選択
(4) DocView モードでの検索
doc-view-show-tooltip (C-t) doc-view-search (C-s) または doc-view-search-backward (C-r)
・ドキュメント閲覧において、ツールチップを有効にし、検索を実施する。
・検索結果は、マウス位置のツールチップに表示される。
・ドキュメント閲覧のバッファーでは、検索結果を表示できない。
(5) キャッシュのクリア
# キャッシュ・ディレクトリの確認 C-h v doc-view-cache-directory を指定 # キャッシュのクリア M-x doc-view-clear-cache
xpdfで複数ファイルを表示するスクリプトの作成 [Linux]
・xpdf の起動後に追加選択できるが、ファイル選択が面倒なのでスクリプトで対応。
・xpdf の特定の機能で文字化けが発生するが、動作が軽快なため時々使用している。
しおりの表示(左側のペイン)で日本語が文字化けする。
検索時のキーワード入力で日本語が文字化けするため、日本語の検索ができない。
詳細は、以下の通りである。
1. スクリプト (Xpdf)
#!/bin/bash # # View PDF files with xpdf. # usage: Xpdf [file ...] # # check existence of PDF files check_pdf_file() { local status=0 local i for i in $*; do case $i in *.pdf) if [ ! -f $i ] || [ ! -r $i ]; then echo ">> $i: no such file" status=1 break fi ;; *) echo ">> $i: not PDF file" status=1 break ;; esac done return $status } # execute xpdf exec_xpdf() { local x_gap=20 pos local a_pid=() local status=0 local i j if [ $# != 0 ]; then j=`ps acx | grep -c "xpdf$"` for i in $*; do pos="+$(($x_gap * $j))+0" xpdf -g $pos $i 2> /dev/null & a_pid+=($!) j=$(($j +1)) sleep 0.2 done # get status of background jobs for i in ${a_pid[*]}; do wait $i j=$? if [ $status = 0 ]; then status=$j fi done else xpdf -g +0+0 2> /dev/null status=$? fi return $status } if ! which xpdf >/dev/null 2>&1; then echo "xpdf: command not found" exit 1 elif [ $# = 0 ] || check_pdf_file $*; then exec_xpdf $* fi exit $?
2. 使用方法
% Xpdf [file ...]
Emacsの小ネタ(3個) [Linux]
1. PDF の Viewer としての Emacs の使用
(1) 発生事象
近頃の Firefox では、PDF Viewer でエラーが発生することがある。
(例) Firefox 78.10.1 ESR
[エラー・メッセージ] この PDF 文書はサポートされていないため正しく表示できない可能性があります。
・文書の全部または一部が表示されないことがある。
・エラー・メッセージが表示されるだけのこともある。
・設定で [ウェブページが指定したフォントを優先する] を選択すると発生しない。
しかし、指定されているフォントによっては、とても見づらい状態となる。
(補足)
・すべてのアドオンを無効化しても状況は変わらない。
・Firefox 52.9.0 ESR の PDF viewer では発生しない。
(2) 対処方法
上記の問題が発生した場合、[ほかのビューアーで開く] ボタンが表示される。
よって、表示されたボタンをクリックし、他のビューアーを選択する。
また、最近の Emacs では、DocView で PDF を表示できる。
起動に要する時間が短く、動作も軽快である。
(例)
Emacs 26.1 on Debian 10
Emacs 24.3.1 on CentOS 7
2. Emacs の起動時の Gtk-WARNING の出力の抑制
(1) 発生事象
Emacs の起動時に Gtk-WARNING が出力されることがある。
(Emacs 26.1 on Debian 10)
[ワーニング・メッセージ] Gtk-WARNING **: ...: Theme parsing error: \ gtk-widgets.css:1214:18: Not using units is deprecated. Assuming 'px'.
(2) 対処方法
下記の手順を実施する。
(情報源は、ワーニング・メッセージのネット検索。)
(a) ~/.config/gtk-3.0/settings.ini での gtk-theme-name の設定値の取得
現在の設定は、'gtk-theme-name = Clearlooks-Phenix' となっている。
(b) /usr/share/themes/Clearlooks-Phenix/gtk-3.0/gtk-widgets.css の編集
# cd /usr/share/themes/Clearlooks-Phenix/gtk-3.0 # diff gtk-widgets.css gtk-widgets.css.org 1214c1214 < border-width: 0 1px; --- > border-width: 0 1;
(補足)
・ワーニング・メッセージから、該当する行とカラムがわかる。
・アップグレードを繰り返した環境では、古い設定が残っていることがある。
3. Emacs の起動時の dbind-WARNING の出力の抑制
(1) 発生事象
Emacs の起動時に dbind-WARNING が出力されることがある。
(Emacs 26.1 on Debian 10)
[ワーニング・メッセージ-1] dbind-WARNING **: ...: Couldn't connect to accessibility bus: \ Failed to connect to socket /tmp/dbus-c5SNKQfNzx: Connection refused [ワーニング・メッセージ-2] dbind-WARNING **: ...: Couldn't register with accessibility bus: \ Did not receive a reply. Possible causes include: the remote \ application did not send a reply, the message bus security policy \ blocked the reply, the reply timeout expired, or the network \ connection was broken.
(2) 対処方法
~/.bashrc 等に、下記の設定を行う。
(情報源は、ワーニング・メッセージのネット検索。)
# disable to display dbind-WARNING export NO_AT_BRIDGE=1