-Both SMD11 and SMD7 are now used to create 2 separate AT command flows/streams -SMD11 is linked to ttyOUT -SMD7 is linked to ttyOUT2 -ttyOUT is intended for use with automated AT commands like the modem status parse script -ttyOUT2 is intended for user initiated AT commands like the AT Commands page in simpleadmin or the new atcmd shell command -Entware installation has been improved for better compatibility and smoother install. -Added the option to try out TTYd -This is a web based shell console you can access via http on port 443 -More improvements to come
215 lines
6.3 KiB
Bash
215 lines
6.3 KiB
Bash
#!/bin/sh
|
|
|
|
TYPE='generic'
|
|
#|---------|-----------------|
|
|
#| ARCH | armv7sf-k3.2 |
|
|
#| LOADER | ld-linux.so.3 |
|
|
#| GLIBC | 2.27 |
|
|
#|---------|-----------------|
|
|
unset LD_LIBRARY_PATH
|
|
unset LD_PRELOAD
|
|
ARCH=armv7sf-k3.2
|
|
LOADER=ld-linux.so.3
|
|
GLIBC=2.27
|
|
PRE_OPKG_PATH=$(which opkg)
|
|
|
|
# Remount filesystem as read-write
|
|
mount -o remount,rw /
|
|
|
|
uninstall_entware() {
|
|
echo -e '\033[31mInfo: Starting Entware/OPKG uninstallation...\033[0m'
|
|
|
|
# Stop services
|
|
systemctl stop rc.unslung.service
|
|
/opt/etc/init.d/rc.unslung stop
|
|
rm /lib/systemd/system/multi-user.target.wants/rc.unslung.service
|
|
rm /lib/systemd/system/rc.unslung.service
|
|
|
|
systemctl stop opt.mount
|
|
rm /lib/systemd/system/multi-user.target.wants/start-opt-mount.service
|
|
rm /lib/systemd/system/opt.mount
|
|
rm /lib/systemd/system/start-opt-mount.service
|
|
|
|
# Unmount /opt if mounted
|
|
mountpoint -q /opt && umount /opt
|
|
|
|
# Remove Entware installation directory
|
|
rm -rf /usrdata/opt
|
|
rm -rf /opt
|
|
|
|
# Reload systemctl daemon
|
|
systemctl daemon-reload
|
|
|
|
# Optionally, clean up any modifications to /etc/profile or other system files
|
|
# This step depends on the specific changes made by the user or the installation script
|
|
|
|
echo -e '\033[32mInfo: Entware/OPKG has been uninstalled successfully.\033[0m'
|
|
}
|
|
|
|
# Check if /opt exists
|
|
if [ -d /opt ]; then
|
|
echo -e "\033[32mDo you want to uninstall Entware/OPKG first? It is already installed.\033[0m"
|
|
echo -e "\033[32m1) Yes\033[0m"
|
|
echo -e "\033[32m2) No\033[0m"
|
|
echo -e "\033[32m3) Cancel\033[0m"
|
|
read -p "Select an option: " choice
|
|
|
|
case $choice in
|
|
1)
|
|
# Call the uninstall function
|
|
uninstall_entware
|
|
exit 0
|
|
;;
|
|
2)
|
|
# Continue with the script
|
|
echo "Continuing with the script..."
|
|
;;
|
|
3)
|
|
echo "Canceling. Exiting script."
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Invalid option. Please select 1, 2, or 3."
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
create_opt_mount() {
|
|
# Bind /usrdata/opt to /opt
|
|
echo -e '\033[32mInfo: Setting up /opt mount to /usrdata/opt...\033[0m'
|
|
cat <<EOF > /lib/systemd/system/opt.mount
|
|
[Unit]
|
|
Description=Bind /usrdata/opt to /opt
|
|
|
|
[Mount]
|
|
What=/usrdata/opt
|
|
Where=/opt
|
|
Type=none
|
|
Options=bind
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
systemctl daemon-reload
|
|
systemctl start opt.mount
|
|
|
|
# Additional systemd service to ensure opt.mount starts at boot
|
|
echo -e '\033[32mInfo: Creating service to start opt.mount at boot...\033[0m'
|
|
cat <<EOF > /lib/systemd/system/start-opt-mount.service
|
|
[Unit]
|
|
Description=Ensure opt.mount is started at boot
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
ExecStart=/bin/systemctl start opt.mount
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
systemctl daemon-reload
|
|
ln -s /lib/systemd/system/start-opt-mount.service /lib/systemd/system/multi-user.target.wants/start-opt-mount.service
|
|
}
|
|
|
|
if [ -n "$PRE_OPKG_PATH" ]; then
|
|
while true; do
|
|
echo -e "\033[32mopkg already exists at: $PRE_OPKG_PATH\033[0m"
|
|
echo -e "\033[32mDo you want to rename it to opkg_old?\033[0m"
|
|
echo -e "\033[32m1) Yes (Highly Recommended)\033[0m"
|
|
echo -e "\033[32m2) No (The opkg command may not work)\033[0m"
|
|
read -p "Select an option (1 or 2): " user_choice
|
|
|
|
|
|
case $user_choice in
|
|
1)
|
|
mv "$PRE_OPKG_PATH" "${PRE_OPKG_PATH}_old"
|
|
echo "Factory/Already existing opkg has been renamed to opkg_old."
|
|
break
|
|
;;
|
|
2)
|
|
echo "Proceeding without renaming opkg."
|
|
break
|
|
;;
|
|
*)
|
|
echo "Invalid option. Please select 1 or 2."
|
|
;;
|
|
esac
|
|
done
|
|
else
|
|
echo "Info: no existing opkg binary detected, proceeding with installation"
|
|
fi
|
|
echo -e '\033[32mInfo: Creating /opt mount pointed to /usrdata/opt ...\033[0m'
|
|
create_opt_mount
|
|
echo -e '\033[32mInfo: Proceeding with main installation ...\033[0m'
|
|
# no need to create many folders. entware-opt package creates most
|
|
for folder in bin etc lib/opkg tmp var/lock
|
|
do
|
|
if [ -d "/opt/$folder" ]; then
|
|
echo -e '\033[31mWarning: Folder /opt/$folder exists!\033[0m'
|
|
echo -e '\033[31mWarning: If something goes wrong please clean /opt folder and try again.\033[0m'
|
|
else
|
|
mkdir -p /opt/$folder
|
|
fi
|
|
done
|
|
|
|
echo -e '\033[32mInfo: Opkg package manager deployment...\033[0m'
|
|
URL=http://bin.entware.net/${ARCH}/installer
|
|
wget $URL/opkg -O /opt/bin/opkg
|
|
chmod 755 /opt/bin/opkg
|
|
wget $URL/opkg.conf -O /opt/etc/opkg.conf
|
|
|
|
echo -e '\033[32mInfo: Basic packages installation...\033[0m'
|
|
/opt/bin/opkg update
|
|
/opt/bin/opkg install entware-opt
|
|
|
|
# Fix for multiuser environment
|
|
chmod 777 /opt/tmp
|
|
|
|
for file in passwd group shells shadow gshadow; do
|
|
if [ $TYPE = 'generic' ]; then
|
|
if [ -f /etc/$file ]; then
|
|
ln -sf /etc/$file /opt/etc/$file
|
|
else
|
|
[ -f /opt/etc/$file.1 ] && cp /opt/etc/$file.1 /opt/etc/$file
|
|
fi
|
|
else
|
|
if [ -f /opt/etc/$file.1 ]; then
|
|
cp /opt/etc/$file.1 /opt/etc/$file
|
|
fi
|
|
fi
|
|
done
|
|
|
|
[ -f /etc/localtime ] && ln -sf /etc/localtime /opt/etc/localtime
|
|
|
|
# Create and enable rc.unslung service
|
|
echo -e '\033[32mInfo: Creating rc.unslung (Entware init.d service)...\033[0m'
|
|
cat <<EOF > /lib/systemd/system/rc.unslung.service
|
|
[Unit]
|
|
Description=Start Entware services
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
# Add a delay to give /opt time to mount
|
|
ExecStartPre=/bin/sleep 5
|
|
ExecStart=/opt/etc/init.d/rc.unslung start
|
|
RemainAfterExit=yes
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
systemctl daemon-reload
|
|
ln -s /lib/systemd/system/rc.unslung.service /lib/systemd/system/multi-user.target.wants/rc.unslung.service
|
|
systemctl start rc.unslung.service
|
|
echo -e '\033[32mInfo: Congratulations!\033[0m'
|
|
echo -e '\033[32mInfo: If there are no errors above then Entware was successfully initialized.\033[0m'
|
|
echo -e '\033[32mInfo: Add /opt/bin & /opt/sbin to $PATH variable\033[0m'
|
|
echo -e '\033[32mInfo: Run export PATH=/opt/bin:/opt/sbin:$PATH to do it for this session only\033[0m'
|
|
echo -e '\033[32mInfo: opkg at /opt/bin will be linked to /bin but any package you install with opkg will not be automatically.\033[0m'
|
|
ln -sf /opt/bin/opkg /bin
|
|
opkg update
|
|
# Remount filesystem as read-only
|
|
mount -o remount,ro /
|