Armadilloフォーラム

配布ファイル(hawkbit-compose-4.11.tar.xz)の想定ターゲットマシンに関する問い合わせ

aoki

2023年5月2日 15時56分

Mac OS(Apple Silicon)ではATDE-VMを動作させることが難しく回避策として、
コンテナとして配布されているHawkbitサーバ単体を起動したかったのですが、
"setup_container.sh"の挙動が異なることに気づき相談しました。

Q1. 想定ターゲットマシンの動作確認の取れているOSや依存関係を教えていただけないでしょうか。
「Hawkbitサーバーを用いてソフトウェアアップデートする方法」を試していて、
挙動が異なり、手元の環境との差分が分かれば、擦り合わせることも可能かと思います。
 https://armadillo.atmark-techno.com/blog/15349/13372

Q2. 差分が一番小さそうな実行方法ではrealpathの引数が問題のようでした、パッチや対処方法などはありますでしょうか。
差分が一番小さそうな実行方法:
- GNU bash version 5.2.15(1)-release (aarch64-apple-darwin22.1.0)
- realpath, The realpath utility first appeared in FreeBSD 4.3. mac0S 13.0 Jun. 21, 2011.

== 実行結果
$ /opt/homebrew/bin/bash setup_container.sh
realpath: illegal option -- P
usage: realpath [-q] [path ...]
setup_container.sh: 行 9: error: コマンドが見つかりません
Where should we store docker-compose configuration and hawkBit data? [/Users/nobuoaoki/hawkbit-compose] .
realpath: illegal option -- m
usage: realpath [-q] [path ...]
mkdir: : No such file or directory

ERROR: Could not create directory
==

ご回答いただけますと幸いです。
どうぞよろしくお願いします。

コメント

動作確認はDebian 11(bullseye)で実施しております。
このエラーはご推察の通り、BSDのrealpathの挙動がGNUと異なるからです。

OSXでlinux向けに書かれたshell scriptを動かすときのテクニックとして
一般にbrewでGNUのcoreutilsをインストールして使う。というのが
あるそうです。
https://stackoverflow.com/questions/3572030/bash-script-absolute-path-w…

ただ、このshellでのエラーとは異なる理由でOSXでは、この実装を使うことはできません。
必ずlinuxを利用してください。

この補助スクリプトでは、docker composeで複数のdockerコンテナを起動しています。
(hawkbit,mysqlとnginx等…アーカイブ内fragments/docker-compose.yml参照)
ここで使っているhawkbitはdocker hubからイメージを取得しますが、その中身は
linux向けのバイナリによるもので、OSXでは動作しません。
hawkbitプロジェクトとしてもlinux/amd64向けイメージのdockerコンテナのみ
配布しているようです。

Hawkbit自体は単にJavaによる実装なので、コンテナを使わずOSX用の
JVMを用意しmysql等の周辺サーバー含め自力でセットアップすると
動作可能ですが、Linuxでも同じことをすると非常に煩雑であるため、
本スクリプト群を用意しております。

したがってlinuxでの本スクリプトの実行、運用をお願いいたします。

動作確認が取れている機体情報ありがとうございます。
> 動作確認はDebian 11(bullseye)で実施しております。
> このエラーはご推察の通り、BSDのrealpathの挙動がGNUと異なるからです。
linuxでの実行、運用を推奨する理由も理解できました。
確かにhawkbitの方が複合的な組み合わせになっているようですね。

> ここで使っているhawkbitはdocker hubからイメージを取得しますが、その中身は
> linux向けのバイナリによるもので、OSXでは動作しません。
> hawkbitプロジェクトとしてもlinux/amd64向けイメージのdockerコンテナのみ
> 配布しているようです。
では、amd64対応のlinuxを手配する前に、
Intel mac(amd64対応)での動作検証に挑戦したく質問です。

Q3.docker-compose.yml/20_hawkbit_portsはどう修正すれば作成できますでしょうか。
 エラーメッセージ:
 ERROR: docker-compose.yml/20_hawkbit_ports を作成できませんでした。
 パスの一部を匿名化したエラー終了直前の実行結果(※)

お返事いただくまでの間に実行行表示や実行手順のダンプ表示を使って、
realpathに関する問題(引数の除去や一時的なハードコーティング)の丸め込みをしていました。
この修正のおかげで、ひとまずTLSプロキシの有効化/無効化の選択まで進むことができました。
一方で、まだdocker-compose.ymlの生成に失敗しているのが現在地です。
この問題を修正することができれば、amd64が動作する機体を用いると、
あと一息で再現実行できると見込んでいます。残る手筈は、
ご指摘のamd64対応のhawkbitをdocker hubからイメージを取得したり、
その他のコンポーネントの取得・結合手続きが走るものと予想しています。

追加でご回答いただけますと幸いです。
どうぞよろしくお願いします。

(※)実行結果の一部: プロキシを設定しない'N'の入力後からエラー終了まで
==
Line 207: confirm=N
Line 209: [[ -z N ]]
Line 212: case "$confirm" in
Line 214: return 1
Line 582: update_template docker-compose.yml/20_hawkbit_ports -e s/#LISTEN//
Line 92: local file=docker-compose.yml/20_hawkbit_ports
Line 93: shift
Line 94: local src=/Users/****/fragments/docker-compose.yml/20_hawkbit_ports dest=/Users/****/tmp/data/fragments/docker-compose.yml/20_hawkbit_ports
Line 95: local tmpdest=/Users/****/tmp/data/fragments/docker-compose.yml/20_hawkbit_ports.tmp
Line 97: [[ -d /Users/****/tmp/data/fragments/docker-compose.yml ]]
Line 100: sed -e '1i# This fragment has been automatically generated, do not edit!' -e s/#LISTEN// /Users/****/fragments/docker-compose.yml/20_hawkbit_ports
sed: 1: "1i# This fragment has b ...": command i expects \ followed by text
Line 102: error 'docker-compose.yml/20_hawkbit_ports を作成できませんでした。'
Line 20: printf -- '\nERROR: %s\n' 'docker-compose.yml/20_hawkbit_ports を作成できませんでした。'

ERROR: docker-compose.yml/20_hawkbit_ports を作成できませんでした。
Line 21: exit 1
==

> では、amd64対応のlinuxを手配する前に、
> Intel mac(amd64対応)での動作検証に挑戦したく質問です。

コンテナはOSのkernelを仮想化するテクノロジーではないので、
アプリケーションの実行はあくまでホストOSのkernelを使います。

intel macにしてもlinuxとmacではBSD vs LinuxでABIが異なるため
結局システムコールの互換性の問題となる可能性があるためlinuxを
使う場合のみサポート可能です。CPUのアーキテクチャを合わせる
だけでは解決の手段として不足です。
OSXではなくDebian linuxによる実行をおすすめします。

> Q3.docker-compose.yml/20_hawkbit_portsはどう修正すれば作成できますでしょうか。

sedもBSD版は-iが使えないみたいですね。GNUと仕様が違うようです。
https://qiita.com/akameco/items/804970cd6655e69cc537

他のコマンドについてもbrewでgnu版があるようなので、入れ替えたほうが良さそうです。