「インストール - F2FS」の版間の差分
| 234行目: | 234行目: | ||
*# Configureスクリプトを作成する。 | *# Configureスクリプトを作成する。 | ||
*#: <code>./autogen.sh</code> | *#: <code>./autogen.sh</code> | ||
*# | *# F2FS Toolsをビルドおよびインストールする。<br>この時、ビルドディレクトリは作成しない。(作成した場合、ビルドが失敗する) | ||
*#: <code>./configure --prefix=<F2FS Toolsのインストールディレクトリ></code> | |||
*#: <code> | |||
*#: <code>make -j $(nproc)</code> | *#: <code>make -j $(nproc)</code> | ||
*#: <code>make install</code> | *#: <code>make install</code> | ||
2022年6月27日 (月) 02:34時点における版
概要
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.gzcd 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)
F2FSのビルド設定を行うため、make menuconfigコマンドを実行する。
make menuconfig -j $(nproc) # または sudo make menuconfig -j $(nproc)
TUI画面が起動するので、[File systems] - [F2FS filesystem support]に移動して、[M]キーを押下する。
TUI画面下にある[Save]を選択して、上記の設定を保存する。
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/f2fsxz -kv f2fs.ko
- 生成したf2fs.koファイルをXZ形式に圧縮する。
/lib/modules/<使用しているLinuxカーネルのバージョン>/kernel/fs/f2fsディレクトリを作成して、f2fsカーネルモジュールをコピーする。
sudo mkdir /lib/modules/$(uname -r)/kernel/fs/f2fs sudo cp f2fs.ko.xz /lib/modules/$(uname -r)/kernel/fs/f2fs
F2FSモジュールの署名(SUSE15.4かつセキュアブートが有効の場合)
セキュアブートが有効の場合、Realtek BT8761BUモジュールの署名を登録する必要がある。
また、ユーザが勝手にモジュールファイルを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
上記の署名は、カーネルがアップデートされた場合、再度、署名が必要となることに注意する。
作成したキーは信頼されるため、キーを適切に保存する必要がある。
このキーで署名されたものはシステムから信頼されるため、セキュリティリスクとなる可能性があることに注意する。
SUSE15.3の場合(セキュアブートが有効 / 無効も同様の手順で可能)
F2FSモジュールをデプロイする。
sudo depmod -a $(uname -r)
/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ファイルシステムが正常にマウントできるかどうか確認する。
また、F2FSモジュールが正常に読み込まれているかどうかを確認するには、以下のコマンドを実行する。
sudo modinfo 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 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 mastercd f2fs-tools
- ダウンロードしたファイルを解凍する必要があれば行う。
tar xf f2fs-tools-1.14.0.tar.gzcd f2fs-tools-1.14.0
- Configureスクリプトを作成する。
./autogen.sh
- F2FS Toolsをビルドおよびインストールする。
この時、ビルドディレクトリは作成しない。(作成した場合、ビルドが失敗する)./configure --prefix=<F2FS Toolsのインストールディレクトリ>make -j $(nproc)make install
- F2FS Toolsのビルドに必要な依存関係のライブラリをインストールする。
F2FS Toolsの使用するコマンドを以下に示す。
mkfs.f2fs -l <ラベル名> /dev/sdX # または sudo mkfs.f2fs -l <ラベル名> /dev/sdX