Alpine Linux を自動アップデートする備忘録

Server
Photo by hyt.

Alpine Linux を自動アップデートする備忘録です.

前記事

Alpine Linux インストール備忘録
Apine Linux インストール備忘録です. Alpine Linux ってなに? Alpine Linux と言えば,最近 Docker なんかのコンテナのベースとして利用されるディストリビューションです.これ,Linux のディスト...

では Alpine Linux のインストールと最低限のパッケージと設定の追加を行いましたが,私の場合はアップデートも自動化したい.要するに,CentOS の yum-cron パッケージと同じようにできると嬉しい.と言うことで,調べてみた結果は以下の通りです.

方法1(apk-cron)

まずは,標準パッケージとして提供されている apk-cron を使う方法.標準パッケージなので,

# apk add apk-cron
fetch http://dl-3.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
(1/1) Installing apk-cron (1.0-r1)
OK: 88 MiB in 50 packages

とするだけで入れられて,さらに,これだけで毎日自動実行されるよう設定されます.しかし,実態は,

# cat /etc/periodic/daily/apk 
#!/bin/sh

# cron job for automatic software updates
# Copyright (c) 2014 Kaarle Ritvanen

sleep $(expr $RANDOM % 7200)
exec apk -U upgrade

が作られるだけで,要するに,

apk update; apk upgrade されるだけ.問答無用で全部アップデート!

されてしまいます.yum-cron みたいに細かい制御はできません.これじゃ困ることもあるなぁ……と思って他を探してみると……

方法2(apk-autoupdate)

標準パッケージには含まれていませんが,apk-autoupdate

GitHub - jirutka/apk-autoupdate: Automatic updates for Alpine Linux and other systems using apk-tools
Automatic updates for Alpine Linux and other systems using apk-tools - jirutka/apk-autoupdate

がありました.これだと yum-cron ほどではないですが,ある程度アップデートを制御できるようで,

インストールは以下の通り.

# apk add --virtual=build-dependencies git gcc make asciidoctor musl-dev
(1/28) Installing binutils (2.30-r5)
....
(28/28) Installing build-dependencies (0)
Executing busybox-1.28.4-r1.trigger
Executing ca-certificates-20171114-r3.trigger
OK: 210 MiB in 77 packages
# mkdir /usr/local/src
# cd /usr/local/src
# git clone https://github.com/jirutka/apk-autoupdate
Cloning into 'apk-autoupdate'...
remote: Enumerating objects: 115, done.
remote: Total 115 (delta 0), reused 0 (delta 0), pack-reused 115
Receiving objects: 100% (115/115), 29.26 KiB | 285.00 KiB/s, done.
Resolving deltas: 100% (65/65), done.
# cd apk-autoupdate/
# make
# make install
install -d /etc/apk/
install -m 640 etc/autoupdate.conf /etc/apk/
install -d /usr/local/share/apk-autoupdate
for file in functions.sh openrc.sh; do \
	install -m 644 src/$file /usr/local/share/apk-autoupdate/$file; \
done
install -d /usr/local/sbin
for file in apk-autoupdate procs-need-restart rc-service-pid; do \
	install -m 755 build/$file /usr/local/sbin/$file; \
done
asciidoctor -b manpage -o build/autoupdate.conf.5 man/autoupdate.conf.5.adoc
asciidoctor -b manpage -o build/apk-autoupdate.1 man/apk-autoupdate.1.adoc
asciidoctor -b manpage -o build/procs-need-restart.1 man/procs-need-restart.1.adoc
install -d /usr/local/share/man/man1
install -m 644 build/apk-autoupdate.1 build/procs-need-restart.1 /usr/local/share/man/man1/
install -d /usr/local/share/man/man5
install -m 644 build/autoupdate.conf.5 /usr/local/share/man/man5/
# apk del build-dependencies
....

なお,これだけでは自動実行の設定は行われませんので,さらに cron に自分で登録する必要があります.

とりあえず,私の場合はこれで間に合いそう.

以上!

Server
スポンサーリンク
Following hyt!
hyt adversaria
タイトルとURLをコピーしました