MySQLメモ
M1 Mac MySQLのインストール
課題に際してbundle installしようとするとエラーが出て上手くいかなかったため、調べた自分用メモです。間違った記載が多くあると思われるので、あまり参考にしない方が良いかも知れないです。
※ 記事を参考にコマンド実行する前に記事の鮮度・信頼性、本当に自分と同じ環境なのか考えてから実行するようにすること。
bundle install時に下記エラーが出ました。
34 warnings generated. linking shared-object mysql2/mysql2.bundle ld: library not found for -lssl clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [mysql2.bundle] Error 1 make failed, exit code 2 Gem files will remain installed in /Users/ユーザー名.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3 for inspection. Results logged to /Users/ユーザー名/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/extensions/-darwin-20/2.6.0/mysql2-0.5.3/gem_make.out An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue. Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.
An error occurred while installing mysql2 (0.5.3), M1 Mac
↑こちらのブログを参考にインストールすることができました。
どうやら、デフォルトで使われているSSLに互換性がないためgem installで探し出すことができないとかなんとか・・
試したこと
- 互換性のあるopensslというものに変更
- シェルにopensslのパスを通して、反映させる
- bundle configのパスを変更
ライブラリのパスを変更
使用されているsslを確認
$ openssl version LibreSSL 2.8.3
- opensslのパス確認
$ brew --prefix openssl
bundle installがmysql2でコケるときに試すやつ
$ brew install openssl $ echo 'export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"' >> ~/.zshrc $ source ~/.zshrc $ bundle config --local build.mysql2 "--with-ldflags=-L/opt/homebrew/opt/openssl@3/lib" $ export LIBRARY_PATH=$LIBRARY_PATH:/opt/homebrew/Cellar/zstd/1.5.2/lib:/opt/homebrew/Cellar/openssl@3/1.1.1m/lib/
これでbundle installできるようにはなったけど、正直良く分かってない。。🥲
OpenSSLとは
インターネット上で標準的に利用される暗号通信プロトコルであるSSLおよびTLSの機能を実装したプログラムの一つ。他のソフトウェアに組み込んで使用するライブラリ(プログラム部品)となっており、オープンソースソフトウェアとして公開されている。OpenSSLとは - IT用語辞典 e-Words
まずSSL(Secure Sockets Layer...『安全な受け口』層)とは
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典より
通信プロトコル(通信する際に双方で足並みを揃えるための約束事)の一つ。
インターネット上でやり取りする情報を暗号化して送受信するための仕組み。
SSLは、公開鍵暗号方式で共通鍵の受け渡しを行い、あとは受け渡した共通鍵を使って共通鍵暗号方式(秘密鍵暗号方式)でやり取りすることで、通信の安全性を高める仕組みです。
公開鍵暗号方式ってどんなもの?
クライアントがサーバに挨拶する。
🙋🏻♂️ < Hi! 🤖サーバはクライアントに
サーバ証明書
(自己紹介)を送る。このサーバ証明書の中にはサーバの公開鍵
(「これを使って暗号化して下さい」の鍵)が入っている。
💁🏻♂️ サーバ証明書📝🗝送る >🤖クライアントは
サーバ証明書
を送ってきたサーバが本物か確かめるために、認証局に問い合わせる。🏢< 本物です。 アレは本物ですか? >🤷🏻♂️ 🤖サーバが本物だった場合、サーバと秘密の会話をするためのルールである
共通鍵
を作成し、先ほど受け取ったサーバの公開鍵
に従って共通鍵
を暗号化する。
📄+🗝🙆🏻♂️(暗号化) 🔐✨暗号化された共通鍵(暗号化された共通ルール)をサーバに送る。
💁🏻♂️< 共通鍵渡すね 🔐🤖どうもサーバは、暗号化を解除する鍵であるサーバの秘密鍵を使って、暗号化された共通鍵を復号する。 🤖🔑 🔓✨(復号)
これにより、クライアントもサーバもやり取りするための共通鍵(ルール)を手に入れた。あとはこのルール(共通鍵)を使ってやり取りすることで第三者にやり取りを盗み見られたとしても、暗号化されているので何が書いてあるのか分からない。これが共通暗号方式(秘密鍵暗号方式)でやり取りをするということ。
🙆🏻♂️🔐✨⇄🤖🔐✨ ❌👿(くそぉ...)
TLSとは
SSLが1.0→2.0→3.0までバージョンアップし、次のバージョンアップでSSL4.0になると思いきや「TLS1.0」になったらしい。SSLの後継。(厳密には違うらしい)
このあとrails db:createしようとするも上手くいかない
これに関してはusernameとpasswordが記載されていないことが原因でした。
各自の環境に合わせてusernameとpasswordを修正するように指示があったので、初期設定のrootログインをしてみることに。
$ mysql -u root
パスワードを設定する
mysql> set password for root@localhost='新しいパスワード'; Query OK, 0 rows affected (0.00 sec)
MySQLにログインする
$ mysql -u root -p