How to Install and Configure Unrar in Cygwin

This guide details how to seamlessly integrate the unrar utility into your Cygwin environment to extract and manage RAR archives directly from the POSIX command line. Because standard Cygwin repositories often omit a pre-compiled unrar binary due to licensing restrictions, the most effective solutions are compiling the official RARLAB source code directly within Cygwin or wrapping an existing Windows executable using path-translation scripts.

Compiling unrar directly within Cygwin produces a native POSIX binary that handles POSIX file paths, symlinks, and permissions without translation issues.

Step 1: Install Build Dependencies

Run the Cygwin installer (setup-x86_64.exe) and ensure the following packages are selected and installed:

  • gcc-g++
  • make
  • wget
  • tar

Step 2: Download and Extract the Source Code

Open your Cygwin terminal and retrieve the latest source distribution from RARLAB:

cd /tmp
wget https://www.rarlab.com/rar/unrarsrc-6.2.12.tar.gz
tar -xzf unrarsrc-6.2.12.tar.gz
cd unrar

(Note: Replace the version number with the current release if necessary).

Step 3: Build and Install the Binary

Compile the binary using the provided generic Unix makefile:

make -f makefile

Once compilation completes, install the executable into /usr/local/bin:

cp unrar /usr/local/bin/
chmod 755 /usr/local/bin/unrar

Step 4: Verify the Installation

Run the command to ensure Cygwin recognizes the native build:

unrar

Method 2: Wrapper Script for Windows UnRAR.exe

If you already have UnRAR.exe or WinRAR installed on Windows, you can configure a shell wrapper to automatically translate Cygwin file paths to Windows file paths using cygpath.

Step 1: Locate the Windows Binary

Identify the path to your Windows UnRAR.exe. Common locations include:

  • C:\Program Files\WinRAR\UnRAR.exe
  • C:\Program Files\WinRAR\WinRAR.exe

Step 2: Create the Wrapper Script

Create a new script in /usr/local/bin/unrar:

cat << 'EOF' > /usr/local/bin/unrar
#!/usr/bin/env bash

# Path to the Windows executable
WIN_UNRAR="/cygdrive/c/Program Files/WinRAR/UnRAR.exe"

# Convert POSIX paths in arguments to Windows paths
ARGS=()
for arg in "$@"; do
    if [ -e "$arg" ]; then
        ARGS+=("$(cygpath -w "$arg")")
    else
        ARGS+=("$arg")
    fi
done

# Execute Windows UnRAR
"$WIN_UNRAR" "${ARGS[@]}"
EOF

Step 3: Grant Execute Permissions

Make the wrapper script executable:

chmod +x /usr/local/bin/unrar

Environment Configuration

To ensure your preferred unrar configuration is always accessible:

  1. Confirm /usr/local/bin is at the beginning of your system path in ~/.bashrc:
    export PATH="/usr/local/bin:$PATH"
  2. Set default flags by adding an alias to ~/.bashrc (for example, to extract preserving original paths):
    alias unrar='unrar x'
  3. Apply changes immediately:
    source ~/.bashrc