📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の11版が非表示)
7行目: 7行目:


== F2FSモジュールのみインストールする方法 (推奨) ==
== F2FSモジュールのみインストールする方法 (推奨) ==
==== F2FSモジュールのインストール ====
==== F2FSモジュールのソースコードのダウンロード ====
Linuxカーネルのソースコードをダウンロード、または、インストールする。<br>
Linuxカーネルのソースコードをダウンロードする。<br>
* パッケージ管理システムから、Linuxカーネルのソースコードをインストールする場合
* パッケージ管理システムから、Linuxカーネルのソースコードをインストールする場合
*: <code>sudo zypper install kernel-source</code>
*: <code>sudo zypper install kernel-source</code>
19行目: 19行目:
*: <code>cd linux-<バージョン></code>
*: <code>cd linux-<バージョン></code>
<br>
<br>
<u>SUSE 15.4かつパッケージ管理システムからLinuxカーネル 5.14.21-150400.22のソースコードを使用する場合、</u><br>
==== F2FSモジュールのソースコードの修正 : SLE 15 SP4 / openSUSE Leap 15.4のみ ====
<u>F2FSのソースコードの一部にバグが存在するため、以下に示すように、ソースコードを修正する必要がある。</u><br>
<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>
33行目: 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>
105行目: 107行目:
  # __THIS FILE MAY BE MODIFIED__
  # __THIS FILE MAY BE MODIFIED__
<br>
<br>
==== F2FSモジュールの読み込み (セキュアブートが無効の場合) ====
==== F2FSモジュールの読み込み (セキュアブートが無効の場合) ====
F2FSモジュールを読み込む。<br>
F2FSモジュールを読み込む。<br>
121行目: 124行目:
  vi F2FS.config
  vi F2FS.config
<br>
<br>
<syntaxhighlight lang="ini">
  # ~/MOK/F2FS/F2FS.configファイル
  # ~/MOK/F2FS/F2FS.configファイル
   
   
140行目: 144行目:
  subjectKeyIdentifier=hash
  subjectKeyIdentifier=hash
  authorityKeyIdentifier=keyid
  authorityKeyIdentifier=keyid
</syntaxhighlight>
<br>
<br>
キーペアを作成する。<br>
キーペアを作成する。<br>
159行目: 164行目:
  # XZ形式の場合
  # XZ形式の場合
  cd /lib/modules/$(uname -r)/kernel/fs/f2fs/
  cd /lib/modules/$(uname -r)/kernel/fs/f2fs/
  xz -f f2fs.ko
  sudo xz -f f2fs.ko
   
   
  # Zstandard形式の場合
  # Zstandard形式の場合
  cd /lib/modules/$(uname -r)/kernel/fs/f2fs/
  cd /lib/modules/$(uname -r)/kernel/fs/f2fs/
  zstd --rm f2fs.ko
  sudo zstd --rm f2fs.ko
<br>
<br>
F2FSモジュールを読み込む。<br>
F2FSモジュールを読み込む。<br>
170行目: 175行目:
<br>
<br>
F2FSモジュールが正常に読み込まれているかどうかを確認する。<br>
F2FSモジュールが正常に読み込まれているかどうかを確認する。<br>
  lsmod | grep f2fs           # 正常に読み込まれたかどうかを確認する
  lsmod | grep f2fs
# または
sudo modinfo f2fs
<br>
<br>
F2FSモジュールが正しく署名されているかどうかを確認する。<br>
F2FSモジュールが正しく署名されているかどうかを確認する。<br>
183行目: 190行目:
<br><br>
<br><br>


== カーネルモジュール全体をインストールする方法 ==
== Linuxカーネルモジュール全体をインストールする方法 ==
==== Linxuカーネルモジュールのインストール ====
Linuxカーネルをビルドするために必要なライブラリをインストールする。<br>
Linuxカーネルをビルドするために必要なライブラリをインストールする。<br>
  sudo zypper install kernel-source
  sudo zypper install kernel-source
250行目: 258行目:
<u>もし、VMware WorkStationをインストールしている場合は、併せて、Linuxカーネルヘッダもインストールする必要がある。</u><br>
<u>もし、VMware WorkStationをインストールしている場合は、併せて、Linuxカーネルヘッダもインストールする必要がある。</u><br>
  sudo make headers_install
  sudo make headers_install
<br>
==== Linuxカーネルモジュールの読み込み (セキュアブートが無効の場合) ====
Linuxカーネルモジュール全体を読み込む。<br>
sudo depmod -a $(uname -r)
<br>
<br>
PCを再起動して、F2FSファイルシステムが正常にマウントできるかどうか確認する。<br>
PCを再起動して、F2FSファイルシステムが正常にマウントできるかどうか確認する。<br>
また、F2FSモジュールが正常に読み込まれているかどうかを確認する。<br>
lsmod | grep f2fs
# または
sudo modinfo f2fs
<br>
==== Linuxカーネルモジュールの読み込み (セキュアブートが有効の場合) ====
セキュアブートが有効の場合、全てのLinuxカーネルモジュールを署名する必要がある。<br>
<br>
まず、Linuxカーネルモジュールの署名に必要な設定ファイルを作成する。<br>
mkdir -p ~/MOK/KernelModules && cd ~/MOK/KernelModules
vi KernelModules.config
<br>
<syntaxhighlight lang="ini">
# ~/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
</syntaxhighlight>
<br>
キーペアを作成する。<br>
openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config ./KernelModules.config \
-outform DER -out ./KernelModules.der -keyout ./KernelModules.priv \
-addext "extendedKeyUsage=codeSigning"
<br>
次に、MOK(Module owned Key)にX509キーをインポートする。<br>
<code>--root-pw</code>オプションを付加することにより、再起動時のLinuxカーネルモジュールの署名において、rootパスワードが必要となる。<br>
sudo mokutil --import ./KernelModules.der --root-pw
<br>
<br>
<u>※注意 2</u><br>
PCを再起動して、上記のキーの署名する。<br>
<u>Linuxカーネルをアップデートした場合は自動的にF2FSモジュールが削除されるため、再度、F2FSモジュールをインストールする必要がある。</u><br>
sudo systemctl reboot
<u>もし、既にF2FSモジュールのバックアップが存在する場合、f2fs.ko.xzファイルを以下のディレクトリにコピーして、モジュール群をデプロイすることもできる。</u><br>
<br>
  # F2FSモジュールのコピー
全てのLinuxカーネルモジュールを署名して、必要であれば、LinuxカーネルモジュールをXZ形式またはZstandard形式に圧縮する。<br>
  sudo mkdir /lib/modules/$(uname -r)/kernel/fs/f2fs/
<u>ただし、Linuxカーネルモジュールは、ファイル数が膨大なため、以下に示すようなシェルスクリプトを使用する方がよい。</u><br>
  sudo cp f2fs.ko.xz /lib/modules/$(uname -r)/kernel/fs/f2fs/
<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 modprobe -v f2fs      # Linuxカーネルモジュールを読み込む
<br>
F2FSモジュールが正常に読み込まれているかどうかを確認する。<br>
lsmod | grep f2fs
# または
sudo modinfo f2fs
<br>
Linuxカーネルモジュールが正しく署名されているかどうかを確認する。<br>
正常に読み込まれている場合は、<u>"KernelModules.der is already enrolled"</u>と表示される。<br>
cd <Linuxカーネルモジュールの署名ファイルが存在するディレクトリ>
sudo mokutil --test-key ./KernelModules.der
<br>
上記の署名は、カーネルがアップデートされた場合、再度、署名が必要となることに注意する。<br>
<br>
作成したキーは信頼されるため、キーを適切に保存する必要がある。<br>
このキーで署名されたものはシステムから信頼されるため、セキュリティリスクとなる可能性があることに注意する。<br>
<br>
 
==== Linuxカーネルをアップデートした場合 ====
Linuxカーネルをアップデートした場合、F2FSモジュールが使用できなくなるため、再度、F2FSモジュールをインストールする必要がある。<br>
もし、F2FSモジュールのバックアップが存在する場合、F2FSモジュールを規定のディレクトリにコピーして、Linuxカーネルモジュールを読み込むこともできる。<br>
# Linuxカーネルモジュール群の読み込み
  sudo depmod -a $(uname -r)
  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>
<br><br>


== F2FS Toolのインストール ==
== F2FS Toolのインストール ==
* パッケージ管理システムからインストール
==== パッケージ管理システムからインストール ====
*# <code>sudo zypper install f2fs-tools</code>
sudo zypper install f2fs-tools
*: <br>
<br>
* ソースコードからインストール
==== ソースコードからインストール ====
*# F2FS Toolsのビルドに必要な依存関係のライブラリをインストールする。
F2FS Toolsのビルドに必要な依存関係のライブラリをインストールする。<br>
*#: <code>sudo zypper install libuuid-devel pkg-config autoconf libtool libselinux-devel </code>
sudo zypper install libuuid-devel pkg-config autoconf libtool libselinux-devel
*# [https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/ LinuxカーネルのF2FS ToolsのWebサイト]から、タグが"vX.Y.Z"のソースコードをダウンロードする。<br>または、以下のコマンドを実行して、ソースコードをダウンロードする。
<br>
*#: <code>git clone https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git -b master</code>
[https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/ LinuxカーネルのF2FS ToolsのWebサイト]から、タグが"vX.Y.Z"のソースコードをダウンロードする。<br>
*#: <code>cd f2fs-tools</code>
または、以下のコマンドを実行して、ソースコードをダウンロードする。<br>
*# ダウンロードしたファイルを解凍する必要があれば行う。
git clone https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git -b master
*#: <code>tar xf f2fs-tools-1.14.0.tar.gz</code>
cd f2fs-tools
*#: <code>cd f2fs-tools-1.14.0</code>
<br>
*# Configureスクリプトを作成する。
ダウンロードしたファイルを解凍する。<br>
*#: <code>./autogen.sh</code>
tar xf f2fs-tools-<バージョン>.tar.gz
*# F2FS Toolsをビルドおよびインストールする。<br>この時、ビルドディレクトリは作成しない。(作成した場合、ビルドが失敗する)
cd f2fs-tools-<バージョン>
*#: <code>./configure --prefix=<F2FS Toolsのインストールディレクトリ></code>
<br>
*#: <code>make -j $(nproc)</code>
Configureスクリプトを作成する。
*#: <code>make install</code>
./autogen.sh
<br>
F2FS Toolsをビルドおよびインストールする。<br>
この時、ビルドディレクトリは作成しない。(作成した場合、ビルドが失敗する)<br>
./configure --prefix=<F2FS Toolsのインストールディレクトリ>
make -j $(nproc)
make install
<br>
<br>
F2FS Toolsの使用するコマンドを以下に示す。<br>
F2FS Toolsの使用するコマンドを以下に示す。<br>
289行目: 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]]