Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @echo off
- SETLOCAL EnableDelayedExpansion
- set SERVER=http://webserver:8000/files
- set SERVERIP=webserver
- set WGET=bin\wget
- set PAEXT=bin\paext
- set UNIQ=bin\uniq
- set FINALPKGCT=0
- set INSTPKGS=0
- set IGNPKGS=0
- set CT=0
- set PKGS_TBI=
- set PKGS_IGN=
- set MISSINGLISTCT=
- set MISSINGPKGCT=
- set DOWNLOAD=
- set OFFLINE=
- set ONLINE=
- set FILESUP=
- set LOCALDBUP=
- :: ------------------------------------
- :: ----------- Main Section -----------
- :: ------------------------------------
- cls
- call :prepare
- call :checkFiles
- if !FILESUP!==FALSE call :error NoBin&&goto :end
- :paramLoop
- call :handleParam %1 PARAM
- shift
- if not "%1"=="" goto :paramLoop
- if !DOWNLOAD!==TRUE (
- if !OFFLINE!==TRUE (
- call :error DownloadOffline&&goto :end
- )
- )
- if "!DOWNLOAD!"=="" set DOWNLOAD=FALSE
- if "!OFFLINE!"=="" set OFFLINE=FALSE
- if !OFFLINE!==FALSE (
- call :checkServer
- )
- if !OFFLINE!==TRUE (
- set ONLINE=FALSE
- )
- call :loadPKGArray db\packages.list PKG TPKGS
- call :loadPKGArray db\meta.list METAPKG MPKGS
- call :checkLocalDB
- if !ONLINE!==FALSE (
- if !MISSINGPKGCT!==!TPKGS! call :error NoLocalPkgs&&goto :end
- )
- if !LOCALDBUP!==FALSE (
- if !ONLINE!==TRUE (
- call :downloadDB
- )
- if !ONLINE!==FALSE (
- if !OFFLINE!==TRUE (
- call :error NoDBNoNetworkOffline&&goto :end
- )
- if !OFFLINE!==FALSE (
- call :error NoDBNoNetwork&&goto :end
- )
- )
- )
- if !LOCALDBUP!==TRUE (
- if !ONLINE!==TRUE (
- call :downloadDB
- )
- )
- for /L %%a in (1, 1, !CT!) do (
- call :checkParam !PARAM%%a! PKG TPKGS INSTPKGS PKGS_IGN IGNPKGS METAPKG MPKGS temp\temp1.list
- )
- call :loadPKGArray temp\temp1.list IPKG IPKGS
- call :sortPKG temp\temp2.list PKG IPKG TPKGS INSTPKGS
- call :reduceReassign temp\temp2.list temp\install.list FINALPKG FINALPKGCT PKGS_TBI
- cls
- call :reportPKGS IGNPKGS FINALPKGCT PKGS_IGN PKGS_TBI
- if !FINALPKGCT!==0 call :cleanUp&&call :error NoPkgs&&goto :end
- if !ONLINE!==FALSE (
- if !MISSINGPKGCT! GTR 0 (
- echo WARNING: Some packages are missing^^! The following
- echo packages will fail to install:!MISSINGPKGSTR!
- echo.
- )
- )
- echo Press any key to continue, or press CTRL-C to exit.
- echo.
- pause>NUL
- if !DOWNLOAD!==TRUE (
- if !ONLINE!==TRUE (
- echo Downloading packages for local database.
- call :downloadPKGS FINALPKGCT FINALPKG
- call :cleanUp
- echo All packages downloaded^^!
- goto :end
- )
- if !ONLINE!==FALSE call :error NoDownload&&goto :end
- )
- if !ONLINE!==TRUE (
- call :downloadPKGS FINALPKGCT FINALPKG
- call :extractPKGS FINALPKGCT FINALPKG
- )
- if !ONLINE!==FALSE (
- call :extractPKGS FINALPKGCT FINALPKG
- )
- call :installPKGS FINALPKGCT FINALPKG
- call :cleanUp
- echo Finished^^!
- goto :end
- :end
- echo.
- echo Exiting.
- endlocal
- exit /B
- :: ----------------------------------------
- :: ----------- Function Section -----------
- :: ----------------------------------------
- ::
- :: :checkServer
- ::
- :: Procedure to check for a server connection
- ::
- :checkServer
- echo Checking for a connection to the server at: !SERVERIP!
- echo.
- ping !SERVERIP! -n 1 > nul
- if ERRORLEVEL 1 (
- echo Failed to reach the server. Going to OFFLINE mode.
- echo.
- set ONLINE=FALSE
- goto :eof
- )
- echo Server is online, using ONLINE mode.
- echo.
- set ONLINE=TRUE
- goto :eof
- ::
- :: :checkFiles
- ::
- :: Procedure to check for required files
- ::
- :checkFiles
- if not exist bin\libiconv2.dll (
- set /a MISSINGFILECT+=1
- set MISSINGFILESTR=!MISSINGFILESTR! bin\libiconv2.dll
- )
- if not exist bin\libintl3.dll (
- set /a MISSINGFILECT+=1
- set MISSINGFILESTR=!MISSINGFILESTR! bin\libintl3.dll
- )
- if not exist bin\uniq.exe (
- set /a MISSINGFILECT+=1
- set MISSINGFILESTR=!MISSINGFILESTR! bin\uniq.exe
- )
- if not exist bin\libeay32.dll (
- set /a MISSINGFILECT+=1
- set MISSINGFILESTR=!MISSINGFILESTR! bin\libeay32.dll
- )
- if not exist bin\libssl32.dll (
- set /a MISSINGFILECT+=1
- set MISSINGFILESTR=!MISSINGFILESTR! bin\libssl32.dll
- )
- if not exist bin\wget.exe (
- set /a MISSINGFILECT+=1
- set MISSINGFILESTR=!MISSINGFILESTR! bin\wget.exe
- )
- if not exist bin\PAUNRAR3.dll (
- set /a MISSINGFILECT+=1
- set MISSINGFILESTR=!MISSINGFILESTR! bin\PAUNRAR3.dll
- )
- if not exist bin\PACLIB.dll (
- set /a MISSINGFILECT+=1
- set MISSINGFILESTR=!MISSINGFILESTR! bin\PACLIB.dll
- )
- if not exist bin\paext.exe (
- set /a MISSINGFILECT+=1
- set MISSINGFILESTR=!MISSINGFILESTR! bin\paext.exe
- )
- if !MISSINGFILECT! GTR 0 (
- set FILESUP=FALSE
- ) else (
- set FILESUP=TRUE
- )
- goto :eof
- ::
- :: :checkLocalDB
- ::
- :: Procedure to check for local database
- ::
- :checkLocalDB
- if not exist db\packages.list (
- set /a MISSINGLISTCT+=1
- set MISSINGLISTSTR=!MISSINGLISTSTR! db\packages.list
- )
- if not exist db\meta.list (
- set /a MISSINGLISTCT+=1
- set MISSINGLISTSTR=!MISSINGLISTSTR! db\meta.list
- )
- for /L %%a in (1, 1, !MPKGS!) do (
- if not exist db\!METAPKG%%a!.list (
- echo Could not find db\!METAPKG%%a!.list^^!
- set /a MISSINGLISTCT+=1
- set MISSINGLISTSTR=!MISSINGLISTSTR! db\!METAPKG%%a!.list
- )
- )
- for /L %%b in (1, 1, !TPKGS!) do (
- if not exist packages\!PKG%%b!.zip (
- echo Could not find packages\!PKG%%b!.zip^^!
- set /a MISSINGPKGCT+=1
- set MISSINGPKGSTR=!MISSINGPKGSTR! !PKG%%b!
- )
- )
- if "!MISSINGLISTCT!"=="" set MISSINGLISTCT=0
- if "!MISSINGPKGCT!"=="" set MISSINGPKGCT=0
- if !MISSINGLISTCT! GTR 0 (
- set LOCALDBUP=FALSE
- )
- if !MISSINGLISTCT!==0 (
- set LOCALDBUP=TRUE
- )
- goto :eof
- ::
- ::
- ::
- ::
- ::
- :downloadDB
- rmdir db /s /q
- %WGET% %SERVER%/db/packages.list --directory-prefix="db"
- %WGET% %SERVER%/db/meta.list --directory-prefix="db"
- call :loadPKGArray db\packages.list PKG TPKGS
- call :loadPKGArray db\meta.list METAPKG MPKGS
- for /L %%a in (1, 1, !MPKGS!) do (
- %WGET% %SERVER%/db/!METAPKG%%a!.list --directory-prefix="db"
- )
- goto :eof
- ::
- :: :prepare
- ::
- :: Simple preparation procedure
- ::
- :prepare
- if exist temp\install.list del temp\install.list
- if exist temp\temp1.list del temp\temp1.list
- if exist temp\temp2.list del temp\temp2.list
- if not exist temp\NUL mkdir temp
- goto :eof
- ::
- :: :loadPKGArray
- ::
- :: Creates array from list in a file or set
- :: %1 is the file or set to be loaded
- :: %2 is the array variable to be created
- :: %3 is the count variable to be created
- ::
- :loadPKGArray
- set NUM=1
- for /f "tokens=*" %%a in (%1) do (
- set %2!NUM!=%%a
- set /a NUM+=1
- )
- set /a %3=!NUM!-1
- goto :eof
- ::
- :: :handleParam
- ::
- :: Takes the parameters and does something with them before
- :: processing them.
- :: %1 is the parameter
- :: %2 is the array variable
- ::
- :handleParam
- if "%1"=="" goto :eof
- if "%1"=="download" (
- set DOWNLOAD=TRUE
- goto :eof
- )
- if "%1"=="-offline" (
- set OFFLINE=TRUE
- goto :eof
- )
- set /a CT+=1
- set %2!CT!=%1
- goto :eof
- ::
- :: :checkParam
- ::
- :: Verifies and writes parameters passed to script to file
- :: %1 is the parameter
- :: %2 is the array variable used in loadPKGArray
- :: %3 is the count returned from loadPKGArray
- :: %4 success count variable
- :: %5 failure string variable
- :: %6 failure count variable
- :: %7 is the array variable used in loadPKGArray
- :: %8 is the count returned from loadPKGArray
- :: %9 file to write to
- ::
- :checkParam
- for /L %%b in (1, 1, !%8!) do (
- if !%7%%b!==%1 (
- call :loadPKGArray db\!%7%%b!.list %7PKG %7PKGCT
- for /L %%c in (1, 1, !%7PKGCT!) do (
- echo !%7PKG%%c!>> %9
- set /a %4+=1
- )
- goto :eof
- )
- )
- for /L %%a in (1, 1, !%3!) do (
- if !%2%%a!==%1 (
- echo !%2%%a!>> %9
- set /a %4+=1
- goto :eof
- )
- )
- set /a %6+=1
- set %5=!%5! %1
- goto :eof
- ::
- :: :sortPKG
- ::
- :: Sort packages according to order from previous array variable
- :: %1 is the file to write
- :: %2 is the basis array variable
- :: %3 is the array variable to compare
- :: %4 is the total number of values in the basis array
- :: %5 is the total number of values in the compare array
- ::
- :sortPKG
- for /L %%a in (1, 1, !%4!) do (
- for /L %%b in (1, 1, !%5!) do (
- if !%2%%a!==!%3%%b! (
- echo !%2%%a!>>%1
- )
- )
- )
- goto :eof
- ::
- :: :reduceReassign
- ::
- :: Remove duplicate packages from temp list to final list
- :: %1 is the input list file
- :: %2 is the output list file
- :: %3 is the array variable to be created
- :: %4 is the count variable to be created
- :: %5 is the output string
- ::
- :reduceReassign
- %UNIQ% %1 %2
- set NUM=1
- for /f "tokens=*" %%a in (%2) do (
- set %3!NUM!=%%a
- set /a NUM+=1
- set %5=!%5! %%a
- )
- set /a %4=!NUM!-1
- goto :eof
- ::
- :: :reportPKGS
- ::
- :: Displays a report about packages
- :: %1 is count of unrecognized packages
- :: %2 is count of packages to be installed
- :: %3 is the ignored packages string
- :: %4 is the packages to be installed string
- ::
- :reportPKGS
- echo -----------------------------------------------------
- echo -
- if !ONLINE!==TRUE echo - Using ONLINE mode, packages will be downloaded.
- if !ONLINE!==FALSE echo - Using OFFLINE mode, local packages will be used.
- echo -
- if !%1!==0 (
- echo - !%1! unrecognized packages.
- )
- if !%1!==1 (
- echo - !%1! unrecognized package:!%3!
- )
- if !%1! GTR 1 (
- echo - !%1! unrecognized packages:!%3!
- )
- if !DOWNLOAD!==TRUE (
- if !%2!==0 (
- echo - !%2! packages to be downloaded.
- )
- if !%2!==1 (
- echo - !%2! package to be downloaded:!%4!
- )
- if !%2! GTR 1 (
- echo - !%2! packages to be downloaded:!%4!
- )
- ) else if !DOWNLOAD!==FALSE (
- if !%2!==0 (
- echo - !%2! packages to be installed.
- )
- if !%2!==1 (
- echo - !%2! package to be installed:!%4!
- )
- if !%2! GTR 1 (
- echo - !%2! packages to be installed:!%4!
- )
- )
- echo -
- echo -----------------------------------------------------
- echo.
- goto :eof
- ::
- :: :downloadPKGS
- ::
- :: Downloads the packages
- :: %1 is the count of packages
- :: %2 is the array of packages to be installed
- ::
- :downloadPKGS
- rmdir packages /s /q
- echo -----------------------------------------------------
- for /L %%a in (1, 1, !%1!) do (
- echo -
- echo - Downloading !%2%%a!.zip...
- %WGET% %SERVER%/!%2%%a!.zip --directory-prefix="packages"
- echo -
- echo - Done^^!
- echo -
- echo -----------------------------------------------------
- )
- goto :eof
- ::
- :: :extractPKGS
- ::
- :: Extracts the packages
- :: %1 is the count of packages
- :: %2 is the array of packages to be installed
- ::
- :extractPKGS
- echo -----------------------------------------------------
- for /L %%a in (1, 1, !%1!) do (
- echo -
- echo - Extracting !%2%%a!.zip to packages...
- %PAEXT% -d -o+ -ptemp packages\!%2%%a!.zip
- echo -
- echo - Done^^!
- echo -
- echo -----------------------------------------------------
- )
- goto :eof
- ::
- :: :installPKGS
- ::
- :: Installs packages after download extraction per an array
- :: %1 is the count of packages
- :: %2 is the array of packages to be installed
- ::
- :installPKGS
- for /L %%a in (1, 1, !%1!) do (
- set NUM=1
- for /f "tokens=*" %%b in (temp\!%2%%a!\!%2%%a!.plug) do (
- set LINE!NUM!=%%b
- set /a NUM+=1
- )
- :: Create friendly variables
- set APP=!LINE1!
- set VER=!LINE2!
- set TYPE=!LINE3!
- :: We're using 4 instead of 3, it counts a dead line at the end.
- set /a FILES=NUM-4
- :: Show what we're going to install
- echo -
- echo - Installing package: !APP!, version !VER!
- echo - Source files are "!TYPE!" files.
- echo - !FILES! files to install.
- echo -
- set /a END=3+!FILES!
- for /L %%c in (4, 1, !END!) do (
- if "!TYPE!"=="exe" (
- echo - Running !LINE%%c!...
- temp\!%2%%a!\!LINE%%c!
- echo - Done^^!
- )
- if "!TYPE!"=="msi" (
- echo - Installing !LINE%%c! /passive /norestart...
- temp\!%2%%a!\!LINE%%c! /passive /norestart
- echo - Done^^!
- )
- if "!TYPE!"=="reg" (
- echo - Importing !LINE%%c!...
- reg import temp\!%2%%a!\!LINE%%c!
- echo - Done^^!
- )
- if "!TYPE!"=="other" (
- echo - Running !LINE%%c!...
- temp\!%2%%a!\!LINE%%c!
- echo - Done^^!
- )
- )
- echo -
- echo -----------------------------------------------------
- )
- goto :eof
- ::
- :: :cleanUp
- ::
- :: Simple cleanup procedure
- ::
- :cleanUp
- if exist temp\install.list del temp\install.list
- if exist temp\temp1.list del temp\temp1.list
- if exist temp\temp2.list del temp\temp2.list
- if exist temp\NUL rmdir temp /s /q
- goto :eof
- ::
- :: :error
- ::
- :: Handles error messages in the script
- :: %1 is the error code
- ::
- :error
- set CODE=%1
- echo.
- echo ERROR:
- if "!CODE!"=="NoBin" (
- echo Local files are not in place to continue. Repopulate the bin directory
- echo and try again.
- echo.
- echo !MISSINGFILECT! files are missing:!MISSINGFILESTR!
- )
- if "!CODE!"=="NoDBNoNetwork" (
- echo A connection to the server cannot be made and the local database is
- echo either incomplete or missing. Repopulate the db directory and try
- echo again.
- echo.
- echo At least !MISSINGLISTCT! database files are missing:!MISSINGLISTSTR!
- )
- if "!CODE!"=="NoDBNoNetworkOffline" (
- echo A connection to the server cannot be made and the local database is
- echo either incomplete or missing. Try not using the "-offline" switch to
- echo download the databasee.
- )
- if "!CODE!"=="NoDownload" (
- echo Cannot download packages without being able to contact the server^^!
- )
- if "!CODE!"=="NoPkgs" (
- echo There are no packages to install^^!
- )
- if "!CODE!"=="NoLocalPkgs" (
- echo There are no local packages for offline install^^! To download
- echo packages, use the "download" switch.
- echo.
- echo e.g. get-pkg download package1 package2
- )
- if "!CODE!"=="DownloadOffline" (
- echo You cannot use the "-download" and "-offline" switches together^^!
- )
- if "!CODE!"=="" (
- echo An unspecified error has occured, cannot continue.
- )
- goto :eof
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement