LPIC・ソフトウェア管理

個人的なメモです。

##共有ライブラリの管理

###☆ライブラリ

・複数のアプリケーションからよく使用される機能を関数として実装し、複数の関数を種類ごとにファイルにまとめたもの
・**静的ライブラリ**と**共有ライブラリ**の2種類がある

**(表)ライブラリの種類**

| 主な種類  | 説明 | 使用方法 | 
|:-----------:|:-----------:|:------------:|
| 静的ライブラリ | プログラム作成時にその実行ファイル内に組み込まれるもの | 静的リンク　　 | 
| 共有ライブラリ | プログラムの実行時にロードされ、複数のプログラム間で共有されるもの | 動的リンク/動的ロード | 

※動的リンカ/ローダによる自動的なロードとリンクを**動的リンク**、アプリケーションがAPIによって共有ライブラリを使用することを**動的ロード**と呼ぶ。通常は動的リンクだが、特別なアプリケーション(PAMやApache)だけ動的ロードを用いる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447762/f8dc7976-76bd-76d3-9660-cf47472e57c5.png)



###☆共有ライブラリの設定

以下の順で行う
①**/etc/ld.conf**にディレクトリパスを追加
②**ldconfigコマンド**で**/etc/ld.conf**を参照して適切なシンボリックファイルを作成し、共有ライブラリのパスを**/etc/ld.cacheファイル**に書き込む

**ldconfigコマンド**･･･共有ライブラリを認識させるため、/etc/ld.so.confを/etc/ld.so.cacheに反映するときに使う

**/etc/ld.conf**･･･共有ライブラリの検索パスを記載しておく設定ファイル

**/etc/ld.cache**･･･共有ライブラリの名前と実際のファイルの置き場所が書いてあるファイル

ユーザーごとに共有ライブラリを追加したい場合は環境変数**LD_LIBRARY_PATH**を用いて、以下の順番で目的のライブラリを検索

①環境変数**LD_LIBRARY_PATH**で指定されたディレクトリパス配下
②/etc/ld.so.cache ファイルで指定されたディレクトリパス配下
③/lib と /usr/lib ディレクトリ配下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447762/4ee47943-58c5-01ca-375c-fd50599ffaf7.png)

###☆共有ライブラリの確認

**lddコマンド**を使用し、プログラムで必要とする共有ライブラリを確認できる

##RPM/yumパッケージ管理

###☆パッケージ管理システム

・ソフトウェアをパッケージというファイル単位で管理するシステム
・パッケージは実行形式に変換したバイナリのほか、ライブラリや設定ファイル、マニュアルなどを1つにまとめたもの。また、パッケージを管理する上で必要となる**依存情報**も含まれている
・主なパッケージ管理システムには**RPM形式**と**Debian形式**がある

| コマンド | RedHat系 | Ubuntu/Debian系 | 
|:---------:|:-----------------:|:------------:|
| パッケージ形式 | rpm形式 | deb形式 | 
| パッケージ管理コマンド | rpmコマンド | dpkgコマンド | 
| リポジトリを利用したパッケージ管理コマンド | yum(dnf)コマンド | apt-cacheコマンド・apt-getコマンド | 


###☆RPM形式

・Red Hat LinuxやFedora Linux、CentOs等のRed Hat系ディストリビューションで採用されているパッケージ管理システム
・**rpmコマンド**や**yumコマンド**を利用してrpmパッケージの管理を行う

####rpmコマンド

RedHat Package Managerの略
Red Hat系ディストリビューションのパッケージ管理システムの１つ

**(表)rpmのオプション**

| 短いオプション | 長いオプション　 | 説明 | 
|:---------:|:-----------------:|:------------:|
| -q | --query | 指定したパッケージがインストールされていればバージョンを表示 | 
| -a | --all | インストール済みのrpmパッケージ情報を一覧で表示 | 
| -i | --info | 指定したパッケージの詳細情報を表示 | 
| -f | --file | 指定したファイルを含むrpmパッケージを表示 |
| -c | --configfiles | 指定したパッケージ内の設定ファイルのみを表示 |
| -d | --docfiles | 指定したパッケージ内のドキュメントのみを表示 | 
| -l | --list | 指定したパッケージに含まれるすべてのファイルを表示 |
| -K | --checksig | パッケージの完全性を確認するために指定されたパッケージファイルに含まれるすべてのダイジェスト値と著名をチェックする | 
| -R | --requires | 指定したパッケージが依存しているrpmパッケージ名を表示 |
| -p | --package | インストールされたrpmパッケージではなく、指定したrpmパッケージファイルの情報を表示 | 
| なし | --changelog | パッケージの更新情報を表示 |

**(表)インストール・アップグレードに関するオプション**

| 短いオプション | 長いオプション　　 | 説明 | 
|:---------:|:---------------:|:------------:|
| -i | --install | パッケージをインストールする(アップデートは行わない) | 
| -U | -upgrade | パッケージをアップデートする。インストール済みのパッケージが存在しない場合、新規にインストールを行う | 
| -F | --freshen | パッケージをアップデートする。インストール済みのパッケージが存在しない場合、何も行わない | 
| -v | --verbose | 詳細な情報を表示する |
| -h | --hash | 進行状況を#記号で表示する |
| なし | --force | 指定されたパッケージがすでにインストールされていても上書きインストールを行う | 
| なし | --oldpackage | 古いパッケージに置き換えることを許可(ダウングレード)する |
| なし | --test | パッケージをインストールせず、衝突等のチェックを行い結果を表示する | 

**(表)アンインストールに関するオプション**

| 短いオプション | 長いオプション　 | 説明 | 
|:---------:|:---------------:|:------------:|
| -e | --erase | パッケージを削除する | 
| なし | -nodeps | 依存関係を無視してパッケージを削除する | 
| なし | --allmatches | パッケージ名に一致するすべてのバージョンのパッケージを削除する | 

####yumコマンド

rpmと同じくパッケージ管理システムではあるが、rpmはRPMパッケージを扱い、RPMデータベースやRPMパッケージのリポジトリを使用しパッケージを管理する**YUM**を扱うのがyum。つまり、yumは内部的にrpmを扱っていることになる

機能においてrpmとの大きな違いは以下

**1.パッケージの依存関係を自動的に解決する**
→このソフトウェアが必要といった依存をチェックして、必要なソフトウェアを自動でインストールできる
**2.パッケージファイルを準備する必要はない**
→インターネット上のリポジトリ(パッケージを保管・管理している場所)と通信し、簡単にrpmパッケージのインストールや最新情報の入手が可能

rpmにはない便利な機能があるため、基本的にyumを使用する事が多い

**(表)検索・表示に関するサブコマンド**

| 主なサブコマンド  | 説明 | 
|:-----------:|:------------:|
| list | 利用可能な全rpmパッケージ情報を表示 | 
| list installed | インストール済みをのrpmパッケージを表示 |
| info | 指定したrpmパッケージの詳細情報を表示 | 
| search | 指定したキーワードでrpmパッケージを検索し結果を表示 |
| deplist | 指定したrpmパッケージの依存情報を表示 | 
| list updates | インストール済みのrpmパッケージで更新可能なものを表示 | 
| check-update | インストール済みのrpmパッケージで更新可能なものを表示 |

**(表)インストール・アップグレードに関するサブコマンド**

| 主なサブコマンド | 説明 | 
|:---------:|:------------:|
| install | 指定したrpmパッケージをインストールする。自動的に依存関係も解決する |
| update | インストール済みのrpmパッケージで更新可能なものをすべてアップデートする。なお、個別のrpmパッケージを指定して更新することも可能 |
| upgrade | システム全体のリリースバージョンアップを行う | 

**(表)yumの設定ファイル**

| 主な設定ファイル | 説明 | 
|:---------:|:------------:|
| /etc/yum.conf | 基本設定ファイル |
| /etc/yum.repos.d ディレクトリ以下に保存されたファイル | リポジトリの設定ファイル |

####その他のコマンド

**rpm2cpioコマンド**･･･rpmファイルをcpioアーカイブ形式に変換し、標準出力に出力する

**yumdownloderコマンド**･･･rpmファイルのダウンロードだけをするコマンド。rpmファイルを保存しておけば、最新のパッケージを使用するのではなく、決められたバージョンでマシンを更新しなければならないときに便利

**zepperコマンド**･･･Libzyppライブラリを利用したコマンドラインによるパッケージ管理ツール。パッケージのインストール、更新、削除、およびリポジトリの管理が可能

**(表)zepperのコマンド**

| コマンド | 説明 | 
|:---------:|:------------:|
| update | パッケージの更新 |
| search パッケージ名 | パッケージの検索 |
| install パッケージ名 | パッケージのインストール |
| remove パッケージ名 | パッケージの削除 |
| info パッケージ名 | パッケージの情報を調べる |
| repos | リポジトリの一覧表示 |

##Debian/debパッケージ管理

###☆Debian形式

・Debian GNU/LinuxやUbuntu Linux等のDebian系ディストリビューションで採用されているパッケージ管理システム
・**dpkgコマンド**や**apt-getコマンド**、**apt-cacheコマンド**を利用してdebパッケージの管理を行う

####dpkgコマンド

Debian系システムで使われている**debパッケージ**を扱うパッケージ管理コマンド

**(表)表示に関するコマンド**

| 短いオプション | 長いオプション | 説明 | 
|:---------:|:------------:|:------------:|
| -l | --list | インストール済みの全debパッケージの情報を表示。特定のパッケージ情報のみ表示する場合は、-lオプションの後にパッケージ名を指定 |
| -s | --status | 指定したパッケージの情報を表示。依存関係も確認可能 |
| -L | --listfiles | 指定したパッケージに含まれるすべてのファイルを表示 |
| -S | --search | インストール済みのパッケージから指定されたファイルを検索 |
| -I | --info | 指定したパッケージの詳細情報を表示 |
| -C | --audit | インストールが完了していないパッケージを検索 |
| -c | --contents | インストールされたパッケージではなく、指定したdebパッケージファイルに含まれるファイルの一覧を表示 |

**(表)アンインストールに関するオプション**

| 短いオプション | 長いオプション | 説明 | 
|:---------:|:------------:|:------------:|
| -r | --remove | パッケージは削除するが、設定ファイルは残したままとする |
| -P | --purge | 設定ファイルも含め完全にパッケージを削除する |

**(表)インストール・アップグレードに関するオプション**

| 短いオプション | 長いオプション | 説明 | 
|:---------:|:------------:|:------------:|
| -i | --install | パッケージをインストールする |
| -E | --skip-same-version | すでに同じバージョンのパッケージがインストールされている場合は何も行わない |
| -G | --refuse-downgrade | すでに新しいバージョンのパッケージがインストールされている場合は何も行わない |

####dpkg-reconfigureコマンド

指定したインストール済みのパッケージに対し設定内容を変更することが可能

####apt-cacheコマンド

debパッケージをより効率よく管理するためのツール「APT」を使用する主なコマンドは**apt-cacheコマンド**、**apt-getコマンド**があり、パッケージの依存関係を自動的に解決する
apt-cacheコマンドは、debパッケージ情報の検索、表示に使用する

**(表)apt-cacheのサブコマンド**

| 主なサブコマンド | 説明 |
|:---------:|:------------:|
| pknames | すべてのdebパッケージを一覧表示 |
| search | 指定したキーワードを含むパッケージを表示。複数キーワードや正規表現を用いたキーワードの指定が可能 | 
| show | 指定したパッケージの詳細情報と、依存情報を表示 | 
| depends | 指定したパッケージの依存情報関係と、依存関係を満たすほかのパッケージの一覧の表示 | 

####apt-getコマンド

debパッケージのインストール、アップグレード、アンインストールに使用するコマンド

**(表)apt-getのサブコマンド**

| 主なサブコマンド | 説明 |
|:---------:|:------------:|
| install | 依存関係をチェックし、パッケージをインストールする |
| upgrade | アップグレード可能なdebパッケージをすべて更新する。現在インストール中のパッケージの削除は行わない | 
| update | パッケージデータベースを更新する | 
| dist-upgrade | 古いパッケージの削除を含め、現在インストールされている全パッケージを更新する | 
| remove | debパッケージをアンインストールする | 

**/etc/apt/sources.list**･･･apt-getコマンドは、/etc/apt/sources.listに記述された入手リストに従い、パッケージをインストールする