2016-12-13 3 views
0

新鮮な仮想マシンにrbenvをインストールするためにシェルスクリプトを作成しましたが、誰もがうまく動作しているようですが、rbenvがインストールに失敗するようです。インストール中に何か問題が発生した場合は、インストールを再起動してください。シェルスクリプトを通してrbenvをインストールする

いくつかの注意:

  • これは私が>&$log_fd...
  • events.log出力をファイルにリダイレクトしています。これは、すべてのダイアログ whiptail
  • を介して行われ、より大きなスクリプト
  • のほんの一部であります

これは私が現在持っているものです:

set_rbenv(){ 
    # install rbenv 
    RUBY_VERSION="2.1.4" 
    RBENV_ROOT="/root/.rbenv" 
    PROFILE="/root/.bashrc" 

    # check if rbenv is installed 
    if [[ ! `which rbenv` ]]; then 

    if [[ ! -d "$RBENV_ROOT" ]]; then 
     echo "Cloning rbenv..." >&$log_fd 2>&1 
     git clone https://github.com/rbenv/rbenv.git $RBENV_ROOT >&$log_fd 2>&1 
    fi 

    if [[ ! -d "$RBENV_ROOT/plugins/ruby-build" ]]; then 
     git clone https://github.com/rbenv/ruby-build.git $RBENV_ROOT/plugins/ruby-build >&$log_fd 2>&1 
    fi 

    if [[ ! `grep -e '/.rbenv\/bin' $PROFILE` ]]; then 
     echo "rbenv not in PATH ... adding..." >&$log_fd 2>&1 
     echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> $PROFILE 2>&1 
    fi 
    if [[ ! `grep -e '^\eval "$(rbenv init -)"' $PROFILE` ]]; then 
     echo "rbenv init not in .bashrc... adding..." >&$log_fd 2>&1 
     echo 'eval "$(rbenv init -)"' >> $PROFILE 2>&1 
    fi 
    . $PROFILE 
    echo "Finished Installing rbenv..." >&$log_fd 2>&1 
    else 
    echo "rbenv already installed... skipping!" >&$log_fd 2>&1 
    fi 

    if [ ! -d "$RBENV_ROOT/versions" ]; then 
    echo "$RBENV_ROOT/versions doesn't exist ... creating..." 
    mkdir $RBENV_ROOT/versions >&$log_fd 2>&1 
    fi 

    if [ ! -d "$RBENV_ROOT/versions/$RUBY_VERSION" ]; then 
    echo "$RBENV_ROOT/versions/$RUBY_VERSION doesn't exist ... creating..." >&$log_fd 2>&1 
    mkdir $RBENV_ROOT/versions/$RBENV_VERSION >&$log_fd 2>&1 
    fi 

    # check if ruby version is installed 
    if [[ ! `rbenv version | grep $RUBY_VERSION` ]]; then 
    echo "installing ruby 2.1.4" >&$log_fd 2>&1 
    rbenv install $RUBY_VERSION >&$log_fd 2>&1 
    rbenv global $RUBY_VERSION >&$log_fd 2>&1 

    if [ ! -d "$RBENV_ROOT/versions/$RUBY_VERSION/etc" ]; then 
     echo "$RBENV_ROOT/versions/$RUBY_VERSION/etc doesn't exist ... creating..." >&$log_fd 2>&1 
     mkdir $RBENV_ROOT/versions/$RUBY_VERSION/etc >&$log_fd 2>&1 
    fi 

    else 
    echo "ruby $RUBY_VERSION already exists... skipping!" >&$log_fd 2>&1 
    fi 
    ((STATUS += 35)) 
    echo $STATUS 
} 

自体をインストールするには、

それがより理にかなっているなど、いつでもrbenvをインストールする場合、新しいVM上で、私はねじ込みだけど、他に何も(ルビー・ビルドのように)行わないでか、$ PATH失敗する可能性がありますがすべてのコマンドを自分のifの文頭に入れて、最初のif which rbenvの外側にあるか、より確実な方法でインストールが正常に完了するようにしますか?

答えて

1

実際にこの作業は、Ansible、Puppet、Chefなどの構成管理ツールを使用して実行できます。無限のIF文をチェックして使用する方法を指定するのではなく、 "何"をチェックして既存のフレームワークを使用するかを指定できます。

- hosts: all 
    remote_user: root 
    tasks: 
    - name: Install the package foo 
    apt: 
     name: foo 
     state: present 
     update_cache: yes 

More information

例えば、Ansibleであなたが使用してFOOの最新バージョンをインストールキャッシュ&を更新しやすいモジュールを指定することができます

関連する問題