diff --git a/ipk-source/socat-at-bridge/CONTROL/control b/ipk-source/socat-at-bridge/CONTROL/control new file mode 100644 index 0000000..bd0c769 --- /dev/null +++ b/ipk-source/socat-at-bridge/CONTROL/control @@ -0,0 +1,8 @@ +Package: socat-at-bridge +Version: 1.0.0 +Depends: libc socat +Source: github/iamromulan +Section: utils +URL: https://github.com/iamromulan +Architecture: aarch64_cortex-a53 +Description: Sets up a tty from SMD11 diff --git a/ipk-source/socat-at-bridge/build-ipk b/ipk-source/socat-at-bridge/build-ipk new file mode 100755 index 0000000..eb83cf6 --- /dev/null +++ b/ipk-source/socat-at-bridge/build-ipk @@ -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." + diff --git a/ipk-source/socat-at-bridge/root/etc/init.d/socat-at-bridge b/ipk-source/socat-at-bridge/root/etc/init.d/socat-at-bridge new file mode 100644 index 0000000..e91e892 --- /dev/null +++ b/ipk-source/socat-at-bridge/root/etc/init.d/socat-at-bridge @@ -0,0 +1,40 @@ +#!/bin/sh /etc/rc.common + +START=99 +STOP=10 + +USE_PROCD=1 + +start_service() { + procd_open_instance + + # Start socat to create /dev/ttyIN and /dev/ttyOUT + procd_set_param command \ + socat -d -d pty,link=/dev/ttySMD11IN,raw,echo=0,group=20,perm=660 \ + pty,link=/dev/ttySMD11,raw,echo=1,group=20,perm=660 + procd_set_param respawn + procd_set_param stdout 1 + procd_set_param stderr 1 + procd_close_instance + + # Start cat process for /dev/smd11 to /dev/ttySMD11IN + procd_open_instance + procd_set_param command sh -c "cat /dev/smd11 > /dev/ttySMD11IN" + procd_set_param respawn + procd_set_param stdout 1 + procd_set_param stderr 1 + procd_close_instance + + # Start cat process for /dev/ttySMD11IN to /dev/smd11 + procd_open_instance + procd_set_param command sh -c "cat /dev/ttySMD11IN > /dev/smd11" + procd_set_param respawn + procd_set_param stdout 1 + procd_set_param stderr 1 + procd_close_instance +} + +stop_service() { + # procd will handle stopping all instances automatically + echo "Stopping socat and cat instances." +}