77 lines
2.2 KiB
Markdown
77 lines
2.2 KiB
Markdown
# 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:
|
|
|
|
```bash
|
|
docker compose up --build build
|
|
```
|
|
|
|
This will create these binaries in the `./bin` directory:
|
|
- `tarballer-freebsd`: FreeBSD AMD64 compatible binary
|
|
- `tarballer-darwin`: macOS ARM64 compatible binary
|
|
- `tarballer-linux`: Linux AMD64 compatible binary
|
|
|
|
## Testing
|
|
|
|
You can run the included tests to verify functionality:
|
|
|
|
```bash
|
|
# 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:
|
|
1. Create test directory structures with nested directories and symlinks
|
|
2. Create tarballs from them
|
|
3. Extract the tarballs using standard tools
|
|
4. Verify the contents and file structure, including symlinks
|
|
5. Check that symlinks remain functional after extraction
|
|
6. Compare output with standard tar tools to ensure compatibility
|
|
7. Verify data integrity with MD5 hashing (original vs. extracted files)
|
|
|
|
## Usage
|
|
|
|
The usage is the same for all binaries:
|
|
|
|
```bash
|
|
./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
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
tar -xzf release.tar.gz -C /path/to/extract
|
|
``` |