mirror of https://github.com/OpenIPC/composer.git
				
				
				
			
		
			
				
	
	
		
			135 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			135 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/bin/sh
 | |
| 
 | |
| readconfig() {
 | |
| echo "=============------------  Read cofig --------------============"
 | |
| rcfg
 | |
| echo "================--------  Parse config -------------============"
 | |
| ssid=`cat /tmp/config.txt | grep ssid | sed '/^#/d' | sed 's/ \{1,\}/ /g' | cut -d " " -f 2`
 | |
| key=`cat /tmp/config.txt | grep ^key | sed '/^#/d' | sed 's/ \{1,\}/ /g' | cut -d: -d " " -f 2`
 | |
| ###########################
 | |
| privkey=`cat /tmp/config.txt | grep PrivateKey | sed '/^#/d' | sed 's/ \{1,\}/ /g' | cut -d: -d " " -f 2`
 | |
| addrcam=`cat /tmp/config.txt | grep Address | sed '/^#/d' | sed 's/ \{1,\}/ /g' | cut -d: -d " " -f 2`;addrcam="${addrcam%/*}"
 | |
| gateway=`cat /tmp/config.txt | grep Gateway | sed '/^#/d' | sed 's/ \{1,\}/ /g' | cut -d: -d " " -f 2`;gateway="${gateway%<*}"
 | |
| pubkey=`cat /tmp/config.txt | grep PublicKey | sed '/^#/d' | sed 's/ \{1,\}/ /g' | cut -d: -d " " -f 2`
 | |
| allowips=`cat /tmp/config.txt | grep AllowedIPs | sed '/^#/d' | sed 's/ \{1,\}/ /g' | cut -d: -d " " -f 2`;allowips="${allowips%<*}"
 | |
| endpoint=`cat /tmp/config.txt | grep Endpoint | sed '/^#/d' | sed 's/ \{1,\}/ /g' | cut -d: -d " " -f 2`;endpoint="${endpoint%<*}"
 | |
| ###########################
 | |
| dumpconfig=`echo -n "$ssid$key"`
 | |
| }
 | |
| 
 | |
| setconfig() {
 | |
| echo "===========--------------  set wifi config ------------=========="
 | |
| if [[ ! -z "$ssid" && ! -z "$key" ]]
 | |
|  then
 | |
|  cur=`sed -n '3p' /usr/bin/crCli`
 | |
|  new="wpa_passphrase $ssid $key >/tmp/wpa_supplicant.conf"
 | |
| 
 | |
|  if [[ "$cur" == "$new" ]]
 | |
|    then
 | |
|    echo "Ok. ssid not replaced"
 | |
|    else
 | |
|    echo "Ok. Set new ssid, key"
 | |
|    sed -i '3d' /usr/bin/crCli
 | |
|    sed -i "3i \\$new" /usr/bin/crCli
 | |
|  fi
 | |
| fi
 | |
| 
 | |
| if [[ ! -z "$privkey" && ! -z "$addrcam" && ! -z "$pubkey" && ! -z "$allowips" && ! -z "$endpoint" ]]
 | |
|  then
 | |
|   echo "=======---------- Not Null ------========"
 | |
|   corr=0
 | |
|   #########################################################################
 | |
|   addrcam="address ${addrcam%/*}"
 | |
|   gateway="gateway ${gateway%/*}"
 | |
|   privkey="PrivateKey = $privkey"
 | |
|   pubkey="PublicKey = $pubkey"
 | |
|   allowips="AllowedIPs = $allowips"
 | |
|   endpoint="Endpoint = $endpoint"
 | |
|   eaddrcam=`sed -n '48p' /etc/network/interfaces | sed 's/^ *//'`
 | |
|   egateway=`sed -n '50p' /etc/network/interfaces | sed 's/^ *//'`
 | |
| 
 | |
|   eprivkey=`cat /etc/wireguard.conf | grep PrivateKey`
 | |
|   epubkey=`cat /etc/wireguard.conf | grep PublicKey`
 | |
|   eallowips=`cat /etc/wireguard.conf | grep AllowedIPs`
 | |
|   eendpoint=`cat /etc/wireguard.conf | grep Endpoint`
 | |
|   if [[ ! "$addrcam" == "$eaddrcam" ]]
 | |
|     then
 | |
|     sed -i '48d' /etc/network/interfaces
 | |
|     sed -i "48i \\$addrcam" /etc/network/interfaces
 | |
|     corr=1
 | |
|     echo "==========-----------   correct addr in interfaces ---------========"
 | |
|   fi
 | |
| 
 | |
|   if [[ ! "$gateway" == "$egateway" ]]
 | |
|     then
 | |
|       sed -i '50d' /etc/network/interfaces
 | |
|       sed -i "50i \\$gateway" /etc/network/interfaces
 | |
|       corr=1
 | |
|       echo "======------ correct gateway in interfaces -----====="
 | |
|   fi
 | |
| 
 | |
|   if [[ ! "$privkey" == "$eprivkey" ]]
 | |
|     then
 | |
|      corr=1
 | |
|   fi
 | |
|   if [[ ! "$pubkey" == "$epubkey" ]]
 | |
|     then
 | |
|      corr=1
 | |
|   fi
 | |
|   if [[ ! "$allowips" == "$eallowips" ]]
 | |
|     then
 | |
|      corr=1
 | |
|   fi
 | |
|   if [[ ! "$endpoint" == "$eendpoint" ]]
 | |
|     then
 | |
|      corr=1
 | |
|   fi
 | |
|   if [[ $corr == 1 ]]
 | |
|    then
 | |
|     echo "===========--------------- Set WG ----------============"
 | |
| echo "WG addr:: $addrcam"
 | |
|     if [[ ! "$addrcam" == "address xxx.xxx.xxx.xxx" ]]
 | |
|       then sed -i '46s/manual/auto/' /etc/network/interfaces
 | |
|       else sed -i '46s/auto/manual/' /etc/network/interfaces
 | |
|     fi
 | |
|     rm -f /etc/wireguard.conf
 | |
|     echo "[Interface]" >> /etc/wireguard.conf
 | |
|     echo "$privkey" >> /etc/wireguard.conf
 | |
|     echo "[Peer]" >> /etc/wireguard.conf
 | |
|     echo "$pubkey"  >> /etc/wireguard.conf
 | |
|     echo "$allowips" >> /etc/wireguard.conf
 | |
|     echo "$endpoint" >> /etc/wireguard.conf
 | |
|     echo "PersistentKeepalive = 5" >> /etc/wireguard.conf
 | |
|     rm -f /sdcard/config.hex
 | |
|     rm -f /sdcard/config.txt
 | |
|   fi
 | |
| fi
 | |
| }
 | |
| 
 | |
| checkconfig() {
 | |
| echo "check config"
 | |
| if [ -f /sdcard/config.hex ]
 | |
| then
 | |
|  echo "config exist"
 | |
|  readconfig
 | |
|  setconfig
 | |
| else
 | |
| echo "config not exist"
 | |
| fi
 | |
| 
 | |
| if [ -f /sdcard/hardres ]
 | |
| then
 | |
|  rm -f /sdcard/hardres
 | |
|  firstboot
 | |
| fi
 | |
| }
 | |
| 
 | |
| case "$1" in
 | |
| start)
 | |
|         echo "read config on SDcard"
 | |
|         checkconfig
 | |
|         echo "set config done"
 | |
|         # commands to launch application
 | |
|         ;;
 | |
| esac
 |