0. 概要
M1プロセッサ搭載のMacbook-Airを持っています。その環境に、Dockerを入れて、コンテナとしてUbuntuを構築して、Ubuntu上でrails6を構築しようとしました。すると、yarnのインストールを行う手順でメモリ違反が発生してインストールすることができませんでした。結果的にはUbuntuのバージョンを18.04ではなく、20.04をインストールことで対応できました。
1. 環境
machine : MacBook Air (M1, 2020)
OS : macOS BigSur Version 11.5.2
2. MacBook
2.1. docker インストール
- docker公式ページ[https://hub.docker.com/editions/community/docker-ce-desktop-mac] の「Mac with Apple chipe」からダウンロードする。
- ダウンロードした「docker.dmg」をダブルクリックする。
- 画面に従い、dockerアイコンをアプリケーションフォルダに移動してインストールする。
toshihiroinoue@T21MacAir ~ % docker -v
Docker version 20.10.8, build 3967b7d
2.2. コンテナ インストール
- Macのターミナルを起動する。
- Ubuntu:21.04のイメージをダウンロードする。
rails6+M1プロセッサ+dockerで動かす場合、Ubuntuは21.04でないと動作しません。yarnのインストールを行うためのCurlやWgetでメモリ違反が発生するためです。
詳細は、Docker Desktop 3.4.0 release notes(https://docs.docker.com/desktop/mac/release-notes/)のKnown issuesに説明があります。
Known issues
On Apple Silicon in native arm64 containers, older versions of libssl in debian:buster, ubuntu:20.04 and centos:8 will segfault when connected to some TLS servers, for example curl https://dl.yarnpkg.com. The bug is fixed in newer versions of libssl in debian:bullseye, ubuntu:21.04 and fedora:35.
user@MacBook-Air ~ % docker pull ubuntu:21.04
- イメージのダウンロード結果は以下となる。
user@MacBook-Air ~ % docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 21.04 8002c671f7fe 13 days ago 72.4MB
- コンテナを作成する。
user@MacBook-Air ~ % docker run -it -d --name ubuntu ubuntu:21.04
- コンテナが正常に動作していることを確認する。
user@MacBook-Air ~ % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ea99b2bc3338 ubuntu:21.04 "bash" 34 hours ago Up 16 hours ubuntu
3. ubuntu
3.1. ubuntu パッケージインストール
- 個人的にほしいパッケージをインストールする。私がほしいだけなので、通常不要ではあるが、以降のコマンドがこれらが入っている前提になる。
root@ea99b2bc3338:~# apt-get update
root@ea99b2bc3338:~# apt-get upgrade
root@ea99b2bc3338:~# apt-get install aptitude vim
- このあとのインストールに必要なパッケージをインストールする。
root@ea99b2bc3338:~# apt-get install git curl wget
3.2. rbenv インストール
- rbenvのインストールに必要なパッケージをインストールする。
root@ea99b2bc3338:~# aptitude install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev
- rbenvのリポジトリをクローンする。
root@ea99b2bc3338:~# git clone https://github.com/rbenv/rbenv.git ~/.rbenv
- ruby-buildのリポジトリをクローンする。
root@ea99b2bc3338:~# git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
- パスを通する。
root@ea99b2bc3338:~# echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
- rbenvを初期化する。
root@ea99b2bc3338:~# ~/.rbenv/bin/rbenv init
- 設定を追加する。
root@ea99b2bc3338:~# echo 'eval "$(rbenv init -)"' >> ~/.bashrc
- 設定を反映する。
root@ea99b2bc3338:~# source ~/.bashrc
- インストールできるRubyのバージョンを確認する。
root@ea99b2bc3338:~# rbenv install -l
2.6.8
2.7.4
3.0.2
jruby-9.2.19.0
mruby-3.0.0
rbx-5.0
truffleruby-21.2.0.1
truffleruby+graalvm-21.2.0
Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all / -L' to show all local versions.
3.3. ruby インストール
- Rubyをインストールする。
root@ea99b2bc3338:~# rbenv install 2.7.4
- ruby version 2.7.4をデフォルトのバージョンに指定する。
root@ea99b2bc3338:~# rbenv global 2.7.4
- 確認する。
root@ea99b2bc3338:~# ruby -v
ruby 2.6.8p205 (2021-07-07 revision 67951) [aarch64-linux]
3.4. SQLite インストール
- データベースとしてSQliteをインストールする。PostgreSQLやMySQLなどは任意で入れる。
root@ea99b2bc3338:~# aptitude install sqlite3
3.5. Node.js インストール
- 最新のNode.jsをインストールする。
aptitude install nodejs sqlite3 npm
- しかし、aptのNode.jsは古いため、 n packageを使って最新版をインストールする。
root@ea99b2bc3338:~# npm install -g n
root@ea99b2bc3338:~# sudo n stable
- 不要なので最初に入れておいたnodejsとnpmは削除しておく。
root@ea99b2bc3338:~# apt remove -y nodejs npm
root@ea99b2bc3338:~# exec $SHELL -l
- 最新バージョンがインストールできたことを確認する。
root@ea99b2bc3338:~# node -v
v14.17.6
3.6. Yarn インストール
- Yarnをインストールする。公式サイトのコマンドをそのまま実行する。
root@ea99b2bc3338:~# curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
root@ea99b2bc3338:~# echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
aptitude update && aptitude install yarn
- バージョンが表示されれば成功となる。
root@ea99b2bc3338:~# yarn -v
1.22.5
3.7. rails インストール
- 最後にRailsを入れる。
root@ea99b2bc3338:~# gem install rails
- こちらも正しくインストールできているか確認する。
root@ea99b2bc3338:~# rails -v
Rails 6.1.4.1