####0. 序文
はい、突然 daian183さんに記事を投稿せよと言われて、とりあえずQiitaアカウントを開設し困っている今日この頃です。
他のアドベントカレンダー担当者が真面目な話題を提供している中、本日はAutofsと言うLinuxのマウントツールについて珈琲ブレイク的にご紹介いたします。(珈琲でもJavaの話でもありません)
『今更Autofsか!』と突っ込まれそうですが、以下の観点で考えると実は需要があるんです。
No. | 本記事の対象者 |
---|---|
1 | クラウド環境や仮想環境を利用している |
2 | クラウドの利用費用や仮想環境のリソース消費を少しでも減らしたい |
3 | Linux、Windows混在環境がある |
4 | LinuxからWindowsへファイルを置きたい(リリースしたい) |
要はこんな環境ですね。
Windows1
|
Linux --- Windows2
|
WindowsN
今回使用したOSは以下の通りです。
No. | OS |
---|---|
1 | CentOS7 |
2 | Windows2016 |
設定上OS差異の少ないツールですが、ご承知おきください。
※利用用途にもよりますが、AWSでもt2.small程度のインスタンスでうん十台とautofsでマウントしても動いていた実績はあります
最近、Jenkins等々でビルド後にリリースまで行ってしまうのが微妙に流行っています。(本記事ではJenkins等々の環境をリリースシステムと呼ぶことにします)だがしかし、Linux、Windows混在環境の場合、リリース先がLinuxであればその都度ssh等でファイルを撒けば良いのですが、Windowsでは基本的にsshがインストールされていません。だったら『CIFSでマウントすれば良いではないか!』とおっしゃる方もいるかもしれませんが、マウント元のサーバはマウント先のWindowsサーバのノード数に応じてサーバ資源が消費され、常時CIFSマウントするのは望ましくありません。そこで、マウント要求(マウント先への通信)がある度にマウントをしてくれるAutofsの登場です。
####1. 設定概要
今回は以下の流れで設定していきます
- Windowsにて共有フォルダアクセス用ユーザの作成
- Windowsにて共有用フォルダの作成
- Windowsにて共有フォルダのアクセス権追加
- LinuxにてWindows共有フォルダへマウントを行い疎通確認
- LinuxにてAutofsのインストール
- LinuxにてAutofsの設定
- LinuxにてAutofsを用いてWindows共有フォルダへマウントを行い疎通確認
では、早速設定方法についてご案内いたします。
####2. WindowsサーバにてWindowsの共有フォルダを作成
#####2.1. 共有フォルダ用ユーザの作成
######2.1.1. コマンドプロンプトの実行
コマンドプロンプトにて以下のコマンドを実行してください。
※ユーザ名、パスワード、名前、コメント等は適宜変更してください
net user jkuser01 password /add /fullname:"jenkins file sharing user" /comment:"リリースシステムファ
イル共有用"
#####2.2. 共有用フォルダの作成
######2.2.1. コマンドプロンプトの実行
コマンドプロンプトにて以下のコマンドを実行してください。
※Windowsの共有フォルダ対象を"d:\winshare"としています
mkdir d:\winshare
#####2.3. 共有フォルダのアクセス権追加
######2.3.1. コマンドプロンプトの実行
コマンドプロンプトにて以下のコマンドを実行してください。
※Windowsの共有フォルダ対象を"d:\winshare"、アクセス可能ユーザを"jkuser01"、アクセス権を"変更"としています
net share winshare=d:\winshare /grant:jkuser01,"change"
####3. LinuxサーバにてWindowsサーバの共有フォルダをマウント
#####3.1. 疎通確認
######3.1.1. マウントの実行
リリースシステムサーバのシェルにて以下のコマンドを実行してください。
sudo mount -t cifs -o username=jkuser01,password=password //リリースシステムサーバのIPアドレス/winshare /mnt/
マウントできれば通信可能です、出来なければデフォルトではWindowsのインバウンドTCP/445とリリースシステムサーバのアウトバンドTCP/445を解放してください。
疎通完了後、アンマウントを忘れずに実施してください。
sudo umount /mnt/
#####3.2. Autofsのインストール
######3.2.1. yumにてAutofsをインストール
以下のコマンドを実行してください。
※既に該当パッケージがインストール済の場合、インストールは不要です
sudo yum install autofs
sudo yum install cifs-utils
※インターネット経由でyumが使えない環境の場合、お使いのLinuxと同じLinuxをインターネットに接続できる状態で
sudo yum install --downloadonly autofs
sudo yum install --downloadonly cifs-utils
とコマンドを実行すると
/var/cache/yum/x86_64/latest/"リポジトリ名"/packages/
辺りにファイルがダウンロードされるので、該当rpmをインストールしてください。
※今時aptitudeを使わないのかとか言う突込みは無しでお願いします、daian183さんは赤い帽子派です!
#####3.3. Autofsの設定
######3.3.1. Autofsの自動起動設定
以下のコマンドを実行し、Autofsのサービス自動起動設定をしてください。
サービスの起動確認
systemctl status autofs
サービスが起動していなければ起動する
systemctl start autofs
サービスを自動起動設定する
sudo chkconfig autofs on
######3.3.2. Autofsの設定ファイル編集
######3.3.2.1. "auto.master"設定ファイルのバックアップ
編集前のファイルをバックアップします。
sudo cp /etc/auto.master /etc/auto.master.org
######3.3.2.2. "auto.master"ファイルの編集
"auto.master"を編集します。
sudo vi /etc/auto.master
以下3行をコメントアウトしてください。※先頭文字"#"でコメントアウトです
/misc /etc/auto.misc
/net -hosts
+auto.master
######3.3.2.3. "cifs.autofs"ファイルの作成
以下のコマンドを実行し、"cifs.autofs"へ設定を追記してください。
※"auto.master"でも同じ設定は可能ですが、今回は設定ファイルを分けます
sudo touch /etc/auto.master.d/cifs.autofs
sudo vi /etc/auto.master.d/cifs.autofs
/mnt/cifs /etc/auto.cifs --timeout=60 --ghost
/mnt/cifs : マウント先の指定
/etc/auto.cifs : 設定ファイルの指定
--timeout=60 : 60秒間通信が無ければマウントを解除する
--ghost : 未アクセス状態ではマウントしない
忘れないうちにマウント用のフォルダの作成をします、シェルにて以下のコマンドを実行してください。
mkdir /mnt/cifs
######3.3.2.4. マウント用アカウントの設定
今回はroot権限でマウントを実行します、以下の通り設定してください。
※rootは読み書き可、root以外はアクセス不可
sudo touch /root/.winid
sudo chmod 600 /root/.winid
".winid"ファイルを編集します。
sudo vi /root/.winid
共有フォルダ用に作成したユーザ名/パスワードを記載します。
username=jkuser01
password=password
######3.3.2.5. hostsファイルの編集
マウント先のサーバの名前解決が出来ない環境であれば、hostsファイルを編集した方が設定が楽です。
※必須ではありません
hostsファイルを編集する場合、以下のコマンドを実行してください。
vi /etc/hosts
以下の例に習ってhostsにレコードの追記をしてください。
IPアドレス ホスト名 ホスト名別名(あれば)
######3.3.2.6. マウント先の設定
マウント先のホストを設定します。"cifs.autofs"に追記した"auto.cifs"に対して設定します。
sudo vi /etc/auto.cifs
マウント時の名前N -fstype=cifs,rw,noperm,credentials=/root/.winid ://ホスト名1orIPアドレス/winshare
マウント時の名前M -fstype=cifs,rw,noperm,credentials=/root/.winid ://ホスト名2orIPアドレス/winshare
マウント時の名前N,M : マウント時に表示されるパスになります
-fstype=cifs : 実は他のプロトコルもマウントできますが、今回はWindowsですのでcifsを指定します
rw : 権限の設定です(r : 読み込み可 ; w : 書き込み可 ; x : 実行可※今回はrwで設定しています)
noperm : これを付けるとWindows上のアクセス権設定が優先され、rwxの設定は無視されます
credentials : 先ほど作成したID/PWファイルのパスを指定します
://XXX : マウント先のパスを指定します
######3.3.2.7. サービスリブート
Autofsのサービスをリブートし、設定を反映させます。
sudo systemctl restart autofs
####4. 動作確認
#####4.1. Linuxより共有フォルダへアクセス
マウント先に指定した"/mnt/cifs"以下に新しくフォルダが出来ています。このフォルダ名は"auto.cifs"で指定した"マウント時の名前M"、"マウント時の名前N"が表示されます。
ls -atrl /mnt/cifs/
今回Windows側の設定は変更可になっているので、ファイルを書き込んで見ましょう、書き込みできるはずです。
これにて本日の珈琲ブレイクは終了です。明日からはまた読み応えのある記事に変わると思います、皆さんお付き合いをお願いいたします。