計算機メモ目次 (目的のページと内容が一致しない場合, 目次から探してください)
Solaris8 にて openssl-1.1.1t を構築する ※コンパイルは問題ないが動かない
《古い》
準備
/dev/random に相当するデバイスファイルが必要だが, Solaris8 の場合,
かつて SunSolve から出ていたパッチ 112438-02 を当てる必要がある.
現在は, Sun の契約番号を持っていれば, Sun を買収した Oracle のサイトから
ダウンロードできるようである(未確認).
Perl のバージョンは 5.10 以上であること
ダウンロード
https://www.openssl.org/source/openssl-1.1.1t.tar.gz
展開
tar xvfz openssl-1.1.1t.tar.gz
cd openssl-1.1.1t
コンフィギュレーションファイルの修正
Configurations 配下の2つのファイル 10-main.conf と shared-info.pl,
crypto/bn/asm 配下の sparcv9a-mont.pl を修正する
参照: https://github.com/openssl/openssl/pull/8548/files
参照: https://stackoverflow.com/questions/60161137/clock-gettime-undefined-symbol-sunos
参照: https://mta.openssl.org/pipermail/openssl-users/2019-May/010450.html
*** Configurations/10-main.conf.orig Mon Mar 6 12:26:15 2023
--- Configurations/10-main.conf Mon Mar 6 13:29:31 2023
***************
*** 208,228 ****
inherit_from => [ "BASE_unix" ],
template => 1,
lib_cppflags => "-DFILIO_H",
! ex_libs => add("-lsocket -lnsl -ldl"),
dso_scheme => "dlfcn",
thread_scheme => "pthreads",
- shared_target => "self",
shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)",
shared_ldflag => "-Wl,-Bsymbolic",
shared_defflag => "-Wl,-M,",
shared_sonameflag=> "-Wl,-h,",
},
#### Solaris x86 with GNU C setups
"solaris-x86-gcc" => {
# NB. GNU C has to be configured to use GNU assembler, and not
# /usr/ccs/bin/as. Failure to comply will result in compile
# failures [at least] in 32-bit build.
! inherit_from => [ "solaris-common", asm("x86_elf_asm") ],
CC => "gcc",
CFLAGS => add_before(picker(default => "-Wall",
debug => "-O0 -g",
--- 208,239 ----
inherit_from => [ "BASE_unix" ],
template => 1,
lib_cppflags => "-DFILIO_H",
! ex_libs => add("-lsocket -lnsl -ldl -lrt"),
dso_scheme => "dlfcn",
thread_scheme => "pthreads",
shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)",
+ },
+ #### Solaris common with Sun C setups
+ "solaris-common-cc" => {
+ inherit_from => [ "solaris-common" ],
+ template => 1,
+ shared_target => "solaris",
shared_ldflag => "-Wl,-Bsymbolic",
shared_defflag => "-Wl,-M,",
shared_sonameflag=> "-Wl,-h,",
},
+ #### Solaris commonc with GNU C setups
+ "solaris-common-gcc" => {
+ inherit_from => [ "solaris-common" ],
+ template => 1,
+ shared_target => "solaris-gcc",
+ },
#### Solaris x86 with GNU C setups
"solaris-x86-gcc" => {
# NB. GNU C has to be configured to use GNU assembler, and not
# /usr/ccs/bin/as. Failure to comply will result in compile
# failures [at least] in 32-bit build.
! inherit_from => [ "solaris-common-gcc", asm("x86_elf_asm") ],
CC => "gcc",
CFLAGS => add_before(picker(default => "-Wall",
debug => "-O0 -g",
***************
*** 243,249 ****
# code [thanks to inline assembler], I would actually recommend
# to consider using gcc shared build even with vendor compiler:-)
# -- <appro@openssl.org>
! inherit_from => [ "solaris-common", asm("x86_64_asm") ],
CC => "gcc",
CFLAGS => add_before(picker(default => "-Wall",
debug => "-O0 -g",
--- 254,260 ----
# code [thanks to inline assembler], I would actually recommend
# to consider using gcc shared build even with vendor compiler:-)
# -- <appro@openssl.org>
! inherit_from => [ "solaris-common-gcc", asm("x86_64_asm") ],
CC => "gcc",
CFLAGS => add_before(picker(default => "-Wall",
debug => "-O0 -g",
***************
*** 272,278 ****
# Consider switching to solaris64-x86_64-gcc even here...
#
"solaris64-x86_64-cc" => {
! inherit_from => [ "solaris-common", asm("x86_64_asm") ],
CC => "cc",
CFLAGS => add_before(picker(debug => "-g",
release => "-xO5 -xdepend -xbuiltin")),
--- 283,289 ----
# Consider switching to solaris64-x86_64-gcc even here...
#
"solaris64-x86_64-cc" => {
! inherit_from => [ "solaris-common-cc", asm("x86_64_asm") ],
CC => "cc",
CFLAGS => add_before(picker(debug => "-g",
release => "-xO5 -xdepend -xbuiltin")),
***************
*** 291,297 ****
#### SPARC Solaris with GNU C setups
"solaris-sparcv7-gcc" => {
! inherit_from => [ "solaris-common" ],
CC => "gcc",
CFLAGS => add_before(picker(default => "-Wall",
debug => "-O0 -g",
--- 302,308 ----
#### SPARC Solaris with GNU C setups
"solaris-sparcv7-gcc" => {
! inherit_from => [ "solaris-common-gcc" ],
CC => "gcc",
CFLAGS => add_before(picker(default => "-Wall",
debug => "-O0 -g",
*** Configurations/shared-info.pl.orig Mon Mar 6 12:41:34 2023
--- Configurations/shared-info.pl Mon Mar 6 12:42:52 2023
***************
*** 79,82 ****
--- 79,94 ----
shared_sonameflag => '-h ',
};
},
+ 'solaris-gcc-shared' => sub {
+ return $shared_info{'linux-shared'} if detect_gnu_ld();
+ return {
+ # Note: we should also have -shared here, but because some
+ # config targets define it with an added -static-libgcc
+ # following it, we don't want to change the order. This
+ # forces all solaris gcc config targets to define shared_ldflag
+ shared_ldflag => '-Wl,-Bsymbolic',
+ shared_defflag => "-Wl,-M,",
+ shared_sonameflag => "-Wl,-h,",
+ };
+ },
);
*** crypto/bn/asm/sparcv9a-mont.pl.orig Fri Mar 10 13:11:52 2023
--- crypto/bn/asm/sparcv9a-mont.pl Fri Mar 10 13:12:30 2023
***************
*** 129,134 ****
--- 129,135 ----
.section ".text",#alloc,#execinstr
.global $fname
+ .weak $fname
.align 32
$fname:
save %sp,-$frame-$locals,%sp
コンフィギュレーション
./Configure --prefix=/usr/local --openssldir=/usr/local/etc/openssl shared no-asm solaris64-sparcv9-gcc
※ このオプションでバイナリは /usr/local/bin, /usr/local/lib に,
設定ファイルなどは /usr/local/etc/openssl に, それぞれインストールされる.
no-asm はアセンブラを使わないオプション.
shared は動的ライブラリも作成するオプション.
※ Forte6 の cc ではコンパイル時にエラーが出るので GNU C コンパイラを使うよう
設定すること.
Forte6 のコンパイラは, ソースプログラムの存在するディレクトリの外から
コンパイルを実行するとき, ソースと同じディレクトリのインクルードファイルを
相対パスの指定では読み込めない.
例: a.h と a.c が同じディレクトリ /source にあるとし,
a.c では a.h を
#include "a.h"
で呼んでいるものとする.
カレントディレクトリが /source の外であるとき, コンパイルの実行は当然
cc -c /source/a.c
とするが, このとき Forte6 の cc は a.h を探し出せない.
メイク
gmake depend
gmake
gmake test ※※※ エラーが出てインストールしても動かない ※※※
インストール
gmake DESTDIR= install
※ 標準の make ではうまくインストールできない場合がある.
後処理
オンラインマニュアルは, 同じ内容のものが別の項目のマニュアルとして
シンボリックリンクで作成されるので, gzip 化をするには都合が悪い.
次のようにして別個のファイルとして作成し直す.
cd /usr/local/etc/openssl/man;
for i in `find . -type l -print`; do
eval `ls -l $i | awk '{printf "LINK=%s;FILE=%s;\n",$9,$11}'`;
DIR=`dirname $LINK`;
LINK=`basename $LINK`;
echo $DIR $LINK $FILE;
/bin/rm $DIR/$LINK; /bin/cp $DIR/$FILE $DIR/$LINK;
done
/usr/local/etc/openssl/openssl.cnf の編集
openssl-1.0.0? からのアップデートなら前のバージョンのをそのまま使えばよい
備考
OpenSSL のアップデートで影響をうけるもの
Apache, OpenSSH, sendmail, Gtk (mozilla, gimp)
libssl.so.* と libcrypt.so.* の古いバージョンを
新しい libssl.so.1.1 や libcrypto.so.1.1 にシンボリックリンクしても動かない.
計算機メモ目次 (目的のページと内容が一致しない場合, 目次から探してください)