Auto upgrade script V3.x: Difference between revisions

From MikroTik Wiki
Jump to navigation Jump to search
New page: One little script to upgrade RrouterBoards automatically.<br> *) fetch file from main router containing latest ROS version number; *) get currently running version number; *) extract mino...
 
No edit summary
 
(7 intermediate revisions by 2 users not shown)
Line 11: Line 11:
<pre>
<pre>
/file print file="latestVer";
/file print file="latestVer";
/file set latestVer.txt content="3.3";
/file set latestVer.txt content="3.24";
</pre>
</pre>


Line 28: Line 28:
:local vMajor;
:local vMajor;
:local vMinor;
:local vMinor;
# TODO: auto detect platform
:local platform "mipsle";


:local myVer [/system resource get version];
:local myVer [/system resource get version];
# fetch latest version
/tool fetch address="172.16.0.1" path="currentVer.txt" user="admin" password="" mode=ftp;
:local lVer [/file get currentVer.txt content];


:for i from=0 to=([:len $myVer] - 1) do={   
:for i from=0 to=([:len $myVer] - 1) do={   
Line 46: Line 38:
}
}


:for i from=0 to=([:len $lVer] - 1) do={   
:if ($vMajor < 3) do={
:if ( [:pick $lVer $i] = ".") do={  
:log warning "RouterOS version too old ($vMajor.$vMinor),  update script not compatible";
:set lMajor [:tonum [:pick $lVer 0 $i]];  
} else={
:set lMinor [:tonum [:pick $lVer ($i + 1) [:len $lVer]]] ;
 
#      detect platform (architecture-name is not available in older 3.x versions)
      :local platform [/system resource get architecture-name];
 
 
#      fetch latest version
      /tool fetch address="172.16.0.1" src-path="latestVer.txt" user="admin" password="" mode=ftp;
      :local lVer [/file get latestVer.txt content];
 
 
:for i from=0 to=([:len $lVer] - 1) do={   
:if ( [:pick $lVer $i] = ".") do={  
:set lMajor [:tonum [:pick $lVer 0 $i]];  
:set lMinor [:tonum [:pick $lVer ($i + 1) [:len $lVer]]] ;
}
}
}
}


:if ($vMajor < 3) do={
:log warning "oOops: should never happen ( /tool fetch supported only on 3.x )";
} else={
:if (($vMajor = $lMajor) && ($vMinor < $lMinor)) do={
:if (($vMajor = $lMajor) && ($vMinor < $lMinor)) do={
:local pckgName ("routeros-" . $platform . "-" . $lMajor . "." . $lMinor . ".npk");
:local pckgName "routeros-$platform-$lMajor.$lMinor.npk";
/tool fetch address="www.mikrotik.com" host="www.mikrotik.com" mode=http path="download/$pckgName";
/tool fetch address=[:resolve "www.mikrotik.com"] host="www.mikrotik.com" mode=http src-path="download/$pckgName";
}
/system reboot;
} else={
                :log info "Upgrade_script: already latest version";
        }
}
}


</pre>
</pre>


This script will download packages for mipsle platform, set
Add scheduler to run this script, for example once in 24h (or whatever interval you like).
':local platform' variable to correct platform that will run this script:
*) "x86" - all x86 machines ( RB200, intel, amd );
*) "mipsbe" - rb4xx and other atheros based boards
*) "mipsle" - rb1xx, rb5xx
*) "powerpc" - rb333, rb600, rb1000
 
TODO: add code to detect platform automatically.


[[Category:Scripting]]
[[Category:Scripting]]

Latest revision as of 08:02, 15 June 2009

One little script to upgrade RrouterBoards automatically.

  • ) fetch file from main router containing latest ROS version number;
  • ) get currently running version number;
  • ) extract minor and major version numbers and compare them;
  • ) if version fetched from main router is newer then download combined package directly from mikrotik.com
  • ) reboot.

At first you should create file containing newest version number on main router.

/file print file="latestVer";
/file set latestVer.txt content="3.24";

Now we are ready to run scripts on other routers:

#########################################################################
# download and upgrade
#########################################################################

# newest version
:local lMajor;
:local lMinor;

# current version
:local vMajor;
:local vMinor;

:local myVer [/system resource get version];

:for i from=0 to=([:len $myVer] - 1) do={  
	:if ( [:pick $myVer $i] = ".") do={ 
		:set vMajor [:tonum [:pick $myVer 0 $i]]; 
		:set vMinor [:tonum [:pick $myVer ($i + 1) [:len $myVer]]] ;
	}
}

:if ($vMajor < 3) do={
	:log warning "RouterOS version too old ($vMajor.$vMinor),  update script not compatible";
} else={ 

#      detect platform (architecture-name is not available in older 3.x versions)
       :local platform [/system resource get architecture-name];


#      fetch latest version
       /tool fetch address="172.16.0.1" src-path="latestVer.txt" user="admin" password="" mode=ftp;
       :local lVer [/file get latestVer.txt content];


	:for i from=0 to=([:len $lVer] - 1) do={  
		:if ( [:pick $lVer $i] = ".") do={ 
			:set lMajor [:tonum [:pick $lVer 0 $i]]; 
			:set lMinor [:tonum [:pick $lVer ($i + 1) [:len $lVer]]] ;
		}
	}

	:if (($vMajor = $lMajor) && ($vMinor < $lMinor)) do={
		:local pckgName "routeros-$platform-$lMajor.$lMinor.npk";
		/tool fetch address=[:resolve "www.mikrotik.com"] host="www.mikrotik.com" mode=http src-path="download/$pckgName";
		/system reboot;
	} else={
                :log info "Upgrade_script: already latest version";
        }
}


Add scheduler to run this script, for example once in 24h (or whatever interval you like).