Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @echo off
- rem Leave empty for defaults/autodetect, or set BOTH variables (C:\cygwin64;x86_64)
- set MY_CYGWIN_PATH=
- set MY_CYGWIN_ARCH=
- 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.
- set GNUPG=C:\Program Files (x86)\GNU\GnuPG\gpg.exe
- goto :BEGIN
- REM Last change:
- rem 2015-11-19: tested on Windows Server 2008 R2
- rem 2015-11-19: iconv.dll link, typos, tested on Windows Server 2012 R2
- rem 2015-11-18: tested on Windows 7 64-bit
- rem 2015-11-18: completely rewritten
- REM Author: Vladimir Bella
- REM DISCLAIMER
- rem I wrote this software for myself, to satisfy my needs and requirements.
- rem You can freely use (and modify) it, but this is YOUR decision and YOU are responsible if this
- rem software fits to you.
- :IS_ADMIN_ELEVATED
- rem Thanks to Ben Hooper, http://stackoverflow.com/questions/4051883/batch-script-how-to-check-for-admin-rights
- set RV=0
- net session >nul 2>&1
- if not errorlevel 1 set RV=1
- goto :EOF
- :DOWNLOAD
- if not "%WGET%"=="" "%WGET%" %1 -O %2
- if "%WGET%"=="" "%CURL%" %1 -o %2
- if errorlevel 1 if exist %2 del %2
- goto :EOF
- :FIND_IN_PATH
- set RV=%~$PATH:1
- goto :EOF
- :ERR_PERMISSIONS
- @echo Please run this script with administrative/elevated permissions.
- @pause
- goto :EOF
- :ERR_CYGWIN_NOT_FOUND
- @echo Cygwin installation not found.
- @pause
- goto :EOF
- :ERR_MISSING_WGET
- @echo Neither wget nor curl found in Cygwin.
- @pause
- goto :EOF
- :ERR_NO_SETUP
- @echo %SETUP%.exe not found in script directory (%~dp0).
- @pause
- goto :EOF
- :ERR_NO_PUBRING
- @echo Missing/can't be downloaded pubring.asc.
- @pause
- goto :EOF
- :ERR_NO_SIGNATURE
- @echo Missing/can't be downloaded fresh setup signature.
- @pause
- goto :EOF
- :ERR_NO_GPG
- @echo Gpg.exe can't be found.
- @pause
- goto :EOF
- :ERR_GPG_IMPORT
- @echo Gpg: import of Cygwin key failed.
- @pause
- goto :EOF
- :ERR_SETUP_DNL_FAILED
- @echo Downloading new setup failed.
- @pause
- goto :EOF
- :ERR_NEW_SETUP_SIG
- @echo ERROR. New setup (%SETUP%.exe) signature verification FAILED.
- @pause
- goto :EOF
- :BEGIN
- setlocal enableextensions enabledelayedexpansion
- @REM ==================================================
- @REM Check and set environment
- @REM ==================================================
- @echo Checking for administrative/elevated permissions...
- call :IS_ADMIN_ELEVATED
- if %RV%==0 goto :ERR_PERMISSIONS
- @echo Ok.
- @echo.
- @echo Searching for Cygwin installation to upgrade...
- if not "%MY_CYGWIN_PATH%"=="" if not "%MY_CYGWIN_ARCH%"=="" goto :VERIFY_MY_CYGWIN
- set MY_CYGWIN_PATH=C:\cygwin64
- set MY_CYGWIN_ARCH=x86_64
- if not exist "%MY_CYGWIN_PATH%\bin\cygwin*.dll" (
- set MY_CYGWIN_PATH=C:\cygwin
- set MY_CYGWIN_ARCH=x86
- )
- @set WGET=%MY_CYGWIN_PATH%\bin\wget.exe
- @set CURL=%MY_CYGWIN_PATH%\bin\curl.exe
- @set SETUP=setup-%MY_CYGWIN_ARCH%
- :VERIFY_MY_CYGWIN
- if not exist "%MY_CYGWIN_PATH%\bin\cygwin*.dll" goto :ERR_CYGWIN_NOT_FOUND
- if not exist "%WGET%" if not exist "%CURL%" goto :ERR_MISSING_WGET
- @echo Ok.
- @echo.
- @REM Next is needed, because UAC changes current directory
- cd /d "%~dp0"
- @echo Checking for GnuPG...
- if not exist "%GNUPG%" (
- call :FIND_IN_PATH gpg.exe
- set GNUPG=%RV%
- )
- if not exist "%GNUPG%" set GNUPG=gpg.exe
- if not exist "%GNUPG%" goto :ERR_NO_GPG
- @echo Ok.
- @echo.
- @REM ==================================================
- @REM Ensure current and correct setup program
- @REM ==================================================
- @echo Checking for setup in current directory...
- if not exist %SETUP%.exe goto :ERR_NO_SETUP
- @echo Ok.
- @echo.
- @echo Downloading public key and current setup signature...
- if not exist cygwin-pubring.asc call :DOWNLOAD https://cygwin.com/key/pubring.asc cygwin-pubring.asc
- call :DOWNLOAD https://cygwin.com/%SETUP%.exe.sig %SETUP%.exe.sig
- if not exist cygwin-pubring.asc goto :ERR_NO_PUBRING
- if not exist %SETUP%.exe.sig goto :ERR_NO_SIGNATURE
- @echo Ok.
- @echo.
- @echo Ensure Cygwin key is in keyring...
- "%GNUPG%" --list-keys Cygwin >nul:
- if errorlevel 1 "%GNUPG%" --import cygwin-pubring.asc
- if errorlevel 1 goto :ERR_GPG_IMPORT
- @echo Ok.
- @echo.
- @echo Check, if we have current setup...
- "%GNUPG%" --verify %SETUP%.exe.sig %SETUP%.exe
- if not errorlevel 1 (
- @echo Yes, we have.
- @echo.
- goto :HAVE_SETUP
- )
- @echo Nope. Need new setup...
- set EXT=
- @for /L %%i in (1,1,999) do (
- set E=00%%i
- set E=!E:~-3!
- if !EXT!_==_ if not exist %SETUP%.exe.!E! set EXT=!E!
- )
- rename %SETUP%.exe %SETUP%.exe.%EXT%
- call :DOWNLOAD https://cygwin.com/%SETUP%.exe %SETUP%.exe
- if not exist %SETUP%.exe (
- rem revert last rename
- rename %SETUP%.exe.%EXT% %SETUP%.exe
- goto :ERR_SETUP_DNL_FAILED
- )
- @echo New setup downloaded.
- @echo Old setup saved as %SETUP%.exe.%EXT%.
- @echo.
- @echo Check new setup signature...
- "%GNUPG%" --verify %SETUP%.exe.sig %SETUP%.exe
- if errorlevel 1 goto :ERR_NEW_SETUP_SIG
- @echo Ok.
- @echo.
- :HAVE_SETUP
- @REM ==================================================
- @REM Stop running services
- @REM ==================================================
- set HAVE_HTTPD=0
- set HAVE_MYSQLD=0
- set HAVE_SSHD=0
- set HAVE_CYGSERVER=0
- @REM ==================================================
- @echo Service: httpd
- tasklist | find "httpd.exe" >nul
- if not errorlevel 1 set HAVE_HTTPD=1
- set OLD_PATH=%PATH%
- set PATH=C:\cygwin\bin;C:\cygwin\usr\local\bin;%PATH%
- if %HAVE_HTTPD%==1 @echo ... stopping
- if %HAVE_HTTPD%==1 "%MY_CYGWIN_PATH%\bin\bash" /usr/sbin/apachectl -k stop
- if %HAVE_HTTPD%==0 @echo ... did not run
- set PATH=%OLD_PATH%
- @echo Service: mysqld
- sc query mysqld | find "RUNNING" >nul
- if not errorlevel 1 set HAVE_MYSQLD=1
- if %HAVE_MYSQLD%==1 @echo ... stopping
- if %HAVE_MYSQLD%==1 net stop mysqld
- if %HAVE_MYSQLD%==0 @echo ... did not run
- @echo Service: sshd
- sc query sshd | find "RUNNING" >nul
- if not errorlevel 1 set HAVE_SSHD=1
- if %HAVE_SSHD%==1 @echo ... stopping
- if %HAVE_SSHD%==1 net stop sshd
- if %HAVE_SSHD%==0 @echo ... did not run
- @echo Service: cygserver
- sc query cygserver | find "RUNNING" >nul
- if not errorlevel 1 set HAVE_CYGSERVER=1
- if %HAVE_CYGSERVER%==1 @echo ... stopping
- if %HAVE_CYGSERVER%==1 net stop cygserver
- if %HAVE_CYGSERVER%==0 @echo ... did not run
- @REM ==================================================
- @echo CYGWIN SETUP
- %SETUP%.exe --no-desktop --delete-orphans
- @echo.
- @REM ==================================================
- @REM Restore running services
- @REM ==================================================
- if %HAVE_CYGSERVER%==1 @echo Starting cygserver
- if %HAVE_CYGSERVER%==1 net start cygserver
- if %HAVE_CYGSERVER%==0 @echo cygserver did not run
- if %HAVE_SSHD%==1 @echo Starting sshd
- if %HAVE_SSHD%==1 net start sshd
- if %HAVE_SSHD%==0 @echo sshd did not run
- if %HAVE_MYSQLD%==1 @echo Starting mysqld
- if %HAVE_MYSQLD%==1 net start mysqld
- if %HAVE_MYSQLD%==0 @echo mysqld did not run
- set OLD_PATH=%PATH%
- set PATH=C:\cygwin\bin;C:\cygwin\usr\local\bin;%PATH%
- if %HAVE_HTTPD%==1 @echo Starting httpd
- if %HAVE_HTTPD%==1 "%MY_CYGWIN_PATH%\bin\bash" /usr/sbin/apachectl -k start
- if %HAVE_HTTPD%==0 @echo httpd did not run
- set PATH=%OLD_PATH%
- :END
- @echo Done.
- pause
RAW Paste Data