簡體   English   中英

通過Shell腳本安裝rbenv

[英]Installing rbenv through shell script

我創建了一個shell腳本,將rbenv安裝到新的虛擬機上,每個人似乎都工作正常,但是,有時,rbenv似乎無法安裝。 我想在整個過程中添加一些額外的錯誤檢查,以確保安裝成功,如果失敗,請重新啟動安裝。

一些注意事項:

  • 這只是較大腳本的一小部分
  • 這一切都是通過whiptail對話框完成的
  • 我將輸出重定向到events.log文件>&$log_fd...

這是我目前擁有的:

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
}

雖然安裝本身可能隨時會在新VM上失敗,但是如果安裝rbenv會讓我感到困惑,但其他操作(如ruby-build)或$ PATH等卻無濟於事。

僅將每個命令本身包含if語句的if which rbenv if語句之外, if which rbenv ,還是有一種更可靠的方法來確保安裝成功完成?

實際上,您可以使用Ansible,puppet或Chef等配置管理工具更輕松地執行此任務。 您可以指定“ what”來檢查並使用現有框架來執行此操作,而不必嘗試指定“如何”來檢查和使用無限的IF語句。

例如,在Ansible中,您可以使用apt模塊指定更新緩存並安裝foo的最新版本:

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

更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM