2024-11-04

PostfixにSMTP Authの設定を追加

はじめに

SMTP認証を行う方法は色々ある。
  • Dovecot の SASL を使用 (たぶん、 PAM を使う。)
  • Cyrus SASL を使用し、 PAM の認証情報を使う。
  • Cyrus SASL を使用し、 Cyrus SASL 用のパスワードデータベースを用意する。
今回は、最後の方法を使用する。 総当たり攻撃を受けてもしパスワードが発覚したとしても、ユーザー名やパスワードを別のものにしておけば、他のサービスへの被害を抑えられるメリットがあるだろうという考え。

環境

OS: AlmaLinux release 9 (Rocky Linux release 8 での設定も付記する)

インストールとセットアップ

Cyrus SASLのライブラリをインストールする。 (`cyrus-sasl` は不要)
sudo dnf install cyrus-sasl-{lib,md5,plain}
予め、 Letsencrypt の証明書を取得しておき、 /etc/postfix/main.cf に以下を設定する。
smtpd_tls_cert_file = /etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/example.com/privkey.pem
smtpd_sasl_local_domain=$mydomain
smtpd_sasl_security_options=noanonymous
/etc/postfix/master.cf に以下を設定する。
smtps     inet  n       -       n       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
/etc/sasl2/smtpd.conf に以下を設定する。 (mech_list の設定は削除する。または、 cram-md5 digest-md5 plain login を設定する。)
pwcheck_method: auxprop
ユーザーを追加し、パスワードを設定する。 (ユーザー名は適宜置き換えること。ドメイン名は smtpd_sasl_local_domain と同じものにする。) なお、パスワードを変更するだけの場合、オプション -c を付けない。
sudo saslpasswd2 -c -u example.com user1
パスワードデータベースにグループ sasl を設定し、ユーザー postfix を所属させる。
sudo groupadd sasl
sudo groupmems -a postfix -g sasl
sudo chgrp sasl /etc/sasl2/sasldb2
sudo chmog g+r /etc/sasl2/sasldb2
Note: EL8 では、 /etc/sasldb2 にパスワードファイルが存在する。

設定をチェックし、問題なければ Postfix を再起動する。

sudo postfix check
sudo systemctl restart postfix
OpenSSL で確認する。 (接続時に Verify return code: 0 (ok) が表示され、 EHLO に対して 250-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN が帰ってきたらOK。)
openssl s_client -connect localhost:smtps
EHLO localhost
ファイアウォールを設定する。
sudo firewall-cmd --add-service smtps
sudo firewall-cmd --permanent --add-service smtps

2024-09-21

Postfix に DKIM の設定を行う方法

はじめに

DMARCでメールの検証を行うには、SPFとDKIM両方を設定しないといけない。 この記事では、DKIMの設定を取り上げる。

DKIMの概要

SPF が配送もとの IP アドレス (つまりヘッダーの `Received: from helo-host.example.org (resolved-host.example.org [192.0.2.27])` の部分) を検証するのに対して、 DKIM では、メールを配送する際に、主要なヘッダー情報 (`Date`, `From`, `Reply-To`, `To`, `Subject` など) に対して署名を付加する。 公開鍵を DNS の TXT レコードに設定することになっており、受信側のメールサーバーで署名を検証する。

SPF と同様に DNS レコードを使ってメールを検証するので、 DNS が改ざんされると第三者がなりすましメールを送ることができてしまう。また、メール本文の改ざんは DKIM では検知できない。

設定手順

このセクションでは、 EL9 (AlmaLinux 9 や Rocky Linux 9) 上の Postfix で DKIM 署名を付加するための設定を説明する。 EL8 でもほぼ同様の方法で設定できる。

OpenDKIM のインストール

前もって CRB と EPEL をインストールしておき、以下のコマンドで OpenDKIM をインストールする。
sudo dnf --enablerepo=epel,crb install opendkim opendkim-tools

キーの作成

cd $(mktemp -d)
opendkim-genkey --directory ./ --domain example.com --selector 20240921 --bit 2048 --append-domain
sudo cp 20240921.private /etc/opendkim/keys/ -i
sudo chown opendkim:opendkim /etc/opendkim/keys/20240921.private

DNSレコードの設定

公開鍵が記載されたファイル 20240921.txt が生成されるので、これを参照してDNSレコードを設定する。 上記の例の場合、 20240921._domainkey.example.com. の TXT レコードを設定する。 TXT以降はカッコでかこまれてダブルクオートがついているが、例えば Cloudflare の DNS 場合は、カッコ・ダブルクオート・改行を取って Content に登録する。

設定ファイルの編集

sudo cp /etc/opendkim.conf /etc/opendkim.conf-20240921
sudoedit /etc/opendkim.conf
以下のように編集して保存する。
@@ -36,7 +36,7 @@
 ##  Selects operating modes. Valid modes are s (sign) and v (verify). Default is v.
 ##  Must be changed to s (sign only) or sv (sign and verify) in order to sign outgoing
 ##  messages.
-Mode	v
+Mode	sv
 
 ##  Log activity to the system log.
 Syslog	yes
@@ -101,12 +101,12 @@
 ##  Gives the location of a file mapping key names to signing keys. In simple terms,
 ##  this tells OpenDKIM where to find your keys. If present, overrides any KeyFile
 ##  directive in the configuration file. Requires SigningTable be enabled.
-# KeyTable	/etc/opendkim/KeyTable
+KeyTable	/etc/opendkim/KeyTable
 
 ##  Defines a table used to select one or more signatures to apply to a message based
 ##  on the address found in the From: header field. In simple terms, this tells
 ##  OpenDKIM how to use your keys. Requires KeyTable be enabled.
-# SigningTable	refile:/etc/opendkim/SigningTable
+SigningTable	refile:/etc/opendkim/SigningTable
 
 ##  Identifies a set of "external" hosts that may send mail through the server as one
 ##  of the signing domains without credentials as such.

sudoedit /etc/opendkim/KeyTable
以下の1行を加える。
20240921._domainkey.example.com example.com:20240921:/etc/opendkim/keys/20240921.private

sudoedit /etc/opendkim/SigningTable 
以下の1行を加える。
*@example.com 20240921._domainkey.example.com

OpenDKIMを起動する

sudo systemctl enable --now opendkim.service
sudo systemctl status opendkim.service

Postfixの設定

cd /etc/postfix/
sudo cp main.cf main.cf-20240921
sudoedit main.cf
以下の3行を追加する。
smtpd_milters = local:/run/opendkim/opendkim.sock
non_smtpd_milters = local:/run/opendkim/opendkim.sock
milter_default_action = accept
もしローカルからしか配送しないなら、 smtpd_milters は設定しなくてよさそう。

Postfixを再起動する

グループも設定したので、再起動する。
sudo systemctl restart postfix
sudo systemctl status postfix

動作確認

TXTレコードが設定されているかどうか確認する。
dig txt 20240921._domainkey.example.com
他のメールサーバーへ送信してみる。 Gmailなどへ送付すれば、「メッセージのソースを表示」からDKIMの検証状況を確認できる。
date -R | mutt -s 'DKIM key should be added' user@example.org
もし問題があれば、 /etc/postfix/main.cf をもとに戻して確認しよう。

小言

SSLのように外部の機関に認証してもらう必要がなく、コストがかからないのがありがたい。

参考

2024-07-28

GCCでは文字列リテラルをstrlenへ渡すと定数に展開される

最近のGCCは標準関数を使ったコードがコンパイル時に計算されてしまうことがあって、良くできている。 例えば、GCCで文字列リテラルを strlen へ渡すと、定数に置き換えられる。

入力コード例: リテラル文字を strlen で数えて返す関数。

#include <string.h>

int func()
{
	return strlen("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
}
私の手元にある gcc 13.3.1 20240522 (Red Hat 13.3.1-1) を使用してコンパイルする。
$ cc -O1 -S a.c
コンパイル結果: -O1 でコンパイルしたところ、26を返すだけの関数にコンパイルされる。
func:
.LFB0:
	.cfi_startproc
	movl	$26, %eax
	ret
	.cfi_endproc

具体的な使用例としては、マクロ定義したリテラル文字をその長さと一緒に strncmp へ渡すときのような場合があるだろう。

#define PREFIX "com.example."
int check_prefix(const char *text)
{
	if (strncmp(text, PREFIX, strlen(PREFIX)) == 0)
		return 1;
	return 0;
}
このようなコードを書いた時、 strlen が呼び出されるので処理時間が無駄になるなどと考える必要はない。

2024-07-16

Screenの設定により、Screen上のVimの起動時に誤動作

Screenの中でVimを起動するとなぜか変な文字が入力されるという問題が起こっていたのだけれど、ようやく回避方法がわかった。

前提として、 .screenrc に以下のように設定して Ctrl+G で screen のコマンドを入力するようにしていた。 これを他のキーに変えると問題が起こらない。

.vimrc に以下の記述を加えると、問題が起こらなくなった。

if &term=="screen.xterm-256color"
        set t_RB=
endif
このことから、t_RB (request terminal background color) が悪さをしているらしい。 おそらく、リクエストを出すと screen を通り越して端末に伝わり、端末が結果を返すときに、私が割り当てた Ctrl+G のコードが送られ、それを screen が処理してしまうのだろう。

最終的に、以下のように記述することにした。

if &term=="screen.xterm-256color"
        " For .screenrc setting 'escape ^Ww', t_RB caused an issue.
        " Let's disable all request-type termcap settings.
        set t_RB= t_RF= t_RC= t_RI= t_Ri= t_RS= t_RT= t_RV=
endif

2024-06-30

youtube-dl: 音声だけをダウンロードする方法

フォーマットの一覧を取得
youtube-dl --list-format URL
出力例:
251          webm       audio only audio_quality_medium  118k , webm_dash container, opus  (48000Hz), 23.18MiB
140          m4a        audio only audio_quality_medium  129k , m4a_dash container, mp4a.40.2 (44100Hz), 25.25MiB
160          mp4        256x144    144p   53k , mp4_dash container, avc1.4d400c, 30fps, video only, 10.35MiB
134          mp4        640x360    360p  219k , mp4_dash container, avc1.4d401e, 30fps, video only, 42.87MiB
136          mp4        1280x720   720p  900k , mp4_dash container, avc1.64001f, 30fps, video only, 175.69MiB
137          mp4        1920x1080  1080p 1957k , mp4_dash container, avc1.640028, 30fps, video only, 381.82MiB
18           mp4        640x360    360p  316k , avc1.42001E, 30fps, mp4a.40.2 (44100Hz), 61.65MiB (best)

特定のフォーマットだけを選択してダウンロード (この例では251)

youtube-dl -k -f 251 URL

2023-12-26

macOSのbashでzshに変更するよう促すメッセージを消す方法

macOS上のbashを使おうとすると、以下のようなメッセージが出力される。
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
これを消すには、 ~/.bashrc などbashが起動したときに読み込まれるファイルに以下の記述を加える。
export BASH_SILENCE_DEPRECATION_WARNING=1

2023-06-25

lcov function coverage lines

新しいlcovで作ったファイルを古いlcovに読ませると、ファンクションカバレッジが半減するようになった。 どうも新しいlcovでは関数定義の開始・終了行を記録するようになったらしく、古いlcovでそのまま読ませると、終了行を関数名と認識するらしい。

バージョン番号の違いまでは追っていないが、最近1-2周間ほどの間に、CIのmacOS上でbrewを使ってインストールしたlcovのデータを、Linuxマシンのlcovでマージさせようとするとこの問題が起こった。

以下は新しいlcovの出力例:

SF:/Users/runner/work/obs-studio-cirun/obs-studio-cirun/obs-studio/libobs/callback/decl.h
FN:32,37,decl_param_free
FN:45,55,decl_info_free
FNDA:113041,decl_param_free
FNDA:77756,decl_info_free
以下は古いlcovで同じファイルを処理した例:
SF:/home/runner/work/obs-studio-cirun/obs-studio-cirun/obs-studio/libobs/callback/decl.h
FN:32,decl_param_free
FNDA:2,decl_param_free
FN:45,decl_info_free
FNDA:11,decl_info_free

sedで以下のように処理することにした。

sed -i 's;^FN:\([0-9]*\),\([0-9]*\),;FN:\1,;'

2023-05-18

lcov on macOS

macOS上でLCOVを使用しカバレッジレポートを取る方法を説明する。

インストール

brew install llvm lcov w3m

CMakeのシンプルな設定例

CMakeLists.txt:
cmake_minimum_required(VERSION 3.16)
project(a VERSION 0.1.0)

add_compile_options(-fprofile-arcs -ftest-coverage)
add_link_options(--coverage)

add_executable(a a.c)
以下の設定を試したが、生成されるカバレッジデータのフォーマットが異なり、LCOVで処理する方法がわからなかった。
# add_compile_options(-fprofile-instr-generate -fcoverage-mapping)
# add_link_options(-fprofile-instr-generate -fcoverage-mapping)
その他、以下のファイルを準備する。 llvm-gcov.sh:
#! /bin/bash
exec `brew --prefix llvm`/bin/llvm-cov gcov "$@"

ビルドし実行

以下のどちらでも良さそう。
cmake -G Xcode -B build .
cmake --build build
cmake -B build .
(cd build/ && make VERBOSE=1)
./build/a
実行して正常終了すれば、*.gcda*.gcnoというファイルができているはず。

カバレッジの取得

以下のコマンドで、LCOVのデータを作成し、HTMLを作成する。(そしてw3mで開く。)
lcov -c -d ./ -o lcov.info --gcov-tool $PWD/llvm-gcov.sh
genhtml -q lcov.info -o ./coverage/
w3m ./coverage/index.html

参考にしたサイト

2023-05-03

iptables hashlimitを使ったSSH攻撃のログ削減

SSHサーバーを運用していると、ユーザー名・パスワードの総当たり攻撃を受けることがある。ログが膨らんで嫌なので、減らす方法をメモする。

接続の試行を複数回行わないと、SSH接続を受け付けなくする。これにより、SSHサーバーが走っていることに気づかれない。この代償として、自身で接続するときには何度かSSHコマンドを打ち直す必要がある。

以下の例だと、最初の10回分の接続はドロップする。必要に応じて、sourceのネットワークを限定するか、リミット値を調整すると良いだろう。

sudo iptables -I INPUT 1 -p tcp -m tcp -m state --state NEW --dport 22 -m hashlimit --hashlimit-upto 50/hour --hashlimit-burst 10 --hashlimit-mode srcip,dstport --hashlimit-name ssh-limit -j DROP

ちなみに、--hashlimit-burst2くらいに設定すると、SSH接続するときに数秒の待ち時間で接続できるが、SSH攻撃はさほど減らなかった。

2023-02-20

avrdude: target doesn't answer というエラーが出るときの対処

問題

ATtiny44Aを使った回路を組んだところ、以下のようなエラーが出て、プログラムできなくて困っていた。
$ avrdude -v -c usbasp -p t44 -U signature:r:/dev/stdout:i
avrdude: error: program enable: target doesn't answer. 1 
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

このようなトラブル時に何を試行錯誤すると良いのかも含め、備忘録として残しておく。

解決方法

結局のところ、SCKの周波数が高いことが原因だったようで、-B 10をつけて解決した。

以下が実行例。

$ avrdude -B 10 -F -c usbasp -p t44 -U signature:r:/dev/stdout:i

avrdude: set SCK frequency to 93750 Hz
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9207 (probably t44)
avrdude: reading signature memory:

Reading | ################################################## | 100% 0.00s

avrdude: writing output file "/dev/stdout"
:030000001E920746
:00000001FF

avrdude: safemode: Fuses OK (E:FF, H:DF, L:62)

avrdude done.  Thank you.

試行錯誤

情報通りに-Fをつけて試しにsignatureを読んでみると、以下のように変なdevice signatureが表示され、この値が毎回変わる。
$ avrdude -F -c usbasp -p t44 -U signature:r:/dev/stdout:i

avrdude: error: program enable: target doesn't answer. 1 
avrdude: initialization failed, rc=-1
avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x37f912
avrdude: Expected signature for ATtiny44 is 1E 92 07

avrdude done.  Thank you.

データシートを再確認し、ATtiny44AはATtiny44と同じsignatureが書かれているようなので、-p t44でプログラムできることを確かめた。配線間違いが心配になり、配線を再確認したが異常は見つからない。

Verboseオプションをつけて表示される内容を確認した。 すると、以下のような情報が表示されていたので、SCKを遅くしたところ動作した。

avrdude: auto set sck period (because given equals null)

2022-09-20

Linux: Firefoxのツールチップ

Firefoxを開いた状態でマウスをあるウインドウから別のウインドウへ動かしたときにFirefoxの上を通過すると、ツールチップが開いたままになることがある。これによって移動先のウインドウが隠れてしまう。

これを回避するため、browser.chrome.toolbar_tipsfalseに設定してみた。

根本的な解決ではないが、上記の問題はタブのツールチップによって引き起こされていたので、これで様子をみてみる。 ウインドウが非アクティブのときにツールチップが出ないようにしたかったが、そのような設定は見つからなかった。

2022-09-01

RPMとDPKGとの比較

最近Ubuntuを使うことが出てきたが、パッケージツールの使い方で苦労している。RPMとDPKGとの違いをまとめておく。
rpm dpkg
rpm -qa dpkg -l
rpm -ql pkg-name dpkg -L pkg-name
rpm -qi pkg-name dpkg -s pkg-name
rpm -e pkg-name dpkg -r pkg-name
rpm -qf /path/to/file dpkg -S /path/to/file
DNFとAPTの比較もまとめておく。
dnf apt
dnf provides */file apt-file search file
なお、apt-fileを使用するには、パッケージをインストールする必要がある。
sudo apt install apt-file
sudo apt-file update

外部のレポジトリは、 add-apt-repository というコマンドで追加できる。software-properties-commonというパッケージをインストールする。

sudo apt install software-properties-common

2022-08-24

MOTU M2 on Fedora 35

Fedora 35でdnf updateにより、MOTU M2を使用できなくなった。 どうやらalsaの更新が原因だった。

Googleで検索していると、以下のバグレポートと修正を見つけた。 /

以下のようにalsa-ucm-confの修正をパッチにして、手元の設定に当てた。

gh repo clone alsa-project/alsa-ucm-conf
cd alsa-ucm-conf/
git show 3a6acaa509 > /tmp/motu-m2-ucm2.patch
cd /usr/share/alsa
sudo patch -p1 < /tmp/motu-m2-ucm2.patch

2022-08-09

Intel上のmacOSでarm64のbrew bottleをダウンロードする

Intel macでarm64用のパッケージをビルドするために、arm64版のbrew bottleをダウンロードしたい。 その手順を残しておく。

手順

  1. 別のディレクトリに Homwbrew をインストールする。
    sudo mkdir /opt/brew-aarch64
    sudo chown ${USER}:staff /opt/brew-aarch64
    cd /opt/brew-aarch64
    curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1
    
  2. brewの動作に必要なツールをインストールする。
    PATH=/opt/brew-aarch64/bin:$PATH brew install ruby
    export PATH=/opt/brew-aarch64/bin:$PATH
    export HOMEBREW_PREFIX=/opt/brew-aarch64/
    
  3. brewスクリプトのアーキテクチャを取得する箇所を書き換え、arm64に変更する。Catalinaを使用しているので、強引にBig Surに書き換える。以下に変更箇所を示す。
    diff --git a/Library/Homebrew/brew.sh b/Library/Homebrew/brew.sh
    index cbe08846a..925c39706 100644
    --- a/Library/Homebrew/brew.sh
    +++ b/Library/Homebrew/brew.sh
    @@ -5,7 +5,7 @@
     
     # Doesn't need a default case because we don't support other OSs
     # shellcheck disable=SC2249
    -HOMEBREW_PROCESSOR="$(uname -m)"
    +HOMEBREW_PROCESSOR='arm64'
     HOMEBREW_PHYSICAL_PROCESSOR="${HOMEBREW_PROCESSOR}"
     HOMEBREW_SYSTEM="$(uname -s)"
     case "${HOMEBREW_SYSTEM}" in
    @@ -425,7 +425,7 @@ then
       HOMEBREW_PRODUCT="Homebrew"
       HOMEBREW_SYSTEM="Macintosh"
       [[ "${HOMEBREW_PROCESSOR}" == "x86_64" ]] && HOMEBREW_PROCESSOR="Intel"
    -  HOMEBREW_MACOS_VERSION="$(/usr/bin/sw_vers -productVersion)"
    +  HOMEBREW_MACOS_VERSION="11.0"
       # Don't change this from Mac OS X to match what macOS itself does in Safari on 10.12
       HOMEBREW_OS_USER_AGENT_VERSION="Mac OS X ${HOMEBREW_MACOS_VERSION}"
     
    diff --git a/Library/Homebrew/system_config.rb b/Library/Homebrew/system_config.rb
    index a019aa4de..ab8aa002f 100644
    --- a/Library/Homebrew/system_config.rb
    +++ b/Library/Homebrew/system_config.rb
    @@ -118,7 +118,7 @@ module SystemConfig
     
         sig { returns(String) }
         def kernel
    -      `uname -m`.chomp
    +      "arm64"
         end
     
         sig { returns(String) }
    diff --git a/Library/Homebrew/hardware.rb b/Library/Homebrew/hardware.rb
    index 52bf2e5e8..80ae69329 100644
    --- a/Library/Homebrew/hardware.rb
    +++ b/Library/Homebrew/hardware.rb
    @@ -57,17 +57,7 @@ module Hardware
     
           sig { returns(Symbol) }
           def arch_64_bit
    -        if arm?
    -          :arm64
    -        elsif intel?
    -          :x86_64
    -        elsif ppc64le?
    -          :ppc64le
    -        elsif ppc64?
    -          :ppc64
    -        else
    -          :dunno
    -        end
    +        :arm64
           end
     
           def arch
    
  4. パッケージをダウンロードする。(下記の例では、openblas)
    brew fetch --force-bottle openblas
    brew fetch --force-bottle gfortran
    
  5. 次回から使用する際は、以下のようにbashで設定する。(うっかりbrew installでインストールしないよう、プロンプトも変更しておく。)
    export PATH=/opt/brew-aarch64/bin:$PATH
    export HOMEBREW_PREFIX=/opt/brew-aarch64/
    PS1='[\u@\h \W brew-arm64]\$ '
    

2022-07-19

2022-06-26

wrong port forwarding

Crontabに遠隔のマシンから自宅へのポートフォワードの設定を入れようとして、とんでもない間違いを犯してしまった。
  flock -w 3600 /dev/shm/.ssh-forward.lock ssh -NfR 12345:localhost:22 example.com
この設定を入れたところ、遠隔側のNATのテーブルを使い果たしてしまった。
  • 間違い1: -fオプションをつけたので、ロックが働いていなかった。
  • 間違い2: ExitOnForwardFailureを設定しなかったので、ポートフォワード失敗してもそのままセッションが張られていた。

正しくは、以下のように記載するべき。

  flock -w 3600 /dev/shm/.ssh-forward.lock ssh -o ExitOnForwardFailure=yes -NR 12345:localhost:22 example.com

2022-04-19

Spamhausへブラックリスト解除を申請

KagoyaのVPSを借りたところ、以下の550メッセージでoutlook.com宛のメールを送信できないことが判明した。
    apc.olc.protection.outlook.com[104.47.57.161] said: 550 5.7.1 Service
    unavailable, Client host [133.18.xxx.xxx] blocked using Spamhaus. To request
    removal from this list see https://www.spamhaus.org/query/ip/133.18.xxx.xxx
    (AS3130). [DM6NAM11FT040.eop-nam11.prod.protection.outlook.com] (in reply
    to MAIL FROM command)

上記のURLへアクセスしたところ、delistの申請を進めることができ、1時間ほどでメールを送れるようになった。

それにしても、新たに借りたVPSがこのような状態になっているのは困る。 同じようなことが続くなら、他のVPSを借り直すか、VPSはやめて自宅サーバー経由でプロバイダ経由の送信にするかなど思案中。

その他にも、ブラックリストのチェックを行えるサイトがあるらしい。 次に借りるときは、使用期間中に調べるようにしよう。

  • Spamhaus
  • MX toolbox
  • blacklistalert.org
  • 2022-02-28

    ウインドウサイズをxdotoolで設定する方法

    xdotoolを使うと、ウインドウのサイズをコマンドから設定できる。1920x1080などきりのいい大きさに設定することで、ソフトの使用方法の解説動画を作る際に役立つだろう。
    xdotool search --name 'name of the window' windowsize %@ 1920 1080
    

    2022-02-27

    FFmpegでPulseAudio入力の量子化ビット幅を設定する方法

    FFmpegでPulseAudioの音声を録音する際、デフォルトでは16ビットになる。 24ビットや32ビットに設定するには、 -c:a オプションを使用する。

    例えば、以下のようなコマンドで、32ビットで録音することができる。

    -c:a pcm_s32le -f pulse -i alsa_input.device_name.analog-stereo -c pcm_s32le output.wav
    

    なお、 -cオプションを使用した場合、中途半端に設定が変わるようで、左右のデータが混じったりと正しく動作しない。 ソースコードを追ったところ、pulse audioへはS16LEを要求し、受け取ったデータを -c で設定したフォーマットでそのまま処理するように見える。

    2021-12-02

    すでに起動したプロセスの出力をリダイレクト

    起動済みのプロセスの出力のリダイレクトを変更する方法をメモする。 特に、バックグラウンドでプロセスを起動した後、出力を/dev/nullへリダイレクトしたくなることがある。

    GDBでプロセスにアタッチする。

    gdb -p 874046
    

    以下のようにdup2を使う。
    p (int)dup2((int)open("/dev/null", 00000, 0000), 0)
    p (int)dup2((int)open("/dev/null", 02101, 0777), 1)
    p (int)dup2((int)open("/dev/null", 02101, 0777), 2)
    detach
    quit
    

    第2引数 (flags) のコードは、主要なものは以下の通り。
    O_RDONLY00
    O_WRONLY01
    O_RDWR02
    O_CREAT0100
    O_APPEND02000