個人で開発環境を作ってると時々やることになるのでメモ。
Linuxコマンドもコマンドのバージョンによって挙動や処理速度が変わることがあるので、バージョンを揃える時に毎回調べなくて良いように書き残し。
・『最終的に適用したいサーバーと自宅の開発環境でバージョンをそろえたい』
・『パッケージマネージャー(yum
とかapt
とか)のデフォルトに最新版が無いし最新版のあるリポジトリを探して登録するのもめんどくさい』
って時用のメモです。
目次
1.前提になる状況
2.主なパッケージマネージャーの一覧
3.まずはsrcフォルダ
4.makeファイルの生成とインストール
5.インストール後の確認
前提になる状況
パッケージマネージャーであるyum
とかapt
とかのデフォルトのリポジトリに最新版がない状況です。
特にCentOSやFedoraといったRedHat系は更新が止まってるものが多いです。
ちなみにこの記事はFedora(Linux version 3.10.0-693.2.2.el7.x86_64(gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) )
の話になります。
主なパッケージマネージャーの一覧
OS | 主なパッケージマネージャー |
---|---|
Linux(Red Hat系、CentOSやFedoraなど) | yum、rpmなど |
Linux(Debian系、UbuntuやgLinuxなど) | apt |
Mac | brew |
Windows | winget |
パッケージマネージャーはプログラム言語ごとにも存在します。
Pythionのパッケージはpip、Node.jsのパッケージはnpm、PHPのパッケージはcomposer。
まずはsrcフォルダ
パッケージマネージャーを使わない場合はソースコードをビルドしてインストールする事になります。
ソースコードを置くのは基本的に/usr
配下のsrc
フォルダです。
src
はソースコードの略らしく、ここが推奨される様子。つまり/usr/bin
に置くコマンドのソースなら/usr/src
に、/usr/local/bin
に置くコマンドのソースなら/usr/local/src
が推奨の場所になります。
対象のコマンドがどこにあるかはwhich
コマンドで確認可能。
$ sudo su
$ which grep
alias grep='grep --color=auto'
/usr/bin/grep
ソースコードの入手はcurl
かwget
を使用します。
$ cd /usr/src
$ curl -L https://ftp.gnu.org/gnu/grep/grep-3.11.tar.gz > ./grep-3.11.tar.gz
$ tar -zxvf ./grep-3.11.tar.gz --no-same-owner
curl
なりwget
なりで落としてくるソースコードは、バージョンを調べて『GNU』の文字があればだいたいGNUの公式サイトにあります。
悪意のある動作が仕込まれたものを避けるためにも、なるべく公式のものを入手した方が良いです。
makeファイルの生成とインストール
makeファイルの生成。
configureファイル
の中を見るとデフォルトだと/usr/local
に行くようだったので、--prefix
オプションを指定します。
※ここまででエラーが出ていたらgrep-3.11のディレクトリを削除してファイルの解凍からやり直す。
$ cd /usr/src/grep-3.11
$ ./configure --prefix=/usr
これでmakeファイル
が作られるので、念のため中の処理をテキストとして確認しておきます。
今回は、makeファイル
の中を見ていくとgrep
以外にegrep
とfgrep
も更新対象になっていたのでそれらもバックアップとして名前を変えてとっておきます。
$ cp /usr/bin/grep /usr/bin/grep-2.2.0
$ cp /usr/bin/egrep /usr/bin/egrep-2.2.0
$ cp /usr/bin/fgrep /usr/bin/fgrep-2.2.0
(なお、この名前を変えたgrep
もgrep-2.2.0
というコマンドとして普通に使えます)
次にmake
コマンドでmakeファイル
に沿ったソースコードのビルドを開始。
その後にmake
でインストールを実行します。
$ cd /usr/src/grep-3.11
$ make
$ make install
インストール後の確認
$ which grep
alias grep='grep --color=auto'
/bin/grep
$ grep --v
私のケースではここでgrep --v
がこけて--color=auto
が解決できない旨のエラーが出ました。おそらく元から入ってたものと細かい実装が違うのでしょう。
コマンド実行時のalias
を変更したらエラーが無くなりました。
$ alias grep='grep'
$ grep --v
これでバージョンアップ完了。
このあとgrep
を使っておかしい所があればバックアップしたコマンドで上書きしてalias
を戻すことで元に戻せます。
他のコマンドも同じように更新可能です。