scipt.sh 有问题,需要手动执行吗?

问题描述 投票:0回答:1

我正在尝试为我的工具制作一个自动安装程序,我只有两个问题。

function configure_rvm() {
  create_cw_user

  gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
  gpg2 --keyserver hkp://keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
  curl -sSL https://get.rvm.io | bash -s stable

  export rvm_path="$HOME/.rvm"
  source /etc/profile.d/rvm.sh
  
  adduser folder rvm
}

function setup_folder() {
  local secret=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 63 ; echo '')
  local RAILS_ENV=production
  get_pgpass

  sudo -i -u folder << EOF
  rvm --version
  rvm autolibs disable
  rvm install "ruby-3.2.2"
  rvm use 3.2.2 --default

  git clone https://gitlab.com/xxxx/xxxx.git folder
  echo "GitLab login successful."
  cd folder
  git folder "$BRANCH"
  bundle
  yarn

  cp .env.example .env
  sed -i -e "/SECRET_KEY_BASE/ s/=.*/=$secret/" .env
  sed -i -e '/REDIS_URL/ s/=.*/=redis:\/\/localhost:6379/' .env
  sed -i -e '/POSTGRES_HOST/ s/=.*/=localhost/' .env
  sed -i -e '/POSTGRES_USERNAME/ s/=.*/=folder/' .env
  sed -i -e "/POSTGRES_PASSWORD/ s/=.*/=$pg_pass/" .env
  sed -i -e '/RAILS_ENV/ s/=.*/=$RAILS_ENV/' .env
  echo -en "\nINSTALLATION_ENV=linux_script" >> ".env"

  rake assets:precompile RAILS_ENV=production NODE_OPTIONS=--openssl-legacy-provider
EOF
}

这一步源/etc/profile.d/rvm.sh我遇到的另一个问题,完全相似的事情发生在我身上......在这里:

function install_dependencies() {
  apt update && apt upgrade -y
  apt list --upgradable -a
  apt --fix-broken install
  apt install -y curl gnupg gnupg1 gnupg2
  curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
  echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
  curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
  echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
  mkdir -p /etc/apt/keyrings
  curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
  NODE_MAJOR=20
  echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

  apt update

  apt install -y \
      git software-properties-common ca-certificates imagemagick libpq-dev \
      libxml2-dev libxslt1-dev file g++ gcc autoconf build-essential \
      libssl-dev libyaml-dev libreadline-dev gnupg2 \
      postgresql-client redis-tools \
      nodejs yarn patch ruby-dev zlib1g-dev liblzma-dev \
      libgmp-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev sudo \
      libvips python3-pip
}

一旦完成,它会抛出 spanpd firefox pkg 错误...但是如果我再次手动运行 apt --fix-broken 安装并再次运行脚本,一切都会正常工作...这个 apt --fix 我已经有 -broken在脚本中安装但它似乎没有运行。

bash shell
1个回答
0
投票

我会直接在

function setup_folder
中设置环境变量rvm_path,方法是在
EOF
之后添加:

  export rvm_path="$HOME/.rvm"
© www.soinside.com 2019 - 2024. All rights reserved.