「インストール - F2FS」の版間の差分
| (同じ利用者による、間の22版が非表示) | |||
| 7行目: | 7行目: | ||
== F2FSモジュールのみインストールする方法 (推奨) == | == F2FSモジュールのみインストールする方法 (推奨) == | ||
==== F2FSモジュールのソースコードのダウンロード ==== | |||
Linuxカーネルのソースコードをダウンロードする。<br> | |||
* パッケージ管理システムから、Linuxカーネルのソースコードをインストールする場合 | * パッケージ管理システムから、Linuxカーネルのソースコードをインストールする場合 | ||
*: <code>sudo zypper install kernel-source</code> | *: <code>sudo zypper install kernel-source</code> | ||
| 18行目: | 19行目: | ||
*: <code>cd linux-<バージョン></code> | *: <code>cd linux-<バージョン></code> | ||
<br> | <br> | ||
<u> | ==== F2FSモジュールのソースコードの修正 : SLE 15 SP4 / openSUSE Leap 15.4のみ ==== | ||
<u> | <u>SLE 15 SP4 / openSUSE Leap 15.4において、パッケージ管理システムからLinuxカーネル 5.14.21-150400.22のソースコードを使用する場合、</u><br> | ||
<u>F2FSのソースコードの一部にリグレッション(デグレード)が発生しているため、F2FSのソースコードを修正する必要がある。</u><br> | |||
sudo vi /usr/src/linux-5.14.21-150400.22/fs/f2fs/file.c | sudo vi /usr/src/linux-5.14.21-150400.22/fs/f2fs/file.c | ||
<br> | <br> | ||
| 32行目: | 34行目: | ||
1101行目 : filemap_invalidate_lock(inode->i_mapping) | 1101行目 : filemap_invalidate_lock(inode->i_mapping) | ||
<br> | <br> | ||
==== F2FSモジュールのインストール ==== | |||
既存のカーネルコンフィグ(/bootディレクトリ内にあるカーネルコンフィグ)を元に、新しいカーネルコンフィグを生成する。<br> | 既存のカーネルコンフィグ(/bootディレクトリ内にあるカーネルコンフィグ)を元に、新しいカーネルコンフィグを生成する。<br> | ||
<code>make olderconfig</code>コマンドは、可能な限り既存のカーネルコンフィグの設定を使用して、ビルドディレクトリ内に必要なファイルを生成する。<br> | <code>make olderconfig</code>コマンドは、可能な限り既存のカーネルコンフィグの設定を使用して、ビルドディレクトリ内に必要なファイルを生成する。<br> | ||
make -j $(nproc) olddefconfig O=. | make -j $(nproc) olddefconfig O=. | ||
# または | |||
sudo make -j $(nproc) olddefconfig O=. | |||
<br> | <br> | ||
F2FSのビルド設定を行うため、<code>make menuconfig</code>コマンドを実行する。<br> | F2FSのビルド設定を行うため、<code>make menuconfig</code>コマンドを実行する。<br> | ||
| 44行目: | 49行目: | ||
TUI画面下にある[Save]を選択して、上記の設定を保存する。<br> | TUI画面下にある[Save]を選択して、上記の設定を保存する。<br> | ||
<br> | <br> | ||
<u>セキュアブートが無効の場合は、Linuxカーネルモジュールに圧縮の設定を行ってビルドおよびインストールしてもよい。</u><br> | |||
もし、Linuxカーネルモジュールに圧縮の設定を行う場合は、以下に示すように、Linuxカーネルのビルドディレクトリにある.configファイルを編集する。<br> | |||
sudo vi /usr/src/linux-<カーネルのバージョン>/.config | |||
<br> | |||
* SUSE 15.4の場合 | |||
*: 以下の設定を追記する。 | |||
*: <code># /usr/src/linux-<カーネルのバージョン>/.configファイル</code> | |||
*: <code>CONFIG_PSTORE_ZSTD_COMPRESS_DEFAULT=y # 新しく追加する</code> | |||
*: <code>CONFIG_MODULE_COMPRESS=y # 新しく追加する</code> | |||
*: <code># CONFIG_MODULE_COMPRESS_NONE=n # コメントアウトする</code> | |||
*: <code>CONFIG_MODULE_COMPRESS_ZSTD=y # 新しく追加する</code> | |||
*: <br> | |||
* SUSE 15.3以前の場合 | |||
*: "MODULE_COMPRESS"を検索して、"MODULE_COMPRESS"の直下に、以下の設定を追記する。 | |||
*: <code># /usr/src/linux-<カーネルのバージョン>/.configファイル</code> | |||
*: <code>CONFIG_MODULE_COMPRESS=y</code> | |||
*: <code>CONFIG_MODULE_COMPRESS_XZ=y</code> | |||
<br> | <br> | ||
Linuxカーネルから、F2FSのみをビルドする。<br> | Linuxカーネルから、F2FSのみをビルドする。<br> | ||
make scripts prepare modules_prepare -j $(nproc) | <br> | ||
make -C . M=fs/f2fs -j $(nproc) | * INSTALL_MOD_DIRオプション | ||
*: 一般的に、カーネルモジュールは、/lib/modules/$(uname -r)/extraディレクトリにインストールされる。 | |||
*: 任意のディレクトリに配置したい場合、<code>INSTALL_MOD_DIR</code>オプションを付加して、extraディレクトリに代わるパスを指定する。 | |||
*: 例えば、<code>INSTALL_MOD_DIR=fs/f2fs</code>と指定する場合、インストールディレクトリは<code>/lib/modules/$(uname -r)/fs/f2fs</code>ディレクトリとなる。 | |||
sudo make scripts prepare modules_prepare -j $(nproc) | |||
sudo make -C . M=fs/f2fs -j $(nproc) | |||
sudo mkdir -p /lib/modules/$(uname -r)/kernel/fs/f2fs/ | |||
sudo cp fs/f2fs/f2fs.ko /lib/modules/$(uname -r)/kernel/fs/f2fs/ | |||
# または | # または | ||
sudo make | sudo make prepare -j $(nproc) | ||
sudo make - | sudo make modules_prepare -j $(nproc) | ||
sudo make M=fs/f2fs -j $(nproc) | |||
sudo make modules M=fs/f2fs -j $(nproc) | |||
sudo make modules_install M=fs/f2fs INSTALL_MOD_DIR=kernel/fs/f2fs -j $(nproc) | |||
<br> | <br> | ||
Linuxカーネルモジュールのインストール後は、Linuxカーネルのビルドファイルを削除する。(ファイル容量が膨大なため)<br> | |||
sudo make clean -j $(nproc) # .configファイルを残す | |||
または | |||
sudo make distclean -j $(nproc) # .configファイル等の設定ファイルを全て削除する | |||
<br> | <br> | ||
<u>SUSE 15.3以前の初期設定では、F2FSモジュールはブラックリストに入っている。</u><br> | <u>SUSE 15.3以前の初期設定では、F2FSモジュールはブラックリストに入っている。</u><br> | ||
| 82行目: | 107行目: | ||
# __THIS FILE MAY BE MODIFIED__ | # __THIS FILE MAY BE MODIFIED__ | ||
<br> | <br> | ||
==== F2FSモジュールの読み込み (セキュアブートが無効の場合) ==== | |||
F2FSモジュールを読み込む。<br> | |||
sudo depmod -a $(uname -r) | sudo depmod -a $(uname -r) | ||
<br> | <br> | ||
PCを再起動して、F2FSファイルシステムが正常にマウントできるかどうか確認する。<br> | PCを再起動して、F2FSファイルシステムが正常にマウントできるかどうか確認する。<br> | ||
<br> | <br> | ||
また、F2FSモジュールが正常に読み込まれているかどうかを確認する場合は、以下のコマンドを実行する。<br> | |||
sudo modinfo f2fs | sudo modinfo f2fs | ||
<br> | <br> | ||
==== F2FSモジュールの読み込み (セキュアブートが有効の場合) ==== | |||
sudo | セキュアブートが有効の場合、F2FSモジュールの署名を登録する必要がある。<br> | ||
<br> | |||
sudo | まず、F2FSモジュールの署名に必要な設定ファイルを作成する。<br> | ||
mkdir -p ~/MOK/F2FS && cd ~/MOK/F2FS | |||
vi F2FS.config | |||
<br> | |||
<syntaxhighlight lang="ini"> | |||
# ~/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 | |||
</syntaxhighlight> | |||
<br> | |||
キーペアを作成する。<br> | |||
openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config ./F2FS.config \ | |||
-outform DER -out ./F2FS.der -keyout ./F2FS.priv \ | |||
-addext "extendedKeyUsage=codeSigning" | |||
<br> | |||
次に、MOK(Module owned Key)にキーをインポートする。<br> | |||
<code>--root-pw</code>オプションを付加することにより、再起動時のF2FSモジュールの署名において、rootパスワードが必要となる。<br> | |||
sudo mokutil --import ./F2FS.der --root-pw | |||
<br> | |||
PCを再起動して、上記のキーの署名する。<br> | |||
sudo systemctl reboot | |||
<br> | |||
F2FSモジュール(f2fs.ko)を署名する。<br> | |||
sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 ./F2FS.priv ./F2FS.der /lib/modules/$(uname -r)/kernel/fs/f2fs/f2fs.ko | |||
<br> | |||
必要であれば、F2FSモジュールをXZ形式またはZstandard形式に圧縮する。(任意)<br> | |||
# XZ形式の場合 | |||
cd /lib/modules/$(uname -r)/kernel/fs/f2fs/ | |||
sudo xz -f f2fs.ko | |||
# Zstandard形式の場合 | |||
cd /lib/modules/$(uname -r)/kernel/fs/f2fs/ | |||
sudo zstd --rm f2fs.ko | |||
<br> | |||
F2FSモジュールを読み込む。<br> | |||
sudo depmod -a $(uname -r) # モジュール依存リストを更新する | |||
sudo modprobe -v f2fs # F2FSモジュールを読み込む | |||
<br> | |||
F2FSモジュールが正常に読み込まれているかどうかを確認する。<br> | |||
lsmod | grep f2fs | |||
# または | |||
sudo modinfo f2fs | |||
<br> | |||
F2FSモジュールが正しく署名されているかどうかを確認する。<br> | |||
正常に読み込まれている場合は、<u>"F2FS.der is already enrolled"</u>と表示される。<br> | |||
cd <F2FSモジュールの署名ファイルが存在するディレクトリ> | |||
sudo mokutil --test-key ./F2FS.der | |||
<br> | |||
上記の署名は、カーネルがアップデートされた場合、再度、署名が必要となることに注意する。<br> | |||
<br> | |||
作成したキーは信頼されるため、キーを適切に保存する必要がある。<br> | |||
このキーで署名されたものはシステムから信頼されるため、セキュリティリスクとなる可能性があることに注意する。<br> | |||
<br><br> | <br><br> | ||
== | == Linuxカーネルモジュール全体をインストールする方法 == | ||
==== Linxuカーネルモジュールのインストール ==== | |||
Linuxカーネルをビルドするために必要なライブラリをインストールする。<br> | Linuxカーネルをビルドするために必要なライブラリをインストールする。<br> | ||
sudo zypper install kernel-source | sudo zypper install kernel-source | ||
| 107行目: | 198行目: | ||
<code>make olderconfig</code>コマンドは、可能な限り既存のカーネルコンフィグの設定を使用して、ビルドディレクトリ内に必要なファイルを生成する。 | <code>make olderconfig</code>コマンドは、可能な限り既存のカーネルコンフィグの設定を使用して、ビルドディレクトリ内に必要なファイルを生成する。 | ||
cd /usr/src/linux-<カーネルのバージョン> | cd /usr/src/linux-<カーネルのバージョン> | ||
make -j $(nproc) olddefconfig O=. | sudo make -j $(nproc) olddefconfig O=. | ||
<br> | <br> | ||
F2FSのビルドを有効にするため、Linuxカーネルのビルド設定を編集する。<br> | F2FSのビルドを有効にするため、Linuxカーネルのビルド設定を編集する。<br> | ||
TUI画面が起動するので、[File systems] - [F2FS filesystem support]に移動して、[M]キーを押下する。<br> | TUI画面が起動するので、[File systems] - [F2FS filesystem support]に移動して、[M]キーを押下する。<br> | ||
TUI画面下にある[Save]を選択して、上記の設定を保存する。<br> | TUI画面下にある[Save]を選択して、上記の設定を保存する。<br> | ||
sudo make menuconfig -j $(nproc) | |||
<br> | <br> | ||
カーネルモジュールは、SUSE 15.4の場合はZstandard形式、SUSE 15.3以前の場合はXZ形式に圧縮されている。<br> | |||
<u>セキュアブートが無効の場合は、Linuxカーネルモジュールに圧縮の設定を行ってビルドおよびインストールしてもよい。</u><br> | |||
<u> | もし、Linuxカーネルモジュールに圧縮の設定を行う場合は、以下に示すように、Linuxカーネルのビルドディレクトリにある.configファイルを編集する。<br> | ||
sudo vi /usr/src/linux-<カーネルのバージョン>/.config | sudo vi /usr/src/linux-<カーネルのバージョン>/.config | ||
<br> | <br> | ||
* SUSE 15.4の場合 | * SUSE 15.4の場合 | ||
*: | *: "CONFIG_PSTORE_ZSTD_COMPRESS_DEFAULT"を検索して、"CONFIG_PSTORE_ZSTD_COMPRESS_DEFAULT"の直下に、以下の設定を追記する。 | ||
*: <code>CONFIG_PSTORE_ZSTD_COMPRESS_DEFAULT=y</code> | *: <code>CONFIG_PSTORE_ZSTD_COMPRESS_DEFAULT=y</code> | ||
*: <code> | *: <br> | ||
*: < | *: "CONFIG_MODULE_COMPRESS"を検索して、"CONFIG_MODULE_COMPRESS"の直下に、以下の設定を追記する。 | ||
*: <code> | *: <code>CONFIG_MODULE_COMPRESS=y</code> | ||
*: < | *: <br> | ||
*: "CONFIG_MODULE_COMPRESS_NONE"を検索して、"CONFIG_MODULE_COMPRESS_NONE=y"をコメントアウトする。 | |||
*: <code># CONFIG_MODULE_COMPRESS_NONE=y</code> | |||
*: <br> | |||
*: "CONFIG_MODULE_COMPRESS_ZSTD"を検索して、"CONFIG_MODULE_COMPRESS_ZSTD"の直下に、以下の設定を追記する。 | |||
*: <code>CONFIG_MODULE_COMPRESS_ZSTD=y</code> | *: <code>CONFIG_MODULE_COMPRESS_ZSTD=y</code> | ||
*: <br> | *: <br> | ||
* SUSE 15. | * SUSE 15.3以前の場合 | ||
*: "MODULE_COMPRESS"を検索して、"MODULE_COMPRESS"の直下に、以下の設定を追記する。 | *: "MODULE_COMPRESS"を検索して、"MODULE_COMPRESS"の直下に、以下の設定を追記する。 | ||
*: <code>CONFIG_MODULE_COMPRESS=y</code> | *: <code>CONFIG_MODULE_COMPRESS=y</code> | ||
*: <code>CONFIG_MODULE_COMPRESS_XZ=y</code> | *: <code>CONFIG_MODULE_COMPRESS_XZ=y</code> | ||
<br> | <br> | ||
次に、Linuxカーネルをコンパイルする。<br> | 次に、Linuxカーネルをコンパイルする。<br> | ||
| 153行目: | 235行目: | ||
sudo make modules_install | sudo make modules_install | ||
<br> | <br> | ||
Linuxカーネルモジュールのインストール後は、以下のコマンドを実行することを推奨する。(ファイル容量が膨大なため)<br> | |||
sudo make clean -j $(nproc) # .configファイルを残す | |||
または | |||
sudo make distclean -j $(nproc) # .configファイル等の設定ファイルを全て削除する | |||
<br> | |||
SUSE 15.3以前の初期設定では、F2FSモジュールはブラックリストに入っている。<br> | |||
F2FSモジュールのブラックリストを解除するため、/etc/modprobe.d/60-blacklist_fs-f2fs.confファイルを編集する。<br> | |||
# SUSE 15.3以前の場合のみ | |||
sudo vi /etc/modprobe.d/60-blacklist_fs-f2fs.conf | sudo vi /etc/modprobe.d/60-blacklist_fs-f2fs.conf | ||
<br> | <br> | ||
| 165行目: | 254行目: | ||
# blacklist f2fs | # blacklist f2fs | ||
# __THIS FILE MAY BE MODIFIED__ | # __THIS FILE MAY BE MODIFIED__ | ||
<br> | <br> | ||
<u>※注意 1</u><br> | <u>※注意 1</u><br> | ||
<u>もし、VMware WorkStationをインストールしている場合は、併せて、Linuxカーネルヘッダもインストールする必要がある。</u><br> | <u>もし、VMware WorkStationをインストールしている場合は、併せて、Linuxカーネルヘッダもインストールする必要がある。</u><br> | ||
sudo make headers_install | sudo make headers_install | ||
<br> | <br> | ||
==== Linuxカーネルモジュールの読み込み (セキュアブートが無効の場合) ==== | |||
sudo | Linuxカーネルモジュール全体を読み込む。<br> | ||
sudo depmod -a $(uname -r) | |||
<br> | |||
<br><br> | PCを再起動して、F2FSファイルシステムが正常にマウントできるかどうか確認する。<br> | ||
また、F2FSモジュールが正常に読み込まれているかどうかを確認する。<br> | |||
lsmod | grep f2fs | |||
# または | |||
sudo modinfo f2fs | |||
<br> | <br> | ||
==== Linuxカーネルモジュールの読み込み (セキュアブートが有効の場合) ==== | |||
セキュアブートが有効の場合、全てのLinuxカーネルモジュールを署名する必要がある。<br> | |||
<br> | <br> | ||
まず、Linuxカーネルモジュールの署名に必要な設定ファイルを作成する。<br> | |||
mkdir -p ~/MOK/ | mkdir -p ~/MOK/KernelModules && cd ~/MOK/KernelModules | ||
vi | vi KernelModules.config | ||
<br> | <br> | ||
# ~/MOK/ | <syntaxhighlight lang="ini"> | ||
# ~/MOK/KernelModules/KernelModules.configファイル | |||
[ req ] | [ req ] | ||
| 209行目: | 287行目: | ||
[ req_distinguished_name ] | [ req_distinguished_name ] | ||
O = SUSE Linux Products GmbH (User Add | O = SUSE Linux Products GmbH (User Add KernelModules) # 任意の名前 | ||
CN = SUSE Linux Enterprise Secure Boot (User Add | CN = SUSE Linux Enterprise Secure Boot (User Add KernelModules) # 任意の名前 | ||
emailAddress = suse@localhost | emailAddress = suse@localhost # 任意のメールアドレス | ||
[ myexts ] | [ myexts ] | ||
| 218行目: | 296行目: | ||
subjectKeyIdentifier=hash | subjectKeyIdentifier=hash | ||
authorityKeyIdentifier=keyid | authorityKeyIdentifier=keyid | ||
</syntaxhighlight> | |||
<br> | <br> | ||
キーペアを作成する。<br> | キーペアを作成する。<br> | ||
openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config ./ | openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config ./KernelModules.config \ | ||
-outform DER -out ./ | -outform DER -out ./KernelModules.der -keyout ./KernelModules.priv \ | ||
-addext "extendedKeyUsage=codeSigning" | -addext "extendedKeyUsage=codeSigning" | ||
<br> | <br> | ||
次に、MOK(Module owned Key) | 次に、MOK(Module owned Key)にX509キーをインポートする。<br> | ||
<code>--root-pw</code> | <code>--root-pw</code>オプションを付加することにより、再起動時のLinuxカーネルモジュールの署名において、rootパスワードが必要となる。<br> | ||
sudo mokutil --import ./ | sudo mokutil --import ./KernelModules.der --root-pw | ||
<br> | <br> | ||
PCを再起動して、上記のキーの署名する。<br> | PCを再起動して、上記のキーの署名する。<br> | ||
sudo systemctl reboot | sudo systemctl reboot | ||
<br> | <br> | ||
全てのLinuxカーネルモジュールを署名して、必要であれば、LinuxカーネルモジュールをXZ形式またはZstandard形式に圧縮する。<br> | |||
<u>ただし、Linuxカーネルモジュールは、ファイル数が膨大なため、以下に示すようなシェルスクリプトを使用する方がよい。</u><br> | |||
<syntaxhighlight lang="bash"> | |||
#!/usr/bin/env bash | |||
# sign-fileファイルのパス | |||
SIGNFILE="/lib/modules/$(uname -r)/build/scripts/sign-file" | |||
# Linuxカーネルモジュールのキーファイルのパス | |||
KEYFILE="/home/<ユーザ名>/MOK/KernelModules/KernelModules.priv" | |||
# LinuxカーネルモジュールのX509ファイルのパス | |||
X509FILE="/home/<ユーザ名>/MOK/KernelModules/KernelModules.der" | |||
DIRECTORY="" | |||
if [ -d "/lib/modules/$(uname -r)/kernel" ]; then | |||
DIRECTORY=$(find /lib/modules/$(uname -r)/kernel -type f -iname "*.ko*") | |||
fi | |||
if [ -d "/lib/modules/$(uname -r)/misc" ]; then | |||
DIRECTORY="${DIRECTORY} $(find /lib/modules/$(uname -r)/misc -type f -iname "*.ko*")" | |||
fi | |||
if [ -d "/lib/modules/$(uname -r)/extra" ]; then | |||
DIRECTORY="${DIRECTORY} $(find /lib/modules/$(uname -r)/extra -type f -iname "*.ko*")" | |||
fi | |||
for module in $DIRECTORY | |||
do | |||
module_basename=$(echo ${module} | sed 's/\.[^\.]*$//') | |||
module_suffix=$(echo ${module} | sed 's/^.*\.\([^\.]*\)$/\1/') | |||
if [[ "$module_suffix" == "xz" ]]; then | |||
sudo unxz $module | |||
echo "${SIGNFILE} sha256 ${KEYFILE} ${X509FILE} ${module_basename}" | |||
sudo "${SIGNFILE}" sha256 "${KEYFILE}" "${X509FILE}" "${module_basename}" | |||
sudo xz -f ${module_basename} | |||
elif [[ "$module_suffix" == "gz" ]]; then | |||
sudo gunzip $module | |||
echo "${SIGNFILE} sha256 ${KEYFILE} ${X509FILE} ${module_basename}" | |||
sudo "${SIGNFILE}" sha256 "${KEYFILE}" "${X509FILE}" "${module_basename}" | |||
sudo gzip -9f $module_basename | |||
elif [[ "$module_suffix" == "zst" ]]; then | |||
sudo zstd -d --rm $module | |||
echo "${SIGNFILE} sha256 ${KEYFILE} ${X509FILE} ${module_basename}" | |||
sudo "${SIGNFILE}" sha256 "${KEYFILE}" "${X509FILE}" "${module_basename}" | |||
sudo zstd --rm "${module_basename}" | |||
else | |||
echo "${SIGNFILE} sha256 ${KEYFILE} ${X509FILE} ${module_basename}" | |||
sudo "${SIGNFILE}" sha256 "${KEYFILE}" "${X509FILE}" "${module_basename}" | |||
fi | |||
done | |||
</syntaxhighlight> | |||
<br> | |||
全てのLinuxカーネルモジュールを読み込む。<br> | |||
sudo depmod -a $(uname -r) # モジュール依存リストを更新する | sudo depmod -a $(uname -r) # モジュール依存リストを更新する | ||
sudo modprobe -v f2fs # | sudo modprobe -v f2fs # Linuxカーネルモジュールを読み込む | ||
lsmod | grep f2fs | <br> | ||
F2FSモジュールが正常に読み込まれているかどうかを確認する。<br> | |||
lsmod | grep f2fs | |||
# または | |||
sudo modinfo f2fs | |||
<br> | <br> | ||
Linuxカーネルモジュールが正しく署名されているかどうかを確認する。<br> | |||
正常に読み込まれている場合は、<u>" | 正常に読み込まれている場合は、<u>"KernelModules.der is already enrolled"</u>と表示される。<br> | ||
cd < | cd <Linuxカーネルモジュールの署名ファイルが存在するディレクトリ> | ||
sudo mokutil --test-key ./ | sudo mokutil --test-key ./KernelModules.der | ||
<br> | <br> | ||
上記の署名は、カーネルがアップデートされた場合、再度、署名が必要となることに注意する。<br> | 上記の署名は、カーネルがアップデートされた場合、再度、署名が必要となることに注意する。<br> | ||
| 247行目: | 384行目: | ||
このキーで署名されたものはシステムから信頼されるため、セキュリティリスクとなる可能性があることに注意する。<br> | このキーで署名されたものはシステムから信頼されるため、セキュリティリスクとなる可能性があることに注意する。<br> | ||
<br> | <br> | ||
==== Linuxカーネルをアップデートした場合 ==== | |||
Linuxカーネルをアップデートした場合、F2FSモジュールが使用できなくなるため、再度、F2FSモジュールをインストールする必要がある。<br> | |||
もし、F2FSモジュールのバックアップが存在する場合、F2FSモジュールを規定のディレクトリにコピーして、Linuxカーネルモジュールを読み込むこともできる。<br> | |||
# Linuxカーネルモジュール群の読み込み | |||
sudo depmod -a $(uname -r) | |||
<br> | |||
<u>ただし、セキュアブートが有効の場合は、上記の"[[インストール - F2FS#Linuxカーネルモジュールの読み込み (セキュアブートが有効の場合)|Linuxカーネルモジュールの読み込み (セキュアブートが有効の場合)]]"セクションの手順を実行する必要がある。</u><br> | |||
<br><br> | |||
== DKMSの使用 == | |||
F2FSカーネルモジュールにおいて、DKMSを使用して自動的にビルドおよびインストールする。<br> | |||
<br> | |||
F2FSカーネルモジュールのソースコードをインストールする。<br> | |||
# SUSE | |||
sudo zypper install kernel-source | |||
<br> | |||
F2FSカーネルモジュールのDKMSの設定ファイルを作成する。<br> | |||
sudo mkdir -p /usr/src/f2fs-1.0 | |||
sudo vi /usr/src/f2fs/dkms.conf | |||
<br> | |||
# /usr/src/f2fs-1.0/dkms.confファイル | |||
PACKAGE_NAME="f2fs" | |||
PACKAGE_VERSION="1.0" | |||
CLEAN="make clean" | |||
MAKE="make" | |||
BUILT_MODULE_NAME[0]="f2fs" | |||
# /lib/modules/<カーネルバージョン>/kernel/fs/f2fsディレクトリにインストールする | |||
DEST_MODULE_LOCATION[0]="/kernel/fs/f2fs" | |||
# 特定のコンパイルフラグやオプションが必要な場合 | |||
# CONFIG_F2FS_FS=m : F2FSをモジュールとしてビルド | |||
# CONFIG_F2FS_STAT_FS=y : F2FSの統計情報サポートを有効化 | |||
# CONFIG_F2FS_FS_XATTR=y : 拡張属性のサポートを有効化 | |||
# CONFIG_F2FS_FS_POSIX_ACL=y : POSIX ACLのサポートを有効化 | |||
MAKE_ARGS="CONFIG_F2FS_FS=m CONFIG_F2FS_STAT_FS=y CONFIG_F2FS_FS_XATTR=y CONFIG_F2FS_FS_POSIX_ACL=y" | |||
AUTOINSTALL="yes" | |||
<br> | |||
F2FSカーネルモジュールのソースコードを、DKMSの設定ファイルと同階層のディレクトリにコピーする。<br> | |||
sudo cp -r /usr/src/linux-$(uname -r)/fs/f2fs /usr/src/f2fs-1.0 | |||
<br> | |||
DKMSを使用して、F2FSカーネルモジュールをビルドおよびインストールする。<br> | |||
sudo dkms add f2fs/1.0 または sudo dkms add -m f2fs -v 1.0 | |||
sudo dkms build f2fs/1.0 または sudo dkms build -m f2fs -v 1.0 | |||
sudo dkms install f2fs/1.0 または sudo dkms install -m f2fs -v 1.0 | |||
<br> | |||
モジュールがロードされていることを確認する。<br> | |||
lsmod | grep f2fs | |||
<br> | |||
これにより、f2fsカーネルモジュールがDKMSにより自動的にビルドおよびインストールされる。<br> | |||
Linuxカーネルがアップデートされた場合でも、DKMSが自動的にカーネルモジュールを再ビルドするため、手動でカーネルモジュールを再インストールする必要はない。<br> | |||
<br> | |||
ただし、カーネルモジュールのソースコードが更新された場合は、最新のソースコードをダウンロードして、該当するDKMSの設定ファイルがある同階層のディレクトリにコピーする必要がある。<br> | |||
<br><br> | |||
== F2FS Toolのインストール == | == F2FS Toolのインストール == | ||
==== パッケージ管理システムからインストール ==== | |||
sudo zypper install f2fs-tools | |||
<br> | |||
==== ソースコードからインストール ==== | |||
F2FS Toolsのビルドに必要な依存関係のライブラリをインストールする。<br> | |||
sudo zypper install libuuid-devel pkg-config autoconf libtool libselinux-devel | |||
<br> | |||
[https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/ LinuxカーネルのF2FS ToolsのWebサイト]から、タグが"vX.Y.Z"のソースコードをダウンロードする。<br> | |||
または、以下のコマンドを実行して、ソースコードをダウンロードする。<br> | |||
git clone https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git -b master | |||
cd f2fs-tools | |||
<br> | |||
ダウンロードしたファイルを解凍する。<br> | |||
tar xf f2fs-tools-<バージョン>.tar.gz | |||
cd f2fs-tools-<バージョン> | |||
<br> | |||
Configureスクリプトを作成する。 | |||
./autogen.sh | |||
<br> | |||
F2FS Toolsをビルドおよびインストールする。<br> | |||
この時、ビルドディレクトリは作成しない。(作成した場合、ビルドが失敗する)<br> | |||
./configure --prefix=<F2FS Toolsのインストールディレクトリ> | |||
make -j $(nproc) | |||
make install | |||
<br> | <br> | ||
F2FS Toolsの使用するコマンドを以下に示す。<br> | F2FS Toolsの使用するコマンドを以下に示す。<br> | ||
| 272行目: | 473行目: | ||
sudo mkfs.f2fs -l <ラベル名> /dev/sd<span style="color:#C00000">X</span> | sudo mkfs.f2fs -l <ラベル名> /dev/sd<span style="color:#C00000">X</span> | ||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:SUSE]] | [[カテゴリ:SUSE]] | ||
2024年6月26日 (水) 01:52時点における最新版
概要
SUSEにおいて、古いファイルシステムの多くは、セキュリティのためブラックリストとして設定している。
F2FS等のファイルシステムを使用するには、SUSE向けのLinuxカーネルをユーザ自身でコンパイルする必要がある。
ここでは、Linuxカーネルをコンパイルして、Linuxカーネルモジュールをインストールする手順を記載する。
F2FSモジュールのみインストールする方法 (推奨)
F2FSモジュールのソースコードのダウンロード
Linuxカーネルのソースコードをダウンロードする。
- パッケージ管理システムから、Linuxカーネルのソースコードをインストールする場合
sudo zypper install kernel-source
- Linuxカーネルの公式webサイトから、Linuxカーネルのソースコードをダウンロードする場合
- Linuxカーネルの公式webサイトまたはGithubにアクセスして、対応するバージョンのLinuxカーネルのソースコードをダウンロードする。
- あるいは、Linuxカーネルの公式webサイトにあるGitから、対応するバージョンのLinuxカーネルをダウンロードする。
- ダウンロードしたファイルを解凍する。
tar xf linux-<バージョン>.tar.gzcd linux-<バージョン>
F2FSモジュールのソースコードの修正 : SLE 15 SP4 / openSUSE Leap 15.4のみ
SLE 15 SP4 / openSUSE Leap 15.4において、パッケージ管理システムからLinuxカーネル 5.14.21-150400.22のソースコードを使用する場合、
F2FSのソースコードの一部にリグレッション(デグレード)が発生しているため、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)
F2FSモジュールのインストール
既存のカーネルコンフィグ(/bootディレクトリ内にあるカーネルコンフィグ)を元に、新しいカーネルコンフィグを生成する。
make olderconfigコマンドは、可能な限り既存のカーネルコンフィグの設定を使用して、ビルドディレクトリ内に必要なファイルを生成する。
make -j $(nproc) olddefconfig O=. # または sudo make -j $(nproc) olddefconfig O=.
F2FSのビルド設定を行うため、make menuconfigコマンドを実行する。
make menuconfig -j $(nproc) # または sudo make menuconfig -j $(nproc)
TUI画面が起動するので、[File systems] - [F2FS filesystem support]に移動して、[M]キーを押下する。
TUI画面下にある[Save]を選択して、上記の設定を保存する。
セキュアブートが無効の場合は、Linuxカーネルモジュールに圧縮の設定を行ってビルドおよびインストールしてもよい。
もし、Linuxカーネルモジュールに圧縮の設定を行う場合は、以下に示すように、Linuxカーネルのビルドディレクトリにある.configファイルを編集する。
sudo vi /usr/src/linux-<カーネルのバージョン>/.config
- SUSE 15.4の場合
- 以下の設定を追記する。
# /usr/src/linux-<カーネルのバージョン>/.configファイルCONFIG_PSTORE_ZSTD_COMPRESS_DEFAULT=y # 新しく追加するCONFIG_MODULE_COMPRESS=y # 新しく追加する# CONFIG_MODULE_COMPRESS_NONE=n # コメントアウトするCONFIG_MODULE_COMPRESS_ZSTD=y # 新しく追加する
- SUSE 15.3以前の場合
- "MODULE_COMPRESS"を検索して、"MODULE_COMPRESS"の直下に、以下の設定を追記する。
# /usr/src/linux-<カーネルのバージョン>/.configファイルCONFIG_MODULE_COMPRESS=yCONFIG_MODULE_COMPRESS_XZ=y
Linuxカーネルから、F2FSのみをビルドする。
- INSTALL_MOD_DIRオプション
- 一般的に、カーネルモジュールは、/lib/modules/$(uname -r)/extraディレクトリにインストールされる。
- 任意のディレクトリに配置したい場合、
INSTALL_MOD_DIRオプションを付加して、extraディレクトリに代わるパスを指定する。 - 例えば、
INSTALL_MOD_DIR=fs/f2fsと指定する場合、インストールディレクトリは/lib/modules/$(uname -r)/fs/f2fsディレクトリとなる。
sudo make scripts prepare modules_prepare -j $(nproc) sudo make -C . M=fs/f2fs -j $(nproc) sudo mkdir -p /lib/modules/$(uname -r)/kernel/fs/f2fs/ sudo cp fs/f2fs/f2fs.ko /lib/modules/$(uname -r)/kernel/fs/f2fs/ # または sudo make prepare -j $(nproc) sudo make modules_prepare -j $(nproc) sudo make M=fs/f2fs -j $(nproc) sudo make modules M=fs/f2fs -j $(nproc) sudo make modules_install M=fs/f2fs INSTALL_MOD_DIR=kernel/fs/f2fs -j $(nproc)
Linuxカーネルモジュールのインストール後は、Linuxカーネルのビルドファイルを削除する。(ファイル容量が膨大なため)
sudo make clean -j $(nproc) # .configファイルを残す または sudo make distclean -j $(nproc) # .configファイル等の設定ファイルを全て削除する
SUSE 15.3以前の初期設定では、F2FSモジュールはブラックリストに入っている。
F2FSモジュールのブラックリストを解除するため、/etc/modprobe.d/60-blacklist_fs-f2fs.confファイルを編集する。
# SUSE 15.3以前の場合のみ 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__
F2FSモジュールの読み込み (セキュアブートが無効の場合)
F2FSモジュールを読み込む。
sudo depmod -a $(uname -r)
PCを再起動して、F2FSファイルシステムが正常にマウントできるかどうか確認する。
また、F2FSモジュールが正常に読み込まれているかどうかを確認する場合は、以下のコマンドを実行する。
sudo modinfo f2fs
F2FSモジュールの読み込み (セキュアブートが有効の場合)
セキュアブートが有効の場合、F2FSモジュールの署名を登録する必要がある。
まず、F2FSモジュールの署名に必要な設定ファイルを作成する。
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
必要であれば、F2FSモジュールをXZ形式またはZstandard形式に圧縮する。(任意)
# XZ形式の場合 cd /lib/modules/$(uname -r)/kernel/fs/f2fs/ sudo xz -f f2fs.ko # Zstandard形式の場合 cd /lib/modules/$(uname -r)/kernel/fs/f2fs/ sudo zstd --rm f2fs.ko
F2FSモジュールを読み込む。
sudo depmod -a $(uname -r) # モジュール依存リストを更新する sudo modprobe -v f2fs # F2FSモジュールを読み込む
F2FSモジュールが正常に読み込まれているかどうかを確認する。
lsmod | grep f2fs # または sudo modinfo f2fs
F2FSモジュールが正しく署名されているかどうかを確認する。
正常に読み込まれている場合は、"F2FS.der is already enrolled"と表示される。
cd <F2FSモジュールの署名ファイルが存在するディレクトリ> sudo mokutil --test-key ./F2FS.der
上記の署名は、カーネルがアップデートされた場合、再度、署名が必要となることに注意する。
作成したキーは信頼されるため、キーを適切に保存する必要がある。
このキーで署名されたものはシステムから信頼されるため、セキュリティリスクとなる可能性があることに注意する。
Linuxカーネルモジュール全体をインストールする方法
Linxuカーネルモジュールのインストール
Linuxカーネルをビルドするために必要なライブラリをインストールする。
sudo zypper install kernel-source
既存のカーネルコンフィグ(/bootディレクトリ内にあるカーネルコンフィグ)を元に、新しいカーネルコンフィグを生成する。
make olderconfigコマンドは、可能な限り既存のカーネルコンフィグの設定を使用して、ビルドディレクトリ内に必要なファイルを生成する。
cd /usr/src/linux-<カーネルのバージョン> sudo make -j $(nproc) olddefconfig O=.
F2FSのビルドを有効にするため、Linuxカーネルのビルド設定を編集する。
TUI画面が起動するので、[File systems] - [F2FS filesystem support]に移動して、[M]キーを押下する。
TUI画面下にある[Save]を選択して、上記の設定を保存する。
sudo make menuconfig -j $(nproc)
カーネルモジュールは、SUSE 15.4の場合はZstandard形式、SUSE 15.3以前の場合はXZ形式に圧縮されている。
セキュアブートが無効の場合は、Linuxカーネルモジュールに圧縮の設定を行ってビルドおよびインストールしてもよい。
もし、Linuxカーネルモジュールに圧縮の設定を行う場合は、以下に示すように、Linuxカーネルのビルドディレクトリにある.configファイルを編集する。
sudo vi /usr/src/linux-<カーネルのバージョン>/.config
- SUSE 15.4の場合
- "CONFIG_PSTORE_ZSTD_COMPRESS_DEFAULT"を検索して、"CONFIG_PSTORE_ZSTD_COMPRESS_DEFAULT"の直下に、以下の設定を追記する。
CONFIG_PSTORE_ZSTD_COMPRESS_DEFAULT=y- "CONFIG_MODULE_COMPRESS"を検索して、"CONFIG_MODULE_COMPRESS"の直下に、以下の設定を追記する。
CONFIG_MODULE_COMPRESS=y- "CONFIG_MODULE_COMPRESS_NONE"を検索して、"CONFIG_MODULE_COMPRESS_NONE=y"をコメントアウトする。
# CONFIG_MODULE_COMPRESS_NONE=y- "CONFIG_MODULE_COMPRESS_ZSTD"を検索して、"CONFIG_MODULE_COMPRESS_ZSTD"の直下に、以下の設定を追記する。
CONFIG_MODULE_COMPRESS_ZSTD=y
- SUSE 15.3以前の場合
- "MODULE_COMPRESS"を検索して、"MODULE_COMPRESS"の直下に、以下の設定を追記する。
CONFIG_MODULE_COMPRESS=yCONFIG_MODULE_COMPRESS_XZ=y
次に、Linuxカーネルをコンパイルする。
sudo make -j $(nproc)
Linuxカーネルモジュールのみをインストールする。
インストールディレクトリは、/lib/modules/<カーネルのバージョン>-defaultディレクトリである。
sudo make modules_install
Linuxカーネルモジュールのインストール後は、以下のコマンドを実行することを推奨する。(ファイル容量が膨大なため)
sudo make clean -j $(nproc) # .configファイルを残す または sudo make distclean -j $(nproc) # .configファイル等の設定ファイルを全て削除する
SUSE 15.3以前の初期設定では、F2FSモジュールはブラックリストに入っている。
F2FSモジュールのブラックリストを解除するため、/etc/modprobe.d/60-blacklist_fs-f2fs.confファイルを編集する。
# SUSE 15.3以前の場合のみ 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__
※注意 1
もし、VMware WorkStationをインストールしている場合は、併せて、Linuxカーネルヘッダもインストールする必要がある。
sudo make headers_install
Linuxカーネルモジュールの読み込み (セキュアブートが無効の場合)
Linuxカーネルモジュール全体を読み込む。
sudo depmod -a $(uname -r)
PCを再起動して、F2FSファイルシステムが正常にマウントできるかどうか確認する。
また、F2FSモジュールが正常に読み込まれているかどうかを確認する。
lsmod | grep f2fs # または sudo modinfo f2fs
Linuxカーネルモジュールの読み込み (セキュアブートが有効の場合)
セキュアブートが有効の場合、全てのLinuxカーネルモジュールを署名する必要がある。
まず、Linuxカーネルモジュールの署名に必要な設定ファイルを作成する。
mkdir -p ~/MOK/KernelModules && cd ~/MOK/KernelModules vi KernelModules.config
# ~/MOK/KernelModules/KernelModules.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 KernelModules) # 任意の名前
CN = SUSE Linux Enterprise Secure Boot (User Add KernelModules) # 任意の名前
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 ./KernelModules.config \ -outform DER -out ./KernelModules.der -keyout ./KernelModules.priv \ -addext "extendedKeyUsage=codeSigning"
次に、MOK(Module owned Key)にX509キーをインポートする。
--root-pwオプションを付加することにより、再起動時のLinuxカーネルモジュールの署名において、rootパスワードが必要となる。
sudo mokutil --import ./KernelModules.der --root-pw
PCを再起動して、上記のキーの署名する。
sudo systemctl reboot
全てのLinuxカーネルモジュールを署名して、必要であれば、LinuxカーネルモジュールをXZ形式またはZstandard形式に圧縮する。
ただし、Linuxカーネルモジュールは、ファイル数が膨大なため、以下に示すようなシェルスクリプトを使用する方がよい。
#!/usr/bin/env bash
# sign-fileファイルのパス
SIGNFILE="/lib/modules/$(uname -r)/build/scripts/sign-file"
# Linuxカーネルモジュールのキーファイルのパス
KEYFILE="/home/<ユーザ名>/MOK/KernelModules/KernelModules.priv"
# LinuxカーネルモジュールのX509ファイルのパス
X509FILE="/home/<ユーザ名>/MOK/KernelModules/KernelModules.der"
DIRECTORY=""
if [ -d "/lib/modules/$(uname -r)/kernel" ]; then
DIRECTORY=$(find /lib/modules/$(uname -r)/kernel -type f -iname "*.ko*")
fi
if [ -d "/lib/modules/$(uname -r)/misc" ]; then
DIRECTORY="${DIRECTORY} $(find /lib/modules/$(uname -r)/misc -type f -iname "*.ko*")"
fi
if [ -d "/lib/modules/$(uname -r)/extra" ]; then
DIRECTORY="${DIRECTORY} $(find /lib/modules/$(uname -r)/extra -type f -iname "*.ko*")"
fi
for module in $DIRECTORY
do
module_basename=$(echo ${module} | sed 's/\.[^\.]*$//')
module_suffix=$(echo ${module} | sed 's/^.*\.\([^\.]*\)$/\1/')
if [[ "$module_suffix" == "xz" ]]; then
sudo unxz $module
echo "${SIGNFILE} sha256 ${KEYFILE} ${X509FILE} ${module_basename}"
sudo "${SIGNFILE}" sha256 "${KEYFILE}" "${X509FILE}" "${module_basename}"
sudo xz -f ${module_basename}
elif [[ "$module_suffix" == "gz" ]]; then
sudo gunzip $module
echo "${SIGNFILE} sha256 ${KEYFILE} ${X509FILE} ${module_basename}"
sudo "${SIGNFILE}" sha256 "${KEYFILE}" "${X509FILE}" "${module_basename}"
sudo gzip -9f $module_basename
elif [[ "$module_suffix" == "zst" ]]; then
sudo zstd -d --rm $module
echo "${SIGNFILE} sha256 ${KEYFILE} ${X509FILE} ${module_basename}"
sudo "${SIGNFILE}" sha256 "${KEYFILE}" "${X509FILE}" "${module_basename}"
sudo zstd --rm "${module_basename}"
else
echo "${SIGNFILE} sha256 ${KEYFILE} ${X509FILE} ${module_basename}"
sudo "${SIGNFILE}" sha256 "${KEYFILE}" "${X509FILE}" "${module_basename}"
fi
done
全てのLinuxカーネルモジュールを読み込む。
sudo depmod -a $(uname -r) # モジュール依存リストを更新する sudo modprobe -v f2fs # Linuxカーネルモジュールを読み込む
F2FSモジュールが正常に読み込まれているかどうかを確認する。
lsmod | grep f2fs # または sudo modinfo f2fs
Linuxカーネルモジュールが正しく署名されているかどうかを確認する。
正常に読み込まれている場合は、"KernelModules.der is already enrolled"と表示される。
cd <Linuxカーネルモジュールの署名ファイルが存在するディレクトリ> sudo mokutil --test-key ./KernelModules.der
上記の署名は、カーネルがアップデートされた場合、再度、署名が必要となることに注意する。
作成したキーは信頼されるため、キーを適切に保存する必要がある。
このキーで署名されたものはシステムから信頼されるため、セキュリティリスクとなる可能性があることに注意する。
Linuxカーネルをアップデートした場合
Linuxカーネルをアップデートした場合、F2FSモジュールが使用できなくなるため、再度、F2FSモジュールをインストールする必要がある。
もし、F2FSモジュールのバックアップが存在する場合、F2FSモジュールを規定のディレクトリにコピーして、Linuxカーネルモジュールを読み込むこともできる。
# Linuxカーネルモジュール群の読み込み sudo depmod -a $(uname -r)
ただし、セキュアブートが有効の場合は、上記の"Linuxカーネルモジュールの読み込み (セキュアブートが有効の場合)"セクションの手順を実行する必要がある。
DKMSの使用
F2FSカーネルモジュールにおいて、DKMSを使用して自動的にビルドおよびインストールする。
F2FSカーネルモジュールのソースコードをインストールする。
# SUSE sudo zypper install kernel-source
F2FSカーネルモジュールのDKMSの設定ファイルを作成する。
sudo mkdir -p /usr/src/f2fs-1.0 sudo vi /usr/src/f2fs/dkms.conf
# /usr/src/f2fs-1.0/dkms.confファイル PACKAGE_NAME="f2fs" PACKAGE_VERSION="1.0" CLEAN="make clean" MAKE="make" BUILT_MODULE_NAME[0]="f2fs" # /lib/modules/<カーネルバージョン>/kernel/fs/f2fsディレクトリにインストールする DEST_MODULE_LOCATION[0]="/kernel/fs/f2fs" # 特定のコンパイルフラグやオプションが必要な場合 # CONFIG_F2FS_FS=m : F2FSをモジュールとしてビルド # CONFIG_F2FS_STAT_FS=y : F2FSの統計情報サポートを有効化 # CONFIG_F2FS_FS_XATTR=y : 拡張属性のサポートを有効化 # CONFIG_F2FS_FS_POSIX_ACL=y : POSIX ACLのサポートを有効化 MAKE_ARGS="CONFIG_F2FS_FS=m CONFIG_F2FS_STAT_FS=y CONFIG_F2FS_FS_XATTR=y CONFIG_F2FS_FS_POSIX_ACL=y" AUTOINSTALL="yes"
F2FSカーネルモジュールのソースコードを、DKMSの設定ファイルと同階層のディレクトリにコピーする。
sudo cp -r /usr/src/linux-$(uname -r)/fs/f2fs /usr/src/f2fs-1.0
DKMSを使用して、F2FSカーネルモジュールをビルドおよびインストールする。
sudo dkms add f2fs/1.0 または sudo dkms add -m f2fs -v 1.0 sudo dkms build f2fs/1.0 または sudo dkms build -m f2fs -v 1.0 sudo dkms install f2fs/1.0 または sudo dkms install -m f2fs -v 1.0
モジュールがロードされていることを確認する。
lsmod | grep f2fs
これにより、f2fsカーネルモジュールがDKMSにより自動的にビルドおよびインストールされる。
Linuxカーネルがアップデートされた場合でも、DKMSが自動的にカーネルモジュールを再ビルドするため、手動でカーネルモジュールを再インストールする必要はない。
ただし、カーネルモジュールのソースコードが更新された場合は、最新のソースコードをダウンロードして、該当するDKMSの設定ファイルがある同階層のディレクトリにコピーする必要がある。
F2FS Toolのインストール
パッケージ管理システムからインストール
sudo zypper install f2fs-tools
ソースコードからインストール
F2FS Toolsのビルドに必要な依存関係のライブラリをインストールする。
sudo zypper install libuuid-devel pkg-config autoconf libtool libselinux-devel
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
ダウンロードしたファイルを解凍する。
tar xf f2fs-tools-<バージョン>.tar.gz cd f2fs-tools-<バージョン>
Configureスクリプトを作成する。
./autogen.sh
F2FS Toolsをビルドおよびインストールする。
この時、ビルドディレクトリは作成しない。(作成した場合、ビルドが失敗する)
./configure --prefix=<F2FS Toolsのインストールディレクトリ> make -j $(nproc) make install
F2FS Toolsの使用するコマンドを以下に示す。
mkfs.f2fs -l <ラベル名> /dev/sdX # または sudo mkfs.f2fs -l <ラベル名> /dev/sdX