# Установка и настройка Ruby

В данном руководстве я покажу как установить Ruby на Linux, MacOS и Windows.

Если вы не являетесь пользователем MacOS и не знаете, что такое Linux, то я настоятельно рекомендую установить данную операционную систему себе на компьютер в качестве дополнительной ОС. В интернете вы найдете множество инструкций как это делается, чтобы сохранить вашу основную ОС Windows без изменений. В данном уроке в разделе установки на Windows будет показан способ установки Ruby средствами WSL, что является прямой интеграцией Linux дистрибутива во внутрь Windows, поэтому работа в WSL будет схожа с работой на нативном Linux дистрибутиве. В связи с чем человеку без опыта использования Unix like системы будет еще сложнее разобраться в WSL, хоть я и постараюсь свести это взаимодействия к минимуму. В качестве дистрибутива для новичка могу порекомендовать установить такие дистрибутивы как Ubuntu, Mint, Oracle Linux.

## Linux

Большинство программ в Linux распространяются в виде пакетов. Система наиболее похожа на то как работает AppStore или Play Market, которые выступают в качестве хранилища программ (репозитория), которые пользователь сам себе устанавливает. И точно также как и магазин приложений в телефоне, Linux предлагает единый интерфейс для установки. Основные отличия от телефона - интерфейс консольный, а не в виде отельного приложения.

Еще одним отличием от телефона - зависимости одних программ от других, поэтому при попытке установить новую программу не стоит удивляться, что система предлагает установить еще сотню других пакетов.

Установка программ осуществляется с помощью консольной программы являющейся пакетным менеджеров. В зависимости от Linux дистрибутива программа может отличаться, но суть у нее от этого не меняется. Если мы говорим про такие дистрибутивы как Ubuntu или Mint, то там пакетным менеджером выступает программа `apt`, а в таких дистрибутивах как Fedora, RedHat Linux, Oracle Linux такой программой является dnf или yum (обычно обе эти программы присутствуют в системе, dnf пришла на смену yum, но чтобы ничего не сломать, разработчики решили оставить обе программы в системе).

Любая установка программы с помощью таких пакетных менеджеров требует прав администратора. В отличии от Windows, щелкать никуда не нужно, достаточно в самом начале команды в терминале добавить ключевое слово `sudo`. Например в Ubuntu установка новой программы через терминал будет выглядеть следующим образом:

```bash
sudo apt install имя_пакета
```

Где: sudo - запуск команды с правами администратора, apt - пакетный менеджер, install - команда данного пакетного менеджера, имя\_пакета - название устанавливаемой программы.

В Oracle Linux программа будет выглядеть практически точно также:

```bash
sudo dnf install имя_пакета
```

Все примеры я буду показывать на дистрибутиве Oracle Linux. Если вы используете другой дистрибутив, то отличие в основном могут различаться в использовании пакетного менеджера. Приступим к установке:

* Включение репозитория с инструментами для разработки. Сам репозиторий имеет название `olX_codeready_builder`, где X - глобальная версия Oracle дистрибутива. Если у вас Oracle linux 8 или Oracle Linux 8.1 и тд, то пакет будет называться `ol8_codeready_builder`. У меня на текущий момент установлена Oracle Linux 9.1, значит мой пакет будет называться `ol9_codeready_builder`. А установка будет выглядеть следующим образом:

```bash
sudo dnf config-manager --set-enabled ol9_codeready_builder
```

* Установка репозитория с дополнительными полезными пакетами. Данный репозиторий называется `oracle-epel-release-elX`, где Х - глобальная версия Oracle дистрибутива. Делаем по такому же принципу как и выше. У меня установка будет выглядеть следующим образом:

```bash
sudo dnf -y install oracle-epel-release-el9
```

* Теперь установим программу, которая будет отвечать за управление версиями Ruby. В программировании хранить несколько версий самого языка программирования - нормальная практика, поэтому лучше сделать сразу правильно, чем вам потом придется самостоятельно разбираться в этом вопросе. В качестве такой программы в нашем случае это будет RVM (Ruby Version Manager). Установка его в систему будет состоять из 3 команд:

```bash
curl -sSL https://get.rvm.io | sudo bash
sudo usermod -aG rvm $USER
source /etc/profile.d/rvm.sh
```

Сначала с помощью консольной программы `curl` скачается скрипт с сайта https://get.rvm.io, после того, как он будет скачан, произойдет его выполнение в терминале. Текущий авторизованный пользователь будет добавлен в группу `rvm`, чтобы мы могли пользоваться `rvm` без прав администратора, после чего команда `source` применит изменения внесенные ране запущенных скриптом и позволит использовать программу `rvm` без перезагрузки учетной записи, но так как мы расширили права для группы `rvm`, то без перезагрузки не обойтись.

* Перезагружаем ПК.
* Установка необходимых пакетов для RVM. Так как RVM собирает Ruby из исходников, то для этих целей ему понадобятся дополнительные пакеты. Выполните данную команду для установки:

```bash
sudo /usr/local/rvm/bin/rvm requirements 
```

RVM сам определит ваш пакетный менеджер и выполнит установку. Если по окончанию вы увидите `Requirements installation successful`, значит вы все сделали верно.

* Установка Ruby. Теперь когда весь необходимый набор утилит у нас установлен, то приступим к установке самого языка. Выполните следующие команды:

```bash
rvm install ruby 3.2.1
rvm use 3.2.1 --default
rvm docs generate-ri
```

Если на момент прохождения курса вышла новая версия Ruby, то можете указать ее. Ничего поменяться не должно будет.

Теперь давайте проверим, что все ок. Введите команду: `ruby -v` Если в консоли вы увидите сообщение о той версии Ruby, которую вы устанавливали, значит установка завершена.

Установка на Ubuntu 22.10 (либо Mint) будет отличаться только пакетным менеджером и отсутствием необходимости включать дополнительный репозитории как в 1 и 2 пунктах.

## MacOS

* MacOS не имеет никаких пакетных менеджеров из коробки, поэтому прежде всего нам его необходимо будет установить, так как пакеты необходимые для установки Ruby могут устанавливаться только оттуда. Установка Homebrew выглядит следующим образом:

```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

Проверим, что brew установился корректно. Для этого введите команду:

```bash
brew doctor
```

Если вы увидите сообщение `Your system is ready to brew`, значит программа установилась корректно. Если вы обладатель Mac на процессорах Apple silicon, значит brew попроит вас выполнить следующие команды:

```bash
echo "eval $(/opt/homebrew/bin/brew shellenv)" >> ~/.zprofile
eval $(/opt/homebrew/bin/brew shellenv)
```

Выполняем их и еще раз вызываем:

```bash
brew doctor
```

Если brew попросит сделать что-то еще, то просто копируем его команды и выполняем до тех пор пока не увидим заветное сообщение `Your system is ready to brew`.

* Так как в следующей части нам понадобиться добавить ключи безопасности, то необходимо будет установить программу через brew для корректной работы с этими ключами. Делается это следующим образом:

```bash
brew install gpg2
```

* Если в пользовать MacOS, то скорее всего не читали часть про Linux, поэтому повторю некоторую информацию оттуда. Необходимо будет установить программу, которая будет отвечать за управление версиями Ruby. В программировании хранить несколько версий самого языка программирования - нормальная практика, поэтому лучше сделать сразу правильно, чем вам потом придется самостоятельно разбираться в этом вопросе. В качестве такой программы в нашем случае это будет RVM (Ruby Version Manager). Установка его в систему будет состоять из 5 команд:

```bash
curl -sSL https://rvm.io/mpapis.asc | gpg --import -
echo 409B6B1796C275462A1703113804BB82D39DC0E3:6: | gpg --import-ownertrust
curl -sSL https://rvm.io/pkuczynski.asc | gpg --import -
echo 7D2BAF1CF37B13E2069D6956105BD0E739499BDB:6: | gpg --import-ownertrust
sudo su
curl -sSL https://get.rvm.io | bash
exit
sudo dscl . append /Groups/rvm GroupMembership $USER
source /etc/profile.d/rvm.sh
```

Сначала мы импортируем несколько ключей безопасности в систему и делаем их доверенными, после этого переходим в режим администратора и с помощью программы curl устанавливаем программу `rvm`, после чего выходим из режима администратора, добавляем нашего пользователя в группу `rvm`, чтобы могли использовать его без прав администратора и запускаем скрипт для инициализации `rvm`, чтобы мы могли начать им пользоваться не перезагружая ПК.

* Установка необходимых пакетов для RVM. Так как RVM собирает Ruby из исходников, то для этих целей ему понадобятся дополнительные пакеты. Выполните данную команду для установки недостающих программ для этих целей:

```bash
rvm requirements 
```

* Установка Ruby. Теперь когда весь необходимый набор утилит у нас установлен, то приступим к установке самого языка. Выполните следующие команды:

```bash
rvm install ruby 3.2.1
rvm use 3.2.1 --default
rvm docs generate-ri
```

Если на момент прохождения курса вышла новая версия Ruby, то можете указать ее. Ничего координально поменяться не должно будет.

Теперь давайте проверим, что все ок. Введите команду: `ruby -v` Если в консоли вы увидите сообщение о той версии Ruby, которую вы устанавливали, значит установка завершена.

## Windows

Да, для Windows есть готовый установщик, который установит нам язык как обычную программу, но из-за тесной связи ruby с Linux окружением мы будем устанавливать его с помощью WSL. WSL - интеграция Linux прямо во внутрь Windows. Это позволит нам находиться в Windows окружении, работать с Ruby с Linux окружением и при этом не переключать операционные системы каждый раз. Но так как это все еще Linux, то сразу скажу, будет тяжело.

Вся установка будет показана на примере Windows 11 Home, она также будет работать в редакции Pro и Entrptise. Скорее всего все будет работать и с последними версиями Windows 10 Home, а также с редакциями Pro и Ultimate. Если у вас установлена редакция LTSC, то скорее всего будут проблемы из-за урезанности ее функционала. Всю ответственность по установке на данную версию ОС вы берете на себя.

* Установка WSL с предустановленным дистрибутивом Oracle Linux. Найдите на вашем компьютере терминал или командную строку и запустите в ней команду:

```
wsl --install -d OracleLinux_9_1
```

Данной командой вы установите себе WSL и OracleLinux как базовую ОС

* Перезагрузите ПК
* Войдите в окно WSL с помощью терминала или командной строки с помощью команды

```
wsl -d OracleLinux_9_1
```

* Установка Ruby. Далее не выходя из WSL окружения проделайте все шаги из инструкции для Linux

Важно понимать, что Ruby будет установлен именно в WSL окружении, доступа извне к нему не будет. В следующем уроке я также покажу как удобнее всего будет вам работать в WSL окружении прямо из редактора кода.

#### Дополнительный материал:

* [Чтобы не тупить с Linux](https://xakep.ru/2021/11/16/linux-in-30-minutes/)
* [Немного про использование RVM](https://www.8host.com/blog/rvm-v-ypravlenii-ystanovkoy-ruby-na-vps/)
