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
/proc/mdstatのデバイス名でのソート [Linux]
しかし、/proc/mdstat はデバイス名でソートされておらず、少々見づらい。
このため、/proc/mdstat をデバイス名でソートするスクリプトを作成した。
詳細は、以下の通りである。
1. スクリプト (mdstat)
#!/bin/sh # # Get status of MD devices sorted by device name. # usage: mdstat # # - MD is an abbreviation for "multiple device". # - The most common use case is commonly known as "Software RAID". # export LC_ALL=C # sort status of MD devices by device path sort_md_status() { local info=$1 local first_line last_line md_dev local i # get first line, last line, list of MD device first_line=`echo "$info" | sed -n 1p` last_line=`echo "$info" | sed -n \\$p` md_dev=`echo "$info" | grep '^md[0-9]\+ :' | sed 's/ :.*//' | sort -n` # sort data by device path echo "$first_line" for i in $md_dev; do echo "$info" | grep -A2 $i done echo "$last_line" } sort_md_status "`cat /proc/mdstat`" exit $?
2. 使用方法
% mdstat
3. 実行例
% mdstat Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] \ [raid10] md0 : active raid1 sda5[0] sdb5[1] 20971456 blocks [2/2] [UU] md1 : active raid1 sda6[0] sdb6[1] 20971456 blocks [2/2] [UU] md2 : active raid1 sda7[0] sdb7[1] 204736 blocks [2/2] [UU] md3 : active raid1 sda8[0] sdb8[1] 204736 blocks [2/2] [UU] md4 : active raid1 sda9[0] sdb9[1] 41942976 blocks [2/2] [UU] md5 : active raid1 sda10[0] sdb10[1] 204736 blocks [2/2] [UU] md6 : active raid1 sda11[0] sdb11[1] 204736 blocks [2/2] [UU] md7 : active raid1 sda3[0] sdb1[1] 83886016 blocks [2/2] [UU] unused devices:
% cat /proc/mdstat Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] \ [raid10] md2 : active raid1 sda7[0] sdb7[1] 204736 blocks [2/2] [UU] md5 : active raid1 sda10[0] sdb10[1] 204736 blocks [2/2] [UU] md1 : active raid1 sda6[0] sdb6[1] 20971456 blocks [2/2] [UU] md3 : active raid1 sda8[0] sdb8[1] 204736 blocks [2/2] [UU] md7 : active raid1 sda3[0] sdb1[1] 83886016 blocks [2/2] [UU] md6 : active raid1 sda11[0] sdb11[1] 204736 blocks [2/2] [UU] md4 : active raid1 sda9[0] sdb9[1] 41942976 blocks [2/2] [UU] md0 : active raid1 sda5[0] sdb5[1] 20971456 blocks [2/2] [UU] unused devices:
LinuxでのWebカメラの使用 [Linux]
調査結果は、以下の通りである。
(尚、動作確認を行っていないため、購入は自己責任でお願いします。)
1. USB 接続でドライバーのイストールが不要な製品については、ほぼ Linux で使用できる。
このような製品の場合、ほとんどが UVC(USB Video Class) 仕様に対応した製品である。
2. UVC 仕様に対応した製品の場合には、Linux でも問題なく使用できる。
3. 下記の製品については、UVC 仕様に対応しており Linux で使用できる。
・ELECOM UCAM-C310FBBK (マイク内蔵) 参考価格: 2,170円(税込)/家電量販店 ・ロジクール C270 (マイク内蔵) 参考価格: 2,310円(税込)/家電量販店
KVM環境でのコピー・ペースト [Linux]
使用目的は、サーバー機能のテストのためである。
このため、ゲスト OS には X 関連のパッケージをインストールしない。
(KVM ホスト側には、X 関連のパッケージをインストールしている。)
[ソフトウェアのバージョン]
・OS: CentOS 7
・qemu-kvm-1.5.3-175.el7_9.3.x86_64
・virt-manager-1.5.0-7.el7.noarch
以下は、このような環境でのコピー・ペーストの実施方法についてまとめたものである。
1. ゲスト OS への接続に Serial Console を使用する場合
ウィンドウ間、およびウィンドウ内でのコピー・ペーストが可能である。
また、Serial Console で接続には、下記のいずれかの手順を実施する。
(1) Terminal Emulator での virsh の実行
# virsh console <domain-name>
(2) Terminal Emulator での virt-manager の実行
# virt-manager
・VM(ドメイン) を選択した状態で右クリックし、[Open] を選択する。
この時点では、Graphical Console が選択されている。
・メニューで、[View] -> [Text Consoles] -> [Serial 1] を選択する。
・表示された Serial Console の任意のポイントをクリックする。
(補足)
ゲスト OS での Serial Console の設定については、備考を参照。
2. ゲスト OS への接続に Graphical Console を使用する場合
コピー・ペーストはできない。
ただし、下記の手順により、ウィンドウ内でのコピー・ペーストが可能となる。
(1) gpm のインストール
# yum install gpm
下記の依存パッケージもインストールされる(CentOS 7 の場合)。
・SDL, gpm-libs, linuxconsoletools
(2) gpm の起動 (初回のみ)
# systemctl start gpm
rsyslogのタイムスタンプのフォーマット変更 [Linux]
不便を感じることが度々あるため、年(西暦 4桁)が出力されるように設定の変更を行った。
[ソフトウェアのバージョン]
・rsyslog 8.1901.0-1 (on Debian 10)
・rsyslog-8.24.0-52.el7_8.2.x86_64 (on CentOS 7)
1. 対応方法
/etc/rsyslog.conf にテンプレートの定義を追加し、これを使用する。
尚、タイムスタンプは、下記のように変更する。
(変更前) Jan 2 11:22:33 (変更後) 2020-01-02 11:22:33
2. 実施手順
(1) テンプレートの定義
下記のテンプレートを定義する(注1)。
$template custom_timestamp,"%timestamp::10:date-rfc3339% %timestamp:12:19:date-rfc3339% %hostname% %syslogtag% %msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
・%msg:::drop-last-lf%
メッセージの最初の文字がスペースでない場合に、スペースを返す。
・%msg:::sp-if-no-1st-sp%
メッセージを取得し、最後の改行を取り除く。
(2) デフォルト・テンプレートの変更
(変更前) $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat (変更後) $ActionFileDefaultTemplate custom_timestamp
(3) rsyslog の再起動
# systemctl restart rsyslog
3. 備考
(1) $ActionFileDefaultTemplate の代表的な設定値
(a) RSYSLOG_TraditionalFileFormat
・デフォルトの設定値である。
・タイプスタンプに年が含まれない。
(例) Jan 2 11:22:33
・フォーマットは、下記の通り(注1)。
"%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp% %msg:::drop-last-lf%\n"
(b) RSYSLOG_FileFormat
・高精度のタイプスタンプとタイムゾーン情報が含まれる。
(例) 2020-01-02T11:22:33.123456+09:00
・フォーマットは、下記の通り(注1)。
"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag% %msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
(注1)
複数行として表示しているが、設定は一行で行う(単純に行を連結する)こと。