Linuxのインストールとパッケージ管理

#1 ハードディスクのレイアウト設計
##1-1 インストールに必要なパーティション
インストール時は最低２つ必要。実際はさらに複数に分ける。

・実業務で利用する例

|名称|説明|c  |
|---|---|---|
|/home|一般ユーザが利用する|3  |
|/var|各種ログやスプール等の更新頻度の高いファイルを保存|6  |
|/usr|プログラムやライブラリ、document等|3  |
|/boot|システムによってはディスク先頭パーティションとして100MB程度必要な場合がある|
|EFIシステムパーティション|UEFIを使った場合に必要|3  |
|スワップ領域|仮想メモリ領域。実メモリと同等～2倍が好ましい|
|/(ルート)|上記以外はルートファイルシステムとなる

##1-2 パーティションのレイアウト設計

###設計時の留意事項
以下の点に注意
　・システム用途
　・ディスク容量
　・バックアップの方法

####例 Webサーバ　ディスク 100GB、メモリ4GB
　・スワップ　4GB
　・/boot　100MB
　・/usr　10GB
　・/var　20GB
　・/var/log　50GB(Webサーバのログファイル用)　
　・/　15GB

#2 ブートローダのインストール
ブートローダ：HDDからOSを読み込み起動するプログラム
・Linuxで代表的なブートローダはGRUBである

##2-1 GRUBのインストール
■ GRUBとは
・多機能なブートローダ
・多くのディストリビューションで利用されている
・多数のファイルシステムを認識できる
・シェル機能があり、コマンドによる高度な管理が可能
・GRUBは2種類ある
　・GRUB Legacy　
　・GRUB 2

・インストールコマンド

 grub-install

##2-2 GRUB Legacyの設定
　設定ファイル：/boot/grub/menu.lst
　・設定パラメータ

|パラメータ|説明|
|:-:|:-:|:-:|:-:|
|timeout|メニュー表示秒数|
|default|デフォルト起動時エントリ番号|
|title|メニューに表示されるタイトル|
|root|ルートデバイスの指定|
|kenel|起動カーネルイメージファイルと起動オプションの指定|
|makeactive|ルートパーティションをアクティブ化|
|chainloader|指定されたセクタの読み込みと実行|
|hiddenmune|起動時に選択メニューを表示しない|

##2-3 GRUB 2の設定
　①設定ファイルの場所：/boot/grub/grub.cfg
　・直接編集は不可
　②/etc/default/grubで設定する
　
　　例：cat実行例

````
[root@localhost ~]# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
```

③主要な項目
・GRUB_DEFAULT=値　　※デフォルト起動するOS
・GRUB_TIMEOUT=秒数　※起動時の待機時間
・GRUB_CMDLINE_LINUX="値"　※Linuxカーネル用コマンドライン引数（全カーネル共通指定）

④grub2-mkconfigで実行する
　・実行後「/boot/grub/grub.cfg」が作成される
　・grub2-mkconfigは起動用のファイルを生成するので、取り扱い注意
　↓コマンド例

````
grub2-mkconfig -o /boot/grub2/grub.cfg
````
##2-4 ブートオプション
ブートオプションを指定するには起動時の画面でEキーを押す
以下のメッセージが表示される

grub append> ro root=dev/VolGroup00/LogVo100 rhgp quiet

オプション例

|パラメータ|説明|
|:-:|:-:|:-:|:-:|
|root=デバイス|ルートパーティションとしてマウントするデバイス|
|nosub|USBを利用しない|
|single|シングルユーザモードで起動する|
|1~5|指定した欄レベルで起動する|

　↓コマンド例　シングルユーザモードで起動する

````
grub append> ro root=dev/VolGroup00/LogVo100 rhgp quiet single
````

#3 共有ライブラリ管理
ライブラリ：よく利用される機能をまとめて他のプログラムから参照できるようにしたプログラムの部品。

##3-1 リンクの種類
リンクは２種類ある
・スタティックリンク（静的）
　コンパイル時にプログラムに埋め込む
・ダイナミックリンク（動的）
　実行時にプログラムが読み込む

##3-2 共有ライブラリの確認

・実行ファイルが必要な共有ライブラリの確認方法

````
ldd /usr/bin/cat
````

・指定ライブラリ以外も検索する場合
/lib, /usr/libディレクトリ以外のライブラリを検索する場合は
/etc/ld.so.confに記載する

↓リストの例
/usr/lib64/iscsi

・ファイルを確認する

````
vi /etc/ld.so.conf
````

・ファイル反映は下記コマンドを実行する
　コマンド実行により/etc/ld.so.cashe（バイナリファイル）が作成される。

````
ldconfig
````

・その他のディレクトリも加える場合は環境変数パスにディレクトリを追加する
↓追加例

````
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/student/mylib
````

#4 Debianパッケージの管理

パッケージ：実行プログラムや設定ファイル、ドキュメント等をまとめたもの
パッケージ管理方式はディストリビューションによって異なる。
代表的なものは以下の２つ
・Deian形式：Debian GNU/Linux等
・RPM形式：Red Hat Enterprise Linux

##4-1 パッケージ管理とは
・パッケージ管理
パッケージの追加や削除、アップデート等変更時にパッケージ間の競合を回避したりする仕組み

・依存関係
パッケージAに含まれるファイルをパッケージBを利用している場合、
パッケージAが無いとパッケージBは利用ができない。
このような関係を依存関係と呼ぶ

・競合関係
パッケージAとパッケージCがパッケージBの同名ファイルを参照する場合に
パッケージAはバージョン１をパッケージCはバージョン２を参照する場合
どちらかは正常にインストールできず、競合関係にある。

##4-2 Debian形式 dpkgを用いた管理
・パッケージのファイル名規則

tree_1.6.0-1_i386.deb

①パッケージ名称　・・　tree_
②バージョン番号　・・　1.6.0-
③Debianリビジョン番号　・・　1
④アーキテクチャ　・・　i386
⑤拡張子　・・　deb

#####dpkgコマンド

主なオプション

|オプション|説明|
|:-:|:-:|
|-E|同バージョンが存在する場合は、インストールしない|
|-G|新バージョンが存在する場合は、インストールしない|
|-R|ディレクトリを再帰的に処理する|

|アクション|説明|
|:-:|:-:|
|-i パッケージファイル名|パッケージをインストールする|
|-r パッケージ名|設定ファイルを残してアンインストールする|
|-P パッケージ名|設定ファイルも含めてアンインストールする|
|-I 検索パターン|インストール済みパッケージを検索して表示する|
|-S ファイル名検索パターン|指定ファイルが、どのパッケージからインストールされたファイルか表示する|
|-L パッケージ名|指定パッケージからインストールされたファイルを表示する|
|-s パッケージ名|パッケージ情報を表示する|
|--config パッケージ名|展開されたパッケージを構成する|
|--unpack パッケージ名|パッケージを展開する※インストールしない|

###4-3　apt-getコマンド
・APT(Advanced Packaging Tool)
・依存関係を調整しながらインストール、アップグレード、アンインストールができる
・インターネット経由で最新パッケージの入手や依存関係の解決ができる

・apt-getの書式
　apt-get [オプション] サブコマンド　パッケージ名

|オプション|説明|
|:-:|:-:|
|-d|ファイルをダウンロードする（インストールしない）|
|-s|システムを変更せず動作をシミュレートする|

|サブコマンド|説明|
|:-:|:--|
|clean|過去に保持していたパッケージファイルを削除する|
|dist-upgrade|システムを最新にアップグレードする|
|install|インストールまたはアップグレードする|
|remove|アンストールする|
|update|パッケージのデータを更新する|
|upgrade|システムの全パッケージのうち、他のパッケージを削除しないものをアップグレードする|

・リスト
apt-getを利用するには以下のリストに対象サイトのURLを記載する
/etc/apt/sources.list

・リストの書式
①deb ②対象URL　③distribution ④component

①deb
　・deb:パッケージを取得
　・deb-src：ソースを取得 
②対象URL
③distribution(バージョン名)
④component
　以下のような阿合
　main：公式ソフト
　restricte：デバイス用プロプライエタリなドライバ
　universe：コミニティでサポートされるソフト
　multiverse：著作権や法的な問題で制限されたソフト
　contrib：フリーではない依存関係のあるソフト
　non-free：利用と改変に制限のあるソフト

・最新のパッケージ情報を取得する

````
apt-get update
````

・アンイストール

````
apt-get remove ソフト名
````

・一括でアップデート

````
apt-get dist-upgrade
````

・削除を伴わない一括アップデート
dist-upgradeは重要性の高いパッケージをインストールするため既存パッケージを削除することがある。
削除しないときは以下を利用する

````
apt-get upgrade
````

###4-4　apt-cacheコマンド

パッケージ情報を照会・検索する。
インストールせず実行できる。

　書式：　apt-cache サブコマンド

|サブコマンド|説明|
|:-:|:--|
|search キーワード|指定キーワードで検索|
|show パッケージ名|一般情報を表示|
|showpkg|詳細情報を表示|
|depends パッケージ名|指定したパッケージの依存関係を表示|

####　aptコマンド

apt-getとapt-cacheを合わせたようなもの

　書式：apt [オプション] サブコマンド


###参考サイト
https://www.atmarkit.co.jp/ait/articles/1902/01/news045.html

https://www.atmarkit.co.jp/ait/articles/1708/31/news017.html

###履歴
2021/6/7 作成