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-raw
と import-tar
とで nspawn 用イメージのインポートができなくなった様子。
具体的にはインポートしたいイメージをこしらえてから machinectl import-raw
や machinectl 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 によれば machinectl
の import-(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 あげた。勘違いとかでないとよいのだが。コメント欄の通り修正された。ご対応ありがとうございます。