VirtualboxゲストOSでSDカードを使う

カーナビ地図をアップデートしようとしたらWindowsかMac必須だったのでVirtualboxを使ったメモ。
USB接続のSDカードリーダーは持っている前提。

Win10環境を用意

Ubuntuとラズパイしか持ってないので、まずはVirtualbox上にWin10をゲストOSとして入れる。
Microsoftがデベロッパー向けにWin10のVMイメージを公開してるのでそれを使う。
無償で90日間利用可能なのでこれで十分。

Virtual Machines – Microsoft Edge Developer

Virtualbox用のzipファイルをダウンロードしたら解凍する。
中に .ova ファイルが入っているので、このファイルをVirtualboxの[ファイル]>[仮想アプライアンスのインポート]で取り込む。

USBを使えるようにする

こちらのQiitaの記事を参考にして、USBを使えるようにする。

VirtualBoxでのUSBデバイス認識 – Qiita

Extensionパックは入れてたけどvboxusersグループに参加させてなかったわ。

sudo usermod -aG vboxusers ユーザー

このあとUSBデバイスフィルターでSDカードリーダーを追加。
それから一旦カードリーダーを取り外した状態でWin10を起動。
※つなげたまま起動してもUSBデバイス認識に失敗する。

OS起動後にUSBつなげたらゲストOS上でSDカードを認識。
それからカーナビの地図データダウンローダーを実行して、無事地図更新用SDカードを作成出来た。

GCE:Postfix+SendGridでメール送信

家のメル鯖をロリポからGCPに移設したのでメモ

まずはCompute Engineでf1-microマシンを立てる。
OSはいつものUbuntu 18.04

セットアップ

まずはPostfix+Dovecotをインストール。

手順はこちらを参考。
Ubuntu 18.04 LTS : Postfix : インストール : Server World
上記サイトの手順を参考にしてPostfix、Dovecot、SSL/TLSの設定までやっておく。

そしてGCPのVPC Firewall設定で、Postfix+Dovecotが動いてるVMのインスタンスに対して使用するポートを穴あけしておく事。
今回の設定だと最低限インバウンドで tcp 25, 465, 995など必要なものをあける。

header_checks設定を有効化

ついでにheader_checksの設定を有効にして怪しい添付ファイル付きのメールをブロックする設定を追加。

# /etc/postfix/main.cf
header_checks = regexp:/etc/postfix/header_checks

そして header_checks ファイルを作成して保存。
ルールに一致したメールは全て DISCARD で破棄。

# /etc/postfix/header_checks
/^X-Mailer:.*PostMaster General/ DISCARD
/name=.*\.scr/ DISCARD
/name=.*\.exe/ DISCARD
/name=\".*\.inf\"/ DISCARD
/name=\".*\.scr\"/ DISCARD
/name=\".*\.pif\"/ DISCARD
/name=\".*\.bat\"/ DISCARD
/name=\".*\.dll\"/ DISCARD
/name=\".*\.vbs\"/ DISCARD
/name=\".*\.reg\"/ DISCARD
/^Return-Path:.*<#.*@.*>/ DISCARD
/^From:.*<#.*@.*>/ DISCARD

header_checksファイルを作成後、postmapでheader_checks.dbを作成。

sudo postmap /etc/postfix/header_checks

SendGridへのリレー設定

GCEはOP25BによってVPCネットワーク外部へのtcp25番接続が出来ない。
外部からGCEインスタンスへのtcp25番接続はVPC Firewall設定を開ければ可能。

というわけでPostfixのrelayhost設定を使ってSendGridの465番ポート経由でメールを送る。

下記を参考にしてSendGridを有効化する。
SendGrid でのメールの送信
リンク先ではtcp2525番を使ってるけど、SSLを使いたいのでtcp465番にした。

# /etc/postfix/main.cf
relayhost = [smtp.sendgrid.net]:465
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_tls_security_level = encrypt
header_size_limit = 4096000
smtp_tls_wrappermode = yes

sasl_passwdは先程のGCPのドキュメントのとおり作成しておく。
そしてpostfix reload で設定をリロード。

DNS設定を変更

忘れずにDNSでVMに対するAレコードと、MXレコードを作成して反映を待つ。

さらに、SendGrid経由だとメールが届かないドメインがちらほら存在するので、SendGridにSPF設定をしておく。

こちらの手順で Sender Authentication をすればOK.
指定されたCNAMEレコードを3件DNSに追加するだけ。
How to set up domain authentication | SendGrid Documentation

PostfixとDovecotのSSL/TLS関連設定

LPIC2の勉強ついでにPostfixとDovecotのSSL/TLS関連の設定パラメータのまとめをメモ

Postfix
master.cfの設定

#/etc/postfix/master.cf
smtps     inet  n       -       y       -       -       smtpd

main.cfの設定

#/etc/postfix/main.cf
smtpd_tls_security_level = may
#smtpd_use_tls = yes #2.2以前
#強制する場合
#smtpd_tls_security_level = encrypt
#smtpd_enforce_tls = yes #2.2以前
smtpd_tls_cert_file = /etc/postfix/cert.pem
smtpd_tls_key_file = /etc/postfix/key.pem
#smtpd_tls_CAfile = /etc/postfix/CAcert.pem

Dovecot
conf.d配下にある10-sslの設定

#/etc/dovecot/conf.d/10-ssl
ssl = yes
ssl_cert = </etc/dovecot/dovecot.pem
ssl_key = </etc/dovecot/private/dovecot.pem
#ssl_ca = 

postfixは「tls」で、dovecotは「ssl」がキーワード

Samba: smb.confの設定名が分かりづらい

smb.confのパラメータ名がpasswordだったりpasswdだったりゆらぎがあるのでメモ

略さないもの(password)
pam password change
unix password sync
encrypt passwords
null passwords
password server

略すもの(passwd)
passwd chat
passwd program
passdb backend
smb passwd file

設定じゃないけどユーザー管理コマンドは smbpasswd
ややこしい。

またしてもAmazonJSが動かないので使うのやめた

またしてもAmazonJSが動いてなかったのでメモ。
PAAPI5.0がTooManyRequestsExceptionというエラーを出してた。

TooManyRequests

Error

com.amazon.paapi5#TooManyRequestsException

com.amazon.paapi5#TooManyRequestsException
TooManyRequests: The request was denied due to request throttling. Please verify the number of requests made per second to the Amazon Product Advertising API.

で、もうAmazonJS使わないでAmazonアソシエイトの公式商品リンクを使うようにした。
しかし公式商品リンクって重いのよね。
インプレッションカウント用の1×1ピクセルの画像が遅いという情報を見つけた。

というわけで過去にAmazonJSで作ったリンクはぼちぼち作り直します。

Ubuntu 19.10で韓国語入力を使う

Ubuntuで韓国語入力を使いたかったのでメモ

まずはibusではなくてfcitxを使って日本語入力を出来る状態にしておく。
手順は前に書いたこちらの記事のとおり。

Ubuntu 19.10の日本語入力をfcitx-mozcにする

fcitxが動くようになったら、fcitx-hangulをインストールする。

sudo apt install fcitx-hangul

再ログインすると、Fcitxの入力メソッドで「Hangul」を選べるようになってる。

Fcitxで韓国語入力

これでUbuntu上で韓国語入力が可能になった。
Fcitx-mozcと同様に右Altのトグルで韓/ENを切り替えられるのでラク。

Debian10をNFSサーバーにする

DebianをNFS鯖にしたのでメモ

まずはサーバー側に必要パッケージをインストール

sudo apt install nfs-kernel-server portmap -y

/etc/exports にエクスポート設定を記述
この例では/shareを共有

/share	10.0.0.0/255.255.255.0(rw,sync,no_subtree_check)

/etc/hosts.allowに許可設定を追加

portmap: 10.0.0.0/255.255.255.0

その後nfs-kernel-serverを再起動すればエクスポートされる。
もしくは exportfs -r でエクスポートし直す。

sudo exportfs -r

続いてクライアント側。
下記はUbuntuでの例。
nfs-commonをインストールする。

sudo apt install nfs-common

それからマウントすればOK

sudo mount -t nfs 10.0.0.101:/share /mnt/nfs

AmazonJSが動かないと思ったらPA API 5.0に移行してた

WordPressのAmazonJSプラグインが正常に動作してなかったのでメモ。

先日Amazonアソシエイトから「PA API 5.0にアップグレードしろ」というメールが来てた。
件名は「IMPORTANT UPDATE – Upgrade to PA API 5.0 before PA API 4.0 shuts down on March 9, 2020」。

AmazonJSプラグインが勝手にバージョンアップしてくれんだろwって適当にスルーしてたら、どうやらとっくに対応してたようだ。

というのも、Amazon商品リンクを記事に追加しようとしたら、こんなエラーが出た。

Error

com.amazon.paapi5#AccessDeniedException

com.amazon.paapi5#AccessDeniedException
AccessDenied: The Access Key Id ******************** is not enabled for accessing Product Advertising API. Please sign up for Product Advertising API at https://affiliate.amazon.co.jp/assoc_credentials/home.

PA API 5.0のエラー

com.amazon.paapi5#AccessDeniedExceptionというエラーは、PA API 5.0の認証エラーでした。
Error Messages · Product Advertising API 5.0

要は、AmazonJSの設定に登録されてるAPIキーがPA API 5に対応してない古いキーだという事。

解決策

アソシエイト・セントラルから新しいAPIキーとAPIキーシークレットを取得してAmazonJSに登録する。

これだけ。簡単。

新しいキーとシークレットは、アソシエイト・セントラルの中の、
[ツール] > [Prodcut Advertising API] で作成出来ます。

作成した新しいAPIキーとシークレット

そしたら、また下記のように商品リンクが出てきました。

※2020/2/23追記
と思ったらやっぱりまた動かないので、AmazonJS使うのやめて公式商品リンク使う事にした。

Debian 10でNICを2枚同時に有効にする

VirtualBoxにインストールしたDebianで、デフォルトのNICとホストオンリーNICを同時に有効化したかったのでメモ

GUIからだとどちらか一方しか有効化出来ない。
対策は、/etc/networks/interfaces.d/setup を下記のように編集して再起動。
これでデフォルトのNICとホストオンリーNICの両方を同時に利用可能になる。

# /etc/network/interfaces.d/setup

auto lo
iface lo inet loopback

allow-hotplug enp0s3
iface enp0s3 inet dhcp

allow-hotplug enp0s8
iface enp0s8 inet static
address 10.0.0.101
netmask 255.255.255.0

enp0s3がデフォルトのNICで、enp0s8がホストオンリーのNICである。

Ubuntu 18.04 でsarを使う

Ubuntuにsarがなかったのでメモ

sysstatパッケージに入ってるのでインストール

sudo apt install sysstat -y

/etc/default/sysstat を編集してENABLEDをtrueにする

ENABLED="true"

/etc/cron.d/sysstatの実行間隔を任意で変更する。

そしてsysstatを再起動

sudo systemctl restart sysstat

実行。例えば5日のファイル。

sar -A -f /var/log/sysstat/sa05

sadfで整形するなら — 以降にsarオプションを渡す。

sadf /var/log/sysstat/sa05 -t -- -A