Armadilloフォーラム

Armadilloからhawkbitサーバにアクセスすると401エラーとなります

e1234

2024年3月1日 12時06分

Armadillo Base OSでコンテナ更新をしたい為、Hwakbitサーバーを立てております。
以下の内容を参照し、実施しました。

 Armadillo Base OS:Hawkbitサーバーを用いてソフトウェアアップデートする方法
 https://armadillo.atmark-techno.com/blog/15349/13372

 Armadillo-640製品マニュアル(Armadillo Base OS 対応)
 6.8.3.2. SWU で hawkBit を登録する
 https://armadillo.atmark-techno.com/files/downloads/armadillo-640/docum…

 SWUpdateでデバイスを自動登録する方法で、hawkbitサーバーには、デバイスが自動登録できることは、
 確認しております。
 そのあと、hawkbitサーバーから、SWUのアップデートを確認をしておりますが、
 必ず、401エラーが返ってきています。

原因と対策について、ご教授いただけないでしょうか?

■添付ファイル
・Armadillo通信パケット_20240301.pdf
 ArmadilloとHawkbitサーバーの通信パケットです。

・hawkbitサーバー画面.pdf
Webページの画面キャプチャです。

・Armadillo_log.txt
/var/log/messagesの内容(15分程度抜粋したもの)です。

■環境
・VirtualBox
・Ubuntu22.04
・Docker(Docker Engine on Ubuntu)

■コンテナ
・Hawkbit docker-composeコンテナ
 https://armadillo.atmark-techno.com/resources/software/armadillo-640/ab…
  hawkbit-compose-4.15.1.tar.xz

ファイル ファイルの説明
Armadillo通信パケット_20240301.pdf ArmadilloとHawkbitサーバーの通信パケット
hawkbitサーバー画面.pdf Webページの画面キャプチャ
Armadillo_log.txt /var/log/messagesの内容(15分程度抜粋したもの)
コメント

at_dominique.m…

2024年3月1日 14時34分

e1234さん、

お世話になっています、
マルティネです。

>  SWUpdateでデバイスを自動登録する方法で、hawkbitサーバーには、デバイスが自動登録できることは、
>  確認しております。
>  そのあと、hawkbitサーバーから、SWUのアップデートを確認をしておりますが、
>  必ず、401エラーが返ってきています。
>
> 原因と対策について、ご教授いただけないでしょうか?

先日は最初の問題だけを解決して、最後まで確認せずに大変申し訳ございません。
これも hawkbit コンテナのアップデートの問題です: コンテナ内のパスが変わってしまって、application.properties のファイルが完全に無視されるようになりました。
(Web ページで admin ユーザーでログインできたのは、おそらくデフォルトの「admin」パスワードを設定したと思われますが、それ以外のパスワードを設定した場合は web でもログインできない状態です…)

デフォルトのコンフィグレーションでも動いていますのでデバイス登録のユーザーとして admin:admin を使えば登録はできてしまいますが、swu が保存されている 「artifactrepo」 のディレクトリも想定どおりに保存されてませんので、ちゃんと修正しましょう。

今度はちゃんと最後まで確認してきて、デバイス登録とアップデートができるところまで修正するには以下の三つの変更が必要です:

1/ ファイルの一致の修正
docker-compose.yml を編集して、ボリュームマウントのパスを /opt/hawkbit から / に移動します

diff --git a/docker-compose.yml b/docker-compose.yml
index 8fd8d3f..0a33f77 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -28,8 +28,8 @@ services:
         links:
           - mysql
         volumes:
-            - ./data/hawkbit_application.properties:/opt/hawkbit/application.properties
-            - ./data/hawkbit_artifactrepo:/opt/hawkbit/artifactrepo
+            - ./data/hawkbit_application.properties:/application.properties
+            - ./data/hawkbit_artifactrepo:/artifactrepo
         environment:
             SPRING_APPLICATION_JSON: '{
                 "spring.datasource.url": "jdbc:mariadb://mysql:3306/hawkbit",

2/ それは hawkbit が起動しませんので、data/hawkbit_application.properties ファイルにデフォルトのコンフィグに書いてある内容をいくつか追加します:

# These settings come from hawkbit default values as can be found here:
# https://github.com/eclipse/hawkbit/blob/master/hawkbit-runtime/hawkbit-update-server/src/main/resources/application.properties
# In particular, hawkbit will not start when allow-bean-definition-overriding
# is not set...
 
## User Security
spring.main.allow-bean-definition-overriding=true
 
## Http Encoding
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
 
## Optional events
hawkbit.server.repository.publish-target-poll-event=false
 
# Enable CORS and specify the allowed origins:
#hawkbit.server.security.cors.enabled=true
#hawkbit.server.security.cors.allowedOrigins=http://localhost
 
# Swagger Configuration
springdoc.swagger-ui.path=/update-server-documentation
springdoc.api-docs.path=/update-server-api-docs
springdoc.show-oauth2-endpoints=true
springdoc.api-docs.version=openapi_3_0
springdoc.show-login-endpoint=true
springdoc.packages-to-scan=org.eclipse.hawkbit.mgmt,org.eclipse.hawkbit.ddi
springdoc.swagger-ui.oauth2RedirectUrl=/login/oauth2/code/suite
springdoc.paths-to-exclude=/system/**

3/ それで hawkbit が起動できてデバイス登録はできますが、コンテナのユーザーの変更で swu をアップロードできませんのでディレクトリのオーナーを修正します:

sudo chown -R 1000:0 data/hawkbit_artifactrepo

以上、この変更で hawkbit が再び正常に起動できました。

大変お手数をお掛けしました、hawkbit_compose のスクリプトを今月も修正しますが、それまで setup_container.sh を実行すると docker-compose.yml と application.properties の変更がなくなりますのでご注意ください。

また何か問題があればまた聞いてください。

e1234

2024年3月5日 15時08分

マルティネさん、回答ありがとうございます。

回答いただいた3点の変更を行い、以下のコマンドでhawkbitサーバのコンテナを起動しました。

user01@user01-VirtualBox:~/hawkbit-compose$ sudo docker-compose -f "/home/user01/hawkbit-compose/docker-compose.yml" up

これにより、Armadillo側からhawkbitサーバにアクセスしたときの401エラーは無くなったのですが、
Webブラウザでhawkbitサーバーにアクセスできなくなりました。(Username:admin、Password:admin)

setup_container.sh を実行すると、Webブラウザでhawkbitサーバーにアクセスはできます。
(3点の変更内容は元に戻ってしまいます)

回答いただいた3点の変更を行ったあと、
hawkbitを起動するために行うべき手順についてご教授いただけないでしょうか?

at_dominique.m…

2024年3月5日 15時24分

e1234さん

> 回答いただいた3点の変更を行ったあと、
> hawkbitを起動するために行うべき手順についてご教授いただけないでしょうか?

特にないはずですが、setup_container を最初に実行した時のパスワードの誤りの可能性はありますか?
試しに data/hawkbit_application.properties の admin ユーザーのパスワードを変更してみてください:
hawkbit.server.im.users[0].password={noop}admin

(変更の後はコンテナを再起動する必要があります。また、{crypt}のハッシュとして記載したい場合は htpasswd -nBC 10 で生成できますが、まずは noop で試してください。)

パスワードの問題以外には証明書まわりの問題の可能性もありますが、それでしたら armadillo からの登録もできないと思いますので、あまり思いつきません。
それで解決できなかった場合はお手数ですが、 application.properties のパスワード以外の内容を共有していただければ確認します。

よろしくお願いします。

e1234

2024年3月5日 16時06分

回答ありがとうございます。

data/hawkbit_application.properties の admin ユーザーのパスワードを変更で、
アクセスできるようになりました。