2015年5月17日日曜日

2015/05/16(土) 計算機環境の整備

●計算機環境の整備
★FreeNAS 9.3のアップデート
ファイルサーバ moonlight は現在FreeNAS 9.3で稼働しており、更新作業は簡単になったはずであったが、更新処理が途中で止まってしまう現象が起きてしまい、それ以上の更新がうまくいかなくなっていた。昨日も試したがうまくいかなかった。そこで思い切ってインストールしなおすことにした。

(1) 設定の保存
昨夜更新作業を行った際に保存した設定データベースがデスクトップPCに残っていることを確認した。恐らくこれは[システム]-[基本設定]の[設定のダウンロード]から保存できるものと同じはずである。

(2) 最新版のISOイメージの入手
FreeNASの公式サイトから FreeNAS-9.3-STABLE-201504100216.iso をダウンロードした。

(3) インストール
HP ProLiant MicroServer N54Lのリモートアクセスカード(RAC)を利用して(2)のISOイメージを仮想ディスクとしてマウントし、この仮想ディスクからN54Lを起動して、その内部に挿してあるUSBメモリにFreeNASをインストールした。途中で何度も止まった。FreeNASのインストールでは時間がかかることがあるので、今回も時間がかかっているのかそれとも本当に止まっているのかを見極めるためにずいぶん待った。その上でとうとうあきらめて再起動をかけるということを3回ほど繰り返した。今回の事例では、インストールが止まる時点がそのたびに異なっていたので本当に止まっていたのであろう。
まずは普段使わないRACを疑い、ISOイメージをDVD-Rに焼いて外付け光学ドライブからインストーラを起動してみたが、改善しなかった。そこで次に安物のUSBメモリを疑い、N54L内部に挿していたそれをBuffaloの8 GBのものに取り換えた上でインストールを行ったところ、ようやく成功した。

FreeNASのインストールが終わって起動するとウィザードが開いたが、どうやら余計なことをしてくれそうなので途中でキャンセルした。

(4) 設定の復活
[システム]-[基本設定]の[設定のアップロード]に(1)の設定データベースを読み取らせてしばらく待つと設定が元に戻った。
これで最新の安定版のFreeNASが稼働している状態になった。

★サーバ間のホームディレクトリの共有
ユーザ認証を学部のサーバにお任せすることはあきらめたので、その代わりに研究室内で学生に使わせるサーバ aurora や dusk (以下では便宜的に周辺サーバと呼ぶ。いずれもCentOS 7)のホームディレクトリをNFSでファイルサーバ moonlight (FreeNAS)に集約することにした。

(0) 方針
学生が使うのは次の機能のみであると想定する。SSHやFTPを使わせることは考えない。

  - ファイルサーバ moonlight (FreeNAS 9.3) ... Samba
  - 周辺サーバ aurora, dusk (CentOS 7) ... Webサーバ, MariaDB

Webコンテンツをサーバに載せたいときには、まずそのコンテンツをWindows PCからSamba経由でファイルサーバ moonlight に置く。ファイルサーバに置かれたWebコンテンツはNFS経由で周辺サーバからも共有される。周辺サーバではhttpdが稼働してWebコンテンツをネットワークに公開する。

この方法なら、ファイルアクセスに関して言えば学生のパスワードを記憶させるのは moonlight のみで済む。周辺サーバでは私が /etc/passwd にユーザの一覧を貼り付けておくだけでよい。ファイルサーバにあるディレクトリを周辺サーバにマウントする方法としては、セキュリティの観点からあまり好ましくはないが比較的慣れているNFSを選択した。

MariaDBに関してはサーバごとにパスワードを作る必要があるが、このパスワードはどうせPHPスクリプト内に平文で書いてしまうようなものであるから、ファイルアクセスに使うものと共通化するわけにはいかない。これについては今日は何の作業もしなかった。

(1) ファイルサーバ moonlight (FreeNAS)内のディレクトリの準備
これまではファイルサーバ moonlight のホームディレクトリ /hogehoge/home/ユーザIDCIFS の homes セクションによって共有していた。いったんFreeNASのGUIからCIFSを停止した上で、SSHでログインしてこのディレクトリ構成を次のように変更した。

  - /hogehoge/home-protected/ユーザID
    o moonlight のホームディレクトリ。
    o 非公開ファイル置き場。

  - /hogehoge/home-common/ユーザID
    o 周辺サーバのホームディレクトリ。
    o Webコンテンツ置き場。

自分のホームディレクトリは /hogehoge/home の下から /hogehoge/home-protected の下に変更した。
このとき、FreeNASのGUIからユーザのダイアログを開いて「ホームディレクトリ」を変更すると、なかなか処理が終わらず、焦れてキャンセルした。調べてみるとどうやらホームディレクトリ下のファイルを全て新しいホームディレクトリ下にコピーしていたようであった。大量にあるファイルのコピー完了は到底待ちきれないので、先にファイルを手作業で mv しておいて、あらためて「ホームディレクトリ」を変更するとすぐに終わった。

また、FreeNASのユーザアカウント設定においては学生のホームディレクトリは全て /nonexistent であり、学生のユーザIDと同じ名前のディレクトリは全て単なるディレクトリである。したがって、学生のユーザアカウントについてはホームディレクトリの変更作業は発生せず、単に既存のディレクトリを home-protected 下に mv しただけであった。

(2) ファイルサーバ moonlight (FreeNAS)におけるNFSの設定
FreeNASのGUIで [共有]-[Unixファイル共有(NFS)]-[UNIX共有(NFS)の追加] をクリックしてダイアログを開き、パスとして /hogehoge/home-common を入力した。さらに [高度な設定] をクリックしてダイアログを拡大し、 Authorized IP addresses or hosts にNFSクライアント(すなわち周辺サーバ)のIPアドレスを列挙した。このとき、IPアドレスをカンマ区切りにしたところあとでマウントがうまくいかなかった。IPアドレスを半角空白で区切るように書き換えたところうまくいった。

(3) 周辺サーバ(CentOS 7)におけるNFSクライアントの設定
NFSクライアントとなる各サーバにもともと存在する /home を、ファイルサーバ moonlight 内の home-commonにすげ替えるので、その前に /home 下の中身は退避したり削除したりした。
次に nfs-utils を導入した。

yum install nfs-utils

この直後に mount を実行したところ失敗した。あれこれ調べた挙句に次のようにしてrpcbindとnfs-lockの開始を行った。

systemctl enable rpcbind
systemctl enable nfs-lock
systemctl start rpcbind
systemctl start nfs-lock

上の4行を実行するといろいろと文句を言われるが一応は機能しているようで、よく解らない。とにかく次に再度 mount してみるとうまくいった。

mount -t nfs moonlightのFQDN:/hogehoge/home-common /home

最後に /etc/fstab にエントリを追加し、CentOS自体を再起動してマウントが維持されることを確認した。

moonlightのFQDN:/hogehoge/home-common /home nfs defaults 0 0

(参考)
・HowtoForge: NFS server and client installation on CentOS 7
・Server World: NFSクライアントの設定 (CentOS)

(4) 周辺サーバ(CentOS 7)におけるSambaの停止
周辺サーバにおいてSambaは不要になったので停止した。

systemctl stop smb
systemctl stop nmb
systemctl disable smb
systemctl disable nmb

(5) ファイルサーバ moonlight (FreeNAS)におけるCIFSの設定
FreeNASのGUIで [共有]-[Windows (CIFS) Shares]を開き、これまでホームディレクトリの親ディレクトリとして指定していたパスを /hogehoge/home から /hogehoge/home-protected に変更した(下記a)。
また、これらのホームディレクトリの親ディレクトリ自体に私がアクセスするために作っていた Home セクションの名前は Home-protected に変更した(下記b)。
次に、新たに Home-common セクションを追加し、パスには /hogehoge/home-common を指定した(下記c)。さらに [高度な設定] をクリックしてダイアログを拡大し、補助パラメータに

path=/hogehoge/home-common/%U

と入力した。これによって、各ユーザが moonlight の Home-common という共有フォルダにアクセスしたときの実体は /hogehoge/home-common/ユーザID ということになる。
これらの変更によって moonlight におけるCIFSによる共有設定は次のようになった。

  a) homes セクション
    o 実体は /hogehoge/home-protected/ユーザID
    o Windows PCから見える共有フォルダ名はユーザIDと同じ。
    o ユーザ本人のみが読み書きできる。

  b) Home-protected セクション
    o 実体は /hogehoge/home-protected
    o Windows PCから見える共有フォルダ名は Home-protected
    o 管理目的のため教員(私)のみが読み書きできる。

  c) Home-common セクション
    o 実体は /hogehoge/home-common/ユーザID
    o Windows PCから見える共有フォルダ名は Home-common
    o ユーザ本人のみが読み書きできる。
    (5/17追記: セクション名をHome-commonからMyHomeに変更した)

共有フォルダ Home-common については、中身はユーザごとに違うのに見かけ上の名前はどのユーザから見ても同じになってしまう。少し気にくわないが、大きな問題ではないので目をつぶることにした。
なお、上記a)に対してb)があるようにc)に対しても /hogehoge/home-common 全体が見えるセクションがあるべきであろうが、まだc)に全く中身がない現時点では必要ではないので、これは後回しにする。

(6) ファイルサーバと周辺サーバにおけるユーザID (UID)の統一
ファイルサーバ moonlight と周辺サーバとでは自分のUIDは1番違いであった。NFSを使う上ではUIDを統一しておくのが都合がよいが、ファイルサーバにある大量のファイルのUIDを全て付け替えるのは大変であるから、周辺サーバのほうをファイルサーバに合わせる作業を行った。
まず /etc/passwd や /etc/group を編集して自分のUIDおよびグループID (GID)を moonlight のUIDとGIDに揃え、また find, chown, chgrp を使ってファイルのUIDとGIDを付け替えた。

なお、NISのような仕組みを使うことを考えなくもなかったが、かえって面倒になりそうであるのでやめた。

(7) 学生のユーザアカウントの追加
ファイルサーバ moonlight に学生のユーザアカウントを作った。GIDは全員のものを統一した。

また、周辺サーバの /etc/passwd と /etc/group にもUID, GIDを追加した。ただし、周辺サーバのうち dusk はほとんどの学生が使用するが、 aurora を使用するのは私自身のほかには1名のみの予定であり、両方のサーバに全学生のUIDを追加する必要はない。したがって、サーバごとにそれを使用する学生のUIDのみを passwd に書いた。

(8) 周辺サーバ(CentOS 7)におけるApache HTTP Serverの設定
/etc/httpd/conf.d/userdir.conf を編集して、httpdによって公開されるディレクトリを ~/public_html ではなくその下のサブディレクトリに変更した。サーバごとにこのサブディレクトリの名前を違うものにした。したがって、学生はサブディレクトリを使い分けることでサーバごとに異なるWebコンテンツを用意することができる。
設定変更後は

systemctl restart httpd

を行った。

(9) 周辺サーバ(CentOS 7)におけるSELinuxの設定
NFSとhttpdがらみのものを有効にした。

setsebool -P use_nfs_home_dirs on
setsebool -P httpd_enable_homedirs on
setsebool -P httpd_use_nfs on

また、Sambaがらみのものを無効にした。

setsebool -P samba_enable_home_dirs off

その上で、デスクトップPCからファイルサーバ moonlight の共有フォルダにアクセスしたり、Webブラウザで周辺サーバにアクセスしたりして、各設定がうまくいっていることを確認した。

★仮想サーバの保守
仮想サーバ aurora, dusk, nimbus で sudo yum update を実行した。再起動して動作を確認した。

★CentOS 7素体用仮想マシン nimbus の保守
上述の変更の一部を nimbus にも適用した上でVMware vCenter Converterでバックアップをとった。

ここまでできたら今後卒業研究や自分の研究のためにサーバを増やす作業もかなり楽になるのではないかと思う。少なくとも卒研実験用の dusk に対応する卒研本番用の dawn はこの nimbus のコピーで済むであろう。

●その他
昨日の研修会のアンケート用紙に記入した。いろいろ思うことはあったが、かなりの時間をかけて「解りやすかった」という1行しか書けなかった。月曜に学部事務室に提出する。

0 件のコメント:

コメントを投稿