2013年9月6日金曜日

[EC2]Amazon EC2へのSambaの導入

Amazon AWSの販促資料に、月額10円/GBからファイルサーバーというのがありましてそれがどのようなものなのかはイメージがついていない(追記)のですが、1年間無料の枠内でファイルサーバーを運用してみようとSambaを導入するお話です。

そうしたら途中で躓きました。

#もちろん、ポートをIP限定で開放しております。

前提

samba 4.0.9

共有は以下

  • ログインユーザのホームディレクトリ
  • /mnt/home (ファイルサーバー用のEBSボリューム)

プリンタの共有はしない

Amazon Linux AMIを使っています。

$ uname -a
Linux ip-172-31-25-78 3.4.43-43.43.amzn1.x86_64 #1 SMP Mon May 6 18:04:41 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

準備

1.python26-devel.x86_64 をインストールします。configure中にpythonのヘッダファイルを利用するので、これがないとconfigureで失敗します。ここで躓きました。
# yum install python26-devel.x86_64

2.「Samba3.0インストール手順」にしたがって、libiconvをインストールします。

ビルドとインストール


1.tarballをダウンロードします。

2.configureを実行します。引数は以下のとおりで、上記blog(Samba3.0インストール手順)を参考にしました。

$ ./configure --prefix=/usr/local/samba --with-privatedir=/etc/samba --with-configdir=/etc/samba --with-libiconv=/usr/local --with-automount --with-pam --with-pam_smbpass --with-syslog > configure.log

3.make, make installを実行します
$ make
# make install

設定

ファイルのコピー

tarballの packaging/RHEL/setupディレクトリ内のファイルを、 /etc/sambaに移動します
# cp packaging/RHEL/setup/* /etc/samba

smb.confの設定

サンプルのsmb.confのこのブロックを流用して、/mnt/homeへの設定をしてしまいます。

[myshare]
   comment = Mary's and Fred's stuff
   path = /usr/somewhere/shared
   valid users = mary fred
   public = no
   writable = yes
   printable = no
   create mask = 0765
変更後

[myshare]
   comment = xxxxxxxxxxxx
   path = /mnt/home/
   valid users = username
   public = no
   writable = yes
   printable = no
   create mask = 0765


ユーザーグループの編集

sambaでログインするユーザをec-userグループに登録します。後述するパーミッションの都合に寄るものです。

# usermod -G ec-user username


領域のフォーマットとマウント

今回ファイルサーバーに使用する領域はAmazonEBSから新規に領域を確保して、EC2のインスタンスに登録しています。ただし、このままでは使用できないので、フォーマットして、マウントします。

# mkfs /dev/xvdb

EBS で hda となっていた領域はEC2上では、 /dev/xvda
      hdb となっていた領域はEC2上では、 /dev/xvdb というデバイスファイルになっています。

マウントは毎回実行しなければならないので、 /etc/rc.local に記載することにしました。

マウント先を作成:
# mkdir /mnt/home

rc.localに追加:
mount /dev/xvdb /mnt/home

パーミッションの編集

他のユーザーに編集されないよう、所有者とグループのみアクセス権を与えました。

以下の内容を/etc/rc.localに記載します。
chown ec2-user:ec2-user /mnt/home
chmod 706 /mnt/home


ポートの開放

以下の4つのポートを開放します。
sambaで利用するポート」 こちらのblogを参考にしました。


  1. AWSのConsoleからSecurity Groupを選択します
  2. 一覧からsambaをインストールしたEC2インスタンスが登録されている利用しているセキュリティグループを選択します
  3. 以下のポートを開放するルールを作成します。


    • 137/udp
    • 138/udp
    • 139/tcp
    • 445/tcp
udpについては閉じることも検討しなければならないかもしれません。

init.dへの追加


  1. /etc/samba(にコピーした)smb.initを、/etc/init.dへコピーします
  2. smbにリネームします
  3. smbのパーミッションを755に変更します
  4. smbを編集し、smb.conf、smbdおよびnmbdのパスを絶対パスで指定します
  5. chkconfig によって起動時に実行されるようにします
    # chkconfig smb on
  6. samba を開始します
    # ./smb start


接続試験

Windowsから、「\\amazonEC2のIPアドレス」のUNC形式でアクセスして認証の後に接続できることを確認します。

Apache2の設定

ほぼデフォルトを準用できました。

httpd.confの格納場所は /etc/httpd/conf でした。(環境によって異なります)

ホームディレクトリから、ドキュメントルートへシンボリックリンクを張る

# ln -s /var/www ~/www

init.dに登録


chkconfigコマンドで登録し、Linux起動時にApache(httpd)を起動するようにします。

/etc/init.d に移動して、chkconfigを実行
# chkconfig httpd on

ランレベルごとに起動するかどうかの確認は --list オプションをつけます。
# chkconfig --list httpd

表示確認


Amazon EC2のパブリックIPをブラウザに入力して、ApacheのWelcome画面が表示されればOK。

2013年9月5日木曜日

ぼやきです

starred.jsonをDBから扱えるようにしたほうが良いのか…。

[linux]RPMコマンド

インストール


# rpm -ivh rpmファイル名

インストール済みrpmリストの取得


# rpm -qa

検索


# rpm -qa | grep パッケージ名

削除


# rpm -e パッケージ名

依存関係を無視して削除


# rpm -e --nopdeps パッケージ名

[EC2] Amazon EC2へ HTTP+FTP導入

#ポート番号を個別具体的に絞り、自環境のグローバルIPをのみ開放して作業しております。


Apacheのインストール

yumを使ってインストールしました。

# yum install apache2

(省略) [y/N]  : yを押す

その他の設定

proFTPdのインストール


tarballからビルドしてインストールしました。

$ ./configure --prefix=/usr/local/proftpd
$ make
# make install

/usr/local/proftpd/etc/proftpd.conf の設定ファイルを編集します。

User/Group各ディレクティブを nobodyからftpに変更
# Set the user and group under which the server will run.
User                    ftp
Group                   ftp
proFTPdのユーザプロファイルを使っていないので、実在するユーザーにしないと起動しない。

DefaultRoot ~ のコメントを外し、有効化。
DefaultRoot ~     (行先頭の " # " を外す)
AnonymousFTPは運用しないので、のブロックはコメントアウトする。

Play Frameworkのインストール

  1. zipをダウンロードします
  2. 解凍します
  3. /usr/localに配置します
  4. usr/local/play-2.1.3にパスを通します
いざgrstarをpullしてきて実行しようと思ったところ…エラー。(別記事)