「インストール - F2FS」の版間の差分

提供: MochiuWiki : SUSE, EC, PCB

編集の要約なし
229行目: 229行目:
このキーで署名されたものはシステムから信頼されるため、セキュリティリスクとなる可能性があることに注意する。<br>
このキーで署名されたものはシステムから信頼されるため、セキュリティリスクとなる可能性があることに注意する。<br>
<br>
<br>
==== SUSE 15.3 (セキュアブートが有効 / 無効も同様の手順で可能) ====
F2FSモジュールをデプロイする。<br>
sudo depmod -a $(uname -r)
<br>
/etc/modprobe.dディレクトリにある60-blacklist_fs-f2fs.confファイルを、以下のように編集する。<br>
sudo vi /etc/modprobe.d/60-blacklist_fs-f2fs.conf
<br>
# /etc/modprobe.d/60-blacklist_fs-f2fs.confファイル
<br>
# 編集前
blacklist f2fs
__THIS FILE MAY BE MODIFIED__
# 編集後
# blacklist f2fs
# __THIS FILE MAY BE MODIFIED__
<br>
PCを再起動して、F2FSファイルシステムが正常にマウントできるかどうか確認する。<br>
<br>
また、F2FSモジュールが正常に読み込まれているかどうかを確認するには、以下のコマンドを実行する。<br>
sudo modinfo f2fs
<br><br>
== F2FS Toolのインストール ==
== F2FS Toolのインストール ==
* パッケージ管理システムからインストール
* パッケージ管理システムからインストール

2022年11月17日 (木) 16:04時点における版

概要

SUSEにおいて、古いファイルシステムの多くは、セキュリティのためブラックリストとして設定している。
F2FS等のファイルシステムを使用するには、SUSE向けのLinuxカーネルをユーザ自身でコンパイルする必要がある。

ここでは、Linuxカーネルをコンパイルして、Linuxカーネルモジュールをインストールする手順を記載する。


F2FSモジュールのみインストールする方法 (推奨)

共通

Linuxカーネルのソースコードをダウンロード、または、インストールする。

  • パッケージ管理システムから、Linuxカーネルのソースコードをインストールする場合
    sudo zypper install kernel-source

  • Linuxカーネルの公式webサイトから、Linuxカーネルのソースコードをダウンロードする場合
    Linuxカーネルの公式webサイトまたはGithubにアクセスして、対応するバージョンのLinuxカーネルのソースコードをダウンロードする。
    あるいは、Linuxカーネルの公式webサイトにあるGitから、対応するバージョンのLinuxカーネルをダウンロードする。
    ダウンロードしたファイルを解凍する。
    tar xf linux-<バージョン>.tar.gz
    cd linux-<バージョン>


SUSE15.4かつパッケージ管理システムからLinuxカーネル(5.14.21-150400.22)のソースコードを取得した場合、
F2FSのソースコードの一部にバグが存在するため、以下に示すようにソースコードを修正する必要がある。

sudo vi /usr/src/linux-5.14.21-150400.22/fs/f2fs/file.c


# /usr/src/linux-5.14.21-150400.22/fs/f2fs/file.cファイル

# 修正前
1093行目 : filemap_invalidate_lock(mapping)
1101行目 : filemap_invalidate_lock(mapping)

# 修正後
1093行目 : filemap_invalidate_lock(inode->i_mapping)
1101行目 : filemap_invalidate_lock(inode->i_mapping)


既存のカーネルコンフィグ(/bootディレクトリ内にあるカーネルコンフィグ)を元に、新しいカーネルコンフィグを生成する。
make olderconfigコマンドは、可能な限り既存のカーネルコンフィグの設定を使用して、ビルドディレクトリ内に必要なファイルを生成する。

make -j $(nproc) olddefconfig O=.


必要であれば、Linuxカーネルのビルドディレクトリの.configファイルを編集する。

sudo vi /usr/src/linux-<カーネルのバージョン>/.config


  • SUSE 15.4
    以下の設定を追記する。
    # /usr/src/linux-<カーネルのバージョン>/.configファイル
    # ...略
    CONFIG_SQUASHFS_ZSTD=y
    CONFIG_PSTORE_ZSTD_COMPRESS=y
    # CONFIG_PSTORE_ZSTD_COMPRESS_DEFAULT=y
    CONFIG_CRYPTO_ZSTD=y
    CONFIG_ZSTD_COMPRESS=y
    CONFIG_ZSTD_DECOMPRESS=y
    CONFIG_MODULE_COMPRESS_ZSTD=y
    # ...略

  • SUSE 15.3以前
    "MODULE_COMPRESS"を検索して、"MODULE_COMPRESS"の直下に、以下の設定を追記する。
    # /usr/src/linux-<カーネルのバージョン>/.configファイル
    # ...略
    CONFIG_MODULE_COMPRESS=y
    CONFIG_MODULE_COMPRESS_XZ=y
    # ...略


F2FSのビルド設定を行うため、make menuconfigコマンドを実行する。

make menuconfig -j $(nproc)
# または
sudo make menuconfig -j $(nproc)


TUI画面が起動するので、[File systems] - [F2FS filesystem support]に移動して、[M]キーを押下する。
TUI画面下にある[Save]を選択して、上記の設定を保存する。

Zstd形式に圧縮する場合、[Linux Kernel Configuration] - [File systems] - [Miscellaneous filesystems] - [Include support for ZSTD compressed file systems]に移動して、[M]キーを押下する。
また、[Linux Kernel Configuration] - [Library routines] - [ZSTD_COMPRESS]に移動して、[M]キーを押下する。

Linuxカーネルから、F2FSのみをビルドする。

make scripts prepare modules_prepare -j $(nproc)
make -C . M=fs/f2fs -j $(nproc)

# または

sudo make scripts prepare modules_prepare -j $(nproc)
sudo make -C . M=fs/f2fs -j $(nproc) 


  • SUSE 15.4の場合
    生成したf2fs.koファイルは圧縮しない。

  • SUSE 15.3以前の場合
    生成したf2fs.koファイルをXZ形式に圧縮してもよい。
    cd fs/f2fs
    xz -kv f2fs.ko


/lib/modules/<使用しているLinuxカーネルのバージョン>/kernel/fs/f2fsディレクトリを作成して、f2fsカーネルモジュールをコピーする。

sudo mkdir /lib/modules/$(uname -r)/kernel/fs/f2fs
sudo cp f2fs.ko /lib/modules/$(uname -r)/kernel/fs/f2fs


共通

Linuxカーネルモジュールのインストール後は、以下のコマンドを実行することを推奨する。(ファイル容量が膨大なため)

sudo make clean -j $(nproc)      # .configファイルを残す
または
sudo make distclean -j $(nproc)  # .configファイル等の設定ファイルを全て削除する



カーネルモジュール全体をインストールする方法

Linuxカーネルをビルドするために必要なライブラリをインストールする。

sudo zypper install kernel-source


/usr/src/linux-<カーネルのバージョン>ディレクトリに移動して、以下のコマンドを実行する。

cd /usr/src/linux-<カーネルのバージョン>
sudo make menuconfig -j $(nproc)


TUI画面が起動するので、[File systems] - [F2FS filesystem support]に移動して、[M]キーを押下する。
TUI画面下にある[Save]を選択して、上記の設定を保存する。

SUSE15.3以前の場合、カーネルモジュールは、XZ形式に圧縮されている。
圧縮を有効にするには、.configファイルにMODULE_COMPRESS_GZIP=yオプションまたはMODULE_COMPRESS_XZ=yオプションを追記する必要がある。
(この設定は必須ではないが、SUSEの標準では、カーネルモジュールはXZ形式に圧縮されているため)

まず、Linuxカーネルのビルドディレクトリの.configファイルを開いて、"MODULE_COMPRESS"を検索する。
検索した"MODULE_COMPRESS"の直下に、以下の設定を追記する。

sudo vi /usr/src/linux-<カーネルのバージョン>/.config


# /usr/src/linux-<カーネルのバージョン>/.configファイル

# ...略

CONFIG_MODULE_COMPRESS=y
CONFIG_MODULE_COMPRESS_XZ=y

# ...略


次に、Linuxカーネルをコンパイルする。

sudo make -j $(nproc)


Linuxカーネルモジュールのみをインストールする。
インストールディレクトリは、/lib/modules/<カーネルのバージョン>-defaultディレクトリである。

sudo make modules_install


最後に、/etc/modprobe.dディレクトリにある60-blacklist_fs-f2fs.confファイルを、以下のように編集する。

sudo vi /etc/modprobe.d/60-blacklist_fs-f2fs.conf


# /etc/modprobe.d/60-blacklist_fs-f2fs.confファイル

# 編集前
blacklist f2fs
__THIS FILE MAY BE MODIFIED__

# 編集後
# blacklist f2fs
# __THIS FILE MAY BE MODIFIED__


PCを再起動して、F2FSファイルシステムが正常にマウントできるかどうか確認する。

※注意 1
Linuxカーネルをアップデートした場合は自動的にF2FSモジュールが削除されるため、再度、F2FSモジュールをインストールする必要がある。
もし、既にF2FSモジュールのバックアップが存在する場合、f2fs.ko.xzファイルを以下のディレクトリにコピーして、モジュール群をデプロイすることもできる。

# F2FSモジュールのコピー
sudo mkdir /lib/modules/$(uname -r)/kernel/fs/f2fs/
sudo cp f2fs.ko.xz /lib/modules/$(uname -r)/kernel/fs/f2fs/

# モジュール群のデプロイ
sudo depmod -a $(uname -r)


※注意 2
もし、VMware WorkStationをインストールしている場合は、併せて、Linuxカーネルヘッダもインストールする必要がある。

sudo make headers_install


Linuxカーネルモジュールのインストール後は、以下のコマンドを実行することを推奨する。(ファイル容量が膨大なため)

sudo make clean -j $(nproc)      # .configファイルを残す
または
sudo make distclean -j $(nproc)  # .configファイル等の設定ファイルを全て削除する



F2FSモジュールの署名 (セキュアブートが有効の場合)

SUSE 15.4

セキュアブートが有効の場合、F2FSモジュールの署名を登録する必要がある。
また、ユーザが勝手にモジュールファイルをZstandard形式等へ圧縮してはならない。(モジュールの署名に失敗するため)

署名を登録する手順を以下に示す。

まず、署名に必要な設定ファイルを作成する。

mkdir -p ~/MOK/F2FS && cd ~/MOK/F2FS
vi F2FS.config


# ~/MOK/F2FS/F2FS.configファイル

[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts

[ req_distinguished_name ]
O = SUSE Linux Products GmbH (User Add F2FS)            # 任意の名前
CN = SUSE Linux Enterprise Secure Boot (User Add F2FS)  # 任意の名前
emailAddress = suse@localhost                                # 任意のメールアドレス

[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid


キーペアを作成する。

openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config ./F2FS.config \
-outform DER -out ./F2FS.der -keyout ./F2FS.priv \
-addext "extendedKeyUsage=codeSigning"


次に、MOK(Module owned Key)にキーをインポートする。
--root-pwオプションを付加することにより、再起動時のF2FSモジュールの署名において、rootパスワードが必要となる。

sudo mokutil --import ./F2FS.der --root-pw


PCを再起動して、上記のキーの署名する。

sudo systemctl reboot


F2FSモジュール(f2fs.ko)を署名して、モジュールを読み込む。

sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 ./F2FS.priv ./F2FS.der /lib/modules/$(uname -r)/kernel/fs/f2fs/f2fs.ko
sudo depmod -a $(uname -r)  # モジュール依存リストを更新する
sudo modprobe -v f2fs       # F2FSモジュールをロードする
lsmod | grep f2fs           # 正常に読み込まれたかどうかを確認する


F2FSモジュールが正しく署名されているかどうかを確認する。
正常に読み込まれている場合は、"F2FS.der is already enrolled"と表示される。

cd <F2FSモジュールの署名ファイルが存在するディレクトリ>
sudo mokutil --test-key ./F2FS.der


上記の署名は、カーネルがアップデートされた場合、再度、署名が必要となることに注意する。

作成したキーは信頼されるため、キーを適切に保存する必要がある。
このキーで署名されたものはシステムから信頼されるため、セキュリティリスクとなる可能性があることに注意する。

F2FS Toolのインストール

  • パッケージ管理システムからインストール
    1. sudo zypper install f2fs-tools

  • ソースコードからインストール
    1. F2FS Toolsのビルドに必要な依存関係のライブラリをインストールする。
      sudo zypper install libuuid-devel pkg-config autoconf libtool libselinux-devel
    2. LinuxカーネルのF2FS ToolsのWebサイトから、タグが"vX.Y.Z"のソースコードをダウンロードする。
      または、以下のコマンドを実行して、ソースコードをダウンロードする。
      git clone https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git -b master
      cd f2fs-tools
    3. ダウンロードしたファイルを解凍する必要があれば行う。
      tar xf f2fs-tools-1.14.0.tar.gz
      cd f2fs-tools-1.14.0
    4. Configureスクリプトを作成する。
      ./autogen.sh
    5. F2FS Toolsをビルドおよびインストールする。
      この時、ビルドディレクトリは作成しない。(作成した場合、ビルドが失敗する)
      ./configure --prefix=<F2FS Toolsのインストールディレクトリ>
      make -j $(nproc)
      make install


F2FS Toolsの使用するコマンドを以下に示す。

mkfs.f2fs -l <ラベル名> /dev/sdX
# または
sudo mkfs.f2fs -l <ラベル名> /dev/sdX