7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LTSグループAdvent Calendar 2023

Day 5

【メモ】Linuxのコマンドを手動でバージョンアップする

Last updated at Posted at 2023-12-22

 個人で開発環境を作ってると時々やることになるのでメモ。
 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

 ソースコードの入手はcurlwgetを使用します。

$ 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以外にegrepfgrepも更新対象になっていたのでそれらもバックアップとして名前を変えてとっておきます。

$ 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

(なお、この名前を変えたgrepgrep-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を戻すことで元に戻せます。

 他のコマンドも同じように更新可能です。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?