見出し画像

【メモ】CentOS 7にRailsのmini_racerがインストールできなかったので最新版のgcc等を入れる

はじめに

例によっての作業思い出し備忘録です。
CentOS 7はデフォルトのリポジトリからyumでgccを入れようとすると、古いバージョンのgccしか取ってこれません。
そのため、比較的新しいバージョンのRubyやRailsを利用する時にmini_racerをインストールしようとすると、構文エラーを吐いてしまいます。なので新しいのを入れよう!というのが今回の作業内容でした。
yumを使わず直接gccをダウンロードしてコンパイルする方法もありますが、今回はcentos-sclo-rhをリポジトリに追加して、ここからdevtoolsetならびにgccを入れてます。

Ruby周りの作業環境はRuby 2.7.3、Rails 5.2.6です。
その他、今回の作業環境は基本設定から色々と手が加えられているサーバーなので、デフォルトの設定なら必要のない工程などが含まれている可能性があります。ご留意ください。

インストール

まず最初にcentos-sclo-rhをリポジトリに追加しましょう。
大抵の人は『sudo yum install centos-release-scl』とすればcentos-sclo-rhリポジトリを追加できると思いますが、extrasリポジトリが存在しない場合、centos-release-sclのパッケージを見つけることができません。
今回の自分の作業環境では上記extrasリポジトリがなかったので、centos-release-sclを介さずに直接centos-sclo-rhをリポジトリに追加します。
/etc/yum.repos.d/ 以下にリポジトリの設定ファイルを作りましょう。

$ sudo vi /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo

[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=http://mirror.centos.org/centos/7/sclo/$basearch/rh/
mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-rh
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

設定が終わったら『yum repolist』でリポジトリが登録されているか確認しましょう。リポジトリIDにcentos-sclo-rh/x86_64が見えていれば大丈夫です。

さて、これでリポジトリ追加が完了したので『sudo yum install devtoolset-10』とすればdevtoolset-10をインストールできる……と思いきやエラーになりました。自分の環境では。
エラー文はこんな感じです(長いので一部抜粋)。

エラー: パッケージ: devtoolset-10-gdb-9.2-9.sc1.el7.x86_64 (centos-sclo-rh)
            要求: libsource-highlight.so.4()(64bit)
エラー: パッケージ: devtoolset-10-systemtap-devel-4.3-8.el7.x86_64 (centos-sclo-rh)
            要求: kernel-devel-uname-r
**********************************************************************
yum can be configured to try to resolve such errors by temporarily enabling
disabled repos and searching for missing dependencies.
To enable this functionality please set 'notify_only=0' in /etc/yum/pluginconf.d/search-disabled-repos.conf
**********************************************************************

エラー: パッケージ: devtoolset-10-gdb-9.2-9.sc1.el7.x86_64 (centos-sclo-rh)
            要求: libsource-highlight.so.4()(64bit)
エラー: パッケージ: devtoolset-10-systemtap-devel-4.3-8.el7.x86_64 (centos-sclo-rh)
            要求: kernel-devel-uname-r
問題を回避するために --skip-broken を用いることができます。
これらを試行できます: rpm -Va --nofiles --nodigest

どうやらsource-highlightとkernelのバージョンに一致したkernel-develをインストールする必要がある模様。順番にインストールしていきましょう。

順番が前後しますがまずkernel-develの方からやっていきます。
yum.confの設定でkernelに関係するパッケージはexcludeされているので、一旦コメントアウトします。

$ sudo vi /etc/yum.conf

#exclude=kernel*

その後『sudo yum install "kernel-devel-uname-r == $(uname -r)"』とすれば今のkernelのバージョンに合ったkernel-develがインストールできます。
インストールに成功したら、編集したyum.confの設定を元に戻しておきましょう。

次にsource-highlightです。
こちらも『sudo yum install source-highlight』でインストールできれば良いですが、自分の環境ではパッケージが見つかるリポジトリがなかったので直接rpmをダウンロードしてきてyumでインストールします。

$ wget http://mirror.centos.org/centos/7/os/x86_64/Packages/source-highlight-3.1.6-6.el7.x86_64.rpm
$ sudo yum install source-highlight-3.1.6-6.el7.x86_64.rpm

インストールが完了したら、再度『sudo yum install devtoolset-10』を実行してみます。すると「devtoolset-10-gcc-gfortran-10.2.1-2.1.el7.x86_64.rpm の公開鍵がインストールされていません」というエラーが。
この公開鍵はCentOSの公式サイトで配布されています。この鍵が先ほど作成した /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo のファイルでgpgkeyを指定先に存在しなかったようです。
ということで公開鍵をダウンロードしてpathの指定先に配置しましょう。

$ wget https://www.centos.org/keys/RPM-GPG-KEY-CentOS-SIG-SCLo
$ sudo mv RPM-GPG-KEY-CentOS-SIG-SCLo /etc/pki/rpm-gpg/

この状態で『sudo yum install devtoolset-10』を実行すれば、ようやくdevtoolset-10がインストールできるはずです。ダメそうなら設定ファイルのgpgcheckを0として認証を無視することもできます。
その後、『scl -l』を実行して devtoolset-10 が返ってきていたらインストール成功です。

gcc有効化

devtoolsetのインストールが完了したので、これのgccを有効化します。
この辺は人によって異なると思いますが、自分の環境ではシェルがbashだったのでbash_profile内でdevtoolsetを有効化しています。
設定追記後にgccのバージョンが切り替わってたらOK。

$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)
$ vi .bash_profile

source scl_source enable devtoolset-10

$ source ~/.bash_profile
$ gcc --version
gcc (GCC) 10.2.1 20200804 (Red Hat 10.2.1-2)

これで新しいバージョンのgccを利用することができます。
bundle installでmini_racerがインストールできればミッションクリア!

参考リンク

https://web.chaperone.jp/w/index.php?CentOS/devtoolset
https://stupiddog.jp/note/archives/1074
https://dev.classmethod.jp/articles/how-to-install-newer-packages-from-rhel-centos-with-appstream-rhscl-epel-ius/
https://kazmax.zpp.jp/linux_beginner/yum_repository.html
https://unix.stackexchange.com/questions/110682/yum-installs-kernel-devel-different-from-my-kernel-version
https://qiita.com/metheglin/items/60261f474ccdfb467574
http://yuminstall.org/how-to-install-source-highlight-3-1-6-6-el7-x86_64-on-centos7/

この記事が気に入ったらサポートをしてみませんか?