Repo Control file improvements

Control files at minimum now list

Package:
Version:
Depends:
Architecture:
Maintainer:
MD5Sum:
Size:
Filename:
Source:
Description:

This will help improve workflow when rebuilding opkg-feed....

- Enhanced opkg-feed rebuild with a new test version of the script.

- Set the luci app default to send at commands to smd7 to avoid issues with smd11 being occupied
This commit is contained in:
Cameron Thompson
2025-01-19 19:10:41 -05:00
parent d28fadc1ba
commit 2fe55cf223
14 changed files with 144 additions and 12 deletions

View File

@@ -10,5 +10,4 @@ SourceDateEpoch: 1691250335
Maintainer: Adrian Guenter <a@gntr.me>
Architecture: aarch64_cortex-a53
Installed-Size: 3571
Description: Atinout is a program that will execute AT commands in sequence and
capture the response from the modem.
Description: Atinout is a program that will execute AT commands in sequence and capture the response from the modem.

View File

@@ -0,0 +1 @@
/etc/config/atcommands.user

View File

@@ -1,5 +1,5 @@
Package: luci-app-atinout-mod
Version: 1.3.4-20241006
Version: 1.3.4-20250119
Depends: libc, atinout, luci-compat
Source: package/luci-app-atinout-mod
SourceName: luci-app-atinout-mod

View File

@@ -1,4 +1,4 @@
config atinout 'general'
option atcport '/dev/smd11'
option atcport '/dev/smd7'

View File

@@ -2,5 +2,6 @@ Package: ookla-speedtest
Version: 1.2.0
Architecture: aarch64_cortex-a53
Maintainer: Ookla speedtest.net https://www.speedtest.net/apps/cli
Source: speedtest.net
Description: Allows you to test your internet speed with speedtest.net
Depends: libc

View File

@@ -2,5 +2,6 @@ Package: sdxpinn-console-menu
Version: 0.0.2
Architecture: aarch64_cortex-a53
Maintainer: Cameron Thompson iamromulan@github.com
Source: github.com/iamromulan
Description: A custom CLI menu system for mamnagment of Quectel RM5xx modems
Depends: libc sdxpinn-mount-fix
Depends: libc, sdxpinn-mount-fix

View File

@@ -2,5 +2,6 @@ Package: sdxpinn-mount-fix
Version: 1.2.0
Architecture: aarch64_cortex-a53
Maintainer: Cameron Thompson iamromulan@github.com
Source: github.com/iamromulan
Description: Creates a usable mount space and overlay for SDXPINN modems. Dependencies bundled: libinotifytools and inotifywait
Depends: libc

View File

@@ -2,6 +2,7 @@ Package: sdxpinn-quecmanager-beta
Version: 1.1.1-1
Architecture: aarch64_cortex-a53
Maintainer: Russel Yasol dr-dolomite@github.com Cameron Thompson iamromulan@github.com
Source: github.com/iamromulan
Description: A custom web UI desgined to run alongside luci for Quectel RM55x modems
Depends: sdxpinn-mount-fix, libc, coreutils-timeout, uhttpd, sms-tool (>= 2025.1.19-APmod-iamromulan), jq, ookla-speedtest
Conflicts: sdxpinn-quecmanager

View File

@@ -2,6 +2,7 @@ Package: sdxpinn-quecmanager
Version: 1.0.1
Architecture: aarch64_cortex-a53
Maintainer: Russel Yasol dr-dolomite@github.com Cameron Thompson iamromulan@github.com
Source: github.com/iamromulan
Description: A custom web UI desgined to run alongside luci for Quectel RM55x modems
Depends: libc sdxpinn-mount-fix atinout
Depends: libc, sdxpinn-mount-fix, atinout
Conflicts: sdxpinn-quecmanager-beta

View File

@@ -1,5 +1,6 @@
Package: sms-tool
Version: 2025.1.19-APmod-iamromulan
Maintainer: github.com/iamromulan
Depends: libc, socat-at-bridge
Source: github/iamromulan/sms_tool
SourceName: github/iamromulan/sms_tool

View File

@@ -2,6 +2,7 @@ Package: socat-at-bridge
Version: 1.1.1
Depends: libc, socat
Source: github/iamromulan/quectel-rgmii-toolkit
Maintainer: github.com/iamromulan
Section: utils
URL: https://github.com/iamromulan/quectel-rgmii-toolkit
Architecture: aarch64_cortex-a53

View File

@@ -8,6 +8,4 @@ LicenseFiles: LICENSE
Section: net
Maintainer: Jan Pavlinec <jan.pavlinec1@gmail.com>
Architecture: aarch64_cortex-a53
Description: It creates a secure network between your servers, computers,
and cloud instances. Even when separated by firewalls or subnets. Updated
by iamromulan to 1.76.1
Description: It creates a secure network between your servers, computers, and cloud instances. Even when separated by firewalls or subnets. Updated by iamromulan to 1.76.1

View File

@@ -8,6 +8,4 @@ LicenseFiles: LICENSE
Section: net
Maintainer: Jan Pavlinec <jan.pavlinec1@gmail.com>
Architecture: aarch64_cortex-a53
Description: It creates a secure network between your servers, computers,
and cloud instances. Even when separated by firewalls or subnets. Updated
by iamromulan to 1.76.1
Description: It creates a secure network between your servers, computers,and cloud instances. Even when separated by firewalls or subnets. Updated by iamromulan to 1.76.1

129
opkg-feed/rebuild-feed_test.sh Executable file
View File

@@ -0,0 +1,129 @@
#!/bin/bash
# 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
# Define Constants
IPK_SOURCE_DIR=../ipk-source
PACKAGES=./Packages
PACKAGESGZ=./Packages.gz
PACKAGESSIG=./Packages.sig
PUBLICKEY=./iamromulan-SDXPINN-repo.key
PRIVKEY=/home/iamromulan/Documents/GitHub/priv/iamromulan-SDXPINN-repo-private.key
USIGN=./usign_x64
LOGFILE=./Packages.log
# Start logging
echo "Starting package analysis - $(date)" > "$LOGFILE"
# Function to calculate MD5 and file size for a given .ipk file
calculate_md5_and_size() {
local file=$1
md5sum=$(md5sum "$file" | awk '{print $1}')
filesize=$(stat -c%s "$file")
echo "$md5sum $filesize"
}
# Function to parse control file
parse_control_file() {
local control_file=$1
local fields=(Package Version Depends Architecture Maintainer Source Description Section Conflicts License)
declare -A control_data
while IFS=':' read -r key value; do
key=$(echo "$key" | xargs)
value=$(echo "$value" | xargs)
if [[ " ${fields[*]} " == *" $key "* ]]; then
control_data["$key"]="$value"
fi
done < "$control_file"
echo "${control_data[@]}"
}
# Scan ipk-source directory and process packages
for pkg_dir in "$IPK_SOURCE_DIR"/*; do
pkg_name=$(basename "$pkg_dir")
if [[ "$pkg_name" =~ _ ]]; then
pkg_arch=$(echo "$pkg_name" | awk -F'_' '{print $2}')
pkg_name=$(echo "$pkg_name" | awk -F'_' '{print $1}')
else
pkg_arch="all"
fi
control_file="$pkg_dir/CONTROL/control"
ipk_file="${pkg_name}_${pkg_arch}.ipk"
# Skip if control file or ipk is missing
if [[ ! -f "$control_file" ]] || [[ ! -f "$ipk_file" ]]; then
echo "Skipping $pkg_name (missing control file or .ipk file)" | tee -a "$LOGFILE"
continue
fi
# Parse control file
read -r -a control_data <<< "$(parse_control_file "$control_file")"
# Calculate MD5 and size
read current_md5 current_size < <(calculate_md5_and_size "$ipk_file")
# Check if package exists in Packages file
pkg_start_line=$(grep -n "^Package: ${control_data[Package]}$" "$PACKAGES" | cut -d ':' -f 1)
if [ -z "$pkg_start_line" ]; then
echo "Adding new package ${control_data[Package]}..." | tee -a "$LOGFILE"
# Append new entry to Packages file
{
for key in "${!control_data[@]}"; do
echo "$key: ${control_data[$key]}"
done
echo "MD5Sum: $current_md5"
echo "Size: $current_size"
echo "Filename: $ipk_file"
echo ""
} >> "$PACKAGES"
continue
fi
# Update existing package entry if needed
pkg_end_line=$(sed -n "$pkg_start_line,\$p" "$PACKAGES" | grep -n -m 1 -A 1 '^$' | tail -1 | cut -d '-' -f 1)
pkg_end_line=$((pkg_start_line + pkg_end_line - 1))
for key in "${!control_data[@]}"; do
existing_value=$(sed -n "${pkg_start_line},${pkg_end_line}p" "$PACKAGES" | grep "^$key:" | awk -F': ' '{print $2}')
if [[ "${control_data[$key]}" != "$existing_value" ]]; then
echo "Updating $key for ${control_data[Package]}..." | tee -a "$LOGFILE"
sed -i "${pkg_start_line},${pkg_end_line}s/^$key: .*/$key: ${control_data[$key]}/" "$PACKAGES"
fi
done
# Update MD5 and size if different
existing_md5=$(sed -n "${pkg_start_line},${pkg_end_line}p" "$PACKAGES" | grep "^MD5Sum:" | awk '{print $2}')
existing_size=$(sed -n "${pkg_start_line},${pkg_end_line}p" "$PACKAGES" | grep "^Size:" | awk '{print $2}')
if [[ "$current_md5" != "$existing_md5" ]] || [[ "$current_size" != "$existing_size" ]]; then
echo "Updating MD5 and size for ${control_data[Package]}..." | tee -a "$LOGFILE"
sed -i "${pkg_start_line},${pkg_end_line}s/^MD5Sum: .*/MD5Sum: $current_md5/" "$PACKAGES"
sed -i "${pkg_start_line},${pkg_end_line}s/^Size: .*/Size: $current_size/" "$PACKAGES"
fi
done
# Remove packages not in ipk-source
grep "^Package: " "$PACKAGES" | awk '{print $2}' | while read -r pkg_name; do
if [[ ! -d "$IPK_SOURCE_DIR/$pkg_name" ]]; then
echo "Removing orphaned package $pkg_name from Packages file..." | tee -a "$LOGFILE"
sed -i "/^Package: $pkg_name$/,/^$/d" "$PACKAGES"
fi
done
# Regenerate Packages.gz and sign with usign
gzip -k "$PACKAGES"
"$USIGN" -S -m "$PACKAGES" -s "$PRIVKEY"
echo "Package file and signature updated successfully." | tee -a "$LOGFILE"
echo "Package analysis completed - $(date)" | tee -a "$LOGFILE"