変奏現実

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

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

NAS

[MS-ACCESS]エクスポートとbit型

MDBファイルのテーブルをMySQLにエクスポートしてみると、テーブルの構成に色々と問題が出てくる。

特にNULLを許可するかどうかが一番の問題。

作ったプログラムが許容できなかった場合を考慮して、フィールドが Not NULLだったり、初期値を設定してあれば、それと取り込んでALTER TABLEすれば大体問題は解消。

AutoNumberもNIQUE KEY扱いしてAUTO_INCRIMENT属性を付ければ何とかなる。

[MySQL]ODBC接続でフィールドの番号を振り直してみる

しかし、それでは気が付かないモノもあった。

Bit型のフィールドだ。

MS-ACCESSではYes/NoのフィールドがBit型(長さ1)のフィールドに変換されるがNULLはOKとなっている。でも大丈夫かと思ったら、そうでは無かった。

MS-ACCESSの連携フィールドではチェックマークになる。

このフィールドがある場合に「*」でレコードを追加する際に先のチェックを入れないと、何故かBit型のフィールドに NULL が入ってしまう。

それでも、MS-ACCESS上で支障がなければいいが、そうなっていない。

ビューの上では追加した行にDELETEマークが並ぶ。ビューを最新表示すれば消えるが、その行を編集や削除をすると、

データの強豪

と、いつもの頓珍漢なメッセージが出てしまい、何が原因か全く判らない状況に陥ってしまう。しかし、サーバやPCを再起動しても、リンクテーブルのビューでも編集や削除をすると、同じメッセージが出るので、

MSーACCESSが何かトチったことが判る。

PHPMySQLでBit型がNULLになっているとこを0に変えると問題は解消される。

つまり、INSERTで設定した(つもりの)値と違う内容がレコードに入っていたので、誰かが書き換えたに決まっている!とMS-ACCESSは判断をしたらしい。

実際にはINSERT時はBitフィールド型が未設定の様だ。それをやっちまっているのはMS-ACCESSなのかMySQLのODBCドライバなのかは判らないケドね。

SELECT * FROM テーブル名 WHERE Bitフィールド名 IS NULL;

なレコードをポチポチ直すものいいけど、

UPDATE テーブル名 SET Bitフィールド名 = 0 WHERE Bitフィールド名 IS NULL;

で焼き尽くしても、どうせ、すぐに増えるから・・・直ぐに!

ALTER TABLE テーブル名 CHANGE Bitフィールド名 Bitフィールド名 BIT( 1 ) NOT NULL DEFAULT b'0';

と、BitフィールドでNULLを禁止し、初期値も0にした方がいいだろう。

※bit(2)とかbit(3)に変換されるフィールドもあるのかもしれない。(ケド

一応、

SELECT table_schema, table_name, column_name FROM information_schema.columns WHERE data_type = 'bit';

で見ると、bitフィールドが意外にいっぱいあったりする。

エクスポートする際は、bitフィールド型も要注意。(ダナ

SET sql_mode='PIPES_AS_CONCAT'; select 'UPDATE `' || table_schema || '`.`' || table_name || '` SET `' || column_name || '` = 0 WHERE `' || column_name || '` IS NULL;',
 'ALTER TABLE `' || table_schema || '`.`' || table_name || '` CHANGE `' || column_name || '` `' || column_name || '`  BIT(' || NUMERIC_PRECISION || ') NOT NULL DEFAULT b''0'';'
 FROM information_schema.columns WHERE data_type = 'bit';

これを実行すると全データベースのBitフィールドをサッパリにするSQLを吐き出す。ALTER TABLEは1行づつ整合性チェックが入るみたいなのでレコード数が多いと結構時間がかかる。(ッヨ!

※SETはconcatを使うとミスが見つけにくいので、 || を使ったから。

※UPDATEしてるのは、NULLデータがあるとALTER TABLEでNOT NULLが整合性エラーで弾かれるから。

さて、絶対安全?MS-ACCESSからMySQLへのエクスポートのVBAに手を入れなければ・・・



[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が古すぎるらしい。


[MySQL]ODBC接続でフィールドの番号を振り直してみる

MySQLのAutoInc属性は0かNULLを設定した時に自動的に番号を振る機能なので、バックアップ・リストアを繰り返していると、気が付けば、数値が重複していたりする。
※UNIQUE KEYにしておけばそんなことは起きない(ハズ

そんな困った時は

SET @i := 0 ;
UPDATE テーブル名 SET フィールド名 = (@i := @i + 1) ;

なSQLをphpMyAdminから叩けば良いらしいんだけど、MS-ACCESSとかEXCELの【ボタン】から、ODBCでExecuteしてみると・・・・

エラる。

;の後に文字があるせいらしい。

試しにストアードプロシージャっぽく、

“BEGIN
SET @i := 0 ;
UPDATE テーブル名 SET フィールド名 = (@i := @i + 1) ;
END”

をExecuteすると、BEGIN…. 何ソレ美味しいの?状態。

仮にストアードプロシージャを作ったとしても

CALL 採番(’テーブル名’, ‘フィールド名’);

の様に直接パラメータは書けないので、@引数を使って

SET @p1=’テーブル名’;
SET @p2=’フィールド名’;
CALL 採番(@p1, @p2);

と呼ばないといけないらしい。てか、行数増えてるし・・・(汗

@変数を使うSQLをODBCで扱うのは、土台無理なんだろうか?

正解は、

1行づつやらせれば良い。

Dim sql(1) As String
sql(0) = “SET @i := 0 ;”
sql(1) = “UPDATE テーブル名 SET フィールド名 = (@i := @i + 1) ;”);

あるいは
Dim sql() as String
sql = split(“…….”, vbCrLf)

for idx =lbound(sql) to ubound(sql)
ds.Execute(sql(idx),dbSQLPassThrough)
next

2行目の処理時間は結構長い。

安易に・・・

Dim cnt As Integer
set rst = odbcConn.OpenRecordset(テーブル名)
Do While rst.EOF = false
rst.edit()
cnt = cnt+1
rst(フィールド名) = cnt
rst.update()
rst.MoveNext
Loop

な事をしてしまうと、レコードが少なければ数秒で終わるけど、全レコードの全フィールドを読み取る事になるので、何万レコードもあったら、何時間かかるか判らない。



今時のHDDはCドライブ非推奨

NASに入れてるHDD,WD60EZAZ-RT WD Blueは、WDの6TBのHDDで、SMR方式。

全然気にしてなかったけど、SMRはプラッタ(磁気面)に情報を書き込むヘッドの幅より狭い間隔で書き込むことでプラッタに書き込める情報の容量を増やす方式だ。トラック( 書き込まれた磁気情報 )を重ねる様が瓦吹きの屋根を連想させるので、S(Shingled=瓦状)MRなんだそうな。バックアップの磁気テープの代わりにHDDを使うならシリアルアクセスなんだから、こんなんで良いんじゃねの?という感じで出てきたもののようだ。

だから、本来はPCどころか NAS にも向いていない方式です。

そのままではデータセンタとかのエンタープライズ向け専用になってしまうので、HDDでも多少は高速で書き込める外周部(おそらく今までのCMR方式で読み書きしてる)にとりあえず書いて後でコッソリと本来の位置にノンビリと書き込むなら性能は変わんないじゃね?ま、Unix系のHDDもメモリのある限りキャッシュして後からベタ書きしてるしので違和感はないし、一応HDDにかきこんであるから、メモリのみでキャッシュするよりは安心かもしれない。

それに今のHDDへのアクセスは物理的なセクタ位置(トラック、シリンダ、ヘッド)ではなくHDDのコントローラに論理セクタ番号を送るので、予備エリアの管理もHDDのコントローラ任せだから、こんな方式を採用してもHDD内部での話なのでマザボとかOSへの影響もなさそうだ。

実際、PCの前でファイルを保存する時はいつも外周部に書いてるなら、その分CMR方式より少し速く、HDDの空き容量が減って内周部へのアクセスが増えてくれば普通は遅くなっていくがその影響も少ないだろう。

でも、毎回外周部を使ってたら早めにエラーが出そうな気もする。

と云うことで、NASのHDDを引き抜いて見てみたら、やはり2つとも SMR方式のWD60EZAZだった。

引き抜いたせいかNAS起動後の認識が遅い様だ。

あ゛~!

ルータを変えたから、IPアドレスがセグメントすら変わってる。

ReadyCloudから認識しなおさないといけない。

それにNASの電源をOFFると、NASのバックアップボタンを押してReadyCloudで再認識させないとダメらしい。

で、やっとベンチしてみた。

参考:LinuxでもCrystalDiskMarkぽいディスクベンチマークしたい

最初は/tmpで実行したらディスクが足りないらしい。

fio: posix_fallocate fails: No space left on device
(中略)
Seq-Read 121.588
Seq-Write 189.19
Rand-Read-512K 1029.02
Rand-Write-512K 0
Rand-Read-4K 112.835
Rand-Write-4K 0
Rand-Read-4K-QD32 113.054
Rand-Write-4K-QD32 0

今度は、別パーティションの/homeで /tmp/fio.txtも/homeにコピってやってみると本気モードなんで時間が結構かかってしまう。

 Seq-Read 150.118
 Seq-Write 179.55
 Rand-Read-512K 39.91
 Rand-Write-512K 154.794
 Rand-Read-4K 0.389
 Rand-Write-4K 6.069
 Rand-Read-4K-QD32 1.796
 Rand-Write-4K-QD32 6.154

そうそう オワッタ後を dfで見ると

df -H
 Filesystem      Size  Used Avail Use% Mounted on
 udev             11M  4.1k   11M   1% /dev
 /dev/md0        4.0G  4.0G     0 100% /
 (中略) 
 /dev/md127      6.0T   13G  6.0T   1% /home
 (略) 

rootの下が100%。さっきのエラーの原因だな。
もっともroot下が4GBしかないというのもいかがなものか・・・

# ls -l で/tmp
(略)
 -rw-r--r-- 1 root root 1073741824 Feb 24 13:37 Rand-Read-4K.0.0
 -rw-r--r-- 1 root root 1073741824 Feb 24 13:37 Rand-Read-4K-QD32.0.0
 -rw-r--r-- 1 root root 1073741824 Feb 24 13:37 Rand-Read-512K.0.0
 -rw-r--r-- 1 root root          0 Feb 24 13:37 Rand-Write-4K.0.0
 -rw-r--r-- 1 root root          0 Feb 24 13:37 Rand-Write-4K-QD32.0.0
 -rw-r--r-- 1 root root          0 Feb 24 13:37 Rand-Write-512K.0.0
 -rw-r--r-- 1 root root 1073741824 Feb 24 13:37 Seq-Read.0.0
 -rw-r--r-- 1 root root 1007206400 Feb 24 13:37 Seq-Write.0.0
 (略) 

# ls -l で /home
 (略) 
 -rw-r--r-- 1 root     root         398 Feb 24 13:38 fio.txt
 -rw-r--r-- 1 root     root  1073741824 Feb 24 13:38 Rand-Read-4K.0.0
 -rw-r--r-- 1 root     root  1073741824 Feb 24 13:38 Rand-Read-4K-QD32.0.0
 -rw-r--r-- 1 root     root  1073741824 Feb 24 13:38 Rand-Read-512K.0.0
 -rw-r--r-- 1 root     root  1073741824 Feb 24 13:41 Rand-Write-4K.0.0
 -rw-r--r-- 1 root     root  1073741824 Feb 24 13:43 Rand-Write-4K-QD32.0.0
 -rw-r--r-- 1 root     root  1073741824 Feb 24 13:39 Rand-Write-512K.0.0
 -rw-r--r-- 1 root     root  1073741824 Feb 24 13:38 Seq-Read.0.0
 -rw-r--r-- 1 root     root  1073741824 Feb 24 13:39 Seq-Write.0.0
 (略) 

な惨状なんで消すと

 df -h
 Filesystem      Size  Used Avail Use% Mounted on
 udev             10M  4.0K   10M   1% /dev
 /dev/md0        3.7G  1.8G  1.8G  50% /
(中略) 
 /dev/md127      5.5T  3.7G  5.5T   1% /home
(略)

10GBぐらい使ってたのか。

ベンチ結果は 普通のHDD並みだから、HDD外周部のキャッシュを使い切っていない様だ。つまり普通のベンチが扱い10GBより大きいサイズ(数十GB)らしい。

え?外周部のキャッシュを使い切るまでベンチするべきじゃないか?って?

今の/homeの使用量は3.7G。まだ外周部のキャッシュサイズより小さいので32GB越えベンチをしても影響の具合は判らないだろう。

暫く経ってからNASのHDDのモータの起動御(ウーーン)や停止音(ギィーーゴオオ:ヘッド退避かな?)がしてたけど、これはSMR方式が外周部に残ってるキャッシュの情報を更新してるのかな?

普通、HDDの電源ってアクセスから5分ぐらいでOFFる設定してるけど大丈夫なのかな?SMRはHDDの電源入れっぱなしにするのが吉なのかもしれない。

仕事場のノートPCのHDDも容量少ないけどSMRなんだろうか?そう思うと腑に落ちる。もしSMRなら小容量故に外周部キャッシュも小容量でWindowsUpdateでもキャッシュを使い果たして超低速もかもしれない。

ま、超低速といっても自分で測った訳では無く、ググった記事を見る分には30分の1の速度になってしまうらしい。ただでさえランダムアクセスが終わってるのに、そこから30分の1ってUSBメモリを下回りそう。

今時CドライブにHDDなんて使うんじゃねーよ。
これからのHDDはSMR方式がデフォだからな!ということなのかな。

ま、テレビの外付け録画用HDD専用としては問題は無いのかもしれない。


  • カテゴリー:
  • NAS

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

するといいらしい。





top