[忘備録] Dynamic DNSの設定 w/ Alpine Linux

MyDNS.jpさんのサービスを利用することにしました。設定もとても簡単です。 ここでは、Alpine Linuxでの設定だけメモで書いておきます。

運用方法がユニークでこちらのIPアドレスを定期的にMyDNS.jp側に

  • IMAP/POPでのメールチェック
  • FTPアクセス(w/ ID and Password)
  • HTTP - BASIC認証 or DIRECTアクセス
  • GnuDIP

で知らせることで、MyDNS.jp側のDynamicDNS情報をアップデートします。

私は、サイトのサンプルどおりにcronで毎日HTTP Basic認証で知らせる様にしました。

Alpine はBusyBoxを利用するのでcronもBusyBox内のアプレットで実行されている様です。なので、デスクトップなどでよく利用されるディストリビューションとは違い、cronに渡すパラメータも違いました。少しハマったのでメモ。crondのヘルプはこんな感じ↓

❯ crond --help
BusyBox v1.34.1 (2022-02-02 18:21:20 UTC) multi-call binary.

Usage: crond [-fbS] [-l N] [-d N] [-L LOGFILE] [-c DIR]

	-f	Foreground
	-b	Background (default)
	-S	Log to syslog (default)
	-l N	Set log level. Most verbose 0, default 8
	-d N	Set log level, log to stderr
	-L FILE	Log to FILE
	-c DIR	Cron dir. Default:/var/spool/cron/crontabs

-L がログレベルではないのに注意ですね。

定期的な処理のテーブルは /etc/crontabs の中にユーザー毎に管理されています。 /etc/crontabs/root 内をみると以下の様になっていました。

# do daily/weekly/monthly maintenance
# min	hour	day	month	weekday	command
*/15	*	*	*	*	run-parts /etc/periodic/15min
0	*	*	*	*	run-parts /etc/periodic/hourly
0	2	*	*	*	run-parts /etc/periodic/daily
0	3	*	*	6	run-parts /etc/periodic/weekly
0	5	1	*	*	run-parts /etc/periodic/monthly

/etc/periodic 以下にあるフォルダを run-parts コマンドで実行する様にかかれています。今回は1日に一度、HTTPでベーシック認証を通したいので、dailyフォルダ以下にサイトのサンプルの通り、wgetを実行する様なスクリプトを置いておきます。私は myDns.sh というファイルを置きました。

#!/bin/sh
/usr/bin/wget -O - 'https://mydns000000:PASSWORDhere@ipv4.mydns.jp/login.html'

#!/bin/sh の行はとても重要です! これがないとその時間になって、スクリプトファイルを実行しようとしますが、実行できません。スクリプトが実際に動作するかどうかの確認は run-parts コマンドを利用して実際に動かして試せます。以下の様に

sudo run-parts --exit-on-error /etc/periodic/daily/
run-parts: can't execute '/etc/periodic/daily/myDns.sh': Exec format error

↑の例は #!/bin/sh の行がない場合のテストです。 使い方としてはコマンドの引数にはディレクトリを指定します。そのディレクトリ内のスクリプトをすべて実行してくれます。

crondサービスはデフォルトで起動するようになってると思います。

Logフォルダの設定

BusyBoxを利用しているAlpine Linuxのcronのログファイルの出力先を設定してみます。 標準だと他のメッセージと一緒に扱われているので、別にしたい人も多いのではないでしょうか? /etc/conf.d/crond でコマンドを実行時に渡すオプションを設定できます。ここでは

  • /var/log/cron/cron.log としてログファイルを出力
  • ログレベルは標準

として設定してみます。以下 /etc/conf.d/crondを編集します。

# enter the cron options
CRON_OPTS="-c /etc/crontabs -L /var/log/cron/cron.log -l 8"

設定したら再起動してみます。

❯ sudo service crond restart
 * Caching service dependencies ...                                      [ ok ]
 * Stopping busybox crond ...                                            [ ok ]
 * Starting busybox crond ...                                            [ ok ]
❯ ps aux | grep crond
 8436 root      0:00 /usr/sbin/crond -c /etc/crontabs -L /var/log/cron/cron.log -l 8
 8447 user   0:00 grep crond

うまく設定出来ていると、ログは15分ごとに指定したフォルダ内のファイルに出力されるはずです。

❯ sudo more /var/log/cron/cron.log 
[sudo] password for user: 
crond: crond (busybox 1.34.1) started, log level 8
crond: USER root pid 8443 cmd run-parts /etc/periodic/15min

↑問題なさそうですね。これで一日に一度、正しく動作しているかどうか、確認できそうです。 何か問題がありそうな場合はLog levelをあげるとよさそうですね。

コメント

このブログの人気の投稿

My 3rd DIY Keyboard - Levinson

My 2nd Iris Keyboard

My first - Iris Keyboard -