2025年11月28日

FreeBSD 14.3 をインストールする (その 1): OS 本体のインストール

中古のノートパソコンを入手したので、FreeBSD 14.3-RELEASE をクリーンインストールすることにしました。いつもなら、せっかくプリインストールされた Windows を消すのがもったいなくてマルチブートにするんですが、今回はどーんと FreeBSD 専用機にしようと思います。

「その 1」では、インストーラ (bsdinstall) を使って OS 本体をインストールするところまでをやります。「その 2」以降では Wayland などをやろうかなと思ってますが、まだ模索中なのでどうなるかわかりません。

供試 PC

富士通 LIFEBOOK U9310/D

  • CPU: Intel Core i5-10310U 1.70 GHz
  • メモリ: 8 GB
  • ストレージ: SSD (256 GB) Windows 11 Pro プリインストール済み
  • ディスプレイアダプタ: Intel UHD Graphics (CPU 内蔵)
  • 無線 LAN アダプタ: Intel Wi-Fi 6 AX201 160 MHz

用意するもの

Windows 11 のバックアップ

このあと Windows 11 を削除しますが、気が変わってやっぱり使いたくなるかもしれないので、一応バックアップを取りました。

インストールメディアを作る

ISO イメージを書き込む USB メモリをパソコンに挿し、Windows 上で Rufus を起動して次のように操作します。

  1. {デバイス} 欄で書き込み先の USB メモリを選択する。
  2. {選択} ボタンをクリックして FreeBSD-<バージョン>-RELEASE-amd64-memstick.img を選択する。
  3. {スタート} ボタンをクリックする。
図 1: Rufus でインストールメディアを作る
図 1: Rufus でインストールメディアを作る

ストレージの現状を把握する

ストレージをまっさらにしてしまう前に、セクタサイズ、セクタ数、パーティション構成などの情報を取得しておきます。ここで先ほど作った FreeBSD のインストールメディアを使います。

パソコンにインストールメディアを挿して、インストールメディアから起動します。LIFEBOOK の場合は富士通のロゴが出るあたりで F12 キーを押すと、起動メディアの選択メニューが表示されます。FreeBSD のインストーラが起動して、最初のメニューが表示されたら Shell を選択します。

図 2: ここで Shell を選ぶ
図 2: ここで Shell を選ぶ

シェルが起動したら、まず camcontrol devlist コマンドで SSD デバイス名の見当をつけます。

# camcontrol devlist
<SAMSUNG MZNLN256HAJQ-00007 MVT2306Q>  at scbus0 target 0 lun 0 (pass0,ada0)

この出力から ada0 だとわかります。この例では「pass0」というデバイスも表示されていますが、これは ATA/SCSI コマンドを ATA/SCSI デバイスに直接送るためのデバイスらしいです (詳細は camcontrol のマニュアルページを「PASS-THROUGH」で検索)。

次いで camcontrol identify コマンドでセクタに関する情報を得ます。

# camcontrol indentify ada0
...
sector size           logical 512, physical 512, offset 0
LBA supported         268435455 sectors
LBA48 supported       500118192 sectors
...

セクターサイズは logical、physical ともに 512 バイト。ということでこの SSD は 512 ネイティブであり、パーティションを切るときに 4K アライメントはあんまり気にしなくていいようです。また、セクタ数が 500118192 であることもわかります。

最後に、gpart コマンドで現在のパーティション構成を確認しておきます。パソコンを出荷状態に戻したくなった際には役立つかもしれません。

# gpart show -l ada0
=>       34  500118125  ada0  GPT  (238G)
         34       2014        - free -  (1.0M)
       2048    1024000     1  Basic data partition  (500M)
    1026048     204800     2  EFI system partition  (100M)
    1230848      32768     3  Microsoft reserved partition  (16M)
    1263616  498853888     4  Basic data partition  (238G)
  500117504        655        - free -  (328K)

世の中には「512 ネイティブ」「4K ネイティブ」「Advanced Format (512E)」という 3 種類のハードディスクが出回っているために、パーティションを切るときは次の点を考慮するのがよいとされています。

  • (1) 先頭パーティションの開始セクタは 2048 が推奨される。
  • (2) 第 2 パーティション以降の開始セクタは 8 の倍数とする (4096 / 512 = 8 に由来)。
  • (3) パーティションのサイズ (バイト数) は 4096B (= 4KB) の倍数とする (4K アライメント)。

このうち (2) については、今はどうなのか知りませんが、以前 gdisk というツールを使ったときに 2048 の倍数になっていないと怒られた記憶があります。そこで私は (1)、(2) をまとめて次の 2 点を考慮するようにしています。

  • 各パーティションの開始セクタは 2048 の倍数になるようにする。
  • パーティションのサイズ (バイト数) は 4096B (= 4KB) の倍数とする (4K アライメント)。

この点をふまえて、上の結果を観察してみましょう。

最初に現れる 2014 セクタの free な領域は、第 1 パーティションを 2048 セクタ目から開始するための詰め物です。この領域は 34 セクタ目から始まっています。その前には何があるかというと、Protective MBR と Primary Partition Table というものがあります。

それに続いてパーティション 1 ~ 4 があります。順に回復パーティション、EFI システムパーティション、Microsoft 予約パーティション、C ドライブ用パーティションと思われます。いずれのパーティションも上に挙げた 2 つの条件をきっちり守っているようです (512 ネイティブな SSD なので本来は不要だと思います)。

その後ろにも 655 セクタ分の free な領域がありますが、これはアライメントの条件を守ったために生じた端数と思われます。また、上の出力には表示されない謎の領域が、ディスクの末尾に 33 セクタ分 (= 500118192 - (500117504 + 655)) あります。ここには Backup Partition Table が格納されていると思われます (UEFI Specification 2.10 第 5.3.1 節参照)。

パーティション構成を検討する

EFP システムパーティションを経験則により 260 M、スワップパーティションを実メモリの2倍の 16G とし、残りを OS とデータ用のパーティションとしました。そのうえで、開始セクタとパーティションサイズに関して上のほうに掲げた2条件を考慮して、最終的に下の表のようになりました。

No.開始セクタサイズ [sector]サイズ用途
-

40

2008

1 MiB

free

1

2048

532480

260 MiB

EFI システム

2

534528

466028544

222 GiB

OS / ユーザーデータ

3

466563072

33554432

16 GiB

スワップ

-

500117504

648

324 KiB

free

ちなみに、この表にはありませんが、ディスクの先頭に Protective MBR & Primary Partition Table が、末尾に Backup Partition Table が、それぞれ 40 セクタ分付きます。これは後ほど gpart コマンドでパーティションを切るときに自動的に作成されます。

パーティションを作成する

上の表にしたがってパーティションを切っていきます。引き続き gpart コマンドを使用します。サブコマンド等詳しくは gpart(8) のマニュアルを参照してください。「ディスクを消去しますか?」みたいな確認は一切なく、与えられたコマンドをその場でバンバン実行していく作りになっているみたいなので、注意してください。

まず現在のパーティションを全削除します。

# gpart destroy -F ada0
ada0 destroyed
# gpart show -l ada0
gpart: No such geom: ada0.

新しいパーティションスキームを作成します。

# gpart create -s gpt ada0

上のほうで検討した表にしたがってパーティション 1 ~ 3 を作成します。

# gpart add -i 1 -t efi -b 2048 -s 532480 ada0
# gpart add -i 2 -t ms-basic-data -s 466028544 ada0
# gpart add -i 3 -t ms-basic-data -s 33554432 ada0
# gpart show -l ada0
=>       40  500118112  ada0  GPT  (238G)
         40       2008        - free -  (1.0M)
       2048     532480     1  (null)  (260M)
     534528  466028544     2  (null)  (222G)
  466563072   33554432     3  (null)  (16G)
  500117504        648        - free -  (324K)

経験則によって、パーティション 2、3 をいったん ms-basic-data にしています。こうしておかないと、以前はなんかうまくいかなかったような記憶があります。あとでそれぞれ freebsd-ufs と freebsd-swap に修正します (後述)。

なお、Primary Partition Table や Backup Partition Table は gpart が勝手に作ってくれるので、気にしなくても大丈夫です。

で、EFI システムパーティション (ada0p1) を FAT32 でフォーマットします。

# newfs_msdos -F 32 -c 1 /dev/ada0p1

それから、これは不要かもしれませんが (インストーラが自動的にやってくれるかも)、いまフォーマットした EFI システムパーティションに /boot/loader.efi をコピーします。

# mount_msdosfs /dev/ada0p1 /mnt/
# mkdir -p /mnt/EFI/BOOT/
# cp /boot/loader.efi /mnt/EFI/BOOT/BOOTX64.EFI
# umount /mnt

これで Shell モードでの作業は終了です。exit コマンドで抜けます。

# exit

bsdinstall を使ってインストールする

以下、インストーラの指示に従って作業を進めます。スクリーンショットが小っちゃくてすみませんが、雰囲気で察してください。

OS 本体のインストール

まず OS 本体をインストールして root のパスワードを設定するところまでです。インストーラを起動して (あるいは前節で Shell モードを抜けた続きで) Welcome 画面が表示されているところ (図 3(a)) からスタートします。

  1. Welcome 画面で [Install] を選択する (図 3(a))。
  2. Keymap Selection 画面で好きなキーマップを選択する (図 3(b))。
    私は英語配列がしっくりくるので [United States of America (Caps Lock acts as Left Ctrl)] です。日本語キーボードなら [Japanese 106] あたりかと思います。
  3. Set Hostname 画面でホスト名を入力する (図 3(c))。
    私は好きな食べ物の名前を付けることが多いです。
  4. Distribution Select はデフォルトのまま次へ (図 3(d))。
  5. Partitioning 画面で [Manual] を選択 (図 3(e))。
  6. OS / データ用のパーティション (図 3(f) の場合だと ada0p2) にカーソルを合わせて [Modify] を選択する。入力内容は下記のとおり (図 3(g)):
    • Type: freebsd-ufs
    • Size: (自動入力)
    • Mountpoint: /
    • Label: FreeBSD UFS (わかりやすいように付ける)
  7. 続いて スワップ用のパーティション (図 3(h) の場合だと ada0p3):
    • Type: freebsd-swap
    • Size: (自動入力)
    • Mountpoint: (空欄)
    • Label: FreeBSD swap (わかりやすいように付ける)
  8. 入力を終えて [Finish] を選択すると、本当にディスクを消去してよいか訊かれる (図 3(i))。よければ [Commit] を選択するとインストールが始まる。よくなければ [Revert & Exit] または [Back] を選択する。
  9. OS の基本コンポーネントがインストールされるので、しばらく待つ。
  10. root のパスワードを入力する (図 3(j))。
図 3: OS 本体のインストール
図 3: OS 本体のインストール

ネットワーク設定

いつもならネットワーク設定は後回しにするんですが、14.3-RELEASE &インテルの Wi-Fi チップという組み合わせでは、それだと都合が悪いみたいです。

ちらっと調べたところによると、

  • iwlwifi という Linux 用のドライバを使用する (FreeBSD には Linux 用のドライバを利用するための LinuxKPI というしくみがある) 。
  • ドライバに加えて、インテルが配布しているファームウェアが必要。
  • ファームウェアは FreeBSD のベースシステムには含まれていないので、別途ダウンロードする必要がある。
  • インストール時にネットワーク設定をやっておけば、ファームウェアのダウンロードもやってくれる。
  • インストール後にファームウェアをダウンロードするには、有線 LAN やテザリングでインターネットに接続する必要がある。

ということのようです。「鶏が先か、卵が先か」みたいな話ですが、Wi-Fi を使いたいからファームウェアをダウンロードするのに、なんで Wi-Fi を使ってファームウェアをダウンロードすることができるんですかね??そのあたりはよくわかってませんが、とにかくまあここでネットワークの設定をしておけば、あとはよきに計らってくれるみたいです。

このあたりの話で参考になりそうな URL をいくつか貼っておきます。

そういうわけで、次の手順でネットワーク設定を行いました。

  1. 自動認識された iwlwifi0 を選択する (図 4(a))。
  2. Regdomain/country を変更したいので [Yes] を選択する (図 4(b))。
  3. Country selection で [JP] を選択する (図 4(c))。
  4. 選んだ選択肢が間違っていると表示される。後で設定し直すことにして(後述)、ここは [Ignore] で抜ける (図 4(d))。
    ※ これはインストーラのバグらしいです。詳細:
    https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=287538
  5. ネットワークのスキャンが始まる (図 4(e))。わが家の無線 LAN ルータは ANY 接続拒否設定になっているので、ここは [Skip] で抜ける。
  6. リスキャンしないので [No] で抜ける (図 4(f))。
  7. 手動で設定したいので [Yes] を選択する (図 4(g))。
  8. わが家の SSID を入力する (図 4(h))。
  9. わが家の暗号方式を選択する (図 4(i))。
  10. わが家の WPA2 パスフレーズを入力する (図 4(j))。
  11. IPv4 の設定をするので [Yes] を選択する (図 4(k))。
  12. DHCP を使用したいので [Yes] を選択する (図 4(l))。
  13. IPv6 は使用しないので [No] を選択する (図 4(m))。
  14. DNS サーバの IP アドレスを入力する (図 4(n))。
    わが家は無線 LAN ルータにおまかせなので、その管理用 IP アドレスを入力します。
図 4: ネットワーク設定
図 4: ネットワーク設定

残りの設定

あとはだいたいいつものとおりです。

  1. Select local or UTC では日本に住んでいる方は「No」を選択し (図 5(a))、
  2. Time Zone Selector で [Asia] を選択し (図 5(b))、
  3. Countries in Asia で [Japan] を選択し (図 5(c))、
  4. Confirmation で [Yes] を選択する (図 5(d))。
  5. Time & Date はあとで設定するので [Skip] (図 5(e, f))。
  6. System Configuration と System Hardening はデフォルトのまま (図 5(g, h))。
  7. FreeBSD Firmware Installation はそのまま [OK] を押す (図 5(i))。
    前節のようにネットワーク設定をやっておけば、ここで Wi-Fi やら何やらのファームウェアをダウンロードしてくれます。
  8. Add User Accounts で一般ユーザのアカウントをひとつ作っておく (図 5(j, k))。例えば次のような感じ。
    • Username: miji
    • Full name: Mijinco
    • Login group: miji (デフォルト)
    • Invite mijinco into other groups?: wheel operator (空白文字で区切って複数指定可)
    • Login class: default (デフォルト)
    • Shell: tcsh (あとで zsh に変更しようと思う)
    • Home directory: /home/miji (デフォルト)
    • Home directory permissions: (空欄)
    • Use an empty password?: no (デフォルト)
    • Use a random password?: no (デフォルト)
    • Enter password: (パスワード入力)
    • Enter password again: (パスワード再入力)
    • Lock out the account after creation?: no (デフォルト)
  9. Final Configuration で [Exit] を、Manual Configuration で [No] を選択する (図 5(l, m))。
  10. [Reboot] か [Shutdown] を選択しておしまい (図 5(n))。
図 5: 残りの設定
図 5: 残りの設定

ネットワーク設定の修正

本稿の最後に、bsdinstall で行ったネットワーク設定を少し手直しします。

Country selection

図 4(d) で出ていたエラーを直します (といっても、もしかしたらインテルの Wi-Fi チップに関しては、この設定は意味がないかもしれません。詳しくは「Location Aware Regulatory (LAR) 」で検索してみてください)。

これまでの手順のとおりに iwlwifi ドライバが設定されたとすると、/etc/rc.conf には次のように書かれていると思います。

/etc/rc.conf
wlans_iwlwifi0="wlan0"
ifocnfig_wlan0="WPA DHCP"

その下あたりに図 4(d) で選びたかった設定を追加します。

/etc/rc.conf
create_args_wlan0="country JP"

/etc/wpa_supplicant.conf の修正

bsdinstall のネットワーク設定で入力した SSID や WPA2 パスフレーズは /etc/wpa_supplicant.conf というファイルにベタ書きされます。パスフレーズがそのまんまというのもあれなので、wpa_passphrase というツールを使って事前共有キー (PSK) に書き直します。

  1. wpa_passphrase コマンドを実行する。
    # wpa_passphrase <わが家の SSID> <わが家のパスフレーズ>
    
    次のような出力が得られる:
    network={
        ssid=<わが家の SSID>
        #psk=<わが家のパスフレーズ>
        psk=<事前共有キー (16 進数で 64 桁の文字列)>
    }
    
  2. /etc/wpa_supplicant.conf の中でわが家のパスフレーズが書かれている行を丸ごと削除する。
  3. 代わりに手順 1 で得られた出力から、事前共有キーの行を ("psk=" の部分も含めて) コピーして、削除した行があった位置に貼りつける。

また、このファイルの下のほうに次のような記述があったんですが、フリー Wi-Fi に接続するための設定?ぽいので、削除しました。

network={
   priority=0
   key_mgmt=NONE
}

修正が済んだらネットワークを再起動します。

# service netif restart

これで OS 本体はインストールできたし、インターネットにつながるようにもなってキリがいいので、いったんここまでにします。

関連記事