Upgrade to Pro — share decks privately, control downloads, hide ads and more …

fuse-archiveでいろんなアーカイブをマウント

 fuse-archiveでいろんなアーカイブをマウント

Kenichiro MATOHARA

January 19, 2025
Tweet

More Decks by Kenichiro MATOHARA

Other Decks in Technology

Transcript

  1. FreeBSDAdvent Calendar 2024を見ていて — そういえばfuse-zipくらいしか使ったことないけどもっとよいものがありそうだな あったら便利そう FreeBSD 14 からの新機能として tarfs(4)

    が追加されました。 名前から推察できるとおり、tar ファイルをファイルシステムとして mount する機能です。リードオンリーのみ対応で書き込みはできま せん。 tarfs(4) たぁなんですか? #FreeBSD - Qiita 4
  2. fuse-archiveのインストール Debian sid amd64環境に導入 インストール方法は INSTALL.md に詳しい 関連パッケージの導入 sourceの入手 build

    好みの場所にinstall $ sudo apt install libboost-container-dev libfuse-dev libarchive-dev \ g++ pkg-config make pandoc \ python3 $ git clone https://github.com/google/fuse-archive.git $ cd fuse-archive $ make $ make check $ DESTDIR=~/ make install 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 1 2 3 4 6
  3. .tar.xzアーカイブをマウント 1 既定値でマウント 2 linux-6.8.2 拡張子を除いたファイル名でディレクトリが作成され,マウントポイントになっ た 3 mountされているのを確認 4

    アーカイブ内のファイルにアクセス $ fuse-archive linux-6.8.2.tar.xz fuse-archive: Created mount point 'linux-6.8.2' $ mount | grep linux 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/ 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 1 2 3 4 9
  4. 1 ファイルの内容を読めるのを確認 2 書き込みはできない 3 fuseなのでfusermount/fusermount3でアンマウント 4 マウント時に生成されたマウントポイントのディレクトリは消える $ head

    linux-6.8.2/linux-6.8.2/README 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 touch: cannot touch 'linux-6.8.2/linux-6.8.2/Makefile': Read-only file system $ fusermount -u linux-6.8.2 $ grep linux /etc/mtab $ ls linux-6.8.2* linux-6.8.2.tar.xz 1 2 3 4 10
  5. 大きなアーカイブの利用 1 大きなアーカイブだと容量不足で失敗することがある 2 -o nocache オプションでキャッシュを無効にして舞うとすることが可能,ただし速度は大幅 に低下する $ 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 fuse-archive: Cannot write to cache: No space left on device $ fuse-archive -o nocache Qubes-R4.2.3-x86_64.iso fuse-archive: Created mount point 'Qubes-R4.2.3-x86_64' $ ls Qubes-R4.2.3-x86_64 EFI Packages boot images repodata 1 2 12
  6. アーカイブ内のアーカイブのマウント 1 そのままマウントしようとすると書き込み権限がなくマウントできないため適当なマウント用 のディレクトリを作成 2 マウントポイントを指定してマウント 同様に3段までは確認 $ 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 1 2 13
  7. パスワード付きzipファイルのマウント 1 適当なパスワード付きzipを作成 2 fuse-archiveで普通にマウント 3 パスフレーズを求められて正しいとマウント $ find .

    -iname "*.txt" | zip -e -r -@ /tmp/test.zip Enter password: Verify password: adding: …… $ 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' 1 2 3 14