【Linux】パッケージ管理についての備忘録~yumの操作とリポジトリについて~

## この記事で学べること
本記事では以下3点について触れています。

**・古いOSでのパッケージのインストール方法(カーネルのバージョンアップ方法)**
**・yumの設定ファイル詳細について**
**・リポジトリの概要について**

## 概要
今回現在の勤務の中で、Linux上でのリポジトリ操作（設定ファイル変更とインストール）を行う機会があったので、その際に行ったことなどを備忘録として残せればいいかなと思い、まとめてみました。

実際の作業では、最終的にyum操作でインストールは行えなかったのですが、
検証の過程でリポジトリ操作を行い、その中で学んだことの内容となります。

## 要件と経緯
要件としては**Linuxカーネルのバージョン変更**の必要がありました。

その手段としてまずリポジトリ操作（yum）を用いることに。
しかし、今回対象サーバのOSバージョンがかなり古く、有用な情報源に苦戦しました。

以下、構築環境。

### 構築環境
**OS：CentOS3.9**
**カーネルバージョン：i386 2.4.21-63(変更前)　→ i386 smp2.4.21-63(変更後)**


## ①現在のrpmデータベース上を確認
以下コマンドでの現在インストールされているカーネルを確認。

    # rpm -qa | grep kernel

上記実行で今回変更したいバージョン（本記事だとsmp2.4.21-63）がないのを確認します。

※こちらで検索できたものは実際に現在、使用できるカーネルバージョンとなっており、
設定ファイルを変更（③で記載）や起動時のgrubの設定より選択・変更が可能。

grub設定画面）
![スクリーンショット 2023-11-07 10.44.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626890/833c6b17-61d6-33cb-a652-711eb8a2add7.png)


## ②yumを使用してのインストール
コマンドで実行し、必要なパッケージをインストールを行なっていきます。
なるべく関係ないものはインストールしたくないので、カーネル関係のみで指定。
    
    # yum install kernel*

### 古いOSのバージョンを参照する場合
最近のOSバージョンの場合であれば、デフォルトで設定されている参照先ミラーサイトで問題ないが、
今回のような古いOSバージョンになると、こちらからは参照できない。

以下のURLのサイトを指定する必要がある。

https://vault.centos.org/

※vault=保管庫という意味合い

③の手順でURLを設定ファイルに指定していきます。


## ③設定ファイルyum.confの修正
それでは設定ファイルを修正していきます。
設定ファイルは以下のいずれかを使用。

| 設定ファイル | 詳細 |
| ---- | ---- |
| /etc/yum.conf | デフォルトで使用されるファイル。ファイル内にmain,update,repositoryなどの<br>セッションが分かれている。 |
| /etc/yum.repos.d/<ファイル名> | 設定ファイルをカスタムして、使用することが可能。＜ファイル名＞は任意。 |

公式では、リポジトリごとに/etc/yum.repos.d/<ファイル名>で設定ファイルを分けることが推奨されているようです。

### 設定ファイル

設定ファイル例を挙げます。

     [main]
       cachedir=/var/cache/yum/$basearch/$releasever
       keepcache=0
       debuglevel=2
       logfile=/var/log/yum.log
       exactarch=1
       obsoletes=1
       gpgcheck=1
       plugins=1
       installonly_limit=3



     # PUT YOUR REPOS HERE OR IN separate files named file.repo
     # in /etc/yum.repos.d
     
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/sec-configuring_yum_and_yum_repositories


    [repository]
      name=repository_name
      baseurl=repository_url

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/sec-setting_repository_options

それぞれの項目の詳細については取り上げませんが、(上記URLに説明あり)
今回の設定において確認が必要になってくるのが　**「baseurl=」**　の箇所となります。

こちらに②の手順内にあったhttps://vault.centos.org/
を当てはめていくこととなります。

    [repository]
      baseurl=https://vault.centos.org/$releasever/updates/$besearch/

`$releasever,$besearch`は元からサーバ側で定義されている変数となり、
それぞれの環境に沿った値が入ります。

本環境ですと以下のようになります。

***
 **$releasever**・・・centos3.9
 
 **$besearch**・・・i386
***


また今回のようなリポジトリは「リモートリポジトリ」に分類されますが、
リモートがあるように、ローカルリポジトリも存在します。

それぞれどのような環境を意味するのか、
下記に簡単にまとめてみました。

 ### リモートリポジトリ
  ・・・・今回のようなインタネット上にて、配布されているパッケージをまとめてあるサイトへアクセスし、使用するリポジトリ

 ### ローカルリポジトリ
 　・・・・あらかじめリポジトリのデータをios形式、圧縮（gzip,tar）などでサーバに配置し、それを参照するリポジトリ。**インターネット接続不可の環境でもyum実行が可能になる**

※設定ファイルにてbaseurl=file:///[ディレクトリパス]を記載で参照可能になる

## ④インストールしたカーネルバージョンを選択
無事、インストールが実行できたら再起動し、新しいバージョンへ変更していきます。
①の手順にあるように起動時のgrubの編集画面から手動で選択してもいいですが、
**それだと再起動のたびに手動で選択しないと行けません。**

「/boot/grub/grub.conf」を編集して、自動で立ち上がるようにします。
以下、参照先。
※ubuntu系は「/boot/grub/menu.lst」


https://www.express.nec.co.jp/linux/distributions/knowledge/system/grub.html

今回は「default」の値を1→0に変更しました。

以上で設定は完了です。


### 所感
リポジトリ自体はlinuxでも最初の方で学ぶ分野ではあるが、
実際操作してみて、初めて理解ができたような感じでした。

OSが古いので、参照できるような情報があるのかと半信半疑だったが、
意外と同じような取り組みをされている方が多く、
環境によってはやむ得ずに古いバージョン内でやりくりするパターンもあるのだと感じました。