Custom firmware helper improvements

This commit is contained in:
Cameron Thompson
2025-09-16 19:59:22 -04:00
parent 74ce62e5fc
commit b5d6f4af28
24 changed files with 422 additions and 1 deletions

View File

@@ -0,0 +1,6 @@
Package: sdxpinn-firstboot
Version: 1.0
Architecture: sdxpinn
Maintainer: Cameron Thompson iamromulan@github.com
Source: github.com/iamromulan
Description: A first boot init after a flash or factory reset

View File

@@ -0,0 +1,5 @@
#!/bin/ash
service first-boot enable
exit 0

View File

@@ -0,0 +1,74 @@
#!/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."

View File

@@ -0,0 +1,31 @@
#!/bin/sh /etc/rc.common
START=99
STOP=15
USE_PROCD=1
start_service() {
# Create log file
touch /usrdata/first-boot.log
# Redirect all output to log file
exec >>/usrdata/first-boot.log 2>&1
echo "Starting first boot script: $(date)"
echo "Remounting the real rootfs as rw"
mount -o remount,rw /real_rootfs
echo "Sending AT Commands"
atcmd 'AT+QCFG="usbnet",1'
atcmd 'AT+QCFG="pcie/mode",1'
echo "Disabling first-boot service"
service first-boot disable
echo "Restarting modem"
atcmd 'AT+CFUN=1,1'
echo "Removing first-boot service"
rm /real_rootfs/etc/init.d/first-boot
echo "First boot script completed: $(date)"
}