変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

ReadyNAS-212

[GIT]インストール

インストールしてみた。

$ sudo apt-get install git-all
$ git --version
git version 2.1.4
$ git config --global user.name "xxxx yyy zzzzzzz"
$ git config --global user.email xxxx@yyyy.zzz
$ git config --list
user.name=xxxx yyy zzzzzzz
user.email=xxxx@yyyy.zzz
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
$ mkdir /home/*****/www.git
$ cd /home/*****/www.git
$ git init --bare --shared

作業フォルダを作り、ベアと連携

$ mkdir <ソースのプロジェクトのフォルダ>
$ cd <ソースのプロジェクトのフォルダ>
$ git init
Initialized empty Git repository in /home/*****/*****/.git/
$ git clone /home/*****/www.git

コードを入れ、管理対象を追加。

$ git add *
$ git commit -m 'init'
いっぱい流れる

コピってみる。

$ mkdir /home/*****/test
$ cd /home/*****/aaa
$ git clone /home/*****/www.git 

WindowsのPCにもコピってみる。
Git-2.27.0-64-bit.exeを初期設定で【Next >】ボタンを押してインストールすると何故か?コマンドラインから使えないので、コンポーネントは全振りにする。

適当なフォルダを作って、cloneすると

C:\適当なフォルダ>git clone {ユーザ名}@{ホスト名}:{ベアなリポジトリィのフルパス}
Cloning into 'www'...
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:*********************************************.
Please contact your system administrator.
Add correct host key in /c/Users/****/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /c/Users/****/.ssh/known_hosts:1
ECDSA host key for {ホスト名} has changed and you have requested strict checking.
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

(;゚Д゚)オレシラナイ と云うので観なかったことにする。

ssh-keygen -R {ホスト名}
C:\適当なフォルダ>git clone {ユーザ名}@{ホスト名}:{ベアなリポジトリィのフルパス}
Cloning into 'www'...
The authenticity of host '{ホスト名} ({ホスト名})' can't be established.
ECDSA key fingerprint is SHA256:*********************************************.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '{ホスト名}' (ECDSA) to the list of known hosts.
{ユーザ名}@{ホスト名}'s password:{パスワードを入れる}
remote: Counting objects: 2148, done.
remote: Compressing objects: 100% (1663/1663), done.
remote: Total 2148 (delta 376), reused 2148 (delta 376)
Receiving objects: 100% (2148/2148), 20.27 MiB | 39.77 MiB/s, done.
Resolving deltas: 100% (376/376), done.
Updating files: 100% (2611/2611), done.

見てみると

C:\適当なフォルダ>dir
 ドライブ C のボリューム ラベルは ボリューム です
 ボリューム シリアル番号は ****-**** です

 C:\適当なフォルダ> のディレクトリ

2020/07/28  11:00    <DIR>          .
2020/07/28  11:00    <DIR>          ..
2020/07/28  11:01    <DIR>          www
               0 個のファイル                   0 バイト
               3 個のディレクトリ  568,894,787,584 バイトの空き領域

なぜか、www フォルダが出来、その中にソースが入っている。

とりあえず、サーバにあるNode.jsのアプリのソースをVisual Studio Codeで
デバッグする準備が出来た。

あ、SJISのファイルが、コンバートしたので、アップしてみる。

$ git commit -m 'memo utf8' -a
$ git push -u origin master

Windowsに取り込む

C:\適当なフォルダ> git pull
{ユーザ名}@{ホスト名}'s password:{パスワードを入れる}
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (3/3), 645 bytes | 1024 bytes/s, done.
From {ホスト名}:/home/****/www
   5016d20..c2a658f  master     -> origin/master
Updating 5016d20..c2a658f
Fast-forward
 "\343\203\241\343\203\242.txt" | 42 +++++++++++++++++++++---------------------
 1 file changed, 21 insertions(+), 21 deletions(-)

ps. Visual Studio Code でGithubみたいに画面のボタンからgit push したい場合。

面倒だけど、方法はあった。

以下、参考にした記事。

7.14 Git のさまざまなツール – 認証情報の保存

4.3 Gitサーバー – SSH 公開鍵の作成

gitのリモートプライベートリポジトリを公開鍵認証を使って環境構築する

この記事の通りにやればいいはず。

諸所の事情によりサブシステムをまともに使えないメインPCはこうなった。

  1. どこかのフォルダで右クリックし、Git Bash Hereをクリック。
    ここならパスフレーズを省略した公開鍵を作成できるハズ。
    $ ssh-keygen
    Enter file in which to save the key (****¥.ssh¥id_rsa): {ENTER}
    Enter passphrase (empty for no passphrase): {ENTER}
    Enter same passphrase again: {ENTER}
  2. WinScp等でC:¥users¥{ユーザ名}¥.sshフォルダのid_rsa.pubをgitサーバーのユーザの~/.sshフォルダにコピーする。
    ※サーバに~/.sshが無かったら作成する。勿論オーナはユーザ名。
    ※左パネルのid_rsa.pubファイルを右パネルの.sshフォルダにドラッグ
  3. WinScp等で送った公開キーファイル名をauthorized_keysに変える。
    ※右パネルのid_rsa.pubファイル名をauthorized_keysに書き換える。

多分、これでOKなハズ。

これで、sshコマンドもパスワード無しでログインできてお手軽だが、sudoする時は時々パスワードを入力しないといけない。
しかし手元のTeraTermは無関係で、しかもこれは認証情報を一切覚えられないので、起動の度に秘密鍵を指定するか、設定を保存し起動の度に「設定ファイル読み込み(R)」をするかの2択しかない。

とりあえず、この方法を試した後は必要な時だけSSHサービスを開けるか、
~/.ssh/authorized_keysを別の名前にしておく必要があるね。



[node.js]v12.18.3

事前準備

$ sudo apt-get install build-essential libssl-dev

gccのインストールは、https://ssiscirine.moe.hm/?p=28263 参照

pythonのインストールは、ReadyNasの管理画面のアプリからインストール。

ソースのダウンロード

$ sudo wget https://nodejs.org/dist/v12.18.3/node-v12.18.3.tar.gz
$ tar xvzf node-v12.18.3.tar.gz
$ cd node-v12.18.3

環境変数の追加 ※以下、sudo -E で追加した環境変数が引き継がれる様にすること。

$ export CCFLAGS='-march=armv7-a'
$ export CXXFLAGS='-march=armv7-a'

makefile作成

sudo -E ./configure

ビルド

date; sudo -E make -j8 ; date;

インストール
しかし、コンパイルしまくりなので、上か下だけで良いような気がした。

$ date; sudo -E make install ; date;

と云うか、この手のパッケージは環境を破壊しやすく、再構築の時は長~いビルド時間(この手のNASでは数時間)を省いてインストールしたくなるものだと思うんだけどね。(笑)

と書いたら install は2分ほどで終わった。
もう一度 install しても2分ほどで終わった。

ビルドしたイメージをtar圧縮化して、再構築したNASで解凍した際にpythonをインストし忘れたがinstall自体は動き続けたので、何か変なコトが起こったかもしれない。



[gcc]10.2.0のビルド

ビルドすると容量がかなり大きいので rootではなく、
管理者のアカウントを使う。
sudoも入っていないのでインストし、管理者をsudoグループに加入。

$ su root -
# apt-get install sudo
# usermod -G sudo ${development-user}
# exit

まずは、開発用の必須パッケージをインスト。

$ sudo apt-get install build-essential
$ sudo apt-get install libssl-dev

gccのソースをダウンロードして解凍する。


$ wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-10.2.0/gcc-10.2.0.tar.gz
$ tar xzf gcc-10.2.0.tar.gz
$ cd gcc-10.2.0

gccのビルドに必要なパッケージ類をインスト。

$ ./contrib/download_prerequisites

2020-07-25 01:37:12 URL:http://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840/2383840] -> "./gmp-6.1.0.tar.bz2" [1]
2020-07-25 01:37:14 URL:http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284/1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
2020-07-25 01:37:15 URL:http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925/669925] -> "./mpc-1.0.3.tar.gz" [1]
2020-07-25 01:37:17 URL:http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291/1658291] -> "./isl-0.18.tar.bz2" [1]
gmp-6.1.0.tar.bz2: OK
mpfr-3.1.4.tar.bz2: OK
mpc-1.0.3.tar.gz: OK
isl-0.18.tar.bz2: OK
All prerequisites downloaded successfully.

makefileの設定。

$ mkdir build
$ cd build/
$ ../configure --enable-languages=c,c++ --prefix=/usr/local/gcc-10.2.0 --disable-bootstrap

それではビルド!

$ date; make; date
Sat Jul 25 12:21:24 JST 2020

※再ログイン後に反映されるので。ビルドの間に管理者やsudoのPATHの設定を変えておく。

$ vi ~/.bash_profile
export PATH=/usr/local/gcc-10.2.0/bin:$PATH
$ su -
# ls /etc/sudoers
-r--r----- 1 root root 669 Feb  2 08:23 /etc/sudoers
# chmod +w /etc/sudoers
# sudo vi /etc/ld.so.conf.d/arm-gcc-10.2.0.conf
Defaults        secure_path="/usr/local/gcc-10.2.0/bin:/usr...
# chmod -w /etc/sudoers
# gcc-10.2.0 configuration
/usr/local/gcc-10.2.0/lib
# exit

gccのビルドが無事終わったら、共有ライブラリィの設定を更新。

Sat Jul 25 15:11:22 JST 2020
$ date; sudo make install; date
Sat Jul 25 15:24:17 JST 2020
・・・
Sat Jul 25 15:25:40 JST 2020
$ sudo ldconfig
/sbin/ldconfig.real: /usr/local/gcc-10.2.0/lib/libstdc++.so.6.0.28-gdb.py is not an ELF file - it has the wrong magic bytes at the start.

/sbin/ldconfig.real: /usr/lib/libreadycloud.so.1 is not a symbolic link

おや?共有ライブラリィの設定がうまくいかない!!!

いや

# sudo gcc --version
gcc (GCC) 10.2.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

gccはちゃんと動いてるから いいか?



[node.js]node.js 0.10.29は、どうでしょう?

# apt-get install nodejs
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libc-ares2 libv8-3.14.5
The following NEW packages will be installed:
  libc-ares2 libv8-3.14.5 nodejs
0 upgraded, 3 newly installed, 0 to remove and 31 not upgraded.
Need to get 1,756 kB of archives.
After this operation, 6,476 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://mirrors.edge.kernel.org/debian jessie/main armel libc-ares2 armel 1.10.0-2+deb8u2 [66.0 kB]
Get:2 http://mirrors.edge.kernel.org/debian jessie/main armel libv8-3.14.5 armel 3.14.5.8-8.1 [1,074 kB]
Get:3 http://mirrors.edge.kernel.org/debian jessie/main armel nodejs armel 0.10.29~dfsg-2 [615 kB]
Fetched 1,756 kB in 0s (1,810 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package libc-ares2:armel.
(Reading database ... 17076 files and directories currently installed.)
Preparing to unpack .../libc-ares2_1.10.0-2+deb8u2_armel.deb ...
Unpacking libc-ares2:armel (1.10.0-2+deb8u2) ...
Selecting previously unselected package libv8-3.14.5.
Preparing to unpack .../libv8-3.14.5_3.14.5.8-8.1_armel.deb ...
Unpacking libv8-3.14.5 (3.14.5.8-8.1) ...
Selecting previously unselected package nodejs.
Preparing to unpack .../nodejs_0.10.29~dfsg-2_armel.deb ...
Unpacking nodejs (0.10.29~dfsg-2) ...
Setting up libc-ares2:armel (1.10.0-2+deb8u2) ...
Setting up libv8-3.14.5 (3.14.5.8-8.1) ...
Setting up nodejs (0.10.29~dfsg-2) ...
update-alternatives: using /usr/bin/nodejs to provide /usr/bin/js (js) in auto mode
Processing triggers for libc-bin (2.19-18+deb8u10.netgear1) ...

# nodejs --version
v0.10.29

# apt-get install npm

# npm install mysql
Segmentation fault
!pythonのインストを忘れていたせい
# npm install --global mysql
mysql@2.18.1 /usr/local/lib/node_modules/mysql
tqq sqlstring@2.3.1
tqq safe-buffer@5.1.2
tqq bignumber.js@9.0.0
mqq readable-stream@2.3.7 (process-nextick-args@2.0.1, inherits@2.0.4, util-deprecate@1.0.2, string_decoder@1.1.1, isarray@1.0.0, core-util-is@1.0.2)
# npm install --global http-server
npm WARN engine http-server@0.12.3: wanted: {"node":">=6"} (current: {"node":"0.10.29","npm":"1.4.21"})
npm WARN engine portfinder@1.0.27: wanted: {"node":">= 0.12.0"} (current: {"node":"0.10.29","npm":"1.4.21"})
npm WARN engine http-proxy@1.18.1: wanted: {"node":">=8.0.0"} (current: {"node":"0.10.29","npm":"1.4.21"})
Segmentation fault
!Node.jsが古すぎるらしい。


OpenSSL

Python3.8.0のコンパイルにOpenSSL 1.0.2 以上が必要らしい。
でも、Debian openssl で検索すると、
パッケージ: openssl (1.0.1t-1+deb8u12) [security]
なので、openSSLのダウンロードページからダウンロードしてビルド。

参考:LinuxにApacheとOpenSSLをソースからビルドしてインストールする

$ wget https://www.openssl.org/source/openssl-1.0.2t.tar.gz
$ tar xvzf openssl-1.0.2t.tar.gz
・・・
$ cd openssl-1.0.2t
$ sudo ./config --prefix=/usr/local/openssl-1.0.2t shared zlib
・・・
Configured for linux-armv4.
$ sudo make
・・・
$ sudo make install
penSSL shared libraries have been installed in:
  /usr/local/openssl-1.0.2t
If this directory is not in a standard system path for dynamic/shared
libraries, then you will have problems linking and executing
applications that use OpenSSL libraries UNLESS:
* you link with static (archive) libraries.  If you are truly
  paranoid about security, you should use static libraries.
* you use the GNU libtool code during linking
  (http://www.gnu.org/software/libtool/libtool.html)
* you use pkg-config during linking (this requires that
  PKG_CONFIG_PATH includes the path to the OpenSSL shared
  library directory), and make use of -R or -rpath.
  (http://www.freedesktop.org/software/pkgconfig/)
* you specify the system-wide link path via a command such
  as crle(1) on Solaris systems.
* you add the OpenSSL shared library directory to /etc/ld.so.conf
  and run ldconfig(8) on Linux systems.
* you define the LD_LIBRARY_PATH, LIBPATH, SHLIB_PATH (HP),
  DYLD_LIBRARY_PATH (MacOS X) or PATH (Cygwin and DJGPP)
  environment variable and add the OpenSSL shared library
  directory to it.
One common tool to check the dynamic dependencies of an executable
or dynamic library is ldd(1) on most UNIX systems.
See any operating system documentation and manpages about shared
libraries for your version of UNIX.  The following manpages may be
helpful: ld(1), ld.so(1), ld.so.1(1) [Solaris], dld.sl(1) [HP],
ldd(1), crle(1) [Solaris], pldd(1) [Solaris], ldconfig(8) [Linux],
chatr(1) [HP].
・・・
$ ldd /usr/local/openssl-1.0.2t/bin/openssl
        linux-vdso.so.1 (0xbee33000)
        libssl.so.1.0.0 => /usr/local/openssl-1.0.2t/lib/libssl.so.1.0.0 (0xb6f0d000)
        libcrypto.so.1.0.0 => /usr/local/openssl-1.0.2t/lib/libcrypto.so.1.0.0 (0xb6d7b000)
        libdl.so.2 => /lib/arm-linux-gnueabi/libdl.so.2 (0xb6d68000)
        libz.so.1 => /lib/arm-linux-gnueabi/libz.so.1 (0xb6d40000)
        libc.so.6 => /lib/arm-linux-gnueabi/libc.so.6 (0xb6bf7000)
        /lib/ld-linux.so.3 (0xb6f72000)
$ vi /etc/ld.so.conf.d/arm-openssl-1.0.2t.conf
a
# openssl-1.0.2t
/usr/local/openssl-1.0.2t/lib
$ sudo ldconfig

共有ライブラリィのパスに登録
あれれ?名前が1.0.0じゃないか???
Pythonは1.0.2以上がががとエラる。
諦めて最新の安定版ver1.1.1dを試す。

$ wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz
$ tar xvzf openssl-1.1.1d.tar.gz
…
$ sudo ./config --prefix=/usr/local/openssl-1.1.1d shared zlib
Operating system: armv7l-whatever-linux2
Configuring OpenSSL version 1.1.1d (0x1010104fL) for linux-armv4
Using os-specific seed configuration
Creating configdata.pm
Creating Makefile
**********************************************************************
***                                                                ***
***   OpenSSL has been successfully configured                     ***
***                                                                ***
***   If you encounter a problem while building, please open an    ***
***   issue on GitHub <https://github.com/openssl/openssl/issues>  ***
***   and include the output from the following command:           ***
***                                                                ***
***       perl configdata.pm --dump                                ***
***                                                                ***
***   (If you are new to OpenSSL, you might want to consult the    ***
***   'Troubleshooting' section in the INSTALL file first)         ***
***                                                                ***
**********************************************************************
$ sudo make
…
$ sudo make install
…
$ ldd /usr/local/openssl-1.1.1d/bin/openssl
        linux-vdso.so.1 (0xbeade000)
        libssl.so.1.1 => not found
        libcrypto.so.1.1 => not found
        libz.so.1 => /lib/arm-linux-gnueabi/libz.so.1 (0xb6f6c000)
        libdl.so.2 => /lib/arm-linux-gnueabi/libdl.so.2 (0xb6f59000)
        libpthread.so.0 => /lib/arm-linux-gnueabi/libpthread.so.0 (0xb6f30000)
        libc.so.6 => /lib/arm-linux-gnueabi/libc.so.6 (0xb6de7000)
        /lib/ld-linux.so.3 (0xb6f94000)
$ vi /etc/ld.so.conf.d/arm-openssl-1.1.1d.conf
a
# openssl-1.1.1d.
/usr/local/openssl-1.1.1d/lib
$ sudo ldconfig



xrdp tightvncserver

TeraTermから接続すると長いインストールの間もパソコンを放置しないといけないので、無謀にもNASにリモートデスクトップを入れてみる。

$sudo apy install xrdp
…
Recommended packages:
  vnc4server | tightvncserver | vnc-server
…
$sudo apy install tightvncserver 
systemctl start xrdp.service
systemctl enable xrdp.service
xrdp.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable xrdp

Windows10からマシン名接続は失敗したが、IPアドレスでは成功。

もう少しかもしれない?

X11が入っていない。KDEを入れてみる。
参考:Debian 9: デスクトップ環境のKDEをインストールする

途中で、
Sub-process /usr/bin/dpkg returned an error code (1)
に悩まされるのでキャッシュをクリアしたり、壊れたパッケージをリムーブしたりした。
参考:dpkgやapt-get関連でエラーが出た時の対処法

けど、Xorgが設定無理と投げているのでやはり無理なんだろう。

さて
https://qiita.com/yamada-hakase/items/a8efe626f598c5eb6f8c
によれば、CentOS7/8なら

yum groupinstall graphical-server-environment -y

するといいらしい。




gcc 9.2.0

Node.jsをコンパイルしたときにgccが古い!と指摘された。
wikiを見ると最新版は9.2なんだそうな。

ps. 今は、gcc-10.2.0 らしい。

インストしてみることにした。
参考:gccをソースからビルド/インストールする
ps.2019/11/26

1.ReadyRAS-212の/rootは容量が少ない(3.7GB)ので
エラーが出るから、/home/xxxxx(5.5TB:HDD容量に依る)で作成する。

/./mpfr/src/.libs -L/root/gcc-9.2.0/build/./mpc/src/.libs -lmpc -lmpfr -lgmp -rdynamic -ldl  -L./../zlib -lz libcommon.a ../libcpp/libcpp.a   ../libbacktrace/.libs/libbacktrace.a ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a
collect2: error: ld returned 1 exit status
../../gcc/lto/Make-lang.in:81: recipe for target 'lto1' failed

2.–prefix=/usr/localで、楽にシェルで使えるしようとすると
make install で失敗してしまった。
make uninstallが使えなくなっていたので、そのせいかもしれない。
–prefix=/usr/local/gcc-9.2.0にする。

----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/lib/gcc/armv7l-unknown-linux-gnueabi/9.2.0/plugin
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use :q, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
make[3]: Leaving directory '/home/****/gcc-9.2.0/build/libcc1'
make[2]: Leaving directory '/home/****/gcc-9.2.0/build/libcc1'
make[2]: Entering directory '/home/****/gcc-9.2.0/build/armv7l-unknown-linux-gnueabi/libgcc'
make[2]: *** No rule to make target 'install'.  Stop.
make[2]: Leaving directory '/home/****/gcc-9.2.0/build/armv7l-unknown-linux-gnueabi/libgcc'
Makefile:14301: recipe for target 'install-target-libgcc' failed
make[1]: *** [install-target-libgcc] Error 2
make[1]: Leaving directory '/home/****/gcc-9.2.0/build'
Makefile:2349: recipe for target 'install' failed
make: *** [install] Error 2

ついでなのでお行儀よくsudoを使うようにしてみた。
※CentOSならグループはwheel。
※Ubuntuは、usemod -G のパラメータの順序が逆だそうで非常に危険。

$ su -
# apt-get install sudo
# usermod -G sudo ${development-user}
# exit
$ exit

再構築直後のHDD(6TB×2)の状況をメモ

# df -H
Filesystem      Size  Used Avail Use% Mounted on
udev             11M  4.1k   11M   1% /dev
/dev/md0        4.0G  542M  3.2G  15% /
tmpfs           1.1G  8.2k  1.1G   1% /dev/shm
tmpfs           1.1G  377k  1.1G   1% /run
tmpfs           529M  1.1M  528M   1% /run/lock
tmpfs           1.1G     0  1.1G   0% /sys/fs/cgroup
/dev/md127      6.0T   20M  6.0T   1% /data
/dev/md127      6.0T   20M  6.0T   1% /apps
/dev/md127      6.0T   20M  6.0T   1% /home

※以下、開発用ユーザでログイン。
※usemodの指定は指定後にログインしないと無効。
gccのビルドに必要なパッケージをインストール
libnss-mdnsもあった方がいいような気はしている。

$ sudo apt-get install build-essential
$ sudo apt-get install libssl-dev
$ wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-9.2.0/gcc-9.2.0.tar.gz
$ tar xvzf gcc-9.2.0.tar.gz
$ cd gcc-9.2.0

gccのビルドに必要なパッケージやモジュールをダウンロード

$ ./contrib/download_prerequisites
2019-11-26 21:42:37 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840] -> "./gmp-6.1.0.tar.bz2" [1]
2019-11-26 21:42:40 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
2019-11-26 21:42:43 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925] -> "./mpc-1.0.3.tar.gz" [1]
2019-11-26 21:42:47 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291] -> "./isl-0.18.tar.bz2" [1]
gmp-6.1.0.tar.bz2: OK
mpfr-3.1.4.tar.bz2: OK
mpc-1.0.3.tar.gz: OK
isl-0.18.tar.bz2: OK
All prerequisites downloaded successfully.

ビルド用のディレクトリを作成し、移動して設定
※32bitなので–disable-multilibで失敗しないハズなので指定しない。

$ mkdir build
$ cd build
$ ../configure --enable-languages=c,c++ --prefix=/usr/local/gcc-9.2.0 --disable-bootstrap

コンパイル

$ date; make; date
前回:Sat Nov  9 23:25:55 JST 2019 ~ Sun Nov 10 01:58:37 JST 2019
今回:Tue Nov 26 21:44:02 JST 2019 ~ Wed Nov 27 00:16:30 JST 2019

2時間かな。今回はNASが同期中だったので3時間かかっている。

$ date; sudo make install; date
前回:Sun Nov 10 05:39:48 JST 2019 ~ Sun Nov 10 05:41:12 JST 2019
今回:Wed Nov 27 00:31:58 JST 2019 ~ Wed Nov 27 00:33:21 JST 2019

確認してみると

$ gcc --version
gcc (Debian 4.9.2-10+deb8u2) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

古いgccが呼び出される

$ /usr/local/gcc-9.2.0/bin/gcc --version
gcc (GCC) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

パスが通っていないので、viで ~/.bash_profile を作って
export PATH=/usr/local/gcc-9.2.0/bin:$PATH
を追加。再ログインして確認

$ gcc --version
gcc (GCC) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

しかし、このままではincludeやlibや共通ライブラリィが古いバージョンのものを使いそうだ。どの辺にあるのかな?

$ sudo find / -name stdio.h -print
/home/****/gcc-9.2.0/fixincludes/tests/base/stdio.h
/home/****/gcc-9.2.0/fixincludes/tests/base/rtldef/stdio.h
/home/****/gcc-9.2.0/libstdc++-v3/include/tr1/stdio.h
/home/****/gcc-9.2.0/libstdc++-v3/include/c_compatibility/stdio.h
/home/****/gcc-9.2.0/libssp/ssp/stdio.h
/home/****/gcc-9.2.0/build/armv7l-unknown-linux-gnueabi/libstdc++-v3/include/tr1/stdio.h
/run/nfs4/home/****/gcc-9.2.0/fixincludes/tests/base/stdio.h
/run/nfs4/home/****/gcc-9.2.0/fixincludes/tests/base/rtldef/stdio.h
/run/nfs4/home/****/gcc-9.2.0/libstdc++-v3/include/tr1/stdio.h
/run/nfs4/home/****/gcc-9.2.0/libstdc++-v3/include/c_compatibility/stdio.h
/run/nfs4/home/****/gcc-9.2.0/libssp/ssp/stdio.h
/run/nfs4/home/****/gcc-9.2.0/build/armv7l-unknown-linux-gnueabi/libstdc++-v3/include/tr1/stdio.h
/data/home/****/gcc-9.2.0/fixincludes/tests/base/stdio.h
/data/home/****/gcc-9.2.0/fixincludes/tests/base/rtldef/stdio.h
/data/home/****/gcc-9.2.0/libstdc++-v3/include/tr1/stdio.h
/data/home/****/gcc-9.2.0/libstdc++-v3/include/c_compatibility/stdio.h
/data/home/****/gcc-9.2.0/libssp/ssp/stdio.h
/data/home/****/gcc-9.2.0/build/armv7l-unknown-linux-gnueabi/libstdc++-v3/include/tr1/stdio.h
/usr/include/c++/4.9/tr1/stdio.h
/usr/include/arm-linux-gnueabi/bits/stdio.h
/usr/include/stdio.h
/usr/local/gcc-9.2.0/lib/gcc/armv7l-unknown-linux-gnueabi/9.2.0/include/ssp/stdio.h
/usr/local/gcc-9.2.0/include/c++/9.2.0/tr1/stdio.h

実際どうなんだろう。

$ gcc -v a.c
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/gcc-9.2.0/libexec/gcc/armv7l-unknown-linux-gnueabi/9.2.0/lto-wrapper
Target: armv7l-unknown-linux-gnueabi
Configured with: ../configure --enable-languages=c,c++ --prefix=/usr/local/gcc-9.2.0 --disable-bootstrap
Thread model: posix
gcc version 9.2.0 (GCC)
COLLECT_GCC_OPTIONS='-v' '-mcpu=arm10tdmi' '-mtls-dialect=gnu' '-marm' '-march=armv5t'
 /usr/local/gcc-9.2.0/libexec/gcc/armv7l-unknown-linux-gnueabi/9.2.0/cc1 -quiet -v -imultilib . -imultiarch arm-linux-gnueabi a.c -quiet -dumpbase a.c -mcpu=arm10tdmi -mtls-dialect=gnu -marm -march=armv5t -auxbase a -version -o /tmp/ccRJs92o.s
GNU C17 (GCC) version 9.2.0 (armv7l-unknown-linux-gnueabi)
        compiled by GNU C version 4.9.2, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.18-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/local/include/arm-linux-gnueabi"
ignoring nonexistent directory "/usr/local/gcc-9.2.0/lib/gcc/armv7l-unknown-linux-gnueabi/9.2.0/../../../../armv7l-unknown-linux-gnueabi/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/gcc-9.2.0/lib/gcc/armv7l-unknown-linux-gnueabi/9.2.0/include
 /usr/local/include
 /usr/local/gcc-9.2.0/include
 /usr/local/gcc-9.2.0/lib/gcc/armv7l-unknown-linux-gnueabi/9.2.0/include-fixed
 /usr/include/arm-linux-gnueabi
 /usr/include
End of search list.
GNU C17 (GCC) version 9.2.0 (armv7l-unknown-linux-gnueabi)
        compiled by GNU C version 4.9.2, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.18-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 20ffebffab78fa72e422119a97fa84c2
COLLECT_GCC_OPTIONS='-v' '-mcpu=arm10tdmi' '-mtls-dialect=gnu' '-marm' '-march=armv5t'
 as -v -march=armv5t -meabi=5 -o /tmp/ccmD4DyI.o /tmp/ccRJs92o.s
GNU assembler version 2.25 (arm-linux-gnueabi) using BFD version (GNU Binutils for Debian) 2.25
COMPILER_PATH=/usr/local/gcc-9.2.0/libexec/gcc/armv7l-unknown-linux-gnueabi/9.2.0/:/usr/local/gcc-9.2.0/libexec/gcc/armv7l-unknown-linux-gnueabi/9.2.0/:/usr/local/gcc-9.2.0/libexec/gcc/armv7l-unknown-linux-gnueabi/:/usr/local/gcc-9.2.0/lib/gcc/armv7l-unknown-linux-gnueabi/9.2.0/:/usr/local/gcc-9.2.0/lib/gcc/armv7l-unknown-linux-gnueabi/
LIBRARY_PATH=/usr/local/gcc-9.2.0/lib/gcc/armv7l-unknown-linux-gnueabi/9.2.0/:/usr/local/gcc-9.2.0/lib/gcc/armv7l-unknown-linux-gnueabi/9.2.0/../../../:/lib/arm-linux-gnueabi/:/lib/:/usr/lib/arm-linux-gnueabi/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-mcpu=arm10tdmi' '-mtls-dialect=gnu' '-marm' '-march=armv5t'
 /usr/local/gcc-9.2.0/libexec/gcc/armv7l-unknown-linux-gnueabi/9.2.0/collect2 -plugin /usr/local/gcc-9.2.0/libexec/gcc/armv7l-unknown-linux-gnueabi/9.2.0/liblto_plugin.so -plugin-opt=/usr/local/gcc-9.2.0/libexec/gcc/armv7l-unknown-linux-gnueabi/9.2.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccpu0ZV5.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --eh-frame-hdr -dynamic-linker /lib/ld-linux.so.3 -X -m armelf_linux_eabi /usr/lib/arm-linux-gnueabi/crt1.o /usr/lib/arm-linux-gnueabi/crti.o /usr/local/gcc-9.2.0/lib/gcc/armv7l-unknown-linux-gnueabi/9.2.0/crtbegin.o -L/usr/local/gcc-9.2.0/lib/gcc/armv7l-unknown-linux-gnueabi/9.2.0 -L/usr/local/gcc-9.2.0/lib/gcc/armv7l-unknown-linux-gnueabi/9.2.0/../../.. -L/lib/arm-linux-gnueabi -L/usr/lib/arm-linux-gnueabi /tmp/ccmD4DyI.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/local/gcc-9.2.0/lib/gcc/armv7l-unknown-linux-gnueabi/9.2.0/crtend.o /usr/lib/arm-linux-gnueabi/crtn.o
COLLECT_GCC_OPTIONS='-v' '-mcpu=arm10tdmi' '-mtls-dialect=gnu' '-marm' '-march=armv5t'

/usr/local/gcc-9.2.0/lib/gcc/armv7l-unknown-linux-gnueabi/9.2.0/includeに

aaa.hを作り、int aaa=123; と書いて、
#include <aaa.h>
printf(“aaa=%d\n”,aaa);
をコンパイルすれば通る。

但し、stdio.hはそこには無いので、/usr/includeのstdio.hが使われる。

ps.2019/11/28

sudo でgcc-9.2.0を使うために

/etc/sudoers を修正

Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
↓
Defaults	secure_path="/usr/local/gcc-9.2.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Node.jsの記事にもあるように
/etc/ld.so.conf.dにgcc-9.2.0用のファイルを作っておく。

# gcc-9.2.0 configuration
/usr/local/gcc-9.2.0/lib

そして
$ sudo ldconfig



nginx

参考 nginx の最新版を Ubuntu 18.04 に apt インストールする

公式nginxをRedayNAS-212のリポジトリにnginxの配布キーを追加して自動インストールする方法です。

sources.list の中がdebian jessieだらけなので debianにしてもubuntuにしても サポート外判定でした。

# (1) Ubuntu に nginx リポジトリを登録する
# wget https://nginx.org/keys/nginx_signing.key
# apt-key add nginx_signing.key
# (2) リポジトリを一覧に追加
# vi /etc/apt/sources.list で下の行を追加
deb http://nginx.org/packages/debian/ jessie nginx
または
deb http://nginx.org/packages/ubuntu/ jessie nginx
# (3) アップデートで、nginxをインストール
# apt update

# apt update
Hit:1 http://security.debian.org jessie/updates InRelease
Ign:2 http://mirrors.edge.kernel.org/debian jessie InRelease
Get:3 http://nginx.org/packages/debian jessie InRelease [2,856 B]
Hit:4 http://mirrors.edge.kernel.org/debian jessie Release
Hit:5 https://apt.readynas.com/packages/readynasos 6.10.2 InRelease
Fetched 2,856 B in 1s (2,356 B/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
22 packages can be upgraded. Run 'apt list --upgradable' to see them.
N: Skipping acquire of configured file 'nginx/binary-armel/Packages' as repository 'http://nginx.org/packages/debian jessie InRelease' doesn't support architecture 'armel'
N: Skipping acquire of configured file 'nginx/binary-armhf/Packages' as repository 'http://nginx.org/packages/debian jessie InRelease' doesn't support architecture 'armhf'

またコンパイルするのか・・・
その前にツールでOSのバージョンを確認。

# apt-get install lsb-release
lsb_release -a
 No LSB modules are available.
 Distributor ID: Debian
 Description:    Debian GNU/Linux 8.11 (jessie)
 Release:        8.11
 Codename:       jessie
# apt-get update
# apt-get build-dep nginx
# apt-get source nginx
# cd nginx-1.17.0
# sudo dpkg-buildpackage -uc -b
# cd
# sudo dpkg -i nginx_1.17.0-1~stretch_armhf.deb

apt-get install debian-keyring
でもダメ

# wget http://nginx.org/download/nginx-1.16.1.tar.gz
# tar xvzf nginx-1.16.1.tar.gz
# cd nginx-1.16.1
# ./configure
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

正規表現ライブラリィが必須らしい。

# apt-get install libpcre3 libpcre3-dev
#./configure
Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + using system zlib library
  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx modules path: "/usr/local/nginx/modules"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

zlibパッケージの取得

# apt-get install zlib1g-dev

openssh1.1.0のインストール

# cd /usr/local/src
# wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz
# tar xvzf openssl-1.1.0f.tar.gz
# cd openssl-1.1.0f/
# ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
# make
# make install

必要そうなパッケージを入れたのでコンパイルしてみる。

# cd
# cd nginx-1.16.1
# ./configure
#  make
# make install

普通にコンパイルできた。
参考 ソースファイルからnginxのインストール

インストしたパッケージを使う様に
openSSLとスレッドプールを設定に追加してみる。

# cd
# cd nginx-1.16.1
# make clean
# ./configure  --with-openssl=/usr/local/src/openssl
-1.1.0f --with-threads
checking for OS
 + Linux 4.4.184.alpine.1 armv7l
checking for C compiler ... found
 + using GNU C compiler
 + gcc version: 4.9.2 (Debian 4.9.2-10+deb8u2)
checking for gcc -pipe switch ... found
checking for -Wl,-E switch ... found
checking for gcc builtin atomic operations ... found
checking for C99 variadic macros ... found
checking for gcc variadic macros ... found
checking for gcc builtin 64 bit byteswap ... found
checking for unistd.h ... found
checking for inttypes.h ... found
checking for limits.h ... found
checking for sys/filio.h ... not found
checking for sys/param.h ... found
checking for sys/mount.h ... found
checking for sys/statvfs.h ... found
checking for crypt.h ... found
checking for Linux specific features
checking for epoll ... found
checking for EPOLLRDHUP ... found
checking for EPOLLEXCLUSIVE ... not found
checking for O_PATH ... found
checking for sendfile() ... found
checking for sendfile64() ... found
checking for sys/prctl.h ... found
checking for prctl(PR_SET_DUMPABLE) ... found
checking for prctl(PR_SET_KEEPCAPS) ... found
checking for capabilities ... found
checking for crypt_r() ... found
checking for sys/vfs.h ... found
checking for nobody group ... not found
checking for nogroup group ... found
checking for poll() ... found
checking for /dev/poll ... not found
checking for kqueue ... not found
checking for crypt() ... not found
checking for crypt() in libcrypt ... found
checking for F_READAHEAD ... not found
checking for posix_fadvise() ... found
checking for O_DIRECT ... found
checking for F_NOCACHE ... not found
checking for directio() ... not found
checking for statfs() ... found
checking for statvfs() ... found
checking for dlopen() ... not found
checking for dlopen() in libdl ... found
checking for sched_yield() ... found
checking for sched_setaffinity() ... found
checking for SO_SETFIB ... not found
checking for SO_REUSEPORT ... found
checking for SO_ACCEPTFILTER ... not found
checking for SO_BINDANY ... not found
checking for IP_TRANSPARENT ... found
checking for IP_BINDANY ... not found
checking for IP_BIND_ADDRESS_NO_PORT ... not found
checking for IP_RECVDSTADDR ... not found
checking for IP_SENDSRCADDR ... not found
checking for IP_PKTINFO ... found
checking for IPV6_RECVPKTINFO ... found
checking for TCP_DEFER_ACCEPT ... found
checking for TCP_KEEPIDLE ... found
checking for TCP_FASTOPEN ... found
checking for TCP_INFO ... found
checking for accept4() ... found
checking for eventfd() ... found
checking for int size ... 4 bytes
checking for long size ... 4 bytes
checking for long long size ... 8 bytes
checking for void * size ... 4 bytes
checking for uint32_t ... found
checking for uint64_t ... found
checking for sig_atomic_t ... found
checking for sig_atomic_t size ... 4 bytes
checking for socklen_t ... found
checking for in_addr_t ... found
checking for in_port_t ... found
checking for rlim_t ... found
checking for uintptr_t ... uintptr_t found
checking for system byte ordering ... little endian
checking for size_t size ... 4 bytes
checking for off_t size ... 8 bytes
checking for time_t size ... 4 bytes
checking for AF_INET6 ... found
checking for setproctitle() ... not found
checking for pread() ... found
checking for pwrite() ... found
checking for pwritev() ... found
checking for sys_nerr ... found
checking for localtime_r() ... found
checking for clock_gettime(CLOCK_MONOTONIC) ... found
checking for posix_memalign() ... found
checking for memalign() ... found
checking for mmap(MAP_ANON|MAP_SHARED) ... found
checking for mmap("/dev/zero", MAP_SHARED) ... found
checking for System V shared memory ... found
checking for POSIX semaphores ... not found
checking for POSIX semaphores in libpthread ... found
checking for struct msghdr.msg_control ... found
checking for ioctl(FIONBIO) ... found
checking for struct tm.tm_gmtoff ... found
checking for struct dirent.d_namlen ... not found
checking for struct dirent.d_type ... found
checking for sysconf(_SC_NPROCESSORS_ONLN) ... found
checking for sysconf(_SC_LEVEL1_DCACHE_LINESIZE) ... found
checking for openat(), fstatat() ... found
checking for getaddrinfo() ... found
checking for PCRE library ... found
checking for PCRE JIT support ... found
checking for zlib library ... found
creating objs/Makefile
Configuration summary
  + using threads
  + using system PCRE library
  + using OpenSSL library: /usr/local/src/openssl-1.1.0f
  + using system zlib library
  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx modules path: "/usr/local/nginx/modules"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"
# make
# make install
# cd /usr/local/nginx/sbin
# nginx -V
built by gcc 4.9.2 (Debian 4.9.2-10+deb8u2)



Python-3.8.0 OpenSSLでハマる

ReadyNas のアプリにはPython ver.2.xがあるがver.3.xは無い。

メンドクサイのかなと思ったら

$ sudo apt install python3
Reading package lists… Done
 Building dependency tree
 Reading state information… Done
 The following additional packages will be installed:
   dh-python libmpdec2 libpython3-stdlib libpython3.4-minimal
   libpython3.4-stdlib python3-minimal python3.4 python3.4-minimal
 Suggested packages:
   python3-doc python3-tk python3-venv python3.4-venv python3.4-doc binutils
   binfmt-support
 The following NEW packages will be installed:
   dh-python libmpdec2 libpython3-stdlib libpython3.4-minimal
   libpython3.4-stdlib python3 python3-minimal python3.4 python3.4-minimal
 0 upgraded, 9 newly installed, 0 to remove and 24 not upgraded.
 Need to get 4,276 kB of archives.
 After this operation, 17.5 MB of additional disk space will be used.
 Do you want to continue? [Y/n] y
・・・
$ python3  --version
Python 3.4.2

簡単だった。

元ネタ:Ubuntu18.04にPyhton3.7を導入や設定をしよう!

ps. 2019/11/27
ソースからコンパイルしてみる
ソースからPythonをインストール

ビルドに必要なパッケージが足りないらしいのでインストする。
元ネタは見つかっていない。
参考:Ubuntu環境のPython

sudo apt install build-essential libbz2-dev libdb-dev \
  libreadline-dev libffi-dev libgdbm-dev liblzma-dev \
  libncursesw5-dev libsqlite3-dev libssl-dev \
  zlib1g-dev uuid-dev tk-dev

では設定してコンパイル

$ sudo curl -O https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tar.xz
$ sudo tar Jxf Python-3.8.0.tar.xz
$ cd Python-3.8.0
$ sudo ./configure --prefix=/usr/local/python380 --with-ensurepip --enable-optimizations
・・・
$ date; sudo make ; date
・・・
Python build finished successfully!
The necessary bits to build these optional modules were not found:
_ssl
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
The following modules found by detect_modules() in setup.py, have been
built by the Makefile instead, as configured by the Setup files:
_abc                  atexit                pwd
time
Could not build the ssl module!
Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().
LibreSSL 2.6.4 and earlier do not provide the necessary APIs, https://github.com/libressl-portable/portable/issues/381
・・・
Wed Nov 27 21:41:47 JST 2019 ~ Wed Nov 27 21:53:28 JST 2019

実は初回コンパイル時に

If you want a release build with all stable optimizations active (PGO, etc),
please run ./configure --enable-optimizations

と出力されたのて、–enable-optimizations を付けた。

上の Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl は
$ sudo apt-get install libssl-dev 済みだけど中身が
libssl-dev is already the newest version (1.0.1t-1+deb8u12).
と少し古いだけなのに新しいVersionを探さないといけないらしい。
なんとかopensslの1.0.2や1.1.dをインストールしても
sudo make は1.0.2か1.1以上を求めてくるので、
configureに
LDFLAGS=”-L/usr/local/openssl-1.1.1d/lib” CFLAGS=”-I/usr/local/openssl-1.1.1d/include”
を付けたが
流れるログを見ると

/include が取れていた。

多分 /libも取れる

ダメです。

諦めつつもconfigureを読むと
–with-openssl というOpenSSLのパスを指定するオプションがあった。

$ sudo ./configure --prefix=/usr/local/python380 --with-ensurepip --enable-optimizations --with-openssl="/usr/local/openssl-1.1.1d"
$ grep OPENSSL  Makefile
OPENSSL_INCLUDES=-I/usr/local/openssl-1.1.1d/include
OPENSSL_LIBS=-lssl -lcrypto
OPENSSL_LDFLAGS=-L/usr/local/openssl-1.1.1d/lib
$ sudo make
$ sudo make install




top