{"id":25000548,"url":"https://github.com/gluster/parsefuse","last_synced_at":"2025-07-06T16:38:12.612Z","repository":{"id":66614906,"uuid":"1862379","full_name":"gluster/parsefuse","owner":"gluster","description":"fusedump dissector tool","archived":false,"fork":false,"pushed_at":"2021-12-07T05:39:23.000Z","size":74,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-26T03:51:18.653Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gluster.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-06-07T21:56:01.000Z","updated_at":"2021-12-07T05:39:26.000Z","dependencies_parsed_at":"2023-02-28T20:46:14.795Z","dependency_job_id":null,"html_url":"https://github.com/gluster/parsefuse","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gluster%2Fparsefuse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gluster%2Fparsefuse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gluster%2Fparsefuse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gluster%2Fparsefuse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gluster","download_url":"https://codeload.github.com/gluster/parsefuse/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248543883,"owners_count":21121838,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-04T19:35:42.542Z","updated_at":"2025-04-12T08:52:17.943Z","avatar_url":"https://github.com/gluster.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# parsefuse\n\nThis is a program to present fusedumps\n(binary dumps of FUSE traffic) in a human\nreadable or standard machine processable (JSON)\nformat.\n\nYou can get fusedumps with:\n\n-   glusterfs, with `--dump-fuse=\u003cPATH\u003e` option;\n-   tracing a FUSE server with a\n    [hacked strace](https://github.com/csabahenk/strace-fusedump),\n    with `-efuse=\u003cPATH\u003e` option.\n\nTo build it, you need the following artifacts:\n\n-   ruby,\n-   go,\n-   [cast](https://github.com/oggy/cast), which you can get with `gem install cast`;\n-   the header file which defines the FUSE data structures, usually\n    called _fuse.h_ or _fuse_kernel.h_.\n\nWhere to find this header file, which variant to use?\n\n-   **The general case:** this header is available in the source of the\n    linux kernel and in various userspace C codebases that implement a FUSE\n    server from scratch; so for example:\n\n    -   [Linux 3.16, _include/uapi/linux/fuse.h_](https://github.com/torvalds/linux/blob/v3.16/include/uapi/linux/fuse.h)\n    -   [FUSE 2.9.2, _include/fuse_kernel.h_](http://sourceforge.net/p/fuse/fuse/ci/fuse_2_9_2/tree/include/fuse_kernel.h)\n    -   [GlusterFS 3.5.2, _contrib/fuse-include/fuse_kernel.h_](https://github.com/gluster/glusterfs/blob/v3.5.2/contrib/fuse-include/fuse_kernel.h)\n\n    The header to use depends on two things:\n\n    -   the fuse server producing the fuse dump\n    -   the kernel on which the dumped session ran.\n\n    You should identify the header files that were used to build these two.\n    Of the two header files, you should use the older one (which has the lower value\n    of the _(`FUSE_KERNEL_VERSION`, `FUSE_KERNEL_MINOR_VERSION`)_ pair).\n\n    So you will not obtain a one-fits-all _parsefuse_ binary, it has to built specifically\n    with the appropriate header.\n\n    It might happen that the right header cannot be identified or an earlier _parsefuse_ build is\n    reused and thus the header used to build _parsefuse_ does not match the scenario. It's not\n    fatal issue — some messages will fail to parse and will be shown as raw binary dump, but the\n    rest will be shown properly dissected.\n\n-   **When building to use with dumps created by Glusterfs:**\n    this being the main use case of the tool, we concretize the\n    above general rule for this use case.\n\n    - On RHEL/CentOS 7 or Fedora 24 or older distros, use\n      _/usr/include/linux/fuse.h_ (provided by the kernel-headers package).\n\n    - On RHEL/CentOS 8 or Fedora 25 or newer distros, use\n     _contrib/fuse-include/fuse_kernel.h_ from the Glusterfs source tree.\n\n    - On other distros: Glusterfs uses FUSE 7.24, so if the kerrnel's FUSE version\n      is higher than this, then use the header in the Glusterfs source tree; else\n      use the kernel's version.\n\nOnce you located the appropriate header file, build _parsefuse_ with the following command:\n\n```sh\n./make.sh \u003cpath-to-fuse-header\u003e\n```\n\nAfter a succesful build you will have the binary at _go/bin/parsefuse_.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgluster%2Fparsefuse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgluster%2Fparsefuse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgluster%2Fparsefuse/lists"}