[tor-commits] [Git][tpo/applications/tor-browser-build][main] Bug 40776: Create both a system-wide and a portable Privacy Browser installer

Pier Angelo Vendrame (@pierov) git at gitlab.torproject.org
Tue Feb 14 14:18:58 UTC 2023



Pier Angelo Vendrame pushed to branch main at The Tor Project / Applications / tor-browser-build


Commits:
b9a8c62b by Pier Angelo Vendrame at 2023-02-14T15:18:01+01:00
Bug 40776: Create both a system-wide and a portable Privacy Browser installer

- - - - -


3 changed files:

- projects/browser/build
- projects/browser/pe_checksum_fix.py
- projects/browser/windows-installer.nsi


Changes:

=====================================
projects/browser/build
=====================================
@@ -285,9 +285,14 @@ done
   export PATH="/var/tmp/dist/nsis/bin:$PATH"
 
   mv $rootdir/windows-installer $distdir/windows-installer
-  cat > $distdir/windows-installer/browser.nsi << 'BROWSER_NSI'
+  cat > $distdir/windows-installer/browser-portable.nsi << 'BROWSER_NSI'
 [% INCLUDE 'windows-installer.nsi' %]
 BROWSER_NSI
+  [% IF c('var/privacy-browser') -%]
+    cat > $distdir/windows-installer/browser-system.nsi << 'BROWSER_NSI'
+[% INCLUDE 'windows-installer.nsi' system_install_mode = 1 %]
+BROWSER_NSI
+  [% END -%]
   mv ${TB_STAGE_DIR} $distdir/windows-installer/"[% c('var/Project_Name') %]"
   mv $distdir/windows-installer ${TB_STAGE_DIR}
 [% END %]
@@ -357,13 +362,15 @@ cd $distdir
 [% ELSIF c("var/windows") %]
   find "$PKG_DIR" -exec [% c("touch") %] {} \;
   pushd "$PKG_DIR"
-  makensis browser.nsi
+  makensis browser-portable.nsi
   # Working around NSIS braindamage
-  mv [% c("var/projectname") %]-install.exe browser-install-tmp.exe
-  python3 $rootdir/pe_checksum_fix.py
-  mv browser-install-tmp2.exe [% c("var/projectname") %]-install.exe
-  rm browser-install-tmp.exe
-  mv [% c("var/projectname") %]-install.exe $OUTDIR/[% c("var/projectname") %]-install[% IF c("var/windows-x86_64") %]-win64[% END %]-[% c("var/torbrowser_version") %]_${PKG_LOCALE}.exe
+  python3 $rootdir/pe_checksum_fix.py browser-install.exe
+  mv browser-install.exe $OUTDIR/[% c("var/projectname") %]-install[% IF c("var/windows-x86_64") %]-win64[% END %]-[% c("var/torbrowser_version") %]_${PKG_LOCALE}.exe
+  [% IF c('var/privacy-browser') -%]
+    makensis browser-system.nsi
+    python3 $rootdir/pe_checksum_fix.py browser-install.exe
+    mv browser-install.exe $OUTDIR/[% c("var/projectname") %]-systeminstall[% IF c("var/windows-x86_64") %]-win64[% END %]-[% c("var/torbrowser_version") %]_${PKG_LOCALE}.exe
+  [% END -%]
   popd
 [% END %]
 rm -rf $distdir/${PKG_DIR}


=====================================
projects/browser/pe_checksum_fix.py
=====================================
@@ -43,14 +43,20 @@ recalculates the PE-file checksum. Details of the discussion can be found in bug
 Thanks to a cypherpunk for this workaround idea.
 """
 
-import pefile;
+import pefile
+import sys
 
-f = open('browser-install-tmp.exe', 'rb')
-exe = f.read()
-f.close()
+
+if len(sys.argv) < 2:
+    print('Usage: {} exe-name'.format(sys.argv[0]))
+    sys.exit(1)
+
+exename = sys.argv[1]
+with open(exename, 'rb') as f:
+    exe = f.read()
 remainder = len(exe) % 8
 if remainder > 0:
-    exe += bytes('\0' * (8 - remainder), 'utf-8')
+    exe += b'\0' * (8 - remainder)
 pef = pefile.PE(data=exe, fast_load=True)
 pef.OPTIONAL_HEADER.CheckSum = pef.generate_checksum()
-pef.write(filename='browser-install-tmp2.exe')
+pef.write(filename=exename)


=====================================
projects/browser/windows-installer.nsi
=====================================
@@ -5,6 +5,7 @@
 ;--------------------------------
 ;Modern UI
 
+  !include "FileFunc.nsh"
   !include "MUI2.nsh"
   !include "LogicLib.nsh"
   !include "WinVer.nsh"
@@ -12,25 +13,38 @@
 ;--------------------------------
 ;General
 
-  ; location of Tor/Base/Privacy Browser to put into installer
+  ;Location of Tor/Base/Privacy Browser to put into installer
   !define PROGRAM_SOURCE ".\[% c('var/Project_Name') %]\"
 
   Name "[% c('var/Project_Name') %]"
-  OutFile "[% c('var/projectname') %]-install.exe"
+  OutFile "browser-install.exe"
 
   ;Default installation folder
+[% IF system_install_mode -%]
+  InstallDir "$PROGRAMFILES\[% c('var/Project_Name') %]"
+[% ELSE -%]
   InstallDir "$DESKTOP\[% c('var/Project_Name') %]"
+[% END -%]
 
   ;Best (but slowest) compression
   SetCompressor /SOLID lzma
   SetCompressorDictSize 32
 
   ;Request application privileges for Windows Vista
+[% IF system_install_mode -%]
+  RequestExecutionLevel admin
+[% ELSE -%]
   RequestExecutionLevel user
+[% END -%]
 
   ;Support HiDPI displays
   ManifestDPIAware true
 
+[% IF system_install_mode -%]
+  ;Registry keys to uninstall system-wide installs
+  !define UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\[% c('var/ProjectName') %]"
+[% END -%]
+
 ;--------------------------------
 ;Interface Configuration
 
@@ -133,16 +147,49 @@
 Section "[% c('var/Project_Name') %]" SecBrowser
 
   SetOutPath "$INSTDIR"
+[% IF !system_install_mode -%]
   File /r "${PROGRAM_SOURCE}\*.*"
-  SetOutPath "$INSTDIR\Browser"
   CreateShortCut "$INSTDIR\Start [% c('var/Project_Name') %].lnk" "$INSTDIR\Browser\[% c('var/exe_name') %].exe"
+[% ELSE -%]
+  File /r "${PROGRAM_SOURCE}\Browser\*.*"
+
+  ;Enable system-wide install in the browser
+  FileOpen $0 "$INSTDIR\system-install" w
+  FileClose $0
+
+  ;Write the uninstaller
+  WriteUninstaller $INSTDIR\uninstall.exe
+
+  ;Add the uninstaller to the control panel
+  WriteRegStr HKLM "${UNINST_KEY}" "DisplayName" "[% c('var/Project_Name') %]"
+  WriteRegStr HKLM "${UNINST_KEY}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\""
+  WriteRegStr HKLM "${UNINST_KEY}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S"
+  WriteRegStr HKLM "${UNINST_KEY}" "DisplayIcon" "$\"$INSTDIR\[% c('var/exe_name') %].exe$\""
+  WriteRegDWORD HKLM "${UNINST_KEY}" "NoModify" "1"
+  WriteRegDWORD HKLM "${UNINST_KEY}" "NoRepair" "1"
+  ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
+  IntFmt $0 "0x%08X" $0
+  WriteRegDWORD HKLM "${UNINST_KEY}" "EstimatedSize" "$0"
+[% END -%]
 
 SectionEnd
 
-Function CreateShortcuts
+[% IF system_install_mode -%]
+Section "Uninstall"
+  RMDir /r "$INSTDIR"
+  DeleteRegKey HKLM "${UNINST_KEY}"
+  SetShellVarContext all
+  Delete "$SMPROGRAMS\[% c('var/Project_Name') %].lnk"
+  Delete "$DESKTOP\[% c('var/Project_Name') %].lnk"
+SectionEnd
+[% END -%]
 
-  CreateShortCut "$SMPROGRAMS\Start [% c('var/Project_Name') %].lnk" "$INSTDIR\Browser\[% c('var/exe_name') %].exe"
-  CreateShortCut "$DESKTOP\Start [% c('var/Project_Name') %].lnk" "$INSTDIR\Browser\[% c('var/exe_name') %].exe"
+Function CreateShortcuts
+[% IF system_install_mode -%]
+  SetShellVarContext all
+[% END -%]
+  CreateShortCut "$SMPROGRAMS\[% c('var/Project_Name') %].lnk" "$INSTDIR\[% IF !system_install_mode -%]Browser\[% END -%][% c('var/exe_name') %].exe"
+  CreateShortCut "$DESKTOP\[% c('var/Project_Name') %].lnk" "$INSTDIR\[% IF !system_install_mode -%]Browser\[% END -%][% c('var/exe_name') %].exe"
 
 FunctionEnd
 ;--------------------------------
@@ -181,7 +228,6 @@ ${If} ${FileExists} "$INSTDIR\*.*"
 ${EndIf}
 FunctionEnd
 
-
 Function StartBrowser
 ExecShell "open" "$INSTDIR/Start [% c('var/Project_Name') %].lnk"
 FunctionEnd



View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/b9a8c62b9a6411ab4ce3926129d471efd244f810

-- 
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/b9a8c62b9a6411ab4ce3926129d471efd244f810
You're receiving this email because of your account on gitlab.torproject.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.torproject.org/pipermail/tor-commits/attachments/20230214/b5424a9c/attachment-0001.htm>


More information about the tor-commits mailing list