全体記録
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を用いる場合、