AWX をインストールした後の Server Error を解決したかった話

この記事は、 Ansible AWX をインストールしたときに、 Server Error に なったりならなかったりする 問題に対処したときのポエムだ。

はじめに断っておくが、最終的に AWX 8.0.0 で解消しているっぽいものの、 原因や正確な条件などは不明なままである。
また後述するが、 (タイトルに反して)おそらく Ansible AWX の問題ではなく、 postgres:9.6 の docker イメージの問題ではないかと思われる。

発生した問題の状況

続きを読む

プロキシ環境下で Ansible AWX をインストールする Playbook を作る

11/10 頃から、 Python でpypiwin32 や pywin32 パッケージや、それらに依存しているパッケージを pipenv にてインストールしようとすると、

AttributeError: module 'site' has no attribute 'getsitepackages'

とエラーが出て失敗するようになった。

原因

直接的な原因は、 pipenv ではなく virtualenv にある。

続きを読む

Proxy 下で vscode の WSL 上の他の拡張機能のインストールに失敗する

プロキシ環境下の vscode で、 WSL 上で拡張機能を動かしたいのに、 インストールインストールに失敗する問題を解決するメモ。

前回の↓の記事は、 『Remote – WSL 拡張が有効にできない』問題だったが、今回は『Remote – WSL 拡張 を有効にした後、その環境上で他の拡張機能がインストールできない』問題なのでちょっと違う点に注意。ややこしいね。

遭遇した問題

Visual Sutdio Code (以下、 vscode) へ 無事に Remote – WSL 拡張機能 の “VS Code Server for WSL” のインストールが完了し、 Windows 上から 快適に WSL の環境にアクセスできるようになった。
しかし、 いくつかの vscode の拡張機能は、 Windows 上の環境とは別に WSL 上の環境で改めてインストールしなくてはならない。

そこで、 UI 上の案内に従って各拡張機能で “Install in WSL” を行ったところ、 プロキシ環境下だと以下のエラーが発生してインストールに失敗する問題に遭遇した。

Failed to install extension

パネル上の OUTPUT タブで “Log (Remote Server)” の情報を見ると、以下のようなエラーが発生しているのがわかる。

[remoteagent] [error] Failed to install extension: {拡張機能ID} connect ECONNREFUSED 13.107.6.175:443

settings.json ではプロキシの設定しているし、更には WSL 上の環境変数 (http_proxy, https_proxy) にだってプロキシを入れている。
更には(前述の)前回の記事に倣って、 WSL のコンソール上から code . の立ち上げまで行ってみた。

それでも解消しない。何故だ。

なお、試した vscode のバージョンは、 August 2019 (version 1.38.1) だ。

“Remote [WSL]” 用の設定ファイルを書き換える

続きを読む

Proxy 下で vscode の WSL 拡張へ接続できない

Windows 上の Visual Studio Code (以下、 vscode) で、WSL 上のファイルやシェルを使えるようになる、 Remote – WSL 拡張機能。

これを、プロキシ環境下でインストールしたり更新したりすると、 vscode から WSL 環境ににアクセスするときに、

VS Code Server for WSL closed unexpectedly.
Check WSL terminal for mor details.

とエラーになってしまう。

WSL ターミナルのログを見てみると、だいたい以下のようになっていて、どうやら update.code.visualstudio.com から VS Code Server の更新版のファイルをダウンロードするのに失敗しているように見える。

Starting VS Code Server inside WSL (default distro)
Extension version: 0.39.5, Windows build: 17763. Multi distro support: disabled. WSL path support: enabled
Probing if server is already installed: C:\WINDOWS\System32\wsl.exe  -e sh -c "[ -d ~/.vscode-server/bin/3db7e09f3b61f915d03bbfa58e258d6eee843f35 ] && echo found || echo missing"
No server install found on WSL, downloading server on client side: C:\Users\user\AppData\Local\Temp\vscode-remote-wsl\3db7e09f3b61f915d03bbfa58e258d6eee843f35\vscode-server-linux-x64.tar.gz
Unable to detect if server is already installed: Error: connect ECONNREFUSED 104.42.78.153:443
Launching C:\WINDOWS\System32\wsl.exe sh -c '"$VSCODE_WSL_EXT_LOCATION/scripts/wslServer.sh" 3db7e09f3b61f915d03bbfa58e258d6eee843f35 stable .vscode-server 0  --disable-telemetry' in c:\Users\user\.vscode\extensions\ms-vscode-remote.remote-wsl-0.39.5
WSL version: 4.4.0-17763-Microsoft 
Updating server...
Updating VS Code Server to version 3db7e09f3b61f915d03bbfa58e258d6eee843f35
Removing previous installation...
Downloading:     
Failed
--2019-09-11 20:50:12--  https://update.code.visualstudio.com/commit:3db7e09f3b61f915d03bbfa58e258d6eee843f35/server-linux-x64/stable
Resolving update.code.visualstudio.com (update.code.visualstudio.com)... 104.42.78.153
Connecting to update.code.visualstudio.com (update.code.visualstudio.com)|104.42.78.153|:443... 
failed: Connection refused.
ERROR: Failed to download https://update.code.visualstudio.com/commit:3db7e09f3b61f915d03bbfa58e258d6eee843f35/server-linux-x64/stable to ~/.vscode-server/bin/3db7e09f3b61f915d03bbfa58e258d6eee843f35-xxxxxxxxxx.tar.gz
VS Code Server for WSL closed unexpectedly.
For help with startup problems, go to
https://code.visualstudio.com/docs/remote/troubleshooting#_wsl-tips

どう解決したものか。


そもそも wget でダウンロードができる状態なのか

続きを読む

同一ファイルに対して、 複数種類のファイルハッシュを高速に計算する

ネットワークドライブ上の GB オーダーのファイルに対して、複数のハッシュアルゴリズムでファイルハッシュを計算する必要に駆られていた。
「そんなシチュエーションが本当にあるのか?」と思うかも知れないが、あったのだから仕方ない。

最初は、 PowerShell を使って 愚直に Get-FileHash を 2回 計算していた。
しかし当たり前だが、 2回ファイルをダウンロードすることになるこの方法は遅くて仕方ない。

ということで、 C# でコンパイルしたコード上で、 一度メモリに読み込ませてから複数のハッシュアルゴリズムで計算できるようなコードを作成した。

バッファーサイズを 80KiB 程度とすると、 .NET の仕様で 85KB を境にメモリの扱いが変わる (LOH と呼ばれる特別なヒープに移動する) ことから、 このサイズを超えると一般的に動作速度が下がると言われている。
しかし、今回のコードの場合バッファーが小さいと、 Task 周りの処理がボトルネックになってしまうので、 8MiB くらいのサイズとしている。

80KiB としているのは、 .NET mscorlib の System.IO.Stream.CopyTo メソッドなどでもおなじみなのだが、これが必ずしも正解とは限らないわけだな。


パフォーマンス

800Mbps 位でシーケンシャルリードできるリモート上の 4GB のファイルを、 4回 ずつ計測した平均を計測した。
Get-FileHash の 2種類目 以外はクライアントキャッシュが効かないように注意し、 計測の各回でハッシュを計算するファイルはそれぞれ別のファイルで、中身はランダムバイナリとした。
Get-FileHash については、 計測の各回では同じファイルに対して -Algorithm パラメータを変えて複数回連続で呼び出した。

計算したハッシュの種類 Get-FileHash 上記の改良スクリプト
1種類 (SHA1) 48.8s 43.3s
2種類 (MD5, SHA1) 60.4s 44.2s
3種類 (MD5, SHA1, SHA256) 83.3s 48.2s

ん? 計算したハッシュが 1種類 の場合でも、改良スクリプトの方が早いぞ?


うわっ… HashAlgorithm.ComputeHash の実行速度、低すぎ…?

PowerShell v5 相当

PowerShell v6 相当

上記のように、 Get-FileHash は、内部的に HashAlgorithm.ComputeHash でハッシュ計算を実行している。

で、その HashAlgorithm.ComputeHash がどうなっているかというと、 4KiB 毎に ファイルの読み込みと、 ハッシュストリームへの書き込みを 同期的に 行っている。

ファイルの読み込みも、 (使うアルゴリズムにもよるけど) ハッシュの計算も、 どちらもコストがかかるので、同期的にやってたらそりゃ遅いわ。

ideapad Miix720 Core i7 16GB ~2018年のベストバイ~

01/15 追記: 価格.com のページは残っているが Lenovo の直販ページへのリンクが切れていて、どうも Lenovo 直販モデルの扱いがなくなってしまっているようだ…
販売代理店モデルはまだあるようなのだが、そちらはメインメモリサイズが 8GB にとどまってしまっている。
CES 2019 で後継モデルが発表されたのかと思いきや、そんなことは全くなく、リーズナブルな Surface ライクのサイズ&性能のモデルがなくなってしまったのが残念でならない…

唐突だが、 2018 年のベストバイだった Lenovo の 2-in-1 タブレット, Miix 720 の Core i7 16GB モデル をレビューしたいと思う。
(2018年中の記事0は悲しいからね)

のっけから話の腰骨を折るが、 このモデルの発売日は 2017年 の夏ごろで、 2018年 に発売されたものではない。
にもかかわらず挙げているのは、 2019年も迫る現在でもこの端末に相当する良機が見つからないからだ。


購入経緯

まず、私はこれまで Surface Pro 2 (Core i5, 256GB SSD, 8GB Memory) を使っていた。
2013年当時は、 ペン同梱の本体と Type Cover をセットにしても14万円くらい購入ができた。
かれこれもうまる5年使っているので、 バッテリーがヘタヘタだし、 少しの衝撃で勝手に再起動されるようになってしまったので、 これの代替になるマシンが欲しかったのだ。

そこで、 2018年 にこれから数年使うために求めたのが以下の通り。

  • 筆圧対応ペン付きタッチパネル搭載 ラップトップ または 2-in-1
  • メモリは 人権 最低 8GB, できれば 16GB
  • ストレージは 256GB 以上
  • モニターは WUXGA 以上
  • SD または micro SD カードスロット

これを、 Surface Pro 5 や 6 で揃えようとすると、
8GB メモリですら 16万円、 16GB メモリにこだわると 27万円 などというとても手が出さない値段になってしまう。

ところが、この Miix720 であれば実質 12万円 ですべてがそろってしまうのだ。


Surface Pro 2 と比べると、ふた回りでかいが、携帯性は高いので全然問題ない。


主な仕様と特徴

主な仕様は以下の通り。

続きを読む

Pandoc の Portable Windows バージョンを作る

Pandoc は、 HTML や、 Markdown, Textile, LaTeX などはじめとした、豊富な各種マークアップ形式を、別の形式に変換できるコマンドラインツールだ。

例えば、 textile → markdown 変換 とか、 HTML → markdown 逆変換 といったようなことができる。

何ができるかは、 Pandoc ユーザーズガイド あたりを参照してほしい。

さて、 この Pandoc の Windows 版は msi のインストーラ形式でしか配布されていない。

このインストーラでインストールすると、 ユーザディレクトリの [cci]%LOCALAPPDATA%\Pandoc\[/cci] (もしくは [cci]%ProgramFiles(x86)%\Pandoc\[/cci]) に実行ファイルを展開して、 PATH を通してくる。
どうやら、システムディレクトリにファイルを置いたりしないようなので、 正直これだけのためにインストーラを実行して、 PATH や レジストリを汚すようなことをしたくない。

ということで、 msi インストーラから、 インストールをせずに実行ファイルだけ取り出して、 Portable 版を作成してみよう。

続きを読む

ZoneId を PowerShell を使って一括削除 [v3 以上]

Windows では、リモートからダウンロードしたファイルに、 “ZoneId” という物が付加される。
このID が付加されたファイルは、 exe として 実行する際にセキュリティ警告が表示されたり、 .NET アセンブリ dll として PowerShell に読み込む際に、

Add-Type : ファイルまたはアセンブリ 'file:///*.dll'、またはその依存関係の 1 つが読み込めませんでした。操作はサポートされません。 (HRESULT からの例外: 0x80131515)
発生場所 行:1 文字:1
+ Add-Type -Path 'C:\*.dll'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Add-Type], FileLoadException
    + FullyQualifiedErrorId : System.IO.FileLoadException,Microsoft.PowerShell.Commands.AddTypeCommand

などとエラーになってしまう。
160925_1

ファイルが一つだけなのであれば、ファイルのプロパティから『ブロックの解除』をチェックすれば、簡単に ZoneId を削除することができる。
160925_2
しかし、複数個のファイルの ZoneId を一回の操作で同じように削除することができないため、 ZoneId を削除したいファイルが大量にある場合はなかなかウザい。

PowerShell v3 以上を使えば、この ZoneId 削除をいとも簡単に行うことができるので、紹介しよう。

続きを読む

Photon 2 を BungBungame のオンラインショップで買おうとしたら、罠がいっぱいあった

BungBungame Photon 2 という、 台湾企業の日本法人が販売している、Windows タブレットPC がある。
160701_1

これが、

  • Atom Z3775 より強力らしい、 AMD製 64bit CPU (APU)
  • 4GB RAM
  • 1920 x 1200 視野角 178° IPS液晶
  • N-Trig らしい 筆圧 1024レベルスタイラスペン
  • Wi-Fi 802.11a/b/n/ac 対応
  • それでいて、お値段送料込で 23,056円!! (税込み 24,900円)

という、値段の割には夢のような構成なので、なかなか興味深い。 低価格液タブとして考えても破格のお値段。
もともと2014年登場予定で、2015年に発売開始されたものなので、少し古めの機種ではあるが、ぼちぼち使える性能ではあるだろう。 なにより、格安タブレットなのに 64bit マシンで メモリが 4GB 載っているのは頼もしい。

某匿名掲示板で購入者の感想を見てみても、評判はなかなか上々。
(一応、「値段の割に」と注釈がいるが)

我が家の母艦PCが、家族によってペンタブお絵かきマシンとして占領されているうえ、液タブ(Cintiq みたいな高いヤツじゃなくていいから)ほしいとか言い始めたので、こいつに使わせて母艦を奪還するのにもってこいだ。

どうやら OS は Win 8.1 で届くらしいので、 Win 10 無償アップグレード 期間中に手に入れておこうと思い、購入を決意した。

つい先日まで、Photon 2 の購入は、メールでの手続き ・ UFJ銀行 への振込での支払い という、このご時世なかなか珍しい方法だったらしいが、 どうやら最近オンラインショップ機能と、クレジット決済に対応したようだ。
早速これらを使って購入手続きをしてみたのだが… とにかく途中で購入を躊躇する罠がいくつもあった
そんな解説を付け加えながら、方法を紹介してみる。

この記事を読んで、自分も買ってみようと思う方は、自己責任でお願いしたい。

会員仮登録する

続きを読む

npm config -g でプロキシの設定をしているのに electron-quick-start や electron-prebuilt でコケる

プロキシ環境下で、 electron-quick-start レポジトリを [cci]npm install[/cci] しようとしたり、 npm で electron-prebuilt モジュールをインストールしようとすると、 [cci]npm config set https-proxy “http://proxy.example.com:8080/”[/cci] とプロキシを設定しているのにもかかわらず、

Error: connect ECONNREFUSED 192.30.252.128:443
    at Object.exports._errnoException (util.js:949:11)
    at exports._exceptionWithHostPort (util.js:972:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1080:14)

などとエラーが出てしまうことがある
特定の通信に、 npm のプロキシの設定が使われていないのだ。

などでは、 [cci]netsh winhttp import proxy source=ie[/cci] のコマンドを実行するといった解決方法が紹介されているが、 これは WinHTTP を使った通信全体に、 IE の proxy の設定をコピーするものであって、今回の問題の本質ではない。

あくまで、 npm config の https-proxy や proxy で設定したプロキシで、エラーとなっている通信を実行させたい場合の解決方法について述べよう。

解決方法

結論を先に言うと、 [cci]npm config –global https-proxy[/cci] ではなく、 [cci]npm config https-proxy[/cci] を使って プロキシを設定する のだ。

続きを読む