2. Linuxのインストールとパッケージ管理
2.1 ハードディスクのレイアウト設計
2.1.1 Linuxインストールに必要なパーティション
- ルートファイルシステムに割り当てるルートパーティション
- スワップ領域
最低限上記2つのパーティションは必須 加えてさらにパーティションを分ける理由として
- 柔軟なシステム管理を行うことが出来る
- ディスクに障害が発生したときの被害を抑える事が出来る
- 障害発生時にスムーズな復旧作業が出来る
/home
一般ユーザがそれぞれ利用するファイルが格納される。/homeを別にしておくとディストリビューションを変更したり、再インストールしたりする際、環境を引き継げる
/var
各種ログファイルやメールスプールなど更新頻度の高いファイルが格納される。
/usr
プログラムやライブラリ、ドキュメントを格納する
/boot
RAIDを利用する際、/bootパーティションを分けておくとよい
スワップ領域
仮想メモリ領域として利用される。スワップ領域のサイズの目安は搭載されている物理メモリの1~2倍
/(ルート)
ルートファイルシステム
2.1.2 パーティションのレイアウト設計
次の点を考慮し設計すること
- システムの用途
- ディスクの容量
- バックアップの方法
2.2 ブートローダーのインストール
ストレージからOSを読み込んで気動するプログラムをブートローダーと呼ぶ
2.2.1 GRUBのインストール
GRUBの特徴
- 多数のファイルシステムを認識可能
- シェル機能を搭載し、コマンドによる高度な管理が可能
# grub-install /dev/sda
GRUB2の場合
# grub2-install --version
grub2-install (GRUB) 2.02~beta2
2.2.2 GRUB Legacyの設定
- /boot/grub/menu.lst
| パラメータ | 説明 |
|---|---|
| timeout | メニューを表示している時間(秒) |
| default | デフォルトで起動するエントリの番号 |
| title | メニューに表示されるエントリ名 |
| root | rootデバイスの指定 |
| kernel | 起動するカーネルイメージファイルと起動オプションの指定 |
| makeactive | ルートパーティションをアクティブ化 |
| chainloader | 指定されたセクタの読み込みと実行 |
| hiddenmenu | 起動時に選択メニューを表示しない |
2.2.3 GRUB2の設定
設定ファイルは/boot/grub/grub.cfgだが、直接編集しなくても、/etc/default/grubで設定し、grub-mkconfigコマンドで変更が反映される
/etc/default/grubの主なパラメータ
| パラメータ | 説明 |
|---|---|
| GRUB_TIMEOUT | 起動メニューがタイムアウトするまでの秒数 |
| GRUB_DEFAULT | 起動メニューがタイムアウトしたときにデフォルトOSとして選択されるエントリ |
| GRUB_CMDLINE_LINUX | カーネルに渡されるオプション |
2.2.4 ブートオプションの指定
ブートオプションを指定するには、起動時の画面でEキーを押す
| パラメータ | 説明 |
|---|---|
| root=デバイス | ルートパーティションとしてマウントするデバイス |
| nousb | USBデバイスを使用しない |
| single | シングルユーザモードで起動する |
| 1 ~ 5 | 指定したランレベルで起動する |
2.3 共有ライブラリ管理
- 静的ライブラリ : プログラムの作成時にその実行ファイル内に組み込まれるライブラリ
- 共有ライブラリ : プログラムの実行時にロードされ、複数のプログラム間で共有されるライブラリ
2.3.1 スタティックリンクとダイナミックリンク
- スタティックリンク(静的リンク) : コンパイル時に実行ファイルに埋め込む
- ダイナミックリンク(動的リンク) : 実行時にライブラリの機能を呼び出す(実行時にリンク)
ダイナミックリンクによって呼び出されるライブラリ
共有ライブラリ
/libまたは/usr/libディレクトリに配置される
2.3.2 必要な共有ライブラリの確認
例) catコマンドが必要とする共有ライブラリ
$ ldd /bin/cat
/lib、/usr/lib以外からライブラリを検索したい
/etc/ld.so.confに記述する 実際にはバイナリのキャッシュファイルである/etc/ld.so.cacheが参照される
ldconfigコマンドは、/etc/ld.so.confファイルに基づいて/etc/ld.so.cacheを再構築する
# ldconfig
その他のディレクトリも検索対象に加えたい場合
環境変数LD_LIBRARY_PATHにディレクトリリストを記述する
2.4 Debianパッケージの管理
パッケージ : 実行プログラム、設定ファイル、ドキュメントなどを1つのファイルにまとめたもの
2.4.1 パッケージ管理とは
どのようなパッケージがどこにインストールされているかを管理したり、パッケージ間の競合を回避したりする仕組みを提供するのがパッケージ管理システムである
あるパッケージが別のパッケージに依存しているというような関係を、パッケージの依存関係という
- Debian形式 : Debian系、Ubuntu等
- RPM形式 : Red Hat系、CentOS等
alienコマンドを使って相互に形式を変換することもできる
2.4.2 dpkgコマンドを用いたパッケージ管理
dpkg : Debian系でのパッケージ管理を行うコマンド
# dpkg [オプション] アクション
- dpkgコマンドの主なオプションとアクション
| オプション/アクション | 説明 |
|---|---|
| -E | すでに同じバージョンがインストールされている場合、インストールしない |
| -G | すでに新バージョンがインストールされている場合、インストールしない |
| -R(–recursive) | ディレクトリ内を再帰的に処理する |
| -i(–install) パッケージ名 | パッケージをインストールする |
| -r(–remove) パッケージ名 | 設定ファイルを残してパッケージをアンインストールする |
| -P(–purge) パッケージ名 | 設定ファイルも含め完全にパッケージをアンインストールする |
| -l(–list) 検索パターン | インストール済みパッケージを検索して表示する |
| -S(–search) ファイル名検索パターン | 指定したファイルがどのパッケージからインストールされたかを表示する(パターンにはワイルドカード使用可能) |
| -L(–listfiles) パッケージ名 | 指定パッケージからインストールされたファイルを一覧表示する |
| -s(–status) パッケージ名 | パッケージの情報を表示する |
| –configure パッケージ名 | 展開されたパッケージを構成する |
| –unpack パッケージ名 | パッケージを展開する(インストールはしない) |
2.4.3 apt-getコマンド
(Advanced Packaging Tool) 依存関係を調整しながら、パッケージのインストール等を行う
- apt-getコマンドの主なオプションとサブコマンド
| オプション/サブコマンド | 説明 |
|---|---|
| -d | ファイルをダウンロードする(インストールはしない) |
| -s | システムを変更せず動作をシュミレートする |
| clean | 過去に取得し保持していたパッケージファイルを削除する |
| dist-upgrade | システムを最新にアップグレードする |
| install | パッケージをインストールまたはアップグレードする |
| remove | パッケージをアンインストールする |
| update | パッケージデータベースを更新する |
| upgrade | システムの全パッケージのうち、他のパッケージを削除しないものを、アップグレードする |
2.4.4 apt-cacheコマンド
パッケージ情報を照会・検索ができる
- 主なサブコマンド
| サブコマンド | 説明 |
|---|---|
| search キーワード | 指定したキーワードを含むパッケージを検索する |
| show パッケージ名 | パッケージについての詳細情報を表示する |
| showpkg パッケージ名 | パッケージについての情報を表示する |
| depends パッケージ名 | 指定したパッケージの依存関係情報を表示する |
2.4.5 aptitudeコマンド
apt-getより高度な機能を持っており、正規表現を使った検索機能が優れている
- 主なサブコマンド
| サブコマンド | 説明 |
|---|---|
| update | パッケージデータベースを更新する |
| show パッケージ名 | パッケージ情報を表示する |
| search パターン | 指定したパターンでパッケージを検索する |
| install パッケージ名 | パッケージをインストールまたはアップグレードする |
| remove パッケージ名 | 設定ファイルを残してパッケージをアンインストールする |
| purge パッケージ名 | 設定ファイルも含めてパッケージをアンインストールする |
| download パッケージ名 | パッケージファイルをダウンロードする |
| full-upgrade | システムの全てのパッケージを最新にアップデートする |
| safe-upgrade | システムの全パッケージのうち、他のパッケージを削除しないものをアップグレードする |
- 主な検索パターン
| 検索パターン | 説明 |
|---|---|
| ~n 正規表現 | パッケージ名が正規表現パターンにマッチするパッケージを検索する |
| ~d 正規表現 | パッケージの説明が正規表現パターンにマッチするパッケージを検索する |
| ~V 正規表現 | パッケージのバージョンが正規表現パターンにマッチするパッケージを検索する |
| ~i | インストール済みのパッケージを検索する |
| ~U | 更新可能なパッケージを検索する |
| ~M | 自動的にインストールされたパッケージを検索する |
2.5 RPMパッケージの管理
2.5.1 RPMパッケージ
Red Hatが開発したパッケージ管理システム
2.5.2 rpmコマンド
パッケージのインストール
-iオプションを使用する
# rpm -ivh <パッケージ名>
- -v: 詳細情報を表示する
- -h: 進行状況を#で表示する
パッケージのアップグレード
-U: アップグレードに加え、無ければインストールする-F: アップグレードのみ行う
# rpm -Fvh <パッケージ名>
パッケージのアンインストール
-eオプションを使用する
# rpm -e <パッケージ名>
--nodeps: 依存関係を無視する
パッケージ情報の照会
-qオブションを使用する
例) パッケージ名にvimが含まれるもの
$ rpm -qa | grep vim
例) bashの情報
$ rpm -qi bash
例) /bin/bashは何のパッケージからインストールされたか
$ rpm -qf /bin/bash
パッケージからどのようなファイルがインストールされるのかを調べる
$ rpm -qlp <パッケージ名>
パッケージの依存関係を調べる
$ rpm -qR less
2.5.3 YUM
Red Hat系LinuxでAPTに相当するパッケージ管理システム
YUMの設定は/etc/yum.confと/etc/yum.repos.dディレクトリ以下のファイルで行う
アップデート
- アップデート対象のパッケージリストを表示する
# yum check-update
- インストールされているパッケージをアップデートする
# yum update
- パッケージを指定したアップデート
例) opensslをアップデート
# yum update openssl
インストール
# yum install <パッケージ名>
アンインストール
# yum remove <パッケージ名>
パッケージ情報の確認
- パッケージ名を指定して個別に情報の確認
# yum info <パッケージ名>
- リポジトリにある全パッケージ情報を確認
# yum list
- パッケージ情報の検索
# yum search <キーワード>
パッケージグループ単位のインストール
- 利用可能なパッケージリスト確認
$ yum grouplist
- グループインストール
# yum groupinstall "グループ名"
パッケージファイルのダウンロード
$ yumdownloader <パッケージ名>