2020年3月28日土曜日

FreeBSD 12.1Rでvm-bhyve上にWin10をインストールしてみた

サーバーのOSをFreeBSD 12.1Rにアップグレードした時にvm-bhyveもインストールしておいたので、「もし実用的な速さで使えるなら、、、」と思って、そのうち実験と思っていたが、最近のコンディションの悪さと、外出自粛で暇なので、実験してみました。
「FreeBSD 12のbhyveにWindows10をインストールする(その1その2)」を参考にさせて頂きました。
  1. まづ、Windows10のDVDのイメージファイルの作成 dd if=/dev/cd0 of=Windows10.iso bs=1m でコピーをファイル上に作り、出来たファイルをvm_dir/.isoディレクトリに移動。
  2. 以前、セットアップしていたvm-bhyveのネットワーク設定をして、remoteから見えるように。
  3. remoteからグラフィックス表示させるためにtigerVNCをpackageでインストール(pkg install tiver-vnc で1.10.0がインストールされますが、portには古いのが入っていました)。
  4. vm install windows Windows10.iso で取り敢えずインストールしてみる。
  5. あれ、途中で止まってる! tail -f vm-bhyve.log で様子を見ると、fatal; unable to locate firmware /usr/local/share/uefi-firmware/BHYVE_UEFI.fd と言うのが出ていて、インストールされていません。 このエラーメッセージでググってこのページにたどり着き、早速uefi-firmwareをインストール(portからのインストール)して、再度挑戦すると、今度はインストールが始まりました。
  6. 何度かtigerVNCが消えて、その都度tigerVNCを再接続させると、ちゃんとインストールは進んでいるようで、インストールが終了し使えるようになりました。
結構時間が掛かりましたが、一応動くWindows10がzfsのファイル上に作成できました(参考にしたWEBではWindows10のイメージはzfs上に作成できない、とありましたが、ちょっと意味が良くわかりませんが、zfs上で動いています)。
ただ、動作は遅いので、積極的に使ってみようという気にはなりませんでした。
動作することの確認のみ。

尚、今回の実験はFeeBSD12にWindows10からXming使ってアクセスしておき、FreeBSD上にvm-bhyveでWindows10を起動し、FreeBSD上でvncviewerをlocalhost:5600で起動して、これをまたWindows10上で見る(Xmingのお陰で、こんなことが出来ています)、というややこしい事をしています。(上の、画面写真の左3つの窓がFreeBSDのxterm/gnome-terminalで、真ん中がFreeBSD上のWindows10。でも、周りは全部Windows10のアプリ、、、)



2020年3月27日金曜日

JpGraphを久しぶりに弄って 一部問題解決。

室内と庭の温度、湿度のpostgreSQL DBが動くようになったので、今まで使っていた、HPをちょっと弄って化粧をしてみました。

JpGraphを使ってグラフを描かせていましたが、何故かグラフの各点の値表示が出来な
かったり、TrueTypeのフォントが使えていなかったりしたのを、一日がかりで修正。
  • 値の表示が出来なかった原因 ;  $graph->clearTheme()を設定していないと、表示をしてくれなかった。下のphpのソースコード参照
  • TrueTypeフォントのインストール ;  FreeBSDで動いているので、packageからwebfont(MSのTTF同等?)をインストール。 /usr/local/lib/php/jpgraph/jpg-config.inc.phpのTTF, MBTTFを実際にインストールされているディレクトリに指定する。
//
// UNIX:
//   CACHE_DIR /tmp/jpgraph_cache/
//   TTF_DIR   /usr/share/fonts/truetype/
//   MBTTF_DIR /usr/share/fonts/truetype/
//
// WINDOWS:
//   CACHE_DIR $SERVER_TEMP/jpgraph_cache/
//   TTF_DIR   $SERVER_SYSTEMROOT/fonts/
//   MBTTF_DIR $SERVER_SYSTEMROOT/fonts/
//
//------------------------------------------------------------------------
// define('CACHE_DIR','/tmp/jpgraph_cache/');
define('TTF_DIR','/usr/local/share/fonts/webfonts/');
define('MBTTF_DIR','/usr/local/share/fonts/webfonts/');
ついでにDBの欠落データを正しくグラフに反映させる為に、pg_fetch_rows()から、pg_fetch_result()に変更して、array()の該当する日時にデータが挿入されるように変更

require_once ('jpgraph/jpgraph.php');
require_once ('jpgraph/jpgraph_bar.php');
require_once ('jpgraph/jpgraph_stock.php');
require_once ('jpgraph/jpgraph_line.php');

  $ydata = array();
  $y1data = array();
  $ymax = array();
  $ymin = array();
  $yhumid = array();
  $ymaxhumid = array();
  $yminhumid = array();
  $ypressure = array();
  $ymaxpressure = array();
  $yminpressure = array();
  $sdata = array();

$conn = "hostaddr=192.168.?.?? dbname=XXXXX user=Who password=Are_you?";  //fake user/password
$link = pg_connect($conn);
if (!$link) {
   die ('Connection failed '.pg_last_error());
   }

  $result = pg_query("SELECT day, avg_temperature, max_temperature, min_temperature,avg_humidity, max_humidity, min_humidity, avg_pressure,max_pressure,min_pressure from dailydatacurrentmonth where location='MyRoom'" );
if (!$result){
   die('Query failed'.pg_last_error());
  }
$tempE=pg_fetch_result($result, pg_num_rows($result)-1, 0);  // chech when day ends
for ($i = 0, $j = 0, $k = 0; $i < $tempE; $i++){
   $temp =pg_fetch_result($result, $k, 0);  //  day
   if ($i == $temp-1) {
     $x_axis[$i] = $temp;
     $ydata[$i] = pg_fetch_result($result, $k, 'avg_temperature');
     $yhumid[$i] = pg_fetch_result($result, $k, 'avg_humidity');
     $ymaxhumid[$i] = pg_fetch_result($result, $k, 'max_humidity');
     $yminhumid[$i] = pg_fetch_result($result, $k, 'min_humidity');
     $ypressure[$i] = pg_fetch_result($result, $k, 'avg_pressure');
     $ymaxpressure[$i] = pg_fetch_result($result, $k, 'max_pressure');
     $yminpressure[$i] = pg_fetch_result($result, $k, 'min_pressure');
     $sdata[$j++] = pg_fetch_result($result, $k, 'min_temperature');
     $sdata[$j++] = pg_fetch_result($result, $k, 'min_temperature');
     $sdata[$j++] = pg_fetch_result($result, $k, 'max_temperature');
     $sdata[$j++] = pg_fetch_result($result, $k, 'max_temperature');
     $k++;
   } else {
     $x_axis[$i] = $i+1;
     $ydata[$i] = '';
     $yhumid[$i] = '';
     $ymaxhumid[$i] = '';
     $yminhumid[$i] = '';
     $ypressure[$i] = '';
     $ymaxpressure[$i] = '';
     $yminpressure[$i] = '';
     $sdata[$j++] = '';
     $sdata[$j++] = '';
     $sdata[$j++] = '';
     $sdata[$j++] = '';
   } 
}

  $result = '';
  $result = pg_query("SELECT day, avg_temperature from dailydatacurrentmonth_prevyear where location='MyRoom'" );
  if (!$result){
     die('Query failed'.pg_last_error());
  }
for ($i = 0; $i < pg_num_rows($result); $i++){
    $rows = pg_fetch_array($result, NULL, PGSQL_ASSOC);
    $y1data[$i] = $rows['avg_temperature'];
}

$close_flag = pg_close($link);

$graph = new Graph(750, 450);
$graph->clearTheme();
$graph->SetFrame(true);
$graph->SetScale("textlin",10, 40);
$graph->SetY2Scale("lin",10, 90);
$graph->img->SetMargin(50,30,20,90);
$graph->SetShadow();

$graph->title->SetFont(FF_ARIAL,FS_BOLD,14);
$graph->title->Set("Daily Max/Min/Avg Temperature & Avg Humidity of the Month");

//$graph->yaxis->title->SetFont(FF_ARIAL.FS_ITALIC, 10);
$graph->yaxis->title->Set("Temperature");
$graph->ygrid->Show(true,false);
$graph->y2axis->title->Set("Humidity");

$graph->xaxis->title->Set("Month-Day");
//$graph->xaxis->title->SetFont(FF_ARIAL.FSBOLD, 10);
$graph->xgrid->Show(true,true);

// Specify the tick lables
$graph->xaxis->SetTickLabels($x_axis);
$graph->xaxis->SetTextLabelInterval(1);

// Create the linear plot
$lineplot = new LinePlot($ydata);
$lineplot->SetColor("blue");
$lineplot->mark->SetType(MARK_UTRIANGLE);
$lineplot->value->show();
$lineplot->value->SetFont( FF_ARIAL, FS_ITALIC, 7 );
$lineplot->value->SetColor('darkred');
$lineplot->value->SetFormat('%0.1f');

$p1 = new StockPlot($sdata);
$p1->SetWidth(9);

$line2plot = new LinePlot($y1data);
$line2plot->SetColor("red");
$line2plot->mark->SetType(MARK_UTRIANGLE);
//$line2plot->value->show();
$line2plot->value->SetColor('darkred');
$line2plot->value->SetFont( FF_ARIAL, FS_BOLD, 10 );
$line2plot->value->SetFormat('%0.1f');


$barplot = new BarPlot($yhumid);
$barplot->SetColor("black");
$barplot->value->Show();
$barplot->value->SetFont( FF_ARIAL, FS_BOLD, 10 );
$barplot->value->SetFormat('%0.1f');

// Add the plot to the graph
$graph->Add($lineplot);
$graph->Add($line2plot);
$graph->AddY2($barplot);
$graph->Add($p1);

$graph->Stroke();

?>



2020年3月16日月曜日

30-40-80m Inverted U アップデート


 先日、40mのトラップを小さいインダクタンスの物に交換し、末端のエレメント長が3m程長くなり、屋根のより下に位置するようになりました。 
どうもこの所為か、今までなかったようなIが80mで出るようになり、元に戻すのも能が無いので、片方だけ今まで使っていたインダクタンスの大きいトラップに変更してみました。
で、Iは治まったので、寸法とnanoVNAでシャックで計測したSWRを記録しておきます。
 

> 80mの中心周波数が上がり過ぎたため、若干調整して、最終的に左図左端のエレメント長が565cmから588.5cmとなり、中心周波数は3547.1Khzとなりました(5mm単位の調整が必要なところを、目分量で現場で処理していたので、目標値より2Khz程高くなってしまいました)。

80mのエレメントは凡そ26Khz/20cm(1.3Khz/cm)で、切り貼り。








FreeBSD 12.1R とZFS

結局、FreeBSD11.1Stableで使用していたZFSの写真など重要部分が読めないままに、FreeBSD12.1Rを新規インストールする羽目に、、、、。 (消失したデータはCD等にあるので、コツコツと構築して、見つからなくなったものは諦めるーという泣く泣くの判断。 みんな自分が悪いので、已むをえません。)
今回はUSBスティックにインストーラーを用意して、ZFSファイルに(凝りもせず)インストール。 
インストールする前に、古いZFSファイルから設定ファイルなど、救出できるファイルは全て1TBのHDDにコピーしておいて、今まで使っていたZFSファイルに新規にFreeBSD12.1Rを入れ、後にHDDをマウントして必要な設定ファイルをコピーしていった。 
当然、初期のインストールなどは全く問題なく終了。 pkgを使ってgnome, apache24, postgreSQL, php, wildfly14等をインストールしてゆき、都度必要なセットアップファイルをコピーしてきて、動作確認。 samba24, gnome, apache24, wildfly14, postgreSQLとinstallそのものは無事終了しましたが;
全体としてココを参考にしながら
  1. gnome-terminalは LANGの設定が拙くて立ち上がらず、ココを参考に。
  2. postgreSQLも暫く使っていなかったので、コマンドを忘れてしまい苦労しましたが、ココを見ながら、csvファイルで残っていた気温、湿度のデータなどを復元させ。
  3. 気象データの取り込みのphpプログラムもバックアップデータから引っ張り出してきてインストール。(センサーデータを送ってくるESP32側を再起動しないと、定期的に送信するようにはなりませんでした。何故?)
  4. 気象データをグラフ化してWEBに表示している JpGraphに食わせるデータを作っているView(PostgreSQLの)をphpのコードを見ながら再構築中ー>道半ば。
  5. Sambaは、前の設定ファイルを取り込んで、すんなり動作。Win10のファイルサーバ状態。(以前は苦労した記憶があるので、助かった!)
ファイルサーバが構築できたので、過去の写真データ用のスペースを作り、ふと、google photoを覗いて見ると、かなりの物が残っていそうなので、全部をダウンロードして、新たなディレクトリに再構築。 あれ!全部入ってる! いつの間にか自分のPCにある写真や動画がすべてgoogle photoに入っているのには驚いた!というより少し恐ろしい! (今回はこれで救われていますが、、、)
ー>しかし、ごみのような写真(気安く携帯で撮ったような)も全て保存されているので、これの整理は将来的に何か方法を考えないと、ただ大容量のスペースに保存するだけでは拙い。

ついでにこの記事に刺激されvm-bhyveもここを参考に入れてみたが、問題なく動きそう。

あれ?再起動するとzfsのルート以外がマウントされていない? でググったらココにありました。 rc.confを書き換えた時にzfs_enable="YES"を消してしまっていたみたい。

ZFS絡みのバージョンアップの失敗は2-3度やって、その都度ファイルを失っていますので、二度と同じ間違いをしないように、もう少しzfsのsnapshotやbackup機能の利用を自動化してゆくことを検討中。

>zfstoolsを使う方法があったので、実験中。 cronで起動しても何故かうまくsnapshotが取れていませんでしたが、ココを参考にして設定してみたらうまく行きました。 必要のない所を個別に以下の様にauto-snapshot=falseを設定した後に
# zfs set com.sun:auto-snapshot=false zroot/tmp
# zfs set com.sun:auto-snapshot=false zroot/usr/ports
# zfs set com.sun:auto-snapshot=false zroot/usr/src
# zfs set com.sun:auto-snapshot=false zroot/var/crash
# zfs set com.sun:auto-snapshot=false zroot/var/tmp

zrootに対して com.sun:auto-snapshot=trueしてあげないとダメみたい。
# zfs set com.sun:auto-snapshot=true zroot

確かにsnapshotが出来ていました。
# zfs list -t snapshot
NAME                                                       USED  AVAIL  REFER  MOUNTPOINT
zroot@zfs-auto-snap_hourly-2020-03-16-18h00                   0      -   117K  -
zroot/R@zfs-auto-snap_hourly-2020-03-16-18h00                 0      -   117K  -
zroot/R/vm@zfs-auto-snap_hourly-2020-03-16-18h00              0      -   240K  -
zroot/R/vm/windows@zfs-auto-snap_hourly-2020-03-16-18h00      0      -   123K  -
zroot/ROOT/default@zfs-auto-snap_hourly-2020-03-16-18h00   938K      -  6.77G  -
zroot/usr/home@zfs-auto-snap_hourly-2020-03-16-18h00       432K      -   444G  -
zroot/var/audit@zfs-auto-snap_hourly-2020-03-16-18h00         0      -   117K  -
zroot/var/log@zfs-auto-snap_hourly-2020-03-16-18h00       95.9K      -   501K  -
zroot/var/mail@zfs-auto-snap_hourly-2020-03-16-18h00          0      -   165K  -
#


> wildfly16(wildfly14から新しい物に更新)を立ち上げてみたら、立ち上がらない! 「おいおい、何だろう?」ってなわけで、/var/log/wildfly16/logを眺めてみると、「動かしているマシンのアドレスが分からない?」って出て来ている。 「ありゃま、named立ち上げないとダメなんか」ということで、local domain用にnamed立ち上げて、解決。
長ったらしいログだなー、しかし。
namedの設定も久しぶりで、ちょっと手間取りました。 何故かCNAMEの所をちゃんと読んでくれないので、暫定的にCNAME使うのはヤメ。
Wildfly16とpostgreSQLを繋ぐのにもちょっと躓いたのでココを参考にした。 (ここで使っているwildflyは9.0.2とか11.0.0なのでその所為か、mouduleの置き場所が、/modules/直下に/org/postgresql/main/を作って、、、となっています。 cliを使ってインストールすると、/module/org/postgresql/main/{module.xml, posgtresql-42.2.11.jar}が出来ていました。 (どこかで、/module/system/layers/baseの下に置くような記事を見たような気がしましたがこれは違いますね、多分。jboss/wildflyは結構階層が深くてわかり難い)





2020年3月9日月曜日

VP8PJ 40m FT8 cfmd!

「3月に入ってのQSOは島を離れてからアップロード」とされていたので、気になっていましたが、今朝確認すると6日までの分がアップロードされていて、cfm出来ましたので、早速OQRSリクエスト!
これで残り12になりましたが、ここ1-2年に予定のある所を除くと 北朝鮮とかスカボロー礁、プラタス島みたいなヤバい所とカリブのマルペロ、アベス、それに南サンドイッチ、ブーベ、、、、、 
オーナーロールに届くんかな~。

2020年3月3日火曜日

VP8PJ 30m FT8

30/40/80mのFT8でVP8PJをワッチしていたら、40mのVP8PJが強く聞こえていたので、ダメもとで呼んでみたら、何とか返って来ました。 先方は-18、此方は+02!! 相手の波が弱いだけなのかな? 
ATNO get! なので、ちょっとホッとして、「でも、20mのCWが欲しいなー」と思い、アンテナを切り替えて聞いていたのですが、30mはそのままワッチの状態。 「あれ、強く聞こえてるじゃーん」で、早速呼ぶとSWRが異常に高い! 「あ、アンテナが、、、」と思い、30mのアンテナに切り替えると、弱くなる。 
30/40/80mのダイポールは30mは水平部が結構長いので、どうもダイポールの8の字の指向性が出ているみたい(南北がNull?になる)で、受信は20-17-15-12-10のHexBeam、送信はダイポールで試みましたが、ダメ。 10-20分程度聞こえていたのみ、でした。

どうも、強い信号で入る時間もありますが、かなり短い間だけみたいです。 今朝の、17mも北北東からのLPで結構強く入感していましたが、ここでは10分も続きませんでした。

ntpq の見方

wsjt-xの表示がみんな1sec以上ずっていると出てくるので、自分のPCの時間が狂っていると思い、FreeBSD serverのntpdをチェックしたり、相手サーバーを変えたりして、同期取り直しても改善しない。 
なんでだろ? (サーバーの時間同期に時間が掛かる?ので、直ぐには修正されていないみたい。 これ書いているうちに、0.5sec以内に改善されました)
うー、18MhzのVP8PJ FT8を逃してしまった!

理由はよくわからないですが、取り敢えずはntpq -pの読み方の確認



root# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 0.freebsd.pool. .POOL.          16 p    -   64    0    0.000    0.000   0.000
*ntp-b2.nict.go. .NICT.           1 u   49   64  377    5.631    1.597   0.794
-ntp1.jst.mfeed. 133.243.236.17   2 u   51   64  377    5.607    2.011   0.788
#time.cloudflare 10.22.8.215      3 u   52   64  377   14.845   -3.737   0.711
-133.40.41.135   133.40.41.133    2 u   55   64  377   12.338    1.076   0.577
+time3.google.co .GOOG.           1 u   45   64  377   43.622   -1.132   0.750
+103.226.213.30  .PPS.            1 u   16   64  377   44.221   -0.684   0.730


で、読み方;
 【ntpq の見方】
一番左:
 '*' : 参照同期中であると宣言されたサーバ(sys.peer)
 '#' : 参照可能だが, 同期距離が遠いサーバ(selected)
 '+' : 接続テストに合格し, いつでも参照可能なサーバ. 参照リストにある(好ましい)サーバ(candidat)
 ' ' : 同期を試み中, もしくはレスポンスがないため, 参照していないサーバ(excess)
 'x' : falseticker検査で, 参照リストから外れたサーバ(falsetick)
 '-' : クラスタリング検査で, 参照リストから外れたサーバ(outlyer)
 '.' : 参照リストから外れたサーバ(excess)
 'o' : 参照同期中であると宣言されたサーバ(同期はPPS信号から間接的に行なう。)(pps.peer)
remote 時刻サーバ
refid 参照ID(サーバが参照しているマシンID. 不明の場合は0.0.0.0)
remote が参照している他の時刻サーバやGPSなど
st サーバのstratum値. サーバの階層.
 (1は一次サーバ, 2は二次サーバ, 16が最低でサーバに接続できないことを表す)
t 時刻サーバの型(l:local, u:unicast, m:multicast, b:broadcast)
when 何秒前に最後のバケットを受信したか(秒)
poll ポーリングの時間間隔(秒)
 最初は高速に同期ができるようにポーリング間隔(この値)は小さい.
 トラフィックや時刻サーバの負荷を減らすように, 時計が同期されたらポーリング間隔はだんだん長くなる.
reach 到達可能性に関するレジスタ・データ
 時刻サーバへの直近8回分の接続結果を8ビットの8進数で表す. 全て成功していれば377(2進数で11111111)
delay 通信による遅延の推定値. パケット往復時間(ミリ秒)
offset 時刻サーバとのずれ(ミリ秒)
 同期中は小さくなっていく. つまりローカルの時刻がだんだん正確になっていく. 10[ms]以下なら問題なし
jitter オフセット値の分散
 小さい方が好ましく, 正確な時刻同期が可能になる.(単位:ミリ秒) 10[ms]以下なら問題なし



ntp server の在処はここを参照
ntpの設定についてはココを参照

2020年3月2日月曜日

Win10マシンもヤバい!?

何故か、突然落ちて”Boot deviceを入れろ”と言っている! ヤバッ!HDD壊れたかな? とHDDをHDDケース(サーバー用の5”3台入るやつ)から取り出して、埃を吹き飛ばして、再度電源を入れると、復活!

「これって、ヤバいなー。HDDのデッドコピー作るソフトってないかな?」と思ってFBで呟いてみたら、大学時代の友達から「HD革命 Copy Driveじゃダメ?」って書き込みを頂いたので、早速ダウンロード。 新規のHDDにコピーして、コピーから立ち上げてみるとピンポーン! これでHDDの障害についてはちょっと安心。

「これだったら、SSDにコピーしても良いのでは?」ということで、512GBのSSD(M.2 BioStar)を調達して、AmazonからASUS用の留めネジヒートシンクを購入し、取り付けて、同様にコピーしてBIOS画面でM.2を選択して立ち上げてみると、これもOK。 スピードも10倍近く早くなっている! なんで、こんな事に気が付かなかったのだろう? SSDも随分安価になったものだ。

で、rebootすると、今度は中々立ち上がらない! 何か探してる、けど何だろう? 

BIOS設定画面から、Boot optionで立ち上げの順番をM.2->DVD->HDDに変更して、立ち上げると、今度はちゃんとさっさと立ち上がってくれました。BIOS画面でBootデバイスの選択をして立ち上げても、記憶されない(Ad hockなんですね)ので、ちゃんとboot optionで起動デバイスの順番を指定しておかないとダメなのでした。(気が付かなかった)。
>> 電源入れっぱなし、画面表示だけ 「ディスプレイの電源を切る」にしているのですが、この設定だと、復帰時にDUAL-RTX2060S-A8G-EVOがうまく起動してくれなくなってしまい、本体の再起動からになる(原因未調査)ので、ちょっと別の方法を考えなくては、、、。

M.2 のDiskMark
下のHDDと比べて10倍以上の違いがあるのは嬉しい!






 

手持ちのHDD3台(Barracudaの新しいもの、古いもの)のDiskMark。 ちょっとバラツキがありますので、何回か測定して平均値で比較しないと、一回の測定の数倍程度の差は、測定誤差として無視できる程度なのかもしれません。  勿論、古いもの、新しいものでも、同じBarracudaであっても、差はあるかもしれませんが、、。















アンテナ切り替えの自動化 (続き)

 調子よく動いていると思っていたら、インジケータのLEDが次々と点かなくなってゆく、、、。 不精して、出力端子(14Vのon/off)にLEDを直列抵抗と入れていたのですが、これではダメっぽい。 LEDが死んでいる。 では、という事でFETのスイッチを入れて、ゲート電圧で検出して...