Armadilloフォーラム

Armadillo-X1上でUbuntu駆動

tsato

2022年2月11日 14時18分

お世話になります。

参考程度の質問となりますが、
Armadillo-X1は標準OSとしてDebian GNU/Linuxがプリインストールされて、ルートファイルシステムも提供されてますが、
Ubuntuのユーザーランド提供のご予定などあったりしますでしょうか。
もしくはArmadillo-X1の筐体上でUbuntuを駆動させる手段は何かありますでしょうか。

よろしくお願いします。

コメント

> Armadillo-X1は標準OSとしてDebian GNU/Linuxがプリインストールされて、ルートファイルシステムも提供されてますが、
> Ubuntuのユーザーランド提供のご予定などあったりしますでしょうか。

いいえ、ございません。
色々対応できると良いのですが、難しいですね…

> もしくはArmadillo-X1の筐体上でUbuntuを駆動させる手段は何かありますでしょうか。

自作するのであればdebianに独自のパッケージを足したり、/etcに
変更をする機能はat-debian-builder(ルートファイルシステムの構築ツール)で
全て実行しているため、この実装を見ると参考になるのではないかと思います。

お世話になります。
ご回答ありがとうございました。
やはり簡単ではなさそうですね。
自作となると敷居が高くなってしまいますが、参考までにルートファイルシステム構築ツールも見てみます。

アットマークテクノの古賀です。

tsatoさん:
>ご回答ありがとうございました。
>やはり簡単ではなさそうですね。
>自作となると敷居が高くなってしまいますが、参考までにルートファイルシステム構築ツールも見てみます。

ちなみに、Armadillo-X1 で Ubuntu のユーザーランドを動かしたいという理由は、何でしょうか?

想定していらっしゃる用途にはそぐわないかも知れませんが、Ubuntu のユーザーランドを手っ取り早く動かすのであれば、Armadillo-X1 の Debian 10 (buster) に Docker Engine をインストールして、Ubuntu のコンテナイメージを使う、というのがお手軽かも知れません。
 https://docs.docker.com/engine/install/debian/

このページの "OS requirements" の節の冒頭には
 To install Docker Engine, you need the 64-bit version of one of these Debian or Raspbian versions
と書かれていますが、その下の方には
 Docker Engine is supported on x86_64 (or amd64), armhf, and arm64 architectures.
とあり、手元の Armadillo-IoT G3 で試したところ(※X1 と同じ CPU です)、Docker Engine をインストールでき、インストール後、

  $ sudo docker run -it ubuntu

としてみたところ Ubuntu のコンテナイメージが自動ダウンロードされて起動し、Ubuntu の bash を使えました。それ以外の動作は確認していませんが、とりあえず試すのであれば、Docker を使うというのが解になるかも知れません。なお、確認した際は、SD ブートで作業しました(eMMC ブートしてやった場合に容量が足りるかどうかは、確認していません)。

以上、もし参考になりましたら幸いです。

古賀様

お世話になります。
遅くなりましたが、情報ありがとうございました。
Ubuntuを使用したい理由は、あるライブラリの動作条件がdebianが無くUbuntuであるためです。
一度、上記方法にてeMMCブート上でDockerによるUbuntuコンテナイメージ上で実行できるか試してみます。

よろしくお願いします。

お世話になります。

debian10のユーザーランド上で、上記方法でDocker EngineのインストールとUbuntuコンテナの作成までは出来ました。
こちらで聞いていいものか分かりませんが、Ubuntuのコンテナ上で更新しようと"apt-get update"を実行したところ、以下のエラーとなりました。

root@678c62c4f133:/# apt-get update
Err:1 http://ports.ubuntu.com/ubuntu-ports focal InRelease
  Temporary failure resolving 'ports.ubuntu.com'
Err:2 http://ports.ubuntu.com/ubuntu-ports focal-updates InRelease
  Temporary failure resolving 'ports.ubuntu.com'
Err:3 http://ports.ubuntu.com/ubuntu-ports focal-backports InRelease
  Temporary failure resolving 'ports.ubuntu.com'
Err:4 http://ports.ubuntu.com/ubuntu-ports focal-security InRelease
  Temporary failure resolving 'ports.ubuntu.com'
Reading package lists... Done
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports/dists/focal/InRelease  Temporary failure resolving 'ports.ubuntu.com'
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports/dists/focal-updates/InRelease  Temporary failure resolving 'ports.ubuntu.com'
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports/dists/focal-backports/InRelease  Temporary failure resolving 'ports.ubuntu.com'
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports/dists/focal-security/InRelease  Temporary failure resolving 'ports.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.

ネットワークの方は、ホストOS(debian10)にて、無線LANをポケットWiFiに繋いである状態です。(有線LANは外してます)
(コンテナOSはデフォルトはブリッジによりホストOSのネットワーク環境が使用される、という認識でいます)
ネットで調べると、DNSサーバを8.8.8.8(Google Public DNS)に設定すると解決するとあったので、以下のコマンドでコンテナを生成してコンテナOSの/etc/resolv.confの中身は確かに変わっていましたが、エラーは変わりませんでした。

root@armadillo:~# docker run --dns 8.8.8.8 -it ubuntu
root@0822099a9df7:/# cat /etc/resolv.conf
nameserver 8.8.8.8

他に何か確認出来るところはありますでしょうか。

よろしくお願いします。

アットマークテクノの古賀です。

tsatoさん:
>debian10のユーザーランド上で、上記方法でDocker EngineのインストールとUbuntuコンテナの作成までは出来ました。
>こちらで聞いていいものか分かりませんが、Ubuntuのコンテナ上で更新しようと"apt-get update"を実行したところ、以下のエラーとなりました。

root@678c62c4f133:/# apt-get update
Err:1 http://ports.ubuntu.com/ubuntu-ports focal InRelease
  Temporary failure resolving 'ports.ubuntu.com'
...

>ネットワークの方は、ホストOS(debian10)にて、無線LANをポケットWiFiに繋いである状態です。(有線LANは外してます)
>(コンテナOSはデフォルトはブリッジによりホストOSのネットワーク環境が使用される、という認識でいます)
>ネットで調べると、DNSサーバを8.8.8.8(Google Public DNS)に設定すると解決するとあったので、以下のコマンドでコンテナを生成してコンテナOSの/etc/resolv.confの中身は確かに変わっていましたが、エラーは変わりませんでした。

root@armadillo:~# docker run --dns 8.8.8.8 -it ubuntu
root@0822099a9df7:/# cat /etc/resolv.conf
nameserver 8.8.8.8

>他に何か確認出来るところはありますでしょうか。

こちらのページで紹介されているように、ホスト OS(Debian)で 'nmcli dev show' を実行し、ホスト OS が同一 LAN 上の DNS サーバを参照していれば、その DNS サーバを docker run --dns で指定すると、どうなるでしょうか?
 https://medium.com/@faithfulanere/solved-docker-build-could-not-resolve…

古賀様

お世話になります。
ご助言いただきましたとおり、無線LANでのDNSサーバを指定しましたが、残念ながら結果は変わりませんでした。

root@armadillo:~# nmcli dev show | grep 'IP4.DNS'
IP4.DNS[1]:                             192.168.128.1
root@armadillo:~# docker run --dns 192.168.128.1 -it ubuntu apt-get update
docker0: port 1(veth08b8bcd) entered blocking state
docker0: port 1(veth08b8bcd) entered disabled state
device veth08b8bcd entered promiscuous mode
IPv6: ADDRCONF(NETDEV_UP): veth08b8bcd: link is not ready
IPVS: Creating netns size=912 id=13
eth0: renamed from vetheca52f5
IPv6: ADDRCONF(NETDEV_CHANGE): veth08b8bcd: link becomes ready
docker0: port 1(veth08b8bcd) entered blocking state
docker0: port 1(veth08b8bcd) entered forwarding state
Err:1 http://ports.ubuntu.com/ubuntu-ports focal InRelease
  Temporary failure resolving 'ports.ubuntu.com'
Err:2 http://ports.ubuntu.com/ubuntu-ports focal-updates InRelease
  Temporary failure resolving 'ports.ubuntu.com'
Err:3 http://ports.ubuntu.com/ubuntu-ports focal-backports InRelease
  Temporary failure resolving 'ports.ubuntu.com'
Err:4 http://ports.ubuntu.com/ubuntu-ports focal-security InRelease
  Temporary failure resolving 'ports.ubuntu.com'
Reading package lists... Done
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports/dists/focal/InRelease  Temporary failure resolving 'ports.ubuntu.com'
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports/dists/focal-updates/InRelease  Temporary failure resolving 'ports.ubuntu.com'
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports/dists/focal-backports/InRelease  Temporary failure resolving 'ports.ubuntu.com'
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports/dists/focal-security/InRelease  Temporary failure resolving 'ports.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.
docker0: port 1(veth08b8bcd) entered disabled state
vetheca52f5: renamed from eth0
docker0: port 1(veth08b8bcd) entered disabled state
device veth08b8bcd left promiscuous mode
docker0: port 1(veth08b8bcd) entered disabled state
root@armadillo:~#

よろしくお願いします。

アットマークテクノの古賀です。

tsatoさん:
>お世話になります。
>ご助言いただきましたとおり、無線LANでのDNSサーバを指定しましたが、残念ながら結果は変わりませんでした。

それでは、--network オプションで 'host' を指定すると、どうなるでしょうか?
 https://askubuntu.com/questions/1162163/what-is-correct-way-to-fix-name…

古賀様

お世話になります。
ご助言いただきましたとおり、--network hostを加えたところ、Dockerの起動コンソールが表示されず、root@armadilloのままの表示でしたが、内部的にはDcokerコンテナが起動しているようです。しかし別のエラーが発生しました。

root@armadillo:~# docker run --network host -it ubuntu
root@armadillo:/# apt-get update
Get:1 http://ports.ubuntu.com/ubuntu-ports focal InRelease [265 kB]
Get:2 http://ports.ubuntu.com/ubuntu-ports focal-updates InRelease [114 kB]
Err:1 http://ports.ubuntu.com/ubuntu-ports focal InRelease
  At least one invalid signature was encountered.
Get:3 http://ports.ubuntu.com/ubuntu-ports focal-backports InRelease [108 kB]
Err:2 http://ports.ubuntu.com/ubuntu-ports focal-updates InRelease
  At least one invalid signature was encountered.
Get:4 http://ports.ubuntu.com/ubuntu-ports focal-security InRelease [114 kB]
Err:3 http://ports.ubuntu.com/ubuntu-ports focal-backports InRelease
  At least one invalid signature was encountered.
Err:4 http://ports.ubuntu.com/ubuntu-ports focal-security InRelease
  At least one invalid signature was encountered.
Reading package lists... Done
W: GPG error: http://ports.ubuntu.com/ubuntu-ports focal InRelease: At least one invalid signature was encountered.
E: The repository 'http://ports.ubuntu.com/ubuntu-ports focal InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
W: GPG error: http://ports.ubuntu.com/ubuntu-ports focal-updates InRelease: At least one invalid signature was encountered.
E: The repository 'http://ports.ubuntu.com/ubuntu-ports focal-updates InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
W: GPG error: http://ports.ubuntu.com/ubuntu-ports focal-backports InRelease: At least one invalid signature was encountered.
E: The repository 'http://ports.ubuntu.com/ubuntu-ports focal-backports InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
W: GPG error: http://ports.ubuntu.com/ubuntu-ports focal-security InRelease: At least one invalid signature was encountered.
E: The repository 'http://ports.ubuntu.com/ubuntu-ports focal-security InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
root@armadillo:/#

まだ内容が調べ切れてないですが、無効な署名?のエラーでしょうか。
そう言えばDocker Engineのインストールの際、公式GPG鍵を追加する際にSSL認証エラーとなってしまったため、手順には無い'-k'を加えてSSL認証を無視してインストールしましたが、何か関係していそうでしょうか。

curl -k -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

よろしくお願いします。

アットマークテクノの古賀です。

tsatoさん:
>ご助言いただきましたとおり、--network hostを加えたところ、Dockerの起動コンソールが表示されず、root@armadilloのままの表示でしたが、内部的にはDcokerコンテナが起動しているようです。しかし別のエラーが発生しました。

root@armadillo:~# docker run --network host -it ubuntu
root@armadillo:/# apt-get update
Get:1 http://ports.ubuntu.com/ubuntu-ports focal InRelease [265 kB]
Get:2 http://ports.ubuntu.com/ubuntu-ports focal-updates InRelease [114 kB]
Err:1 http://ports.ubuntu.com/ubuntu-ports focal InRelease
  At least one invalid signature was encountered.
...
root@armadillo:/#

>まだ内容が調べ切れてないですが、無効な署名?のエラーでしょうか。

そうですね。

>そう言えばDocker Engineのインストールの際、公式GPG鍵を追加する際にSSL認証エラーとなってしまったため、手順には無い'-k'を加えてSSL認証を無視してインストールしましたが、何か関係していそうでしょうか。

いえ。Docker インストール時の GPG 鍵を curl で取得する際に、-k や --insecure を指定したのとは無関係です。こちらの環境でも再現したので、簡単に検索してみたところ、このページで書かれているのと同じく、コンテナから日時を取得できないことが原因だと分かりました。
 https://www.ryotosaito.com/blog/?p=499

ためしに、

docker run -it --network=host ubuntu bash

で Ubuntu の bash を起動した後、date コマンドを実行してみて下さい。日時の年が 1970 になっていると思います。

この問題を回避するには、上のページに書いてあるように、docker run に --privileged オプションを指定するか、または、こちらに書いてあるように、--security-opt seccomp:unconfined を指定してみて下さいませ:
 https://askubuntu.com/a/1264921

僕の手元の環境では、以下のコマンドで Ubuntu の bash を起動した後、'apt-get update' をエラーなく実行できました。

TYPO がありましたので、訂正します。

古賀:
>ためしに、

docker run -it --network=host ubuntu bash

>で Ubuntu の bash を起動した後、date コマンドを実行してみて下さい。日時の年が 1970 になっていると思います。
>
>この問題を回避するには、上のページに書いてあるように、docker run に --privileged オプションを指定するか、または、こちらに書いてあるように、--security-opt seccomp:unconfined を指定してみて下さいませ:
> https://askubuntu.com/a/1264921
>
>僕の手元の環境では、以下のコマンドで Ubuntu の bash を起動した後、'apt-get update' をエラーなく実行できました。

「以下のコマンドで Ubuntu の bash を」ではなく、
「上のと同じコマンドで Ubuntu の bash を」の間違いです。

ごめんなさい。TYPO じゃなくて、ほんとに間違いでした。

古賀:
>TYPO がありましたので、訂正します。

>>ためしに、

docker run -it --network=host ubuntu bash

>>で Ubuntu の bash を起動した後、date コマンドを実行してみて下さい。日時の年が 1970 になっていると思います。
>>
>>この問題を回避するには、上のページに書いてあるように、docker run に --privileged オプションを指定するか、または、こちらに書いてあるように、--security-opt seccomp:unconfined を指定してみて下さいませ:
>> https://askubuntu.com/a/1264921
>>
>>僕の手元の環境では、以下のコマンドで Ubuntu の bash を起動した後、'apt-get update' をエラーなく実行できました。
>
>「以下のコマンドで Ubuntu の bash を」ではなく、
>「上のと同じコマンドで Ubuntu の bash を」の間違いです。

ではなくて、以下のコマンドで Ubuntu の bash を起動した後、というのが正しいです。ごめんなさい。

docker run -it --network=host --security-opt seccomp:unconfined ubuntu bash

お世話になります。

ご助言いただきましたとおり、以下のコマンドでコンテナ作成をしたところ、日付が1970年から今の時刻になり、'apt-get update' を実行することが出来ました。

docker run -it --network=host --security-opt seccomp:unconfined ubuntu bash

後学のため上記コマンドを調べると、「デフォルトの seccomp プロファイルがない状態」で起動した状態のようですが、セキュリティを全無視した状態、と聞くと少し不安が残ってしまうので、もう一つの--privilegedオプション(こちらはコンテナ側に権限を与える)の方で試して、こちらでも問題なく実行ができました。
とりあえずこの状態にて、Ubuntuコンテナとして開発を進めていきます。ありがとうございました。

よろしくお願いします。