1. asam316

    No comment

    asam316
Changes in title
-Chefのメモ(ファイルコピー、環境変数)
+Chefのメモ(ファイルコピー、環境変数、パッケージ)
Changes in body
Source | HTML | Preview
@@ -1,74 +1,133 @@
最近ChefとServerspecを始めたので、備忘録としてメモを記載。
なるべく`bash`や`execute`以外のResourcesを書く方向で。
-# ファイルのコピー、リネーム
+# 未解決
+
+## 追加したyumリポジトリを参照しない場合がある
+
+`rpmforge`を追加してgitをインストールする。
+
+```rb
+include_recipe 'yumrepo::rpmforge'
+
+# git-1.7.12.4-1がインストールされる
+package "git" do
+ action :install
+end
+```
+
+古いgitをアンインストールして、その後にgitをインストールする。
+
+```rb
+# git-1.7.1-3をアンインストール
+yum_package "git < 1.7.10" do
+ action :remove
+end
+
+include_recipe 'yumrepo::rpmforge'
+
+# rpmforgeではなくbaseを見て、git-1.7.1-3がインストールされる
+package "git" do
+ action :install
+end
+```
+
+リポジトリ追加を最初にするとgit-1.7.12.4-1がインストールされる。
+
+```rb
+include_recipe 'yumrepo::rpmforge'
+
+# git-1.7.1-3をアンインストール
+yum_package "git < 1.7.10" do
+ action :remove
+end
+
+# git-1.7.12.4-1がインストールされる
+package "git" do
+ action :install
+end
+```
+
+素直に`action :upgrade`を使えばいいんですが、理由がよく分からなかったのでメモとして記載。最初に`yum_package`を実行したタイミングで、以降に使用するリポジトリが固定されてしまうのかな?
+
+```rb
+include_recipe 'yumrepo::rpmforge'
+
+# git-1.7.12.4-1がインストール/アップデートされる
+package "git" do
+ action :updrade
+end
+```
+
+# 解決済み
+## ファイルのコピー、リネーム
レシピから転送するのは`cookbook_file`でいいとして、対象のサーバ上のファイルをコピー、リネームする。(バックアップ等の用途)
-## ファイルのコピー
+### ファイルのコピー
例)/etc/profileのコピー(/etc/profile.bak)
```rb
file "/etc/profile.bak" do
content IO.read("/etc/profile")
end
```
-## ファイルのリネーム
+### ファイルのリネーム
例)/etc/httpd/conf.d/welcome.confをwelcome.conf.bakにリネーム
コピーした後に元のファイルを消すしかない?それか`execute`で`mv`を実行するか。
```rb
file "/etc/httpd/conf.d/welcome.conf.bak" do
content IO.read("/etc/httpd/conf.d/welcome.conf")
end
file "/etc/httpd/conf.d/welcome.conf" do
action :delete
end
```
-# 環境変数の設定
+## 環境変数の設定
JBossを動作させるために`JAVA_HOME`を設定したり、`gem install pg`を実行するために、`/usr/pgsql-*.*/bin`を`PATH`に追加する。(pg_configのパスを通すため)
`/etc/profile.d`ディレクトリ内にシェルを作成する。
-## 環境変数の値がレシピに依存しない場合
+### 環境変数の値がレシピに依存しない場合
JAVA_HOMEの値は`readlink -m $(which java)`で取得できるので、cookbook_fileで静的ファイルを転送する。
・recipe
```rb
cookbook_file "profile-java.sh" do
path "/etc/profile.d/java.sh"
end
```
・files/default/profile-java.sh
```bash
JAVA_PATH=`readlink -m $(which java)`
export JAVA_HOME=${JAVA_PATH%/*/*}
```
-## 環境変数の値がattributes等に依存する場合
+### 環境変数の値がattributes等に依存する場合
パスが`/usr/pgsql-*.*/bin`(*.*はバージョン)の場合、バージョンはパラメータによって変わるので`template`で転送する。
レシピの中でシェルコマンドでpg_configのパスを取得して、その値を`template`から参照したりできるんですかね・・・?
・recipe
```rb
# 9.2の場合、/etc/profile.d/postgresql92.shを作成
template "/etc/profile.d/postgresql#{short_version}.sh" do
source "profile-postgresql.sh.erb"
end
```
・templates/default/profile-postgresql.sh.erb
```erb
# PATHに/usr/pgsql-9.2/binを追加
PGSQL_PATH=/usr/pgsql-<%= node['postgresql']['version'] %>/bin
export PATH=$PATH:${PGSQL_PATH}
```