tokita.shinichi
2023年8月28日 15時14分
お世話になります。
自動起動したコンテナの出力をUSBコンソール(UART2)に表示したいのですが、うまくいきません。
以下のフォーラムにコンテナでttyを扱うように書かれていたため、コンフィグファイルで/dev/ttymxc1を渡すようにし、
起動したプログラムの出力をデバイスにリダイレクトしましたが、表示されませんでした。
https://armadillo.atmark-techno.com/forum/armadillo/11207
armadillo:/etc/atmark/containers# cat xxxx.conf set_image [コンテナイメージ] add_devices /dev/ttymxc1 set_command ./root/hello > /dev/ttymxc1
表示する方法についてご教授いただければ幸いです。
以上、宜しくお願いいたします。
コメント
tokita.shinichi
マルティネ様
ご回答ありがとうございます。
> コンテナのコンフィグは shell で読んでいますので、set_command foo > /dev/ttymxc1
を実行すると set_command の出力をコンソールに出力させることになって、コマンドを実行した時に出力になってません。
> 以下のように sh などをはさめて redirect をコンテナ内にすれば、出力はコンソールにでるようになります。
>
>
> set_command sh -c './root/hello > /dev/ttymxc1' >
ご教授頂いた方法でUSBコンソールに出力を表示できました。
ありがとうございます。
> (すみません、質問とそのリンクとの関係がわかりませんでした。
こちらですが、リンクの以下の文面を見てコンテナにログインしなくても、自動起動したコンテナからコンソールに出力できるのではと試した次第でした。
> GUI かただのコマンドを表示したいだけであれば、コンテナから tty を扱えばそちらから画面を操れますので、/etc/atmark/containersのコンフィグファイルによって自動的に起動できます。
> 出力だけでしたら、コンテナのコンフィグだけで充分です。
> そのリンクを使えば、このコンフィグを使わないでコンソールを完全にコンテナのものにすることもできますが、
> 入力は不要でしたらコンテナコンフィグでの対応をおすすめします。)
現状では試すために表示だけでよかったのですが、結局入力も必要になるため、この件について合わせて質問させてください。
そのリンクを使えばとありますが、これは/etc/inittabを編集することを指しているのでしょうか?
::respawn:/sbin/getty -L 115200 -n -l sh ttymxc1 vt101
この内容ですと、ログインせずにシェルを起動するように見えますが、コンソールを完全にコンテナで扱うために必要なのでしょうか。
度々お手数ですが、ご教授いただければ幸いです
at_dominique.m…
tokita.shinichiさん
マルティネです。
> 現状では試すために表示だけでよかったのですが、結局入力も必要になるため、この件について合わせて質問させてください。
> そのリンクを使えばとありますが、これは/etc/inittabを編集することを指しているのでしょうか?
>
> ::respawn:/sbin/getty -L 115200 -n -l sh ttymxc1 vt101
>
> この内容ですと、ログインせずにシェルを起動するように見えますが、コンソールを完全にコンテナで扱うために必要なのでしょうか。
> 度々お手数ですが、ご教授いただければ幸いです
getty の -l
オプションで指定されているコマンドを自動実行しているだけなので、この例では確かにユーザーのシェルを直接に実行していますね。
残念ながら getty -l で引数まで渡すことはできませんので、getty を使うなら wrapper script が必要になりますが…今回はとくに getty を使うメリットもないので、直接に podman を実行できます。
手順を実行したら、シリアルコンソールからコンテナ外の Armadillo にアクセスできなくなりますので、予備のアクセス(sshd, HDMI+USBキーボード、SWU のインストール等)を確認した上で試してください。
# テストコンテナの準備します。テストとしては login コマンドを実行しますので、 # login を使える為に root のパスワードと root の login の許可を設定するだけです。 # (以下のパスワードは「test」です) # ご自分のコンテナで自分のコマンドを実行する場合は不要なので、 # 無視していただいて構いません。あるコンテナで試してください。 armadillo:~# podman kill -a armadillo:~# printf "%s\n" "FROM docker.io/alpine" \ "RUN echo pts/0 >> /etc/securetty" \ 'RUN echo '\''root:$6$KwVRKjqC7KQrlv8g$U/sLbWrtKjqhMfdx7eurtxABdhXTC5cliTLQ4vLBuRaLfY17yIujpopwZzO2X/w8lnPK.hBm/rUPWiFFe6Q34.'\'' | chpasswd -e' \ | abos-ctrl podman-rw build -t testlogin - # コンテナ名を mycont とします。以下の mycont を置き換えてください。 armadillo:~# vi /etc/atmark/containers/mycont.conf # add_device の ttymxc1 を外し、command からも > /dev/ttymxc1 を外します # tty と入力を扱うので、add_args -ti を追加します。 set_image testlogin add_args -ti set_command login armadillo:~# vi /etc/inittab # getty ttymxc1 の行を外して、以下で置き換えます ::respawn:/usr/bin/podman attach mycont # busybox init は SIGHUP で reload して、今のコンフィグを試します。 # ログインしてたらここで接続が切りますので、 # 残りの persist_file コマンドを別の手段で実行してください armadillo:~# kill -HUP 1 # <enter>を入力する 983310841b20 login: root Password: Welcome to Alpine! <省略> login[3]: root login on 'pts/0' 983310841b20:~# # 別のシェルで設定を保存します。 # /etc/inittab は BaseOS のアップデートの際に上書きされますので、 # persist_file の -P オプションで /etc/swupdate_preserve_files に追加します。 armadillo:~# persist_file -vP /etc/inittab Added "POST /etc/inittab" to /etc/swupdate_preserve_files '/etc/inittab' -> '/mnt/etc/inittab' armadillo:~# persist_file -v /etc/atmark/containers/mycont.conf '/etc/atmark/containers/mycont.conf' -> '/mnt/etc/atmark/containers/mycont.conf' # ここで再起動して再び確認します。
以上の手順で問題あれば聞いてください。
tokita.shinichi
at_dominique.m…
2023年8月28日 16時02分
tokita.shinichiさん、
お世話になっています、
アットマークテクノのマルティネです。
> 自動起動したコンテナの出力をUSBコンソール(UART2)に表示したいのですが、うまくいきません。
> 以下のフォーラムにコンテナでttyを扱うように書かれていたため、コンフィグファイルで/dev/ttymxc1を渡すようにし、
> 起動したプログラムの出力をデバイスにリダイレクトしましたが、表示されませんでした。
> https://armadillo.atmark-techno.com/forum/armadillo/11207
(すみません、質問とそのリンクとの関係がわかりませんでした。
出力だけでしたら、コンテナのコンフィグだけで充分です。
そのリンクを使えば、このコンフィグを使わないでコンソールを完全にコンテナのものにすることもできますが、
入力は不要でしたらコンテナコンフィグでの対応をおすすめします。)
>
> 表示する方法についてご教授いただければ幸いです。
コンテナのコンフィグは shell で読んでいますので、
set_command foo > /dev/ttymxc1
を実行すると set_command の出力をコンソールに出力させることになって、コマンドを実行した時に出力になってません。以下のように sh などをはさめて redirect をコンテナ内にすれば、出力はコンソールにでるようになります。
よろしくお願いします。