Armadilloフォーラム

Armadillo-460でhttps対応

kz21_ym

2024年10月28日 11時23分

お世話になります。

Armadillo-460、atmark-dist の環境での質問になります。
この組み合わせでhttpsに対応したい
(この組み合わせを使用している従来製品でhttps接続できるようにしたい)
という質問です。

lighttpd.confを修正すればhttpsを有効にできるということで
やってみてhttps自体は有効になったのですが
ArmadilloのTLSが1.2に対応していない
との理由で接続ができませんでした。
TLS1.2に対応するためには libsslが 1.0.1以降である必要が
あるようですがArmadiloの libsslは 0.9.8になっています。

これはATDE3でlibssl0.9.8 が使用されているためのようですが
これを 1.0.1以降に置換えればArmadilloでもTLS1.2に対応する
ようにできるでしょうか?
ATDE3のlibsslを1.0.1以降のものに置換えることは可能でしょうか?

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

コメント

溝渕です。

いくつかの方法が考えられますが、いずれもこちらでの動作実績はありませんので参考程度に捉えてください。

> これはATDE3でlibssl0.9.8 が使用されているためのようですが
> これを 1.0.1以降に置換えればArmadilloでもTLS1.2に対応する
> ようにできるでしょうか?

上記、ライブラリの依存関係等に問題無ければ最も簡単な方法になるかと思います。

Debian 7("wheezy")以降であれば、libssl1.0.1以降となりますので、パッケージを取得の上、以下を参照してATDE3にインストールしてみてください。

https://manual.atmark-techno.com/armadillo-guide/armadillo-guide-2_ja-3…

もし、依存関係に問題が発生した場合は、依存パッケージも合わせてupgradeする必要があります。

また、Linux 3.14(+いくつかのパッケージがupgradeされたatmark-dist)を使うという方法もあります。ただし、Armadillo-460は非対応の為、(特にLinuxカーネルノPC104周辺で)開発が必要になります。

[Armadillo-400 シリーズ Linux 3.14 移行ガイド]
https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_3_1…

回答ありがとうございます。
まずはパッケージのインストールを試してみます。

溝渕です。

直接的な解決方法を提案できずにすみません。もし躓きましたら、またご連絡ください。

三原と申します。

入れ替えるのではなく、ソースコードからビルドして /usr/local 以下にインストールすることは技術的に可能です。OpenSSL は使用するライブラリが少ないためです。
そのあとは /usr/local 以下にインストールした OpenSSL を使用するように、アプリケーションをビルドしなおす必要があります。
OpenSSL のみ差し替えるのではなく、OpenSSL を根底として上に位置するアプリケーションも別のバージョンのものをインストールし直します。

ソースコードの tar ボールは以下にあります。
https://openssl-library.org/source/old/index.html

openssl-1.0.2u.tar.gz を展開して INSTALL ファイルの冒頭を読むと、以下のようになります。
ただ 1.0.2 は脆弱性への対処が終了しています。推奨するのは難しい、というニュアンスをお察し願います。

=== 引用ここから
INSTALLATION ON THE UNIX PLATFORM
---------------------------------

[Installation on DOS (with djgpp), Windows, OpenVMS, MacOS (before MacOS X)
and NetWare is described in INSTALL.DJGPP, INSTALL.W32, INSTALL.VMS,
INSTALL.MacOS and INSTALL.NW.

This document describes installation on operating systems in the Unix
family.]

To install OpenSSL, you will need:

* make
* Perl 5
* an ANSI C compiler
* a development environment in form of development libraries and C
header files
* a supported Unix operating system
=== 引用ここまで

OpenSSL を使用するアプリケーションをビルドする際には、ビルド時の動的ライブラリのパスなどを pkg-config 経由で取得します。具体的なコマンド引数などは環境に依存しますから割愛いたします。OpenSSL と pkg-config のドキュメントを参照お願いします。

お世話になります。

前の投稿からの関連で
lighttpdをソースからビルドの時のインストールパスの
指定のしかたについての質問になります。

前の流れから
openssl1.0.1のライブラリ
バイナリパッケージの
libssl1.0.0_1.0.1-2_armel.deb を入手できたので
そのライブラリ
libssl.so.1.0.0
libcrypto.so.1.0.0
をATDE3の /usr/arm-linux-gnueabi/lib/ に配置して
atmark-distをビルドすることでブラウザから
TLS1.2に対応していないため接続できなかったものが
接続できるようになるのを確認できました。

一旦そこまでは確認できたのですが
TLS1.3に対応できた方がよいのではということで
対応しているライブラリ 1.1.1 のもの
libssl1.1_1.1.1n-0+deb10u3_armel.deb
を試したのですがこちらは atmark-dist ビルドの際に
-------------------------
/usr/arm-linux-gnueabi/lib/libcrypto.so: undefined reference to `__fdelt_chk@GLIBC_2.15'
/usr/arm-linux-gnueabi/lib/libcrypto.so: undefined reference to `secure_getenv@GLIBC_2.17'
/usr/arm-linux-gnueabi/lib/libcrypto.so: undefined reference to `getauxval@GLIBC_2.16'
/usr/arm-linux-gnueabi/lib/libcrypto.so: undefined reference to `clock_gettime@GLIBC_2.17'
-------------------------
などの glibc と合っていないようなエラーがでましたので
ライブラリはソースからビルドしてみることにし
https://openssl-library.org/source/old/index.htmlから
openssl-1.1.1w.tar.gz をダウンロードしてビルドを行いました。
まだこのライブラリで動くかは確認できていませんが
なんとかライブラリビルドまではでき atmark-distビルドのときの
glibcのエラーはなくなったのですが atmark-dist の lighttpd のソース
とは一部合わない部分があり
-------------------------
server.c:(.text+0x1d4): undefined reference to `CRYPTO_cleanup_all_ex_data'
server.c:(.text+0x1d8): undefined reference to `ERR_free_strings'
server.c:(.text+0x1e4): undefined reference to `EVP_cleanup'
-------------------------
などのエラーが発生するためこのライブラリに対応している
と思われる少し新しいソース lighttpd-1.4.51.tar.gz でビルドして
みることにしました。

configure でインストール先としてATDE3上の仮のパスを指定し
make
make install を実行し lighttpd は作成されました。
atmark-distの外で別でビルドしています。

これを実際にarmadillo上で起動すると
lighttpdビルドで生成される .so をATDE3上の仮パスで捜しにいくようで
動作できません。
インストール先指定をarmadillo上で動作するときのパスにすれば
解決できるのかもしれませんが install 行うと ATDE3の /usr などに
配置されることになりそうなので、できればATDE3上では仮のパスに配置されるに
したいのですがパスの指定のしかたなどどのようにすればよいでしょうか?

atmark-distのlighttpdではlighttpdのディレクトリ内のinsatllに
一旦インストールされているように見えたので
make install の時に同様にならないかと思い
configureではamradillo上のパスを指定しておいて
installで
---------------------------------------
export TARGET_LIGHTTPD=my_target
make prefix=${TARGET_LIGHTTPD} exec_prefix=${TARGET_LIGHTTPD} install
---------------------------------------
のようにもしてみたりしたのですが
---------------------------------------
libtool: error: 'my_target/lib' must be an absolute directory name
---------------------------------------
といったエラーがでて上手くいきませんでした。

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

溝渕です。

> ---------------------------------------
> libtool: error: 'my_target/lib' must be an absolute directory name
> ---------------------------------------

これは、「絶対ディレクトリ名である必要があります」という意味なので、ディレクトリを絶対パスで指定してみてはいかがでしょうか。

例えば、カレントディレクトリが、
"/home/atmark/"
の場合、直下の"hoge/"ディレクトリの相対パスは、
"hoge/"
のようになり、絶対パスは、
"/home/atmark/hoge/"
のようになります。

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

経緯を説明したかったので前の書込みが長すぎました。
質問の要旨は
--------------------------------
configure でインストール先としてATDE3上の仮のパスを指定し
make
make install を実行し lighttpd は作成されました。
atmark-distの外で別でビルドしています。

これを実際にarmadillo上で起動すると
lighttpdビルドで生成される .so をATDE3上の仮パスで捜しにいくようで
動作できません。
インストール先指定をarmadillo上で動作するときのパスにすれば
解決できるのかもしれませんが install 行うと ATDE3の /usr などに
配置されることになりそうなので、できればATDE3上では仮のパスに配置されるに
したいのですがパスの指定のしかたなどどのようにすればよいでしょうか?
--------------------------------
の部分になります。

configure で
--prefix=/home/atmark/test/lighttpd/my_target-1.4.51
と指定していて
ビルドしたものを実行すると

[root@ (ttyp0) /home/ftp/pub/https_test/lighttpd_build]# lighttpd -f /etc/lighttpd.conf
2024-11-14 16:35:13: (plugin.c.230) dlopen() failed for: /home/atmark/test/lighttpd/my_target-1.4.51/lib/mod_indexfile.so /home/atmark/test/lighttpd/my_target-1.4.51/lib/mod_indexfile.so: cannot open shared object file: No such file or directory
2024-11-14 16:35:13: (server.c.1155) loading plugins finally failed
[root@ (ttyp0) /home/ftp/pub/https_test/lighttpd_build]#

となって /home/atmark/test/lighttpd/my_target-1.4.51/lib を見に行くので

--prefix=/usr とすればいいかと思うのですが
これで make install すると ATDEの /usr のファイルが上書きされるのではないかと思うので
別のパスにしておきたいのです。

atmark-distのlighttpdの config.log 見ると

$ ../configure --build=i686-pc-linux-gnu --host=arm-unknown-linux-gnueabi --prefix=/usr --libdir=/usr/lib/lighttpd --with-openssl

となっているので armadillo上でのパスが指定されていると思うのですが
lighttpdディレクトリ下の install にファイルが出力されています。

実際に実行されるパスと出力先のパスは
どうやって分ければよいのでしょうか?

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

溝渕です。

恐らく生成物はいくつしか無いと思いますので、手動でromfsディレクトリにコピーするのが簡単かと思います。

https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_sof…

少なくとも、(ライブラリでなく)アプリケーションについては、atmark-distの外から自動的に持ってくる仕組みが無いのでOut-Of-Treeコンパイルをしたlighttpdは、romfsディレクトリに手動でコピーしてください。

ライブラリに関しては、atmark-distの仕組みでインストール可能です。

atmark-dist/vendors/AtmarkTechno/Common/tools/lib-inst.sh
上記が、アプリケーションが利用するライブラリを検索して、ATDEのクロスライブラリまたはatmark-dist内からromfsにインストールするスクリプトです。このうち、
CROSS_LIB_DIR
に、ビルドしたlighttpdのライブラリが入っているディレクトリを追加してみてください。

ひとまずhttpsでの接続確認できました。
現状 OpenSSL 3.0.16のライブラリ+lighttpd 1.4.75 の
組合せで行えました。

lighttpdのインストールはインストール先を絶対パス
で指定して意図したパスに配置することができました。
今のところはアルマジロに直接ファイルを
転送、配置して確認しています。
romfs への配置は何かスクリプトファイルなど
作成して行うようにしようと思います。

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