Armadilloフォーラム

Armadillo-640 debian bookworm コンテナ 2038年問題対応

k.sato

2023年10月27日 12時01分

佐藤と申します。

お世話になっております。

Armadillo Base OS の2038年問題の対応で下記の2つのフォーラムを確認しました。
●Armadillo Base OSを搭載した機器における2038年問題について
https://armadillo.atmark-techno.com/forum/armadillo/16643

●2038年問題対応について
https://armadillo.atmark-techno.com/forum/armadillo/16016

現在VScodeから生成するCUIアプリケーションのDockerfileを下記のように修正しています。

# ARCH will be set appropriately by scripts/build_container_image.sh
ARG ARCH
FROM docker.io/${ARCH}/debian:bookworm-slim
LABEL version="2.0.0"

●Armadillo Base OS:コンテナのタイムゾーンを変更する方法
https://armadillo.atmark-techno.com/blog/15349/12004

上記を参考にpython_app.confに「add_volumes /etc/localtime:/etc/localtime:ro」を追加しました。
このコンテナを起動しdateで2038年1月19日12時14分7秒の直前の時刻を設定して
その後dateを繰り返し時刻がオーバーフローするのか確認したのですが、
何事もなく正常に2038年1月19日12時14分7秒以降もカウントアップされていました。

> はい、Armadillo Base OS の 32bit バージョンでも 2038年問題は解決されています。
> ただし、コンテナの適合性も必要です。コンテナに debian bookworm 等を使用する場合は、debian が現状解決じていない状態のバージョンになってコンテナでの時間の操作が2038年に不具合になります。
>
> debian も修正する予定ですので、それまで新しい debian にアップグレードするか、コンテナにすでに解決済みの alpine などを使用する場合でも今でも大丈夫です。
上記とあったのですが実際は debian bookworm で解決されているのでしょうか?

それともこの確認方法ではしっかり確認出来でいないということですか?

以上、よろしくお願い致します。

コメント

at_dominique.m…

2023年10月27日 13時16分

佐藤さん、

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

> 上記を参考にpython_app.confに「add_volumes /etc/localtime:/etc/localtime:ro」を追加しました。
> このコンテナを起動しdateで2038年1月19日12時14分7秒の直前の時刻を設定して
> その後dateを繰り返し時刻がオーバーフローするのか確認したのですが、
> 何事もなく正常に2038年1月19日12時14分7秒以降もカウントアップされていました。
>
> それともこの確認方法ではしっかり確認出来でいないということですか?

状況は少しややっこしいですが、GNU date は coreutils の gnulib 経由に、debian の設定と関わらずに対応されています。
そのため、date では 2038問題を確認できませんが、debian としてはまだ未対応です。
ライブラリーや他のプログラムでは「Value too large for defined data type」のエラーを確認できます。

coreutils に多くのコマンドが含まれていますので、ls 等で簡単に確認できませんが、例えば、bookworm-slim でデフォルトにインストールされている fstrim ではそのエラーを確認できます:

root@f719a5f5f8c2:~# date
Tue Jan 19 20:00:34 JST 2038
root@f719a5f5f8c2:~# touch /
root@f719a5f5f8c2:~# fstrim .
fstrim: stat of . failed: Value too large for defined data type

apt や python3 も同じでエラーで使えない状態になります。

自分でアプリケーションを C 言語でビルドする場合は、アプリケーションをビルドする際に「CFLAGS=-D_TIME_BITS=64」を追加することはできますが、debian が提供するライブラリーに依存する場合は動かない可能性があります。
(同じ理由で、debian がいきなりライブラリをその対応でビルドしなおすと昔から動いていたアプリケーションが動かなくなることもありますので、向こうも数年前から困っていることろです。参考: https://wiki.debian.org/ReleaseGoals/64bit-time

使っているライブラリとアプリケーションにすべて対応すれば debian でも使えますが、今の段階で 2038年問題が心配のであれば、alpine のコンテナを使った方が楽だと考えています。

よろしくお願いします。

マルティネ様

佐藤です。

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

> 状況は少しややっこしいですが、GNU date は coreutils の gnulib 経由に、debian の設定と関わらずに対応されています。
> そのため、date では 2038問題を確認できませんが、debian としてはまだ未対応です。
> ライブラリーや他のプログラムでは「Value too large for defined data type」のエラーを確認できます。
・・・
> 使っているライブラリとアプリケーションにすべて対応すれば debian でも使えますが、今の段階で 2038年問題が心配のであれば、alpine のコンテナを使った方が楽だと考えています。
dateでは確認できてもやはりdebianではまだ未対応ということなのですね。

●6.2.2. コンテナの基本的な操作
https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…

aplineについては以前、上記を参考にArmadillo上のalpineコンテナに入るところまでは確認しました。

そこまで確認してからデバッグしやすい CUIアプリケーションで確認していました。

その段階でpython3-spidevを使用するためにDockerfileの「FROM docker.io/${ARCH}/debian:bullseye-slim」を「bookworm-slim」に変更することを教えていただきました。
https://armadillo.atmark-techno.com/forum/armadillo/16314

同じような考え方でこの「debian:bookworm-slim」を「docker.io/alpine」などとすることで
これまで作成していたCUIアプリケーションのコンテナを簡単に Debian から alpine に変更することは出来るのでしょうか?

よろしくお願い致します。

at_dominique.m…

2023年10月27日 14時22分

佐藤さん、

マルティネです。

> その段階でpython3-spidevを使用するためにDockerfileの「FROM docker.io/${ARCH}/debian:bullseye-slim」を「bookworm-slim」に変更することを教えていただきました。
> https://armadillo.atmark-techno.com/forum/armadillo/16314
>
> 同じような考え方でこの「debian:bookworm-slim」を「docker.io/alpine」などとすることで
> これまで作成していたCUIアプリケーションのコンテナを簡単に Debian から alpine に変更することは出来るのでしょうか?

はい、そこを変えていただければ、次の「Generate xxx SWU」を実行すると alpine のコンテナが使われます。(debian と同じく、docker.io/${ARCH}/alpine:3.18でバージョンを固定することをおすすめします)
そこは簡単ですが、パッケージのインストール方法もパッケージ名が変わりますし、パッケージの内容も多少変わりますのでその対応も必要になります。

パッケージのインストール方法は、同じ Dockerfile に記載されている「apt-get」コマンドをすべて削除して、apk に入れ替えてください:

変更前
ARG PACKAGES
RUN apt-get update && apt-get upgrade -y \
    && apt-get install -y ${PACKAGES} \
    && apt-get clean
 
変更後
ARG PACKAGES
RUN apk upgrade && apk add ${PACKAGES} && rm -f /var/cache/apk/*

パッケージ名の変更にルールはありませんので、自分で探してみて packages.txt ファイルの内容を修正してください。
https://pkgs.alpinelinux.org/ やArmadillo上の「apk search」で検索できます。
(これも、py3-spidev がパッケージされてなさそうですね… pip でインストールする必要がありそうです…)
packages.txt に見つからないパッケージがある場合にエラーが発生するはずです。

内容についても、パッケージを見つけてから確認するしかないです。
例えば、vsftpd.conf のデフォルト位置が変わりますので、デフォルトのファイルを使っていたらそういう細かい変更が必要になるかもしれません(このファイルについては使わなければ特に問題ないです)

後数年すれば debian も 2038年問題を対応してくれると思いますので、debian のままで定期的にコンテナを更新することも可能であればそれでもいいと考えています。

よろしくお願いします。

マルティネ様

佐藤です。

> 後数年すれば debian も 2038年問題を対応してくれると思いますので、debian のままで定期的にコンテナを更新することも可能であればそれでもいいと考えています。
私としても待ちたいのですが、要望があり調査しています。

> パッケージ名の変更にルールはありませんので、自分で探してみて packages.txt ファイルの内容を修正してください。
> https://pkgs.alpinelinux.org/ やArmadillo上の「apk search」で検索できます。
> (これも、py3-spidev がパッケージされてなさそうですね… pip でインストールする必要がありそうです…)
> packages.txt に見つからないパッケージがある場合にエラーが発生するはずです。
添付ファイル内のDockerfileとpackages.txtのように修正しました。
spiはこれで動作するのかわかりませんが暫定的に「py3-atspi」を入れています。
libpam-pwdfileについては教えていただいたサイトで「pwdfile」で検索してみたのですが見つかりません。
どうすればよいでしょうか?

ひとまずマスクした状態で「Generate xxx SWU」を実行してみました。
すると下記のエラーが出て止まります。

・・・
Executing vsftpd-3.0.5-r2.pre-install
Executing busybox-1.36.1-r4.trigger
Executing glib-2.76.4-r0.trigger
OK: 134 MiB in 106 packages
STEP 7: RUN useradd -m -u 1000 atmark
/bin/sh: useradd: not found
Error: error building at STEP "RUN useradd -m -u 1000 atmark": error while running runtime: exit status 127
イメージをビルドできませんでした。

Dockerfileの終わりの方の下記だと思うのですが、

# Modify as necessary
RUN useradd -m -u 1000 atmark

これは useradd を使用するためのパッケージが足りないということでしょうか?
それとも他のユーザー登録のコマンドを使用するのでしょうか?

よろしくお願い致します。

ファイル ファイルの説明
container.zip VScodeのcontainer内のDockerfileとpackages.txtを圧縮

at_dominique.m…

2023年10月27日 16時07分

マルティネです。

> > 後数年すれば debian も 2038年問題を対応してくれると思いますので、debian のままで定期的にコンテナを更新することも可能であればそれでもいいと考えています。
>
> 私としても待ちたいのですが、要望があり調査しています。

debian bookworm (2028年まで)も alpine 3.18 (2025年まで)も、2038 までにサポートされてないので、ネットワークに接続されている機器の場合はアップデートはかならずアップデートできるようにした方がいいと思いますが、状況は把握してませんのでそれ以上追跡しません。

> > パッケージ名の変更にルールはありませんので、自分で探してみて packages.txt ファイルの内容を修正してください。
> > https://pkgs.alpinelinux.org/ やArmadillo上の「apk search」で検索できます。
> > (これも、py3-spidev がパッケージされてなさそうですね… pip でインストールする必要がありそうです…)
> > packages.txt に見つからないパッケージがある場合にエラーが発生するはずです。
> 添付ファイル内のDockerfileとpackages.txtのように修正しました。
> spiはこれで動作するのかわかりませんが暫定的に「py3-atspi」を入れています。

debian の python3-spidev は https://github.com/doceme/py-spidev のパッケージで、py3-atspi は https://gitlab.gnome.org/GNOME/pyatspi2 のパッケージですね。
「Assistive Technology Service Provider Interface」なので、見えないユーザー等の対応でまったく違う物となります。

py3-pip をインストールして、pip3 --no-cache-dir install spidevのようなコマンドを足す必要があります。
(python3-dev 等を一時期インストールして、インストールできたら削除もまたできます…こういうところは少し面倒ですが、Armadillo と直接に関係ないのでやってみてください)

> libpam-pwdfileについては教えていただいたサイトで「pwdfile」で検索してみたのですが見つかりません。
> どうすればよいでしょうか?

これも alpine になさそうですね。
https://git.tiwe.de/libpam-pwdfile.git から自分でビルドして /lib/security にインストールすれば使えますが、これも手間ですね。
(もしかしたら当時に選択肢にあった pam_userdb ならありますが、そちらもビルドされてないので pwdfile のままがいいかと思います。お手数ですが、これもひとまずやってみてください)

> ひとまずマスクした状態で「Generate xxx SWU」を実行してみました。
> すると下記のエラーが出て止まります。

> STEP 7: RUN useradd -m -u 1000 atmark
> /bin/sh: useradd: not found
> Error: error building at STEP "RUN useradd -m -u 1000 atmark": error while running runtime: exit status 127

>
> これは useradd を使用するためのパッケージが足りないということでしょうか?
> それとも他のユーザー登録のコマンドを使用するのでしょうか?

確認せずにすみません。useradd は shadow というパッケージにありますが、そこで useradd にこだわる必要がなく「adduser -D -u 1000 atmark」でいいと思います。

よろしくお願いします。

マルティネ様

佐藤です。

> 確認せずにすみません。useradd は shadow というパッケージにありますが、そこで useradd にこだわる必要がなく「adduser -D -u 1000 atmark」でいいと思います。
ありがとうございます。
py3-atspi と libpam-pwdfile をコメントアウトし、「adduser -D -u 1000 atmark」とすることで「Generate xxx SWU」が正常に完了しました。
そして python_app.conf を「set_command sleep infinity」とした dev.swu を Armadillo-640 に書き込んでいます。

> debian の python3-spidev は https://github.com/doceme/py-spidev のパッケージで、py3-atspi は https://gitlab.gnome.org/GNOME/pyatspi2 のパッケージですね。
> 「Assistive Technology Service Provider Interface」なので、見えないユーザー等の対応でまったく違う物となります。
>
> py3-pip をインストールして、pip3 --no-cache-dir install spidevのようなコマンドを足す必要があります。
現在、py3-pip は packages.txt に追記してインストールしています。
コマンドを足すというのはどこに足せばよいのでしょうか?
Dockerfileなどでしょうか?

armadillo:~# podman exec -it python_app sh
/ # pip3 --no-cache-dir install spidev

それとも1度、作成した alpine のコンテナに入り上記コマンドを入力し追加するということでしょうか?

> (python3-dev 等を一時期インストールして、インストールできたら削除もまたできます…こういうところは少し面倒ですが、Armadillo と直接に関係ないのでやってみてください)
こちらは alpineコンテナで「/ # apk add python3-dev」を実行しインストールできました。

> https://git.tiwe.de/libpam-pwdfile.git から自分でビルドして /lib/security にインストールすれば使えますが、これも手間ですね。
> (もしかしたら当時に選択肢にあった pam_userdb ならありますが、そちらもビルドされてないので pwdfile のままがいいかと思います。お手数ですが、これもひとまずやってみてください)

こちらは https://git.tiwe.de/libpam-pwdfile.git/commit/ から libpam-pwdfile-master.tar.gz をダウンロードし、
下記を参考にビルトするということでしょうか?

●ライブラリが見つからないエラー
https://armadillo.atmark-techno.com/forum/armadillo/14009

以上、よろしくお願い致します。

at_dominique.m…

2023年10月30日 15時05分

佐藤さん、

マルティネです。

> > py3-pip をインストールして、pip3 --no-cache-dir install spidevのようなコマンドを足す必要があります。
> 現在、py3-pip は packages.txt に追記してインストールしています。
> コマンドを足すというのはどこに足せばよいのでしょうか?
> Dockerfileなどでしょうか?

はい、 Dockerfile にコマンドを追加する形になります。
最適化を考えたら色々注意実行ありますが、ひとまず動けばいいと思いますので気にせずに RUN コマンドを追加してください。
(動いたら、ムルチステージビルドでの最適化をおすすめしますが、後回しでいいと思います https://docs.docker.jp/develop/develop-images/multistage-build.html#id4 )

> こちらは https://git.tiwe.de/libpam-pwdfile.git/commit/ から libpam-pwdfile-master.tar.gz をダウンロードし、
> 下記を参考にビルトするということでしょうか?

それでもいいかもしれませんが、別のコンテナでビルドすると alpine の更新などで動くなくなる恐れもありますので、それも Dockerfile で直接にビルドした方がいいと思います。
依存をインストールすれば、RUN に make 等も使用加能ですので、手動ビルドと変わりません。

よろしくお願いします。

マルティネ様

佐藤です。

> はい、 Dockerfile にコマンドを追加する形になります。
> 最適化を考えたら色々注意実行ありますが、ひとまず動けばいいと思いますので気にせずに RUN コマンドを追加してください。
> (動いたら、ムルチステージビルドでの最適化をおすすめしますが、後回しでいいと思います https://docs.docker.jp/develop/develop-images/multistage-build.html#id4 )
ひとまず動けばいいので下記のようにRUN コマンドを追加しました。

# Add extra packages to containers/packages.txt
ARG PACKAGES
#RUN apt-get update && apt-get upgrade -y \
#    && apt-get install -y ${PACKAGES} \
#    && apt-get clean
RUN apk upgrade && apk add ${PACKAGES} && rm -f /var/cache/apk/*
 
RUN pip3 --no-cache-dir install spidev                            # 追加
 
# Modify as necessary
#RUN useradd -m -u 1000 atmark
RUN adduser -D -u 1000 atmark

この状態で[Generate development swu]を行うと下記のエラーとなりました。

STEP 7: RUN pip3 --no-cache-dir install spidev
Collecting spidev
  Downloading spidev-3.6.tar.gz (11 kB)
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Getting requirements to build wheel: finished with status 'done'
  Installing backend dependencies: started
  Installing backend dependencies: finished with status 'done'
  Preparing metadata (pyproject.toml): started
  Preparing metadata (pyproject.toml): finished with status 'done'
Building wheels for collected packages: spidev
  Building wheel for spidev (pyproject.toml): started
  Building wheel for spidev (pyproject.toml): finished with status 'error'
  error: subprocess-exited-with-error
 
  × Building wheel for spidev (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [23 lines of output]
      /tmp/pip-build-env-ednuiu2j/overlay/lib/python3.11/site-packages/setuptools/dist.py:498: SetuptoolsDeprecationWarning: Invalid dash-separated options
      !!
 
              ********************************************************************************
              Usage of dash-separated 'description-file' will not be supported in future
              versions. Please use the underscore name 'description_file' instead.
 
              This deprecation is overdue, please update your project and remove deprecated
              calls to avoid build errors in the future.
 
              See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details.
              ********************************************************************************
 
      !!
        opt = self.warn_dash_deprecation(opt, section)
      running bdist_wheel
      running build
      running build_ext
      building 'spidev' extension
      creating build
      creating build/temp.linux-armv7l-cpython-311
      gcc -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/include/python3.11 -c spidev_module.c -o build/temp.linux-armv7l-cpython-311/spidev_module.o
      error: command 'gcc' failed: No such file or directory
      [end of output]
 
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for spidev
Failed to build spidev
ERROR: Could not build wheels for spidev, which is required to install pyproject.toml-based projects
Error: error building at STEP "RUN pip3 --no-cache-dir install spidev": error while running runtime: exit status 1
イメージをビルドできませんでした。

「error: command 'gcc' failed: No such file or directory」とエラーメッセージがありましたので
gccのパッケージが不足しているのかと packages.txt に gcc を追加して再度[Generate development swu]を行いました。

STEP 7: RUN pip3 --no-cache-dir install spidev
Collecting spidev
  Downloading spidev-3.6.tar.gz (11 kB)
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Getting requirements to build wheel: finished with status 'done'
  Installing backend dependencies: started
  Installing backend dependencies: finished with status 'done'
  Preparing metadata (pyproject.toml): started
  Preparing metadata (pyproject.toml): finished with status 'done'
Building wheels for collected packages: spidev
  Building wheel for spidev (pyproject.toml): started
  Building wheel for spidev (pyproject.toml): finished with status 'error'
  error: subprocess-exited-with-error
 
  × Building wheel for spidev (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [28 lines of output]
      /tmp/pip-build-env-650duuqj/overlay/lib/python3.11/site-packages/setuptools/dist.py:498: SetuptoolsDeprecationWarning: Invalid dash-separated options
      !!
 
              ********************************************************************************
              Usage of dash-separated 'description-file' will not be supported in future
              versions. Please use the underscore name 'description_file' instead.
 
              This deprecation is overdue, please update your project and remove deprecated
              calls to avoid build errors in the future.
 
              See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details.
              ********************************************************************************
 
      !!
        opt = self.warn_dash_deprecation(opt, section)
      running bdist_wheel
      running build
      running build_ext
      building 'spidev' extension
      creating build
      creating build/temp.linux-armv7l-cpython-311
      gcc -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/include/python3.11 -c spidev_module.c -o build/temp.linux-armv7l-cpython-311/spidev_module.o
      In file included from spidev_module.c:28:
      /usr/include/python3.11/Python.h:23:12: fatal error: stdlib.h: No such file or directory
         23 | #  include <stdlib.h>
            |            ^~~~~~~~~~
      compilation terminated.
      error: command '/usr/bin/gcc' failed with exit code 1
      [end of output]
 
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for spidev
Failed to build spidev
ERROR: Could not build wheels for spidev, which is required to install pyproject.toml-based projects
Error: error building at STEP "RUN pip3 --no-cache-dir install spidev": error while running runtime: exit status 1
イメージをビルドできませんでした。

するとエラーメッセージは変わったのですが、これは packages.txt で追加した gcc が異なるということなのでしょうか?
全然検討違いなことをしていたらすみません。

よろしくお願い致します。

at_dominique.m…

2023年10月31日 9時28分

佐藤さん

マルティネです。

>       /usr/include/python3.11/Python.h:23:12: fatal error: stdlib.h: No such file or directory

> するとエラーメッセージは変わったのですが、これは packages.txt で追加した gcc が異なるということなのでしょうか?
> 全然検討違いなことをしていたらすみません。

gcc は gcc の追加であっていますが、alpine では stdlib.h 等の libc のヘッダーは依存になっていません。gcc の他に musl-dev パッケージも追加すればビルドができるようになると思います。

よろしくお願いします

マルティネ様

佐藤です。

> gcc は gcc の追加であっていますが、alpine では stdlib.h 等の libc のヘッダーは依存になっていません。gcc の他に musl-dev パッケージも追加すればビルドができるようになると思います。
packages.txt に musl-dev を追加したところ下記に変わりました。

      spidev_module.c:33:10: fatal error: linux/spi/spidev.h: No such file or directory
         33 | #include <linux/spi/spidev.h>
            |          ^~~~~~~~~~~~~~~~~~~~
      compilation terminated.
      error: command '/usr/bin/gcc' failed with exit code 1

同じような考えで packages.txt に linux-headers を追加したところ正常に dev.swu が作成されました。

>> こちらは https://git.tiwe.de/libpam-pwdfile.git/commit/ から libpam-pwdfile-master.tar.gz をダウンロードし、
>> 下記を参考にビルトするということでしょうか?
> それでもいいかもしれませんが、別のコンテナでビルドすると alpine の更新などで動くなくなる恐れもありますので、それも Dockerfile で直接にビルドした方がいいと思います。
> 依存をインストールすれば、RUN に make 等も使用加能ですので、手動ビルドと変わりません。
pwdfile を Dockerfile でビルドする方法について教えていただけないでしょうか?

RUN wget https://git.tiwe.de/libpam-pwdfile.git/snapshot/libpam-pwdfile-master.tar.gz
RUN tar -zxvf libpam-pwdfile-master.tar.gz
RUN cd /libpam-pwdfile-master/
RUN make

上記のような方法でよいのでしょうか?

STEP 9: RUN cd /libpam-pwdfile-master/
STEP 10: RUN make
make: *** No targets specified and no makefile found.  Stop.
Error: error building at STEP "RUN make": error while running runtime: exit status 2
イメージをビルドできませんでした。

makeを行うとエラーになってしまうため、
コメントアウトしたものを Generate し Armadillo-640 に書き込みました。

pam_pwdfile.c:65:10: fatal error: security/pam_appl.h: No such file or directory
   65 | #include <security/pam_appl.h>

Armadillo-640 の alpine コンテナ内で make を行うと上記となるため
packages.txt に linux-pam-dev を追加して make を行ったところ
pam_pwdfile.o と pam_pwdfile.so が正常に作成できました。

手動ではよかったのですが Dockerfile でどのようにすれば make 出来るのでしょうか?
 RUN make -f Makefile 」なども試してみたのですが変わりませんでした。

よろしくお願い致します。

at_dominique.m…

2023年10月31日 12時38分

佐藤さん

マルティネです。

> RUN wget https://git.tiwe.de/libpam-pwdfile.git/snapshot/libpam-pwdfile-master.tar.gz
> RUN tar -zxvf libpam-pwdfile-master.tar.gz
> RUN cd /libpam-pwdfile-master/
> RUN make

> 上記のような方法でよいのでしょうか?

公人的にはファイルをあらかじめダウンロードして COPY でコンテナに入れますが、流れとしてはあっています。

> STEP 9: RUN cd /libpam-pwdfile-master/
> STEP 10: RUN make
> make: *** No targets specified and no makefile found.  Stop.
> Error: error building at STEP "RUN make": error while running runtime: exit status 2
> イメージをビルドできませんでした。

> makeを行うとエラーになってしまうため、

各 RUN の行は新しい shell で実行されて、現在ディレクトリなどの情報がリセットされます。
RUN cd <directory> && makemake -C <directory> で対応できます。

> Armadillo-640 の alpine コンテナ内で make を行うと上記となるため
> packages.txt に linux-pam-dev を追加して make を行ったところ
> pam_pwdfile.o と pam_pwdfile.so が正常に作成できました。

これも正常です。
その後は make install か手動コピーで pam_pwdfile.so を /lib/security にインストールすれば使えるはずです。

よろしくお願いします。

マルティネ様

佐藤です。

> > RUN wget https://git.tiwe.de/libpam-pwdfile.git/snapshot/libpam-pwdfile-master.tar.gz
> > RUN tar -zxvf libpam-pwdfile-master.tar.gz
> > RUN cd /libpam-pwdfile-master/
> > RUN make

> > 上記のような方法でよいのでしょうか?
> 公人的にはファイルをあらかじめダウンロードして COPY でコンテナに入れますが、流れとしてはあっています。
VSCodeのプロジェクトの /container/resources 内にダウンロードした libpam-pwdfile-master.tar.gz を格納しました。
この場所に格納しておけばよいのでしょうか?

> > STEP 9: RUN cd /libpam-pwdfile-master/
> > STEP 10: RUN make
> > make: *** No targets specified and no makefile found.  Stop.
> > Error: error building at STEP "RUN make": error while running runtime: exit status 2
> > イメージをビルドできませんでした。

> 各 RUN の行は新しい shell で実行されて、現在ディレクトリなどの情報がリセットされます。
RUN cd <directory> && makemake -C <directory> で対応できます。
> その後は make install か手動コピーで pam_pwdfile.so を /lib/security にインストールすれば使えるはずです。

ARG PRODUCT
COPY resources [r]esources_${PRODUCT} /
 
# Add extra packages to containers/packages.txt
ARG PACKAGES
#RUN apt-get update && apt-get upgrade -y \
#    && apt-get install -y ${PACKAGES} \
#    && apt-get clean
RUN apk upgrade && apk add ${PACKAGES} && rm -f /var/cache/apk/* && pip3 --no-cache-dir install spidev
 
#RUN wget https://git.tiwe.de/libpam-pwdfile.git/snapshot/libpam-pwdfile-master.tar.gz
RUN tar -zxvf libpam-pwdfile-master.tar.gz
RUN make -C /libpam-pwdfile-master/
RUN cd /libpam-pwdfile-master/ && make install pam_pwdfile.so
 
# Modify as necessary
RUN adduser -D -u 1000 atmark

Dockerfile を上記のように修正し、make した pam_pwdfile.so をインストールすることが出来ました。

> 例えば、vsftpd.conf のデフォルト位置が変わりますので、デフォルトのファイルを使っていたらそういう細かい変更が必要になるかもしれません(このファイルについては使わなければ特に問題ないです)
alpine コンテナでの vsftpd の設定、バーチャルユーザーの設定を引き続き行います。

よろしくお願い致します。

at_dominique.m…

2023年10月31日 16時06分

佐藤さん、

マルティネです。

> > 個人的にはファイルをあらかじめダウンロードして COPY でコンテナに入れますが、流れとしてはあっています。
>
> VSCodeのプロジェクトの /container/resources 内にダウンロードした libpam-pwdfile-master.tar.gz を格納しました。
> この場所に格納しておけばよいのでしょうか?

/container/resources はコピーされていますので、そこでもいいです。
後でムルチステージビルドを行う場合は別のディレクトリに移動してビルド用の COPY を追加した方がいいかもしれませんが、今の段階はそのディレクトリで問題ありません。

> > 例えば、vsftpd.conf のデフォルト位置が変わりますので、デフォルトのファイルを使っていたらそういう細かい変更が必要になるかもしれません(このファイルについては使わなければ特に問題ないです)
> alpine コンテナでの vsftpd の設定、バーチャルユーザーの設定を引き続き行います。

もうちょっとで動きそうですね。
引き続きよろしくお願いします。

マルティネ様

佐藤です。

> > > 例えば、vsftpd.conf のデフォルト位置が変わりますので、デフォルトのファイルを使っていたらそういう細かい変更が必要になるかもしれません(このファイルについては使わなければ特に問題ないです)
> > alpine コンテナでの vsftpd の設定、バーチャルユーザーの設定を引き続き行います。
> もうちょっとで動きそうですね。
SPIの通信波形とFTPサーバーへバーチャルユーザーでログイン出来ることを確認しました。

あと残りは lighttpd なのですが、alpine コンテナ内からWebサーバーを起動すると、
下記のエラーメッセージが表示されました。

/ # lighttpd -f /etc/lighttpd/lighttpd.conf
/bin/sh: /usr/share/lighttpd/use-ipv6.pl: not found
2023-11-01 02:30:04: (../src/configfile.c.2477) command "/usr/share/lighttpd/use-ipv6.pl 80" exited non-zero: 127
2023-11-01 02:30:04: (../src/configfile.c.2188) source: /etc/lighttpd/lighttpd.conf line: 48 pos: 0 parser failed somehow near here: (EOL)

これはまた packages.txt への追加が必要なのでしょうか?
それとも lighttpd.conf ファイル等の修正が必要でしょうか?

よろしくお願い致します。

at_dominique.m…

2023年11月1日 13時01分

佐藤さん、

マルティネです。

> / # lighttpd -f /etc/lighttpd/lighttpd.conf
> /bin/sh: /usr/share/lighttpd/use-ipv6.pl: not found
> 2023-11-01 02:30:04: (../src/configfile.c.2477) command "/usr/share/lighttpd/use-ipv6.pl 80" exited non-zero: 127
> 2023-11-01 02:30:04: (../src/configfile.c.2188) source: /etc/lighttpd/lighttpd.conf line: 48 pos: 0 parser failed somehow near here: (EOL)

> これはまた packages.txt への追加が必要なのでしょうか?
> それとも lighttpd.conf ファイル等の修正が必要でしょうか?

use-ipv6.pl は alpine でパッケージされてなさそうですね。
debian からまるごとコピーして、perl をインストールすれば動くと思いますが、今回は ipv6 を使っているかどうかはすでに決まっていたらコンフィグの修正でもいいと思います。
(このスクリプトは、ipv6 を使える場合に「$SERVER["socket"] == "[::]:80" { }」をコンフィグに追加しているだけです。ABOSのデフォルトでは常に設定しても害はないと思いますが、ネットワーク設定に関わる物なので環境に合わせた設定を選んでください)

覚えている範囲のコンフィグでは cgi のために lighttpd を使用していたので、その後の「create-mime.conf.pl」も同様に削除していいと思います。

よろしくおねがいします。

マルティネ様

佐藤です。

> use-ipv6.pl は alpine でパッケージされてなさそうですね。
> debian からまるごとコピーして、perl をインストールすれば動くと思いますが、今回は ipv6 を使っているかどうかはすでに決まっていたらコンフィグの修正でもいいと思います。
> (このスクリプトは、ipv6 を使える場合に「$SERVER["socket"] == "[::]:80" { }」をコンフィグに追加しているだけです。ABOSのデフォルトでは常に設定しても害はないと思いますが、ネットワーク設定に関わる物なので環境に合わせた設定を選んでください)
> 覚えている範囲のコンフィグでは cgi のために lighttpd を使用していたので、その後の「create-mime.conf.pl」も同様に削除していいと思います。
すみません。
書き込んでから気付いたのですが、lighttpd.conf は Debian のときに修正したファイルをそのまま使用していました。

これはそうでなく alpine のデフォルトの lighttpd.conf に下記の fastcgi の修正した方がよいのでしょうか?
●Armadillo-640/IoT(A6):Webブラウザの画面から制御(lighttpd+php-cgiを使用)
https://armadillo.atmark-techno.com/blog/615/12832

ファイル ファイルの説明
lighttpd.conf alpine のデフォルトファイル
lighttpd.conf Debianのデフォルトファイル

at_dominique.m…

2023年11月1日 15時53分

マルティネです。

> これはそうでなく alpine のデフォルトの lighttpd.conf に下記の fastcgi の修正した方がよいのでしょうか?
> ●Armadillo-640/IoT(A6):Webブラウザの画面から制御(lighttpd+php-cgiを使用)
> https://armadillo.atmark-techno.com/blog/615/12832

そうですね、同じプログラムなのでどちらでもいいと思いますが、debian のコンフィグで続くと違いを確認した方がいいかもしれません(例えば、debian で lighttpd の別のユーザーを使っていますが alpine では www-data を使っています。その場合は起動時にエラーすると思いますので、エラーを一つずつ修正すれば起動できるようになります)

今回はほとんどの設定を無視して fcgi だけ動けばいいと思いますので、確かに alpine のコンフィグからやり直した方が早いかもしれません。

(すみません、ファイルの違いをちゃんと確認してないので必要かどうかははっきりいえません)

よろしくお願いします。

マルティネ様

佐藤です。

> > これはそうでなく alpine のデフォルトの lighttpd.conf に下記の fastcgi の修正した方がよいのでしょうか?
> > ●Armadillo-640/IoT(A6):Webブラウザの画面から制御(lighttpd+php-cgiを使用)
> > https://armadillo.atmark-techno.com/blog/615/12832
>
> そうですね、同じプログラムなのでどちらでもいいと思いますが、debian のコンフィグで続くと違いを確認した方がいいかもしれません(例えば、debian で lighttpd の別のユーザーを使っていますが alpine では www-data を使っています。その場合は起動時にエラーすると思いますので、エラーを一つずつ修正すれば起動できるようになります)
>
> 今回はほとんどの設定を無視して fcgi だけ動けばいいと思いますので、確かに alpine のコンフィグからやり直した方が早いかもしれません。
alpine のコンフィグの上下に下記を追加しました。

server.modules = (
    ・・・
    "mod_fastcgi",
    "mod_cgi",
)
 
・・・
 
fastcgi.debug = 1
 
fastcgi.server = ( ".php" =>
    ( "localhost" =>
        (
            "socket" => "/tmp/php-fastcgi.socket",
            "bin-path" => "/usr/bin/php-cgi",
        )
    )
)

また、「server.document-root = var.basedir + "/htdocs"」となっていたので
python_app.conf のhtmlの格納先を「add_volumes www_html:/var/www/localhost/htdocs 」に変更しました。

無事にブラウザで index.html が表示され phpスクリプトも実行されました。

ありがとうございました。