cronでDDNS更新(Value Domain)

Value DomainにおけるDDNSの自動更新のため、以下の設定を行った。

と入力し、Value Domainであればstatus=0と帰ってくれば成功

15分おきにcronで更新するよう設定した。 $ sudo crontab -eと入力し、最終行に

を追加した。

DOMAINとPASSWORDはValue DomainのダイナミックDNSの設定ページに従う。

TensorFlow 1.0 (GPU版)のインストール

このページは機械学習用計算サーバーの構築(インストール編)の下層であり、当該ページ内の順序にインストールされることを想定した内容です。

pyenv中のAnaconda環境において、さらにAnacondaでTensorFlow用の環境を作成する。

この環境の中に、pipでGPU版TensorFlowをインストールする。

GPUを使って計算されているかを確認し、環境構築は終了となる。

OpenCVをAnacondaにインストール

このページは機械学習用計算サーバーの構築(インストール編)の下層であり、当該ページ内の順序にインストールされることを想定した内容です。

このコマンドひとつでインストール可能である。

 

pyenv上にAnacondaをインストール (on Ubuntu Server 16.04 LTS)

このページは機械学習用計算サーバーの構築(インストール編)の下層であり、当該ページ内の順序にインストールされることを想定した内容です。

AnacondaはPython関係のパッケージの管理や仮想環境の管理が行えて非常に便利なので、これを使ってPython環境を構築する。

Anaconda環境を使用したいときには、

とし、システムに戻りたいときは、

とすればよい。

また、フォルダごとに環境を切り替えることができる。使い方は、所望のフォルダにいるときに、

とすればよい。

現在の環境を知りたいときは

とし、環境の一覧を見たいときは

とすればよい。

pyenvとAnacondaの競合

こちらのページを参考にした。)

pyenvもAnacondaも仮想環境の管理を行う機能があるが、いずれのコマンドも

で仮想環境への遷移ができる。そのため、Anacondaで環境の切り替えをしたくて以上のコマンドをタイプしても、何らかの競合が発生し、ターミナルが落ちてしまう。そこで、Anacondaの環境切り替えはフルパスで指定することで対処可能だ。

毎回長いパスを入力するのは面倒なので、aliasを設定する。

pyenvのインストール

このページは機械学習用計算サーバーの構築(インストール編)の下層であり、当該ページ内の順序にインストールされることを想定した内容です。

pyenvは、複数バージョンのPythonを仮想環境上で管理できるソフトウェアです。Anacondaも同様の機能があり、かつ多くのソフトウェア群がまとめてインストールできるパッケージ管理システムです。

これを読むと、Anacondaだけでいいではないか、と思い、最初はAnacondaのみインストールする予定だった。しかしAnacondaはOpenSSL・curl・PythonのPATHを変える必要があるため、それらのOS本体にのったソフトウェアを使用する際に問題が生じる。自分の場合、OpenSSLを使用してWebサーバーを立てる構想があるので、できれば避けたい問題である。

そこで多くのLinuxユーザーが取っている苦肉の策が、pyenv + Anacondaという組み合わせだ。pyenvの仮想環境上にAnacondaを載せることで、それらの問題を解消する方法である。

こちらのページに詳しく書かれており、なぜみんなAnacondaの仮想環境機能を使用せずにわざわざpyenvを使っているのか、という疑問が解消した。

というわけで、pyenvのインストールを行っていく。

最初に、必要な環境のインストールを行う。

続いて、pyenvをインストール。

CUDA・cuDNNドライバのインストール

このページは機械学習用計算サーバーの構築(インストール編)の下層であり、当該ページ内の順序にインストールされることを想定した内容です。

こちらから、環境に合ったCUDAドライバのdeb(network)ファイルをダウンロードし、

を実行する。最後に ~/.bashrc に

を追加する。

続いて、こちらから、環境にあったcuDNNライブラリ(バージョン5.1)をダウンロードし、homeフォルダに展開する。

以上で完了となる。

nVidiaドライバのインストール

このページは機械学習用計算サーバーの構築(インストール編)の下層であり、当該ページ内の順序にインストールされることを想定した内容です。

まず、ディスプレイマネージャを切ってから、もともと入っているnVidiaのドライバ類を削除する。

そして、nVidiaのページから、該当するバージョンのドライバをダウンロードする。

ダウンロードしたディレクトリに移動し、

として実行し、インストール。この作業は、必ず標準コンソール(またはSSH)で行う。VNCも含め、GUI環境を起動しているとインストールはできない。(GUI環境が起動しているとエラー画面が出る。)

自分の場合は64bit環境でインストールしており、32bit関係のライブラリが足りなく、インストール途中で、メッセージが出た。念のため、

を実行してから再度runファイルを実行した。

Firewallの設定

このページは機械学習用計算サーバーの構築(インストール編)の下層であり、当該ページ内の順序にインストールされることを想定した内容です。

Ubuntuは初期設定においてFirewallが設定されておらず、全ポートが開放状態である。そのため、まずはFirewallソフトウェアをインストールする。

通常、IPv6は使用しないため、/etc/default/ufwのIPv6設定部分を

と変更する。

デフォルトでは、全ポートを拒否するために

とし、さらにSSH通信のみ許可するために

とする。Webサーバーを公開する場合はここでHTTP(80)とHTTPS(443)などのポートを開放しておく。

設定が終わったら、

で有効化し、

で状態を確認する。以下のようになっていればよい。

もちろん、SSHにアクセスするIPを制限することも可能である自分の使用範囲が特定IPのみからであれば、必ずアクセスIPは制限すべきである。詳細の使い方はこちらを参照いただきたい。基本的にSSHだけ開けておけば、ポートフォワーディングによってだいたいのことは外部からできるので、自分専用であればSSHしかポートを開けないほうが良い。逆にいえば、SSHさえ突破できれば簡単に攻撃されてしまう。セキュリティーアップデートは必ず定期的に実行する必要がある。また、話はずれるが、ネットサーフィンによって自らウイルスを拾ってきてしまっては元も子もない。サーバーはサーバーとして、デスクトップ用途での利用は控える必要がある。

VNC Serverの設定

このページは機械学習用計算サーバーの構築(インストール編)の下層であり、当該ページ内の順序にインストールされることを想定した内容です。

以下のコマンドでインストールを行う。

VNCはたとえパスワードを掛けたとしても簡単に解析されてしまう。そのため、インターネット越しで通信する場合はSSH上で通信する。

を実行すると、パスワードを聞かれるので入力すると、設定される。パスワードを変更したい場合は

を実行する。初期設定ファイルが生成されたので、変更を加える。

とし、最終行に

を追加し、MATE Desktopが立ち上がるようにする。(xstartupはvncスタート時に実行されるコマンドである。)

起動時にVNCを自動起動させたい場合は、

のマーク部分を追加する。

なお、VNCを終了したい場合は、

とする。最後の数字は、VNC環境のディスプレイ番号である。複数個環境を起動することができる。デフォルト設定であれば、それぞれポート番号は5900 + ディスプレイ番号となる。(例:ディスプレイ番号が1であれば5901番ポート)

OpenSSHの設定

このページは機械学習用計算サーバーの構築(インストール編)の下層であり、当該ページ内の順序にインストールされることを想定した内容です。

SSHサーバーのインストールを行っていない場合は以下のコマンドで行う。

ルーターの全ポート閉じていれば細かいことは気にしなくて問題なさそうであるが、Webサーバーとしても用いたい。セキュリティーの改善のため、以下の設定をした。ここではデフォルトからの変更点のみを示す。設定ファイルは

で変更する。

ポート番号の変更

ポート番号が22のままだと、攻撃のターゲットになりやすい。番号を変えたとしてもポートスキャンをすればバレるわけだが、やらないよりはましである。

ルートログインの禁止

ルートログインされてしまってはおしまいなので、禁止しておく。

公開鍵暗号方式のみ許可

パスワードのみの認証は危険である。パスワード認証を許すと一気に総当たり攻撃に弱くなるため、その手段を潰しておくことが必要である。その為の設定である。

ログインユーザーの制限

通常使用するログインユーザーのみログイン可能とする。

ポートフォワーディングの許可

VNCの通信をネットワーク越しにするのは非常に危険である。そのため、セキュアなSSHを通じて暗号化通信をすることでよりセキュアにできる。そのための設定である。詳細はVNCの項に示す。

これでもセキュリティ対策は十分とは言えないので、ポートノッキングや、踏み台サーバーIPの指定などの併用をおすすめする。また、私はセキュリティに詳しいわけでもなんでもないので、自分で調べることをおすすめする。

公開鍵暗号の設定

MacまたはLinux上(Ubuntu上でも良い)で、

と入力すると、ファイル名とパスフレーズを聞かれる。仮に秘密鍵が流出したときの対策として、パスフレーズを11文字以上で設定する。その理由はこちら

すると、

公開鍵: ~/.ssh/id_rsa.pub
秘密鍵: ~/.ssh/id_rsa

というファイルができている。(ファイル名を指定した場合は「id_rsa」の部分が異なる)

公開鍵を、サーバーの ~/.ssh/に配置し、

を実行する。

秘密鍵はクライアントのPCの ~/.ssh/に配置する。秘密鍵は絶対に流出させてはならない。

最後に、権限を設定する。サーバー上で、

を実行する。

最後に、SSHで接続できるか確認して終了となる。