6c5ccb11f9
This refines where we extract the LLM libraries to by adding a new OLLAMA_HOME env var, that defaults to `~/.ollama` The logic was already idempotenent, so this should speed up startups after the first time a new release is deployed. It also cleans up after itself. We now build only a single ROCm version (latest major) on both windows and linux. Given the large size of ROCms tensor files, we split the dependency out. It's bundled into the installer on windows, and a separate download on windows. The linux install script is now smart and detects the presence of AMD GPUs and looks to see if rocm v6 is already present, and if not, then downloads our dependency tar file. For Linux discovery, we now use sysfs and check each GPU against what ROCm supports so we can degrade to CPU gracefully instead of having llama.cpp+rocm assert/crash on us. For Windows, we now use go's windows dynamic library loading logic to access the amdhip64.dll APIs to query the GPU information.
159 lines
5.5 KiB
Text
159 lines
5.5 KiB
Text
; Inno Setup Installer for Ollama
|
|
;
|
|
; To build the installer use the build script invoked from the top of the source tree
|
|
;
|
|
; powershell -ExecutionPolicy Bypass -File .\scripts\build_windows.ps
|
|
|
|
|
|
#define MyAppName "Ollama"
|
|
#if GetEnv("PKG_VERSION") != ""
|
|
#define MyAppVersion GetEnv("PKG_VERSION")
|
|
#else
|
|
#define MyAppVersion "0.0.0"
|
|
#endif
|
|
#define MyAppPublisher "Ollama"
|
|
#define MyAppURL "https://ollama.com/"
|
|
#define MyAppExeName "ollama app.exe"
|
|
#define MyIcon ".\assets\app.ico"
|
|
|
|
[Setup]
|
|
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
|
|
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
|
|
AppId={{44E83376-CE68-45EB-8FC1-393500EB558C}
|
|
AppName={#MyAppName}
|
|
AppVersion={#MyAppVersion}
|
|
VersionInfoVersion={#MyAppVersion}
|
|
;AppVerName={#MyAppName} {#MyAppVersion}
|
|
AppPublisher={#MyAppPublisher}
|
|
AppPublisherURL={#MyAppURL}
|
|
AppSupportURL={#MyAppURL}
|
|
AppUpdatesURL={#MyAppURL}
|
|
ArchitecturesAllowed=x64
|
|
ArchitecturesInstallIn64BitMode=x64
|
|
DefaultDirName={localappdata}\Programs\{#MyAppName}
|
|
DefaultGroupName={#MyAppName}
|
|
DisableProgramGroupPage=yes
|
|
PrivilegesRequired=lowest
|
|
OutputBaseFilename="OllamaSetup"
|
|
SetupIconFile={#MyIcon}
|
|
UninstallDisplayIcon={uninstallexe}
|
|
Compression=lzma2
|
|
SolidCompression=no
|
|
WizardStyle=modern
|
|
ChangesEnvironment=yes
|
|
OutputDir=..\dist\
|
|
|
|
; Disable logging once everything's battle tested
|
|
; Filename will be %TEMP%\Setup Log*.txt
|
|
SetupLogging=yes
|
|
CloseApplications=yes
|
|
RestartApplications=no
|
|
|
|
; https://jrsoftware.org/ishelp/index.php?topic=setup_wizardimagefile
|
|
WizardSmallImageFile=.\assets\setup.bmp
|
|
|
|
; TODO verifty actual min windows version...
|
|
; OG Win 10
|
|
MinVersion=10.0.10240
|
|
|
|
; First release that supports WinRT UI Composition for win32 apps
|
|
; MinVersion=10.0.17134
|
|
; First release with XAML Islands - possible UI path forward
|
|
; MinVersion=10.0.18362
|
|
|
|
; quiet...
|
|
DisableDirPage=yes
|
|
DisableFinishedPage=yes
|
|
DisableReadyMemo=yes
|
|
DisableReadyPage=yes
|
|
DisableStartupPrompt=yes
|
|
DisableWelcomePage=yes
|
|
|
|
; TODO - percentage can't be set less than 100, so how to make it shorter?
|
|
; WizardSizePercent=100,80
|
|
|
|
#if GetEnv("KEY_CONTAINER")
|
|
SignTool=MySignTool
|
|
SignedUninstaller=yes
|
|
#endif
|
|
|
|
SetupMutex=OllamaSetupMutex
|
|
|
|
[Languages]
|
|
Name: "english"; MessagesFile: "compiler:Default.isl"
|
|
|
|
[LangOptions]
|
|
DialogFontSize=12
|
|
|
|
[Files]
|
|
Source: ".\app.exe"; DestDir: "{app}"; DestName: "{#MyAppExeName}" ; Flags: ignoreversion 64bit
|
|
Source: "..\ollama.exe"; DestDir: "{app}"; Flags: ignoreversion 64bit
|
|
Source: "..\dist\windeps\*.dll"; DestDir: "{app}"; Flags: ignoreversion 64bit
|
|
Source: "..\dist\ollama_welcome.ps1"; DestDir: "{app}"; Flags: ignoreversion
|
|
Source: ".\assets\app.ico"; DestDir: "{app}"; Flags: ignoreversion
|
|
; Assumes v5.7, may need adjustments for v6
|
|
#if GetEnv("HIP_PATH") != ""
|
|
Source: "{#GetEnv('HIP_PATH')}\bin\hipblas.dll"; DestDir: "{app}\rocm\"; Flags: ignoreversion
|
|
Source: "{#GetEnv('HIP_PATH')}\bin\rocblas.dll"; DestDir: "{app}\rocm\"; Flags: ignoreversion
|
|
; amdhip64.dll dependency comes from the driver and must be installed already
|
|
Source: "{#GetEnv('HIP_PATH')}\bin\rocblas\library\*"; DestDir: "{app}\rocm\rocblas\library\"; Flags: ignoreversion
|
|
#endif
|
|
|
|
|
|
[Icons]
|
|
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\app.ico"
|
|
Name: "{userstartup}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\app.ico"
|
|
Name: "{userprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\app.ico"
|
|
|
|
[Run]
|
|
Filename: "{cmd}"; Parameters: "/C set PATH={app};%PATH% & ""{app}\{#MyAppExeName}"""; Flags: postinstall nowait runhidden
|
|
|
|
[UninstallRun]
|
|
; Filename: "{cmd}"; Parameters: "/C ""taskkill /im ''{#MyAppExeName}'' /f /t"; Flags: runhidden
|
|
; Filename: "{cmd}"; Parameters: "/C ""taskkill /im ollama.exe /f /t"; Flags: runhidden
|
|
Filename: "taskkill"; Parameters: "/im ""{#MyAppExeName}"" /f /t"; Flags: runhidden
|
|
Filename: "taskkill"; Parameters: "/im ""ollama.exe"" /f /t"; Flags: runhidden
|
|
; HACK! need to give the server and app enough time to exit
|
|
; TODO - convert this to a Pascal code script so it waits until they're no longer running, then completes
|
|
Filename: "{cmd}"; Parameters: "/c timeout 5"; Flags: runhidden
|
|
|
|
[UninstallDelete]
|
|
Type: filesandordirs; Name: "{%TEMP}\ollama*"
|
|
Type: filesandordirs; Name: "{%LOCALAPPDATA}\Ollama"
|
|
Type: filesandordirs; Name: "{%LOCALAPPDATA}\Programs\Ollama"
|
|
Type: filesandordirs; Name: "{%USERPROFILE}\.ollama\models"
|
|
Type: filesandordirs; Name: "{%USERPROFILE}\.ollama\history"
|
|
; NOTE: if the user has a custom OLLAMA_MODELS it will be preserved
|
|
|
|
[Messages]
|
|
WizardReady=Ollama Windows Preview
|
|
ReadyLabel1=%nLet's get you up and running with your own large language models.
|
|
SetupAppRunningError=Another Ollama installer is running.%n%nPlease cancel or finish the other installer, then click OK to continue with this install, or Cancel to exit.
|
|
|
|
|
|
;FinishedHeadingLabel=Run your first model
|
|
;FinishedLabel=%nRun this command in a PowerShell or cmd terminal.%n%n%n ollama run llama2
|
|
;ClickFinish=%n
|
|
|
|
[Registry]
|
|
Root: HKCU; Subkey: "Environment"; \
|
|
ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};{app}"; \
|
|
Check: NeedsAddPath('{app}')
|
|
|
|
[Code]
|
|
|
|
function NeedsAddPath(Param: string): boolean;
|
|
var
|
|
OrigPath: string;
|
|
begin
|
|
if not RegQueryStringValue(HKEY_CURRENT_USER,
|
|
'Environment',
|
|
'Path', OrigPath)
|
|
then begin
|
|
Result := True;
|
|
exit;
|
|
end;
|
|
{ look for the path with leading and trailing semicolon }
|
|
{ Pos() returns 0 if not found }
|
|
Result := Pos(';' + ExpandConstant(Param) + ';', ';' + OrigPath + ';') = 0;
|
|
end;
|