tsato
2022年2月11日 14時18分
お世話になります。
参考程度の質問となりますが、
Armadillo-X1は標準OSとしてDebian GNU/Linuxがプリインストールされて、ルートファイルシステムも提供されてますが、
Ubuntuのユーザーランド提供のご予定などあったりしますでしょうか。
もしくはArmadillo-X1の筐体上でUbuntuを駆動させる手段は何かありますでしょうか。
よろしくお願いします。
コメント
tsato
at_shinya.koga
アットマークテクノの古賀です。
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 ブートしてやった場合に容量が足りるかどうかは、確認していません)。
以上、もし参考になりましたら幸いです。
tsato
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' 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
他に何か確認出来るところはありますでしょうか。
よろしくお願いします。
at_shinya.koga
アットマークテクノの古賀です。
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…
tsato
古賀様
お世話になります。
ご助言いただきましたとおり、無線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:~#
よろしくお願いします。
at_shinya.koga
アットマークテクノの古賀です。
tsatoさん:
>お世話になります。
>ご助言いただきましたとおり、無線LANでのDNSサーバを指定しましたが、残念ながら結果は変わりませんでした。
それでは、--network オプションで 'host' を指定すると、どうなるでしょうか?
https://askubuntu.com/questions/1162163/what-is-correct-way-to-fix-name…
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. 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
よろしくお願いします。
at_shinya.koga
アットマークテクノの古賀です。
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' をエラーなく実行できました。
at_shinya.koga
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 を」の間違いです。
at_shinya.koga
ごめんなさい。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
tsato
お世話になります。
ご助言いただきましたとおり、以下のコマンドでコンテナ作成をしたところ、日付が1970年から今の時刻になり、'apt-get update' を実行することが出来ました。
docker run -it --network=host --security-opt seccomp:unconfined ubuntu bash
後学のため上記コマンドを調べると、「デフォルトの seccomp プロファイルがない状態」で起動した状態のようですが、セキュリティを全無視した状態、と聞くと少し不安が残ってしまうので、もう一つの--privilegedオプション(こちらはコンテナ側に権限を与える)の方で試して、こちらでも問題なく実行ができました。
とりあえずこの状態にて、Ubuntuコンテナとして開発を進めていきます。ありがとうございました。
よろしくお願いします。
at_ohsawa
2022年2月14日 9時54分
> Armadillo-X1は標準OSとしてDebian GNU/Linuxがプリインストールされて、ルートファイルシステムも提供されてますが、
> Ubuntuのユーザーランド提供のご予定などあったりしますでしょうか。
いいえ、ございません。
色々対応できると良いのですが、難しいですね…
> もしくはArmadillo-X1の筐体上でUbuntuを駆動させる手段は何かありますでしょうか。
自作するのであればdebianに独自のパッケージを足したり、/etcに
変更をする機能はat-debian-builder(ルートファイルシステムの構築ツール)で
全て実行しているため、この実装を見ると参考になるのではないかと思います。