Guest User

UPDATE_CYGWIN.cmd

a guest
Dec 2nd, 2015
209
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. @echo off
  2. rem Leave empty for defaults/autodetect, or set BOTH variables (C:\cygwin64;x86_64)
  3. set MY_CYGWIN_PATH=
  4. set MY_CYGWIN_ARCH=
  5. rem GnuPG is needed for setup file signature check. Download ftp://ftp.gnupg.org/gcrypt/binary/gnupg-w32cli-1.4.19.exe and ftp://ftp.gnupg.org/gcrypt/binary/libiconv-1.9.1.dll.zip. Actually only needed files are gpg.exe and iconv.dll.
  6. set GNUPG=C:\Program Files (x86)\GNU\GnuPG\gpg.exe
  7. goto :BEGIN
  8.  
  9. REM Last change:
  10. rem 2015-11-19: tested on Windows Server 2008 R2
  11. rem 2015-11-19: iconv.dll link, typos, tested on Windows Server 2012 R2
  12. rem 2015-11-18: tested on Windows 7 64-bit
  13. rem 2015-11-18: completely rewritten
  14.  
  15. REM Author: Vladimir Bella
  16.  
  17. REM DISCLAIMER
  18. rem I wrote this software for myself, to satisfy my needs and requirements.
  19. rem You can freely use (and modify) it, but this is YOUR decision and YOU are responsible if this
  20. rem software fits to you.
  21.  
  22. :IS_ADMIN_ELEVATED
  23.     rem Thanks to Ben Hooper, http://stackoverflow.com/questions/4051883/batch-script-how-to-check-for-admin-rights
  24.     set RV=0
  25.     net session >nul 2>&1
  26.     if not errorlevel 1 set RV=1
  27. goto :EOF
  28.  
  29. :DOWNLOAD
  30.     if not "%WGET%"=="" "%WGET%" %1 -O %2
  31.     if     "%WGET%"=="" "%CURL%" %1 -o %2
  32.     if errorlevel 1 if exist %2 del %2
  33. goto :EOF
  34.  
  35. :FIND_IN_PATH
  36.     set RV=%~$PATH:1
  37. goto :EOF
  38.  
  39. :ERR_PERMISSIONS
  40.     @echo Please run this script with administrative/elevated permissions.
  41.     @pause
  42. goto :EOF
  43.  
  44. :ERR_CYGWIN_NOT_FOUND
  45.     @echo Cygwin installation not found.
  46.     @pause
  47. goto :EOF
  48.  
  49. :ERR_MISSING_WGET
  50.     @echo Neither wget nor curl found in Cygwin.
  51.     @pause
  52. goto :EOF
  53.  
  54. :ERR_NO_SETUP
  55.     @echo %SETUP%.exe not found in script directory (%~dp0).
  56.     @pause
  57. goto :EOF
  58.  
  59. :ERR_NO_PUBRING
  60.     @echo Missing/can't be downloaded pubring.asc.
  61.     @pause
  62. goto :EOF
  63.  
  64. :ERR_NO_SIGNATURE
  65.     @echo Missing/can't be downloaded fresh setup signature.
  66.     @pause
  67. goto :EOF
  68.  
  69. :ERR_NO_GPG
  70.     @echo Gpg.exe can't be found.
  71.     @pause
  72. goto :EOF
  73.    
  74. :ERR_GPG_IMPORT
  75.     @echo Gpg: import of Cygwin key failed.
  76.     @pause
  77. goto :EOF
  78.  
  79. :ERR_SETUP_DNL_FAILED
  80.     @echo Downloading new setup failed.
  81.     @pause
  82. goto :EOF
  83.  
  84. :ERR_NEW_SETUP_SIG
  85.     @echo ERROR. New setup (%SETUP%.exe) signature verification FAILED.
  86.     @pause
  87. goto :EOF
  88.  
  89.  
  90. :BEGIN
  91. setlocal enableextensions enabledelayedexpansion
  92.  
  93. @REM ==================================================
  94. @REM Check and set environment
  95. @REM ==================================================
  96.  
  97. @echo Checking for administrative/elevated permissions...
  98. call :IS_ADMIN_ELEVATED
  99. if %RV%==0 goto :ERR_PERMISSIONS
  100. @echo Ok.
  101. @echo.
  102.  
  103. @echo Searching for Cygwin installation to upgrade...
  104. if not "%MY_CYGWIN_PATH%"=="" if not "%MY_CYGWIN_ARCH%"=="" goto :VERIFY_MY_CYGWIN
  105. set MY_CYGWIN_PATH=C:\cygwin64
  106. set MY_CYGWIN_ARCH=x86_64
  107. if not exist "%MY_CYGWIN_PATH%\bin\cygwin*.dll" (
  108.     set MY_CYGWIN_PATH=C:\cygwin
  109.     set MY_CYGWIN_ARCH=x86
  110. )
  111. @set WGET=%MY_CYGWIN_PATH%\bin\wget.exe
  112. @set CURL=%MY_CYGWIN_PATH%\bin\curl.exe
  113. @set SETUP=setup-%MY_CYGWIN_ARCH%
  114. :VERIFY_MY_CYGWIN
  115. if not exist "%MY_CYGWIN_PATH%\bin\cygwin*.dll" goto :ERR_CYGWIN_NOT_FOUND
  116. if not exist "%WGET%" if not exist "%CURL%" goto :ERR_MISSING_WGET
  117. @echo Ok.
  118. @echo.
  119.  
  120. @REM Next is needed, because UAC changes current directory
  121. cd /d "%~dp0"
  122.  
  123. @echo Checking for GnuPG...
  124. if not exist "%GNUPG%" (
  125.     call :FIND_IN_PATH gpg.exe
  126.     set GNUPG=%RV%
  127. )
  128. if not exist "%GNUPG%" set GNUPG=gpg.exe
  129. if not exist "%GNUPG%" goto :ERR_NO_GPG
  130. @echo Ok.
  131. @echo.
  132.  
  133. @REM ==================================================
  134. @REM Ensure current and correct setup program
  135. @REM ==================================================
  136.  
  137. @echo Checking for setup in current directory...
  138. if not exist %SETUP%.exe goto :ERR_NO_SETUP
  139. @echo Ok.
  140. @echo.
  141.  
  142. @echo Downloading public key and current setup signature...
  143. if not exist cygwin-pubring.asc call :DOWNLOAD https://cygwin.com/key/pubring.asc cygwin-pubring.asc
  144. call :DOWNLOAD https://cygwin.com/%SETUP%.exe.sig %SETUP%.exe.sig
  145. if not exist cygwin-pubring.asc goto :ERR_NO_PUBRING
  146. if not exist %SETUP%.exe.sig goto :ERR_NO_SIGNATURE
  147. @echo Ok.
  148. @echo.
  149.  
  150. @echo Ensure Cygwin key is in keyring...
  151. "%GNUPG%" --list-keys Cygwin >nul:
  152. if errorlevel 1 "%GNUPG%" --import cygwin-pubring.asc
  153. if errorlevel 1 goto :ERR_GPG_IMPORT
  154. @echo Ok.
  155. @echo.
  156.  
  157. @echo Check, if we have current setup...
  158. "%GNUPG%" --verify %SETUP%.exe.sig %SETUP%.exe
  159. if not errorlevel 1 (
  160.     @echo Yes, we have.
  161.     @echo.
  162.     goto :HAVE_SETUP
  163. )
  164. @echo Nope. Need new setup...
  165. set EXT=
  166. @for /L %%i in (1,1,999) do (
  167.     set E=00%%i
  168.     set E=!E:~-3!
  169.     if !EXT!_==_ if not exist %SETUP%.exe.!E! set EXT=!E!
  170. )
  171. rename %SETUP%.exe %SETUP%.exe.%EXT%
  172. call :DOWNLOAD https://cygwin.com/%SETUP%.exe %SETUP%.exe
  173. if not exist %SETUP%.exe (
  174.     rem revert last rename
  175.     rename %SETUP%.exe.%EXT% %SETUP%.exe
  176.     goto :ERR_SETUP_DNL_FAILED
  177. )
  178. @echo New setup downloaded.
  179. @echo Old setup saved as %SETUP%.exe.%EXT%.
  180. @echo.
  181. @echo Check new setup signature...
  182. "%GNUPG%" --verify %SETUP%.exe.sig %SETUP%.exe
  183. if errorlevel 1 goto :ERR_NEW_SETUP_SIG
  184. @echo Ok.
  185. @echo.
  186.  
  187. :HAVE_SETUP
  188.  
  189. @REM ==================================================
  190. @REM Stop running services
  191. @REM ==================================================
  192.  
  193. set HAVE_HTTPD=0
  194. set HAVE_MYSQLD=0
  195. set HAVE_SSHD=0
  196. set HAVE_CYGSERVER=0
  197. @REM ==================================================
  198. @echo Service: httpd
  199.     tasklist | find "httpd.exe" >nul
  200.     if not errorlevel 1 set HAVE_HTTPD=1
  201.     set OLD_PATH=%PATH%
  202.     set PATH=C:\cygwin\bin;C:\cygwin\usr\local\bin;%PATH%
  203.     if %HAVE_HTTPD%==1 @echo ... stopping
  204.     if %HAVE_HTTPD%==1 "%MY_CYGWIN_PATH%\bin\bash" /usr/sbin/apachectl -k stop
  205.     if %HAVE_HTTPD%==0 @echo ... did not run
  206.     set PATH=%OLD_PATH%
  207. @echo Service: mysqld
  208.     sc query mysqld | find "RUNNING" >nul
  209.     if not errorlevel 1 set HAVE_MYSQLD=1
  210.     if %HAVE_MYSQLD%==1 @echo ... stopping
  211.     if %HAVE_MYSQLD%==1 net stop mysqld
  212.     if %HAVE_MYSQLD%==0 @echo ... did not run
  213. @echo Service: sshd
  214.     sc query sshd | find "RUNNING" >nul
  215.     if not errorlevel 1 set HAVE_SSHD=1
  216.     if %HAVE_SSHD%==1 @echo ... stopping
  217.     if %HAVE_SSHD%==1 net stop sshd
  218.     if %HAVE_SSHD%==0 @echo ... did not run
  219. @echo Service: cygserver
  220.     sc query cygserver | find "RUNNING" >nul
  221.     if not errorlevel 1 set HAVE_CYGSERVER=1
  222.     if %HAVE_CYGSERVER%==1 @echo ... stopping
  223.     if %HAVE_CYGSERVER%==1 net stop cygserver
  224.     if %HAVE_CYGSERVER%==0 @echo ... did not run
  225. @REM ==================================================
  226. @echo CYGWIN SETUP
  227. %SETUP%.exe --no-desktop --delete-orphans
  228. @echo.
  229. @REM ==================================================
  230. @REM Restore running services
  231. @REM ==================================================
  232. if %HAVE_CYGSERVER%==1 @echo Starting cygserver
  233. if %HAVE_CYGSERVER%==1 net start cygserver
  234. if %HAVE_CYGSERVER%==0 @echo cygserver did not run
  235.  
  236. if %HAVE_SSHD%==1 @echo Starting sshd
  237. if %HAVE_SSHD%==1 net start sshd
  238. if %HAVE_SSHD%==0 @echo sshd did not run
  239.  
  240. if %HAVE_MYSQLD%==1 @echo Starting mysqld
  241. if %HAVE_MYSQLD%==1 net start mysqld
  242. if %HAVE_MYSQLD%==0 @echo mysqld did not run
  243.  
  244. set OLD_PATH=%PATH%
  245. set PATH=C:\cygwin\bin;C:\cygwin\usr\local\bin;%PATH%
  246. if %HAVE_HTTPD%==1 @echo Starting httpd
  247. if %HAVE_HTTPD%==1 "%MY_CYGWIN_PATH%\bin\bash" /usr/sbin/apachectl -k start
  248. if %HAVE_HTTPD%==0 @echo httpd did not run
  249. set PATH=%OLD_PATH%
  250.  
  251. :END
  252. @echo Done.
  253. pause
RAW Paste Data