How to Make an Automated Configuration and Uninstall
From MikroTik Wiki
Contents
The Explanation
The Breakdown
Section 1
Section 2
Section 3
Section 4
#~ "Uninstall Flag (Default = no )" :local deconf no #~# #~ "Start of Main Sub" :if ($deconf = no) do={ #~ "Calculate Script Runtime" :put ("System Configuration Script Executed in " . [:time { #~# ######################################################### ## An Automated Installation and Uninstall Script ## ## This Script Prepared by: Casey Annis ## ## ## ## Wednesday, October 22nd, 2008 ## ######################################################### #~ These variables can be edited to make the script funtional in your network ######################################################### ## System Configuration Variables - To Help Automate ## ## Network Setup ## ######################################################### ######################################################### ## Delcare The System Type: ## ## (i.e., RB500revA, RB433, RB433AH, etc.) ## ## If you are running RoS on a non RouterBoard product ## ## you can change 'OTHER' to a custom string. ## ######################################################### :local systemTYPE " " :if ([/system router get routerboard] = no) do { :set systemTYPE ("RB" . [/system router get model])} else { :set systemTYPE "OTHER" } ## Installed Location / Part of RADIO-NAME (i.e., 5th_and_Baum.) :local installedLOCATION "5th_and_Baum" ## System Site Indentifier can be used to specify a site ID (i.e., 5SBA) ## :local siteID "5SBA" ## LAN IPv4 Subnet First Octet :local firstOctet "172" ## LAN IPv4 Subnet Second Octet :local secondOctet "16" ## LAN IPv4 IP Third Octet :local thirdOctet "16" ## LAN IPv4 Subnet IP Suffix (ie Router Host Address 172.16.2.<fourthOctet>) :local fourthOctet "1" ## LAN IPv4 Subnet in CIDR Notation (Deafault is 24, but may vary) :local ipLANsubnet "24" ## Your Company Name :local companyNAME "MikroTik" ## SNMP Community String ## :local snmpname "PUBLIC" ## Primary DNS Server Ip Address ## :local pridns "4.2.2.2" ## Secondary DNS Server Ip Address ## :local secdns "4.2.2.3" #~# ######################################################### ## END OF System Configuration Variables Setup ## ## DO NOT EDIT BELOW THIS LINE ## ######################################################### ## Local Subnet IP Prefix ## :local ipprefix ( $firstOctet . "." . $secondOctet . "." . $thirdOctet . ".") ########################################################## ## Configure Frequency Arrays for All Supported Bands ## ## This is for Speculation, I'm Still writing this ## ## section. ## ######################################################### #~ Sub wlanCHIPsetDETECT -- This section is still under dev. #:local chipSET58 (:toarray "xxxx,xxxx,xxxx,xxxx,xxxx,xxxx") #:local chipSET24 #:local chipSET700 #:local chipSET900 #:local chipSETWiMAX #:local freqARRAY [:toarray $freqMODEstring] #~# #~ Radio Card Frequency Arrays ## Freq Array: 5Ghz Standard Band## :global freq58string "5180,5200,5220,5240,5260,5280,5300,5320,5745,5765,5785,5805,5825" :local freq58array [:toarray $freq58string] ## Freq Array: 700Mhz ## ##:global freq700string " " ## :global freq700array " " ## Freq Array: 900Mhz ## ## :global freq900string " " ## Freq Array: 4.9Ghz ## ## :global freq49string " " ## Freq Array: WiMAX ## ## :global freqWIMAXstring " " #~# #~ Start Building The System Identity String (a.k.a., Serial Number) ########################################################## ## This section of the script will set some identifying ## ## information for this unit. This will not affect ## ## configuration but will help identify the unit for ## ## warranty purposes. ## ########################################################## ## Build Router Identity String ## ## We use the MAC Address of the 1st Ethernet port to ## ## specify our serials ## ###### While loop to strip :'s from mac address :local stripCOUNT 0 :local E1macADDRESS [/interface ethernet get ether1 mac-address] :local macLEN [:len $E1macADDRESS] :local snBUILDstring "" :global serialNUMBER "" :local i 0 :while ($stripCOUNT != $macLEN) do { :if ($stripCOUNT = ($i +2)) do { :set stripCOUNT ($stripCOUNT +1) :set i ($i +3)} else { :set snBUILDstring [:pick $E1macADDRESS $stripCOUNT] :set stripCOUNT ($stripCOUNT +1) :set serialNUMBER ($serialNUMBER . $snBUILDstring) } } :local ident ("S/N: " . $serialNUMBER . "") :put ("Asset S/N Found: " . $serialNUMBER . "") #~# #~ Start Configuring Interfaces! ########################################################## ## Start Configuring Interfaces on The Router ## ## AUTOMATED PROCESS ## ########################################################## / interface bridge add name="bridge1" arp=proxy-arp comment="" disabled=no / interface bridge port add interface=ether2 bridge=bridge1 comment="" \ disabled=no add interface=ether1 bridge=bridge1 comment="" \ disabled=no :local wlanACONF 0 :foreach i in=[/interface wireless find] do { :put ("Array Len: " . [:len $i]) :if ([:len $i] < 2) do {/ interface wireless :set wlanACONF 1 set wlan1 radio-name=("Remote Station - " . $siteID . "- " . $installedLOCATION . " ") \ mode=ap-bridge ssid="WASP1" area="" frequency=5180 band=5ghz \ disabled=no default-authentication=yes antenna-mode=ant-b /interface bridge port add interface=$i bridge=bridge1 } else={ :put ("Configuring: " . ([/interface wireless get $i name])) :put ("Freq Selected: " . [:pick $freq58array $wlanACONF]) :put ("Radio Name: " . " AP - " . $siteID . " - " . $installedLOCATION . " ") /interface wireless set $i radio-name=("AP - " . $siteID . " - " . $installedLOCATION . " ") \ mode=ap-bridge ssid=("WASP" . ($wlanACONF +1) . "") area="" frequency=[:pick $freq58array ($wlanACONF)] band=5ghz \ disabled=no wds-mode=dynamic wds-default-bridge=bridge1 default-authentication=yes \ antenna-mode=ant-b :put "Debug: No Error Here" /interface bridge port add interface=$i bridge=bridge1 :set wlanACONF ($wlanACONF +1) } } #~# #~ Start DNS Configuration ###################################################### ## Change the DNS Server Entries so they match The ## ## servers provided by the bandwidth agency. ## ###################################################### / ip dns set primary-dns=$pridns secondary-dns=$secdns \ allow-remote-requests=yes cache-size=2048KiB cache-max-ttl=1w / ip dns static add name="site.router.local" address=172.16.16.1 ttl=1d #~# #~ IP Address Configuration ####################################################### ## This portion of the script will configure ip ## ## addresses based on the variables populated at the ## ## start of the script. ## ####################################################### /ip address add address=10.10.10.1/24 interface=ether3 comment="Onsite Service Port Adress" disabled=no ####################################################### ## Bridge IP Address ## ## ## ## This will be set dynamically by the script ## ####################################################### add address=($ipprefix . $fourthOctet . "/" . $ipLANsubnet) \ interface=bridge1 comment="Local LAN IP Address - Added by Config Script" disabled=no / ip route add dst-address=0.0.0.0/0 gateway=($ipprefix . "1") comment="Default Route - Added by Config Script" #~# #~ Some General Router Settings / Housekeeping / system identity set name=$ident / system ntp client set enabled=yes mode=broadcast primary-ntp=132.163.4.102 ## Airport Router System Note ## :local confTIME ([/system clock get date] . " @ " . [/system clock get time]) :local sysnote ($companyNAME . "-" . "Site: " . $siteID . " - " . " Model: " . $systemTYPE . " ---- This System Configured on: " . $confTIME . "" ) / system note set show-at-login=yes note=$sysnote #~# #~ "Wrapup and Give some Feedback" :put ("") :put ("Initial Configuration Complete") }] . " seconds.") } else={ #~# #~# "End of Main Config Script" #~ "Start The Uninstall Script" :put ("Deconfiguration Script Executed in " . [:time { :for i from=1 to=100 step=1 do={ :put " " } :put ("//WARNING///WARNING///WARNING///WARNING///WARNING///WARNING///WARNING//") :put ("// //") :put ("// DANGEROUS: //") :put ("// SYSTEM DECONFIGURATION VARIABLE HAS BEEN SET //") :put ("// //") :put ("//WARNING///WARNING///WARNING///WARNING///WARNING///WARNING///WARNING//") :put (" ") :put (" YOU HAVE TEN (10) SECONDS TO CANCEL THIS OPERATION ") :for i from=1 to=40 step=1 do={ :put " " } :delay 5 :put ("Countdown:") :put ("5....") :delay 1 :put ("4...") :delay 1 :put ("3..") :delay 1 :put ("2.") :delay 1 :put ("1") :delay 1 :put ("Initiating Configuration Wipe") :delay 1 ##### Reset System Scheduler Settings ##### :put ("##### Resetting System Scheduler Settings #####") :local schedARRAY [/system scheduler find] :put ("Deconf: " . [:len $schedARRAY] . " scheduled events found.") :if ([:len $schedARRAY] != 0) do={ :foreach i in=($schedARRAY) do={ :put ("Deconf: Now Removing " . [/system scheduler get $i name] . ".") /system scheduler remove $i } } ##### Deconf: Stripping Identifiers and SysNotes ##### :put "##### Deconf: Removing System Identity. #####" /system identity set name=MikroTik :put "##### Deconf: Clearing SysNote. #####" /system note set note="..." show-at-login="no" ##### Deconf: Resetting Wireless Cards to Defaults ##### :put ("##### Resetting Wireless Cards to Defaults #####") :local wlanARRAY [/interface wireless find] :put ("Deconf: " . [:len $wlanARRAY] . " wireless modules found") :foreach wlanRESET in=($wlanARRAY) do={ :put ("Deconf: Resetting " . [/interface wireless get $wlanRESET name] . ".") /interface wireless reset-configuration $wlanRESET :delay 1 } ##### Deconf: Stripping IP Address ####### :local ipARRAY [/ip address find] :put ("Deconf: " . [:len $ipARRAY] . " IP addresses found.") :foreach ipADDY in=($ipARRAY) do={ :put ("Deconf: Removing IP Addresses - Removing " . [/ip address get $ipADDY address] . " from " . [/ip address get $ipADDY interface] . ".") :log warning ("Deconf: Removing IP Addresses - Removing " . [/ip address get $ipADDY address] . " from " . [/ip address get $ipADDY interface] . ".") /ip address remove $ipADDY :delay 1 } ###### Deconf: Stripping Routes ###### ###### Deconf: Stripping Routes ###### :local routeARRAY [/ip route find] :put "###### Uninstall Routes ######" :put ("Deconf: " . [:len $routeARRAY] . " routes found.") :local routeFILL "" :foreach ipROUTE in=($routeARRAY) do={ :if ([/ip route get $ipROUTE gateway] != "") do={ :set routeFILL ("gateway: " . [/ip route get $ipROUTE gateway] . ".") } else={ :set routeFILL ("pref-src: " . [/ip route get $ipROUTE pref-src] . ".") } :put ("Deconf: Removing Route - DST-Address " . [/ip route get $ipROUTE dst-address] . " with " . $routeFILL ) :log warning ("Deconf: Removing Route - DST-Address " . [/ip route get $ipROUTE dst-address] . " with " . $routeFILL . ".") /ip route remove $ipROUTE :delay 1 } ##### Deconf: Uninstall Bridge Ports ######## :put ("##### Uninstall Bride Ports #####") :local brpARRAY [/interface bridge port find] :put ("Deconf: " . [:len $brpARRAY] . " bridge ports found.") :if ([:len $brpARRAY] != 0) do={ :foreach bRp in=($brpARRAY) do={ :put ("Deconf: Uninstall Bride Ports - Removing " . [/interface bridge port get $bRp interface] . ".") :log warning ("Deconf: Uninstall Bride Ports - Removing " . [/interface bridge port get $bRp interface] . ".") /interface bridge port disable $bRp :delay 1 remove $bRp :delay 1 } } ####### Deconf: Uninstall Bridge ######## :put ("##### Deconf: Uninstall Bridge Interfaces #####") :local bridgeARRAY [/interface bridge find] :put ("Deconf: " . [:len $bridgeARRAY] . " bridge interfaces found.") :if (:len $bridgeARRAY != 0) do={ :foreach i in=($bridgeARRAY) do={ :put ("Deconf: Debug - Value of 'i'" . $i . "'.") :put ("Deconf: Uninstall Bridge - Removing " . [/interface bridge get $i name] . ".") :log warning ("Deconf: Uninstall Bridge - Removing " . [/interface bridge get $i name] . ".") /interface bridge remove $i } } ###### Deconf: Reset DNS Servers & Static Entries ##### :put ("##### Deconf: Reset DNS Servers to Defaults. #####") /ip dns set primary-dns="0.0.0.0" secondary-dns="0.0.0.0" :delay 1 :put ("##### Deconf: Remove all Static DNS Entries. #####") :local staticDNSarray [/ip dns static find] :put ("Deconf: " . [:len $staticDNSarray] . " static entries found.") :if ([:len $staticDNSarray] != 0) do={ :put ("Deconf: Removing The Following Entries:") :put ("_______________________________________________________________") :put ("| FQDN | Address | TTL |") :put ("---------------------------------------------------------------") :foreach i in=($staticDNSarray) do={ :put ([/ip dns static get $i name] . " " . [/ip dns static get $i address] . " " . [/ip dns static get $i ttl]) /ip dns static remove $i :delay 1 } } ##### Reset NTP Client ##### :put ("##### Resetting NTP Client #####") / system ntp client set enabled=no mode=broadcast primary-ntp=0.0.0.0 secondary-ntp=0.0.0.0 }] . " seconds.") #~# "End of Uninstall Script" } #~# "End of Main Sub"