Postfixをソースから導入しsmtp.gmail.com経由でメールを送信する

OS: Ubuntu Server 18.04
Postfix 3.4.7

Postfixをソースから導入

先ず以てソースコードをダウンロードして展開する。

$ wget -c http://mirror.postfix.jp/postfix-release/official/postfix-3.4.7.tar.gz
$ tar zxvf postfix-3.4.7.tar.gz
$ cd postfix-3.4.7/

続けざまに make を実行してしまうと必要なパッケージが不足している旨、エラーメッセージが通知されるから予め準備をしておく。それからsmtp.gmail.comにメールをリレーするにはSMTP認証やSTARTTLSにも対応せねばならぬから其れ等に纏わるライブラリも併せて導入しておかねばやはり make やメール送信時に警告が挙がる。

$ sudo apt install libdb-dev m4 libssl-dev libsasl2-dev
エラーメッセージ対応策
No <db.h> include file fjound. Install the appropriate db*-devel package first.$ sudo apt install libdb-dev
extract_cfg.sh: 42: extract_cfg.sh: m4: not found$ sudo apt install m4
./mail_params.h:20:10: fatal error: openssl/opensslv.h: No such file or directory$ sudo apt install libssl-dev
host smtp.gmail.com[108.177.97.109] said: 530-5.5.1 Authentication Required.$ sudo apt install libsasl2-dev

続いて make makefiles で必要となるオプションを記述する。CCARGSにある -DUSE_TLS でSTARTTLSに対応し、-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl がSMTP-AUTHを使用するためのオプションである気配である。

これらの記載無しにビルドを進めてメールを送り付けると終いには host smtp.gmail.com[108.177.97.109] said: 530 5.7.0 Must issue a STARTTLS command first. であるとか host smtp.gmail.com[108.177.97.109] said: 530-5.5.1 Authentication Required. といったエラーメッセージを頂戴することになる。

それからpostfixユーザとpostdropグループを make install を実施するよりも先んじて作成しておかねば postfix-install: Error: "postfix" needs an entry in the passwd file. というエラーメッセージが現れて処理が終了してしまう。

$ sudo useradd -s /bin/false postfix
$ sudo groupadd postdrop

$ make makefiles CCARGS="-DUSE_TLS -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl" AUXLIBS="-lssl -lcrypto -lsasl2"
$ make
$ sudo make install

インストールが恙無く完了すれば main.cf の編集へ移ることになるし何らかのエラーに見舞われたらうまい具合に調整して再ビルドに取り組まねばならない。再ビルドの際は make makefiles に先んじて make tidy で前回ビルド時の不要なファイルを除去し、 make install に代わって make upgrade を用いるのが良さそうな情勢である。

設定ファイルの編集とアプリパスワードの生成

main.cf には此度の動作要件を満たす必要最低限の設定を投入する。

$ sudo vi /etc/postfix/main.cf
alias_maps   = hash:/etc/aliases
home_mailbox = Maildir/
relayhost    = smtp.gmail.com:587

smtp_tls_security_level        = may
smtp_sasl_auth_enable          = yes
smtp_sasl_password_maps        = hash:/etc/postfix/sasl_passwd
smtp_sasl_mechanism_filter     = digest-md5 cram-md login plain
smtp_sasl_tls_security_options = noanonymous

alias_maps はよしなにセットしておかねばPostfix起動後に error: open database /etc/aliases.db: No such file or directory とか warning: dict_nis_init: NIS domain name not set - NIS lookups disabled などのエラーメッセージが現れる。

$ sudo vi /etc/aliases
root:        guro
postmaster:  guro

$ sudo newaliases

2段階認証プロセスをオンにしているならば smtp_sasl_password_maps で指定した /etc/postfix/sasl_passwd の設定へ取り掛かる前にGoogleアカウントのセキュリティを司るページでアプリパスワードを生成しておく。

「アプリパスワード」を選択
「アプリを選択」→「メール」
「デバイスを選択」→「その他(名前を入力)」
デバイス名を入力し「生成」をクリック

生成されたアプリパスワードは決して人様に知られぬよう厳格に取り扱わねばならない。さもなければ瞬く間に重大なインシデントと相成って始末書である。

アプリパスワードをコピーして「完了」をクリック

アプリパスワードを用意したら sasl_passwd を作成する。2段階認証プロセスをオンにしていなければ通常のパスワードで宜しい。

$ sudo vi /etc/postfix/sasl_passwd
smtp.gmail.com:587      www7390uo:yufpcclzluerkvsf

作成を終えたら postmap を実行してデータベースファイルの作成・更新を忘れないよう肝に銘じておく。これを怠ると内容が反映されないから意図した動作とは異なる結果に慌てることになる。ほんとうにあわてた。それからファイルのパーミッションを600にしてrootユーザ以外の読み書きを制限しておく。

$ sudo postmap /etc/postfix/sasl_passwd
$ sudo chmod 600 /etc/postfix/sasl_passwd*
$ ls -l /etc/postfix/sasl_passwd*
-rw------- 1 root root    43 Oct 12 12:01 /etc/postfix/sasl_passwd
-rw------- 1 root root 12288 Oct 12 12:02 /etc/postfix/sasl_passwd.db

あとは設定に間違いがないかチェックして、内容に差し障りがないようであればPostfixを起動するだけである。

$ sudo postfix check
$ sudo postfix start

メール送信テスト

事前に組み上げておいたSMTPコマンドで以ってテストメールを投げつける。

$ telnet localhost 25
ehlo localhost
mail from: <guro>
rcpt to: <www7390uo@gmail.com>
data
From: guro
To: www7390uo@gmail.com
Subject: test

test
.
quit

恙無くメールが送信できている模様である。

アプリパスワードが不要となれば Googleアカウントのセキュリティを司るページ から削除をし、メールを送信した際に SASL authentication failed; server smtp.gmail.com[64.233.189.109] said: 535-5.7.8 Username and Password not accepted. というメッセージがログに記録されていることを見届ければ終いである。

参考:
Postfix Configuration Parameters
アプリ パスワードでログイン – Gmail ヘルプ

CentOS インストール時の画面解像度を変更する

OS: CentOS Linux 8
VMware Workstaion Pro 15

CentOSのインストールを試みる度に悩まされる事柄が画面の解像度である。インストール画面の右側及び下側が表示領域に収まりきらず文言が見切れたりボタンが押し難くなる。これを改善するにはカーネルの起動パラメータを編集する。

インストーラのブートメニューが表れたらTABキーを押下するとカーネル起動時のパラメータに手を入れる事ができるようになるから、ここで rd.live.check を取り除いて resolution=1280x800 などとして800×600よりも広めの解像度を渡すことで見切れていた箇所を顕にできる。

デフォルトのカーネル起動パラメータ

この際キーボードがUS配列になっているから「=」の入力を実現するには「=」の右隣にある「~ ^ へ」のキーを押し込む。

けれどもパッケージのインストール途中に思いがけず解像度を800×600に戻されてしまいボタンが全く不可視になって却って苦しくなるから、多少の不便を受け入れてデフォルト解像度のままインストールをおこなうほうが結局は首尾よく事が運ぶようである。ままならずもどかしいものである。

すべての情報が表示されて快適な様子1
すべての情報が表示されて快適な様子2
ボタンがまったく表示領域の外へ隠れてしまう様子
カーネル起動パラメータを編集せずにインストールを進めた場合

Windows10の検索ボックスでWeb検索をおこなわないよう設定する

OS: Windows 10 Pro version 1903

素早くバッチファイルを呼び出して実行したりメモ帳のようなアプリケーションを起動するのに誠に有用な検索ボックスであるけれども、検索結果にWeb検索の候補が押し寄せてくるのが大変煩わしいからこれを無効にする。

まず検索ボックスから regedit で以って検索してレジストリエディタを起動する。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search へ移動して新規にDWORD値を追加し BingSearchEnabled と名付ける。データは0のままで宜しい。次いでCortanaConsentのデータも0にする。

改めて検索ボックスから検索をおこなうとWeb検索は最早機能していない。すっきりとして清々しい心持ちである。設定を施しても変化がない事もあったけれどサインインし直すと反映されていた。

コマンドプロンプトから一息に実施するならこういう具合である。

>reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Search" /v BingSearchEnabled /t REG_DWORD /d 0 /f
>reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Search" /v CortanaConsent /t REG_DWORD /d 0 /f

参考:
Win 10編: 検索ボックスから「ウェブ」を取り除く

Ubuntu 18.04でPT3を使用して地上デジタルテレビ放送を拝見できるように手配

OS: Ubuntu 18.04 Desktop
接触型 ICカードリーダライタ CLOUD2700-NTTCom
B-CASカード
PT3

カードリーダCLOUD2700-NTTComとB-CASカードを認識させる

aptで以って必要なパッケージをインストールしたのち、pcsc_scanを実施するとカードリーダとB-CASカードが認識された。放っておくとpcsc_scanは延々スキャンを試みるからいい加減でControl-Cを押下して中断せねばならない。

$ sudo apt install pcscd pcsc-tools libpcsclite-dev
$ pcsc_scan
PC/SC device scanner
V 1.5.2 (c) 2001-2017, Ludovic Rousseau 
Using reader plug'n play mechanism
Scanning present readers...
0: Identive CLOUD 2700 R Smart Card Reader [CCID Interface] (55291450217446) 00 00

(snip)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B F0 12 00 FF 91 81 B1 7C 45 1F 03 99
        Japanese Chijou Digital B-CAS Card (pay TV)

MULTI2の復号ソフトウェアを導入

地上デジタルテレビ放送の放送波はMULTI2と呼ばれる暗号方式によって暗号化されていると言うからそのままでの視聴は叶わない模様である。復号するためのソフトウェアARIB STD-B25ライブラリを導入せねばならない。

$ sudo apt install git cmake dkms
$ git clone https://github.com/stz2012/libarib25.git
$ cd libarib25/
$ cmake .
$ make
$ sudo make install

PT3ドライバの導入

LinuxでもPT3を取り扱えるようにドライバを導入する。カーネルがアップデートされるとドライバの再インストールに迫られ手間であるから、READMEファイルの記載に従い dkms.installを実行してDKMSを有効にする。

$ cd ..
$ git clone https://github.com/m-tsudo/pt3.git
$ cd pt3/
$ make
$ sudo make install
$ sudo bash ./dkms.install

カーネルバージョン3.18以降にはearth-pt3と言う名のDVB版PT3ドライバが存在しているから、先に導入したpt3_drvと張り合いデバイスファイルが生成されない、ということなので此れをロードしないようブラックリストに登録しておく必要がある情勢である。そうしたらマシンを再起動する。

$ sudo vi /etc/modprobe.d/blacklist.conf
blacklist earth-pt3
$ sudo reboot

起動後にカーネルモジュールをあらためるとpt3_drvだけロードされて居る。デバイスファイルも生成されているから良さそうな景色である。

$ lsmod | grep pt3
pt3_drv                45056  0

$ ls -l /dev/pt3video*
crw-rw-rw- 1 root video 241, 0  7月 21 23:42 /dev/pt3video0
crw-rw-rw- 1 root video 241, 1  7月 21 23:42 /dev/pt3video1
crw-rw-rw- 1 root video 241, 2  7月 21 23:42 /dev/pt3video2
crw-rw-rw- 1 root video 241, 3  7月 21 23:42 /dev/pt3video3

recpt1の導入

放送を録画するためのコマンド recpt1 を導入する。もとはPT1用として書き起こされたようであるからPT3でも使用できるようヘッダファイル pt1_dev.h の内容を置き換えてからインストールを実施する。

$ sudo apt install autoconf automake
$ mkdir recpt1
$ wget -c http://hg.honeyplanet.jp/pt1/archive/tip.tar.bz2
$ tar jxvf tip.tar.bz2
$ cd pt1-17b4f7b5dccb/recpt1/
$ sed -i'.orig' 's/pt1video/pt3video/g' pt1_dev.h
$ ./autogen.sh
$ ./configure --enable-b25
$ make
$ sudo make install

recpt1を使用しての録画が恙無くおこなえるか確かめる。コマンドへ引き渡す値はオプションの他、物理チャンネルや録画時間(秒)、録画ファイル名である。またVLCメディアプレーヤーを使用して番組の視聴をするなら録画時間と録画ファイル名を-に置き換えてvlcコマンドへパイプでつなげれば宜しい。

$ recpt1 --b25 --strip 20 60 rec.ts
$ recpt1 --b25 --strip 20 - - | vlc -

やったぜ。

参考:
MULTI2 – Wikipedia
地上デジタル放送 チャンネル表 MASPRO
テレビ周波数チャンネル

コマンドプロンプトから時刻合わせを試みたけれども狙い通りの挙動にならない

OS: Windows 10 Pro version 1809

主として使用しているパソコンの時刻が日本標準時から1.2秒も進んでいたからコマンドプロンプトからチャッと時刻を同期して精密に時計を合わせようと試みたけれどもWindowsの時刻同期は挙動が掴み切れず生半可な知見で臨んだところ忽ち返り討ちである。

w32tmコマンド一度きりの実施で時刻が確り同期される場合もあれば何遍繰り返してもちっとも同期されないケースもあったから困る。まずはコマンドプロンプトを管理者として実行するところから始めねばならない。一先ず時刻同期の様子を確認しようと次のコマンドを流すとこういう有様である。

>w32tm /query /status
次のエラーが発生しました。 そのサービスを開始できませんでした。 (0x80070426)

Windows Time サービス(w32time)が実行されていないとw32tmコマンドの主たる機能が取り扱えないようである。w32timeを開始するにはこうである。

>net start w32time
Windows Time サービスを開始します.
Windows Time サービスは正常に開始されました。

改めて w32tm /query /status を実行すると時刻の同期にCMOS Clockを使うことを発見した。おおかたマザーボードに搭載されているCMOSの時計を照らし合わせに用いるという設定であるとおもうからこれをNICTが公開しているNTPサーバ ntp.nict.jp に切り替える。

>w32tm /query /status
閏インジケーター: 3 (同期未実行)
階層: 0 (未指定)
精度: -23 (ティックごとに 119.209ns)
ルート遅延: 0.0000000s
ルート分散: 0.0000000s
参照 ID: 0x00000000 (未指定)
最終正常同期時刻: 未指定
ソース: Local CMOS Clock
ポーリング間隔: 10 (1024s)

NTPサーバの指定に続けてカンマを配して同期モードを16進数でセットできる風情である。1,2,4はSymmetric ActiveとかいうNTPサーバ同士でやり取りを交わすためのモードであったからクライアントとして使うPCには相応しくないとおもってClientモードを用いる0x8を記述した。

>w32tm /config /update /manualpeerlist:ntp.nict.jp,0x8 /syncfromflags:manual
コマンドは正しく完了しました。

>w32tm /query /status | find "ntp.nict.jp"
ソース: ntp.nict.jp,0x8

そうしたら /resync オプションで以って手づから時刻を同期させる。

>w32tm /resync
再同期コマンドをローカル コンピューターに送信しています
コマンドは正しく完了しました。

ズレが解消されたか確認をすると何ら効果を齎していない風情であった。幾度か実施を繰り返して見たけれどもほとんど動きが見られない。此は如何にとおもって調べるとじわじわと時刻を調整してゆくslewモードと一息に時刻を同期させるstepモードが用意されていて、諸条件を満たすとslewモードになりそうでなければstepモードになるという仕組みである。

>w32tm /monitor /computers:ntp.nict.jp /nowarn
ntp.nict.jp[133.243.238.163:123]:
ICMP: 25ms 遅延
NTP: -1.1755319s ローカル コンピューターの時刻からのオフセット
RefID: 'NICT' [0x5443494E]
階層: 1

slewモードの条件を満たしたから時計がすぐに合わないのだといっときは納得したけれども腰を据えて条件式を計算したところぜんぜん要件を満足しないからstepモードでパッとずれが解消されることが期待される筈であるのにどうも挙動がわからない。

>w32tm /debug /enable /file:"%userprofile%\desktop\w32tm.txt" /size:0 /entries:0-300
プライベート ログを有効にするコマンドをローカル コンピューターに送信しています...
コマンドは正しく完了しました。

>w32tm /resync
再同期コマンドをローカル コンピューターに送信しています
コマンドは正しく完了しました。

>w32tm /debug /disable
プライベート ログを無効にするコマンドをローカル コンピューターに送信しています...コマンドは正しく完了しました。

デバッグログを出力するよう設定して時刻同期を実施した際の内容を眺めたけれどもなんだかむつかしくてslewモードで時計を合わせようとしている情勢で或ることくらいしか掴めない。

もうすっかり厭になってしまって捨て鉢で時刻の自動設定をオフにしてから時刻を徒に大きくずらして改めて時刻を自動的に設定する設定をオンに切り替えたところ、何がどう作用したかは知れないけれども期せずしてstepモードのような働きによって時刻のぶれが慎ましい値へ落ち着いた。

>w32tm /stripchart /computer:ntp.nict.jp /period:5

たいへん強引なやり方であるから決して常用できないけれども退っ引きならない情勢であるときは不承不承この方法を選択せざるを得ない。

参考:
第3回 w32tmコマンドとレジストリによるWindows Timeサービスの制御 (1/4)