start的なコマンド


台風の影響で、帰宅命令が発動され、早退してきて急に暇になった。
まぁ、そんなことは兎も角。

ほとんどのcmdやpowershellのようなコマンドプロンプト操作は WSLのUbuntuで済ませられるようになりました!が、内部コマンドの start だけは、コマンドプロンプトに頼るしかない。

cygwinならcygstart的な、wslstart みたいなコマンドが欲しいところ。ググれば github にそのものズバリの wslstart のシェルスクリプトがあったが、スクリプト的なものは使いたくないし・・・だって、他所のパソコン触るとき無いとガッカリするよね。他所様のパソコンに勝手にスクリプトファイル置いたら怒られるよね・・・。

つーか、”start . ” でカレントディレクトリのフォルダウィンドウが開ければそれでいいんですよ。。。。

ってなわけで、alias を一個追加。これなら、覚えられるし、他所のパソコン触るときもチャチャっと書ける。

alias start='cmd.exe /c start'

おいらのパソコンの ~/.bash_alias に追記した。。。

gVim の :terminal から “start .” とかやる。助かる~(^^;;;


#追記 2018/09/17
やっぱり パス変換の判別が欲しい・・・っていう欲求が出てきて、数行のシェルスクリプトをかます事にした。
WSLでのstartコマンド簡易ヘルパー

gvim(+kaoriya) + WSL Part2

:prev
この前のつづきです。

シェルをWSL(ubuntu bash)にすることで、:terminalの他、外部コマンド実行(“!” から始まるやつ)をWSL内で完結することができました。
が、ただ一点、:terminal {command} にする場合、:terminal bash -c '{command}' としないとエラーになってしまうので、これが不満。

そこで、Wslterm というユーザー定義のコマンドを _gvimrc に追加することで、ラクしよう、と、こういうわけです(^^;
ヘルプを斜め読みしてとりあえず関数とコマンドの定義の仕方を最低限覚えて、以下の記述に辿り着く。
ほんとはもっとスマートなやり方があるんだと思いますが・・・素人の思いつきです。。。

" terminal の WSLラッパー コマンド (かなり修正:2018/7/13 0:02)
" ・・・なんかトンチカンなことをやってる気がしてきた・・・
" append to ~/_gvimrc 
set shellslash
set shell=C:/WINDOWS/system32/bash.exe
set shellcmdflag=-c
set shellquote=\"
set shellxescape=
set shellxquote=

function! Wslterms(c,f,l,...)
  let cmdline = []
  let option = []
  let i = 0
  while i < a:0
    if stridx(a:000[i],'++') == 0
      call add(l:option,a:000[i])
    else
      call add(l:cmdline,a:000[i])
    endif
    let i += 1
  endwhile
  let l:options = len(l:option) ? join(l:option," ")." " : ""
  let l:cmd = "terminal " . l:options

  if len(l:cmdline) > 0
    let l:cmd = printf("%s%s %s %s",l:cmd,&shell,&shellcmdflag,shellescape(join(l:cmdline," ")))
  endif

  if a:c 
    let l:cmd = join([a:f,a:l],",") . l:cmd
  endif

  execute(l:cmd)
endfunction
command! -nargs=+ -complete=file -range=0 Wslterm call Wslterms(<count>,<line1>,<line2>,<f-args>) 

これで、:Wslterm perl %とか、’<,'>Wslterm hogehoge とかやると、bash -c をつけて簡易的に :terminalの真似ができました(^^;; おまけで、gvimのterminalの中で、WSL(ubuntu)内のvimでファイルを編集(左)とかできちゃう!w

ただ、vim自体操作は慣れてきたとはいえ、まだよく分かっていないのでこういうアプローチでいいのか、よく分かんないです。またvimスクリプトの本でも買って勉強しよ。

■補足 2018/09/24
guioptions に “!” を追加すると :shell コマンド時、コンソールウィンドウが立ち上がるのではく、gVimのウィンドウを使用するみたい。知らんかった・・・・。

:set guioptions+=!

_gvimrcに書いとくと、かなりイケてる感が味わえるかも(^^;
ちなみに僕の guioptions は・・・

"snip
guioptions=egmrL!
"snip

となっております。。。

:continue
つづきは part3で

gvim(+kaoriya) + WSL

ちょっと躓いたので、備忘録。

gvim(+Kaoriya)で特に何も設定しないと、シェルは cmd.exe が使われますよね。8.1から:terminalが使えるようになったので、とりあえず %USERPROFILE%\_gvimrc に 以下の記述をつけてシェルをWSLのbashにしました・・・。

set shell=C:\WINDOWS\System32\bash.exe

一瞬だけ自己満に浸ってしまいましたが・・・コマンドラインモードで次を実行すると・・・

:r !date

テンポラリファイルがオープンできない旨のエラーが出て撃沈。

困ったときのグーグル先生で検索するも探し方が悪いのか解決できない。基本に立ち戻り、vimのヘルプを参照(^^; ( :help options )

shell を変更する場合は、shellcmdflag,shellquote,shellxquote等も変更してね・・・ということらしい。
はじめからこちらを見てれば問題なかった・・・。
ヘルプのとおりに以下のように設定すると、問題なくでけた!

set shell=C:\WINDOWS\System32\bash.exe
set shellcmdflag=-c
set shellquote=\"
set shellxescape=
set shellxquote=

※修正:shellxquoteを空にすると perl のファイルを開く時に ftplugin/perl.vim で標準入力待ちになって帰ってこなくなったので、よくわからないけど 引用符をいれたらなんか治った・・・よくわからん。まぁいいや。
※修正の修正:shellxquoteを設定したら今度は !command が動かなくなった・・・ということで戻す・・・。該当ファイル(ftplugin/perl.vim)を見たら perlpath = system('perl -e "join ....");の部分で perlpath を設定しているみたいなので、仕方ないので _gvimrc に let g:perlpath = “ほにゃららら” とかでお茶を濁して切り抜けた。

紆余曲折がありましたが・・・:terminal のおかげで、なかなかスマートに事を為しとげることができ、いとをかし。。。

スクリプトをせっせと書きつつ、コード片を スクリプトに流し込み、動作確認、CTRL-W N で端末ノーマルモードに移行しコピって、スクリプトにペーストとかもうキーボードから手を放さず全部できちゃう!

今までのようにコンソール画面をマウスでチマチマ選択しながらコピペ・・・とかもうおさらばさ!もうWindowsはダサいとか言わせないぜ!・・・・とかいいつつ、使ってるツール、環境は全部Linux由来なんだけど・・・(^^;;; WSLのおかげで、gvimの端末からフツーのWindowsアプリも起動できるし、いうことなし。\(^o^)/。

ただ、一点惜しむらくは、:term command とすると、当然環境変数PATHからcommandを探そうとします。これを WSL の中で行わせるには、:term bash -c command とかやらないと無理っぽい。この “bash -c “っていうのはイチイチ打つのはメンドイ。しかし、初心者のおいらにはこれまた解決方法が分からず、一向に初心者からなかなか抜け出せないな・・・。

:continue
つづきは part2で

NET::ERR_CERT_COMMON_NAME_INVALID なんだこれ?

備忘録。あしらからず。

WSLのおかげでもうほとんどLinuxな仮想マシンは要らなくなったのでホントにラクチン。まぁ、業務上必要なのでまだまだ HyperVにはお世話にならんといけませんが・・・。

で、WSL-UbuntuにSSL通信(HTTPS)させようと、ひさしぶりにopensslコマンドとか使う。なにげにopensslは万能コマンドすね。乱数からダイジェストから暗号化まで全部できちゃう!(^^; で、まぁ、お約束どおりCA.pl -newcaとかで認証局を作って、認証局の証明書をWindowsの証明書マネージャで「信頼されたルート証明機関」にインポート後、openssl.cnfいじって、あとはお決まりのCSR作って、さっき作った認証局で署名して、そのサーバー証明書(CN=localhost)をapache2に食わせて、https://localhost/ にアクセスしたんすよ。

結果、撃沈。昔はこれでいけたんです! IE11だと問題ないし。

最新のChrome/FireFox/Edge ぜんぶダメ。chromeだとNET::ERR_CERT_COMMON_NAME_INVALIDとかいう謎のエラーが出る。。。いやいや、証明書のプロパティを見るとちゃんと CN=localhostってなってるし・・・。

で、このエラーをそのままググると、最近のブラウザはCNは無視するみたいで・・・って、よくわからんが、最近は、CNの一致ではなく、SANを見てるんだとか・・・。理屈はともかく、理由が分かればあとは証明書の作り方を変えればオケ。

とりあえず、CSR(署名要求)まではお約束通り。
※openssl.cnfの設定はググればよろし。ただ、CA向け用とサーバー向け用とファイルを分けて使い分けるのが間違いがなくてよろしかと。
デフォルトのopenssl.cnfをCA用として修正し、サーバー証明書作成時に使う設定は openssl-server.cnfと別ファイルにして使ってます。

#1.認証局作成
$ cd /usr/lib/ssl/misc
$ ./CA.pl -newca

# Windowsの証明書マネージャで「信頼されたルート証明機関」にインポートとするため der に変換。
# でも cacert.pem を直接インポートしたら普通にできたので、↓要らないかも。
$ cd demoCA
$ openssl x509 -in cacert.pem -inform pem -out cacert.der -outform der

#2.サーバーキー作成
$ cd /etc/ssl
$ mkdir server; cd server
$ openssl genrsa -out localhost.pem -aes256 2048
$ openssl rsa -in localhost.pem -out localhost.key

#3.署名要求作成
$ openssl req -new -config ../openssl-server.cnf -key localhost.pem -out localhost.csr

そして・・・CSR(署名要求)を認証局に署名してもらうときに、下記の内容のテキストファイルを用意して、-extfile オプションをつけて食わせるといいようです。理屈はどうでもいい。まずは手順さえ覚えて、あとから調べればいいんです。逃げ。

subjectAltName=DNS:localhost

複数の場合はカンマで区切れば行けそう?

subjectAltName=DNS:localhost,IP:127.0.0.1

このファイルを署名するときに食わせる。

$ echo "subjectAltName=DNS:localhost" > localhost.san
$ openssl ca  -config ../openssl-server.cnf -in localhost.csr -out localhost.crt -extfile localhost.san

そして、できた localhost.keyとlocalhost.crt の二つを /etc/apache2/sites-available/default-ssl.conf の SSLCertificateFile とSSLCertificateKeyFile に記述。そして起動する。

$ a2enmod ssl
$ a2ensite default-ssl
$ service apache2 start

そして、1.で作ったcacert.der をデスクトップにコピーして 右クリック⇒証明書のインストールで「信頼されたルート証明機関」へストア。

ってなわけで?めでたく、最新のブラウザでも https://localhost/ で緑色の鍵マーク付きで表示された。

CoffeeLake(Core i7-8700) と Windows10 1803更新と

自作組立でPCを組んだのが5年前、そろそろハードウェアを一新したいなーと思いつつ伸ばし伸ばしにしてたのですが、GW連休に片付けてしまおうと思いリプレースを決行しました。

当初、起動システムが入っているSSDも含め一新しようと思いましたが、Windows10はAnniversary Update(1607)からライセンス認証の形態が変わり、ハードウェアの変更においても簡単にライセンス認証できる仕組みになったようで、OS自体も特に意識せずともクリーンインストールせずに環境を引き継げるとのこと。

要はマイクロソフトアカウントでログインしてライセンスとリンクしていればマザーボード等を交換してもライセンス再認証が通るようになったようです。
https://support.microsoft.com/ja-jp/help/20530/windows-10-reactivating-after-hardware-change

ってことで、今回はCPU、マザーボード、メモリを交換して、経済的理由により(^^;、来年あたりにストレージを交換することにした。
で、まずはパーツ購入です。

  • Intel Core i7-8700
  • ASUS PRIME Z370-A
  • Corsair DDR4-2666 8GB x 2

交換する前に、Spring Creators Update(RS4) の更新が降ってきたので、メンドクサイな・・・と思いつつパーツ交換前に済ませとこうと思い、更新開始後30分くらいでRS4に更新完了。
RS4への更新で一番うれしかったのが、WSL(Windows Subsystem for Linux)のブラッシュアップ。
デーモンプロセスが常駐できるようなったこと。今まではWebサーバーやデータベースなどのデーモンはBashコンソールを終わらすと全部落ちちゃうので不便極まりなかった。
それにWindowsシステムにも openssh がサポートされているようで・・・あとはもうCMD.EXEを捨て去ってマイクロソフト純正のターミナルエミュレータを作ってコンソールウィンドウを置き換えてくれれば・・・!

んで、次、マザーボード、CPU、メモリの交換はスムーズにいき、BIOSで必要な設定を行い、いざWindows10起動・・・見慣れない、「デバイスを準備中です」のメッセージの後、普通に起動した(^^;


さすがに論理プロセッサが12基あると壮観っすね。

普段はローカルアカウントで作業しているんですが、新規に作ってあったマイクロソフトアカウントを使ったユーザーでログイン後、ライセンス再認証してみる・・・・失敗・・・。上記URLの通り、トラブルシューティング実施後、「このデバイス上のハードウェアを最近変更しました」をクリック・・・失敗・・・・・・ええーーーーー!指示通りにやったのに再認証でけへん!!!

途方に暮れつつ、イチかバチか、Windows10に無料アップデートする前の5年前にパーツ買ったときに一緒に買ったWindows7のDVDメディアについてたプロダクトキーで、プロダクトキーの変更を行ってみる・・・

「このデバイスはライセンス認証されています」

あれ? 再認証でけた・・・。よくわからんが、やっぱりM/B、CPU、メモリ、3つも変えるとスンナリ再認証させてくれないのか・・・。
とりあえず、パーツ交換にともなうライセンス認証はクリアした。

しかし、致命的な問題が発生。Intel QSV がアプリケーションで認識しなくなった・・・。ググってみると、インテルグラフィックスドライバを最新版にしろ、とのことなので、インテルのサイトから最新のドライバ 24.20.100.6025 をダウンロードして実行してみたのですが、エラーが出てインストールできず・・・。

いろいろ試してみてもダメ。最終手段で、デバイスマネージャーからドライバファイルごと削除した。

もう一度最新ドライバのインストーラーを実行したら、インストールが正常に完了した。
QSVが認識されているか、HandBrakeを立ち上げて確認したら、ちゃんと認識してくれるようになった!
前のPC(Haswell)で平均で200FPSぐらいでエンコードできてた動画の変換が300FPSぐらい出てる!早い!バンザーイ!ってことでCPU4世代分の進化を実感できたw

そして、あともう1個 問題発生。
SONYのNASNEをパソコンから見るための PC-TV Plus というソフトでTVや録画番組が再生できなくなってしまった。
「グラフィックスドライバの状態が不正です、HDCPが・・・」というようなエラーが発生するようなった。
追記:HDCPチェッカーで HDCPがNGになってました。なんで・・・?
んーーー、これに関しては、原因が分からん。このパソコンではたまにしか見てなかったので問題はないが・・・ソフト側の問題かWindows10-1803の更新の問題のような気がする・・・。一応、一度アンインストールしてからインストールしなおしてみたけど状況は変わらず・・・。更新を待つしかないか・・・。

【追記の追記】これに関しては液晶モニターのHDCPが機能していませんでした。タイミング的にOSかアプリのせいかなと思ったんですが、ブルーレイレコーダをHDMI接続してみたらエラーで何も映りません・・・。たぶんモニタを修理に出したら基板交換になると思うんで・・・モニタが完全に壊れたら買い替えすることにします。。。(;´д`)トホホ

パーツ費用 約8万円也・・・。いまま使ってきた M/B(Gigabyte Z87X)、CPU(Core i7-4770)、メモリ(DDR3 16GB)をケースから抜いたままをヤフオクで出品して手数料、送料引いて約2万円弱ぐらいで処分できた。もうちょっと高く出品しても良かったかな、と一瞬思ったけど、僕にとってはゴミなので(^^;
まぁ、出品してすぐに落札されたので気持ちよく処分でけたマル。