テクニカルプア

備忘録と若干の補足

systemd 239.0 で machinectl import-(raw|tar) を使うと結果が返ってこない事象の迂回策

TL; DR

systemd-importを使うとよい。 /usr/lib/systemd/ 下にあるのでパスが通っていない場合は絶対パスで頑張る。

systemd のバージョン

Arch Linux を使っています:

$ systemctl --version
systemd 239
+PAM -AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN +PCRE2 default-hierarchy=hybrid

$ machinectl --version
systemd 239
+PAM -AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN +PCRE2 default-hierarchy=hybrid

$ pacman -Qs systemd
local/libsystemd 239.0-2
    systemd client libraries
local/systemd 239.0-2 (base-devel)
    system and service manager

内容

systemd 239.0 になってから machinectl のサブコマンドである import-rawimport-tar とで nspawn 用イメージのインポートができなくなった様子。

具体的にはインポートしたいイメージをこしらえてから machinectl import-rawmachinectl import-tar を実行しても transfer を enqueue したというメッセージ以降でコマンドが応答しなくなる(以下 import-raw を取りあげるが import-tar でも同じだった):

# machinectl import-raw RAW_IMAGE
Enqueued transfer job 1. Press C-c to continue download in background.

コマンドとしては何も返さないが、machinectl list-transfers をみるとイメージのインポートについての進捗が得られる:

$ machinectl list-transfers
ID PERCENT TYPE       LOCAL    REMOTE
 1     31% import-raw RAW_IMAGE

1 transfers listed.

しかし list-transfers が下記のようになり、machinectl list-images でインポートしたイメージが見れるようになっても import-raw はプロンプトを戻してくれず、ダンマリを決めこんでしまう。

$ machinectl list-transfers
No transfers.

いろいろあって

https://www.freedesktop.org/software/systemd/man/systemd-importd.service.html によれば machinectlimport-(raw|tar) は systemd-importd の実装を借りているとのこと。

これを踏まえて import-raw 中に systemctl status systemd-importd を眺めていてみつけた /usr/lib/systemd/systemd-import を使ってみたところ、インポートの進捗がコマンドの応答として得られ、インポート完了後もプロンプトを返してくれた:

# /usr/lib/systemd/systemd-import raw RAW_IMAGE
Importing 'RAW_IMAGE', saving as 'RAW_IMAGE'.
Imported 0%.
Imported 1%.
Imported 2%.
Imported 3%.
Imported 4%.
...
Imported 99%.
Operation completed successfully.
Exiting.
#

いまのところ systemd-import を使うので特に問題なさそうなので、しばらくはこれでいこうと思う。

追記

issue あげた。勘違いとかでないとよいのだが。コメント欄の通り修正された。ご対応ありがとうございます。

machinectl: import-raw and import-tar not show progress / not respond · Issue #9527 · systemd/systemd · GitHub