Linuxを日常的に使う実験ブログ

Linuxのインストールとは何をする作業なのか?Linuxインストールの全体像を解説

 2024-10-02

 Linux全般

Linuxのインストール作業は一体何をしているのか?

近年、多くのLinuxディストリビューションが使い勝手の良いGUIのインストーラを用意しており、ユーザーはインストーラのウィザード画面にしたがって入力や選択をするだけでインストーラが自動で判別し処理を進めてくれることが多くなりました。これによりインストール自体は非常に簡単になり、Linuxを手軽に始められるユーザーが増えることはとても嬉しいことだと思っています。一方で、自らの手を動かしコマンドを打ちながらインストールする機会が減ったことでインストールという作業が一体何を行っているのかが見えにくくなったという側面もあると思います。

システムを使うだけの人間にとって、インストーラがインストール作業で何をしているかなど知らなくても全く問題ありません。しかしインストール作業を手作業で一度行ってみるとインストーラが何を行っているのかが明確に分かるようになり、システムの構成や設定ファイルの場所などにも詳しくなるメリットがあります。また、インストールト時のトラブルにも臨機応変に対応できる場合があります。例えばGUIのインストーラがディスクのパーティショニングの部分でエラーを出してしまっても手動で解決するなどのケースが考えられます。今回は特定のディストリビューションの話ではなく、一般的なLinuxシステムのインストール作業について行っていることを見ていきたいと思います。

インストール作業を行うための環境づくり

まずはインストール作業を行う環境づくりが必要です。現代ではインストール中にパッケージの更新作業を行うことも珍しくなくなりネットワークへの接続はほぼ必須の環境と言っても過言では無いでしょう。また、適切なキーボードレイアウトが設定されていないと作業時に適切に入力ができず困ってしまいます。このようにまず作業を進める上での準備をこの段階で行います。

ネットワークへの接続

過去にCDやDVDでLinuxシステムが配布されていたことを思うと、必ずしもネット環境は必須ではないのですが、現代ではインストール時に最新のパッケージ群をネット上からダウンロードするインストーラもあるので、現代社会においてはほぼ必須の環境と言えると思います。有線接続であればインストールメディアに搭載されたOSがハードウェアのネットワークインターフェースを認識し、dhcpcd等のサービスによってネットに自動で接続するケースが多いです。場合によっては手動で接続する必要があります。

無線LANに関してはインストールメディア側にハードウェア側に対応するファームウェアやドライバが入っていてデバイスを認識できればWifi接続できる場合もあります。これはインストールメディア側でiwdなどの無線用のサービスが使用できることが前提です。

キーボードレイアウトの設定

地味ですが、重要な設定です。キーボードレイアウト(キーマップ)が適当でないと非常に不快な思いをしますし、作業が進みません。多くのGUIインストーラでは言語を選択する際にキーマップを選べるようになっています。コマンドでインストールを進めるタイプのディストリビューションではloadkeysコマンドが用意されているケースもあります。

ディスクの準備

インストール作業でもっとも悩ましい作業の一つかも知れません。BIOSのファームウェアがLegacy BIOSなのかUEFIなのかによって、ハードディスクのパーティショニングテーブルをMBRにするのかGPTにするのか?などの選択があり、更にUEFIの場合にはFAT32形式でフォーマットをするESP(EFI System Partition)を設ける必要があるなど、予備知識が必要な部分でもあります。

更に、システムとホームディレクトリを一つのパーティションにするのか、ホームディレクトリだけは別のパーティションに分けるのか?スワップはどのぐらいの容量にするのか?などインストールをする人間が決断すべき点が多くあります。多くのインストーラでは、これらの煩わしさ軽減するためにディスクを全消去してパーティショニングを自動で行う「おまかせ」モードがあったりします。

パーティショニング

ハードディスクを役割ごとに適当な容量で分割し、どの役割に振り当てるかを決める作業です。最低限必要なのはルート用のパーティションです。場合によってはhome用、boot用などのパーティションを分ける場合もあります。UEFIファームウェアのマシンでは512MiB〜1GiB程度のパーティション(ESP)を別途設ける必要があります。このESPは/boot/boot/efiなどにマウントされる場合もあります。

コマンドでパーティションを行う場合はTUIや対話型のパーティショニングツールを使います。多くのインストーラにfdisk, cfdisk, gdisk, cgdisk, parted等のツールが搭載されています。デスクトップ環境が同梱されたインストーラではGUIのGPartedが付属していることもあります。

フォーマット

パーティションを分けたら役割に応じたフォーマットが必要になります。ルートやホームに関しては多くの場合ext4でのフォーマットになるかと思います。場合によってはBtrfsを選択するケースもあるかも知れません。UEFIマシンの場合はESPをFAT32でフォーマットします。

ext4のフォーマットをコマンドで行う場合は

mkfs.ext4 /dev/sdX

FAT32の場合は

mkfs.vfat -F 32 /dev/sdX

で行います。

マウント

パーティショニングとフォーマットを終えたら次はマウントです。マウントする場所はインストールメディアによって異なります。例えばArch Linuxの場合は/mntにルートパーティションをマウントします。homeパーティションを別に分ける場合は/mnt/homeのようにルートパーティションの中にマウントします。GUIインストーラではマウント位置を指示するのみで自動でマウントされます。

スワップの作成

多くのGUIインストーラではパーティション時に”swap”を選ぶだけで、自動で生成されます。手動でスワップを作成する場合はコマンドで

mkswap /dev/sdX
swapon /dev/sdX

のようにします。

システムを構成するファイルのコピー

先程マウントしたルートパーティションにシステムのコアとなるファイルをコピーしていきます。多くのディストリビューションではLinuxカーネルは各ディストリビューション用にビルドされたバイナリを/bootディレクトリにコピーしますが、Gentoo Linuxのように手動でカーネルをビルドしてインストールする場合もあります。

この段階でユーザーが選択したデスクトップ環境やアプリケーションなど、システムのコア以外のパッケージを導入するインストーラーもあります。最も時間のかかる部分ですのでコーヒーでも淹れて一休みしておきましょう。

インストールするシステム内での設定

システムに必要なパッケージが一式新しいパーティション上に揃いましたので、この新たなシステム上で必要な設定を行っていくことになります。

fstabの生成

fstabはシステムが起動する際に、どのパーティションをどこにマウントするのかをシステムに知らせるための重要な設定です。多くの先進的なインストーラでは自動で生成してくれます。Arch Linuxのようにgenfstabのような自動生成スクリプトが用意されているものもありますが、手動で生成する必要があるディストリビューションもあります。fstabファイルは多くの場合/etc/fstabに配置されます。

rootパスワードの設定

インストール後のシステムにログインできるようにrootパスワードを決定します。UbuntuやSolusのようにrootでのログインをさせない方式のディストリビューションではrootパスワードは決めず、管理者ユーザーを作成します。

タイムゾーンの設定

タイムゾーンの設定の本質的な話は/etc/localtimeというバイナリファイルをどのように設定するかという話になります。/usr/share/zoneinfo/Region/Cityのファイルをコピーしたり、シンボリックリンクを設置したりなどの直接的な方法もあれば、Debian系やOpenRCを選択したGentooのように/etc/timezoneというテキストファイルを設定し、ツールによって/etc/localtimeを設定するなどの流儀が存在します。Systemdを採用したシステムではtimedatectlコマンドが用意されています。

localeの設定

localeの設定をします。GUIインストーラの場合はlocaledefコマンドの実行や/etc/locale.confファイルの作成などを自動で行ってくれますが、手動のインストーラの場合は自分で行う必要があります。各ロケールのロケールデータベースを作成する方法はArch LinuxやGentooではlocale-genコマンドが用意されていますし、Void Linuxではxbps-reconfigureによって設定を行います。

ネットワーク関連の設定

dhcpcdやNetworkManager等の必要なネットワークユーティリティをインストールしてサービスがブート時に有効になるように設定します。手動でネットワークの設定をすることもできます。インストール時に無線でのネットワーク接続を完了させる場合は必要なデバイスを認識させるためのファームウェアやドライブをインストールし、NetworkManagerやiwd等の無線接続に対応したツールを導入し設定します。

ユーザーの作成

ログイン可能なユーザーを作成します。rootでログインを許可していないディストリビューションの場合はsudoやwheelグループに属するsudoコマンドを実行可能な管理者権限のユーザーを作成します。ユーザーのパスワードも忘れずに設定します。

コンソール上のキーマップ、フォントの設定

新システムのキーマップの設定、コンソール画面のフォントを設定します。設定ファイルの場所は導入するinitにより異なります。Systemdを導入しているシステムでは/etc/vconsole.confに設定します。runitを使用しているシステムでしたら/etc/rc.confに設定を記載します。OpenRCを導入しているシステムでは/etc/conf.d/ディレクトリ以下に設定ファイルを生成もしくは編集します。GUIインストーラの場合は特に設定を行わなくても自動で設定が行われます。

必要なパッケージの導入・設定

エディタやデスクトップ環境など必要なパッケージがあればapt, pacman, zypper, dnf, eopkg等のパッケージ管理用のコマンドを用いて導入します。事前にシステムの更新をしておくと良いと思います。GUI環境を導入する場合はX11またはWayland環境下でのキーマップの設定を行います。コンソール用に設定したキーマップとは異なりますので注意が必要です。デスクトップ環境を含めてインストーラが自動で導入してくれる場合はキーマップの設定を意識する必要はありません。

ブートローダのインストール

ここが最後の最も重要な部分です。ブートローダを正しくインストールするか、Linuxカーネルを直接ブート(EFISTUBによる起動)できるように設定しないと新システムの起動ができなくなります。多くの主要ディストリビューションではGRUB2が標準のブートローダとして採用されているケースが多いですが、手動で好みのブートローダをインストールするディストリビューションもあります。BIOSファームウェアがLegacy BIOSなのかUEFIなのかによって選択すべきブートローダやインストール方法が変わります。

まとめ

「Linuxをインストールする」とはどういうことなのかをディストリビューション個別の作業という視点ではなく、より一般的な作業として解説してみました。冒頭でも述べたとおりインストーラがハードウェアの認識やパーティショニング、ブートローダのインストールなどの作業を自動で行ってくれるようになり非常に簡単になった反面、きれいなGUI画面の裏側で何を行っているのかが見えにくくなった面があります。インストール作業の全体像がつかみ、ディストリビューション固有の作法を知ることが、お使いのLinuxシステムをより深く知る入口になるかも知れません。この記事が楽しいLinuxライフの一助となれば幸いです。