mirror of
https://github.com/netdata/netdata.git
synced 2025-04-24 05:13:08 +00:00
Windows Installer (Silent mode) (#18613)
This commit is contained in:
parent
6c6b8e1292
commit
59d806e23b
3 changed files with 174 additions and 128 deletions
packaging
|
@ -1,128 +0,0 @@
|
||||||
!include "MUI2.nsh"
|
|
||||||
!include "nsDialogs.nsh"
|
|
||||||
!include "FileFunc.nsh"
|
|
||||||
|
|
||||||
Name "Netdata"
|
|
||||||
Outfile "netdata-installer.exe"
|
|
||||||
InstallDir "$PROGRAMFILES\Netdata"
|
|
||||||
RequestExecutionLevel admin
|
|
||||||
|
|
||||||
!define MUI_ICON "NetdataWhite.ico"
|
|
||||||
!define MUI_UNICON "NetdataWhite.ico"
|
|
||||||
|
|
||||||
!define ND_UININSTALL_REG "Software\Microsoft\Windows\CurrentVersion\Uninstall\Netdata"
|
|
||||||
|
|
||||||
!define MUI_ABORTWARNING
|
|
||||||
!define MUI_UNABORTWARNING
|
|
||||||
|
|
||||||
!insertmacro MUI_PAGE_WELCOME
|
|
||||||
!insertmacro MUI_PAGE_LICENSE "C:\msys64\gpl-3.0.txt"
|
|
||||||
!insertmacro MUI_PAGE_DIRECTORY
|
|
||||||
!insertmacro MUI_PAGE_INSTFILES
|
|
||||||
!insertmacro MUI_PAGE_FINISH
|
|
||||||
|
|
||||||
!insertmacro MUI_UNPAGE_CONFIRM
|
|
||||||
!insertmacro MUI_UNPAGE_INSTFILES
|
|
||||||
!insertmacro MUI_UNPAGE_FINISH
|
|
||||||
|
|
||||||
!insertmacro MUI_LANGUAGE "English"
|
|
||||||
|
|
||||||
Function .onInit
|
|
||||||
nsExec::ExecToLog '$SYSDIR\sc.exe stop Netdata'
|
|
||||||
pop $0
|
|
||||||
${If} $0 == 0
|
|
||||||
nsExec::ExecToLog '$SYSDIR\sc.exe delete Netdata'
|
|
||||||
pop $0
|
|
||||||
${EndIf}
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
Function NetdataUninstallRegistry
|
|
||||||
ClearErrors
|
|
||||||
WriteRegStr HKLM "${ND_UININSTALL_REG}" \
|
|
||||||
"DisplayName" "Netdata - Real-time system monitoring."
|
|
||||||
WriteRegStr HKLM "${ND_UININSTALL_REG}" \
|
|
||||||
"DisplayIcon" "$INSTDIR\Uninstall.exe,0"
|
|
||||||
WriteRegStr HKLM "${ND_UININSTALL_REG}" \
|
|
||||||
"UninstallString" "$INSTDIR\Uninstall.exe"
|
|
||||||
WriteRegStr HKLM "${ND_UININSTALL_REG}" \
|
|
||||||
"RegOwner" "Netdata Inc."
|
|
||||||
WriteRegStr HKLM "${ND_UININSTALL_REG}" \
|
|
||||||
"RegCompany" "Netdata Inc."
|
|
||||||
WriteRegStr HKLM "${ND_UININSTALL_REG}" \
|
|
||||||
"Publisher" "Netdata Inc."
|
|
||||||
WriteRegStr HKLM "${ND_UININSTALL_REG}" \
|
|
||||||
"HelpLink" "https://learn.netdata.cloud/"
|
|
||||||
WriteRegStr HKLM "${ND_UININSTALL_REG}" \
|
|
||||||
"URLInfoAbout" "https://www.netdata.cloud/"
|
|
||||||
WriteRegStr HKLM "${ND_UININSTALL_REG}" \
|
|
||||||
"DisplayVersion" "${CURRVERSION}"
|
|
||||||
WriteRegStr HKLM "${ND_UININSTALL_REG}" \
|
|
||||||
"VersionMajor" "${MAJORVERSION}"
|
|
||||||
WriteRegStr HKLM "${ND_UININSTALL_REG}" \
|
|
||||||
"VersionMinor" "${MINORVERSION}"
|
|
||||||
|
|
||||||
IfErrors 0 +2
|
|
||||||
MessageBox MB_ICONEXCLAMATION|MB_OK "Unable to create an entry in the Control Panel!" IDOK end
|
|
||||||
|
|
||||||
ClearErrors
|
|
||||||
${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
|
|
||||||
IntFmt $0 "0x%08X" $0
|
|
||||||
WriteRegDWORD HKLM "${ND_UININSTALL_REG}" "EstimatedSize" "$0"
|
|
||||||
|
|
||||||
IfErrors 0 +2
|
|
||||||
MessageBox MB_ICONEXCLAMATION|MB_OK "Cannot estimate the installation size." IDOK end
|
|
||||||
end:
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
Section "Install Netdata"
|
|
||||||
SetOutPath $INSTDIR
|
|
||||||
SetCompress off
|
|
||||||
|
|
||||||
File /r "C:\msys64\opt\netdata\*.*"
|
|
||||||
|
|
||||||
ClearErrors
|
|
||||||
nsExec::ExecToLog '$SYSDIR\sc.exe create Netdata binPath= "$INSTDIR\usr\bin\netdata.exe" start= delayed-auto'
|
|
||||||
pop $0
|
|
||||||
${If} $0 != 0
|
|
||||||
DetailPrint "Warning: Failed to create Netdata service."
|
|
||||||
${EndIf}
|
|
||||||
|
|
||||||
ClearErrors
|
|
||||||
nsExec::ExecToLog '$SYSDIR\sc.exe description Netdata "Real-time system monitoring service"'
|
|
||||||
pop $0
|
|
||||||
${If} $0 != 0
|
|
||||||
DetailPrint "Warning: Failed to add Netdata service description."
|
|
||||||
${EndIf}
|
|
||||||
|
|
||||||
ClearErrors
|
|
||||||
nsExec::ExecToLog '$SYSDIR\sc.exe start Netdata'
|
|
||||||
pop $0
|
|
||||||
${If} $0 != 0
|
|
||||||
DetailPrint "Warning: Failed to start Netdata service."
|
|
||||||
${EndIf}
|
|
||||||
|
|
||||||
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
|
||||||
|
|
||||||
Call NetdataUninstallRegistry
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
Section "Uninstall"
|
|
||||||
ClearErrors
|
|
||||||
nsExec::ExecToLog '$SYSDIR\sc.exe stop Netdata'
|
|
||||||
pop $0
|
|
||||||
${If} $0 != 0
|
|
||||||
DetailPrint "Warning: Failed to stop Netdata service."
|
|
||||||
${EndIf}
|
|
||||||
|
|
||||||
ClearErrors
|
|
||||||
nsExec::ExecToLog '$SYSDIR\sc.exe delete Netdata'
|
|
||||||
pop $0
|
|
||||||
${If} $0 != 0
|
|
||||||
DetailPrint "Warning: Failed to delete Netdata service."
|
|
||||||
${EndIf}
|
|
||||||
|
|
||||||
RMDir /r "$INSTDIR"
|
|
||||||
|
|
||||||
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Netdata"
|
|
||||||
SectionEnd
|
|
||||||
|
|
50
packaging/windows/WINDOWS_INSTALLER.md
Normal file
50
packaging/windows/WINDOWS_INSTALLER.md
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
# Netdata Windows Installer
|
||||||
|
|
||||||
|
Netdata offers a convenient Windows installer for easy setup. This executable provides two distinct installation modes, outlined below.
|
||||||
|
|
||||||
|
## Graphical User Interface (GUI)
|
||||||
|
|
||||||
|
Double-clicking the installer initiates the setup process. Since Netdata adds a service to your system, you'll need to provide administrator privileges.
|
||||||
|
The installer will then guide you through these steps:
|
||||||
|
|
||||||
|
1. **Welcome**: This screen provides a summary of the actions the installer will perform.
|
||||||
|
2. **License Agreements**:
|
||||||
|
- [Netdata Cloud UI License](/src/web/gui/v2/LICENSE.md): Review and accept the license terms to proceed.
|
||||||
|
- [GPLv3 License](/LICENSE): Read the GNU General Public License v3, which governs the Netdata software.
|
||||||
|
3. **Destination**: Choose the installation directory. By default, Netdata installs in `C:\Program Files\Netdata`.
|
||||||
|
4. **Installation**: The installer will copy the necessary files to the chosen directory.
|
||||||
|
5. **Claiming**: [Connecting](/src/claim/README.md) your Netdata Agent to your Netdata Cloud Space. Here's what you can configure:
|
||||||
|
- **Token**: The claiming token for your Netdata Cloud Space.
|
||||||
|
- **Rooms**: Specify the Room IDs where you want your node to appear (comma-separated list).
|
||||||
|
- **Proxy**: Enter the address of a proxy server if required for communication with Netdata Cloud.
|
||||||
|
- **Insecure connection**: By default, Netdata verifies the server's certificate. Enabling this option bypasses verification (use only if necessary).
|
||||||
|
- **Open Terminal**: Select this option to launch the `MSYS2` terminal after installation completes.
|
||||||
|
6. **Finish**: The installation process is complete!
|
||||||
|
|
||||||
|
## Silent Mode
|
||||||
|
|
||||||
|
This section provides instructions for installing Netdata in silent mode, which is ideal for automated deployments.
|
||||||
|
Silent mode skips displaying license agreements, but requires explicitly accepting them using the `/A` option.
|
||||||
|
|
||||||
|
**Available Options**:
|
||||||
|
|
||||||
|
| Option | Description |
|
||||||
|
|-----------|--------------------------------------------------------------------------------------------------|
|
||||||
|
| `/S` | Enables silent mode installation. |
|
||||||
|
| `/A` | Accepts all Netdata licenses. This option is mandatory for silent installations. |
|
||||||
|
| `/D` | Specifies the desired installation directory (defaults to `C:\Program Files\Netdata`). |
|
||||||
|
| `/T` | Opens the `MSYS2` terminal after installation. |
|
||||||
|
| `/I` | Forces insecure connections, bypassing hostname verification (use only if absolutely necessary). |
|
||||||
|
| `/TOKEN=` | Sets the claiming token for your Netdata Cloud Space. |
|
||||||
|
| `/ROOMS=` | Comma-separated list of Room IDs where you want your node to appear. |
|
||||||
|
| `/PROXY=` | Sets the proxy server address if your network requires one. |
|
||||||
|
|
||||||
|
**Example Usage**
|
||||||
|
|
||||||
|
Connect your Agent to your Netdata Cloud Space with token `<YOUR_TOKEN>` and room `<YOUR_ROOM>`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
netdata-installer.exe /S /A /TOKEN=<YOUR_TOKEN> /ROOMS=<YOUR_ROOM>
|
||||||
|
```
|
||||||
|
|
||||||
|
Replace `<YOUR_TOKEN>` and `<YOUR_ROOM>` with your actual Netdata Cloud Space claim token and room ID, respectively.
|
|
@ -29,6 +29,39 @@ Page Custom NetdataConfigPage NetdataConfigLeave
|
||||||
|
|
||||||
!insertmacro MUI_LANGUAGE "English"
|
!insertmacro MUI_LANGUAGE "English"
|
||||||
|
|
||||||
|
!define INSTALLERLOCKFILEGUID "f787d5ef-5c41-4dc0-a115-a1fb654fad1c"
|
||||||
|
|
||||||
|
# https://nsis.sourceforge.io/Allow_only_one_installer_instance
|
||||||
|
!macro SingleInstanceFile
|
||||||
|
!if "${NSIS_PTR_SIZE}" > 4
|
||||||
|
!include "Util.nsh"
|
||||||
|
!else ifndef IntPtrCmp
|
||||||
|
!define IntPtrCmp IntCmp
|
||||||
|
!endif
|
||||||
|
|
||||||
|
!ifndef NSIS_PTR_SIZE & SYSTYPE_PTR
|
||||||
|
!define SYSTYPE_PTR i ; NSIS v2.x
|
||||||
|
!else
|
||||||
|
!define /ifndef SYSTYPE_PTR p ; NSIS v3.0+
|
||||||
|
!endif
|
||||||
|
|
||||||
|
!if "${NSIS_CHAR_SIZE}" < 2
|
||||||
|
Push "$TEMP\${INSTALLERLOCKFILEGUID}.lock"
|
||||||
|
!else
|
||||||
|
Push "$APPDATA\${INSTALLERLOCKFILEGUID}.lock"
|
||||||
|
!endif
|
||||||
|
|
||||||
|
System::Call 'KERNEL32::CreateFile(ts,i0x40000000,i0,${SYSTYPE_PTR}0,i4,i0x04000000,${SYSTYPE_PTR}0)${SYSTYPE_PTR}.r0'
|
||||||
|
${IntPtrCmp} $0 -1 "" launch launch
|
||||||
|
System::Call 'kernel32::AttachConsole(i -1)i.r0'
|
||||||
|
${If} $0 != 0
|
||||||
|
System::Call 'kernel32::GetStdHandle(i -11)i.r0'
|
||||||
|
FileWrite $0 "The installer is already running.$\r$\n"
|
||||||
|
${EndIf}
|
||||||
|
Quit
|
||||||
|
launch:
|
||||||
|
!macroend
|
||||||
|
|
||||||
var hStartMsys
|
var hStartMsys
|
||||||
var startMsys
|
var startMsys
|
||||||
|
|
||||||
|
@ -40,10 +73,13 @@ var hProxy
|
||||||
var proxy
|
var proxy
|
||||||
var hInsecure
|
var hInsecure
|
||||||
var insecure
|
var insecure
|
||||||
|
var accepted
|
||||||
|
|
||||||
var avoidClaim
|
var avoidClaim
|
||||||
|
|
||||||
Function .onInit
|
Function .onInit
|
||||||
|
!insertmacro SingleInstanceFile
|
||||||
|
|
||||||
nsExec::ExecToLog '$SYSDIR\sc.exe stop Netdata'
|
nsExec::ExecToLog '$SYSDIR\sc.exe stop Netdata'
|
||||||
pop $0
|
pop $0
|
||||||
${If} $0 == 0
|
${If} $0 == 0
|
||||||
|
@ -54,6 +90,59 @@ Function .onInit
|
||||||
StrCpy $startMsys ${BST_UNCHECKED}
|
StrCpy $startMsys ${BST_UNCHECKED}
|
||||||
StrCpy $insecure ${BST_UNCHECKED}
|
StrCpy $insecure ${BST_UNCHECKED}
|
||||||
StrCpy $avoidClaim ${BST_UNCHECKED}
|
StrCpy $avoidClaim ${BST_UNCHECKED}
|
||||||
|
StrCpy $accepted ${BST_UNCHECKED}
|
||||||
|
|
||||||
|
${GetParameters} $R0
|
||||||
|
${GetOptions} $R0 "/s" $0
|
||||||
|
IfErrors +2 0
|
||||||
|
SetSilent silent
|
||||||
|
ClearErrors
|
||||||
|
|
||||||
|
${GetOptions} $R0 "/t" $0
|
||||||
|
IfErrors +2 0
|
||||||
|
StrCpy $startMsys ${BST_CHECKED}
|
||||||
|
ClearErrors
|
||||||
|
|
||||||
|
${GetOptions} $R0 "/i" $0
|
||||||
|
IfErrors +2 0
|
||||||
|
StrCpy $insecure ${BST_CHECKED}
|
||||||
|
ClearErrors
|
||||||
|
|
||||||
|
${GetOptions} $R0 "/a" $0
|
||||||
|
IfErrors +2 0
|
||||||
|
StrCpy $accepted ${BST_CHECKED}
|
||||||
|
ClearErrors
|
||||||
|
|
||||||
|
${GetOptions} $R0 "/token=" $0
|
||||||
|
IfErrors +2 0
|
||||||
|
StrCpy $cloudToken $0
|
||||||
|
ClearErrors
|
||||||
|
|
||||||
|
${GetOptions} $R0 "/rooms=" $0
|
||||||
|
IfErrors +2 0
|
||||||
|
StrCpy $cloudRooms $0
|
||||||
|
ClearErrors
|
||||||
|
|
||||||
|
${GetOptions} $R0 "/proxy=" $0
|
||||||
|
IfErrors +2 0
|
||||||
|
StrCpy $proxy $0
|
||||||
|
ClearErrors
|
||||||
|
|
||||||
|
IfSilent checklicense goahead
|
||||||
|
checklicense:
|
||||||
|
${If} $accepted == ${BST_UNCHECKED}
|
||||||
|
System::Call 'kernel32::AttachConsole(i -1)i.r0'
|
||||||
|
${If} $0 != 0
|
||||||
|
System::Call 'kernel32::GetStdHandle(i -11)i.r0'
|
||||||
|
FileWrite $0 "You must accept the licenses (/A) to continue.$\r$\n"
|
||||||
|
${EndIf}
|
||||||
|
Quit
|
||||||
|
${EndIf}
|
||||||
|
goahead:
|
||||||
|
FunctionEnd
|
||||||
|
|
||||||
|
Function un.onInit
|
||||||
|
!insertmacro SingleInstanceFile
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
Function NetdataConfigPage
|
Function NetdataConfigPage
|
||||||
|
@ -199,6 +288,41 @@ Section "Install Netdata"
|
||||||
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
||||||
|
|
||||||
Call NetdataUninstallRegistry
|
Call NetdataUninstallRegistry
|
||||||
|
|
||||||
|
IfSilent runcmds goodbye
|
||||||
|
runcmds:
|
||||||
|
nsExec::ExecToLog '$SYSDIR\sc.exe start Netdata'
|
||||||
|
pop $0
|
||||||
|
|
||||||
|
System::Call 'kernel32::AttachConsole(i -1)i.r0'
|
||||||
|
${If} $0 != 0
|
||||||
|
System::Call 'kernel32::GetStdHandle(i -11)i.r0'
|
||||||
|
FileWrite $0 "Netdata installed with success.$\r$\n"
|
||||||
|
${EndIf}
|
||||||
|
${If} $startMsys == ${BST_CHECKED}
|
||||||
|
nsExec::ExecToLog '$INSTDIR\msys2.exe'
|
||||||
|
pop $0
|
||||||
|
${EndIf}
|
||||||
|
|
||||||
|
StrLen $0 $cloudToken
|
||||||
|
StrLen $1 $cloudRooms
|
||||||
|
${If} $0 == 0
|
||||||
|
${OrIf} $1 == 0
|
||||||
|
Goto goodbye
|
||||||
|
${EndIf}
|
||||||
|
|
||||||
|
${If} $0 == 135
|
||||||
|
${AndIf} $1 >= 36
|
||||||
|
nsExec::ExecToLog '$INSTDIR\usr\bin\NetdataClaim.exe /T $cloudToken /R $cloudRooms /P $proxy /I $insecure'
|
||||||
|
pop $0
|
||||||
|
${Else}
|
||||||
|
System::Call 'kernel32::AttachConsole(i -1)i.r0'
|
||||||
|
${If} $0 != 0
|
||||||
|
System::Call 'kernel32::GetStdHandle(i -11)i.r0'
|
||||||
|
FileWrite $0 "Room(s) or Token invalid.$\r$\n"
|
||||||
|
${EndIf}
|
||||||
|
${EndIf}
|
||||||
|
goodbye:
|
||||||
SectionEnd
|
SectionEnd
|
||||||
|
|
||||||
Section "Uninstall"
|
Section "Uninstall"
|
||||||
|
|
Loading…
Add table
Reference in a new issue