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