FC2ブログ

[PS4]ボイスチャット断絶

相手の声はクリアに聞こえるのに、自分の声が相手にはぶつぶつ切れたり、
聞こえなかったり。

設定 > ネットワーク > ネットワーク診断する

をやると、ダウンロードは30Mbpsくらいあるのに、アップロードは3Mbpsくらい。
これが原因か?
PS4無線接続ではアップロードがせいぜい8Mbpsくらいにしかならなかったので、
諦めて有線接続にした。

その結果、アップもダウンも80Mbpsくらいになり、ボイスチャットで相手が自分の声が聞こえないとかいう症状は直ったようだ。

にしても、PS4とルータを無線で直結しても数Mbpsしか出ないって何故?
デバイス性能不足?
スポンサーサイト

[AWS]コマンド

pythonとpip3でAWS CLIインストール

Cygwin 64bit起動

$ which python
/cygdrive/c/Users/bob/AppData/Local/Programs/Python/Python37/python

$ python --version
Python 3.7.2

$ pip3 --version
pip 18.1 from c:\users\bob\appdata\local\programs\python\python37\lib\site-packages\pip (python 3.7)

$ pip3 install awscli

Collecting awscli
 :
Successfully installed PyYAML-3.13 awscli-1.16.144 botocore-1.12.134 colorama-0.3.9 docutils-0.14 jmespath-0.9.4 pyasn1-0.4.5 python-dateutil-2.8.0 rsa-3.4.2 s3transfer-0.2.0 six-1.12.0 urllib3-1.24.2
You are using pip version 18.1, however version 19.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
Downloading https://files.pythonhosted.


$ which aws
/cygdrive/c/Users/bob/AppData/Local/Programs/Python/Python37/Scripts/aws

しかし、awsコマンドを実行するとエラーが。
$ aws help
C:\users\bob\appdata\local\programs\python\python37\python.exe: can't open file '/cygdrive/c/Users/bob/AppData/Local/Programs/Python/Python37/Scripts/aws': [Errno 2] No such file or directory

ここを参照して、apt-sygをゲット。
http://tiblog.hatenablog.com/entry/2017/12/22/013108


$ wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
$ chmod 755 apt-cyg
$ mv apt-cyg /usr/local/bin/
.bashrcへ/usr/local/bin/のパスを通す。


http://wiki.fast.ai/index.php/Awscli_in_cygwin

pip uninstall awscli
wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg
install apt-cyg /bin
apt-cyg install python
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
pip install awscli

2019.4.24現在、このスクリプトは各コマンド成功したが、
それでも同じエラーとなった。

$ aws -help
C:\users\bob\appdata\local\programs\python\python37\python.exe: can't open file '/cygdrive/c/Users/bob/AppData/Local/Programs/Python/Python37/Scripts/aws': [Errno 2] No such file or directory

[PC]VGA to HDMI変換アダプタ

サンワダイレクト HDMIセレクター 3入力1出力 400-SW018
を使って複数PCの画面出力を切り替えている。

まだVGA出力しかないマザーボードからの画面も切り替えたいので、以下を購入。

VGA to HDMI 変換ケーブル、 GANA 金メッキVGA→HDMI 出力 ビデオ変換アダプタ USB給電 1080P対応 (給電用USBケーブル付属) (VGA to HDMI変換アダプタ)
https://www.amazon.co.jp/dp/B06XHLM2W4/ref=twister_B07K82FF2Q?_encoding=UTF8&psc=1


この前買ったのは、打合せで使いそうなHDMI to VGAだったが、今回はその逆のVGA to HDMI変換。
この商品が安くてコンパクトで良いかと思った。

以下構成で動いたのでメモ。

G33(CentOS 7.2) / VGA出力
  --> GANA VGA to HDMI変換アダプタ / HDMI出力
  --> SANWA HDMIセレクター 3入力1出力 400-SW018 / HDMI出力
  --> Acerモニタ / HDMI入力

USB電源供給が必要なのは面倒だが、1000円程度で買えるので良い。

[python]トラブルシューティング

Missing parentheses in call to 'print'. Did you mean print(title_tag)?
printの書き方がver3で変わってる。

print "Hello world" # python 2.x
print("Hello world") # python 3.x


ModuleNotFoundError: No module named 'urllib2'

インストールされてなければ以下でインストール。
pip install urllib2

また、書き方がver3で変わってる事に注意。
import urllib2 # python 2.x
import urllib.request, urllib.error # python 3.x



AttributeError: module 'urllib' has no attribute 'urlopen'

python3で書き方が変わってる。
html = urllib2.urlopen(url) # python 2.x urllib2
html = urllib.request.urlopen(url) # python 3.x urllib



AttributeError: 'NoneType' object has no attribute 'text'

print soup.select_one("#CONTENTS_MARROW > xxx > yyy > span.prices").text
取得したオブジェクトにtextアトリビュートがないって事かな。
print soup.select_one("#CONTENTS_MARROW > xxx > yyy > span.prices")



CSSセレクタの指定方法例
(注) print構文がprint()なのは、python3.x系です。

使ったソースはこれ。

# -*- coding: utf-8 -*-
import urllib.request
from bs4 import BeautifulSoup

# urlのHTMLを取得
url = 'https://algorithm.joho.info/'
html = urllib.request.urlopen(url)

# htmlをBeautifulSoupでパース
soup = BeautifulSoup(html, "html.parser")

# CSSセレクタで指定したタグ内のコンテンツを表示
print(soup.select_one("#post-17926 > div > footer > p > span.category > a").get('href'))


https://algorithm.joho.info/
print(soup.select_one("#post-17926 > div > footer > p > span.category > a").text)
電気・電子工学
  --> 成功

print(soup.select_one("#post-17926 > div > footer > p > span.category > a").get('href'))
https://algorithm.joho.info/category/denki-denshi/
  --> 成功

[WS]トラブルシューティング

Windows Server 2019 Essential

下に表示されている Web サイトのコンテンツは、Internet Explorer セキュリティ強化の構成によってブロックされています。


Internet Exploror のセキュリティ強化の構成が有効になってます。

WINキー > サーバマネージャ > ローカルサーバー > IEセキュリティ強化の構成 > Adminグループだけオフへ。



wlanapi.dllが見つからないため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する可能性があります。

DLNAサーバを入れようと、KODIというソフトをインストールして起動しようとしたら、このメッセージ。

コントロールパネル > 管理ツール > サービス > 無線管理サービス > 右クリック > 開始
これでは解決しなかった。




Windowsキー > サーバーマネージャー > ダッシュボード画面のクイックスタート > 役割と機能の追加
 > 次へ > 役割ベースまたは機能ベースのインストール、にチェックして次へ > サーバの選択、ではそのまま次へ
 > 

[WS]コマンド

Windows Serverメモ

インストールが出来ない(WS 2019 Essential)

G33: 以下メッセージ。保留。

ドライバーの読み込み
お使いのPCに必要なメディアドライバーがありません。メディアドライバーの種
類としては、DVD、USB、ハードディスクドライバーなどがあります。ドライバー
の入ったCD、DVD、USBフラッシュドライブをお持ちの場合は、挿入してくださ
い。

注意: WindowsのインストールメディアがDVDまたはUSBドライブに入っ
ている場合は、この手順のために取り出してかまいません。


h170: 以下メッセージ。保留。

Your PC ran into a problem and needs to restart. We'll restart for you.

For more information about this issue and possiblefixes, visit https://windows.com/stopcode
if you call a support person, give them this info:
Stop code: DRIVER PNP WATCHDOG




インストール(WS 2019 Essential)

ホスト: h67

・Windows Server 2019 Essential 評価版でDVD DLから起動。
・ライセンスないので、ありません、を選択して先に進む。
・旧パーティションを全て削除した後、2TB HDDを選択して、次へ。
・インストールが始まり、一度再起動。
・adminパスワード設定
・ログイン画面になり、adminでログイン。
・このPCを検出可能にする、にはいを設定。(LANなので)
・メニューバーのIEを起動。

[English]メモ

otherとanotherの違い

https://toiguru.jp/difference-between-other-and-another

[Py][Colabo]トラブルシューティング

FirefoxからCoraboへファイルアップロードする際のエラー


from google.colab import files
uploaded = files.upload()
Coraboへファイルをアップロードする際、このように書くと、
Chromeならファイル選択ウィンドウが出てたが、Firefoxだと以下エラー。

Upload widget is only available when the cell has been executed in the current browser session. Please rerun this cell to enable.

https://qiita.com/kakinaguru_zo/items/33dbe24276915124f545

ここのページでも触れているが、なんかFirefoxだとエラーになるみたい。

[Py][Colabo]コマンド

Google Colaboratoryにおけるpythonメモ。
まずはGoogle IDでログインして、Google ColaboのJupyter Notebookを開くこと。
尚、特に説明がなければ、以下の書籍を参考にしてます。

ゼロから作るDeep Learning
――Pythonで学ぶディープラーニングの理論と実装
https://www.oreilly.co.jp/books/9784873117584/



Shift + Enterで実行

NotebookのPythonコード欄に記述して、Shift + Enterで実行可能。


Linuxコマンドは!をつけて実行

NotebookのPythonコード欄に!付でLinuxコマンドを記述して、Shift + Enterで実行可能。

例:
!pwd
Shift + Enterで実行


ファイルをアップロード

from google.colab import files
uploaded = files.upload()

これでアップロードウィザードが出るので、ファイルを選択。


画像を表示

import matplotlib.pyplot as plt
from matplotlib.image import imread

img = imread("hoge.jpg")
plt.imshow(img)
plt.show()

上でアップロードしたファイル名をそのまま書けばよい。



グラフを描画

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 6, 0.1)
y1= np.sin(x)
y2= np.cos(x)

plt.plot(x, y1, label="sin")
plt.plot(x, y2, linestyle="--", label="cos")
plt.xlabel("x axis")
plt.ylabel("y axis")
plt.title("sin & cos")
plt.legend()
plt.show()





ColaboのJupyterからGoogleドライブ上のファイルへアクセス

https://qiita.com/yoshizaki_kkgk/items/bf01842d1a80c0f9e56c
こちらを参考にやってみる。そのまんまです。

まずはGoogle Driveと接続するためのモジュールをインストール。

!pip install -U -q PyDrive

 ※ 以降いずれもコマンドの後で、Shift + Enter、を押して実行すること。


必要なライブラリを読み込む。

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials


実行しても、何も表示ない。もしGoogleが無い、と言われたら、以下を実行すれば良いそうだ。

!pip install google


以下でGoogle Cloud SDKの認証を行う。

auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)

これ実行すると、確かに以下のように出た。

Go to the following link in your browser:

https://accounts.google.com/ .........(長いURL)


このURLをクリックすると、Google Cloud SDKへログインするよう言われる。
ログインした後、「Google Cloud SDKでの使用許可」を「許可」すると、認証コードが表示される。
このコードをコピーして、Jupyter Notebookへ戻り、先ほどの枠にペーストし、Enter。
これで何も表示されず、さっきまで出てた上のURLなどもすべて消えた。何も表示ないのでエラー無しって事らしい。

次に、扱いたいファイルをGoogle Driveの任意のフォルダへコピーしておく。
そのファイル上で > 右クリック > 共有可能なリンクを取得
すると、クリップボードに以下のようなURLがコピーされている。
https://drive.google.com/open?id=1EEXKXPo-A

Google DriveからJupyter上にコピーするには、以下のようにやる。
上でゲットしたURLのうち、id=以降の部分を以下idへ代入する。

id = '1EEXKXPo-A'
downloaded = drive.CreateFile({'id': id})
downloaded.GetContentFile('hoge.jpg')

上記ではファイル名をhoge.jpbとしている。

エラー無く完了したら以下コマンドでコピーできたことを確認する。
 ※ 毎度のShift + Enterも忘れずに。
!ls
adc.json hoge.jpg sample_data

すると、hoge.jpgが直下にコピーされた事が確認できた。
ここまで来れば、あとは上の「画像を表示」で書いた通りのコードを使って、Google Driveからコピーした画像が表示出来た。


MNISTデータ読み込み
書籍p.74

まず、githubからダウンロードしたdeep-learning-from-scratch-master.zipを展開し、中身をカレントDIR直下に移動した。

ch01 ch04 ch07 dataset README.md
ch02 ch05 ch08 sample_data
ch03 ch06 common LICENSE.md


この状態から以下のようにして提供されているdataset/mnist.pyを利用して、load_mnist関数を呼び出し、
それを使ってMNISTデータを読み込む。


import sys, os
sys.path.append(os.pardir)
from dataset.mnist import load_mnist

(x_train, t_train), (x_test, t_test) = \
load_mnist(flatten=True, normalize=False)

print(x_train.shape)
print(t_train.shape)
print(x_test.shape)
print(t_test.shape)

[Cygwin]トラブルシューティング

tkdiffが起動しない
以前入手したこれを使った。
tkdiff-4.1.4-unix.tar.gz

Cygwin 32bitの場合

$ tkdiff
application-specific initialization failed: no display name and no $DISPLAY environment variable
Error in startup script: couldn't load file "/usr/bin/tk86.dll": No such file or directory
while executing
"load /usr/bin/tk86.dll Tk"
("package ifneeded Tk 8.6.8" script)
invoked from within
"package require Tk 8.0"
(file "/cygdrive/c/bob/user/app/tkdiff/tkdiff-4.1.4-unix/tkdiff" line 32)


Cygwin 64bitの場合
 日本語になってるためか文字化け。

$ tkdiff
/cygdrive/c/bob/user/app/tkdiff/tkdiff-4.1.4-unix/tkdiff: 4 ▒s: exec: wish: ▒▒▒‚▒▒▒܂▒▒▒


https://oflow.me/archives/786
こちらのページを参考にさせて頂き、同じエラーが出た32bit Cygwinでやってみる。

Setup-x86.exe実行 > 進んでSelect Packagesの画面
 > ウィンドウ下の「Hide obsolete packages」のチェックを外す
 > 上のSearchウィンドウで「tck」で検索
 > Tclカテゴリの中のtck-tk:Tcl X11 toolkit をUninstallにする。
 > 続いて、_obsoleteカテゴリのtcltk: Obsolete package をinstallにする。
 > これで何度か次へ、をクリックして先に進み、インストール実行。

インストール実行後、Cygwin 32bit起動して、tkdiffを実行したが、やはり同じエラーかな。

(この間なんだかんだ試した。)

そして、既存のデスクトップアイコンではなく、新しく生成されたCygwinアイコンの方を実行。
Cygwin 64bitで以下エラー。

$ tkdiff
application-specific initialization failed: no display name and no $DISPLAY environment variable
Error in startup script: couldn't load file "/usr/bin/tk86.dll": No such file or directory
while executing
"load /usr/bin/tk86.dll Tk"
("package ifneeded Tk 8.6.8" script)
invoked from within
"package require Tk 8.5"
(file "/cygdrive/c/bob/user/app/tkdiff/tkdiff-4-3-5/tkdiff" line 33)


https://stackoverflow.com/questions/48491185/adding-tk-8-6-8-package-for-cygwin
ここを参考に、
Cygwinのsetup-x86-64.exeを実行 > X11の中の、xinit(1.3.4-14)をインストール

すると、上記記事の通り、Windowsのスタートメニューに、Cygwin-Xが新規に生成された。
Winキー > そのまま表示に出てるCygwin-X > XWin Serverを実行

そして、Cygwin 64bitを開く。
ここでtkdiffを実行しても以下エラーになる。

$ tkdiff
application-specific initialization failed: no display name and no $DISPLAY environment variable
Error in startup script: couldn't load file "/usr/bin/tk86.dll": No such file or directory
while executing
"load /usr/bin/tk86.dll Tk"
("package ifneeded Tk 8.6.8" script)
invoked from within
"package require Tk 8.5"
(file "/cygdrive/c/bob/user/app/tkdiff/tkdiff-4-3-5/tkdiff" line 33)


Cygwin上で以下を実行。
# export DISPLAY=:0.0

すると次はtkdiffのGUIが起動できた。
# tkdiff
 ※ これで起動成功。

次回から自動でexportするように
/home/bob/.bashrc
へ以下を追加。
export DISPLAY=:0.0

すると、Cygwinターミナルを一度閉じても、次に起動したCygwinですぐにtkdiffが起動できた。

しかし一度PC再起動してからCygwin開いてtkdiffを起動すると、以下エラーで起動せず。

$ tkdiff
application-specific initialization failed: couldn't connect to display ":0.0"
Error in startup script: couldn't connect to display ":0.0"
while executing
"load /usr/bin/libtk8.6.dll Tk"
("package ifneeded Tk 8.6.8" script)
invoked from within
"package require Tk 8.5"
(file "/cygdrive/c/bob/user/app/tkdiff/tkdiff-4-3-5/tkdiff" line 33)


Winキー > そのまま表示に出てるCygwin-X > XWin Serverを実行
をやってから、Cygwinターミナルを開きなおしてtkdiff実行すると、エラーは出たが、GUIが起動した。

$ tkdiff
application-specific initialization failed: couldn't connect to display ":0.0"

Cygwin開いたまま、一度tkdiffを閉じてから二度目のtkdiffを起動すると、今度はエラーなく、GUIが開いた。

[PC]Qwatchで監視カメラシステム

TS-WLC2
https://www.iodata.jp/product/lancam/lancam/ts-wlc2/

監視カメラとしてはこれが一番コスパが高いと思い、2台使ってる。
画質もそこそこ、外出先からスマホアプリで自宅の様子も見れる。
しかも、マイク・スピーカー付きで外出先からカメラ付近の人と会話できる。

PCからこのカメラにアクセスする時はブラウザGUIでログインして、映像をチェックしてたが、複数台となると面倒だ。
そこで一画面に複数カメラの映像を同時に表示するようなアプリがないものかと探したら、しっかりあった。
IODATAさん、さすがです。しかも無料。IODATAさん、流石です。

LCAMView for Windows
https://www.iodata.jp/product/app/network/lcamview_for_win/index.htm

このソフトはIOPortalへログインするとGETできる。さっそくログイン。
https://ioportal.iodata.jp/

以前監視カメラ2台共に登録しておいたので、その画面からソフトウェアのダウンロードボタンがすぐに見つかった。
そこへ進むとLCAMView for Windowsしかないので、それをダウンロード。
インストールも簡単。

起動したら、監視カメラの登録。
画面右側にリモコンのような絵があるので、そこでまずは4分割画面をクリックして表示モード変更。
さらに、4つの画面それぞれの上で右クリック > カメラ設定、と進む。

すると、既にLAN内のTS-WLC2が2台検出されている。

この仕組みはイーサネットフレーム(L2)のブロードキャストで実現してるんだと思う。
カメラに設定されてるIPが不明な中で自動検出しようと思ったら、L2フレームを使うしかないので。
イーサネットフレームのデータ部にIODATA製品だけ反応する仕組みを埋め込めば、IODATA製品だけが応答を返す。
これってIODATAのNASを探す時に使ったMagicalFinderアプリも同じ仕組みと思う。

という訳で、自動検出されているカメラを選択すると、ユーザ名、パスワード以外は自動的に反映されるので、
あとはユーザ名、パスワードを入力して、OKボタン。
最後に、4分割画面の該当画面を右クリックして、接続を選択すると、画面が表示された。
簡単でいいね。

しかし、困った事が1つ。
リモコン絵の全画面表示にすると、決まったモニタに表示される。
マルチモニタのうち、指定したモニタに全画面表示したいのにやり方がわからん。


一応以下でできたが・・・
デスクトップ > ディスプレイ設定 > このアプリを全画面表示したいモニタをメインディスプレイに設定する。
これで全画面表示場所を変える事ができたが。
しかし、ALT + TABの表示場所とか、右下のオーディオとかネットワークとかのメニューが、
メインディスプレイにしか表示されないので作業場所のモニタからマウス位置が遠くなって困る。


もう1つの方法見つけた。こっちの方が我慢できる。
やり方は以下。
1.メインディスプレイはこれまで通り好きなモニタにしておく。
2.LCAMView for Windowsを全画面表示にすると、先に述べた通り、メインディスプレイに全画面表示される。
3.しかし、映像画面の右下方向に余白のようなものがはみ出てる。
  これはたぶん、うちのマルチモニタ環境が、メインの右にもう1枚のモニタを設定してるから見えたのかも。
4.そして、その余白部分をマウスでドラッグして移動させると、カメラ映像部分も一緒に動くので、それを希望のモニタ位置まで動かすだけ。

スマートではないが、とにかく希望のモニタ位置へ全画面表示(のようなもの)を移動できた。
ちょっと最初に手間はかかるが、おおむね希望の環境になった。
手間はかかったが、無料で監視カメラシステムのような画面を実現。悪くない。

[Windows]アプリ優先度設定

Veritakシミュレーションの速度を上げたい。

まずはタスクマネージャ起動してから。
Ctrl + Alt + Del > タスクマネージャ
 > 対象アプリ(TODO: <ファイルの説明>の中の、veritak2.exe(32bビット)が対象)で右クリック
 > 詳細の表示
 > veritak2.exeで右クリック
 > 優先度の設定

veritak2.exe(通常以上)、  VeritakWin.exe(通常以上)  : 150us、約23s
veritak2.exe(リアルタイム)、VeritakWin.exe(通常以上)  : 150us、約22s

ちょっと早くなった程度。
続いてVeritakWin.exeも優先度をリアルタイムにする。

veritak2.exe(リアルタイム)、VeritakWin.exe(リアルタイム): 150us、約22s

うーん、なんか誤差のレベル。

[PC]トラブルシューティング

EP805Aの写真だけ色がおかしくなる

一枚の絵で、文章や小さい画像は正常なのに、写真から切り取った画像だけ色がおかしくなる。
年賀状が作れない・・・
原因はノズルの詰まりでした。

プリンタ本体のセットアップメニューから、ノズルチェックをすると、各色のチェック画像が印刷されて出てくる。
その時、左から、
シアン、イエロー、ライトシアン、ブラック、マゼンタ、ライトマゼンタ
の順だが、一番左のシアンが全く印刷されてない。

ノズルクリーニングを一回やった後に、再度ノズルチェック印刷をすると、今度はシアンの場所が途切れ途切れで印刷された。
2回目のクリーニングをやったらほぼ正常にチェック印刷されたので、これで写真印刷も治った。

最初は、一枚の絵の中で、写真から切り取った画像だけ色が変だったので、原因が分からなかったが、
これって「シアンを使う画像だけ」おかしくなってた、という症状でした。

[veritak]トラブルシューティング

シミュレーションが1usから進まない
ログに以下が出てた。

Note : Cyclone IV E PLL self reset due to loss of lock
Time: 0.0 ns Instance: tb_ether_top.uut.ether1.pll_ddr.altpll_component.cycloneiii_pll.pll3
Note : Cyclone IV E PLL locked to incoming clock
Time: 90.0 ns Instance: tb_ether_top.uut.ether1.pll_ddr.altpll_component.cycloneiii_pll.pll3
Note : Cyclone IV E PLL was reset
Time: 990.0 ns Instance: tb_ether_top.uut.ether1.pll_ddr.altpll_component.cycloneiii_pll.pll3
Note : Cyclone IV E PLL self reset due to loss of lock
Time: 990.0 ns Instance: tb_ether_top.uut.ether1.pll_ddr.altpll_component.cycloneiii_pll.pll3

リセット期間を延ばしたらPLLからクロック出力出るようになったから、PLLリセット期間が短かったって事かな。



シミュレーションが0nsから進まない
ddr2c回路を追加するとこうなる。
試しにddr2c/phy_newをコメントアウトしたら0nsから進んだので、このモジュールが原因。
さらにddr2c/phy_new/outifをコメントアウトしたら0nsから進んだので、このモジュールが原因。
さらにddr2c/phy_new/outif/ALTPLL_ddr_readをコメントアウトしたら0nsから進んだので、このモジュールが原因。

NEEK用に使ってた回路を流用したので、おそらくALTPLL_ddr_readはCyclone III用のVerilogソースになっている事が問題みたい。
DE2-115用(Cyclone IV E)用に作ったPLLを使ったらシミュレーションは動いた。




コンパイルが途中で止まる(1)

誤: `ifdef `HOGE
正: `ifdef HOGE

こんな間違いすると、途中で止まったような終わり方する。


コンパイルが途中で止まる(2)

C:\・・・\fpga\common\rtl\ddr2c_intel\sdramc_define.v(425):: Warning: Re-defined macro TPAT_W
C:\・・・\fpga\common\rtl\ddr2c_intel\sdramc_define.v(426):: Warning: Re-defined macro TPAT_VAL
C:\・・・\fpga\lattice\rtl\system_conf.v(2):: Warning: Re-defined macro LATTICE_FAMILY
C:\・・・\fpga\lattice\rtl\system_conf.v(3):: Warning: Re-defined macro LATTICE_FAMILY_EC
C:\・・・\fpga\lattice\rtl\system_conf.v(4):: Warning: Re-defined macro LATTICE_DEVICE
C:\・・・\fpga\common\rtl\i2c_master_defines.v(56):: Warning: Re-defined macro I2C_CMD_NOP
C:\・・・\fpga\common\rtl\i2c_master_defines.v(57):: Warning: Re-defined macro I2C_CMD_START
C:\・・・\fpga\common\rtl\i2c_master_defines.v(58):: Warning: Re-defined macro I2C_CMD_STOP
C:\・・・\fpga\common\rtl\i2c_master_defines.v(59):: Warning: Re-defined macro I2C_CMD_WRITE
C:\・・・\fpga\common\rtl\i2c_master_defines.v(60):: Warning: Re-defined macro I2C_CMD_READ

ここで止まる。

原因は不明だが、解決方法として、テストベンチにも
`include "sdramc_define.v"
を宣言すると先に進んだ。
今後は各RTLに以下を記述しておくと宣言重複する事もなくなり良いと思う。

`ifndef SDRAM_DEFINE
`include "sdramc_define.v"
`endif


コンパイルが途中で止まる(3)

テストベンチでこんな書き方すると、途中でシミュレーションが止まる。

initial begin
rstn = 1'b0;
@(negedge clk) ;
@(negedge clk) ;
rstn = 1'b1;

while(1) begin
validi = 1'b1 ; > whileループの中に時間を進めるものがないのが原因!
end
end


原因はwhileの無限ループの中に時間を進める記述がないから。
なので、このwhileループの中で永遠に処理が行われてしまう。
例えば以下のように書けば@(negedge clk)が時間を進めてくれるから正常に動く。

initial begin
while(1) begin
validi = 1'b1 ;
@(negedge clk) ; > これで時間が進むようになった
end
end




シミュレーションが途中で止まる(300ns)

fpga\common\tb\tb_ddr2c_new.v(545)::Info: シミュレーション時間更新により一時停止しました。time=300,000ps ,インスタンス名:tb_ddr2c

これ原因分かってみれば単純なミスだった。

Veritak > シミュレーション > Run Length
ここで、300ns設定にして、Enableにチェックが入っていたため。
チェックを外せば、300nsで止まらず、シミュレーションが先に進んだ。




ファイル出力できない

こう書くとファイル出力がうまくいく。

integer W_OVEC1 ;
initial begin
W_OVEC1 = $fopen("tb_ddr2c.ppm");

$fdisplay(W_OVEC1, "P3" );
$fdisplay(W_OVEC1, "# Created by tb_ddr2c Simulation output file" );
$fdisplay(W_OVEC1, "640 700" );
$fdisplay(W_OVEC1, "255" );

while(1) begin
@(posedge uut.clk );
$fdisplay(W_OVEC1, "%d" , uut.r1_datho);
end

$fclose(W_OVEC1);
end


でも、if文の制御を追加すると、ファイルに何も出力されなくなる。原因なんだ?

integer W_OVEC1 ;
initial begin
W_OVEC1 = $fopen("tb_ddr2c.ppm");

$fdisplay(W_OVEC1, "P3" );
$fdisplay(W_OVEC1, "# Created by tb_ddr2c Simulation output file" );
$fdisplay(W_OVEC1, "640 700" );
$fdisplay(W_OVEC1, "255" );

while(1) begin
if (uut.r1_rei) begin
@(posedge uut.clk );
$fdisplay(W_OVEC1, "%d" , uut.r1_datho);
end
else begin
@(posedge uut.clk );
end
end

$fclose(W_OVEC1);
end



テストベンチコンパイルエラー
全角スペースが入っていたからだった。


[HDD]コマンド

SAS HDDのセクタサイズを変更する

まずは対象のHDD確認。
# smartctl -a /dev/sda | more
これでHDD型番が表示される。

# fdisk /dev/sda
Command (m for help): p
これでLogical SectorとPhysical Sectorが確認出来る。

次にセクタサイズ変更のためにsg_formatコマンドを使うため、sg3_utilsをインストールする。
apt-getではパッケージが見つからなかったので、以下から入手する。
https://packages.ubuntu.com/trusty/admin/sg3-utils

今回アーキテクチャはamd64。
sg3-utils_1.36-1ubuntu1_amd64.deb をダウンロードした。
これをインストールする。
この時、debファイルのあるフォルダへ移動して、以下のようにしてもエラーになってインストールできない。
# apt install sg3-utils_1.36-1ubuntu1_amd64.deb
正しくは以下のように./をつけるべきらしい。
# apt install ./sg3-utils_1.36-1ubuntu1_amd64.deb

これで各種コマンドが使えるようになった。
例えば以下でHDDリストを表示できる。
# sg_scan -i
/dev/sg0: scsi0 channel=0 id=0 lun=0
TOSHIBA MG03SCA100 0108 [rmb=0 cmdq=1 pqual=0 pdev=0x0]

さっきfdiskで確認したら現状512Bセクタになってるので、これを520Bに変更してみる。
# sg_format --format --size=520 /dev/sda

TOSHIBA MG03SCA100 0108 peripheral_type: disk [0x0]
Mode Sense (block descriptor) data, prior to changes:
Number of blocks=1953525168 [0x74706db0]
Block size=512 [0x200]

A FORMAT will commence in 10 seconds
ALL data on /dev/sda will be DESTROYED
Press control-C to abort
A FORMAT will commence in 5 seconds
ALL data on /dev/sda will be DESTROYED
Press control-C to abort

Format has started
Format in progress, 4.29% done
:


だいぶ長い。10hくらいかかりそう。待ち中。

[VMware]トラブルシューティング

VMware Toolが再インストールできない

ホスト: x1、Win 10
ゲスト: CentOS 7
VMwareバージョン: VMware Workstation 15 Player (15.0.1)

ゲストマシン起動時に、上のメニューバーの「Player」ボタンから
 > 管理 > VMware Toolsの再インストール
とやっても、

ゲストOSがCD-ROMドアをロックし、CD-ROMを使用している可能性があります。このためゲストはメディアの変更を認識できません。可能な場合は切断する前に、CD-ROMをゲスト内部から取り出してください。
このまま切断してロックを無視しますか。

となる。
これで「はい」を押して進んでも、成功した時のように、CDドライブフォルダが開いて、
VMwareTools-10.3.2-9925305.tar.gz
のようなファイルが見えない。
CDドライブはEmptyになってる。

これを解決するためには以下。

左上のPlayer(P) >  管理 > 仮想マシン設定 > CD/DVD(IDE)
 > デバイスのステータス
 > 「接続済み」、「起動時に接続」の両方からチェックを外す。

これで一度ゲストOSを停止してから再起動する。そして
左上の「Player」ボタン > 管理 > VMware Toolsの再インストール
とすると、今度はCDドライブのフォルダが自動的に開いた。
あとはいつも通り、
VMwareTools-10.3.2-9925305.tar.gz
をどこかにコピーして、展開して、中にあるplスクリプトを
./vmware-install.pl
と実行する。流れに任せて、基本はすべてEnterを押してるとインストールは完了する。
あとはゲストOSを再起動したら、/mnt/hgfs/の中に、共有フォルダが見えるようになってた。


ゲストWindows(Server Essential 2016)で共有フォルダ見えない

VMware > 対象のゲスト > 右クリック > 設定 > オプション > 共有フォルダ
 > Windowsゲストのネットワークドライブとしてマップする、にチェック。

こうすれば、ネットワークドライブとして見える、とあったがやはり見えない。

[PC]改行とTeraTerm

PCとFPGAのUART通信において、TeraTermから文字を入力して、FPGAへデータを送り、
そのデータをそのままエコーバックでPCへ返す、という処理。
TeraTermの初期設定では、ENTERを押しても、改行されずに、今いる行の最初に移動するだけ。
これをちゃんと改行するようにしたい。

TeraTerm > Setup > Terminal > New-lineの欄

初期設定
 Receive: CR ※ これだと改行されない。
 Transmit: CR


初期設定
 Receive: CR+LF ※ これでTeraTerm画面で改行されるようになった。
 Transmit: CR

[Cygwin]コマンド

wgetインストール
setup.exeからwgetで検索すれば見つかる。


apt-cygインストール
wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
chmod 755 apt-cyg
mv apt-cyg /usr/local/bin/


topインストール(apt-cyg)
apt-cyg install procps


[Program]HTTPクライアント

http://x68000.q-e-d.net/~68user/net/http-1.html
ここを参考に進める。

[PC]パーティション削除できない

http://www.dosv.jp/feature/1103/18.htm


全領域を1つのパーティションにしたいが、1度MBRでパーティショニングしてしまった場合、
インストール画面からは削除できなくなることがある。確かにあった。

そんな時は以下手順で削除可能。

OSインストールディスクから起動
 > 「今すぐインストール」まで進み、その左下の「コンピュータを修復する」へ
 > 以前に作成したシステムイメージを使用してコンピュータを復元、にチェックsいて次へ
 > 以降の問いでキャンセルを繰り返すと「回復ツールを選択してください」という画面が表示される。
 > 「コマンドプロンプト」へ
 > diskpart
 > list disk
 > select disk 0
 > clean
 > exit
 > これで削除完了

[PC]Stiringでコピペ

http://uchan.hateblo.jp/entry/2018/05/07/233338
これ試そうと思ったが、バイナリをStiringで入力するのは良いが、楽しようと上のページの内容をコピペしたいのにできない。
クリップボードにコピーした内容は、Stiringにペースト出来ないらしい。

キーボードシミュレータ
https://www.inasoft.org/icountt.html#autokeybn

ここから、インストール不要な
[INASOFTから]通常圧縮版(zip)のダウンロード
の方をダウンロード。
解凍して実行すると、.NET FRAMEWORK 2.0が必要と言われるので、案内に従い、
その画面から2.0をダウンロード出来る。
そのあと再度起動。

使い方は簡単。

4D5A90000300000004000000FFFF0000
B8000000000000004000000000000000

のような文字列を上の枠に入力。
入力モードは、キーボードシミュレートモードのまま。
これで下の入力開始ボタンを押すと、設定した数秒後に入力が始まるので、その前に、Stiringの画面をアクティブにして待つ。
数秒たつと、改行も含めて自動的に入力がされた。

クリップボードからのペースト対応してないアプリに使える。助かりました。感謝。

[PC]x1 carbonのSSD換装

結論

お忙しい方へ。
X1 carbonに、
WD WDS120G2G0B
入れたら動いたよ、というお話です。


内容


最近やたらPC操作が重い。UI関連が重いといらいら。まだ256GBに対して50GB以上は空いてるのに。
Windowsを再インストールすることにした。

USB接続DVDドライブからブートしてWindows 8.1Proをインストールしようとした。
既存のWindowsデータのパーティションをすべて削除して、空き領域に新規インストールしようとしたら、

このディスクにWindowsをインストールすることはできません。選択された
ディスクはGPTのパーティションの形式ではありません。

と出て先に進めない。

x1からSSDを取り出して、別PCでGPTパーティションに設定しようとしたが、M.2スロットが使えない状態。。
諦めて、別のM.2 SSDへ交換したが、プロトコル違いで動作せず、起動時に以下エラーが出る。

2103: Detection error on SSD0 (M.2)
Press Esc to continue.


原因は以下のプロトコル違い。
SAMSUNG MZHPV256HDGL-000L1 > AHCIタイプ(SATAって事?)。元々x1に入っていたもの。
CORSAIR CSSD-F240GBMP500 > PCIe NVMeタイプ。
旧x1だと、NVMe非対応だったから、NVMe SSDを入れても動作しないと・・・

最初は元々入ってたSAMSUNG SSDを買おうと思ったら、既に生産中止してるのか、Amazonでも7万円くらいの出品しかない。
さすがにこれは買えん。
M.2は各社NVMeに進んでるのに、M.2スロットでAHCIタイプって製品あるのか?と思いつつ、以下を発見。

WD WDS120G2G0B > SATA3.0タイプ。

M.2スロットでSATAタイプって初めて買う。早速注文して換装してインストールしたら成功。
って事は、このX1 carbonのスロットは以下仕様って事か。

フォームファクタ=M.2スロット & 電気的I/F=SATA3.0 & プロトコル=AHCI

[Windows]DOSブートUSB作成

FWを更新するために、DOSでブート可能なUSBを作る必要が出た。

DOS起動用のUSBメモリを作る(DOS-on-USB編)
http://www.atmarkit.co.jp/ait/articles/1206/15/news126.html

上のページを参考に作ってみる。

まずはUSBをDOSブート可能にするためのツールを入手。
http://www.jamesonline.ca/support/dos-on-usb-support
 > Downloadをクリック
 > Please visit the File Cabinet to download the latest copy、とあるので、Cabinetをクリック
 > DOS-on-USB_2.zip (v. 2、Jan 5, 2010, 11:46 AM)をダウンロード。
 > 保存したら、zip解凍
 > DOS-on-USB_2\DOS-on-USB\James' Format Tool.exe を管理者権限で実行
 > 以下に設定

     Device: USBメモリのドライブを指定 (今回はE:\)
     File System: FAT32
     Volume Label: 空白のまま
     Format Device: チェックなしのまま
     Create a DOS startup disk: チェック入れる
     Using DOS system files located at: C:\DOS-on-USB_2\DOS-on-USB\boot
      ※ DOS system fileへのパスは、解凍して現れたbootフォルダへのパスを書く。

 > StartでUSBメモリへ書き込み開始 (かなりゆっくり)

書き込みが終わったら、そのUSBからブートするために、BIOSでブート優先順位の最初をUSBメモリにする。
PC起動したら、無事USBメモリからブートし、DOSプロンプトが起動した。
後は、元々Cドライブに保存しておいたFWデータを指定して、FW更新コマンドを実行する。

[RaspberryPi][Ubuntu]コマンド2

PukiWikiサーバ構築

# cat /etc/os-release

NAME="Ubuntu"
VERSION="16.04.2 LTS (Xenial Xerus)"
:


# apt-get update
# apt-get -y install wget
# apt-get -y install unzip
# apt-get -y install vim
# apt-get -y install apache2
# apt-get install php
# vim /var/www/html/test.php

< ?php ※ 表示されなくなるので、<と?の間に空白入れてるが、実際は無し。
phpinfo();
?>


他PCでhttp://<ラズパイのIPアドレス>/test.php
へアクセスしてみる。
無事に
PHP Version 7.2.10-1+ubuntu16.04.1+deb.sury.org+1
というページが表示された。

# wget 'https://ja.osdn.net/frs/redir.php?m=iij&f=%2Fpukiwiki%2F64807%2Fpukiwiki-1.5.1_utf8.zip' -O pukiwiki.zip
# unzip pukiwiki.zip
# mv pukiwiki-1.5.1_utf8 pukiwiki

他PCで
http://<ラズパイのIPアドレス>/pukiwiki/index.php
へアクセスしてみると、Wikiの画面が表示された。

[Ubuntu]コマンド3

ファイルサーバ(samba)構築

# su
$ apt-get -y install samba
$ mkdir /home/share
$ chmod 777 /home
$ chmod 777 /home/share
$ vi /etc/samba/smb.conf

# 25行目:追記
unix charset = UTF-8
dos charset = CP932

# 30行目
workgroup = XXX

# 51行目: コメントを解除し、IP追記
interfaces = 127.0.0.0/8 192.168.xx.0/24 enp0sxxx
 ※ ここでI/F名を記載漏れてた事が原因で、sambaに接続できない事があった。

# 58行目:コメントを解除し、かつ追記
bind interfaces only = yes
map to guest = Bad User

# 最終行に追記
[share]
path = /home/share
writable = yes
guest ok = yes
guest only = yes
create mode = 0777
directory mode = 0777


$ pdbedit -a bob
new password:
retype new password:

$ vi /etc/hosts.allow
smbd : 192.168.10.
nmbd : 192.168.10.

$ systemctl restart smbd
$ systemctl restart nmbd

$ systemctl enable smbd
$ systemctl enable nmbd

$ ufw allow samba
$ ufw allow app list



DLNAサーバ(minidlna)構築

# apt-get install minidlna
# vi /etc/minidlna.conf

#変更箇所
media_dir=V,/home/share
inotify=yes
notify_interval=895


# systemctl restart minidlna

これでOculus Go > ギャラリー > host名:dlna、で自動的に接続されて表示された。



フォワードプロキシサーバ構築

# apt-get update
# apt-get upgrade -y
# apt-get install squid -y

# vi /etc/squid/squid.conf

acl localnet src 192.168.0.0/16
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link local machines

acl SSL_ports port 443
acl CONNECT method CONNECT
http_access deny CONNECT !SSL_ports

acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
http_access deny !Safe_ports


http_access allow localhost manager
http_access deny manager

http_access allow localnet
http_access allow localhost
http_access deny all

http_port 3128

coredump_dir /var/spool/squid

refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320

strip_query_terms off
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh
access_log /var/log/squid/access.log combined


# systemctl restart squid
# systemctl enable squid

ここまできたら、クライアントPCのブラウザ設定でプロキシサーバを指定する。
Firefox > オプション > 一番下のネットワークプロキシ欄へ
 > 接続設定
 > 手動でプロキシを設定する
 > プロキシサーバのIPと、squid.confで設定したポート番号を指定

これでプロキシサーバ経由でインターネットへアクセス出来るようになった。




syslogサーバ構築

Ubuntuには最初からrsyslogがインストールされてる。
なのでconfigの設定変更から。
# vi /etc/rsyslog.conf

以下2行をコメントアウトして、syslog(UDP)を受け付けるようにする。
module(load="imudp")
input(type="imudp" port="514")


# vi /etc/rsyslog.d/70-hoge.conf
local0.*  -/var/log/hoge.log


# systemctl start rsyslog
# systemctl enable rsyslog

# vi /etc/logrotate.d/rsyslog


/var/log/debug
/var/log/messages
/var/log/hoge.log > ここに追加
{
rotate 4





リバースプロキシサーバ構築


muninインストール

# apt-get install munin munin-node
# vi /etc/munin/munin.conf

[localhost.localdomain]
 ↓
[h67.hoge.com]


# vi /etc/apache2/conf-available/munin.conf

Alias /munin /var/cache/munin/www
<Directory /var/cache/munin/www>
Require local
Options None
AuthType Basic
AuthName "Munin"
AuthUserFile /etc/munin/munin-htpasswd
Require valid-user
</Directory>

ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
<Location /munin-cgi/munin-cgi-graph>
Require local
Require all granted
<IfModule mod_fcgid.c>
SetHandler fcgid-script
</IfModule>
<IfModule !mod_fcgid.c>
SetHandler cgi-script
</IfModule>
</Location>


BASIC認証のパスワードファイルとして以下を指定。新規に作成される。
# htpasswd -c /etc/munin/munin-htpasswd [USERNAME]

# vi /etc/munin/munin-node.conf
最終行に以下追加。

h67 [FQDN]


munin-nodeは既にActiveになっている。
# systemctl status munin-node
muninは起動しておらず、maskedになってる。
# systemctl status munin

# systemctl restart apache2

他のPCから、アクセスするとmuninのページが開いた。



ソフトウェアRAID(Ubuntu 16.04.06 LTS)
 ※ 一度失敗した状態から再度作成。

# mdadm --misc --stop /dev/md0
# mdadm --misc --remove /dev/md0
# mdadm --misc --zero-superblock /dev/sdb1 /dev/sdc1

# fdisk /dev/sdb
パーティションを全部削除し、1つだけ新規パーティションを作成。
t > パーティションタイプ変更 > 28(Linux RAID) > w

# mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1
# cat /etc/mdstat
# mdadm --detail --scan >> /etc/mdadm/mdadm.conf
# mkfs -t ext4 /dev/md0

# mount /dev/md0 /home/samba

mount: /dev/md0: more filesystems detected. This should not happen,
use -t to explicitly specify the filesystem type or
use wipefs(8) to clean up the device.


# mount -t ext4 /dev/md0 /home/samba
これで無事マウントできた。

あとはfstabへ登録して、自動マウントするようにする。
これで/dev/md0のUUIDを調べる。
# mdadm --detail --scan >> /etc/fstab
# vi /etc/fstab

UUID=xxxx-xxxx-xxxx /home/samba defaults 0 2 > しかし、これでは起動せず。
 ※ UUIDは元々:だったが、他に合わせて-区切りにした。

/dev/md127 /home/samba defaults 0 0 > これで自動マウント成功して起動した。
 ※ 元々/dev/md0を作ったが、上の失敗の後起動したら、md127になってた。

[PC]Oculus GoのMAC調べ

Oculus Goを買ったが無線LAN管理上、MACが知りたい。

https://dashboard.oculus.com/

ここへいき、Oculusアカウントでログイン
 > 同意して進む
 > 新しい団体を作るために名前を登録
これで、後で行うOculusスマホアプリの開発者モードの設定をONにできるらしい。

Oculus Goを電源入れた状態へ。

Oculusスマホアプリを入れたスマホで、アプリ起動
 > 「設定」へ
 > Oculusとペアリングする。
 > Bluetoothと位置情報をONにする必要あり。
 > 近くのOculusとして表示されるから、クリックしてペアリング
 > 完了したら、ペアリングしたやつをクリック
 > 下に「その他の設定」へ
 > 「開発者モード」へ
 > ここでチェックをONにする。
確かに、事前にOculus Webサイトで団体名登録しておいたので、ONに出来た。


次にOculus GoをPCとUSBケーブルで接続する。
しかし、何も起きない。認識されない。
開発者モードONになってると認識出来ない??というブログを見たので、OFFにしてみたが変わらず。
WindowsだけはなぜかADBドライバのインストールが必要だ、という事なので、以下からダウンロード。

Oculus Go ADB Driver
https://developer.oculus.com/downloads/package/oculus-go-adb-drivers/

oculus-go-adb-driver-2.0.zip
ダウンロードしたzipを解凍し、
oculus-go-adb-driver-2.0\usb_driver\android_winusb.inf
を右クリック > インストール > Oculusを信頼 > 正常にインストール完了しました。

これでUSBケーブルを抜き差ししても認識されない。。。。なぜだ?
もしかして、と思って違うUSBケーブルに変えてみたら、デバイスマネージャにようやく表示された。
つまり、通信出来ないUSBケーブルだったから失敗してたのか。

デバイスマネージャ > ポータブルデバイス > VR-Headset

まとめると、成功した組合せは以下。
1.Oculus Go ADB Driverをインストールする。
2.スマホのOculusアプリで開発者モードはOFFにしておく
3.通信可能なUSBケーブルを使う。
4.PCはWindows 10

PCでOculus Goが認識されたのだが、しかし、このままではadbコマンドは使えない。
開発者モードOFFのままだから。
そこで、この状態からスマホで開発者モードONにしてみたら・・・

デバイスマネージャ > ポータブルデバイス > VR-Headset
が消えて
デバイスマネージャ > Oculus Device > Oculus ADB Interface
となった。

この状態でDOSプロンプトからadbコマンドが効くとか書いてあるのを見たが、実行出来ず。

https://developer.android.com/studio/releases/platform-tools
のページから
SDK Platform-Tools for Windows
をクリックしてダウンロード。
具体的には以下がダウンロードされた。
platform-tools_r28.0.1-windows.zip

これを解凍して、Cygwinからadb.exeを実行してみる。

# cd /cygdrive/c/platform-tools_r28.0.1-windows/platform-tools
# ./adb.exe devices
List of devices attached
1Kxxxxxxxxxxx unauthorized

* daemon not running; starting now at tcp:5037
* daemon started successfully

なんか表示された。
でもunauthorizedになってる。

もしやと思いOculus Goをかぶってみると、質問が2個されるので、YESと答える。
USBデバッグを許可するか? > YES
ファイルアクセスを許可するか? > YES

これで再度実行してみる。
# ./adb.exe devices
List of devices attached
1Kxxxxxxxxxxx device

これでOculus Goへアクセス出来るようになったようだ。

# ./adb.exe shell ip addr show wlan0

7: wlan0: mtu 1500 qdisc mq state UP group default qlen 3000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.xx.xx/24 brd 192.168.xx.255 scope global wlan0
valid_lft forever preferred_lft forever
inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link
valid_lft forever preferred_lft forever


これでようやくMACアドレスが確認出来た。

[LM32](4).mem生成(Micosystem Builder)

久しぶりにやったら.elfから.hexが作れない。

host: x1 carbon
OS: Windows 10 Pro
Cygwin: 64bit

objcopy.exe -S -O $swname/Debug/$swname.elf $swname.srec

以前はこれをCygwinで実行すると.srecが生成出来たのに。効かない。
.srecが生成されたら、後はDesign Wave Magazine付属のプログラムで.mifと.hexへ変換していた。
以下どちらのobjcopyでも何も生成されず、エラーも出ず。

c/lscc/diamond/3.10_x64/micosystem/gtools/lm32/bin/lm32-elf-objcopy.exe
c/lscc/diamond/3.10_x64/micosystem/gtools/lm32/lm32-elf/bin/objcopy


Micosystem BuilderのSoftware Deploymentを使う
流れとしては、launchmicosystem.exeでEclipseのLattice Mico System(LMS) Builderを起動して、
メニューバー下の、LMS 1.0 D3.10画面で、HWプラットフォーム(ether.msb)を作り、
その隣の、C/C++画面で、ソフトウェアをビルドし.elfを作り、
その次に、SoftwareのDeploymentへ進む。

具体的には、
LMSメニュー > Tools > Software Deployment
 > 左のメニューから「Mico32 Multi On Chip Memory Deployment」をダブルクリック
 > 新規の設定画面に対して以下を入力してから、Startで.memが生成された。

Name : ether_soft
Project: Browseで開くと、C/C++画面で作ってビルドしたプロジェクト名を選択
C/C++ Application: Debug/ether_soft.elf を選択
Save Memory Initialization Files to directory: 保存先DIRを指定
Memory Initialization Files Prefix: これを何か入力しないとエラーが出た。


尚、「Mico32 On Chip Memory Deployment」の方も試してみたが、Startボタンが押せなかった。
おそらく今回の回路では、Inst RAMとData RAMが別々になっているので、Multiの方を使うべきのようだ。

ここまでで.memが出来たが、このままではINTEL FPGAのMemoryで初期値として渡せない。

0000407c
0000407c
0000407c
 :

なので、対応するINTEL HEX形式へ変換する。

過去に作ったRobyプログラムで変換できる。記事の最後の方のソースを使う。

[LM32].mem to Intel-Hex変換Ruby
http://bobgosso.blog13.fc2.com/blog-entry-338.html

あとはCygwinから以下を実行して、.hexへ変換し、さらにそれをシミュレーション場所へコピーして読み込めるようにする。

ruby ../../../../common/ruby/mem2intel_hex_v01.rb ether_soft_Data_IM.mem ether_soft_Data_IM.hex
ruby ../../../../common/ruby/mem2intel_hex_v01.rb ether_soft_Instruction_IM.mem ether_soft_Instruction_IM.hex

\cp ether_soft_Data_IM.hex ../../../../board/de2-115/
\cp ether_soft_Instruction_IM.hex ../../../../board/de2-115/



デバッグ用にobjdumpも作っておく


以下で生成可能。しかし、Cygwin64bitでは動作せず。32bitで実行したら成功した。

lm32-elf-objdump.exe -D ether_soft.elf > ether_soft.elf.objdump

[ネスペ]まとめ

ARP、Gratuitous ARP

ノードA(MAC=A、IP=①) <-------> ノードB(MAC=B、IP=②)









         動作コード 送信元MAC 送信元IP 宛先MAC 宛先IP コメント
通常MAC問合せ                           
ARP Request 1 A 000000000000 通常のARPは宛先MAC=0で問合せ
ARP Reply   2 B A
IPアドレス競合検知                           
ARP Request 1 A 0.0.0.0 000000000000 OSはIP更新の際、「IPを①に設定したよー」と周囲に問合せる
Gratuitous ARP 2 B B 「既にIP①は設定してるよー」と答える
周辺機器のテーブル更新                           
Gratuitous ARP 2 X FFFFFFFFFFFF ノードB機器を交換した時、「私MAC=Xに変わったよー」と通知する




ルーティングプロトコル






分類 プロトコル ルーティングアルゴリズム メトリック 更新間隔 更新に使用するマルチキャストアドレス
EGP(Exterior Gateway Protocol) BGP(Border Gateway Protocol) パスベクタ型 パス(経路)+方向(ベクタ)
IGP(Interiror Gateway ProtocolRIPv2 ディスタンスベクタ型 ホップ数 定期的 224.0.0.9
OSPF リンクステート型 コスト 変更があった時 224.0.0.5(All OSPFルータ)、224.0.0.6(All DRルータ)
EIGRP ディスタンスベクタ(ハイブリッド)型 帯域幅+遅延 変更があった時 224.0.0.10




OSPF

Helloパケット交換(マルチキャスト(224.0.0.5)で送信)
 > 隣接ルータとネイバー関係確立
 > ネイバーを認識するとネイバーテーブルに格納
 > ネイバー存在を確認するために定期的にHelloパケットを送信
 > 自身のLSA(Link State Advertisement、リンク情報)をネイバールータに送信
 > 受信したLSAはトポロジテーブル(LSDB = Link State Database )に格納
 > 同じエリア内の全てのルータで同じLSDBを保持
 > LSDBに格納されたLSAを組み合わせてネットワーク全体の地図(トポロジマップ)を作成
 > SPFアルゴリズム(ダイクストラ)を実行し階層ツリーのSPFツリーを作成


内部ルータ: 全I/Fが同エリアに接続されてるルータ。
バックボーンルータ: 1つ以上のI/Fがバックボーンエリアに接続しているルータ。
エリア境界ルータ(ABR = Area Border Router): 異なるエリアを接続しているルータ。
AS境界ルータ(ASBR = AS Boundary Router ) : 1つ以上のI/Fが外部ASのルータと接続しているルータ。


代表ルータ(DR =Designated Router): DRとBDRの間だけでLSAを交換する。
バックアップ代表ルータ(BDR =Backup DR): 
DROTHER : DR、BDRに選出されなかったOSPFルータ。

Helloパケット交換
 > 2Way Stateになった
 > 中に含まれるOSPFプライオリティ値を見る
 > 一番大きい値 = DRになる
 > 二番目に大きい値 = BDRになる
 > もしプライオリティ値が同じ場合は、ルータIDの大きい方からDR、BDRになる。

 ※ DRとBDRはセグメントごとに選出。OSPFプライオリティ値はI/F毎に設定。
   例えば、あるOSPFルータがセグメント1ではDR、セグメント2ではDROTHER、という場合もある。

LSAを交換するネイバー: ルータ間の関係 = Adjacency(アジャセンシ―) > ステータス=Full
ただのネイバー: ルータ間の関係 = Neighbor(ネイバー) > ステータス=2Way



STP

データリンク層(L2)の冗長化技術

STP有効のスイッチを接続
 > BPDUを交換して、ブリッジIDを比較

  <STPで使用されるBPDUバージョン0のフォーマット>
  プロトコル    2Byte : 0=STPを示す
  バージョン    1Byte : BPDUでは0
  タイプ      1Byte : 
  フラグ      1Byte : 
  ルートブリッジID 8Byte : 一番小さいIDがルートブリッジになる
  ルートパスコスト 4Byte : ルートブリッジからのパスコスト合計
  ブリッジID    8Byte : 自身のブリッジID (= ブリッジプライオリティ 2Byte + MAC 6Byte

 > 一番小さいブリッジプライオリティを持つスイッチがルートブリッジ、2番目はセカンダリルートブリッジ、になる。
 > もしブリッジプライオリティが同じ場合は、次にMACアドレスを比較して、一番小さいMACがルートブリッジへ。
    (注)実際には、ルートにさせるスイッチに、一番小さいブリッジIDを付けておく。

 > ルートブリッジからのパスコストが最も大きいポートが、ブロッキングポートになる。
   (言い換えると、指定ポート(セグメントで一番RBに近いポート)でも、ルートポート(ブリッジで一番RBに近いポート)でもないポートがブロッキングポートになる)

  <帯域幅によりパスコストが決まる>
  10Mbps  : 100
  100Mbps  :  19
  1000Mbps :  4
  10Gbps  :  2



具体的な流れ
 1.STP対応ブリッジがループを検出した。
 2.ブロッキング(フレームの転送停止)して、ループを抑える。
 3.リスニング(BPDU受信によるトポロジ把握)
 4.ラーニング(MACアドレスを学習)
 5.フォワーディング(指定ポートとルートポートの転送開始) ※ ブロッキングポートは転送停止。




VPN















方式変更点タイププロトコルコストセキュリティ 速度 可用性 利用ネットワーク暗号化トレンド
専用線専用回線ギャランティ型?なし?××(専用線) ◎◎ × 専用線(閉域網)を占有非常に高額で課題あり、VPN技術へ
IP-VPNギャランティ型MPLS×(L3ルータ) 専用線(閉域網)を複数企業で共有無し(MPLSでユーザ毎に分離)専用線に比べ、距離に依存しない料金体系が画期的。しかしIP通信のみ。L3 VPN。
広域イーサネットギャランティ型〇(L2SW) 専用線(閉域網)を複数企業で共有 IP-VPNの弱点「IP通信のみ」、を解決。L2でVPN構成し、マルチプロトコル実現。しかしIP通信のみでも問題なくなってきてる。
インターネットVPN◎◎ × ×(帯域保証なし) ×(専用線系に比べ可用性低い) インターネット網IP-SEC/SSLBB回線の改善により帯域・信頼性向上し、企業でも利用されるように。
LAN間接続VPN(インターネットVPN)
リモートアクセスVPN(インターネットVPN)
IPSec-VPN(インターネットVPN)全クライアントに専用ソフト/L2TP + IPSec 課題:全クライアントに専用ソフト、クライアントにセキュリティチェック機能無し、ユーザに応じたアクセス制御が困難。 SSL-VPNへ。
SSL-VPN(インターネットVPN)サーバ機器の対応/クライアントアプリのSSL対応
エントリーVPN ベストエフォート型 〇(BB回線利用しながら、インターネットに接続せず閉域網を構成) 閉域網(インターネット接続無し)インターネットVPNの不安の種「インターネット接続」を出来なくしたもの。



SSL-VPN
  1.リバースプロキシ方式
    動作フロー
      1.クライアント: https://www.hoge.com/aaaへアクセス
      2.SSLサーバ: アクセスしてきたクライアントの認証
      3.SSLサーバ: URL変換 > http://aaa.hoge.com
      4.クライアント: aaaサーバと通信可能になる
    課題
      ・Webブラウザで動作しないアプリは使用できない。

  2.ポートフォワーディング方式
    概要
      ・クライアントにJavaやActiveXモジュールを追加させてSSL-VPN通信する事でWebブラウザで動作しないアプリも使えるようにした。
    動作フロー
      1.クライアント: https://www.hoge.com/aaaへアクセス
      2.クライアント: Javaアプレットなどのモジュールを自動的にダウンロードして、PC上で動作させる。
      3.クライアント: JavaアプレットがSSL-VPN GWとSSLトンネルを確立
      4.クライアント: 起動したアプリが、PC上のSSL-VPNエージェント(Javaアプレット)と通信する。
                 VPN先とアクセスする場合は、Javaアプレットにデータが渡される。
      5.クライアント: Javaアプレットは、アプリに対応したTCP/UDPポート番号に対応したSSLコネクション確立。
      6.SSLサーバ: 事前に定義したイントラネット内のサーバ情報(IP/ポート)に基づき、該当サーバへデータを転送。
    課題
      ・

  3.L2フォワーディング方式
    動作フロー
      1.クライアント: https://www.hoge.com/aaaへアクセス
      2.クライアント: SSL-VPNクライアントソフトをダウンロードする。
      3.クライアント: SSL-VPNクライアントソフトがSSL-VPNゲートウェイとSSL通信を確立。
      4.クライアント: SSL-VPNクライアントソフトが、PC上に仮想NICを構築。その仮想NICにはSSL-VPN GWで事前に定義されたIPが割り当てられる。
      5.クライアント: VPN先のサーバが宛先の通信の場合、仮想NIC経由でSSL通信し、SSL-VPN GWに送信される。
      6.VPNサーバ: SSL-VPN GWは、そのデータをイントラネット内の該当サーバに転送。






デジタル署名
  データを送信した人が、間違いなく本人のものであるか証明するための技術。データの送信者を証明できる。

 <AからBへデータを送るケース>
  1.A: 公開鍵秘密鍵を生成。
  2.A: 「公開鍵」を受信者へ送付。 > ★この公開鍵は本物? > 後述の「デジタル証明書」で対策
  3.A: 送りたいデータを作成
  4.A: そのデータのハッシュ値を算出。(MD5/SHA-1)
  5.A: ハッシュ値を秘密鍵で暗号化する。
  6.A: (元のデータ + 暗号化ハッシュ値)を送る。暗号化ハッシュ値は署名の意味。
  7.B: 署名(暗号化ハッシュ値)を、Aの公開鍵で複合化し、ハッシュ値を得る。
  8.B: さらに、元のデータから、ハッシュ値を算出
  9.B: 7と8のハッシュ値が一致したら、Aが送ったデータが「改ざんされてない」事が証明される。



認証局 (Certification Authority)
   デジタル証明書の発行機関。

   「ルート認証局」 = 最上位の認証局。 最上位なので、他の承認を受ける事なく、正当性を証明してる。
   「中間認証局」  = ルート認証局以外。上位からデジタル証明書を発行してもらう事で、正当性を証明してる。



デジタル証明書
   デジタル署名の公開鍵が正しい事を証明するために使う。デジタル署名にデジタル証明書を付属させる。
   ITU-T勧告のX.509で標準仕様として規定。

  1.デジタル署名で「改ざんは防止可能」。 しかし、使った「公開鍵」は本物?
  2.「デジタル証明書」を、デジタル署名に付属させる。 > 公開鍵が本物である証明
    具体的には以下。

    2-1.Webサーバ: 秘密鍵と公開鍵を作る。
    2-2.Webサーバ: Webサーバ公開鍵と各種証明書を、CSR(証明書署名要求)として、認証局(CA)へ送る。
    2-3.CA     : 審査の結果OKなら、そのWebサーバ向けにデジタル証明書を発行。
                  CA秘密鍵で暗号化されたデジタル証明書。これがSSLサーバ証明書となる。
    2-4.クライアント: WebサーバへHTTPSアクセス。
    2-5.Webサーバ: 自身のデジタル証明書を送る。これが提示。
    2-6.クライアント: Webサーバのデジタル証明書を、ブラウザにインストールされている「ルート証明書」の中の公開鍵で複合化。
                  複合化して取り出した「Webサーバ公開鍵」と、同梱された公開鍵が一致すれば、
                  この「Webサーバ公開鍵」はCAが認証したものと証明される。



SSL (Secure Sockets Layer)
    改ざんや、なりすましを防げる暗号化通信技術。
    TLS1.0はSSL3.0を元にしてるが、互換性が無い。
    Google研究者が、2014年10月、SSL3.0の深刻な脆弱性を発見した。この欠点をつく攻撃手法は「POODLE」と名付けられた。

   1.クライアント: WebサーバへHTTPSアクセス。
   2.Webサーバ: サーバの文字色デジタル証明書を提示。
   3.クライアント: そのWebサーバデジタル証明書に署名したCAのルート証明書を検索
               Webブラウザにインストールされている「信頼できるルート証明書」から検索
   4.クライアント: ルート証明書の中の公開鍵で、Webサーバのデジタル証明書を復号して、Webサーバの公開鍵を取り出す。
               複合したデジタル証明書の中の公開鍵(Webサーバ)と、平文で送られた公開鍵を比較。
               一致したら、そのWebサーバの公開鍵は正当なものと証明される。
   5.クライアント: 共通鍵を生成。 (正確には、共通鍵の基になる、プリマスターシークレット情報、だそうだ)
   6.クライアント: 共通鍵を、Webサーバ公開鍵で暗号化して、Webサーバへ送る。
   7.Webサーバ: 送られてきた暗号化共通鍵を、自身の秘密鍵で復号して取り出す。
   8.両方    : この共通鍵でデータを暗号化して、SSL通信を行う。



DNSSEC
    DNS応答の送り元と完全性を検証できる。

   1.ゾーン管理者     : 秘密鍵と公開鍵を作成。
   2.ゾーン管理者     : ゾーン内のリソースレコードを、秘密鍵で暗号化し、電子署名を作成。また、公開鍵を公開。
   3.DNSキャッシュサーバ: 権威ネームサーバへ問合せ。
   4.ゾーン管理者     : 電子署名付きの応答を返す。
   5.DNSキャッシュサーバ: 電子署名を、ゾーン管理者の公開鍵で復号し、平文のDNS応答と比較。
                     一致すれば、正当なゾーン管理者が作成したもので、かつ改ざんも無い事が証明される。



SAML (Security Assertion Markup Language)
    SSO(シングルサインオン)を実現するために必要な、異なるドメイン間でユーザ認証を行うための認証情報の規格。

    IdP (Identity Provider) = 認証情報を提供する側
    SP (Service Provider) = 認証情報を利用する側

   1.ユーザ: クラウドサービスにアクセス
   2.SP  : クラウドサービス(SP)は、ユーザを確認し、SAML認証要求を生成。IdPへリダイレクト。
   3.IdP  : SAML認証を解析し、認証
   4.ユーザ: ユーザ認証
   5.IdP  : SAML認証応答を作成
   6.ユーザ: SAML認証応答と共に、クラウドサービスへリダイレクト
   7.SP  : SAML応答を検証し、ユーザログインを許可
   8.ユーザ: クラウドサービスへログイン



IP-VPN

<説明1>
   IPSecは、暗号化通信を実現する複数プロトコルの集合体。主要なプロトコルは以下3つ。

    1.鍵交換   : IKE (Internet Key Exchange) ・・・ IPSec通信前なので、IKE自身で暗号化通信をサポート。

    2.データ転送: ESP (Encapsulating Security Payload) ・・・ IPヘッダ+ESP、で通信。
       (1)トランスポートモード: IPヘッダ + <データ>(暗号化対象)
       (2)トンネルモード   : 新IPヘッダ + <元IPヘッダ + データ>(暗号化対象) ・・・ 真の受信先の隠蔽可能

    3.完全性と認証: AH (Authentication Header) ・・・ IPヘッダの直後に、「SPI」「シーケンス番号」「認証データ」を挿入。

<説明2>
   フェーズ1: 認証 + フェーズ2の暗号鍵生成
            ◆実行モード
              1.メインモード    : 認証に対向拠点のIPを使用する  > 対向拠点は固定IPにする。
              2.アグレッシブモード:     同上       使用しない > 対抗拠点のIPが変わってもOK。
            ◆暗号化アルゴリズム (フェーズ2で使用する暗号鍵を交換する際に使用)
              DES < 3DES < AES(より安全)

   フェーズ2: データ通信用トンネルの暗号鍵生成 + 制御用IKEトンネル生成
            ◆セキュリティプロトコル (IPsecトンネルで使用)
              1.AH : ○ 認証機能、 × 暗号化
              2.ESP: ○ 認証機能、 ○ 暗号化 > 暗号化も出来るESPが主流。

            ◆暗号化アルゴリズム (IPsecで使用)
              DES < 3DES < AES(より安全)

            ◆動作モード
              1.トンネルモード     : 新しいIPヘッダでパケットをカプセル化。
                新IPヘッダ + ESPヘッダ + <IPヘッダ + TCP/UDPヘッダ + Data + ESPトレーラ> + ESP認証データ
              2.トランスポートモード : 新しいIPヘッダでカプセル化。
                IPヘッダ + ESPヘッダ + <TCP/UDPヘッダ + Data + ESPトレーラ> + ESP認証データ

   その後  : データ通信用IPsecトンネル生成(上り、下り、の2つ)

[FreeBSD]コマンド2

HDD故障した時の交換方法(zpool replace失敗)

以下で状態確認したらDEGRADされてる。
# zpool status

pool: rz2pool
state: DEGRADED
status: ...
action: ... or replace the device with 'zpool replace'.
scan: ...
config:

NAME STATE READ WRITE CKSUM
rz2pool DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
ada1 ONLINE 0 0 0
ada2 ONLINE 0 0 0
2685.. REMOVED 0 0 0 was /dev/ada3
ada4 ONLINE 0 0 0
errors: No known data errors


オープンなPCケースなので、HDDのアクセスランプなんて無いし、どれが故障したHDDだか分からない。
そのため、以下コマンドで認識可能なHDDのシリアル番号を全て調べてリスト化しておく。

# camcontrol identify ada0

pass0: ATA8-ACS SATA 3.x device
pass0: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 8192bytes)

protocol ATA/ATAPI-8 SATA 3.x
device model TOSHIBA DT01ACA300
firmware revision MX6OABB0
serial number xxxxxxxxxx --> これがシリアル番号
 :


尚、zpool statusでDEGRADEの原因となりREMOVEされたHDDはada3だったが、それも見てみるとOSで外された?せいか、
以下のように見つからない。

# camcontrol identify ada3

camcontrol: cam_lookup_pass: CAMGETPASSTHRU ioctl failed
cam_lookup_pass: No such file or directory
cam_lookup_pass: either the pass driver isn't in your kernel
cam_lookup_pass: or ada3 doesn't exist


また、全てのHDDリスト見るには以下。
# camcontrol devlist
 ※ 表示されなくなるので左端の<は削除してる。

TOSHIBA DT01ACA300 MX6OABB0> at scbus0 target 0 lun 0 (ada0,pass0)
Optiarc DVD RW AD-7200S 1.06> at scbus1 target 0 lun 0 (cd0,pass1)
TOSHIBA DT01ACA300 MX6OABB0> at scbus2 target 0 lun 0 (ada1,pass2)
TOSHIBA DT01ACA300 MX6OABB0> at scbus3 target 0 lun 0 (ada2,pass3)
TOSHIBA DT01ACA300 MX6OABB0> at scbus5 target 0 lun 0 (ada4,pass5)
AHCI SGPIO Enclosure 1.00 0001> at scbus6 target 0 lun 0 (ses0,pass6)


次にシャットダウンして問題のHDDをPCから外す。
# shutdown -p now

接続されている全HDD 5台を確認すると、確かにada3のHDDだけ、メモしたシリアル番号リストになかった。
つまり、シリアル番号がリストにないHDDが問題が発生したHDDなので、それをPCから外す。

外して新しい同等品に交換したら、再度PCを起動。無事起動した。
今度は以下で表示されているので、無事交換したHDDも認識されている。
# camcontrol identify ada3

正常動作してるHDD見ると、パーティションタイプはGPTになってる。
MBRじゃ2TB以上のパーティション扱えないから、3TB HDDを扱うために過去の自分がGPTにしたんだろう。記憶無し。
# gpart show ada0

=> 34 5860533101 ada0 GPT (2.7T)
34 6 - free - (3.0K)
40 1024 1 freebsd-boot (512K)
1064 5853150200 2 freebsd-ufs (2.7T)
5853151264 7381870 3 freebsd-swap (3.5G)
5860533134 1 - free - (512B)


交換したばかりのada3は確認してもパーティションタイプが設定してない?から、No such geomと言われるみたい。
# gpart show ada3
gpart: No such geom: ada0.

GPTパーティションタイプにする。
# gpart create -s gpt ada3


ところで、今やってるように、故障したHDDが認識されていたada3へ、新HDDを交換してada3で認識されている状態において、
どうやってzpool replaceを実行するのか?
調べたら以下にぴったりの回答があった。
https://docs.oracle.com/cd/E19253-01/819-6260/gazgd/index.html

この情報によると、状況によってコマンドが変わるとの事。

①新旧HDDを交換してしまい、新HDDが旧HDDと同じ場所(ada3)になっている場合
 → zpool replace rz2pool ada3
②PCに旧HDD(ada3)、新HDD(ada5)の両方が接続されている場合
 → zpool replace rz2pool ada3 ada5

今回は①のケースなので、以下実行してみる。
# zpool replace rz2pool ada3

すぐに実行完了した。状態を見てみると・・・
# zpool status rz2pool

pool: rz2pool
state: DEGRADED
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Sat Aug 25 09:29:38 2018
2.39G scanned out of 5.36T at 122M/s, 12h44m to go
590M resilvered, 0.04% done
config:

NAME STATE READ WRITE CKSUM
rz2pool DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
ada1 ONLINE 0 0 0
ada2 ONLINE 0 0 0
replacing-2 REMOVED 0 0 0
2685441344063119102 REMOVED 0 0 0 was /dev/ada3/old
ada3 ONLINE 0 0 0 (resilvering)
ada4 ONLINE 0 0 0

errors: No known data errors


旧HDD(2685441344063119102)に対して、新HDD(ada3)がresilveringという状態になってる。
10分くらい経っても161G resilvered, 12.14% doneくらいで、3TBのresilverには時間かかるね。

他のブログを見ると、新HDDをGPTに設定した後、元の正常HDDのパーティション構成に真似て、
1つ1つパーティションを設定しているのを見たが、あれはスキップしても良いのかな?
今回はGPT設定だけやって、あとはzpool replaceでうまくいってるみたいだし。

っと思ったら、resilverが終わったら、なぜかこんな感じに新旧HDD両方共にREMOVEDになってる。
# zpool status

pool: rz2pool
state: DEGRADED
 :
config:

NAME STATE READ WRITE CKSUM
rz2pool DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
ada1 ONLINE 0 0 0
ada2 ONLINE 0 0 0
replacing-2 DEGRADED 0 0 1
2685441344063119102 REMOVED 0 0 0 was /dev/ada3/old
xxxxxxxxxxxxxxxxxxx REMOVED 0 0 0 was /dev/ada3
ada4 ONLINE 0 0 0

errors: No known data errors


PCの同じスロットで新旧HDDを交換した場合は、replaceコマンドだけで置き換え完了するって書いてあるけど・・・
https://docs.oracle.com/cd/E24845_01/html/819-6260/gayrd.html#gazgd

今更気付いたが、zpool replaceで指定するHDDは、新HDDでなくて、旧HDDの方だった。

このまま新HDDをPCに接続したまま再起動すると、ada4だったHDDがada3として起動し、
しかも故障したHDD(旧HDD)も交換用に追加したHDD(新HDD)もREMOVED扱いのまま。
# zpool status

pool: rz2pool
state: DEGRADED
 :
config:

NAME STATE READ WRITE CKSUM
rz2pool DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
ada1 ONLINE 0 0 0
ada2 ONLINE 0 0 0
replacing-2 DEGRADED 0 0 1
2685441344063119102 REMOVED 0 0 0 was /dev/ada3/old
xxxxxxxxxxxxxxxxxxx REMOVED 0 0 0 was /dev/ada3
ada3 ONLINE 0 0 0

errors: No known data errors


新HDDのSATAデータ線を外してPCを再起動しても、変わらず。

# zpool status
pool: rz2pool
state: DEGRADED
scan: resilvered 143M in 3h2m with 0 errors on Sun Aug 26 11:03:56 2018
config:

NAME STATE READ WRITE CKSUM
rz2pool DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
ada1 ONLINE 0 0 0
ada2 ONLINE 0 0 0
replacing-2 UNAVAIL 0 0 0
2685441344063119102 REMOVED 0 0 0 was /dev/ada3/old
916842558509187076 REMOVED 0 0 0 was /dev/ada3
ada3 ONLINE 0 0 0

errors: No known data errors


起動中に新HDDのSATAデータ線を繋いでも認識されないので、新HDDのSATA電源とデータ線を両方抜いてから、
再度データ線、電源の順に接続すると・・・
rz2poolの他のHDDもREMOVEDされてUNAVAIL状態になった。
シャットダウンしても、途中止まってるようで、telnetログインも拒否される。なぜかpingは通るが、一向に電源切れない。
電源長押しで強制OFF。
その後起動すると、また新HDDが自動的にresilveringされ始めた。
0.1%doneくらいから新HDDの認識がada3から9168xxxxxxに変わって、ONLINEだったのが、REMOVEDに変わった。



旧HDDの接続されていたada3へ新しいHDDを接続して、
zpool replace rz2pool ada3
 ※ 旧HDDのID(長い数字のランダムみたいなもの)を指定するとエラー出たため、ada3と新HDDを指定してる。
   オラクルマニュアルではどちらでもOKと記載あった。
とやっても、結局resilveringの後に、その新HDDがREMOVEDになる原因が分からず。
結局、FreeBSDを再度インストールする事に。
元の構成はOS HDD x1本 + データプール(HDD x 4本でZFS)としてたが、
今度の構成はOSとデータ全部込みでHDD x 5本でZFSを組んでる。



11.2新規インストール

11.2をDVDからインストール。
OS含めたZFSプールは、東芝DT01ACA300 x 5本。512eのHDDなので、ZFSプール作成時のForce 4KはNOにした。
(このHDDは512eなので、ホストから見たら512Bセクターなので。)

portイントール??
# cd /usr/ports/japanese/ne
# make install clean

https://freebsd.sing.ne.jp/11.01/02/08.html

treeインストール
# cd /usr/ports/sysutils/tree
# make
# make install

vimインストール
# cd /usr/ports/editors/vim
# make
# make install
GNOME対応にチェックしたせいか、途中で各ライブラリのコンフィグ画面が起動していちいちOKしないといけないの面倒。
しかもエラーで終わってる。

sshdインストール
# vi /etc/rc.conf
sshd_enable="YES"
# vi /etc/ssh/sshd_config

PasswordAuthentication yes → パスワードのみで認証する設定。
PubkeyAuthentication no →  認証に鍵を使用しない設定。

# /etc/rc.d/sshd restart
# ssh-keygen -t rsa
 ※ パスフレーズは使用しない設定にしたので、EmptyのままEnter

hogeユーザがsuでrootになれるように設定
# vi /etc/group
wheel:*:0:root,hoge  → 末尾に「,hoge」を追加した。


sambaインストール

https://www.kishiro.com/FreeBSD/samba4.html

libiconvを入れておくと、Windows上の日本語フォルダやファイルが正しく表示されるようになる、との事。
確かに以前に作ったFreeBSDのsambaは文字化けしていて困った事ある。これで解決か?
# cd /usr/ports/converters/libiconv
# make config-recursive
# make install clean

続いてsamba48をインストール。
# cd /usr/ports/net/samba48
# make config-recursive
# make install clean

smb4.confを新規作成
#vi /usr/local/etc/smb4.conf

[global]
workgroup = HOGE
server string = Samba Server (FreeBSD)
security = user
hosts allow = 192.168.xxx.
interfaces = 192.168.xxx.yyy/24
map to guest = Bad User
guest ok = yes
guest only = yes
guest account = nobody
load printers = no
log file = /var/log/samba4/log.%m
max log size = 50
dns proxy = no
unix charset = CP932
dos charset = EUCJP-MS
create mask = 600
directory mask = 700
printing = bsd

[share]
comment = Shared Directories
path = /home/share
browseable = yes
writable = yes


# vi /etc/rc.conf

samba_server_enable="YES"


share用フォルダの権限を設定
# chmod 777 /home/share

samba再起動。
# /usr/local/etc/rc.d/samba_server restart


GNU ls 等を使用できるようにするportsインストール。
# cd /usr/ports/sysutils/coreutils
# make
# make install



ん? 既にZFSプールがDEGRADED

以下初期設定やってから気づいたが、zpool statusで状況見てみたら、

# zpool status

pool: zroot
state: DEGRADED
status: One or more devices has been removed by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scan: none requested
config:

NAME STATE READ WRITE CKSUM
zroot DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
ada0p3 ONLINE 0 0 0
ada1p3 ONLINE 0 0 0
2542862470788629067 REMOVED 0 0 0 was /dev/ada2p3
ada3p3 ONLINE 0 0 0
ada4p3 ONLINE 0 0 0

errors: No known data errors


[Windows]LR-LINK 10G NIC

LR-LINK LREC6860BTがTSUKUMOとかで1万円以下で売ってる。

https://shop.tsukumo.co.jp/goods/6925909302137/104030013000000

やっぱり買ってみた。

z68(Windows、クライアント)
LR-LINK LREC6860BT
 |
XS708Eスイッチ
 |
X520-DA2
h170(FreeBSD、HDD 4台のZFS)

この構成でCentOSのiso(4GBくらい)をコピーしたら、転送速度330MB/sくらいだった。
z68かh170のディスク速度がボトルネックになってる気がする。
カレンダー
04 | 2019/05 | 06
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

Author:bobgosso
FPGAのブログへようこそ!

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード