2015年4月6日月曜日

プロキシ(Proxy)環境下での本書の演習の実行

はじめに

職場や学校などでは、ネットワークに接続するためにプロキシ(Proxy)サーバーと呼ばれるものを介する場合が多いと思います。そのような環境下では、本書でネットワーク接続を必要とする演習をそのままでは実行できません。

下記の設定を行えば、全ての演習を実行できるようになりますが、上級者向けの内容ですので、職場や学校のネットワーク管理者など、ネットワークに詳しい方と一緒に作業することをお勧めします。

apt-getコマンド

ソフトウェアのインストールの際などに実行するapt-getコマンドを用いるための方法です。

まず、ターミナルソフトウェアLXTerminalを起動し、以下のようにテキストエディタleafpadで設定ファイル/etc/apt/apt.confを作成します。
$ sudo leafpad /etc/apt/apt.conf
このファイルに下記の内容を記述します。「プロキシサーバー名」や「ポート番号」は環境によって異なりますので、ネットワーク管理者にお尋ねください。
Acquire::http::proxy "http://プロキシサーバー名:ポート番号/";
Acquire::https::proxy "https://プロキシサーバー名:ポート番号/";
Acquire::ftp::proxy "ftp://プロキシサーバー名:ポート番号/";
Acquire::socks::proxy "socks://プロキシサーバー名:ポート番号/";
記述が終わったら、ファイルを保存してからleafpadを閉じてかまいません。

以上で、「sudo apt-get install (パッケージ名)」、「sudo apt-get update」、「sudo apt-get upgrade」などのコマンドが実行できるようになります。

wgetコマンドやブラウザなど

次に、ファイルのダウンロードなどで用いるwgetコマンドや、ブラウザを利用するための方法です。ターミナルソフトウェアLXTerminalを起動し、以下のようにテキストエディタleafpadで設定ファイル.bashrcを編集用に開きます。
$ leafpad .bashrc
.bashrcファイルは既存のファイルなので様々な内容が書かれています。この内容を壊さないように注意しながら、ファイルの末尾に下記の内容を追記します。「プロキシサーバー名」や「ポート番号」は環境によって異なりますので、ネットワーク管理者にお尋ねください。(2015/12/10追記:以前の記述、太字部が間違っていたので訂正しました)
export http_proxy=http://プロキシサーバー名:ポート番号/
export https_proxy=http://プロキシサーバー名:ポート番号/
export ftp_proxy=http://プロキシサーバー名:ポート番号/
以上の設定を記述した後、この設定を読み込む必要がありますが、そのためにはRaspberry Piを再起動してしまうのが簡単です。再起動後、ブラウザepiphanyでインターネット上のウェブサイトを閲覧できるようになっているはずです。

なお、NOOBS 1.4.2(Jessie)以降に含まれるRaspbianのようにデフォルトでGUI環境で起動させた場合、ブラウザでProxyを有効にするにはターミナルからコマンドでブラウザを起動しなければなりませんでした。ご注意ください。
Chromiumブラウザの場合
chromium-browser &
epiphanyブラウザの場合
epiphany &

gitプロトコルに対するgitコマンド

以上で本書の内容のほとんどを実行できるようになりましたが、wiringPiをインストールするために本書213ページで紹介したコマンド「git clone git://git.drogon.net/wiringPi」だけはまだ実行できません。それを可能にする方法を記します。なお、NOOBS 1.4.2(Jessie)以降に含まれるRaspbianには、wiringPiはデフォルトでインストールされていますので、上記コマンドの実行の必要はありませんのでご注意ください。

まず、ターミナルソフトウェアLXTerminalを起動し、以下のようにcorkscrewというコマンドをインストールします。
$ sudo apt-get install corkscrew
次に、以下のようにテキストエディタleafpadでホームディレクトリ上にgit-proxy.shという名前のファイルを作成します。
$ leafpad git-proxy.sh
この中に、下記のような3行を記します。「プロキシサーバー名」や「ポート番号」は環境によって異なりますので、ネットワーク管理者にお尋ねください。
#!/bin/bash
CORKSCREW=`which corkscrew`
$CORKSCREW プロキシサーバー名 ポート番号 $1 $2
記述したら保存してからleafpadを閉じて構いません。次に、そのままLXTerminal上で下記のコマンドを実行し、git-proxy.shを実行可能ファイルにします。
$ chmod a+x git-proxy.sh
最後に、leafpadで設定ファイル.bashrcを開きます。
$ leafpad .bashrc
このファイルの末尾まで移動し、下記の1行を追記します。
export GIT_PROXY_COMMAND=/home/pi/git-proxy.sh
記述したら保存してleafpadを終了します。その後、Raspberry Piを再起動して設定を再読み込みすれば、 wiringPiのダウンロード用のコマンド
$ git clone git://git.drogon.net/wiringPi
が実行できるようになっているはずです。

時刻合わせ

プロキシ環境下ではRaspberry Piの時刻合わせが機能しない場合が多いと思います。そのような場合、もし職場や学校内に時刻合わせサーバーが存在すれば、下記の方法で時刻を合わせることができます。

RaspbianのWheezy/Jessie (NOOBS 2.4.2まで) の場合、時刻合わせにntpdが用いられていますので、その設定を行います。
leafpadで設定ファイル/etc/ntp.confを開きます。
$ sudo leafpad /etc/ntp.conf
ファイル内で下記のような箇所を見つけ、編集します。時刻合わせサーバが存在するかどうかはネットワーク管理者にお尋ねください。
(略)
# You do need to talk to an NTP server or two (or three).
#server ntp.your-provider.example
server その環境の時刻合わせサーバ  ←時刻合わせサーバが存在すれば記す

# pool.ntp.org maps to about 1000 low-stratum NTP servers.  Your server will
# pick a different set every time it starts up.  Please consider joining the
# pool: <http://www.pool.ntp.org/join.html>
#server 0.debian.pool.ntp.org iburst  ←ここは#でコメントアウト
#server 1.debian.pool.ntp.org iburst  ←ここは#でコメントアウト
#server 2.debian.pool.ntp.org iburst  ←ここは#でコメントアウト
#server 3.debian.pool.ntp.org iburst  ←ここは#でコメントアウト
(略)
記述後、Raspberry Piを再起動し、数分待てば時刻が合うようになります。

次に、RaspbianのStretch (NOOBS 2.4.3以降)の場合です。 時刻合わせにsystemd-timesyncdが用いられていますので、その設定を行います。 leafpadで設定ファイル/etc/systemd/timesyncd.confを開きます。
$ sudo leafpad /etc/systemd/timesyncd.conf
ファイル内で下記のような箇所を見つけます。
(略)
[Time]
#NTP=
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3
.debian.pool.ntp.org
このうち、NTPに関する行の先頭の「#」を削除し、「=」の右辺にお使いの時刻合わせサーバーを記述します。 時刻合わせサーバが存在するかどうかはネットワーク管理者にお尋ねください。
記述後、Raspberry Piを再起動すれば時刻が合うようになります。

カーネルやファームウェアのアップデートに用いるrpi-updateコマンド

Raspberry Piのカーネルやファームウェアのアップデートにはrpi-updateと呼ばれるコマンドを用いますが、やはりプロキシ環境下では実行できません。 本書内ではこのコマンドを使いませんが、参考のためにその方法を記しておきます。

ターミナルソフトウェアLXTerminalを起動し、ホームディレクトリで以下のコマンドを順に実行します。
$ rm rpi-update
$ wget https://raw.githubusercontent.com/Hexxeh/rpi-update/master/rpi-update
$ sed -e "s/curl/curl -x プロキシサーバー名:ポート番号/" rpi-update > rpi-update-proxy
$ chmod a+x rpi-update-proxy
$ sudo UPDATE_SELF=0 ./rpi-update-proxy
補足すると、rpi-updateはcurlというコマンドでファイルをダウンロードするのですが、curl実行の際にプロキシを経由するようなオプションをつけて呼び出すrpi-update-proxyというコマンドを3行目で生成しています。さらに、rpi-updateは起動時に自分自身を最新版に置き換えようとするので、「UPDATE_SELF=0」によりそれを無効化して実行しています。

プロキシ(Proxy)環境下での本書9章と10章の実行

さて、以上で本書の内容をプロキシ環境下で学べるようになりましたが、9章と10章を学ぶ際にはもう一点、注意すべきことがあります。

これらの章では、PCやスマートフォンのブラウザを通して、同一ネットワーク内のRaspberry Piにアクセスし、回路を制御します。この際の模式図が下図です。このPCやスマートフォンでは、通常のインターネットへのアクセスの際にプロキシサーバを経由しなければなりませんが、同一ネットワーク内のRaspberry Piへアクセスする場合は、プロキシサーバーを経由せず直接アクセスせねばなりません。

そのために、Raspberry PiのIPアドレス(ここでは192.168.1.3とします)を「プロキシの例外サイト」としてあらかじめ登録しておく必要があります。


Windowsの場合の例外サイトの設定法を示したのが下図です。「インターネットオプション」から「LANの設定」を辿るとプロキシサーバーを設定できます。さらに「詳細設定」ボタンをクリックすることで、例外サイトを設定できます。図では192.168.1.3が登録されていることがわかるでしょう。


この「例外サイト」の設定はMac OSXにも存在します。「システム環境設定」→「ネットワーク」
→「詳細」→「プロキシ」です。

しかし、iOS(iPhoneやiPad)の場合、この例外サイトの設定は存在しないため、iOSでプロキシの設定自体を無効にする(すなわち、上の図でインターネットへのアクセスができない状態にする)しかありません(pacファイルと呼ばれるものをサーバーに設置してこの問題を回避する方法もありますが、ここでは割愛します)。

androidの場合、Wifiの設定に例外サイトの設定があるのですが、この設定が機能しないことも多く、やはりプロキシの設定を無効にしてRaspberry Piにアクセスせざるを得ない場合があります。

0 件のコメント:

コメントを投稿