【FreeBSD 13】バージョンアップでコンフリクトが発生した場合の対処方法

# はじめに
「FreeBSD 13.0-RELEASE-p13」から、「FreeBSD 13.3-RELEASE」にバージョンアップしようとした際に、設定ファイルのコンフリクトが発生した。
## 環境
OS : FreeBSD 13.0-RELEASE-p13
# やろうとしたこと
[下記の方法](#試したバージョンアップ方法)で、「FreeBSD 13.0-RELEASE-p13」から、「FreeBSD 13.3-RELEASE」にバージョンアップしようとした。
## 試したバージョンアップ方法
下記コマンドを実行し、バージョンをアップを試みた。
``` bash
# 1. 現在のバージョンを確認する。
freebsd-version -kur
# 2. 最新のセキュリティパッチをあてる。
freebsd-update fetch
freebsd-update install
# 3. アップグレードの準備（ファイルをダウンロード）する。
freebsd-update -r 13.3-RELEASE upgrade
# 4. アップグレードする（ダウンロードしたファイルをインストールする）。
/usr.sbin/freebsd-update install
# 5. 再起動する。
shutdown -r now
```
# 起きたこと
[アップグレードするコマンドコマンド](#アップグレードするコマンド)を実行した際に、下記メッセージが表示された。
``` text
The following file could not be merged automatically: 設定ファイルのパス
Press Enter to edit this file in vi and resolve the conflicts manually...
```
## アップグレードするコマンド
``` bash
freebsd-update -r 13.3-RELEASE upgrade
```
## 表示されたメッセージの詳細
``` text
The following file could not be merged automatically: 設定ファイルのパス
Press Enter to edit this file in vi and resolve the conflicts manually...
```
日本語に翻訳すると、「自動でマージできなったので、viで編集し、手動でコンフリクトを解消しろ。」と書いてある。

# 対処方法
「group」でコンフリクトが発生した場合を例に対処方法を記載する。
1. 下記メッセージに従い、Enterキーを押下する。
    ``` text
    The following file could not be merged automatically: /etc/group
    Press Enter to edit this file in vi and resolve the conflicts manually...
    ```
2. viエディタ上で、groupファイルの中身が表示されるので、下記の例のような部分を探す。
    ※ viエディタの使い方は、本記事では解説しない。
    ``` text : 編集前
    <<<<<<< current version
    wheel:*:0:root,TestUser
    =======
    wheel:*:0:root
    >>>>>>> new version
    ```
    ※ 上記例の意味は、下記の通りである。
    ``` text : 編集前
    <<<<<<< current version
    現在のバージョンの設定
    =======
    新しいのバージョンの設定
    >>>>>>> new version
    ```
3. 今回は、下記のように編集した。
    ``` diff_text : 編集後
    - <<<<<<< current version
    wheel:*:0:root,TestUser
    - =======
    - wheel:*:0:root
    - >>>>>>> new version
     ```
    ※ 設定ファイルに記載する内容は、ケースバイケースである。
4. 以下のようなメッセージが何度か表示され、表示されるたびに設定ファイルの確認が求められる。
    問題がなければ、「y」を入力し、Enterキーを押下する。
    ``` text
    The following changes, which occurred between 現在のバージョン and アップグレード先のバージョン have been merged into 設定ファイルのパス :
    === （省略） ===
    設定ファイルの内容
    Does this look reasonable (y/n)?
    ```
5. 削除されるファイルの一覧を確認する。
    ``` Text
    The following files will be removed as part of updating to アップグレード先のバージョン:
    === （以下省略) ===
    ```
6. 追加されるファイルの一覧を確認する。
    ``` Text
    The following files will be updated as part of updating to アップグレード先のバージョン:
    === （以下省略) ===
    ```
7. 下記メッセージが表示されたことを確認する。
    ``` Text
    To install the downloaded upgrades, run "/usr.sbin/freebsd-update install"
    ```
# TIPS
## コンフリクトが発生する設定ファイル
- /etc/group
- /etc/master.passwd
- /etc/ssh/sshd_config
## 「group」でコンフリクトが発生した際のメッセージ
``` text
The following file could not be merged automatically: /etc/group
Press Enter to edit this file in vi and resolve the conflicts manually...
```
## 「master.passwd」でコンフリクトが発生した際のメッセージ
``` text
The following file could not be merged automatically: /etc/master.passwd
Press Enter to edit this file in vi and resolve the conflicts manually...
```
## 「sshd_config」でコンフリクトが発生した際のメッセージ
``` text
The following file could not be merged automatically: /etc/ssh/sshd_config
Press Enter to edit this file in vi and resolve the conflicts manually...
```
## 「master.passwd」でコンフリクトを解消する際の注意事項
「master.passwd」の2番目のフィールドに記載されているパスワードハッシュは、削除しないこと。
※ 「master.passwd」は、「:」（コロン）区切りで記載されている。
``` text
user:パスワードハッシュ:1001:1001:testUser:/home/testUser:/bin/sh
```
# さいごに
本記事では、バージョンアップ時のコンフリクトを設定ファイルを編集し、解消する方法を示した。
## 参考文献
※ 下記2サイトは2024年9月22日現在アクセスができないが、復旧した場合も考え、記載している。

https://www.zabutone.com/upgrading-from-freebsd-13-1-release-to-13-2-release/

https://www.zabutone.com/upgrading-from-freebsd-13-2-release-to-13-3-release/