POSIX 環境の設定 (WSL Ubuntu の設定)
目次
Windows 用の POSIX 環境として WSL 上の Ubuntu が整備出来ましたので、 ここからは Ubuntu の設定を行っていきます。
Windows 以外の環境から仮想マシン等で Ubuntu を使う場合、 このパートの内容はそのまま適用可能です。
このパートの設定では PowerShell は使いません。 WSL の起動方法 の方法で WSL を起動して WSL 上の Ubuntu から行って下さい。
Proxy の設定
大学や企業では、セキュリティ対策や通信量の節約を目的として、 インターネットとの間に Firewall を設けると共に、 proxy サーバー経由の通信を必須としている場合があります。
そのような環境では WPAD (Web Proxy Auto-Discovery) Protocol を用いて、 PAC (Proxy Auto-Config) ファイルを提供することで、プロキシを自動的に検出して 設定をおこなうような仕組みを用いている場合があります。
インストール直後、標準設定状態の WSL では Proxy の設定を自動検出できませんので、 インターネット経由のパッケージ導入等が出来ません。
Proxy を検出して自動的に設定を行うために、以下の手順を実施してください。
WSL に Ubuntu を導入済みのパソコンをインターネットに接続してください。
インターネット接続に認証等が必要な場合は、必要な認証も済ませてください。
WSL に導入した Ubuntu のコマンドラインを開きます。
WSL 上で動作している Ubuntu のコマンドラインに リスト 26 をコピペして実行してください。
WSL 導入の際、初回起動時に登録したパスワードを求められるので、正しく入力してください。
proxy_setup ()
{
cd /tmp
sudo sh -c 'printf $@>$0;chmod 440 $0' /etc/sudoers.d/inherit_proxy 'Defaults\tenv_keep+=%s_proxy\n' {f,ht}tp{,s} no
mkdir -p ~/.config/bash/bashrc.d
cat >~/.config/bash/bashrc.d/autoproxy.sh <<-'EOD'
function proxy_autoset ()
{
. ~/.config/bash/bashrc.d/autoproxy.conf >&/dev/null && return
proxy_fromsystem || proxy_wpad
}
function proxy_fromsystem ()
{
type powershell.exe >&/dev/null || return
proxy_set "$(powershell.exe -C '&{[System.Net.WebRequest]::GetSystemWebProxy().GetProxy($Args[0]).AbsoluteUri|sls -not $Args[0]|Write-Host -n}' "https://google.com/")"
}
function proxy_pac () # <url>
{
: ${PROXY_PAC:=$1}
proxy_set "$(
if type wget >&/dev/null; then
wget --no-proxy -qO - "${PROXY_PAC}"
elif type curl >&/dev/null; then
curl --noproxy "*" -s "${PROXY_PAC}"
fi \
| grep PROXY \
| sed -E 's@^.*"\s*PROXY\s*([^"]*)\s*".*$@http://\1@g'
)"
}
function proxy_wpad ()
{
proxy_pac http://wpad/wpad.dat
}
function proxy_set () # <proxy>
{
[ -z "$1" ] && { proxy_unset; return; }
declare -gx {ftp,http,https}_proxy="$1"
declare -gx no_proxy="localhost,127.0.0.1,localnet"
}
function proxy_unset ()
{
unset {ftp,http,https,no}_proxy
}
function proxy_register ()
{
proxy_export >~/.config/bash/bashrc.d/autoproxy.conf
}
function proxy_unregister ()
{
rm ~/.config/bash/bashrc.d/autoproxy.conf
}
function proxy_on ()
{
proxy_autoset
}
function proxy_off ()
{
proxy_unset
}
function proxy_export ()
{
declare -gp {ftp,http,https,no}_proxy | sed -E 's/-/-g/'
}
proxy_autoset
EOD
local bak=~/.bashrc,$(date -r ~/.bashrc +%Y%m%d_%H%M%S)
cp -a ~/.bashrc "$bak"
grep -v "^: proc bashrc.d;" "$bak" >~/.bashrc
echo ': proc bashrc.d; for i in ~/.config/bash/bashrc.d/*.sh; do . "$i"; unset i; done' >>~/.bashrc
. ~/.config/bash/bashrc.d/autoproxy.sh
}
proxy_setup
上記の設定では、以下の 3 点の設定を行っています。
実行するコマンドに root 1 権限を与える
sudo
に proxy を渡す設定を/etc/sudoers.d/inherit_proxy/inherit_proxy
に追加proxy の自動検出機能を
~/.config/bash/bashrc.d/autoproxy.sh
に追加bash 起動時に
~/.config/bash/bashrc.d/
以下の設定ファイルを全て読み込む機能を bash の設定ファイル~/.bashrc
に追加
注釈
上記スクリプトによる proxy の設定状況は proxy_export
コマンドで確認出来ます。山口大学の学内で情報コンセントや無線 LAN を利用している場合は リスト 27 のような結果が得られるでしょう。
$ proxy_export
declare -gx ftp_proxy="http://proxy.cc.yamaguchi-u.ac.jp:8080/"
declare -gx http_proxy="http://proxy.cc.yamaguchi-u.ac.jp:8080/"
declare -gx https_proxy="http://proxy.cc.yamaguchi-u.ac.jp:8080/"
declare -gx no_proxy="localhost,127.0.0.1,localnet"
もし山口大学学内の情報コンセント環境下で使っているのに、proxy が自動で拾えない人は、
curl http://wpad/wpad.dat
または wget -O- http://wpad/wpad.dat
で
PAC ファイルが取得できるか確認してください 2。
PAC ファイルが取得できない場合は、 WPAD によるプロキシの自動解決が出来ないので
リスト 26 を設定後、
リスト 28 の設定を行うことで、手動設定した proxy を永続化出来ます。
解除したい場合は proxy_unregister
コマンドを実行してください。
自宅等で proxy が不要な場合は proxy_on
, proxy_off
コマンドで一時的に ON/OFF を切り替えることができます。
proxy_set http://proxy.cc.yamaguchi-u.ac.jp:8080/
proxy_register
- 1
UNIX において OS の管理者権限を持つ super user には root というユーザー名を当てるのが慣例となっています。 Windows で言う所の Administrator というユーザー名に相当します。
- 2
DNS suffix の機能で wpad 以下のホスト名を解決出来る必要があります。 山口大学内では wpad にサフィックスとして .cc.yamaguchi-u.ac.jp を補って、 wpad.cc.yamaguchi-u.ac.jp という名前を解決します。 DNS suffix が使えない場合、山口大学限定の方法になりますが、
/etc/hosts
に172.17.1.3 wpad
を加えておくことで名前解決させることは出来ます。
演習に必要なパッケージの導入
最後に演習必要となる wslu, Python3, Jupyter Notebook, numpy, matplotlib, OpenCV のパッケージを導入して環境構築を終えましょう。 WSL 上で動作している Ubuntu のコマンドラインに リスト 29 をコピペして実行してください。
sudo apt update; sudo apt install -y wslu python3-pip python3-opencv python3-matplotlib jupyter
2023-05-27 現在、インストール直後の WSL Ubuntu に行ったところ、463 ファイル 378MB をダウンロードしてインストール後 1809 MB を消費する状況でしたので、多少時間がかかります。気長に待ってください。
Jupyter Notebook の設定
必要なパッケージのインストールが完了したら、 WSL 上で動作している Ubuntu のコマンドラインに リスト 30 のコマンドを実行してください。この設定を行っておくことで、Jupyter Notebook 起動時に自動的に web ブラウザが開くようになります。
jupyter notebook --generate-config
sed -i,bak -E 's/^#?(c.NotebookApp.use_redirect_file\s*=\s*).*/\1False/g' ~/.jupyter/jupyter_notebook_config.py
以上で、設定は終了です。
Jupyter Notebook の起動
最後に、Jupyter Notebook が起動することを確認しましょう。
WSL 上で動作している Ubuntu のコマンドラインに リスト 31 のコマンドを実行してください。
jupyter notebook
上手く起動したら web ブラウザに 図 16 のようなページが表示されるはずです。

図 16 Jupyter Notebook
右上の「New ▼」からプルダウンメニューを開いて「Python 3」を作成しましょう。 白紙のノートが開いたら「+」ボタンでコードブロックを 4 つに増やして以下の4つのコードを順に貼り付けます。 最後に「▶▶ (restart the kernel then re-run the whole notebook (with dialog))」で実行してください。
import cv2
import os
url = "https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Apollo_17_Cernan_on_moon.jpg/233px-Apollo_17_Cernan_on_moon.jpg"
!curl -sO "$url"
img = cv2.imread(os.path.basename(url), cv2.IMREAD_UNCHANGED)
import matplotlib.pyplot
matplotlib.pyplot.imshow(cv2.cvtColor(img, img.ndim == 2 and cv2.COLOR_GRAY2RGBA or [cv2.COLOR_BGR2RGBA, cv2.COLOR_BGRA2RGBA][img.shape[2] - 3]))
matplotlib.pyplot.show()
import IPython.display
IPython.display.display(IPython.display.Image(cv2.imencode(".png", img)[1].tobytes()))
import PIL
display(PIL.Image.fromarray(cv2.cvtColor(img, img.ndim == 2 and cv2.COLOR_GRAY2RGBA or [cv2.COLOR_BGR2RGBA, cv2.COLOR_BGRA2RGBA][img.shape[2] - 3])))
無事、環境構築が成功していれば、図 17 のような実行結果が得られるはずです。

図 17 Jupyter notebook サンプル1 実行結果
Jupyter Notebook の終了
Web ブラウザ上から Quit を実施するか、 Jupyter Notebook を実行中の WSL で [CTRL]+[C] を数回叩くと Juyter Notebook のサーバーが終了します。