#!/bin/sh # Script for building OpenWRT .ipk packages using tar by iamromulan # Works with SDXPPINN OpenWRT - iamromulan # This script accepts an optional path to the directory containing the `CONTROL` and `root` directories. # Usage: ./build-ipk.sh [path] # If no path is provided, the script will look in the current directory for `CONTROL` and `root` directories. # This will spit out an ipk in the current directory # Check if the script is run as root. If not, rerun with sudo. if [ "$(id -u)" -ne 0 ]; then echo "Script is not running as root. Re-executing with sudo..." exec sudo "$0" "$@" fi # Set the default build path to the current directory build_path="." # Check if a path is provided as the first argument if [ "$1" ]; then build_path="$1" fi # Check if the required directories are present in the specified path if [ ! -d "${build_path}/CONTROL" ] || [ ! -d "${build_path}/root" ]; then echo "Error: CONTROL and root directories must be present in the specified path (${build_path})." exit 1 fi # Extract values from the CONTROL/control file in the specified path pkgname=$(grep -i '^Package:' "${build_path}/CONTROL/control" | awk '{print $2}') version=$(grep -i '^Version:' "${build_path}/CONTROL/control" | awk '{print $2}') architecture=$(grep -i '^Architecture:' "${build_path}/CONTROL/control" | awk '{print $2}') # Check if values are extracted correctly if [ -z "$pkgname" ] || [ -z "$version" ] || [ -z "$architecture" ]; then echo "Error: Failed to extract Package, Version, or Architecture from ${build_path}/CONTROL/control." exit 1 fi # Set the final IPK name based on the extracted values ipkname="${pkgname}_${version}_${architecture}.ipk" # Ensure all CONTROL scripts are executable echo "Setting permissions for CONTROL scripts..." chmod +x "${build_path}/CONTROL"/* # Set ownership for CONTROL and root files echo "Setting ownership for all package files..." chown -R root:root "${build_path}/CONTROL"/* chown -R root:root "${build_path}/root"/* # Create control.tar.gz from the CONTROL directory echo "Creating control.tar.gz..." tar -czvf control.tar.gz -C "${build_path}/CONTROL" . # Create data.tar.gz from the root directory echo "Creating data.tar.gz..." tar -czvf data.tar.gz -C "${build_path}/root" . # Create debian-binary file (must contain exactly "2.0" without a newline) echo -n "2.0" > debian-binary chown -R root:root debian-binary # Combine the components into the final .ipk file using tar echo "Packaging ${ipkname}..." tar -czvf "$ipkname" debian-binary control.tar.gz data.tar.gz # Clean up intermediate files echo "Cleaning up temporary files..." rm -f control.tar.gz data.tar.gz debian-binary echo "IPK package ${ipkname} created successfully using tar."