Files
quectel-rgmii-toolkit/unused/make-ipk
Cameron Thompson 03f42b03bc Create make-ipk
will make an ipk from an already installed package
2024-10-12 01:55:58 -04:00

80 lines
2.5 KiB
Bash

#!/bin/ash
# Build an ipk from an already installed package from opkg
# By iamromulan
# Check if package name is provided
if [ -z "$1" ]; then
echo "Usage: $0 <package_name>"
exit 1
fi
PACKAGE_NAME="$1"
WORK_DIR="./$PACKAGE_NAME"
ROOT_DIR="$WORK_DIR/root"
CONTROL_DIR="$WORK_DIR/CONTROL"
# Create directory structure
mkdir -p "$ROOT_DIR" "$CONTROL_DIR"
# Fetch package files and copy them into the correct spots inside root directory
opkg files "$PACKAGE_NAME" | grep -E '^/' | while read -r file; do
if [ -e "$file" ]; then
mkdir -p "$ROOT_DIR$(dirname "$file")"
cp "$file" "$ROOT_DIR$file"
fi
done
# Copy metadata files from /usr/lib/opkg/info/
for file in /usr/lib/opkg/info/"$PACKAGE_NAME".*; do
basefile=$(basename "$file")
# Strip the package name from the file (e.g., dropbear.control becomes control)
newfile=$(echo "$basefile" | sed "s/$PACKAGE_NAME\.//")
cp "$file" "$CONTROL_DIR/$newfile"
done
# Now proceed with building the IPK package
# Check if the required directories are present in the specified path
if [ ! -d "$CONTROL_DIR" ] || [ ! -d "$ROOT_DIR" ]; then
echo "Error: CONTROL and root directories must be present."
exit 1
fi
# Extract values from the CONTROL/control file
pkgname=$(grep -i '^Package:' "$CONTROL_DIR/control" | awk '{print $2}')
version=$(grep -i '^Version:' "$CONTROL_DIR/control" | awk '{print $2}')
architecture=$(grep -i '^Architecture:' "$CONTROL_DIR/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 control file."
exit 1
fi
# Set the final IPK name based on the extracted values
ipkname="${pkgname}_${version}_${architecture}.ipk"
# Create control.tar.gz from the CONTROL directory
echo "Creating control.tar.gz..."
tar -czvf control.tar.gz -C "$CONTROL_DIR" .
# Create data.tar.gz from the root directory
echo "Creating data.tar.gz..."
tar -czvf data.tar.gz -C "$ROOT_DIR" .
# 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
rm -rf $WORK_DIR
echo "IPK package ${ipkname} created successfully."