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万円弱ぐらいで処分できた。もうちょっと高く出品しても良かったかな、と一瞬思ったけど、僕にとってはゴミなので(^^;
まぁ、出品してすぐに落札されたので気持ちよく処分でけたマル。

xkeymacs + Windows10

2018年4月8日 追記
ようやく設定プロパティダイアログの修正が入ったものがリリースされた模様。待ってました!ってなわけでここに置いてあるのは削除しました。


そろそろプロパティダイアログの修正入っているのかなぁ・・・と思って久しぶりにxkeymacsのページを覗いたけど、現状で安定しているのかsnapshotが6年前で止まってた。まぁ、Windows10でもちゃんと動いているんだし(^^;
snapshotのリリースは止まっていたけど、ソース自体は更新されていたので、最新のソースをダウンロードしてVisual Studio 2015 Community でビルドした。
ビルドする前に設定ダイアログのサイズをちょっと伸ばしてプロパティシートが切れないのようにちょっとだけ伸ばす。これは↓と同じ(^^;

Windows8.1用にxkeymacsをビルド

スクリーンテキストのサイズは100%でしか使わないのでOK。
プロパティの部分だけ(GUIの部分だけ)C# .Net Frameworkとかで書けば多分解決するんでしょうけど、いかんせん、MFCのソースは僕には皆目読めません。。。読む気ありません。。。ただでさえC++忘れかけてるのに・・・。C++ TR1ぐらいがギリついてけるが、C++11規格とかもうサッパリ・・・。Cに至ってはもうC90ぐらいでも今となってはついていけるかも怪しい。。。

ってなわけで、どこからでもダウンロードできるように、リンク貼っておこう。
Rev.8799a18のものをVisual Studio 2015 Community Editionでビルドしたやつ

シェルスクリプト右往左往

Bash on Ubuntu on Windows(以下BoWと略す)の環境下で作成したシェルスクリプト(ほとんどがImageMagickとffmpeg関連)がある程度貯まってきたので、CentOS側にコピーして動かしてみたら、エラーが出まくって動かなくなった・・・トホホ。

原因のほとんどが、basenameでのエラー。BoWは Ubuntuで、coreutilsのバージョンは 8.25。CentOS 6に標準で載ってる coreutilsのバージョンは、8.4・・・7年前にリリースされたもの・・・。

ってなわけで、 `basename -s <suffix> <filepath>` となっているところを片っ端から `basename <filepath> <suffix>` に変換してようやく動く。

今までシェルスクリプトは、「なんか覚えるのメンドーだなー」とか、「Perlで組めば大抵代用できるしなー」とか思ってて、あえて避けてきたんだけど、やっぱり画像の一括リサイズとか、画像への文字合成処理とかの単純作業は、Photoshopのアクション&バッチ処理をするより、圧倒的に手間が少なく、ラクできる。 特定ディレクトリ下に無秩序に掘られたサブディレクトリに格納された画像1000枚以上にシリアル番号入れて一括リサイズなんてPhotoshopでやってらんねーーーーし!

とりあえず、if-elif-else、case、while、for、などの基本制御式さえ押さえれば、あとは manページ参照しながらやってると、よく使う find コマンドとか、imagemagickなどのオプションなんて自然とソラで書けるようになってくるのがアラ不思議(^^

google検索のおかげで、CLIはグッとハードルが下がりましたよねぇ。。。