Tree @debian/latest (Download .tar.gz)
- .vscode
- cmd
- debian
- pkg
- test
- testdata
- xattr
- .gitignore
- .travis.yml
- check.go
- check_test.go
- cksum.go
- cksum_test.go
- compare.go
- compare_test.go
- creator.go
- entry.go
- fseval.go
- fseval_test.go
- glide.lock
- glide.yaml
- hierarchy.go
- hierarchy_test.go
- keywordfunc.go
- keywordfuncs_bsd.go
- keywordfuncs_linux.go
- keywordfuncs_unsupported.go
- keywords.go
- keywords_linux_test.go
- keywords_test.go
- lchtimes_unix.go
- lchtimes_unsupported.go
- LICENSE
- lookup_new.go
- lookup_old.go
- Makefile
- mtree_test.go
- parse.go
- README.md
- releases.md
- stat_unix.go
- stat_windows.go
- tar.go
- tar_test.go
- update.go
- update_linux_test.go
- update_test.go
- updatefuncs.go
- updatefuncs_linux.go
- updatefuncs_unsupported.go
- version.go
- walk.go
- walk_test.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 | # go-mtree [![Build Status](https://travis-ci.org/vbatts/go-mtree.svg?branch=master)](https://travis-ci.org/vbatts/go-mtree) [![Go Report Card](https://goreportcard.com/badge/github.com/vbatts/go-mtree)](https://goreportcard.com/report/github.com/vbatts/go-mtree) `mtree` is a filesystem hierarchy validation tooling and format. This is a library and simple cli tool for [mtree(8)][mtree(8)] support. While the traditional `mtree` cli utility is primarily on BSDs (FreeBSD, openBSD, etc), even broader support for the `mtree` specification format is provided with libarchive ([libarchive-formats(5)][libarchive-formats(5)]). There is also an [mtree port for Linux][archiecobbs/mtree-port] though it is not widely packaged for Linux distributions. ## Format The format of hierarchy specification is consistent with the `# mtree v2.0` format. Both the BSD `mtree` and libarchive ought to be interoperable with it with only one definite caveat. On Linux, extended attributes (`xattr`) on files are often a critical aspect of the file, holding ACLs, capabilities, etc. While FreeBSD filesystem do support `extattr`, this feature has not made its way into their `mtree`. This implementation of mtree supports a few non-upstream "keyword"s, such as: `xattr` and `tar_time`. If you include these keywords, the FreeBSD `mtree` will fail, as they are unknown keywords to that implementation. To have `go-mtree` produce specifications that will be strictly compatible with the BSD `mtree`, use the `-bsd-keywords` flag when creating a manifest. This will make sure that only the keywords supported by BSD `mtree` are used in the program. ### Typical form With the standard keywords, plus say `sha256digest`, the hierarchy specification looks like: ```mtree # . /set type=file nlink=1 mode=0664 uid=1000 gid=100 . size=4096 type=dir mode=0755 nlink=6 time=1459370393.273231538 LICENSE size=1502 mode=0644 time=1458851690.0 sha256digest=ef4e53d83096be56dc38dbf9bc8ba9e3068bec1ec37c179033d1e8f99a1c2a95 README.md size=2820 mode=0644 time=1459370256.316148361 sha256digest=d9b955134d99f84b17c0a711ce507515cc93cd7080a9dcd50400e3d993d876ac [...] ``` See the directory presently in, and the files present. Along with each path, is provided the keywords and the unique values for each path. Any common keyword and values are established in the `/set` command. ### Extended attributes form ```mtree # . /set type=file nlink=1 mode=0664 uid=1000 gid=1000 . size=4096 type=dir mode=0775 nlink=6 time=1459370191.11179595 xattr.security.selinux=dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwAA== LICENSE size=1502 time=1458851690.583562292 xattr.security.selinux=dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwAA== README.md size=2366 mode=0644 time=1459369604.0 xattr.security.selinux=dW5jb25maW5lZF91Om9iamVjdF9yOnVzZXJfaG9tZV90OnMwAA== [...] ``` See the keyword prefixed with `xattr.` followed by the extended attribute's namespace and keyword. This setup is consistent for use with Linux extended attributes as well as FreeBSD extended attributes. Since extended attributes are an unordered hashmap, this approach allows for checking each `<namespace>.<key>` individually. The value is the [base64 encoded][base64] of the value of the particular extended attribute. Since the values themselves could be raw bytes, this approach avoids issues with encoding. ### Tar form ```mtree # . /set type=file mode=0664 uid=1000 gid=1000 . type=dir mode=0775 tar_time=1468430408.000000000 # samedir samedir type=dir mode=0775 tar_time=1468000972.000000000 file2 size=0 tar_time=1467999782.000000000 file1 size=0 tar_time=1467999781.000000000 [...] ``` While `go-mtree` serves mainly as a library for upstream `mtree` support, `go-mtree` is also compatible with [tar archives][tar] (which is not an upstream feature). This means that we can now create and validate a manifest by specifying a tar file. More interestingly, this also means that we can create a manifest from an archive, and then validate this manifest against a filesystem hierarchy that's on disk, and vice versa. Notice that for the output of creating a validation manifest from a tar file, the default behavior for evaluating a notion of time is to use the `tar_time` keyword. In the "filesystem hierarchy" format of mtree, `time` is being evaluated with nanosecond precision. However, GNU tar truncates a file's modification time to 1-second precision. That is, if a file's full modification time is 123456789.123456789, the "tar time" equivalent would be 123456789.000000000. This way, if you validate a manifest created using a tar file against an actual root directory, there will be no complaints from `go-mtree` so long as the 1-second precision time of a file in the root directory is the same. ## Usage To use the Go programming language library, see [the docs][godoc]. To use the command line tool, first [build it](#Building), then the following. ### Create a manifest This will also include the sha512 digest of the files. ```bash gomtree -c -K sha512digest -p . > /tmp/root.mtree ``` With a tar file: ```bash gomtree -c -K sha512digest -T sometarfile.tar > /tmp/tar.mtree ``` ### Validate a manifest ```bash gomtree -p . -f /tmp/root.mtree ``` With a tar file: ```bash gomtree -T sometarfile.tar -f /tmp/root.mtree ``` ### See the supported keywords ```bash gomtree -list-keywords Available keywords: uname sha1 sha1digest sha256digest xattrs (not upstream) link (default) nlink (default) md5digest rmd160digest mode (default) cksum md5 rmd160 type (default) time (default) uid (default) gid (default) sha256 sha384 sha512 xattr (not upstream) tar_time (not upstream) size (default) ripemd160digest sha384digest sha512digest ``` ## Building Either: ```bash go get github.com/vbatts/go-mtree/cmd/gomtree ``` or ```bash git clone git://github.com/vbatts/go-mtree.git $GOPATH/src/github.com/vbatts/go-mtree cd $GOPATH/src/github.com/vbatts/go-mtree go build ./cmd/gomtree ``` ## Testing On Linux: ```bash cd $GOPATH/src/github.com/vbatts/go-mtree make ``` On FreeBSD: ```bash cd $GOPATH/src/github.com/vbatts/go-mtree gmake ``` [mtree(8)]: https://www.freebsd.org/cgi/man.cgi?mtree(8) [libarchive-formats(5)]: https://www.freebsd.org/cgi/man.cgi?query=libarchive-formats&sektion=5&n=1 [archiecobbs/mtree-port]: https://github.com/archiecobbs/mtree-port [godoc]: https://godoc.org/github.com/vbatts/go-mtree [tar]: http://man7.org/linux/man-pages/man1/tar.1.html [base64]: https://tools.ietf.org/html/rfc4648 |
Commit History @debian/latest
0
»»
- New upstream release + changelog summary. Dmitry Smirnov 4 years ago
- Update upstream source from tag 'upstream/0.4.4' Dmitry Smirnov 4 years ago
- New upstream version 0.4.4 Dmitry Smirnov 4 years ago
- DH & compat to version 12. Dmitry Smirnov 4 years ago
- Standards-Version: 4.4.1 Dmitry Smirnov 4 years ago
- upload to unstable Dmitry Smirnov 5 years ago
- Assigned ITP bug #901839. Dmitry Smirnov 5 years ago
- update debian/gitlab-ci.yml (using salsa.debian.org/go-team/ci/cmd/ci) Michael Stapelberg 5 years ago
- Initial commit Dmitry Smirnov 5 years ago
- Ignore quilt dir .pc via .gitignore Dmitry Smirnov 5 years ago
- New upstream version 0.4.2 Dmitry Smirnov 5 years ago
0
»»