3. Linuxのインストールとパッケージ管理
3.1. ハードディスクのレイアウト設計
3.1.1. Linuxに必要なパーティション
Linuxのインストールにはルートパーティションとスワップ領域の最低2つの領域が必要になる。
ルートパーティション
ルートパーティションは/
で表されるシステムファイルが含まれる領域のこと。
後述するパーティション分割を行うと障害発生の復旧が容易になる。
スワップ領域
スワップ領域は仮想メモリの領域であり、物理メモリ不足時に、仮想的なメモリ領域として一時的に使用する領域。
一般的には/swapfile
という名前になる。
搭載メモリの1から2倍は割り当てる必要がある。
パーティションを分割できるディレクトリ
また以下のルート以下のディレクトリはパーティションを切って割り当てることができる。 メリットは以下の通り。
- 柔軟なシステムの管理が可能
- ディスク障害児の復旧作業や障害の軽減
ディレクトリ | 説明 | 分けるメリット |
---|---|---|
/home | ユーザ別のホームディレクトリが置かれる | 環境引継ぎが可能(ディストリビューションの変更など) |
/boot | システムブートにに使われるディレクトリ | |
/var | ログやスプールが置かれる | ログをルートから分離できる |
/usr | 全体でシェアしたいプログラム/ライブラリ/ドキュメントが置かれる | |
/tmp | 一時ファイルが置かれるディレクトリ |
3.1.2. パーティションのレイアウト設計
パーティションのレイアウトを設計する場合以下の点を考慮して設計する必要がある。
- システムの用途
- 使用規模
- 使用目的
- ディスクの容量
- バックアップの方法
例: 200GBのハードディスク、1GBメモリ、ユーザ規模100人のファイルサーバを構築する場合
考慮事項としてはスワップ領域は物理メモリと同等、/boot
に先頭100MB程度含まれること、/
を最小化すること、/home
はユーザ数が多いファイルサーバという特性上最も多くすることがある。
- メモリの分割
- スワップ領域: 1GB
- /boot: 100MB
- /usr: 10GB
- /var: 10GB
- /: 1GB
- /home: 残りのすべて(約180GB)
例: 100GBのハードディスク、4GBのメモリのWebサーバをApacheで構築する場合
考慮事項としてはスワップ領域は物理メモリと同等、/boot
に先頭数100MB程度含まれること、/var/log
はログファイルが沢山たまることになるので多くとることがある。
- メモリの分割
- スワップ領域: 4GB
- /boot: 100MB
- /usr: 10GB
- /var: 20GB
- /var/log: 50GB
- /: 15GB
3.1.3. LVM
LVMは論理ボリューム管理と呼ばれる物理ボリュームを束ねて仮想ディスクを作る仕組みのこと。
物理ボリュームを束ねたものはボリュームグループとなり、ボリュームグループ上に仮想的なパーティションを作ることになる。 この仮想的なパーティションが論理ボリュームとなる。
3.2. ブートローダのインストール
3.2.1. ブートローダとGRUB
ブートローダは広義ではBIOSから呼び出されカーネルを呼び出すものでハードディスク等からOSを起動するためのプログラムを指す。 代表的なものにはGRUBがある。 GRUBの特徴は以下の通り。
- 多数のファイルシステムの認識が可能
- シェル機能の搭載
またGRUBにはバージョン0.9系のGRUB Legacyとバージョン1.9系のGRUB2があり、それぞれパーティションの数え方が異なる。
項目 | GRUB Legacy | GRUB2 |
---|---|---|
Version | 0.9x | 1.9x |
ディスク番号 | 0から | 1から |
パーティション番号 | 0から | 1から |
3.2.2. GRUBのインストール
GRUBのインストールは以下コマンドより行える。
sudo grub-install /dev/sda # /deb/sda の MBRに GRUB Legacyのインストール
grub-install -v # GRUBのバージョン確認
grub-install -V # GRUB2のインストール
3.2.3. GRUB Legacyの設定
GRUBの設定は/boot/grub/menu.lst
または/boot/grub/grub.conf
の編集で行える。
内部の表示には(hd0,0)
などと表示され0から始まる。
3.2.4. GRUB2の設定
GRUB2の設定は/boot/grub/grub.cfg
に自動生成されるためファイルを直接触ってはいけない。
設定の際に触るファイルは/etc/default/grub
となりgrub2-mkconfig
コマンドなどで設定を反映する。
なおパーティションは1から始まる。
3.3. 共有ライブラリ管理
ライブラリはよく使わられる機能をまとめ再利用するためのもの。 種類は2つあり、静的ライブラリと共有ライブラリがある。
3.3.1. 静的ライブラリ
静的ライブラリは実行プログラムにライブラリを含めた形でリンクされるライブラリ。 特徴は以下の通り。
- 1つのプログラムだけで動作させることができ別環境で動作可能
- プログラムのサイズが大きくなる
3.3.2. 共有ライブラリ
共有ライブラリはプログラム実行と同時にメモリ上に展開されるライブラリで複数のプログラム間で共有される。 特徴は以下の通り。
- プログラム全体のサイズが小さくなる
- プログラム実行時に適切に配置されたライブラリが必要となる
3.3.3. スタティックリンクとダイナミックリンク
リンクはプログラムからライブラリの機能を呼び出すことを指す。
スタティックリンク
スタティックリンクではコンパイル時に実行ファイルに埋め込む。 これにより呼び出されるのは静的ライブラリとなる。
ダイナミックリンク
ダイナミックリンクではコンパイル時では埋め込んでおかず実行時にライブラリの機能が呼び出しされる。 これにより呼び出されるのは共有ライブラリとなる。
なお共有ライブラリは/lib
または/usr/lib
に配置されており、Linuxのディストリビューションでは共有ファイルはlib.xxx.so
という名前で構築されている。
3.3.4. lddコマンド
ldd
コマンドでは必要な共有ライブラリの確認をすることができる。
なお.so
を探す場所は/etc/ld.so.conf
で定義される。
3.3.5. ldconfigコマンド
ldconfig
コマンドでは共有ライブラリを認識させることができる。
これの実行によりld.so.cache
が更新される。
3.3.6. 共有ライブラリの環境変数
共有ライブラリの検索で使用する環境変数はLD_LIBRARY_PATH
となる。
3.4. Linuxのパッケージ管理
3.4.1. パッケージとは
パッケージは実行プログラムや設定ファイル、ドキュメントを1つにまとめたもの。 パッケージの管理はディストリビューションにより異なる。
- Debian系
- Debian GNU/Linux
- 拡張子は「.deb」
- RPM系
- Red Hat Enterprise Linux
- 拡張子は「.rpm」
3.4.2. パッケージ管理とは
パッケージ管理システムはパッケージのインストール/アンインストール、アップデートを簡易にする仕組み。 パッケージ管理システムではどこにパッケージが保存されているか管理、依存関係競合関係の管理を行う。
- パッケージの依存関係
- あるパッケージに含まれるファイルを別のパッケージが利用している場合の関係
- パッケージの競合関係
- あるパッケージによってインストールされるファイルが、すでに別のパッケージによりインストールされている場合、すでにインストールされているファイルと競合する場合の関係
3.4.3. パッケージの管理形式
パッケージの管理形態のDebian系、RedHat系に互換性はないが、alias
コマンドで相互交換が可能。
Debian系(deb) | RedHat系(rpm) | |
---|---|---|
ディストリビューション | Debian系 | RedHat系 |
パッケージの管理 | dpkg, apt | rpm, yum |
3.5. Debian系のパッケージ管理
3.5.1. dpkgコマンドによるパッケージ管理
パッケージファイル名の構成
パッケージであるdebファイルは以下のような構成となる。
* sample ... パッケージ名 * 1.2.3 ... バージョン番号 * 1 ... リビジョン番号 * i386 ... CPUアーキテクチャコンフィグファイル(/etc/dpkg/dpkg.cfg
)
dpkgのコンフィグファイルは/etc/dpkg/dpkg.cfg
にある。
dpkgコマンド
オプション | 説明 |
---|---|
-E | 同じバージョンがすでにインストールされている場合、インストールは行わない |
-G | 新バージョンがすでにインストールされている場合、インストールはしない |
-R | ディレクトリ構造を再帰的に処理する |
アクション | 説明 |
---|---|
-i | パッケージをインストール |
-I | インストール済みの詳細情報を表示 |
-r | パッケージをアンインストール (設定ファイルは残す) |
-P | パッケージをアンインストール (設定ファイルを含めて完全に削除) |
-l | インストール済みパッケージを検索して表示 |
-L | パッケージからインストールされたファイルを一覧表示 |
-s | インストール済みのパッケージの詳細情報の表示 |
-S | 指定したファイルが、どのパッケージからインストールされたものかを調査 |
-c | パッケージに含まれるファイルの一覧表示 |
-C / --audit | パッケージのインストール状態を検査 |
dpkg-reconfigureコマンド
dpkg-reconfigure
コマンドは既にインストールされたdebパッケージの状態を再設定するもの。
3.5.2. apt-getコマンドによるパッケージ管理
apt-get
コマンドはアプリケーションの依存関係を調整しながらパッケージのインストール、アップグレードを行うため依存解決までできる。
またインターネット経由で最新パッケージ取得する。
apt-getコマンド
apt-getコマンドのオプション | 説明 |
---|---|
-d | インストールせずにダウンロードのみ行う |
-s | システムを変更せずに動作をシミュレートする |
--purge | 設定ファイルを含めてパッケージを削除する (removeコマンドと一緒に指定) |
clean | ダウンロードしたパッケージファイルを削除する |
dist-upgrade | Debianのシステムを最新にアップグレードする |
install | 指定したパッケージをインストール、またはアップグレードする |
remove | 指定したパッケージをアンインストール ( 設定ファイルは残す ) |
update | パッケージのリスト情報(データベース)を最新に更新する |
upgrade | システムの全パッケージを最新版にアップグレードする |
オプション | 説明 |
---|---|
-c | 設定ファイルの指定(デフォルトでは/etc/apt/sources.list ) |
-y | 全部yes |
-d | ダウンロードのみ |
-s | システムを変更せず動作をエミュレートする |
no-install-recommends | 必須ではないパッケージをインストールしない |
--resinstall | 最新版がインストールされていてもインストール |
clean | 取得したパッケージのローカルリポジトリを掃除する |
dist-upgrade | ディストリビューションをアップグレードする |
install | 新規パッケージをインストールする |
remove | パッケージが削除される(削除されたパッケージの設定ファイルは残る) |
purge | パッケージが削除かつ完全削除(設定ファイルも含む) |
update | 設定されたすべての取得元からパッケージ情報をダウンロードする |
upgrade | 現在インストール済みのすべてのパッケージで利用可能なアップグレードをインストールする |
full-upgrade | システムのメジャーバージョンを最新にアップグレードする(dist-upgrade と同じ) |
autoremove | 必要なくなったパッケージの削除 |
パッケージの取得先(設定ファイル)
パッケージの取得先は/etc/apt/sources.list
、/etc/apt/sources.list.d/*
に保存される。
/etc/apt/sources.list
の中身は以下のように表示される。
...
deb http://security.ubuntu.com/ubuntu bionic-security main restricted
# deb-src http://security.ubuntu.com/ubuntu artful-security main restricted
deb http://security.ubuntu.com/ubuntu bionic-security universe
# deb-src http://security.ubuntu.com/ubuntu artful-security universe
deb http://security.ubuntu.com/ubuntu bionic-security multiverse
# deb-src http://security.ubuntu.com/ubuntu artful-security multiverse
apt-cacheコマンド
apt-cache はインストール済みとインストール可能なパッケージの情報の照会と検索が可能なコマンド。
サブコマンド | 説明 | 使用例 |
---|---|---|
search - 正規表現 | 正規表現パターンによってパッケージ一覧を検索 | apt-cache search apache2 \| head -n 5 |
show | 一般的な情報を表示 | apt-cache show apache2 \| head -n 20 |
showpkg <パッケージ名> | 詳細な情報を得る | apt-cache showpkg apache2 |
depends - <パッケージ名> | パッケージの生の依存情報を表示 | apt-cache depends apache2 |
aptitudeコマンド
aptitude
コマンドはapt-getよりも高機能なコマンド。
apt-getとapt-cacheの機能をもつ。
aptコマンド
aptコマンドはapt-getの後発のコマンド。 主なオプションはapt-getと同じもの使える。
aptのリポジトリの登録
aptのリポジトリの登録はadd-apt-repository
コマンドで可能。
3.6. RedHat系のパッケージ管理
3.6.1. rpmコマンドによるパッケージ管理
パッケージファイル名の構成
パッケージであるrpmファイルは以下のような構成となる。
* sample ... パッケージ名 * 1.2.3 ... バージョン番号 * 1 ... リビジョン番号 * x86_64 ... CPUアーキテクチャrpmコマンド
オプション | 説明 |
---|---|
-v, --verbose | 詳細を表示 |
-h, --hash | #で進捗表示 |
-i, --install | インストール |
-F, --freshen | パッケージがインストールされていればアップグレード |
-U, --upgrade | パッケージがインストールされていればアップグレード。なければインストールする |
-e, --erase | パッケージをアンインストール |
使用例は以下の通り。
rpm -qコマンド
rpmの照会モード。
オプション | 説明 |
---|---|
-a, --a | インストール済みパッケージの全表示 |
-i, --info | 情報の表示 |
-f, --file | ファイルをバッケージに |
-l, --list | パッケージ->ファイル群 |
-p | パッケージ名でパッケージ指定 |
-R, --requires | 依存関係調べる |
--changelog | 変更履歴見る |
-K, --checksig | RPMパッケージの電子署名の検証 |
使用例は以下の通り。
rpmパッケージの展開
rpmパッケージの展開はrpm2cpio
コマンドで行う。
このコマンドではRPMバッケージをインストールせず、内容を展開を行う。
3.6.2. yumコマンドによるパッケージ管理
yum
はAPTツール同様、パッケージ間の依存関係を解決しながらダウンロード、インストール、アップデート、アンインストールすることができ、またインターネット経由で最新パッケージ取得してくれるコマンド。
yumコマンド
オプション | 説明 |
---|---|
install | インストール |
remove | アンインストール |
update | 全パッケージのアップデート |
update [package] | 指定のパッケージのアップデート実施 |
check-update | アップデートパッケージが存在するパッケージを一覧表示 |
info [package] | パッケージ情報の確認 |
list | リポジトリにあるすべてのパッケージ情報表示 |
search | キーワード検索 |
パッケージの取得先(設定ファイル)
パッケージの設定ファイルは/etc/yum.conf
、/etc/yum.repos.d/*
に保存される。
/etc/yum.repos.d/hogehoge.repo
の中身の例は以下のように表示される。
...
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
3.6.3. dnfコマンドによるパッケージ管理
dnfコマンドは基本的にyumとほぼ同じように使えるコマンド。
3.6.4. zipperコマンドによるパッケージ管理
openSUSEではzypperコマンドでパッケージ管理を行う。
3.7. 仮想環境のゲストOSとしてのLinux
3.7.1. インスタンス
インスタンスはクラウドサービス上の仮想的マシンのことを指す。 XaaSで提供される。
3.7.2. Cloud-initとは
cloud-init はクラウドにおけるインスタンスの早期初期化を行うLinuxパッケージのこと。 ディストリビューションで使用可能な場合はインストール後にインスタンスの多くの一般的なパラメータを直接設定できる。 設定できるパラメータは以下の通り。
- ホスト名
- SSH鍵
- 一般ユーザー
- インストールするパッケージ