macOSに、Homebrewを使わずにNTFS-3Gをインストールする。

[主題]
macOSに、Homebrewを使わずに、NTFS-3Gをインストールする方法を説明したい。

[背景]
本稿執筆時点では、VMware Fusionは、ARM版Windowsにおいて、まだ共有機能をサポートしていない。このため、VMware FusionにインストールしたARM版Windowsと、Macとの間でファイルをやり取りするには、exFATフォーマット、またはNTFSフォーマットの外付けドライブが必要である。
筆者も、exFATフォーマットのドライブで、ファイルをやり取りしてきたが、Windows側での書き込み速度に不満があった。そこで、外付けドライブをNTFSフォーマットにすることにした。
しかし、その場合、Mac側で書き込み可能にするには、NTFS-3Gなどのサードパーティーのドライバのインストールが必要となる。
本稿は、上記経緯から、NTFS-3Gを、macOSに、Homebrewを使わずインストールした作業記録である。

[環境]
参考までに、筆者の環境を記載しておく
MacBook Air 2023 15.3inch(Apple Silicon Mac, M2)
macOS Ventura 13.5.2
Xcode 14.3.1
CommandLine Tools for Xcode 14.3.1.0.1

[インストール手順]

  1. macFUSEのインストール
    NTFS-3Gを動作させるためには、FUSE(Filesystem in Userspace)と呼ばれるファイルシステム拡張が必要である。MacではmacFUSEを用いる。

    macFUSEホームページから、パッケージをダウンロードしてインストールする。
    なお、Apple Silicon Macでインストールを完了するためには、macOSの復元/復旧での操作が必要である。(リンク記事のおまけの項参照)

  2. pkg-configのコンパイルとインストール

                    curl -LO https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
                    tar xf pkg-config-0.29.2.tar.gz
                    cd pkg-config-0.29.2
                    ./configure --with-internal-glib
                    make && sudo make install
                
  3. gettextのコンパイルとインストール
    gettextの必要性は、後述のエラーで判明したものだが、順序として、先に入れておくべきであるため、ここでインストールする。

                    curl -LO https://ftp.gnu.org/pub/gnu/gettext/gettext-0.22.tar.gz
                    tar xf gettext-0.22.tar.gz
                    cd gettext-0.22
                    ./configure
                    make && sudo make install
                
  4. ntfs-3gのコンパイルとインストール

                    curl -LO https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2022.10.3.tgz
                    tar xf ntfs-3g_ntfsprogs-2022.10.3.tgz
                    cd ntfs-3g_ntfsprogs-2022.10.3
                

    まず、

                    ./configure
                

    とやると、コンフィギュアは通過してしまう。しかし、

                    make
                

    とやると、

                    Undefined symbols for architecture arm64:
                      "_libintl_setlocale", referenced from:
                          _utils_set_locale in utils.o
                    ld: symbol(s) not found for architecture arm64
                    clang: error: linker command failed with exit code 1 (use -v to see invocation)
                    make[2]: *** [ntfsfix] Error 1
                    make[1]: *** [all-recursive] Error 1
                    make: *** [all] Error 2
                

    とエラーになる。ググってみると、gettextのlibintlが正しく見つけられない問題らしく、

                    LDFLAGS="-L/usr/local/lib -lintl" \
                    ./configure
                

    LDFLAGSが必要らしい。で、今度は、

                    make
                

    できてしまう。しかし、

                    sudo make install
                

    とやると、今度は、以下のエラーになる。

                    libtool: install: /usr/bin/install -c .libs/libntfs-3g.a /usr/local/lib/libntfs-3g.a
                    libtool: install: chmod 644 /usr/local/lib/libntfs-3g.a
                    libtool: install: ranlib /usr/local/lib/libntfs-3g.a
                    if [ ! "/lib" -ef "/usr/local/lib" ]; then \
                            /bin/mv -f "//usr/local/lib"/libntfs-3g.so* "//lib";  \
                        fi
                    mv: rename //usr/local/lib/libntfs-3g.so* to //lib: No such file or directory
                    make[3]: *** [install-exec-hook] Error 1
                    make[2]: *** [install-exec-am] Error 2
                    make[1]: *** [install-am] Error 2
                    make: *** [install-recursive] Error 1
                

    これも、ググってみると、

    • ntfs-3gに含まれるFUSEは、macOSをサポートしない。外部FUSE(macFUSE)を使うように明示する必要がある。
    • macOSでは、/libが存在せず、かつSIPによって作ることができない。–exec-prefixを設定する必要がある。

    事が分かる。結果として、

                    LDFLAGS="-L/usr/local/lib -lintl" \
                    ./configure \
                    --exec-prefix=/usr/local \
                    --with-fuse=external
                

    が、macOSでの最終的なコンフィギュアオプションになるらしい。今度こそ!と念じつつ…。

                    make
                    sudo make install
                

    とやると…やっと、コンパイル及びインストールができた!

    以上、敢えてエラーになった部分も書いてきたが、正しい手順をまとめると、次のようになる。

                    curl -LO https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2022.10.3.tgz
                    tar xf ntfs-3g_ntfsprogs-2022.10.3.tgz
                    cd ntfs-3g_ntfsprogs-2022.10.3
                    LDFLAGS="-L/usr/local/lib -lintl" \
                    ./configure \
                    --exec-prefix=/usr/local \
                    --with-fuse=external
                    make
                    sudo make install
                

[NTFSのマウント手順]
やっとの思いで、インストールできたNTFS-3Gだが、NTFSフォーマットの外付けドライブを、書き込み可能でマウントするには、一工夫が必要だった。以下に、それをログる。

  1. diskutilによるdisk番号の把握
    ターミナル.appで、以下のコマンドを実行する。

                    diskutil list
                

    出力例(抜粋):

                    /dev/disk4 (external, physical):
                   #:                       TYPE NAME                    SIZE       IDENTIFIER
                   0:      GUID_partition_scheme                        *500.3 GB   disk4
                   1:                        EFI EFI                     209.7 MB   disk4s1
                   2:       Microsoft Basic Data OWC-Envoy-Pro           500.1 GB   disk4s2
                
  2. マウントをトライしてみる

                    mount -t ntfs-3g /dev/disk4 /Volumes/OWC-Envoy-Pro
                

    エラーになる

                    mount: /Volumes/OWC-Envoy-Pro: invalid file system.
                

    ntfs-3gで直接トライする

                    ntfs-3g /dev/disk4 /Volumes/OWC-Envoy-Pro
                
                    Unprivileged user can not mount NTFS block devices using the external FUSE
                    library. Either mount the volume as root, or rebuild NTFS-3G with integrated
                    FUSE support and make it setuid root. Please see more information at
                    https://github.com/tuxera/ntfs-3g/wiki/NTFS-3G-FAQ
                

    また怒られた…。

                    sudo ntfs-3g /dev/disk4 /Volumes/OWC-Envoy-Pro
                
                    NTFS signature is missing.
                    Failed to mount '/dev/disk4': Invalid argument
                    The device '/dev/disk4' doesn't seem to have a valid NTFS.
                    Maybe the wrong device is used? Or the whole disk instead of a
                    partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?
                

    ここへ来て、やっとディスク番号の指定ミスに気付く

                    sudo ntfs-3g /dev/disk4s2 /Volumes/OWC-Envoy-Pro
                
                    The disk contains an unclean file system (0, 0).
                    The file system wasn't safely closed on Windows. Fixing.
                

    何か言ってるけど、マウントされた!

    mountコマンドを介すると…。

                    sudo mount -t ntfs-3g -o auto_xattr /dev/disk4s2 /Volumes/OWC-Envoy-Pro
                
                    mount: /Volumes/OWC-Envoy-Pro: invalid file system.
                

    やっぱりダメだ!

  3. 書き込みのトライ
    マウントされたようなので、書き込みをトライしてみると…。

    Finderが100102エラーを返した。

    これは、上記リンクの2番目の答えが解決してくれた。すなわち、

                    sudo ntfs-3g -o auto_xattr /dev/disk4s2 /Volumes/OWC-Envoy-Pro
                

    最終形は…。

                    mkdir -p .mnt/OWC-Envoy-Pro
                    sudo ntfs-3g -o auto_xattr,volname="OWC-Envoy-Pro" /dev/disk4s2 ~/.mnt/OWC-Envoy-Pro
                
  4. 以降は、Mounty for NTFSに任せたほうが楽である。

[参考サイト]

以上。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL