Arch linuxで自宅サーバを構築する

Kota Yamanaka
@toka

今回はLinuxについての記事です。
Arch Linuxについての説明と、自前のマシンにArch Linuxを導入してサーバを構築する手順をまとめます。
なぜ今どきレンタルやクラウドでなくオンプレミスの自宅サーバかというと、特に理由は無く私の趣味が10割です。我々の活動でも一部Arch Linuxのサーバを活用しているほか、個人的にもその他の用途で自宅サーバを運用しているため、その紹介と備忘録も兼ねて記事を書きたいと思います。
今回は後述するArch Linuxの特徴の一つでもある最小構成でのサーバの立ち上げ手順をまとめ、実運用するのに必要なソフト類の導入は別の記事にすることとします。
なぜArch Linuxか
個人向けのLinuxといえばUbuntuやDebian、Fedoraなどを始めとした様々なディストリビューションが公開されており、ぞれぞれに特徴や好みがあるかと思います。今回はその中でも最近個人的によく使用しているArch Linuxについて取り上げますが、なぜArch Linuxが良いのか、特徴や気に入っている点をいくつか紹介していきます。
- シンプルかつ最小限なシステム
Arch Linuxの開発理念として「シンプリシティ」、「ミニマリズム」というものがあります。OSインストール時には必要最小限のパッケージしか含まれず、その後ユーザーが必要に応じてソフトウェアを追加していくことで所望のシステムを構築していきます。自身でソフトウェアを取捨選択するため多少の手間とある程度の知識が必要となる一方で、リソースの節約やトラブル発生時の対応が複雑でないというメリットがあります。個人的にはシステムのシンプルさと明確さゆえにLinuxの学習用としても優れていると感じます。
- ローリングリリースモデル
Arch LinuxはOSのバージョン(Ubuntu 24.10みたいなもの)が明確には存在しないローリングリリースモデルを採用しています。システム全体を再インストールするなどの大規模なアップデートをする必要は無く、定期的に各ソフトウェアのアップデートを行うことで常に最新の状態を保つことができます。
- 充実した日本語サポート
意外と日本語の情報も充実しています。公式wikiがかなり充実しており、インストールや基本的なソフトウェアの解説は十分です。また、Ubuntuなどにはユーザー数の差からも劣りますが、少し調べてみると個人発信の情報も多く見つけられるのでちょっとしたトラブルなどは日本語の情報のみで解決することもできます(もちろん原文の公式サイトやフォーラム、manコマンドなどを参照するに越したことはないですが)。
インストールの手順
基本的には公式wikiのインストールガイドに沿って進めていきます。
インストールメディアの準備
ダウンロードページの日本のサーバ(jaist.ac.jp等)からisoファイル(archlinux-20yy.mm.dd-x86_64.iso)をダウンロードします。ダウンロードしたisoファイルをRufusなどのツールを使用してUSBメモリに焼いてインストールメディアの完成です。
ライブ環境の起動
用意したUSBメモリをインストールするPCに挿して起動します。この時にBIOSの設定でUEFIのUSBメモリから起動するようにしてください。BIOS設定画面はPCにもよりますが、起動途中のメーカーのロゴが表示されている間にF2やdelキーを連打すると入れます。また、レガシーではなくUEFIを選択する点に注意してください。
USBメモリから起動するとUEFIブートマネージャの画面に遷移するので Arch Linux install medium (x86_64, UEFI) を選択します。起動が完了するとbashコマンドを受け付けるようになるので、ここからはシェル操作でインストール作業を行います。
デフォルトではUS配列キーボードになっているため、JIS配列キーボードを使用する場合は以下のコマンドを実行します。
Loading...
ネットワークの接続
今起動しているライブ環境では有線LANを接続していれば自動的にネットワークに接続が確立されます。
Loading...
上記コマンドで接続を確認し、接続されていればCtrl+Cでコマンド終了します。
システムクロックの更新
Loading...
システムクロックをネットワーク上と同期させます。更に以下コマンドでシステムクロックを確認できます。
Loading...
パーティションの作成
Arch Linuxをインストールする領域を作成します。今回はArch Linux単体でのインストールですが、デスクトップ用などでWindowsとデュアルブートする場合はWindowsの領域を上書きしてしまう可能性があるので注意して作業してください。
Loading...
lsblkコマンドでシステムに認識されているディスク一覧が表示されますので、インストールしたいディスクを確認します。ストレージの種類によって名称が異なりますが、sda, sdbやnvme0n1と表示されていると思います。今回はsdaの内蔵SSDにインストールします。
Loading...
gdiskコマンドに入ってパーティション編集を行います。pで現在のパーティション構成を表示、既に存在している場合はdで削除します。
nで新しいパーティション作成を開始します。"Partition number"と"First sector"はデフォルトで良いのでそのままenter、"Last sector"は+hogeMや+hogeGと入力するとそのサイズで作成できます。"Partition Type"はEFIシステムパーティションはEF00、スワップは8200、rootは8300で作成します。
Loading...
上記のようにパーティションが作成できたら、wで実際にディスクにパーティションを書き込んでgdiskを終了します。
パーティションのフォーマット
作成したパーティションをそれぞれ適したファイルシステムでフォーマットします。
EFIパーティションはfat32でフォーマットします。
Loading...
スワップはmkswapでフォーマットします。
Loading...
rootはext4でフォーマットします。
Loading...
ファイルシステムのマウント
作成したファイルシステムをライブ環境の/mnt以下にマウントしていきます。まずはrootをマウントします。
Loading...
続いて/mnt/bootディレクトリを作成しつつEFIシステムパーティションをマウントします。
Loading...
更にスワップを有効化します。
Loading...
Arch Linuxのインストール
事前準備が完了したのでいよいよArch Linuxをインストールしていきます。Arch Linuxではpacmanというパッケージ管理ソフトを使用しており、/etc/pacman.d/mirrorlistに記載してあるミラーリポジトリからパッケージをインストールしますので、まずはこれを編集します。
Loading...
ミラーリストの一番上に日本のミラーを記載します。
Loading...
ミラーリストを編集したら、以下コマンドで必要パッケージをインストールします。今回は必要最低限ですが、ここで必要に応じて予めパッケージをインストールすることができます。
Loading...
パッケージが順次インストールされますので完了するまで待ちましょう。
fstabの生成
以下コマンドを実行してfstab(システム起動時のファイルシステム自動マウントのための情報を記載したファイル)を生成します。
Loading...
chroot
以下のコマンドを実行してインストールしたシステムにchrootします。
Loading...
タイムゾーン
以下コマンドでタイムゾーンを設定します。
Loading...
ハードウェアクロックをシステムクロックに同期させます。
Loading...
ローカライゼーション
/etc/locale.genを編集し、"en_US.UTF-8 UTF8"と"ja_JP.UTF-8 UTF-8"の行をアンコメントしてから以下のコマンドを実行します。
Loading...
/etc/locale.confにLANG環境変数を設定します。
Loading...
また、JISキーボードを使用している場合は/etc/vconsole.confに設定を記載します。
Loading...
ホスト名の設定
任意のホスト名を決めて/etc/hostnameに記載します。
initramfsイメージの作成
以下コマンドでinitramfsイメージを作成します。
Loading...
rootのパスワードの設定
passwdコマンドでroot(管理者)のパスワードを設定します。
ブートローダーのインストール
ここまででArch Linuxのシステムのインストールと必要最低限の設定が完了しましたが、現在起動しているArch LinuxはUSBメモリから起動したシステムです。今後USBメモリ無しで起動できるように、最後にブートローダーをインストールします。
今回はsystemd-bootというブートローダーを使用します。以下コマンドでEFIシステムパーティションにsystemd-bootをインストールします。
Loading...
続いてローダーの設定を行います。/boot/loader/loader.confに以下を記載します。
Loading...
更に/boot/loader/entriesディレクトリにarch.confを作成し、以下のように記載します。
Loading...
/dev/sda3のPARTUUIDは以下コマンドで調べることができます。
Loading...
インストールしたシステムの起動
以上でArch Linuxのインストールは完了です。exitコマンドでchrootを抜けた後にshutdownコマンドで電源オフし、USBメモリを抜いて起動します。ブートローダーを選択する画面で自動でarch.confが選択され、ログイン画面まで行ければ成功です。
サーバ用の設定
ここまでの作業でまっさらなArch Linuxマシンが構築できましたので、続いて少しだけサーバ用の設定を行っていきます。と言っても今回は具体的なアプリケーションには触れず、こちらも最低限の設定のみ紹介しようと思います。
通常ユーザーの追加
サーバの管理は基本的に管理者権限(root)で行いますが、SSHでのログインなどのために通常ユーザを作成しておきます。下記コマンドで新規ユーザとホームディレクトリ /home/<username> を作成しログインシェルを /bin/bash に設定します。
Loading...
デフォルトではパスワードが空なので設定します。
Loading...
有線ネットワーク接続(固定IP)の設定
まず以下コマンドでネットワークインターフェース名を確認します。
Loading...
いくつか項目が表示されると思いますが、その中で"en"から始まるものが有線のイーサネットデバイス名ですので、控えておきます。(例:enp0s31f6)
今回はネットワークサービスとしてsystemd-networkdを使用しますので、以下コマンドでサービスを有効化および起動します。
Loading...
続いて以下コマンドでシンボリックリンクを作成します。
Loading...
/etc/systemd/network/wired.networkというファイルを作成し、以下内容を記載します。(デバイス名とIPアドレスは適宜ご自身の環境に合わせてください)
Loading...
サーバ側の設定が完了したら、ゲートウェイ(ルーター)側で固定IPアドレス割り付けを設定します。詳細は各ルーターのマニュアルを参照してください。設定が完了したらサービスを再起動します。
Loading...
pingで通信確認できれば設定完了です。
Loading...
SSHの設定
別のLinuxやWindowsのマシンからサーバに接続してリモートで操作するためにSSHを導入します。まずはopensshをインストールします。
Loading...
設定ファイル/etc/ssh/sshd_configを以下のように編集します。今回はセキュリティ向上のためrootログインを拒否、パスワード認証を無効にして公開鍵認証を使用します。行数は環境によって異なる場合があります。
Loading...
クライアント側で公開鍵を生成してUSBメモリなどでサーバに転送します。Linuxの場合は以下コマンドで生成されたファイルのうちのid_rsa.pubを転送します。
Loading...
クライアントで作成した公開鍵を ~/.ssh/authorized_keys に追加します。この作業は通常ユーザで実行してください。
Loading...
パーミッションを変更します。
Loading...
サービスを有効化し設定を反映させて完了です。
Loading...
クライアント側から接続できることを確認してみましょう。Linuxの場合は以下コマンドでssh接続します。
Loading...
ファイアウォールの設定
リモートから接続するようにしたのでセキュリティ向上のためにファイアウォールを設定します。標準でインストールされているiptablesを使用します。
設定ファイルの /etc/iptables/iptables.rules に以下を記載します。外部からの新規アクセスは基本的にパケットを廃棄し、確立済の接続と許可したポートからの接続のみパケットを受け付けるように設定します。
Loading...
サービスの有効化および設定を反映させます。
Loading...
また、以下コマンドで設定を確認できます。
Loading...
おわりに
長くなりましたが、ここまでの作業で外部からリモートで操作できて最低限のファイアウォールを備えたまっさらなサーバの構築が完了しました。あとは必要に応じてサーバソフトをインストールしてお好みのサーバに仕上げていきましょう。