2.2 KiB
2.2 KiB
Tarballer
A simple utility to create tarballs with a specific directory structure.
Features
- Creates compressed tar archives (.tar.gz) from a source directory
- Places all files under a specified prefix directory in the tarball
- Preserves file permissions and directory structure
- Handles symbolic links correctly
- Cross-platform compatibility (FreeBSD, macOS, Linux)
- Produces tarballs compatible with standard tar tools
- Verified data integrity with MD5 hash comparison
Building
This project includes Docker support to build binaries for different platforms:
docker compose up --build build
This will create these binaries in the ./bin
directory:
tarballer-freebsd
: FreeBSD AMD64 compatible binarytarballer-darwin
: macOS ARM64 compatible binarytarballer-linux
: Linux AMD64 compatible binary
Testing
You can run the included tests to verify functionality:
# Run the basic functionality test
docker compose up --build test
# Run comparison test with standard tar tools
docker compose up --build tar-test
The tests will:
- Create test directory structures with nested directories and symlinks
- Create tarballs from them
- Extract the tarballs using standard tools
- Verify the contents and file structure, including symlinks
- Check that symlinks remain functional after extraction
- Compare output with standard tar tools to ensure compatibility
- Verify data integrity with MD5 hashing (original vs. extracted files)
Usage
The usage is the same for all binaries:
./bin/tarballer-<platform> -source /path/to/directory -output myarchive.tar.gz -prefix myprefix
Options
-source
: The directory you want to compress (required)-output
: The name of the output tarball (defaults to "output.tar.gz")-prefix
: The directory name that will contain all files in the tarball (defaults to "myapp")
Example
# On macOS:
./bin/tarballer-darwin -source ./myproject -output release.tar.gz -prefix app
# On FreeBSD:
./bin/tarballer-freebsd -source ./myproject -output release.tar.gz -prefix app
When extracted, all files will be under the app/
directory in the tarball and can be extracted with standard tools like:
tar -xzf release.tar.gz -C /path/to/extract