今年は「インターネット論」の受講者が 60 人ちかくいて,しかも遠隔で参加する学生にも配慮する必要があるため,一昨年までやっていたハードウェアをつかったイーサネットの演習はあきらめて,4 年以上まえにつかっていたシミュレータをつかった演習をすることにした.ところが,その後とくにここ数ヶ月のあいだに,おもに 2 つの原因でこのシミュレータを Windows 10 でつかうことがむずかしくなっていることがわかった.学生にはおもっていた以上に苦労をかけることになってしまったが,はじめたからにはしかたがない.ここでは問題と解決策について書くことにする.
まずイーサネット・シミュレータについてかんたんに説明しておく.このブログで何回か書いてきたように,最初に開発したのは 2013 年だが,その後 2015 年に改訂してほぼ現在のかたちになっている.スイッチやコンピュータなどの機器を Python のプログラム (プロセス) によってシミュレートして,それらのあいだでパケットを交換する.それらは通常は 1 台の PC 上で実行するので,それらをイーサネットでつなぐことはできない.そこで,UDP パケットでイーサネットのパケット (フレーム) をシミュレートしている.2013 年にはプロセスを起動するのにコマンドプロンプト上で Python を起動していたが,機器間をつなぐのがめんどうなので 2015 年にはネットワークの設計図をテキスト・ファイルであたえるとコンパイルして,各機器を Windows のバッチファイルで表現して,それらのバッチファイルを全部ダブルクリックしてひらくとシミュレーションできるようにした.コンパイルもバッチファイルをダブルクリックすることで実行されるようにして,コマンドプロンプトのことを深く知らなくてもつかえるようにしたつもりだ. それでも,いろいろとなかみが透けてみえるつくりになっているので,学生にはあまりわかりよくないシステムになっている.
このようにシミュレータじたいが理解しにくいものであるのにくわえて,2016 年以降にさらにいろいろそのハードルをあげる事態がおこった.第 1 の事態は Python のパスに関することだ.以前は Windows では既定では C:¥ の直下に python34, python35 というようなディレクトリがつくられてインストールされたので,比較的わかりやすかった.ところが,最近では隠蔽された場所にインストールされるのが既定になり,そこにパスをはっておかないとインストールされる場所がわかりにくくなった.シミュレータはこの隠蔽された場所には対応していなかったので,バッチファイルをダブルクリックしても Python が起動されないという問題が多発した. しかも,演習をおこなう直前に Python 3.10 がリリースされ,用意していたプログラムはそれに対応していなかった.
この問題の解決策はいくつかかんがえられるが,一番安定した解決策は Python のインストール時にそれをパスにいれることだ.つぎの図はインストーラの最初の場面でそれを指定している (図の一番下のチェックボックス).
パスにいれないままインストールしてしまった場合はめんどうなので一度アンインストールしてから,上図のようにチェックをいれてインストールしなおすほうがかんたんかもしれない.
第 2 の事態は Windows 10 のセキュリティに関することだ.シミュレータを Windows にマウントされたドライブからコピーすれば問題はおこらないのだが,Google ドライブなどからコピーすることになるため,Windows からは潜在的に危険があるファイルだとみなされる.そのため,バッチファイルを起動しようとするたびに警告が発せられる.以前は 2 回めから警告されないようにすることが比較的容易だったが,この 10 月にセキュリティが強化されて起動するのがむずかしくなり,また警告をとめることができなくなった.
バッチファイル 1 個ずつのプロパティをひらいて下図のように実行可能にすることができる (一番下のチェックボックス) が,1 個ずつ指定するのはめんどうだ.
シミュレータをダウンロードするときには zip ファイルになっているので,それに対してこの操作ができればよいのだが,zip ファイルのプロパティをひらいてもチェックボックスは表示されない.ethersim20211007.zip というファイルに対してこの操作をするには,PowerShell をひらいてつぎのコマンドを実行する必要がある.
Unblock-File ethersim20211007.zip
PowerShell でなくコマンドプロンプトでこれができればよいとおもうのだが,できないらしい.また,PowerShell のスクリプトを書いておけばもっとかんたんにできそうだが,PowerShell のスクリプトはダブルクリックしても実行されないし,そもそも既定ではスクリプトが実行できないようになっている.したがって,かぎられたバッチファイルだけをつかうなら 1 個ずつ設定するほうがかんたんだし,zip ファイル全体にやるなら PowerShell にコマンドをいれるほうがかんたんだ.しかし,コマンドプロンプトをつかわなくてもできるようにかんがえたしかけなのに,PowerShell をつかうことをすすめるのはいかがなものか.
インターネットからダウンロードしたどのファイルに対しても警告せずに実行しようとすれば方法はあるが,それは危険だからやめたほうがよいだろう. しかも,その方法も最近の Windows 10 と 9 月以前のものとではやりかたがちがう. とてもめんどうだ.
【参考】つぎの Web ページは警告とその解除の方法について書いたページの例だ.
コメントする