コンテンツにスキップ

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から始まる

# 設定ファイルの生成
sudo grub-mkconfig -o /boot/grub/grub.cfg 

3.3. 共有ライブラリ管理

ライブラリはよく使わられる機能をまとめ再利用するためのもの。 種類は2つあり、静的ライブラリ共有ライブラリがある。

3.3.1. 静的ライブラリ

静的ライブラリは実行プログラムにライブラリを含めた形でリンクされるライブラリ。 特徴は以下の通り。

  • 1つのプログラムだけで動作させることができ別環境で動作可能
  • プログラムのサイズが大きくなる

3.3.2. 共有ライブラリ

共有ライブラリはプログラム実行と同時にメモリ上に展開されるライブラリで複数のプログラム間で共有される。 特徴は以下の通り。

  • プログラム全体のサイズが小さくなる
  • プログラム実行時に適切に配置されたライブラリが必要となる

3.3.3. スタティックリンクとダイナミックリンク

リンクはプログラムからライブラリの機能を呼び出すことを指す。

スタティックリンク

スタティックリンクではコンパイル時に実行ファイルに埋め込む。 これにより呼び出されるのは静的ライブラリとなる。

ダイナミックリンク

ダイナミックリンクではコンパイル時では埋め込んでおかず実行時にライブラリの機能が呼び出しされる。 これにより呼び出されるのは共有ライブラリとなる。

なお共有ライブラリは/libまたは/usr/libに配置されており、Linuxのディストリビューションでは共有ファイルはlib.xxx.soという名前で構築されている。

tree -L 1 /usr/lib | grep so

3.3.4. lddコマンド

lddコマンドでは必要な共有ライブラリの確認をすることができる。

なお.soを探す場所は/etc/ld.so.confで定義される。

ldd /usr/bin/ldd

3.3.5. ldconfigコマンド

ldconfigコマンドでは共有ライブラリを認識させることができる。 これの実行によりld.so.cacheが更新される。

sudo ldconfig

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.deb
* sample ... パッケージ名 * 1.2.3 ... バージョン番号 * 1 ... リビジョン番号 * i386 ... CPUアーキテクチャ

コンフィグファイル(/etc/dpkg/dpkg.cfg)

dpkgのコンフィグファイルは/etc/dpkg/dpkg.cfgにある。

dpkgコマンド

dpkg -i <パッケージ名(.deb含む)>
オプション 説明
-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 <オプション> <パッケージ名>
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 はインストール済みとインストール可能なパッケージの情報の照会と検索が可能なコマンド。

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.rpm
* sample ... パッケージ名 * 1.2.3 ... バージョン番号 * 1 ... リビジョン番号 * x86_64 ... CPUアーキテクチャ

rpmコマンド

rpm -i <パッケージ名(.rpm含む)>
オプション 説明
-v, --verbose 詳細を表示
-h, --hash #で進捗表示
-i, --install インストール
-F, --freshen パッケージがインストールされていればアップグレード
-U, --upgrade パッケージがインストールされていればアップグレード。なければインストールする
-e, --erase パッケージをアンインストール

使用例は以下の通り。

rpm -ivh nmap-5.51-2.el6.i686.rpm # nmapのインストール

rpm -qコマンド

rpmの照会モード。

rpm -q<オプション>
オプション 説明
-a, --a インストール済みパッケージの全表示
-i, --info 情報の表示
-f, --file ファイルをバッケージに
-l, --list パッケージ->ファイル群
-p パッケージ名でパッケージ指定
-R, --requires 依存関係調べる
--changelog 変更履歴見る
-K, --checksig RPMパッケージの電子署名の検証

使用例は以下の通り。

rpm -qa | grep bash # bashというパッケージ探す
rpm -qi bash # bashパッケージの情報取得
rpm -qR bash # bashの依存関係の調査

rpmパッケージの展開

rpmパッケージの展開はrpm2cpioコマンドで行う。 このコマンドではRPMバッケージをインストールせず、内容を展開を行う。

3.6.2. yumコマンドによるパッケージ管理

yumはAPTツール同様、パッケージ間の依存関係を解決しながらダウンロード、インストール、アップデート、アンインストールすることができ、またインターネット経由で最新パッケージ取得してくれるコマンド。

yumコマンド

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鍵
  • 一般ユーザー
  • インストールするパッケージ