Slide 1

Slide 1 text

fuse-archiveでいろんなアー カイブをマウント Kenichiro Matohara(matoken) 1

Slide 2

Slide 2 text

matoken @ 鹿児島の右下の山奥から参加 好きなLinuxディストリビューションはDebian GNU/Linux map: © OpenStreetMap contributors Kenichiro Matohara(matoken) https://matoken.org [email protected] 2

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

FreeBSDAdvent Calendar 2024を見ていて — そういえばfuse-zipくらいしか使ったことないけどもっとよいものがありそうだな あったら便利そう FreeBSD 14 からの新機能として tarfs(4) が追加されました。 名前から推察できるとおり、tar ファイルをファイルシステムとして mount する機能です。リードオンリーのみ対応で書き込みはできま せん。 tarfs(4) たぁなんですか? #FreeBSD - Qiita 4

Slide 5

Slide 5 text

fuse-archive fuse-zipはFilesystem in Userspace(FUSE)経由でzipアーカイブをマウントできるもの fuse-archiveはたくさんのアーカイブ圧縮形式に対応した似たもの tmpディレクトリをキャッシュとして使い高速 fuseなのでユーザ権限でokなのもうれしい google/fuse-archive: FUSE file system for archives and compressed files (ZIP, RAR, 7Z, ISO, TGZ, XZ…​ ) 5

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

fuse-archiveの利用 8

Slide 8

Slide 8 text

.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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

大きなアーカイブの利用 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

Slide 11

Slide 11 text

アーカイブ内のアーカイブのマウント 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

Slide 12

Slide 12 text

パスワード付き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

Slide 13

Slide 13 text

GUIファイラーでもfuse-archiveを GUIファイラーのNautilusでは ~/.local/share/nautilus/scripts/ 内のプログラムを処理 したいファイルのコンテキストメニューから呼び出せる fuse-archiveをNautilusのScriptsに登録 該当ファイルで右クリック→スクリプト→fuse-archive $ pwd /home/matoken/.local/share/nautilus/scripts $ ln -s `which fuse-archive` ./fuse-archive 16

Slide 14

Slide 14 text

umount アンマウントはUSBメモリ等と同じようにアンマウントボタンでok 🔽 17

Slide 15

Slide 15 text

まとめ 様々なアーカイブをユーザー権限でマウントできるfuse-archive アーカイブ形式に関わらず同じように操作できて学習コストも低い(tarの圧縮オプションな んだっけ?pipe経由にするか……とか) アーカイブ内の一部を取り出したいときなどこれまではファイルリストを取得して該当ファイルを 探しその部分だけを展開したり,一旦すべて展開して必要なものを取り出してからそれ以外を削 除などしていた fuse-archiveだとマウントしてcpしてumountでok mount時には自動的にマウントポイントが作られアンマウント時に消されるので手離れがよい マウント中に電池切れでOSが落ちたときはマウントディレクトリが残っていた 存外に便利なのでお勧め 18

Slide 16

Slide 16 text

奥付 発表 2025-01-19(sun) 発表者 利用ソフトウェア + ライセンス 鹿児島Linux勉強会 2025.01(オンライン開催) Kenichiro Matohara(matoken) Neovim Asciidoctor Reveal.js CC BY 4.0 19

Slide 17

Slide 17 text

No content