全体記録

0.構想段階

 ドメイン名を有するのIP固定のサーバー上の小さなホームページからDHCPサーバにリンクする。
DHCPによる大容量サーバの最新コンテンツのURLへのリンクを、上記ポータルサイトに常時反映させる。
 WEBサーバ製作例もあることから、ラズパイによる大容量低速サーバ構築を試みる。

1.ハード

  秋月で購入したA+を使用。通信機能はないが、USBでアダプタなどを接続可能。
USBハブで外部電源付きのものを追加。
USBキーボード、USBマウスは既存のものを使用。
Wi-Fiドングルを追加
Ethernetアダプタは既存のものを使用
更に、USBハブ(電源なし)を追加。
(USBキーボード、USBマウス、USBメモリ(データ交換用)をまとめる)
SSD(120GB、特価品)

2.OSの導入

ラズパイ財団のページからZIP圧縮されたバイナリイメージをダウンロード
http://www.raspberrypi.org/downloads/
LongZIP解凍ツール(7ーZip)にてイメージファイルに展開
書き込みツール(Image Writer、Win32DiskImager)にてSDカード(16GB)に導入
 (TOSHIBA microSDHC UHS-I Card 16GB, 90MB/s を使用)
これを本体に装着し電源投入することによりOSが起動する(6月3日)
$Sudo passwd root でパスワードを設定。
 後日、アダプタを介して接続したSDカード(16GB)に複写し、
 複製からも起動できることを確認(11月27日)。

Preinstalled systems
(1)gcc
$leafpad hello.c
$gcc hello.c
$./a.out
(2)Python
$python -V => 2.7.13
$python3 -V => 3.5.3
$vi hello__world.py
print('hello world')
$python3 hello_world.py
(3)Mathematica
Pulldown->protram->Mathematica (GUI buka)

3.ネット接続とルータの設定

ルータの解説書に従い、外部からのアクセスを特定の内部IPに変換するように設定
(デフォルトでは拒絶)
サーバ側もIPアドレスをこの内部IPに固定
これにより、インターネットから見えるようになる。
ワイヤレス、有線の接続はいずれも、GUIの右上のアイコンの操作で完了

(1)最初は有線接続。USBイーサ・アダプタ(古い)を介してネット接続
  $ip link showで見ると
   eth0 34 76 c5 0d d6 6e
  この環境下で、apt-get install が可能となる
(2)次に無線ドングルを接続
  ドライバをセットアップ(実はつなぐだけでよかった)
   wlan0 bc 5c 4c fe b1 15
  右上のネット接続のアイコンから、電波の強いルータを探し、
  IDとPWを入力して接続→画面右上のアイコンが有線から無線に変化
$ ifconfig
   lo 127.0.0.1
   eth0 192.168.3.5
   wlan0 169.254.70.9
(3)ワイヤレスルータにログインし、外部からのWEBアクセスができるようにする
  (172.16.255.254 にアクセスし、user/userでログイン)
   192.168.3.19 固定アドレスに接続する(ラズパイ側をこのアドレスに固定する)
   ポート転送設定(172.16.255.254/portforward.html)
   DMZ設定 ポート転送設定による転送が優先される。
   (DMZ:非武装地帯、転じて公開WEBサーバを置くバリアセグメント)
       外部からアクセス可能なホストを設定する。
       ○有効 ラジオボタンを替え、192.168.3.19に固定する
   ラズパイ側のIPアドレスを、GUIで192.168.3.19に固定する
  確認くん(www.ugtop.com/spill.shtml)にアクセスすると、60.117.35.204
  [参考]苅間でのワイヤレスルータ[Aterm]の場合
   192.168.0.1(aterm.me)にログイン(admin/一々π)
  確認くんは、
   210.235.61.46 (モデムにPCを直結した場合)
   g/w 41.61.accsnet.ne.jp
   202.220.243.58(Atermを介する場合)
   g/w 58.243.accsnet.ne.jp
  kenken では、172.16.23.187

  同じLAN環境上に複数のサーバを設置する場合には、異なる固有IDとポート番号(例えば8080)を割り当てる。
  異なるLAN環境上に同じドメインに属するサーバを設置する場合には、DNSでの定義(例えばijk.brl.dix.asia)を行う。

4.Apache2

(1)apache2の導入
コマンド実行でapache2をインストール
(デフォルトページが外部から閲覧可能となることをもって確認)
  各種設定の記録
(2) PHP7の導入
 (PHP5を用いた製作例とは別の方法)
$sudo apt-get install php-pear
により、php7を取りに行く。
$sudo apt-get install php
では、php7がインストールされる。
(server_info.php に、 の1行だけを記述、これを外部からアクセス)
(3)mysqlの導入
(注意:rootユーザでなければはアクセス拒否されログインできない)
 #mysql -u root -p
 >七月五日頃に設定したパスワードを使用
 >show databases;
 >create database ん;
 >show databases;
 >create user 阿呆;
 >select user,host from mysql.user;
 >grant all privileges on;
 >quit;
[参考] phpからのmysql接続
$pdo = new PDO($dsn, $username, $password, $driver_options));
mysql:dbname=test;host=localhost;charset=utf8mb4
 <?php
try{
  &pdo = new PDO(
   'mysql:dbname=testdb:host=localhost:charset=utf8mb4',
   'root', ' ',
   [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
   ]
 );
}catch( PDOException &e){
  exit;
}
 ?>

(4)コンテンツ編集のための日本語入力
$sudo apt-get install fcitx-mozc
「半/全」ボタンの操作により右上の原語アイコンが「_A」と「あ」の間で切り替わることを確認。
不調の場合には、左クリック設定で、ホットキーを設定する。
・LeafPadというテキストエディタによる日本語入力
 [注意]Xからメニューで開くとpi アカウントで起動するため、www-dataアカウントが所有する/var/www/htmlのファイルは、
 開くことができるものの、編集結果を保存することができない。シェル$suでrootに代わりLeafpadを起動しプルダウン・ファイルから
 例えばlog.htm を編集すると、結果を保存することができる。
 root:/var/www/html Leafpad
  でまずエディタを起動し日本語入力モードとする。この状態でプルダウンからファイルを開き編集する。
・シェル画面における日本語入力
 [半角全角]キーにより、日本語入力に切り替えることができる。右上の「_A」が、「あ」に変わる。
(5)アクセスログ
 Apache2へのアクセスは、
 /var/log/apache2
 配下に蓄積されている。アクセスログとエラーログがある。
 過去半月程度がgz形式で蓄積されており、オーバーフロー削除されている。

5.外付けSSD、USBメモリと仮想ディレクトリの設定(log2に詳述)

USB接続すると、/media/pi配下に自動的にマウントされる
これを一度外し、/var/www配下のSSD,LOGに再マウントする
( /var/wwwはApache2のユーザであるwww-data のホームフォルダ)
fstabを編集して、これらのマウントを起動時に自動実行するように
(なお、デバイス名をUUIDとすることにより、挿す順番に依存しなくなる
SSDは、NTFSにフォーマットされていたので、EXT4に再フォーマット
(sdaのパーティションはsda1一つだけ。必要なら後日増やす)
alias.conf を編集して、
/log/ を/var/log/に、/ssd/を/var/ssd/に仮想する。

6.ドメイン関係(190706調査)

6-1.myDNS でドメインを作成
 (1)アカウントを作成する
 (2)管理者などの必要な情報を入力する。
 (3)動的なIPを定期的に報告する(cron)
  http://ipv4.mydns.jp/login.html にブラウザでアクセスするとIPとパスワードを画面入力して終了。
  /etc/crontabでは、
  00 2 * * * root wget --http-user=ID --http-passwd=PW http://ipv4.mydns.jp/login.html
  1週間この操作がないと、登録アドレスに警告メールが届き管理サイトに移行
  1ヶ月この操作がないと、登録末梢

7.SSL(190722)

7-1.SSL証明を得るためにLet's Encrypt にドメイン登録
(サーバ証明書発行サービス→SSL/TLSを利用したHTTPSでのWEB閲覧)
(有効期限3ヶ月の前に定期的にサーバ証明書を更新する)
 ●gitをインストール→$sudo git clone https://github.com/certbot/certbot
 →$cd certbot→$./certbot auto
 →エラー5「ハッシュサムが適合しません、いくつかのアーカイブを取得できません。 メールサーバの導入info@brlなど
 そこでプライベート認証局(190712の2、LAN内からSSL/TLSを利用)
 既にインストールされている$openssl を用いて手動で設定
 併せてルータのセキュリティを強化し、ポート80と443のみを受けるように
 →結果、httpsでアクセスできる。但し、自己認証であるため、クロミウムではアクセス不可
 Let's Encrypt による無料のSSLサービスを用い、https アクセスに対応した。
 設定には、標準のcertbot-autoがうまく動作しなかったため、certbot --apache を使用した。  詳細はこちら

8.PHP(190724)

 PHPの実行形式は、/usr/bin/php である。
 $ /usr/bin/php -v でバージョンを表示する
 xxx.php 実行するためには、先頭に
  #!/usr/bin/php -q
 を記述し、
 $ chmod u+x xxx.php
 として実効権を得た上で、
 $ ./xxx.php
 により実行する。
[デバッグの方法]
 print_r($a); オブジェクト「a」に入っているすべての値を表示する。
 var_dump($a);さらに詳しい
 print_r(debug_backtrace());
 →コールスタックを表示する。
 ステップ実行するような開発環境もある
(Visual Studio Code + PHP Debug)
(xdebug)(Eclipse+ZendDebugger)

9.SDカードの耐久化

 SDカードは、素子自体の書き換え可能回数が限られているため、特定のセルにアクセスが集中しないように分散化が図られている。 しかし、残りの容量が少なくなると、特定のセルへのアクセスが高まり、破壊が始まると思われる。したがって、容量の75%以下で使用することが好ましい。 特に頻繁にアクセスが生じるのはログファイル、仮想記憶、一時的ファイルなどであるため、例えば一時的ファイルをメモリ・ディスクに割り当てるなどの対策が行われている。
(1) SDカードの使用状況の把握
 ファイルマネージャでは右下に領域使用状況が表示されている。
 [例]空き容量:7.9GiB(合計14.1GiB)
 $df -h
 により、パーティション毎の使用状況を表示する。
(190724時点)
(2)SDカードの種類等
 SD 128MB~2GB, FAT16
 SDHC 4GB~32GB, FAT32
 SDXC 64GB~2TB, exFAT
 より容量の大きい新しいSDカードに対応したドライブでは、古いカードも認識する。
 逆に、古いドライブでは、新しいカードを認識しない。
(3)古い、小容量のカードが入手困難な場合
 SD 1GB FAT16を前提としたデジカメ等では、大容量カードは認識されない。
 そこで、先頭に小さなパーティションを切り、旧形式でフォーマットする。
>diskpart
DISKPART>list disk
DISKPART>select disk 1
DISKPART>list partition
DISKPART>select partition 1
DISKPART>delete partition
DISKPART>create partition primary size=2000
DISKPART>exit
→以下、エクスプローラでフォーマット可
 ただし、この方法ではデジカメには認識されない。
 また、このように処理したSDHCカードであっても、PCでSDHCカードとして認識される。
(5)SDカードの端子
  MMC SPI
 9: D2  ー 隅切部分
 1: CD/D3 CS
 2: CMD  Din
 3:  Vss
 4:  Vdd
 5:  CLK
 6:  Vss
 7: D0   Dout
 8: D1
 9: D2
*電源投入後はMMCモード。モード切替コマンドを送りSPIモードで通信を行う。

10.図形表現.html の調査

(1)HTML5とcanvas, webgl  2001年ころには画像やFLASHなどを用いる方法が主流であったが、HTML5では、canvasタグを用いる方法も充実。
 '2d', 'webgl'を用いてベクトルデータを表示する方法が可能。
 いくつかのテストデータを、/log/canvas配下に作成(190728)。
 詳細はこちら
 HTML5 と CSS による試作ページ
 190808時点での結論:
 html5 のとして液晶画面に対して十分大きな幅を指定する。
 各ブロック(h2, p, table など)のスタイルで width:800px を指定する。
 →初期表示において816幅を画面横幅一杯に縮尺して表示し、左右ほぼ同じマージンでブロックを表示する。
 ただし、tr tdの中に、同一サイズのcanvasを作成し、webglの構築に失敗した場合には、大きな箱が出現する。
(2)ローカルファイルの処理
 HTML5ではまた、ローカルファイルを処理する方法が充実し、結果をローカルに表現することも可能となった。
 これにより、ローカルな計算資源だけを用いて、3Dデータの表示・編集を行うことも可能。
 例えばIFC形式のファイルをローカルに開いて3D表示するブラウザをWEBサイトから提供するようなサービスも可能である。
(3)PHPによるアップロード
 PHPでは、ローカルに選択され送信されたデータを、テンポラリファイル軽油でサーバに格納することができる。
 form.htm からファイルをアップロードすると、ssd/filesで一覧表示することができる。
 例えば画像やテキストであれば、そのまま閲覧できる。またjavascriptを含むhtmlファイルを事件することもできる。
(4)三次元データ形式の略史と仮想コンバータに関するHTMLをとりまとめ、WebGLを用いたIFC形式の表示のデモを行った。

11.バックアップ

 メモリ不足障害が生じたため、WEBコンテンツ等をHDDにバックアップする方法を追加した(190917)。
(1)障害の状況
 メモリ不足等でフリーズし、コマンドプロンプトも起動できない。ここで電源OFF/ON等の方法で再起動した場合、FATディスク、NTFSディスクなどはdirtyとなる。
 その場合、再起動後、ログ等の書き込みができなくなるか、最悪の場合認識されず、起動プロセスでのmountが失敗し、 セーフモードでの再起動となる。
 正常に再起動させるためには、dirtyなドライブのマウントを除外するか、Windowsマシンでscandiskを実行する。
(2)外付けNTFSディスク
 NTFS形式でフォーマットされたHDDにtar書き込みを行うためには、ntfs-3gを導入する必要があった。
(Fat32HDDや、USBメモリには標準でアクセス可能)
(3)外付けRAID1ドライブ
 エンクロージャにHDDを2台設置し、RAID1を設定した上でNTFSで初期化した。  →(2)(3)の記録
(4)SDカードの複製
 USBカードライタで接続した新しいSDカード(16GB)に、[アクセサリ][SD card copier]で複製し、ここから起動を確認。
 カードライタは、「ELECOM メモリ リーダライタ MRSーMBD09BK」(0.75ky)を使用。
 カードには、「KLEVV NEO microSDHC」(16GB, 0.75ky)を使用。
 ソフトは、左上パイコン/アクセサリ/SD Card Copier で起動。
 コピー先に使用するSDカードは、32GBであっても構わない(191128確認、200918確認)
 Copy From Device: SD (/dev/mmcblk0)
 Copy To Device:Generic Storage Device(/dev/sdd)
 [Start]ボタンを押してから30分程度は経過。
 シャットダウンし、本体のSDカードの代わりにコピーしたカードに差し替えて起動することを確認。
 (なお本体のSDカードは、ケースの蓋を閉めたままでも交換でき、押し込むと出てくる)
(5)メモリ不足時の対応について(200205追記)
 GUI(XWindow)からLTXTerminalを起動すると、余分にメモリを必要とする。
 逆にGUIを抜けてCLI環境に移行すると、必要メモリが少ない分、余裕が生まれる。
 その方法:KBにて、Ctl+Alt+F1~F6 にて、6種類のCLIが起動できる。
 CLI環境でメモリ不足の原因となっているプロセスを調査したり、安全にシャットダウンしたり。
 原因が取れシャットダウンが不要であれば、Ctl+Alt+F7でGUIに戻ることができる。

12.数式表現

TeXまたはMathMLを用いることにより、htmlコンテンツの中に数式を記述することができる。
MathMLを用いる場合、タグの中に、数式をコーディングする。FireFox等の一部のブラウザでは、
これを直ちに表示することができる。それ以外の非対応のメジャーなブラウザのために、MathJax.jsrという
ライブラリをリンクすることで表示が可能となる。→その方法
 数式をパッド領域に手書きで入力し、自動認識させるツール「数式入力パネル」もある。
 ツールの使用方法と、入力した数式表現を例示する。

13.現在進行中のプロジェクト

 上記の手段を用いて、現在進行中のプロジェクトについて新たに記録を作成開始  

14.セキュリティ等の改善

 アップロードされたファイルが、.phpであった場合に、実行も拒絶もされることなくダウンロードできること。
 設定ファイル「.htaccess」などがアップロード/ダウンロードできないこと。
 その他、WEBサーバー構築関する各種資料、調査結果の整理など