計算機メモ目次 (目的のページと内容が一致しない場合, 目次から探してください)

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 にシンボリックリンクしても動かない.


計算機メモ目次 (目的のページと内容が一致しない場合, 目次から探してください)
海洋大循環分野
daigo@ocg.aori.u-tokyo.ac.jp