Update to use ipk and opkg instead
Moving in the right direction
This commit is contained in:
@@ -22,3 +22,5 @@ Get Currently Enabled 5G/NR SA Bands;AT+QNWPREFCFG="nr5g_band"
|
|||||||
Get Currently Enabled 5G/NR NSA Bands;AT+QNWPREFCFG="nsa_nr5g_band"
|
Get Currently Enabled 5G/NR NSA Bands;AT+QNWPREFCFG="nsa_nr5g_band"
|
||||||
Get Currently Enabled 4G/LTE Bands;AT+QNWPREFCFG="lte_band"
|
Get Currently Enabled 4G/LTE Bands;AT+QNWPREFCFG="lte_band"
|
||||||
View assigned IPv4/IPv6 addresses from the provider;AT+QMAP="WWAN"
|
View assigned IPv4/IPv6 addresses from the provider;AT+QMAP="WWAN"
|
||||||
|
Enable IPPT paste in MAC for FF:FF:FF...;AT+QMAP="MPDN_rule",0,1,0,1,1,"FF:FF:FF:FF:FF:FF"
|
||||||
|
Disable IPPT;AT+QMAP="MPDN_rule",0
|
||||||
|
|||||||
6
ipk-source/ookla-speedtest_1.2.0_aarch64_cortex-a53/CONTROL/control
Executable file
6
ipk-source/ookla-speedtest_1.2.0_aarch64_cortex-a53/CONTROL/control
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
Package: ookla-speedtest
|
||||||
|
Version: 1.2.0
|
||||||
|
Architecture: aarch64_cortex-a53
|
||||||
|
Maintainer: Ookla speedtest.net https://www.speedtest.net/apps/cli
|
||||||
|
Description: Allows you to test your internet speed with speedtest.net
|
||||||
|
Depends: libc
|
||||||
74
ipk-source/ookla-speedtest_1.2.0_aarch64_cortex-a53/build-ipk
Executable file
74
ipk-source/ookla-speedtest_1.2.0_aarch64_cortex-a53/build-ipk
Executable 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."
|
||||||
|
|
||||||
BIN
ipk-source/ookla-speedtest_1.2.0_aarch64_cortex-a53/root/usr/bin/speedtest
Executable file
BIN
ipk-source/ookla-speedtest_1.2.0_aarch64_cortex-a53/root/usr/bin/speedtest
Executable file
Binary file not shown.
0
ipk-source/sdxpinn-mount-fix/build-ipk
Normal file → Executable file
0
ipk-source/sdxpinn-mount-fix/build-ipk
Normal file → Executable file
BIN
ipk/ookla-speedtest_1.2.0_aarch64_cortex-a53.ipk
Normal file
BIN
ipk/ookla-speedtest_1.2.0_aarch64_cortex-a53.ipk
Normal file
Binary file not shown.
@@ -35,7 +35,7 @@ send_at_commands_using_atcmd() {
|
|||||||
echo -e "\e[1;32mSending AT command: $at_command\e[0m"
|
echo -e "\e[1;32mSending AT command: $at_command\e[0m"
|
||||||
echo -e "\e[1;32mResponse:\e[0m"
|
echo -e "\e[1;32mResponse:\e[0m"
|
||||||
# Use atcmd to send the command and display the output
|
# Use atcmd to send the command and display the output
|
||||||
atcmd_output=$(atcmd "$at_command")
|
atcmd_output=$(atcmd "'$at_command'")
|
||||||
echo "$atcmd_output"
|
echo "$atcmd_output"
|
||||||
echo -e "\e[1;32m----------------------------------------\e[0m"
|
echo -e "\e[1;32m----------------------------------------\e[0m"
|
||||||
done
|
done
|
||||||
@@ -44,12 +44,12 @@ send_at_commands_using_atcmd() {
|
|||||||
|
|
||||||
overlay_check() {
|
overlay_check() {
|
||||||
if ! grep -qs '/real_rootfs ' /proc/mounts; then
|
if ! grep -qs '/real_rootfs ' /proc/mounts; then
|
||||||
echo -e "\e[31mYou have not ran Option 2 yet!!! Please run option 2!!\e[0m"
|
echo -e "\e[31mYou have not installed the sdxpinn-mount-fix!!! Please run option 2!!\e[0m"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
basic_55x_setup() {
|
install_mount_fix() {
|
||||||
# Check if neither /etc nor /real_rootfs is mounted
|
# Check if neither /etc nor /real_rootfs is mounted
|
||||||
if ! grep -qs '/etc ' /proc/mounts && ! grep -qs '/real_rootfs ' /proc/mounts; then
|
if ! grep -qs '/etc ' /proc/mounts && ! grep -qs '/real_rootfs ' /proc/mounts; then
|
||||||
# Echo message in red
|
# Echo message in red
|
||||||
@@ -68,47 +68,37 @@ basic_55x_setup() {
|
|||||||
if grep -qs '/real_rootfs ' /proc/mounts; then
|
if grep -qs '/real_rootfs ' /proc/mounts; then
|
||||||
# Echo message in red
|
# Echo message in red
|
||||||
echo -e "\033[31mThe environment has already been setup. If you want to undo the changes temporarily run service mount-fix stop.\033[0m"
|
echo -e "\033[31mThe environment has already been setup. If you want to undo the changes temporarily run service mount-fix stop.\033[0m"
|
||||||
|
echo -e "\033[31mWant to uninstal? Then run opkg remove sdxpinn-mount-fix\033[0m"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
# Install mount-fix
|
||||||
|
cd /tmp
|
||||||
|
curl -O https://raw.githubusercontent.com/$GITUSER/$GITREPO/$GITTREE/ipk/sdxpinn-mount-fix_1.1.0_aarch64_cortex-a53.ipk
|
||||||
|
opkg install sdxpinn-mount-fix_1.1.0_aarch64_cortex-a53.ipk
|
||||||
|
}
|
||||||
|
|
||||||
cd /etc/init.d/
|
basic_55x_setup() {
|
||||||
wget https://raw.githubusercontent.com/$GITUSER/$GITREPO/$GITTREE/etc/init.d/mount-fix
|
|
||||||
wget https://raw.githubusercontent.com/$GITUSER/$GITREPO/$GITTREE/etc/init.d/init-overlay-watchdog
|
|
||||||
# Set executable permissions
|
|
||||||
chmod +x mount-fix
|
|
||||||
chmod +x init-overlay-watchdog
|
|
||||||
cd /usr/sbin
|
|
||||||
wget https://raw.githubusercontent.com/$GITUSER/$GITREPO/$GITTREE/usr/sbin/init-overlay-watchdog.sh
|
|
||||||
cd /
|
|
||||||
service mount-fix enable
|
|
||||||
service init-overlay-watchdog enable
|
|
||||||
service mount-fix start
|
|
||||||
echo "src/gz iamromulan-SDXPINN-repo https://raw.githubusercontent.com/iamromulan/quectel-rgmii-toolkit/SDXPINN/opkg-feed" >> /etc/opkg/customfeeds.conf
|
echo "src/gz iamromulan-SDXPINN-repo https://raw.githubusercontent.com/iamromulan/quectel-rgmii-toolkit/SDXPINN/opkg-feed" >> /etc/opkg/customfeeds.conf
|
||||||
rm /etc/opkg/distfeeds.conf
|
|
||||||
cd /etc/opkg/
|
|
||||||
wget https://raw.githubusercontent.com/$GITUSER/$GITREPO/$GITTREE/etc/opkg/distfeeds.conf
|
|
||||||
cd /
|
cd /
|
||||||
wget https://raw.githubusercontent.com/$GITUSER/$GITREPO/$GITTREE/opkg-feed/iamromulan-SDXPINN-repo.key -O /tmp/iamromulan-SDXPINN-repo.key
|
curl -O https://raw.githubusercontent.com/$GITUSER/$GITREPO/$GITTREE/opkg-feed/iamromulan-SDXPINN-repo.key -O /tmp/iamromulan-SDXPINN-repo.key
|
||||||
opkg-key add /tmp/iamromulan-SDXPINN-repo.key
|
opkg-key add /tmp/iamromulan-SDXPINN-repo.key
|
||||||
opkg update
|
opkg update
|
||||||
opkg install inotifywait inotifywatch
|
|
||||||
service init-overlay-watchdog start
|
|
||||||
echo -e "\e[92m"
|
echo -e "\e[92m"
|
||||||
echo "Mount fix completed!"
|
echo "iamromulan's ipk/opkg repo added!...."
|
||||||
echo "Visit https://github.com/iamromulan for more!"
|
|
||||||
echo "Proceeding with basic packages installation...."
|
|
||||||
echo -e "\e[0m"
|
echo -e "\e[0m"
|
||||||
opkg install atinout luci-app-atinout-mod
|
opkg install atinout luci-app-atinout-mod
|
||||||
opkg install shadow-login
|
opkg install shadow-login
|
||||||
opkg install luci-app-ttyd
|
opkg install luci-app-ttyd
|
||||||
opkg install mc-skins
|
opkg install mc-skins
|
||||||
|
mv /bin/login /bin/login.old
|
||||||
|
cp /usr/bin/login /bin/login
|
||||||
rm /etc/config/atcommands.user
|
rm /etc/config/atcommands.user
|
||||||
rm /etc/config/atinout
|
rm /etc/config/atinout
|
||||||
rm /etc/config/ttyd
|
rm /etc/config/ttyd
|
||||||
cd /etc/config/
|
cd /etc/config/
|
||||||
wget https://raw.githubusercontent.com/$GITUSER/$GITREPO/$GITTREE/etc/config/atcommands.user
|
curl -O https://raw.githubusercontent.com/$GITUSER/$GITREPO/$GITTREE/etc/config/atcommands.user
|
||||||
wget https://raw.githubusercontent.com/$GITUSER/$GITREPO/$GITTREE/etc/config/ttyd
|
curl -O https://raw.githubusercontent.com/$GITUSER/$GITREPO/$GITTREE/etc/config/ttyd
|
||||||
wget https://raw.githubusercontent.com/$GITUSER/$GITREPO/$GITTREE/etc/config/atinout
|
curl -O https://raw.githubusercontent.com/$GITUSER/$GITREPO/$GITTREE/etc/config/atinout
|
||||||
cd /
|
cd /
|
||||||
service uhttpd enable
|
service uhttpd enable
|
||||||
service dropbear enable
|
service dropbear enable
|
||||||
@@ -219,64 +209,13 @@ tailscale_menu() {
|
|||||||
|
|
||||||
# Function to install, update, or remove Tailscale
|
# Function to install, update, or remove Tailscale
|
||||||
install_update_tailscale() {
|
install_update_tailscale() {
|
||||||
echo -e "\e[1;31mInstalling Tailscale from opkg...\e[0m"
|
echo -e "\e[1;31mInstalling Tailscale 1.74.1...\e[0m"
|
||||||
opkg install tailscale
|
cd /tmp
|
||||||
if [ $? -ne 0 ]; then
|
curl -O https://raw.githubusercontent.com/$GITUSER/$GITREPO/$GITTREE/ipk/tailscaled_1.74.1-1_aarch64_cortex-a53.ipk
|
||||||
echo -e "\e[1;31mFailed to install Tailscale via opkg.\e[0m"
|
curl -O https://raw.githubusercontent.com/$GITUSER/$GITREPO/$GITTREE/ipk/tailscale_1.74.1-1_aarch64_cortex-a53.ipk
|
||||||
return 1
|
opkg install tailscaled_1.74.1-1_aarch64_cortex-a53.ipk
|
||||||
fi
|
opkg install tailscale_1.74.1-1_aarch64_cortex-a53.ipk
|
||||||
|
|
||||||
echo -e "\e[1;32mTailscale has been installed via opkg.\e[0m"
|
|
||||||
echo -e "\e[1;32mUpdating to the latest Tailscale version...\e[0m"
|
|
||||||
|
|
||||||
# Stop Running Service
|
|
||||||
service tailscale stop
|
|
||||||
|
|
||||||
# Define variables for the download
|
|
||||||
TAILSCALE_URL="https://pkgs.tailscale.com/stable/tailscale_1.74.1_arm64.tgz"
|
|
||||||
TAILSCALE_TGZ="/tmp/tailscale_1.74.1_arm64.tgz"
|
|
||||||
TAILSCALE_TMP_DIR="/tmp/tailscale_update"
|
|
||||||
|
|
||||||
# Download the latest Tailscale package
|
|
||||||
echo -e "\e[1;32mDownloading latest Tailscale package...\e[0m"
|
|
||||||
curl "$TAILSCALE_URL" -o "$TAILSCALE_TGZ"
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo -e "\e[1;31mFailed to download Tailscale package. Please check your internet connection.\e[0m"
|
|
||||||
rm -f "$TAILSCALE_TGZ"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Extract the package
|
|
||||||
echo -e "\e[1;32mExtracting Tailscale package...\e[0m"
|
|
||||||
mkdir -p "$TAILSCALE_TMP_DIR"
|
|
||||||
tar -xzf "$TAILSCALE_TGZ" -C "$TAILSCALE_TMP_DIR"
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo -e "\e[1;31mFailed to extract Tailscale package.\e[0m"
|
|
||||||
rm -f "$TAILSCALE_TGZ"
|
|
||||||
rm -rf "$TAILSCALE_TMP_DIR"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Replace the binaries with force option
|
|
||||||
echo -e "\e[1;32mUpdating Tailscale binaries...\e[0m"
|
|
||||||
cp -f "$TAILSCALE_TMP_DIR/tailscale_1.74.1_arm64/tailscale" /usr/sbin/
|
|
||||||
cp -f "$TAILSCALE_TMP_DIR/tailscale_1.74.1_arm64/tailscaled" /usr/sbin/
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo -e "\e[1;31mFailed to copy new Tailscale binaries.\e[0m"
|
|
||||||
rm -f "$TAILSCALE_TGZ"
|
|
||||||
rm -rf "$TAILSCALE_TMP_DIR"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set the correct permissions
|
|
||||||
chmod +x /usr/sbin/tailscale /usr/sbin/tailscaled
|
|
||||||
|
|
||||||
# Clean up temporary files
|
|
||||||
rm -f "$TAILSCALE_TGZ"
|
|
||||||
rm -rf "$TAILSCALE_TMP_DIR"
|
|
||||||
|
|
||||||
# Start Tailscale service if available
|
|
||||||
service tailscale start
|
|
||||||
echo -e "\e[1;32mTailscale version 1.74.1 installed\e[0m"
|
echo -e "\e[1;32mTailscale version 1.74.1 installed\e[0m"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -379,46 +318,49 @@ while true; do
|
|||||||
echo "Select an option:"
|
echo "Select an option:"
|
||||||
echo -e "\e[0m"
|
echo -e "\e[0m"
|
||||||
echo -e "\e[96m1) Send AT Commands\e[0m" # Cyan
|
echo -e "\e[96m1) Send AT Commands\e[0m" # Cyan
|
||||||
echo -e "\e[92m2) First time setup/run me after a flash!\e[0m" # Green
|
echo -e "\e[92m2) Install sdxpinn-mount-fix/run me after a flash!\e[0m" # Green
|
||||||
echo -e "\e[94m3) TTL Setup\e[0m" # Light Blue
|
echo -e "\e[94m3) TTL Setup\e[0m" # Light Blue
|
||||||
echo -e "\e[94m4) Set root password\e[0m" # Light Blue
|
echo -e "\e[94m4) Install Basic Packages/enable luci/add iamromulan's feed to opkg(\e[0m" # Light Blue
|
||||||
echo -e "\e[94m5) Tailscale Management\e[0m" # Light Blue
|
echo -e "\e[94m5) Set root password\e[0m" # Light Blue
|
||||||
echo -e "\e[92m6) Install Speedtest.net CLI app (speedtest command)\e[0m" # Light Green
|
echo -e "\e[94m6) Tailscale Management\e[0m" # Light Blue
|
||||||
echo -e "\e[93m7) Exit\e[0m" # Yellow (repeated color for exit option)
|
echo -e "\e[92m7) Install Speedtest.net CLI app (speedtest command)\e[0m" # Light Green
|
||||||
|
echo -e "\e[93m8) Exit\e[0m" # Yellow (repeated color for exit option)
|
||||||
read -p "Enter your choice: " choice
|
read -p "Enter your choice: " choice
|
||||||
|
|
||||||
case $choice in
|
case $choice in
|
||||||
1) send_at_commands_using_atcmd ;;
|
1) send_at_commands_using_atcmd ;;
|
||||||
2) remount_rw; basic_55x_setup ;;
|
2) remount_rw; install_mount_fix ;;
|
||||||
3)
|
3)
|
||||||
overlay_check
|
overlay_check
|
||||||
if [ $? -eq 1 ]; then continue; fi
|
if [ $? -eq 1 ]; then continue; fi
|
||||||
ttl_setup
|
ttl_setup
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
|
overlay_check
|
||||||
|
if [ $? -eq 1 ]; then continue; fi
|
||||||
|
basic_55x_setup
|
||||||
|
;;
|
||||||
|
|
||||||
|
5)
|
||||||
overlay_check
|
overlay_check
|
||||||
if [ $? -eq 1 ]; then continue; fi
|
if [ $? -eq 1 ]; then continue; fi
|
||||||
set_root_passwd
|
set_root_passwd
|
||||||
;;
|
;;
|
||||||
5) tailscale_menu ;;
|
6) tailscale_menu ;;
|
||||||
6)
|
7)
|
||||||
overlay_check
|
overlay_check
|
||||||
if [ $? -eq 1 ]; then continue; fi
|
if [ $? -eq 1 ]; then continue; fi
|
||||||
echo -e "\e[1;32mInstalling Speedtest.net CLI (speedtest command)\e[0m"
|
echo -e "\e[1;32mInstalling Speedtest.net CLI (speedtest command)\e[0m"
|
||||||
cd /usr/bin
|
cd /tmp
|
||||||
curl -O https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-aarch64.tgz
|
curl -O https://raw.githubusercontent.com/$GITUSER/$GITREPO/$GITTREE/ipk/ookla-speedtest_1.2.0_aarch64_cortex-a53.ipk
|
||||||
tar -xzf ookla-speedtest-1.2.0-linux-aarch64.tgz
|
opkg install ookla-speedtest_1.2.0_aarch64_cortex-a53.ipk
|
||||||
rm ookla-speedtest-1.2.0-linux-aarch64.tgz
|
|
||||||
rm speedtest.7
|
|
||||||
rm speedtest.md
|
|
||||||
cd /
|
|
||||||
echo -e "\e[1;32mSpeedtest CLI (speedtest command) installed!!\e[0m"
|
echo -e "\e[1;32mSpeedtest CLI (speedtest command) installed!!\e[0m"
|
||||||
echo -e "\e[1;32mTry running the command 'speedtest'\e[0m"
|
echo -e "\e[1;32mTry running the command 'speedtest'\e[0m"
|
||||||
echo -e "\e[1;32mNote that it will not work unless you login to the root account first\e[0m"
|
echo -e "\e[1;32mNote that it will not work unless you login to the root account first\e[0m"
|
||||||
echo -e "\e[1;32mNormally only an issue in adb, ttyd, and ssh you are forced to login\e[0m"
|
echo -e "\e[1;32mNormally only an issue in adb, ttyd, and ssh you are forced to login\e[0m"
|
||||||
echo -e "\e[1;32mIf in adb just type login and then try to run the speedtest command\e[0m"
|
echo -e "\e[1;32mIf in adb just type login and then try to run the speedtest command\e[0m"
|
||||||
;;
|
;;
|
||||||
7) echo -e "\e[1;32mGoodbye!\e[0m"; break ;;
|
8) echo -e "\e[1;32mGoodbye!\e[0m"; break ;;
|
||||||
*) echo -e "\e[1;31mInvalid option\e[0m" ;;
|
*) echo -e "\e[1;31mInvalid option\e[0m" ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|||||||
352
speedtest.md
Normal file
352
speedtest.md
Normal file
@@ -0,0 +1,352 @@
|
|||||||
|
speedtest(5) - Speedtest CLI by Ookla is the official command line client for testing the speed and performance of your internet connection.
|
||||||
|
============
|
||||||
|
|
||||||
|
## SYNOPSIS
|
||||||
|
**speedtest** [**help**] [**-aAbBfhiIpPsv**] [**--ca-certificate=path**] [**--format=**<format-type>]
|
||||||
|
[**--interface=interface**] [**--ip=ip_address**] [**--output-header**] [**--precision**=<num_decimal_places>]
|
||||||
|
[**--progress**=<yes|no>] [**--selection-details**] [**--server-id**=<id>] [**--servers**] [**--unit**=<unit-of-measure>] [**--version**]
|
||||||
|
|
||||||
|
## DESCRIPTION
|
||||||
|
**speedtest** is an application that measures the latency, jitter, packet loss, download bandwidth, and
|
||||||
|
upload bandwidth of the network connection between the client and a nearby Speedtest
|
||||||
|
Server.
|
||||||
|
|
||||||
|
## OPTIONS
|
||||||
|
|
||||||
|
* **-h, --help**:
|
||||||
|
Print usage information
|
||||||
|
|
||||||
|
* **-v**:
|
||||||
|
Logging verbosity, specify multiple times for higher verbosity (e.g. **-vvv**)
|
||||||
|
|
||||||
|
* **-V, --version**:
|
||||||
|
Print version number
|
||||||
|
|
||||||
|
* **-L, --servers**:
|
||||||
|
List nearest servers
|
||||||
|
|
||||||
|
* **--selection-details**:
|
||||||
|
Show server selection details
|
||||||
|
|
||||||
|
* **-s** *id*, **--server-id**=<id>:
|
||||||
|
Specify a server from the server list using its id
|
||||||
|
|
||||||
|
* **-o** *hostname*, **--host**=<hostname>:
|
||||||
|
Specify a server from the server list using its hostname
|
||||||
|
|
||||||
|
* **-f** <format_type>, **--format**=<format_type>:
|
||||||
|
Output format (default is <human-readable>). See [OUTPUT FORMATS][] below for details.
|
||||||
|
|
||||||
|
* **--progress-update-interval**=<interval>:
|
||||||
|
Progress update interval (100-1000 milliseconds)
|
||||||
|
|
||||||
|
* **--output-header**:
|
||||||
|
Show output header for CSV and TSV formats
|
||||||
|
|
||||||
|
* **-u** <unit_of_measure>, **--unit**=<unit_of_measure>:
|
||||||
|
Output unit for displaying speeds when using the <human-readable>
|
||||||
|
output format. The default unit is Mbps. See [UNITS OF MEASURE][] for
|
||||||
|
more details.
|
||||||
|
|
||||||
|
* **-a**:
|
||||||
|
Shortcut for [**-u** <auto-decimal-bits>]
|
||||||
|
|
||||||
|
* **-A**:
|
||||||
|
Shortcut for [**-u** <auto-decimal-bytes>]
|
||||||
|
|
||||||
|
* **-b**:
|
||||||
|
Shortcut for [**-u** <auto-binary-bits>]
|
||||||
|
|
||||||
|
* **-B**:
|
||||||
|
Shortcut for [**-u** <auto-binary-bytes>]
|
||||||
|
|
||||||
|
* **-P** <decimal_places>, **--precision**=<decimal_places>:
|
||||||
|
Number of decimal places to use (default = 2, valid = 0-8). Only applicable to the
|
||||||
|
<human-readable> output format.
|
||||||
|
|
||||||
|
* **-p** <yes>|<no>, **--progress**=<yes>|<no>:
|
||||||
|
Enable or disable progress bar (default is <yes> when interactive)
|
||||||
|
|
||||||
|
* **-I** <interface>, **--interface**=<interface>:
|
||||||
|
Attempt to bind to the specified interface when connecting to servers
|
||||||
|
|
||||||
|
* **-i** <ip_address>, **--ip**=<ip_address>:
|
||||||
|
Attempt to bind to the specified IP address when connecting to servers
|
||||||
|
|
||||||
|
* **--ca-certificate**=<path>:
|
||||||
|
Path to CA Certificate bundle, see [SSL CERTIFICATE LOCATIONS][] below.
|
||||||
|
|
||||||
|
## OUTPUT FORMATS
|
||||||
|
|
||||||
|
These are the available output formats for Speedtest CLI specified with the **-f** or **--format** flags. All machine readable formats
|
||||||
|
(csv, tsv, json, jsonl, json-pretty) use bytes for data sizes, bytes per seconds for speeds and milliseconds for durations. They also always use maximum precision output.
|
||||||
|
|
||||||
|
* **human-readable**:
|
||||||
|
human readable output
|
||||||
|
* **csv**:
|
||||||
|
comma separated values
|
||||||
|
* **tsv**:
|
||||||
|
tab separated values
|
||||||
|
* **json**:
|
||||||
|
javascript object notation (compact)
|
||||||
|
* **jsonl**:
|
||||||
|
javascript object notation (lines)
|
||||||
|
* **json-pretty**:
|
||||||
|
javascript object notation (pretty)
|
||||||
|
|
||||||
|
## UNITS OF MEASURE
|
||||||
|
|
||||||
|
For the human-readable output format, you can specify the unit of measure to use. The default unit
|
||||||
|
is <Mbps>. The supported units are listed below.
|
||||||
|
|
||||||
|
These units do not apply to machine readable output formats (json, jsonl, csv and tsv).
|
||||||
|
|
||||||
|
### Decimal options (multipliers of 1000)
|
||||||
|
|
||||||
|
* **bps**:
|
||||||
|
bits per second
|
||||||
|
* **kbps**:
|
||||||
|
kilobits per second
|
||||||
|
* **Mbps**:
|
||||||
|
megabits per second
|
||||||
|
* **Gbps**:
|
||||||
|
gigabits per second
|
||||||
|
* **B/s**:
|
||||||
|
bytes per second
|
||||||
|
* **kB/s**:
|
||||||
|
kilobytes per second
|
||||||
|
* **MB/s**:
|
||||||
|
megabytes per second
|
||||||
|
* **GB/s**:
|
||||||
|
gigabytes per second
|
||||||
|
|
||||||
|
### Binary options (multipliers of 1024)
|
||||||
|
* **kibps**:
|
||||||
|
kibibits per second
|
||||||
|
* **Mibps**:
|
||||||
|
mebibits per second
|
||||||
|
* **Gibps**:
|
||||||
|
gibibits per second
|
||||||
|
* **kiB/s**:
|
||||||
|
kibibytes per second
|
||||||
|
* **MiB/s**:
|
||||||
|
mebibytes per second
|
||||||
|
* **GiB/s**:
|
||||||
|
gibibytes per second
|
||||||
|
|
||||||
|
### Auto-scaling options
|
||||||
|
Automatic units will scale the prefix depending on the measured speed.
|
||||||
|
|
||||||
|
* **auto-decimal-bits**:
|
||||||
|
automatic in decimal bits
|
||||||
|
* **auto-decimal-bytes**:
|
||||||
|
automatic in decimal bytes
|
||||||
|
* **auto-binary-bits**:
|
||||||
|
automatic in binary bits
|
||||||
|
* **auto-binary-bytes**:
|
||||||
|
automatic in binary bytes
|
||||||
|
|
||||||
|
## TERMS OF USE AND PRIVACY POLICY NOTICES
|
||||||
|
You may only use this Speedtest software and information generated from it for personal, non-commercial use,
|
||||||
|
through a command line interface on a personal computer. Your use of this software is subject to the End User
|
||||||
|
License Agreement, Terms of Use and Privacy Policy at these URLs:
|
||||||
|
|
||||||
|
* [https://www.speedtest.net/about/eula](https://www.speedtest.net/about/eula)
|
||||||
|
* [https://www.speedtest.net/about/terms](https://www.speedtest.net/about/terms)
|
||||||
|
* [https://www.speedtest.net/about/privacy](https://www.speedtest.net/about/privacy)
|
||||||
|
|
||||||
|
## OUTPUT
|
||||||
|
Upon successful execution, the application will exit with an exit code of 0. The result will include
|
||||||
|
latency, jitter, download, upload, packet loss (where available), and a result URL.
|
||||||
|
|
||||||
|
Latency and jitter will be represented in milliseconds. Download and upload units will depend on the output
|
||||||
|
format as well as if a unit was specified. The human-readable format defaults to Mbps and any machine-readable
|
||||||
|
formats (csv, tsv, json, jsonl, json-pretty) use bytes as the unit of measure with max precision. Packet loss is represented as a percentage, or **Not available** when packet loss is unavailable in the executing network environment.
|
||||||
|
|
||||||
|
The bytes per second measurements can be transformed into the human-readable output format
|
||||||
|
default unit of megabits (Mbps) by dividing the bytes per second value by 125,000. For example:
|
||||||
|
|
||||||
|
38404104 bytes per second = 38404104 / 125 = 307232.832 kilobits per second = 307232.832 / 1000 = 307.232832 megabits per second
|
||||||
|
|
||||||
|
The value 125 is derived from 1000 / 8 as follows:
|
||||||
|
|
||||||
|
1 byte = 8 bits
|
||||||
|
1 kilobit = 1000 bits
|
||||||
|
|
||||||
|
38404104 bytes per second = 38404104 * 8 bits per byte = 307232832 bits per second = 307232832 / 1000 bits per kilobit = 307232.832 kilobits per second
|
||||||
|
|
||||||
|
The Result URL is available to share your result, appending **.png** to the Result URL will create a
|
||||||
|
shareable result image.
|
||||||
|
|
||||||
|
*Example human-readable result:*
|
||||||
|
|
||||||
|
```
|
||||||
|
$ speedtest
|
||||||
|
Speedtest by Ookla
|
||||||
|
|
||||||
|
Server: SUNET - Stockholm (id: 26852)
|
||||||
|
ISP: Bahnhof AB
|
||||||
|
Idle Latency: 5.04 ms (jitter: 0.04ms, low: 5.01ms, high: 5.07ms)
|
||||||
|
Download: 968.73 Mbps (data used: 117.5 MB)
|
||||||
|
12.10 ms (jitter: 1.71ms, low: 6.71ms, high: 18.82ms)
|
||||||
|
Upload: 942.13 Mbps (data used: 114.8 MB)
|
||||||
|
9.94 ms (jitter: 1.10ms, low: 5.30ms, high: 12.72ms)
|
||||||
|
Packet Loss: 0.0%
|
||||||
|
Result URL: https://www.speedtest.net/result/c/d1c46724-50a3-4a59-87ca-ffc09ea014b2
|
||||||
|
```
|
||||||
|
|
||||||
|
## NETWORK TIMEOUT VALUES
|
||||||
|
By default, network requests set a timeout of **10** seconds. The only exception to this
|
||||||
|
is latency testing, which sets a timeout of **15** seconds.
|
||||||
|
|
||||||
|
## FATAL ERRORS
|
||||||
|
Upon fatal errors, the application will exit with a non-zero exit code.
|
||||||
|
|
||||||
|
**Initialization Fatal Error Examples:**
|
||||||
|
|
||||||
|
*Configuration - Couldn't connect to server (Network is unreachable)*
|
||||||
|
|
||||||
|
*Configuration - Could not retrieve or read configuration (ConfigurationError)*
|
||||||
|
|
||||||
|
**Stage Execution Fatal Error Example:**
|
||||||
|
|
||||||
|
*[error] Error: [1] Latency test failed for HTTP*
|
||||||
|
|
||||||
|
*[error] Error: [36] Cannot open socket: Operation now in progress*
|
||||||
|
|
||||||
|
*[error] Failed to resolve host name. Cancelling test suite.*
|
||||||
|
|
||||||
|
*[error] Host resolve failed: Exec format error*
|
||||||
|
|
||||||
|
*[error] Cannot open socket: No route to host*
|
||||||
|
|
||||||
|
*[error] Server Selection - Failed to find a working test server. (NoServers)*
|
||||||
|
|
||||||
|
## SSL CERTIFICATE LOCATIONS
|
||||||
|
By default the following paths are checked for CA certificate bundles on linux machines:
|
||||||
|
|
||||||
|
/etc/ssl/certs/ca-certificates.crt
|
||||||
|
/etc/pki/tls/certs/ca-bundle.crt
|
||||||
|
/usr/share/ssl/certs/ca-bundle.crt
|
||||||
|
/usr/local/share/certs/ca-root-nss.crt
|
||||||
|
/etc/ssl/cert.pem
|
||||||
|
|
||||||
|
If the device under test does *not* have one of the above mentioned files, then the canonical and up to date CA certificate bundle provided by the curl project can be manually
|
||||||
|
downloaded into a specific location. This specific location can be provided as a parameter per the following example:
|
||||||
|
|
||||||
|
wget https://curl.se/ca/cacert.pem
|
||||||
|
./ookla --ca-certificate=./cacert.pem
|
||||||
|
|
||||||
|
## RELEASE NOTES
|
||||||
|
|
||||||
|
### 1.2.0 (2022-07-27)
|
||||||
|
* Cleaned up formatting in human-readable output for additional data within parenthesis (now using `label: value` consistently)
|
||||||
|
* Compressed result upload data to reduce data usage
|
||||||
|
* Added support for measuring responsiveness (latency during load)
|
||||||
|
* Added experimental support for multi-server testing
|
||||||
|
* Updated third-party dependencies: cURL 7.83.1, mbed TLS 3.1.0, Boost 1.79.0
|
||||||
|
* Added stability improvements
|
||||||
|
|
||||||
|
### 1.1.1 (2021-11-15)
|
||||||
|
* Fixed issue with reported client version in uploaded results
|
||||||
|
|
||||||
|
### 1.1.0 (2021-10-27)
|
||||||
|
* Use server-side upload measurements
|
||||||
|
* Performance enhancement on upload tests for CPU constrained devices
|
||||||
|
* Security enhancements
|
||||||
|
* Fix for deadlock bug
|
||||||
|
* Fix crash due to race condition
|
||||||
|
* Fix crash in hostname resolution during test initialization
|
||||||
|
* Fix potential buffer overflow
|
||||||
|
* Update Boost to 1.77.0
|
||||||
|
* Update mbed TLS to 2.27.0
|
||||||
|
* Update cURL to 7.78.0
|
||||||
|
|
||||||
|
### 1.0.0 (2019-10-29)
|
||||||
|
* Initial release
|
||||||
|
|
||||||
|
## COPYRIGHT NOTICES FOR THIRD-PARTY PRODUCTS/LIBRARIES
|
||||||
|
This software incorporates free and open source third-party libraries, including:
|
||||||
|
|
||||||
|
* [boost](https://www.boost.org/)
|
||||||
|
* [libcurl](https://curl.haxx.se/libcurl/)
|
||||||
|
* [petopt](https://www.lysator.liu.se/~pen/petopt/)
|
||||||
|
* [mbed TLS](https://tls.mbed.org/)
|
||||||
|
* [ca-certificates extract](https://curl.haxx.se/docs/caextract.html)
|
||||||
|
* [L. Peter Deutsch’s md5](https://sourceforge.net/projects/libmd5-rfc/files/)
|
||||||
|
* [getopt.h](in Windows version of this software)
|
||||||
|
* [tiny-aes](https://github.com/kokke/tiny-AES-c)
|
||||||
|
* [PicoSHA2](https://github.com/okdshin/PicoSHA2)
|
||||||
|
* [musl](https://www.musl-libc.org/)
|
||||||
|
|
||||||
|
Inclusion of mbed TLS is subject to presentation of the following license terms
|
||||||
|
to recipients of this software: [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
|
||||||
|
(a copy of which is included with the documentation of this software)
|
||||||
|
|
||||||
|
### Inclusion of libcurl is subject to distribution of the software with the following notice:
|
||||||
|
|
||||||
|
Copyright (c) 1996 - 2019, Daniel Stenberg, daniel@haxx.se, and many contributors,
|
||||||
|
see the THANKS file. All rights reserved. Permission to use, copy, modify, and distribute
|
||||||
|
this software for any purpose with or without fee is hereby granted, provided that
|
||||||
|
the above copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
### Inclusion of getopt.h is subject to distribution of the software with the following notice:
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
This file is part of the mingw-w64 runtime package.
|
||||||
|
|
||||||
|
The mingw-w64 runtime package and its code is distributed in the hope that it
|
||||||
|
will be useful but WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESSED OR
|
||||||
|
IMPLIED ARE HEREBY DISCLAIMED. This includes but is not limited to
|
||||||
|
warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright (c) 2002 Todd C. Miller <Todd.Miller@courtesan.com>
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted, provided that the above
|
||||||
|
copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
Copyright (c) 2000 The NetBSD Foundation, Inc.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
This code is derived from software contributed to The NetBSD Foundation
|
||||||
|
by Dieter Baron and Thomas Klausner.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
### Inclusion of PicoSHA2 is subject to distribution of the software with the following notice:
|
||||||
|
|
||||||
|
Copyright (c) 2017 okdshin
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
### Inclusion of musl is subject to distribution of the software with the following notice:
|
||||||
|
|
||||||
|
Copyright © 2005-2019 Rich Felker, et al.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
Reference in New Issue
Block a user