Created
January 22, 2025 09:50
-
-
Save elpatron68/0533313a3ef747a28d7c3e6ca75433a4 to your computer and use it in GitHub Desktop.
Build Beszel agent binary under Windows (amd64)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@echo off | |
cd /D "%~dp0" | |
echo This script downloads the Beszel repository and builds the Beszel agent for Windows (64 Bit only). | |
echo If not yet installed, Git and Go will be installed via Winget. | |
echo. | |
call env.cmd | |
set REFRESHENV=0 | |
where winget.exe >nul 2>&1 | |
if %errorlevel% NEQ 0 ( | |
echo Winget not found, install Winget or use a compatible OS: Win 10 Client OS or later | |
goto end | |
) else ( | |
echo Winget executable found | |
) | |
where go.exe >nul 2>&1 | |
if %errorlevel% NEQ 0 ( | |
echo Installing Go with Winget | |
winget install GoLang.Go --accept-source-agreements --accept-package-agreements >nul 2>&1 | |
set REFRESHENV=1 | |
) else ( | |
echo Go executable found | |
) | |
where git.exe >nul 2>&1 | |
if %errorlevel% NEQ 0 ( | |
echo Installing Git with Winget | |
winget install Git.Git --accept-source-agreements --accept-package-agreements >nul 2>&1 | |
set REFRESHENV=1 | |
) else ( | |
echo Git executable found | |
) | |
if %REFRESHENV% EQU 1 call .\RefreshEnv.cmd | |
echo Cloning Beszel repository | |
git clone https://github.com/henrygd/beszel.git >nul 2>&1 | |
if %errorlevel% NEQ 0 ( | |
echo Cloning the Beszel repository failed. | |
goto end | |
) | |
cd .\beszel\beszel\cmd\agent | |
echo Building agent | |
go build -ldflags "-w -s" . >nul 2>&1 | |
if %errorlevel% NEQ 0 ( | |
echo Something went wrong | |
) else ( | |
echo Build successful | |
cd /D "%~dp0" | |
copy /y .\beszel\beszel\cmd\agent\agent.exe . >nul 2>&1 | |
echo Beszel agent.exe was built and copied, you can proceed with 'install-beszel-service.cmd'. | |
) | |
:end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@echo off | |
set SERVICENAME=BeszelAgent | |
set DESTINATIONDIR=%ProgramFiles%\%SERVICENAME% | |
set AGENTEXE=%DESTINATIONDIR%\agent.exe | |
set NSSMEXE=nssm.exe | |
set GOOS=windows | |
set GOARCH=amd64 | |
set CGO_ENABLED=0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:: Code generously provided by @beatcracker: https://github.com/beatcracker/detect-batch-subshell | |
@echo off | |
setlocal EnableDelayedExpansion | |
:: Dequote path to command processor and this script path | |
set ScriptPath=%~0 | |
set CmdPath=%COMSPEC:"=% | |
:: Get command processor filename and filename with extension | |
for %%c in (!CmdPath!) do ( | |
set CmdExeName=%%~nxc | |
set CmdName=%%~nc | |
) | |
:: Get this process' PID | |
:: Adapted from: http://www.dostips.com/forum/viewtopic.php?p=22675#p22675 | |
set "uid=" | |
for /l %%i in (1 1 128) do ( | |
set /a "bit=!random!&1" | |
set "uid=!uid!!bit!" | |
) | |
for /f "tokens=2 delims==" %%i in ( | |
'wmic Process WHERE "Name='!CmdExeName!' AND CommandLine LIKE '%%!uid!%%'" GET ParentProcessID /value' | |
) do ( | |
rem Get commandline of parent | |
for /f "tokens=1,2,*" %%j in ( | |
'wmic Process WHERE "Handle='%%i'" GET CommandLine /value' | |
) do ( | |
rem Strip extra CR's from wmic output | |
rem http://www.dostips.com/forum/viewtopic.php?t=4266 | |
for /f "delims=" %%x in ("%%l") do ( | |
rem Dequote path to batch file, if any (3rd argument) | |
set ParentScriptPath=%%x | |
set ParentScriptPath=!ParentScriptPath:"=! | |
) | |
rem Get parent process path | |
for /f "tokens=2 delims==" %%y in ("%%j") do ( | |
rem Dequote parent path | |
set ParentPath=%%y | |
set ParentPath=!ParentPath:"=! | |
rem Handle different invocations: C:\Windows\system32\cmd.exe , cmd.exe , cmd | |
for %%p in (!CmdPath! !CmdExeName! !CmdName!) do ( | |
if !ParentPath!==%%p set IsCmdParent=1 | |
) | |
rem Check if we're running in cmd.exe with /c switch and this script path as argument | |
if !IsCmdParent!==1 if %%k==/c if "!ParentScriptPath!"=="%ScriptPath%" set IsExternal=1 | |
) | |
) | |
) | |
if !IsExternal!==1 ( | |
echo %~nx0 does not work when run from this process. If you're in PowerShell, please 'Import-Module $env:ChocolateyInstall\helpers\chocolateyProfile.psm1' and try again. | |
exit 1 | |
) | |
endlocal | |
:: End code from @beatcracker | |
@echo off | |
:: | |
:: RefreshEnv.cmd | |
:: | |
:: Batch file to read environment variables from registry and | |
:: set session variables to these values. | |
:: | |
:: With this batch file, there should be no need to reload command | |
:: environment every time you want environment changes to propagate | |
::echo "RefreshEnv.cmd only works from cmd.exe, please install the Chocolatey Profile to take advantage of refreshenv from PowerShell" | |
echo | set /p dummy="Refreshing environment variables from registry for cmd.exe. Please wait..." | |
goto main | |
:: Set one environment variable from registry key | |
:SetFromReg | |
"%WinDir%\System32\Reg" QUERY "%~1" /v "%~2" > "%TEMP%\_envset.tmp" 2>NUL | |
for /f "usebackq skip=2 tokens=2,*" %%A IN ("%TEMP%\_envset.tmp") do ( | |
echo/set "%~3=%%B" | |
) | |
goto :EOF | |
:: Get a list of environment variables from registry | |
:GetRegEnv | |
"%WinDir%\System32\Reg" QUERY "%~1" > "%TEMP%\_envget.tmp" | |
for /f "usebackq skip=2" %%A IN ("%TEMP%\_envget.tmp") do ( | |
if /I not "%%~A"=="Path" ( | |
call :SetFromReg "%~1" "%%~A" "%%~A" | |
) | |
) | |
goto :EOF | |
:main | |
echo/@echo off >"%TEMP%\_env.cmd" | |
:: Slowly generating final file | |
call :GetRegEnv "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" >> "%TEMP%\_env.cmd" | |
call :GetRegEnv "HKCU\Environment">>"%TEMP%\_env.cmd" >> "%TEMP%\_env.cmd" | |
:: Special handling for PATH - mix both User and System | |
call :SetFromReg "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" Path Path_HKLM >> "%TEMP%\_env.cmd" | |
call :SetFromReg "HKCU\Environment" Path Path_HKCU >> "%TEMP%\_env.cmd" | |
:: Caution: do not insert space-chars before >> redirection sign | |
echo/set "Path=%%Path_HKLM%%;%%Path_HKCU%%" >> "%TEMP%\_env.cmd" | |
:: Cleanup | |
del /f /q "%TEMP%\_envset.tmp" 2>nul | |
del /f /q "%TEMP%\_envget.tmp" 2>nul | |
:: capture user / architecture | |
SET "OriginalUserName=%USERNAME%" | |
SET "OriginalArchitecture=%PROCESSOR_ARCHITECTURE%" | |
:: Set these variables | |
call "%TEMP%\_env.cmd" | |
:: Cleanup | |
del /f /q "%TEMP%\_env.cmd" 2>nul | |
:: reset user / architecture | |
SET "USERNAME=%OriginalUserName%" | |
SET "PROCESSOR_ARCHITECTURE=%OriginalArchitecture%" | |
echo | set /p dummy="Finished." | |
echo . |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Save all three cmd files (
build_agent.cmd
,RefreshEnv.cmd
andenv.cmd
) and startbuild_agent.cmd
to install Go and Git (if not yet installed) with winget and build the Beszel agent binary.Note: Windows Server operating systems are not supported as Winget is not available for them.