アドベントカレンダーの時期ですね.本来のクリスマスに向けカレンダーを日に日にめくりお菓子が出てくる感じのものとは別に近年技術者向けの記事をクリスマスまで公開してくアドベントカレンダーもあります.
その中のFreeBSDアドベントカレンダーを見ていて以下の記事が気になりました.
FreeBSD 14からtarアーカイブをファイルシステムにマウントするtarfs(4)が入ったそうです.Linuxでfuse-zipとかは使ったことがあるけど他にもないかなと探してfuse-archiveを試してみました.
fuse-zipはFilesystem in Userspace(FUSE)経由でzipアーカイブをマウントできるものです.Debianパッケージもあるので導入や管理が楽です.
fuse-archiveはたくさんのアーカイブに対応した同じようなもののようです.
fuse-archiveのインストール
今回もDebian sid amd64環境に導入しました.
インストール方法は INSTALL.md
に詳しいです.
ここではインストール時に DESTDIR
を設定してホームディレクトリ以下にインストールしています.
$ sudo apt install libboost-container-dev libfuse-dev libarchive-dev \ g++ pkg-config make pandoc \ python3 (1) $ git clone https://github.com/google/fuse-archive.git (2) $ cd fuse-archive $ make (3) $ make check $ DESTDIR=~/ make install (4) install -D "out/fuse-archive" "/home/matoken//usr/bin/fuse-archive" install -D -m 644 fuse-archive.1 "/home/matoken//usr/share/man/man1/fuse-archive.1" $ which fuse-archive /home/matoken/usr/bin/fuse-archive
-
関連パッケージの導入
-
sourceのclone
-
build
-
DESTDIRを指定してインストール
fuse-archiveの利用
$ fuse-archive linux-6.8.2.tar.xz (1) fuse-archive: Created mount point 'linux-6.8.2' (2) $ mount | grep linux (3) fuse-archive on /home/matoken/Downloads/linux-6.8.2 type fuse.fuse-archive (ro,nosuid,nodev,relatime,user_id=1000,group_id=1000) $ grep linux /etc/mtab fuse-archive /home/matoken/Downloads/linux-6.8.2 fuse.fuse-archive ro,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0 $ ls linux-6.8.2/linux-6.8.2/ (4) COPYING Documentation Kconfig MAINTAINERS README block crypto fs init ipc lib net samples security tools virt CREDITS Kbuild LICENSES Makefile arch certs drivers include io_uring kernel mm rust scripts sound usr $ head linux-6.8.2/linux-6.8.2/README (5) Linux kernel ============ There are several guides for kernel developers and users. These guides can be rendered in a number of formats, like HTML and PDF. Please read Documentation/admin-guide/README.rst first. In order to build the documentation, use ``make htmldocs`` or ``make pdfdocs``. The formatted documentation can also be read online at: $ touch linux-6.8.2/linux-6.8.2/Makefile (6) touch: cannot touch 'linux-6.8.2/linux-6.8.2/Makefile': Read-only file system $ fusermount -u linux-6.8.2 (7) $ grep linux /etc/mtab $ ls linux-6.8.2* (8) linux-6.8.2.tar.xz
-
fuse-archiveで適当なアーカイブをマウント(マウント時にはキャッシュに読み込むため少し時間がかかる)
-
拡張子を除いたファイル名のディレクトリがマウントポイントとして作成されマウントされた
-
mountされているのを確認
-
アーカイブ内のファイルにアクセス
-
ファイルの中を確認
-
書き込みはできない
-
unmount
-
マウントポイントのディレクトリも消える
$ ls -s Qubes-R4.2.3-x86_64.iso 6748400 Qubes-R4.2.3-x86_64.iso $ fuse-archive Qubes-R4.2.3-x86_64.iso (1) fuse-archive: Cannot write to cache: No space left on device $ fuse-archive -o nocache Qubes-R4.2.3-x86_64.iso (2) fuse-archive: Created mount point 'Qubes-R4.2.3-x86_64' $ ls Qubes-R4.2.3-x86_64 EFI Packages boot images repodata
-
大きなアーカイブだと容量不足で失敗することがある
-
-o nocache
オプションでキャッシュを無効にして舞うとすることが可能,ただし速度は大幅に低下する
$ mktemp -d /tmp/tmp.ZJ1Sil9byy $ fuse-archive Qubes-R4.2.3-x86_64/Packages/zlib-1.2.12-5.fc37.x86_64.rpm /tmp/tmp.ZJ1Sil9byy fuse-archive: Using existing mount point '/tmp/tmp.ZJ1Sil9byy' $ ls /tmp/tmp.ZJ1Sil9byy/ usr
$ find . -iname "*.txt" | zip -e -r -@ /tmp/test.zip $ fuse-archive /tmp/test.zip The archive is encrypted. What is the passphrase that unlocks this archive? > Got it! fuse-archive: Created mount point '/tmp/test'
まとめ
fuse-archiveはこれまで試した類似ツールと比べて多くのファイル形式に対応していて高速です.アーカイブの中のファイルを確認するのにとても便利そうです.
ディストリビューションパッケージにあると便利ですが,DebianのWNPPを見ると無さそうです.RFPを投げるといいかもしれません.
環境
$ fuse-archive --version fuse-archive version: 1.5 libarchive version: libarchive 3.7.4 bzlib version: 1.0.8, 13-Jul-2019 liblz4 version: 1.9.4 liblzma version: 5.6.3 libzstd version: 1.5.6 zlib version: 1.3.1 FUSE library version: 2.9.9 fusermount3 version: 3.14.0 using FUSE kernel interface version 7.19 $ dpkg-query -W libboost-container-dev libfuse-dev libarchive-dev g++ pkg-config make pandoc python3 git g++ 4:14.2.0-1 git 1:2.45.2-1.2 libarchive-dev:amd64 3.7.4-1.1 libboost-container-dev:amd64 1.83.0.2+b2 libfuse-dev:amd64 2.9.9-9 make 4.4.1-1 pandoc 3.1.11.1+ds-2 pkg-config:amd64 1.8.1-4 python3 3.12.7-1 $ lsb_release -dr Description: Debian GNU/Linux trixie/sid Release: n/a $ arch x86_64