Chef Soloローカル開発環境の自動構築  ~Samba環境構築編~

chefでSamba環境を自動構築する方法を記載。
VagrantのProvisioner(プロビジョナー)を活用して環境構築を行う。

※本編は、以下のLAMP環境構築が済んでいることが前提となる。


1. Sambaユーザー用のパスワードを生成
* パスワードはshadow passwordの形式で設定する必要がある。
[openssl passwd -1 パスワード] の形式で入力する。
 openssl passwd -1 smb_user

  

2. Sambaのクックブックを作成
* knife-soloを使ってSambaのクックブックを作成する。
bundle exec knife cookbook create samba -o ./site-cookbooks

 

3. Sambaのレシピを作成
* site-cookbooks/samba/recipes/default.rbに以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー

package "samba" do
  action :install
end

service "smb" do
  action [ :enable, :start ]
  supports :status => true, :restart => true, :reload => true
end

# Sambaユーザーの作成
user "smb_user" do
  comment "smb_user"
  home "/home/smb_user"
  shell "/bin/bash"
  password "シャドウパスワード"
  supports :manage_home => true
  action [:create, :manage]
end

# Sambaサーバーアクセス用ユーザに設定
# pdbedit は -t を指定すると標準入力からパスワードを読み込む
# パスワードは改行区切りで2回出力する
execute 'pdbedit_script' do
  command 'echo -e "smb_user\nsmb_user" | pdbedit -a -t -u smb_user'
end

# ApacheのDocumentRootのユーザー権限をSambaユーザーでアクセスできるように、
# nobodyユーザーに変更しておく(※DocumentRootはセキュリティのため、適宜変更のこと!)
execute 'change_authority' do
  command 'chown -R nobody:nobody /var/www/html'
end

template "smb.conf" do
  path "/etc/samba/smb.conf"
  owner "root"
  group "root"
  mode 0644
  notifies :restart, 'service[smb]'
end

ーーーーーーーーーーーーーーーーーーーーーーーーー

 

4. Sambaのテンプレートを作成
* site-cookbooks/samba/templates/default/smb.conf.erb に以下内容を記述。
ーーーーーーーーーーーーーーーーーーーーーーーーー

[global]
        # Linux側日本語文字コード
        unix charset = UTF-8

        # Windows側日本語文字コード
        dos charset = CP932

        # Linux側日本語文字コード
        display charset = UTF-8

        workgroup = WORKGROUP

        # ログイン時 ユーザー名 & パスワード の認証が必要
        security = user

        # 内部からのアクセスのみ許可
        hosts allow = 192.168. 127.

        # (プリンタ共有無効化)※Sambaでプリンタを共有しない場合
        load printers = no

        # (プリンタ共有無効化)※Sambaでプリンタを共有しない場合
        disable spoolss = yes

[public]
        comment = Public Stuff
        path = /var/www/html
        public = no
        writable = yes
        only guest = yes
ーーーーーーーーーーーーーーーーーーーーーーーーー

  

5. Berksfileにsambaを追記
* Berksfileに以下一文を追加しておく。
cookbook "samba", path: "./site-cookbooks/samba"

 

6. プロビジョニングを再実行
bundle exec berks install --path ./cookbooks

* うまくいかない場合は、以下コマンドを実行
berks vendor ./cookbooks

 

7. Vagrantfileにsambaを追記
* sambaクックブックを実行するようにVagrantfileを編集する。

ーーーーーーーーーーーーーーーーーーーーーーーーー

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.box = "opscode-centos-7.2"
    config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.2_chef-provisionerless.box"

    # IPアドレスの設定
    config.vm.network :private_network, ip: "192.168.33.12"

    # vagrant-omnibusの有効化
    config.omnibus.chef_version = :latest

    config.vm.provision :chef_solo do |chef|
        chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
        chef.json = {
            nginx: {
                env: ["php"]
            },
            php70: {
                timezone: "Asia/Tokyo"
            }
        }
        chef.run_list = %w[

            recipe[yum-epel]
            recipe[apache]

            recipe[php-env::php70]
            recipe[mysql]
            recipe[package]
            recipe[samba]
        ]

    end
end
ーーーーーーーーーーーーーーーーーーーーーーーーー

 

8. 仮想サーバの起動とプロビジョニングを実行
vagrant up --provision