|
2 | 2 | set -e
|
3 | 3 |
|
4 | 4 | USERNAME="${USERNAME:-"${_REMOTE_USER:-"automatic"}"}"
|
| 5 | +VERSION_MANAGER="${VERSIONMANAGER:-"mise"}" |
5 | 6 |
|
6 |
| -apt-get update -y |
7 |
| -apt-get -y install --no-install-recommends git curl ca-certificates libssl-dev libreadline-dev zlib1g-dev autoconf bison build-essential \ |
8 |
| - libyaml-dev libncurses5-dev libffi-dev libgdbm-dev libxml2-dev rustc |
| 7 | +# Function to install dependencies needed for building Ruby |
| 8 | +install_dependencies() { |
| 9 | + apt-get update -y |
| 10 | + DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends \ |
| 11 | + git \ |
| 12 | + curl \ |
| 13 | + ca-certificates \ |
| 14 | + libssl-dev \ |
| 15 | + libreadline-dev \ |
| 16 | + zlib1g-dev \ |
| 17 | + autoconf \ |
| 18 | + bison \ |
| 19 | + build-essential \ |
| 20 | + libyaml-dev \ |
| 21 | + libncurses5-dev \ |
| 22 | + libffi-dev \ |
| 23 | + libgdbm-dev \ |
| 24 | + libxml2-dev \ |
| 25 | + rustc |
| 26 | +} |
9 | 27 |
|
10 |
| -git clone https://github.com/rbenv/rbenv.git /usr/local/share/rbenv |
11 |
| -git clone https://github.com/rbenv/ruby-build.git /usr/local/share/ruby-build |
| 28 | +# Function to add lines to shell initialization files |
| 29 | +add_to_shell_init() { |
| 30 | + _user="$1" |
| 31 | + _bash_line="$2" |
| 32 | + _zsh_line="${3:-$_bash_line}" # Use bash_line as default if zsh_line not provided |
12 | 33 |
|
13 |
| -mkdir -p /root/.rbenv/plugins |
14 |
| -ln -s /usr/local/share/ruby-build /root/.rbenv/plugins/ruby-build |
| 34 | + if [ "$_user" = "root" ]; then |
| 35 | + _home_dir="/root" |
| 36 | + else |
| 37 | + _home_dir="/home/$_user" |
| 38 | + fi |
| 39 | + |
| 40 | + echo "$_bash_line" >> "$_home_dir/.bashrc" |
| 41 | + |
| 42 | + if [ -f "$_home_dir/.zshrc" ]; then |
| 43 | + echo "$_zsh_line" >> "$_home_dir/.zshrc" |
| 44 | + fi |
| 45 | +} |
| 46 | + |
| 47 | +# Function to setup rbenv |
| 48 | +setup_rbenv() { |
| 49 | + _user="$1" |
| 50 | + _user_home="/home/$_user" |
15 | 51 |
|
16 |
| -if [ "${USERNAME}" != "root" ]; then |
17 |
| - user_home="/home/${USERNAME}" |
18 |
| - mkdir -p "${user_home}/.rbenv/plugins" |
19 |
| - ln -s /usr/local/share/ruby-build "${user_home}/.rbenv/plugins/ruby-build" |
| 52 | + # Clone rbenv and ruby-build |
| 53 | + git clone https://github.com/rbenv/rbenv.git /usr/local/share/rbenv |
| 54 | + git clone https://github.com/rbenv/ruby-build.git /usr/local/share/ruby-build |
20 | 55 |
|
21 |
| - chown -R "${USERNAME}" "${user_home}/.rbenv/" |
22 |
| - chmod -R g+r+w "${user_home}/.rbenv" |
| 56 | + # Setup plugins for root |
| 57 | + mkdir -p /root/.rbenv/plugins |
| 58 | + ln -s /usr/local/share/ruby-build /root/.rbenv/plugins/ruby-build |
23 | 59 |
|
| 60 | + # Setup for non-root user if needed |
| 61 | + if [ "$_user" != "root" ]; then |
| 62 | + mkdir -p "$_user_home/.rbenv/plugins" |
| 63 | + ln -s /usr/local/share/ruby-build "$_user_home/.rbenv/plugins/ruby-build" |
| 64 | + chown -R "$_user" "$_user_home/.rbenv/" |
| 65 | + chmod -R g+r+w "$_user_home/.rbenv" |
| 66 | + fi |
| 67 | + |
| 68 | + # shellcheck disable=SC2016 |
| 69 | + add_to_shell_init "$_user" 'export PATH="/usr/local/share/rbenv/bin:$PATH"' |
24 | 70 | # shellcheck disable=SC2016
|
25 |
| - echo 'eval "$(rbenv init -)"' >> "${user_home}/.bashrc" |
| 71 | + add_to_shell_init "$_user" 'eval "$(rbenv init -)"' |
| 72 | +} |
| 73 | + |
| 74 | +# Function to install Ruby with rbenv |
| 75 | +install_ruby_rbenv() { |
| 76 | + _user="$1" |
| 77 | + _version="$2" |
| 78 | + |
| 79 | + su "$_user" -c "/usr/local/share/rbenv/bin/rbenv install $_version" |
| 80 | + su "$_user" -c "/usr/local/share/rbenv/bin/rbenv global $_version" |
| 81 | +} |
26 | 82 |
|
27 |
| - if [ -f "${user_home}/.zshrc" ]; then |
28 |
| - # shellcheck disable=SC2016 |
29 |
| - echo 'eval "$(rbenv init -)"' >> "${user_home}/.zshrc" |
| 83 | +# Function to setup mise |
| 84 | +setup_mise() { |
| 85 | + _user="$1" |
| 86 | + |
| 87 | + su "$_user" -c "curl https://mise.run | sh" |
| 88 | + |
| 89 | + # shellcheck disable=SC2016 |
| 90 | + add_to_shell_init "$_user" 'eval "$(~/.local/bin/mise activate bash)"' 'eval "$(~/.local/bin/mise activate zsh)"' |
| 91 | +} |
| 92 | + |
| 93 | +# Function to install Ruby with mise |
| 94 | +install_ruby_mise() { |
| 95 | + _user="$1" |
| 96 | + _version="$2" |
| 97 | + |
| 98 | + if [ "$_user" = "root" ]; then |
| 99 | + _home_dir="/root" |
| 100 | + else |
| 101 | + _home_dir="/home/$_user" |
30 | 102 | fi
|
31 |
| -fi |
32 | 103 |
|
33 |
| -su "${USERNAME}" -c "/usr/local/share/rbenv/bin/rbenv install $VERSION" |
34 |
| -su "${USERNAME}" -c "/usr/local/share/rbenv/bin/rbenv global $VERSION" |
| 104 | + su "$_user" -c "$_home_dir/.local/bin/mise install ruby@$_version" |
| 105 | + su "$_user" -c "$_home_dir/.local/bin/mise use -g ruby@$_version" |
| 106 | + su "$_user" -c "$_home_dir/.local/bin/mise settings add idiomatic_version_file_enable_tools ruby" |
| 107 | +} |
| 108 | + |
| 109 | +install_dependencies |
| 110 | + |
| 111 | +# Setup version manager and install Ruby based on user choice |
| 112 | +if [ "$VERSION_MANAGER" = "rbenv" ]; then |
| 113 | + setup_rbenv "$USERNAME" |
| 114 | + install_ruby_rbenv "$USERNAME" "$VERSION" |
| 115 | +else |
| 116 | + setup_mise "$USERNAME" |
| 117 | + install_ruby_mise "$USERNAME" "$VERSION" |
| 118 | +fi |
35 | 119 |
|
36 | 120 | rm -rf /var/lib/apt/lists/*
|
0 commit comments