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 に自分で登録する必要があります.
とりあえず,私の場合はこれで間に合いそう.
以上!