Compare commits

...

13 Commits

8 changed files with 593 additions and 500 deletions

View File

@ -62,6 +62,7 @@ adb shell
cd /tmp && wget -O RMxxx_rgmii_toolkit.sh https://code.060070.xyz/sky/simple-admin/raw/branch/main/RMxxx_rgmii_toolkit.sh && chmod +x RMxxx_rgmii_toolkit.sh && ./RMxxx_rgmii_toolkit.sh && cd / cd /tmp && wget -O RMxxx_rgmii_toolkit.sh https://code.060070.xyz/sky/simple-admin/raw/branch/main/RMxxx_rgmii_toolkit.sh && chmod +x RMxxx_rgmii_toolkit.sh && ./RMxxx_rgmii_toolkit.sh && cd /
``` ```
**您应该看到:** **您应该看到:**
![工具包](https://github.com/iamromulan/quectel-rgmii-configuration-notes/blob/main/images/iamromulantoolkit.png?raw=true) ![工具包](https://github.com/iamromulan/quectel-rgmii-configuration-notes/blob/main/images/iamromulantoolkit.png?raw=true)
## Tailscale安装和配置 ## Tailscale安装和配置

View File

@ -1,23 +1,42 @@
#!/bin/sh #!/bin/sh
#####################################################################
# RMxxx RGMII Toolkit
# Author: iamromulan
# Description: Toolkit for Quectel RMxxx Series modems
# Repository: https://github.com/iamromulan
#####################################################################
#####################################################################
# Environment Configuration
#####################################################################
# Define toolkit paths # Define toolkit paths
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin:/usrdata/root/bin export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin:/usrdata/root/bin
# Define Gitea repository paths
# Define Gitea repository configuration
GITEA_HOST="code.060070.xyz" GITEA_HOST="code.060070.xyz"
GITUSER="sky" GITUSER="sky"
REPONAME="simple-admin" REPONAME="simple-admin"
GITTREE="main" GITTREE="beta"
GITMAINTREE="main" GITMAINTREE="beta"
GITDEVTREE="dev" GITDEVTREE="dev"
# Construct Gitea URLs # Construct Gitea URLs
# Gitea 的 raw 文件 URL 格式为: https://[host]/[user]/[repo]/raw/branch/[branch]/[file] # Format: https://[host]/[user]/[repo]/raw/branch/[branch]/[file]
GITROOT="https://$GITEA_HOST/$GITUSER/$REPONAME/raw/branch/$GITTREE" GITROOT="https://$GITEA_HOST/$GITUSER/$REPONAME/raw/branch/$GITTREE"
GITROOTMAIN="https://$GITEA_HOST/$GITUSER/$REPONAME/raw/branch/$GITMAINTREE" GITROOTMAIN="https://$GITEA_HOST/$GITUSER/$REPONAME/raw/branch/$GITMAINTREE"
GITROOTDEV="https://$GITEA_HOST/$GITUSER/$REPONAME/raw/branch/$GITDEVTREE" GITROOTDEV="https://$GITEA_HOST/$GITUSER/$REPONAME/raw/branch/$GITDEVTREE"
#####################################################################
# Directory Configuration
#####################################################################
# System directories
TMP_DIR="/tmp" TMP_DIR="/tmp"
USRDATA_DIR="/usrdata" USRDATA_DIR="/usrdata"
# Application directories
SOCAT_AT_DIR="/usrdata/socat-at-bridge" SOCAT_AT_DIR="/usrdata/socat-at-bridge"
SOCAT_AT_SYSD_DIR="/usrdata/socat-at-bridge/systemd_units" SOCAT_AT_SYSD_DIR="/usrdata/socat-at-bridge/systemd_units"
SIMPLE_ADMIN_DIR="/usrdata/simpleadmin" SIMPLE_ADMIN_DIR="/usrdata/simpleadmin"
@ -26,9 +45,16 @@ SIMPLE_FIREWALL_SCRIPT="$SIMPLE_FIREWALL_DIR/simplefirewall.sh"
SIMPLE_FIREWALL_SYSTEMD_DIR="$SIMPLE_FIREWALL_DIR/systemd" SIMPLE_FIREWALL_SYSTEMD_DIR="$SIMPLE_FIREWALL_DIR/systemd"
TAILSCALE_DIR="/usrdata/tailscale" TAILSCALE_DIR="/usrdata/tailscale"
TAILSCALE_SYSD_DIR="/usrdata/tailscale/systemd" TAILSCALE_SYSD_DIR="/usrdata/tailscale/systemd"
# AT Command Script Variables and Functions LIGHTTPD_DIR="/usrdata/lighttpd"
# AT Command configuration
DEVICE_FILE="/dev/smd7" DEVICE_FILE="/dev/smd7"
TIMEOUT=4 # Set a timeout for the response TIMEOUT=4 # Set a timeout for the response
#####################################################################
# Basic Utility Functions
#####################################################################
# Function to remount file system as read-write # Function to remount file system as read-write
remount_rw() { remount_rw() {
mount -o remount,rw / mount -o remount,rw /
@ -39,7 +65,11 @@ remount_ro() {
mount -o remount,ro / mount -o remount,ro /
} }
# Basic AT commands without socat bridge for fast responce commands only #####################################################################
# AT Command Functions
#####################################################################
# Basic AT commands without socat bridge for fast response commands only
start_listening() { start_listening() {
cat "$DEVICE_FILE" > /tmp/device_readout & cat "$DEVICE_FILE" > /tmp/device_readout &
CAT_PID=$! CAT_PID=$!
@ -110,6 +140,10 @@ send_at_commands() {
fi fi
} }
#####################################################################
# Installation and Package Management Functions
#####################################################################
# Check for existing Entware/opkg installation, install if not installed # Check for existing Entware/opkg installation, install if not installed
ensure_entware_installed() { ensure_entware_installed() {
remount_rw remount_rw
@ -185,7 +219,7 @@ ensure_entware_installed() {
fi fi
} }
#Uninstall Entware if the Users chooses # Uninstall Entware if the Users chooses
uninstall_entware() { uninstall_entware() {
echo -e '\033[31mInfo: Starting Entware/OPKG uninstallation...\033[0m' echo -e '\033[31mInfo: Starting Entware/OPKG uninstallation...\033[0m'
@ -218,7 +252,239 @@ uninstall_entware() {
echo -e '\033[32mInfo: Entware/OPKG has been uninstalled successfully.\033[0m' echo -e '\033[32mInfo: Entware/OPKG has been uninstalled successfully.\033[0m'
} }
# function to configure the fetures of simplefirewall #####################################################################
# System Service and Configuration Functions
#####################################################################
# Function to manage Daily Reboot Timer
manage_reboot_timer() {
# Remount root filesystem as read-write
mount -o remount,rw /
# Check if the rebootmodem service, timer, or trigger already exists
if [ -f /lib/systemd/system/rebootmodem.service ] || [ -f /lib/systemd/system/rebootmodem.timer ] || [ -f /lib/systemd/system/rebootmodem-trigger.service ]; then
echo -e "\e[1;32mThe rebootmodem service/timer/trigger is already installed.\e[0m"
echo -e "\e[1;32m1) Change\e[0m" # Green
echo -e "\e[1;31m2) Remove\e[0m" # Red
read -p "Enter your choice (1 for Change, 2 for Remove): " reboot_choice
case $reboot_choice in
2)
# Stop and disable timer and trigger service by removing symlinks
systemctl stop rebootmodem.timer
systemctl stop rebootmodem-trigger.service
# Remove symbolic links and files
rm -f /lib/systemd/system/multi-user.target.wants/rebootmodem-trigger.service
rm -f /lib/systemd/system/rebootmodem.service
rm -f /lib/systemd/system/rebootmodem.timer
rm -f /lib/systemd/system/rebootmodem-trigger.service
rm -f "$USRDATA_DIR/reboot_modem.sh"
# Reload systemd to apply changes
systemctl daemon-reload
echo -e "\e[1;32mRebootmodem service, timer, trigger, and script removed successfully.\e[0m"
;;
1)
printf "Enter the new time for daily reboot (24-hour format in Coordinated Universal Time, HH:MM): "
read new_time
# Validate the new time format using grep
if ! echo "$new_time" | grep -qE '^([01]?[0-9]|2[0-3]):[0-5][0-9]$'; then
echo "Invalid time format. Exiting."
exit 1
else
# Remove old symlinks and script
rm -f /lib/systemd/system/multi-user.target.wants/rebootmodem-trigger.service
rm -f "$USRDATA_DIR/reboot_modem.sh"
# Set the user time to the new time and recreate the service, timer, trigger, and script
user_time=$new_time
create_service_and_timer
fi
;;
*)
echo -e "\e[1;31mInvalid choice. Exiting.\e[0m"
exit 1
;;
esac
else
printf "Enter the time for daily reboot (24-hour format in UTC, HH:MM): "
read user_time
# Validate the time format using grep
if ! echo "$user_time" | grep -qE '^([01]?[0-9]|2[0-3]):[0-5][0-9]$'; then
echo "Invalid time format. Exiting."
exit 1
else
create_service_and_timer
fi
fi
# Remount root filesystem as read-only
mount -o remount,ro /
}
# Function to create systemd service and timer files
create_service_and_timer() {
remount_rw
# Define the path for the modem reboot script
MODEM_REBOOT_SCRIPT="$USRDATA_DIR/reboot_modem.sh"
# Create the modem reboot script
echo "#!/bin/sh
/bin/echo -e 'AT+CFUN=1,1 \r' > /dev/smd7" > "$MODEM_REBOOT_SCRIPT"
# Make the script executable
chmod +x "$MODEM_REBOOT_SCRIPT"
# Create the systemd service file for reboot
echo "[Unit]
Description=Reboot Modem Daily
[Service]
Type=oneshot
ExecStart=/bin/sh /usrdata/reboot_modem.sh
Restart=no
RemainAfterExit=no" > /lib/systemd/system/rebootmodem.service
# Create the systemd timer file with the user-specified time
echo "[Unit]
Description=Starts rebootmodem.service daily at the specified time
[Timer]
OnCalendar=*-*-* $user_time:00
Persistent=false" > /lib/systemd/system/rebootmodem.timer
# Create a trigger service that starts the timer at boot
echo "[Unit]
Description=Trigger the rebootmodem timer at boot
[Service]
Type=oneshot
ExecStart=/bin/systemctl start rebootmodem.timer
RemainAfterExit=yes" > /lib/systemd/system/rebootmodem-trigger.service
# Create symbolic links for the trigger service in the wanted directory
ln -sf /lib/systemd/system/rebootmodem-trigger.service /lib/systemd/system/multi-user.target.wants/
# Reload systemd to recognize the new timer and trigger service
systemctl daemon-reload
sleep 2s
# Start the trigger service, which will start the timer
systemctl start rebootmodem-trigger.service
remount_ro
# Confirmation
echo -e "\e[1;32mRebootmodem-trigger service created and started successfully.\e[0m"
echo -e "\e[1;32mReboot schedule set successfully. The modem will reboot daily at $user_time UTC.\e[0m"
}
# Function to manage CFUN fix
manage_cfun_fix() {
cfun_service_path="/lib/systemd/system/cfunfix.service"
cfun_fix_script="/usrdata/cfun_fix.sh"
mount -o remount,rw /
if [ -f "$cfun_service_path" ]; then
echo -e "\e[1;32mThe CFUN fix is already installed. Do you want to remove it?\e[0m" # Green
echo -e "\e[1;32m1) Yes\e[0m" # Green
echo -e "\e[1;31m2) No\e[0m" # Red
read -p "Enter your choice: " choice
if [ "$choice" = "1" ]; then
echo "Removing CFUN fix..."
systemctl stop cfunfix.service
rm -f /lib/systemd/system/multi-user.target.wants/cfunfix.service
rm -f "$cfun_service_path"
rm -f "$cfun_fix_script"
systemctl daemon-reload
echo "CFUN fix has been removed."
else
echo "Returning to main menu..."
fi
else
echo -e "\e[1;32mInstalling CFUN fix...\e[0m"
# Create the CFUN fix script
echo "#!/bin/sh
/bin/echo -e 'AT+CFUN=1 \r' > /dev/smd7" > "$cfun_fix_script"
chmod +x "$cfun_fix_script"
# Create the systemd service file to execute the CFUN fix script at boot
echo "[Unit]
Description=CFUN Fix Service
After=network.target
[Service]
Type=oneshot
ExecStart=$cfun_fix_script
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target" > "$cfun_service_path"
ln -sf "$cfun_service_path" "/lib/systemd/system/multi-user.target.wants/"
systemctl daemon-reload
mount -o remount,ro /
echo -e "\e[1;32mCFUN fix has been installed and will execute at every boot.\e[0m"
fi
}
#####################################################################
# SimpleAdmin Functions
#####################################################################
# Function to set SimpleAdmin password
set_simpleadmin_passwd(){
ensure_entware_installed
opkg update
opkg install libaprutil
wget -O /usrdata/root/bin/htpasswd $GITROOT/simpleadmin/htpasswd && chmod +x /usrdata/root/bin/htpasswd
wget -O /usrdata/root/bin/simplepasswd $GITROOT/simpleadmin/simplepasswd && chmod +x /usrdata/root/bin/simplepasswd
echo -e "\e[1;32mTo change your simpleadmin (admin) password in the future...\e[0m"
echo -e "\e[1;32mIn the console type simplepasswd and press enter\e[0m"
/usrdata/root/bin/simplepasswd
}
# Function to set root password
set_root_passwd() {
echo -e "\e[1;31mPlease set the root/console password.\e[0m"
/opt/bin/passwd
}
# Function to install/update Simple Admin
install_simple_admin() {
echo -e "\e[1;32mInstalling Simpleadmin 2.0\e[0m"
ensure_entware_installed
echo -e "\e[1;31m2) Installing Simpleadmin 2.0\e[0m"
mkdir /usrdata/simpleupdates > /dev/null 2>&1
mkdir /usrdata/simpleupdates/scripts > /dev/null 2>&1
wget -O /usrdata/simpleupdates/scripts/update_socat-at-bridge.sh $GITROOT/simpleupdates/scripts/update_socat-at-bridge.sh && chmod +x /usrdata/simpleupdates/scripts/update_socat-at-bridge.sh
echo -e "\e[1;32mInstalling/updating dependency: socat-at-bridge\e[0m"
echo -e "\e[1;32mPlease Wait....\e[0m"
/usrdata/simpleupdates/scripts/update_socat-at-bridge.sh
echo -e "\e[1;32m Dependency: socat-at-bridge has been updated/installed.\e[0m"
sleep 1
wget -O /usrdata/simpleupdates/scripts/update_simplefirewall.sh $GITROOT/simpleupdates/scripts/update_simplefirewall.sh && chmod +x /usrdata/simpleupdates/scripts/update_simplefirewall.sh
echo -e "\e[1;32mInstalling/updating dependency: simplefirewall\e[0m"
echo -e "\e[1;32mPlease Wait....\e[0m"
/usrdata/simpleupdates/scripts/update_simplefirewall.sh
echo -e "\e[1;32m Dependency: simplefirewall has been updated/installed.\e[0m"
sleep 1
set_simpleadmin_passwd
wget -O /usrdata/simpleupdates/scripts/update_simpleadmin.sh $GITROOT/simpleupdates/scripts/update_simpleadmin.sh && chmod +x /usrdata/simpleupdates/scripts/update_simpleadmin.sh
echo -e "\e[1;32mInstalling/updating: Simpleadmin content\e[0m"
echo -e "\e[1;32mPlease Wait....\e[0m"
/usrdata/simpleupdates/scripts/update_simpleadmin.sh
echo -e "\e[1;32mSimpleadmin content has been updated/installed.\e[0m"
sleep 1
}
# Function to configure Simple Firewall
configure_simple_firewall() { configure_simple_firewall() {
if [ ! -f "$SIMPLE_FIREWALL_SCRIPT" ]; then if [ ! -f "$SIMPLE_FIREWALL_SCRIPT" ]; then
echo -e "\033[0;31mSimplefirewall is not installed, would you like to install it?\033[0m" echo -e "\033[0;31mSimplefirewall is not installed, would you like to install it?\033[0m"
@ -310,52 +576,6 @@ configure_simple_firewall() {
echo -e "\e[1;32mFirewall configuration updated.\e[0m" echo -e "\e[1;32mFirewall configuration updated.\e[0m"
} }
set_simpleadmin_passwd(){
ensure_entware_installed
opkg update
opkg install libaprutil
wget -O /usrdata/root/bin/htpasswd $GITROOT/simpleadmin/htpasswd && chmod +x /usrdata/root/bin/htpasswd
wget -O /usrdata/root/bin/simplepasswd $GITROOT/simpleadmin/simplepasswd && chmod +x /usrdata/root/bin/simplepasswd
echo -e "\e[1;32mTo change your simpleadmin (admin) password in the future...\e[0m"
echo -e "\e[1;32mIn the console type simplepasswd and press enter\e[0m"
/usrdata/root/bin/simplepasswd
}
set_root_passwd() {
echo -e "\e[1;31mPlease set the root/console password.\e[0m"
/opt/bin/passwd
}
# Function to install/update Simple Admin
install_simple_admin() {
echo -e "\e[1;32mInstalling Simpleadmin 2.0\e[0m"
ensure_entware_installed
echo -e "\e[1;31m2) Installing Simpleadmin 2.0\e[0m"
mkdir /usrdata/simpleupdates > /dev/null 2>&1
mkdir /usrdata/simpleupdates/scripts > /dev/null 2>&1
wget -O /usrdata/simpleupdates/scripts/update_socat-at-bridge.sh $GITROOT/simpleupdates/scripts/update_socat-at-bridge.sh && chmod +x /usrdata/simpleupdates/scripts/update_socat-at-bridge.sh
echo -e "\e[1;32mInstalling/updating dependency: socat-at-bridge\e[0m"
echo -e "\e[1;32mPlease Wait....\e[0m"
/usrdata/simpleupdates/scripts/update_socat-at-bridge.sh
echo -e "\e[1;32m Dependency: socat-at-bridge has been updated/installed.\e[0m"
sleep 1
wget -O /usrdata/simpleupdates/scripts/update_simplefirewall.sh $GITROOT/simpleupdates/scripts/update_simplefirewall.sh && chmod +x /usrdata/simpleupdates/scripts/update_simplefirewall.sh
echo -e "\e[1;32mInstalling/updating dependency: simplefirewall\e[0m"
echo -e "\e[1;32mPlease Wait....\e[0m"
/usrdata/simpleupdates/scripts/update_simplefirewall.sh
echo -e "\e[1;32m Dependency: simplefirewall has been updated/installed.\e[0m"
sleep 1
set_simpleadmin_passwd
wget -O /usrdata/simpleupdates/scripts/update_simpleadmin.sh $GITROOT/simpleupdates/scripts/update_simpleadmin.sh && chmod +x /usrdata/simpleupdates/scripts/update_simpleadmin.sh
echo -e "\e[1;32mInstalling/updating: Simpleadmin content\e[0m"
echo -e "\e[1;32mPlease Wait....\e[0m"
/usrdata/simpleupdates/scripts/update_simpleadmin.sh
echo -e "\e[1;32mSimpleadmin content has been updated/installed.\e[0m"
sleep 1
break
}
# Function to Uninstall Simpleadmin and dependencies # Function to Uninstall Simpleadmin and dependencies
uninstall_simpleadmin_components() { uninstall_simpleadmin_components() {
echo -e "\e[1;32mStarting the uninstallation process for Simpleadmin components.\e[0m" echo -e "\e[1;32mStarting the uninstallation process for Simpleadmin components.\e[0m"
@ -452,6 +672,10 @@ uninstall_simpleadmin_components() {
echo "Uninstallation process completed." echo "Uninstallation process completed."
} }
#####################################################################
# Tailscale Management Functions
#####################################################################
# Function for Tailscale Submenu # Function for Tailscale Submenu
tailscale_menu() { tailscale_menu() {
while true; do while true; do
@ -472,7 +696,7 @@ tailscale_menu() {
done done
} }
# Function to install, update, or remove Tailscale # Function to install or update Tailscale
install_update_tailscale() { install_update_tailscale() {
echo -e "\e[1;31m2) Installing tailscale from the $GITTREE branch\e[0m" echo -e "\e[1;31m2) Installing tailscale from the $GITTREE branch\e[0m"
ensure_entware_installed ensure_entware_installed
@ -568,184 +792,11 @@ configure_tailscale() {
done done
} }
# Function to manage Daily Reboot Timer #####################################################################
manage_reboot_timer() { # Tool Installation Functions
# Remount root filesystem as read-write #####################################################################
mount -o remount,rw /
# Check if the rebootmodem service, timer, or trigger already exists
if [ -f /lib/systemd/system/rebootmodem.service ] || [ -f /lib/systemd/system/rebootmodem.timer ] || [ -f /lib/systemd/system/rebootmodem-trigger.service ]; then
echo -e "\e[1;32mThe rebootmodem service/timer/trigger is already installed.\e[0m"
echo -e "\e[1;32m1) Change\e[0m" # Green
echo -e "\e[1;31m2) Remove\e[0m" # Red
read -p "Enter your choice (1 for Change, 2 for Remove): " reboot_choice
case $reboot_choice in
2)
# Stop and disable timer and trigger service by removing symlinks
systemctl stop rebootmodem.timer
systemctl stop rebootmodem-trigger.service
# Remove symbolic links and files
rm -f /lib/systemd/system/multi-user.target.wants/rebootmodem-trigger.service
rm -f /lib/systemd/system/rebootmodem.service
rm -f /lib/systemd/system/rebootmodem.timer
rm -f /lib/systemd/system/rebootmodem-trigger.service
rm -f "$USRDATA_DIR/reboot_modem.sh"
# Reload systemd to apply changes
systemctl daemon-reload
echo -e "\e[1;32mRebootmodem service, timer, trigger, and script removed successfully.\e[0m"
;;
1)
printf "Enter the new time for daily reboot (24-hour format in Coordinated Universal Time, HH:MM): "
read new_time
# Validate the new time format using grep
if ! echo "$new_time" | grep -qE '^([01]?[0-9]|2[0-3]):[0-5][0-9]$'; then
echo "Invalid time format. Exiting."
exit 1
else
# Remove old symlinks and script
rm -f /lib/systemd/system/multi-user.target.wants/rebootmodem-trigger.service
rm -f "$USRDATA_DIR/reboot_modem.sh"
# Set the user time to the new time and recreate the service, timer, trigger, and script
user_time=$new_time
create_service_and_timer
fi
;;
*)
echo -e "\e[1;31mInvalid choice. Exiting.\e[0m"
exit 1
;;
esac
else
printf "Enter the time for daily reboot (24-hour format in UTC, HH:MM): "
read user_time
# Validate the time format using grep
if ! echo "$user_time" | grep -qE '^([01]?[0-9]|2[0-3]):[0-5][0-9]$'; then
echo "Invalid time format. Exiting."
exit 1
else
create_service_and_timer
fi
fi
# Remount root filesystem as read-only
mount -o remount,ro /
}
# Function to create systemd service and timer files with the user-specified time for the reboot timer
create_service_and_timer() {
remount_rw
# Define the path for the modem reboot script
MODEM_REBOOT_SCRIPT="$USRDATA_DIR/reboot_modem.sh"
# Create the modem reboot script
echo "#!/bin/sh
/bin/echo -e 'AT+CFUN=1,1 \r' > /dev/smd7" > "$MODEM_REBOOT_SCRIPT"
# Make the script executable
chmod +x "$MODEM_REBOOT_SCRIPT"
# Create the systemd service file for reboot
echo "[Unit]
Description=Reboot Modem Daily
[Service]
Type=oneshot
ExecStart=/bin/sh /usrdata/reboot_modem.sh
Restart=no
RemainAfterExit=no" > /lib/systemd/system/rebootmodem.service
# Create the systemd timer file with the user-specified time
echo "[Unit]
Description=Starts rebootmodem.service daily at the specified time
[Timer]
OnCalendar=*-*-* $user_time:00
Persistent=false" > /lib/systemd/system/rebootmodem.timer
# Create a trigger service that starts the timer at boot
echo "[Unit]
Description=Trigger the rebootmodem timer at boot
[Service]
Type=oneshot
ExecStart=/bin/systemctl start rebootmodem.timer
RemainAfterExit=yes" > /lib/systemd/system/rebootmodem-trigger.service
# Create symbolic links for the trigger service in the wanted directory
ln -sf /lib/systemd/system/rebootmodem-trigger.service /lib/systemd/system/multi-user.target.wants/
# Reload systemd to recognize the new timer and trigger service
systemctl daemon-reload
sleep 2s
# Start the trigger service, which will start the timer
systemctl start rebootmodem-trigger.service
remount_ro
# Confirmation
echo -e "\e[1;32mRebootmodem-trigger service created and started successfully.\e[0m"
echo -e "\e[1;32mReboot schedule set successfully. The modem will reboot daily at $user_time UTC.\e[0m"
}
manage_cfun_fix() {
cfun_service_path="/lib/systemd/system/cfunfix.service"
cfun_fix_script="/usrdata/cfun_fix.sh"
mount -o remount,rw /
if [ -f "$cfun_service_path" ]; then
echo -e "\e[1;32mThe CFUN fix is already installed. Do you want to remove it?\e[0m" # Green
echo -e "\e[1;32m1) Yes\e[0m" # Green
echo -e "\e[1;31m2) No\e[0m" # Red
read -p "Enter your choice: " choice
if [ "$choice" = "1" ]; then
echo "Removing CFUN fix..."
systemctl stop cfunfix.service
rm -f /lib/systemd/system/multi-user.target.wants/cfunfix.service
rm -f "$cfun_service_path"
rm -f "$cfun_fix_script"
systemctl daemon-reload
echo "CFUN fix has been removed."
else
echo "Returning to main menu..."
fi
else
echo -e "\e[1;32mInstalling CFUN fix...\e[0m"
# Create the CFUN fix script
echo "#!/bin/sh
/bin/echo -e 'AT+CFUN=1 \r' > /dev/smd7" > "$cfun_fix_script"
chmod +x "$cfun_fix_script"
# Create the systemd service file to execute the CFUN fix script at boot
echo "[Unit]
Description=CFUN Fix Service
After=network.target
[Service]
Type=oneshot
ExecStart=$cfun_fix_script
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target" > "$cfun_service_path"
ln -sf "$cfun_service_path" "/lib/systemd/system/multi-user.target.wants/"
systemctl daemon-reload
mount -o remount,ro /
echo -e "\e[1;32mCFUN fix has been installed and will execute at every boot.\e[0m"
fi
}
# Function to install OpenSSH Server
install_sshd() { install_sshd() {
if [ -d "/usrdata/sshd" ]; then if [ -d "/usrdata/sshd" ]; then
echo -e "\e[1;31mSSHD is currently installed.\e[0m" echo -e "\e[1;31mSSHD is currently installed.\e[0m"
@ -757,6 +808,14 @@ install_sshd() {
case $sshd_choice in case $sshd_choice in
1) 1)
echo -e "\e[1;31m2) Installing sshd from the $GITTREE branch\e[0m" echo -e "\e[1;31m2) Installing sshd from the $GITTREE branch\e[0m"
ensure_entware_installed
mkdir /usrdata/simpleupdates > /dev/null 2>&1
mkdir /usrdata/simpleupdates/scripts > /dev/null 2>&1
wget -O /usrdata/simpleupdates/scripts/update_sshd.sh $GITROOT/simpleupdates/scripts/update_sshd.sh && chmod +x /usrdata/simpleupdates/scripts/update_sshd.sh
echo -e "\e[1;32mUpdating: SSHd\e[0m"
echo -e "\e[1;32mPlease Wait....\e[0m"
/usrdata/simpleupdates/scripts/update_sshd.sh
echo -e "\e[1;32m SSHd has been updated.\e[0m"
;; ;;
2) 2)
echo -e "\e[1;31mUninstalling SSHD...\e[0m" echo -e "\e[1;31mUninstalling SSHD...\e[0m"
@ -773,133 +832,19 @@ install_sshd() {
esac esac
fi fi
# Proceed with installation or updating if not uninstalling # Proceed with installation if not installed
ensure_entware_installed ensure_entware_installed
mkdir /usrdata/simpleupdates > /dev/null 2>&1 mkdir /usrdata/simpleupdates > /dev/null 2>&1
mkdir /usrdata/simpleupdates/scripts > /dev/null 2>&1 mkdir /usrdata/simpleupdates/scripts > /dev/null 2>&1
wget -O /usrdata/simpleupdates/scripts/update_sshd.sh $GITROOT/simpleupdates/scripts/update_sshd.sh && chmod +x /usrdata/simpleupdates/scripts/update_sshd.sh wget -O /usrdata/simpleupdates/scripts/update_sshd.sh $GITROOT/simpleupdates/scripts/update_sshd.sh && chmod +x /usrdata/simpleupdates/scripts/update_sshd.sh
echo -e "\e[1;32mInstalling/updating: SSHd\e[0m" echo -e "\e[1;32mInstalling: SSHd\e[0m"
echo -e "\e[1;32mPlease Wait....\e[0m" echo -e "\e[1;32mPlease Wait....\e[0m"
/usrdata/simpleupdates/scripts/update_sshd.sh /usrdata/simpleupdates/scripts/update_sshd.sh
echo -e "\e[1;32m SSHd has been updated/installed.\e[0m" echo -e "\e[1;32m SSHd has been installed.\e[0m"
} }
# Function to install Speedtest CLI
# Main menu install_speedtest_cli() {
ARCH=$(uname -a)
if echo "$ARCH" | grep -q "aarch64"; then
cd /tmp && wget -O RM55x_rcPCIe_toolkit.sh https://raw.githubusercontent.com/iamromulan/quectel-rgmii-toolkit/SDXPINN/RM55x_rcPCIe_toolkit.sh && chmod +x RM55x_rcPCIe_toolkit.sh && ./RM55x_rcPCIe_toolkit.sh && cd /
exit 0
elif echo "$ARCH" | grep -q "armv7l"; then
# Continue if architecture is armv7l
echo "Architecture is armv7l, continuing..."
else
uname -a
echo "Unsupported architecture."
exit 1
fi
while true; do
echo "//////////////////////////////////////////////////////////////////";
echo "// //";
echo "// //";
echo "// :'######::'####:'##::::'##:'########::'##:::::::'########: //";
echo "// '##... ##:. ##:: ###::'###: ##.... ##: ##::::::: ##.....:: //";
echo "// ##:::..::: ##:: ####'####: ##:::: ##: ##::::::: ##::::::: //";
echo "// . ######::: ##:: ## ### ##: ########:: ##::::::: ######::: //";
echo "// :..... ##:: ##:: ##. #: ##: ##.....::: ##::::::: ##...:::: //";
echo "// '##::: ##:: ##:: ##:.:: ##: ##:::::::: ##::::::: ##::::::: //";
echo "// . ######::'####: ##:::: ##: ##:::::::: ########: ########: //";
echo "// :......:::....::..:::::..::..:::::::::........::........:: //";
echo "// :::'###::::'########::'##::::'##:'####:'##::: ##: //";
echo "// ::'## ##::: ##.... ##: ###::'###:. ##:: ###:: ##: //";
echo "// :'##:. ##:: ##:::: ##: ####'####:: ##:: ####: ##: //";
echo "// '##:::. ##: ##:::: ##: ## ### ##:: ##:: ## ## ##: //";
echo "// #########: ##:::: ##: ##. #: ##:: ##:: ##. ####: //";
echo "// ##.... ##: ##:::: ##: ##:.:: ##:: ##:: ##:. ###: //";
echo "// ##:::: ##: ########:: ##:::: ##:'####: ##::. ##: //";
echo "// ..:::::..::........:::..:::::..::....::..::::..:: //";
echo "// //";
echo "// By iamromulan //";
echo "//////////////////////////////////////////////////////////////////";
echo -e "\e[92m"
echo "Welcome to iamromulan's RGMII Toolkit script for Quectel RMxxx Series modems!"
echo "Visit https://github.com/iamromulan for more!"
echo -e "\e[0m"
echo "Select an option:"
echo -e "\e[0m"
echo -e "\e[96m1) Send AT Commands\e[0m" # Cyan
echo -e "\e[93m2) Install Simple Admin\e[0m" # Yellow
echo -e "\e[95m3) Set Simpleadmin (admin) password\e[0m" # Light Purple
echo -e "\e[94m4) Set Console/ttyd (root) password\e[0m" # Light Blue
echo -e "\e[91m5) Uninstall Simple Admin\e[0m" # Light Red
echo -e "\e[95m6) Simple Firewall Management\e[0m" # Light Purple
echo -e "\e[94m7) Tailscale Management\e[0m" # Light Blue
echo -e "\e[92m8) Install/Change or remove Daily Reboot Timer\e[0m" # Light Green
echo -e "\e[96m9) Install/Uninstall CFUN 0 Fix\e[0m" # Cyan (repeated color for additional options)
echo -e "\e[91m10) Uninstall Entware/OPKG\e[0m" # Light Red
echo -e "\e[92m11) Install Speedtest.net CLI app (speedtest command)\e[0m" # Light Green
echo -e "\e[92m12) Install Fast.com CLI app (fast command)(tops out at 40Mbps)\e[0m" # Light Green
echo -e "\e[92m13) Install OpenSSH Server\e[0m" # Light Green
echo -e "\e[93m14) Exit\e[0m" # Yellow (repeated color for exit option)
read -p "Enter your choice: " choice
case $choice in
1)
send_at_commands
;;
2)
install_simple_admin
;;
3) set_simpleadmin_passwd
;;
4)
set_root_passwd
;;
5)
uninstall_simpleadmin_components
;;
6)
configure_simple_firewall
;;
7)
tailscale_menu
;;
8)
manage_reboot_timer
;;
9)
manage_cfun_fix
;;
10)
echo -e "\033[31mAre you sure you want to uninstall entware?\033[0m"
echo -e "\033[31m1) Yes\033[0m"
echo -e "\033[31m2) No\033[0m"
read -p "Select an option (1 or 2): " user_choice
case $user_choice in
1)
# If yes, uninstall existing entware
echo -e "\033[31mUninstalling existing entware...\033[0m"
uninstall_entware # Assuming uninstall_entware is a defined function or command
echo -e "\033[31mEntware has been uninstalled.\033[0m"
;;
2)
# If no, exit the script
echo -e "\033[31mUninstallation cancelled.\033[0m"
exit # Use 'exit' to terminate the script outside a loop
;;
*)
# Handle invalid input
echo -e "\033[31mInvalid option. Please select 1 or 2.\033[0m"
;;
esac
;;
11)
ensure_entware_installed ensure_entware_installed
echo -e "\e[1;32mInstalling Speedtest.net CLI (speedtest command)\e[0m" echo -e "\e[1;32mInstalling Speedtest.net CLI (speedtest command)\e[0m"
remount_rw remount_rw
@ -918,8 +863,10 @@ echo "//////////////////////////////////////////////////////////////////";
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;32mNormaly only an issue in adb, ttyd and ssh you are forced to login\e[0m" echo -e "\e[1;32mNormaly 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"
;; }
12)
# Function to install Fast.com CLI
install_fast_cli() {
echo -e "\e[1;32mInstalling fast.com CLI (fast command)\e[0m" echo -e "\e[1;32mInstalling fast.com CLI (fast command)\e[0m"
remount_rw remount_rw
mkdir /usrdata/root mkdir /usrdata/root
@ -932,10 +879,151 @@ echo "//////////////////////////////////////////////////////////////////";
echo -e "\e[1;32mFast.com CLI (speedtest command) installed!!\e[0m" echo -e "\e[1;32mFast.com CLI (speedtest command) installed!!\e[0m"
echo -e "\e[1;32mTry running the command 'fast'\e[0m" echo -e "\e[1;32mTry running the command 'fast'\e[0m"
echo -e "\e[1;32mThe fast.com test tops out at 40Mbps on the modem\e[0m" echo -e "\e[1;32mThe fast.com test tops out at 40Mbps on the modem\e[0m"
}
#####################################################################
# AT Command Bridge Functions
#####################################################################
# Function to install/update AT command socat bridge
install_update_at_socat() {
local current_dir=$(pwd)
ensure_entware_installed
mkdir /usrdata/simpleupdates > /dev/null 2>&1
mkdir /usrdata/simpleupdates/scripts > /dev/null 2>&1
wget -O /usrdata/simpleupdates/scripts/update_socat-at-bridge.sh $GITROOT/simpleupdates/scripts/update_socat-at-bridge.sh && chmod +x /usrdata/simpleupdates/scripts/update_socat-at-bridge.sh
echo -e "\e[1;32mInstalling/updating: AT Socat Bridge\e[0m"
echo -e "\e[1;32mPlease Wait....\e[0m"
/usrdata/simpleupdates/scripts/update_socat-at-bridge.sh
echo -e "\e[1;32mAT Socat Bridge has been updated/installed.\e[0m"
cd "$current_dir"
}
#####################################################################
# Firewall Functions
#####################################################################
# Function to install Simple Firewall
install_simple_firewall() {
ensure_entware_installed
mkdir /usrdata/simpleupdates > /dev/null 2>&1
mkdir /usrdata/simpleupdates/scripts > /dev/null 2>&1
wget -O /usrdata/simpleupdates/scripts/update_simplefirewall.sh $GITROOT/simpleupdates/scripts/update_simplefirewall.sh && chmod +x /usrdata/simpleupdates/scripts/update_simplefirewall.sh
echo -e "\e[1;32mInstalling/updating: Simple Firewall\e[0m"
echo -e "\e[1;32mPlease Wait....\e[0m"
/usrdata/simpleupdates/scripts/update_simplefirewall.sh
echo -e "\e[1;32mSimple Firewall has been updated/installed.\e[0m"
}
#####################################################################
# Main Menu and Program Flow
#####################################################################
# Check system architecture and proceed accordingly
check_architecture() {
ARCH=$(uname -a)
if echo "$ARCH" | grep -q "aarch64"; then
cd /tmp && wget -O RM55x_rcPCIe_toolkit.sh https://raw.githubusercontent.com/iamromulan/quectel-rgmii-toolkit/SDXPINN/RM55x_rcPCIe_toolkit.sh && chmod +x RM55x_rcPCIe_toolkit.sh && ./RM55x_rcPCIe_toolkit.sh && cd /
exit 0
elif echo "$ARCH" | grep -q "armv7l"; then
# Continue if architecture is armv7l
echo "Architecture is armv7l, continuing..."
else
uname -a
echo "Unsupported architecture."
exit 1
fi
}
# Display the main menu
display_main_menu() {
echo "//////////////////////////////////////////////////////////////////"
echo "// //"
echo "// //"
echo "// :'######::'####:'##::::'##:'########::'##:::::::'########: //"
echo "// '##... ##:. ##:: ###::'###: ##.... ##: ##::::::: ##.....:: //"
echo "// ##:::..::: ##:: ####'####: ##:::: ##: ##::::::: ##::::::: //"
echo "// . ######::: ##:: ## ### ##: ########:: ##::::::: ######::: //"
echo "// :..... ##:: ##:: ##. #: ##: ##.....::: ##::::::: ##...:::: //"
echo "// '##::: ##:: ##:: ##:.:: ##: ##:::::::: ##::::::: ##::::::: //"
echo "// . ######::'####: ##:::: ##: ##:::::::: ########: ########: //"
echo "// :......:::....::..:::::..::..:::::::::........::........:: //"
echo "// :::'###::::'########::'##::::'##:'####:'##::: ##: //"
echo "// ::'## ##::: ##.... ##: ###::'###:. ##:: ###:: ##: //"
echo "// :'##:. ##:: ##:::: ##: ####'####:: ##:: ####: ##: //"
echo "// '##:::. ##: ##:::: ##: ## ### ##:: ##:: ## ## ##: //"
echo "// #########: ##:::: ##: ##. #: ##:: ##:: ##. ####: //"
echo "// ##.... ##: ##:::: ##: ##:.:: ##:: ##:: ##:. ###: //"
echo "// ##:::: ##: ########:: ##:::: ##:'####: ##::. ##: //"
echo "// ..:::::..::........:::..:::::..::....::..::::..:: //"
echo "// //"
echo "// By iamromulan //"
echo "//////////////////////////////////////////////////////////////////"
echo -e "\e[92m"
echo "Welcome to iamromulan's RGMII Toolkit script for Quectel RMxxx Series modems!"
echo "Visit https://github.com/iamromulan for more!"
echo -e "\e[0m"
echo "Select an option:"
echo -e "\e[0m"
echo -e "\e[96m1) Send AT Commands\e[0m" # Cyan
echo -e "\e[93m2) Install Simple Admin\e[0m" # Yellow
echo -e "\e[95m3) Set Simpleadmin (admin) password\e[0m" # Light Purple
echo -e "\e[94m4) Set Console/ttyd (root) password\e[0m" # Light Blue
echo -e "\e[91m5) Uninstall Simple Admin\e[0m" # Light Red
echo -e "\e[95m6) Simple Firewall Management\e[0m" # Light Purple
echo -e "\e[94m7) Tailscale Management\e[0m" # Light Blue
echo -e "\e[92m8) Install/Change or remove Daily Reboot Timer\e[0m" # Light Green
echo -e "\e[96m9) Install/Uninstall CFUN 0 Fix\e[0m" # Cyan
echo -e "\e[91m10) Uninstall Entware/OPKG\e[0m" # Light Red
echo -e "\e[92m11) Install Speedtest.net CLI app (speedtest command)\e[0m" # Light Green
echo -e "\e[92m12) Install Fast.com CLI app (fast command)(tops out at 40Mbps)\e[0m" # Light Green
echo -e "\e[92m13) Install OpenSSH Server\e[0m" # Light Green
echo -e "\e[93m14) Exit\e[0m" # Yellow
}
# Main program loop
main() {
check_architecture
while true; do
display_main_menu
read -p "Enter your choice: " choice
case $choice in
1) send_at_commands;;
2) install_simple_admin;;
3) set_simpleadmin_passwd;;
4) set_root_passwd;;
5) uninstall_simpleadmin_components;;
6) configure_simple_firewall;;
7) tailscale_menu;;
8) manage_reboot_timer;;
9) manage_cfun_fix;;
10)
echo -e "\033[31mAre you sure you want to uninstall entware?\033[0m"
echo -e "\033[31m1) Yes\033[0m"
echo -e "\033[31m2) No\033[0m"
read -p "Select an option (1 or 2): " user_choice
case $user_choice in
1)
echo -e "\033[31mUninstalling existing entware...\033[0m"
uninstall_entware
echo -e "\033[31mEntware has been uninstalled.\033[0m"
;; ;;
13) 2)
install_sshd echo -e "\033[31mUninstallation cancelled.\033[0m"
exit
;; ;;
*)
echo -e "\033[31mInvalid option. Please select 1 or 2.\033[0m"
;;
esac
;;
11) install_speedtest_cli;;
12) install_fast_cli;;
13) install_sshd;;
14) 14)
echo -e "\e[1;32mGoodbye!\e[0m" echo -e "\e[1;32mGoodbye!\e[0m"
break break
@ -944,4 +1032,8 @@ echo "//////////////////////////////////////////////////////////////////";
echo -e "\e[1;31mInvalid option\e[0m" echo -e "\e[1;31mInvalid option\e[0m"
;; ;;
esac esac
done done
}
# Start the program
main

View File

@ -5,8 +5,8 @@
GITEA_HOST="code.060070.xyz" GITEA_HOST="code.060070.xyz"
GITUSER="sky" GITUSER="sky"
REPONAME="simple-admin" REPONAME="simple-admin"
GITTREE="main" GITTREE="beta"
GITMAINTREE="main" GITMAINTREE="beta"
GITDEVTREE="dev" GITDEVTREE="dev"
# Construct Gitea URLs # Construct Gitea URLs
@ -62,8 +62,8 @@ cat <<EOF > "$TMP_SCRIPT"
GITEA_HOST="code.060070.xyz" GITEA_HOST="code.060070.xyz"
GITUSER="sky" GITUSER="sky"
REPONAME="simple-admin" REPONAME="simple-admin"
GITTREE="main" GITTREE="beta"
GITMAINTREE="main" GITMAINTREE="beta"
GITDEVTREE="dev" GITDEVTREE="dev"
# Construct Gitea URLs # Construct Gitea URLs

View File

@ -5,8 +5,8 @@
GITEA_HOST="code.060070.xyz" GITEA_HOST="code.060070.xyz"
GITUSER="sky" GITUSER="sky"
REPONAME="simple-admin" REPONAME="simple-admin"
GITTREE="main" GITTREE="beta"
GITMAINTREE="main" GITMAINTREE="beta"
GITDEVTREE="dev" GITDEVTREE="dev"
# Construct Gitea URLs # Construct Gitea URLs
@ -58,8 +58,8 @@ cat <<EOF > "$TMP_SCRIPT"
GITEA_HOST="code.060070.xyz" GITEA_HOST="code.060070.xyz"
GITUSER="sky" GITUSER="sky"
REPONAME="simple-admin" REPONAME="simple-admin"
GITTREE="main" GITTREE="beta"
GITMAINTREE="main" GITMAINTREE="beta"
GITDEVTREE="dev" GITDEVTREE="dev"
# Construct Gitea URLs # Construct Gitea URLs

View File

@ -5,8 +5,8 @@
GITEA_HOST="code.060070.xyz" GITEA_HOST="code.060070.xyz"
GITUSER="sky" GITUSER="sky"
REPONAME="simple-admin" REPONAME="simple-admin"
GITTREE="main" GITTREE="beta"
GITMAINTREE="main" GITMAINTREE="beta"
GITDEVTREE="dev" GITDEVTREE="dev"
# Construct Gitea URLs # Construct Gitea URLs
@ -55,8 +55,8 @@ cat <<EOF > "$TMP_SCRIPT"
GITEA_HOST="code.060070.xyz" GITEA_HOST="code.060070.xyz"
GITUSER="sky" GITUSER="sky"
REPONAME="simple-admin" REPONAME="simple-admin"
GITTREE="main" GITTREE="beta"
GITMAINTREE="main" GITMAINTREE="beta"
GITDEVTREE="dev" GITDEVTREE="dev"
# Construct Gitea URLs # Construct Gitea URLs

View File

@ -5,8 +5,8 @@
GITEA_HOST="code.060070.xyz" GITEA_HOST="code.060070.xyz"
GITUSER="sky" GITUSER="sky"
REPONAME="simple-admin" REPONAME="simple-admin"
GITTREE="main" GITTREE="beta"
GITMAINTREE="main" GITMAINTREE="beta"
GITDEVTREE="dev" GITDEVTREE="dev"
# Construct Gitea URLs # Construct Gitea URLs
@ -46,8 +46,8 @@ cat <<EOF > "$TMP_SCRIPT"
GITEA_HOST="code.060070.xyz" GITEA_HOST="code.060070.xyz"
GITUSER="sky" GITUSER="sky"
REPONAME="simple-admin" REPONAME="simple-admin"
GITTREE="main" GITTREE="beta"
GITMAINTREE="main" GITMAINTREE="beta"
GITDEVTREE="dev" GITDEVTREE="dev"
# Construct Gitea URLs # Construct Gitea URLs

View File

@ -5,8 +5,8 @@
GITEA_HOST="code.060070.xyz" GITEA_HOST="code.060070.xyz"
GITUSER="sky" GITUSER="sky"
REPONAME="simple-admin" REPONAME="simple-admin"
GITTREE="main" GITTREE="beta"
GITMAINTREE="main" GITMAINTREE="beta"
GITDEVTREE="dev" GITDEVTREE="dev"
# Construct Gitea URLs # Construct Gitea URLs
@ -64,8 +64,8 @@ export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin:/usrdata/root/bin
GITEA_HOST="code.060070.xyz" GITEA_HOST="code.060070.xyz"
GITUSER="sky" GITUSER="sky"
REPONAME="simple-admin" REPONAME="simple-admin"
GITTREE="main" GITTREE="beta"
GITMAINTREE="main" GITMAINTREE="beta"
GITDEVTREE="dev" GITDEVTREE="dev"
# Construct Gitea URLs # Construct Gitea URLs

View File

@ -7,7 +7,7 @@ CONFIG_FILE="/usrdata/simpleupdates/simpleupdate.conf"
GITEA_HOST="code.060070.xyz" GITEA_HOST="code.060070.xyz"
GITUSER="sky" GITUSER="sky"
REPONAME="simple-admin" REPONAME="simple-admin"
GITTREE="main" GITTREE="beta"
# Monitored directories # Monitored directories
DIRECTORIES=("simpleadmin" "socat-at-bridge" "simplefirewall" "tailscale" "ttyd") DIRECTORIES=("simpleadmin" "socat-at-bridge" "simplefirewall" "tailscale" "ttyd")