システムワイドにnvmを入れる
Node.jsのいろいろなバージョンを使う際のnvm、特定ユーザのホームディレクトリ配下に入れる資料は多いのだけれど、システムワイドに入れる資料が少なめであるのと、それをansibleでやる場合にちょっとコツが必要だったりもするのでメモ(VagrantのBox CentOS65やさくらVPSの標準OSで動作確認済。確かAmazonLinuxでもOKだった気がする)。
「ansibleでやる場合にちょっとコツが必要」というのは、システムワイドにやるために「/etc/profile.d/nvm.sh」に初期設定を入れていて、全ユーザがログインした際にそれが発動するようにしているものの、(ssh接続でリモートでansibleを実行している場合)sourceとかで再読込しても後続タスクでは有効にはならないので、「/bin/bash -lc "..."」などとして明示的にログインシェルで実行されるする必要がある。
あと、この方法で入れた場合、その後のコマンドでも「sudo nvm install ...」などとするとやはり上記と同じ状態になるので、nvmの管理コマンドを使う際などは一回rootになって実行した方がよい。
以下、ansibleのplaybook片だけれども「ansible使わないよ!」という向きはコマンドラインに読み替えて実行するよろし。
vars/development.yml
--- nvm: nvm_dir: /opt/nvm node: version: 0.12.7
roles/nodejs/tasks/main.yml
--- - name: check nvm stat: path={{ nvm.nvm_dir }}/nvm.sh register: nvm_sh - name: install nvm shell: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.25.4/install.sh | bash environment: NVM_DIR: "{{ nvm.nvm_dir }}" when: not nvm_sh.stat.exists - name: copy global profile for nvm template: src=nvm.sh.j2 dest=/etc/profile.d/nvm.sh when: not nvm_sh.stat.exists - name: check node shell: /bin/bash -lc "NVM_DIR={{ nvm.nvm_dir }} nvm ls | grep {{ node.version }}" register: node_installed failed_when: node_installed.rc not in [0, 1] - name: install node shell: /bin/bash -lc "NVM_DIR={{ nvm.nvm_dir }} nvm install {{ node.version }}" when: node_installed|failed - name: set default node shell: /bin/bash -lc "NVM_DIR={{ nvm.nvm_dir }} nvm alias default {{ node.version }}" when: node_installed|failed
roles/nodejs/templates/nvm.sh.j2
export NVM_DIR={{ nvm.nvm_dir }} if [[ -s {{ nvm.nvm_dir }}/nvm.sh ]] ; then source {{ nvm.nvm_dir }}/nvm.sh fi