Merge branch 'main' into circleci

This commit is contained in:
Micah Lee 2021-11-24 12:50:39 -08:00
commit 18d3cecc52
No known key found for this signature in database
GPG key ID: 403C2657CD994F73
8 changed files with 44 additions and 57 deletions

View file

@ -152,21 +152,21 @@ Dangerzone uses PyInstaller to turn the python source code into Windows executab
Here's how to compile the PyInstaller bootloader: Here's how to compile the PyInstaller bootloader:
Download and install [Microsoft Build Tools for Visual Studio 2019](https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2019). I downloaded `vs_buildtools__719988613.1603831511.exe`. In the installer, check the box next to "C++ build tools". Click "Individual components", and under "Compilers, build tools and runtimes", check "Windows Universal CRT SDK". Then click install. When installation is done, you may have to reboot your computer. Download and install [Microsoft Build Tools for Visual Studio 2022](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022). I downloaded `vs_BuildTools.exe`. In the installer, check the box next to "Desktop development with C++". Click "Individual components", and under "Compilers, build tools and runtimes", check "Windows Universal CRT SDK". Then click install. When installation is done, you may have to reboot your computer.
Then, enable the 32-bit Visual C++ Toolset on the Command Line like this: Then, enable the 32-bit Visual C++ Toolset on the Command Line like this:
``` ```
cd "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build" cd 'C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build'
vcvars32.bat .\vcvars32.bat
``` ```
Change to a folder where you keep source code, and clone the PyInstaller git repo and checkout the `v4.3` tag: Change to a folder where you keep source code, and clone the PyInstaller git repo and checkout the `v4.7` tag:
``` ```
git clone https://github.com/pyinstaller/pyinstaller.git git clone https://github.com/pyinstaller/pyinstaller.git
cd pyinstaller cd pyinstaller
git checkout v4.3 git checkout v4.7
``` ```
The next step is to compile the bootloader. We should do this all in dangerzone's poetry shell: The next step is to compile the bootloader. We should do this all in dangerzone's poetry shell:
@ -180,7 +180,7 @@ cd ..\pyinstaller
Then, compile the bootloader: Then, compile the bootloader:
``` ```
cd bootloader cd .\bootloader\
python waf distclean all --target-arch=32bit --msvc_targets=x86 python waf distclean all --target-arch=32bit --msvc_targets=x86
cd .. cd ..
``` ```
@ -202,8 +202,7 @@ Now the next time you use PyInstaller to build dangerzone, the `.exe` file shoul
### If you want to sign binaries with Authenticode ### If you want to sign binaries with Authenticode
* You'll need a code signing certificate. I got an open source code signing certificate from [Certum](https://www.certum.eu/certum/cert,offer_en_open_source_cs.xml). You'll need a code signing certificate.
* Once you get a code signing key and certificate and covert it to a pfx file, import it into your certificate store.
## To make a .exe ## To make a .exe
@ -224,24 +223,10 @@ mklink dangerzone-container.exe dangerzone.exe
### To build the installer ### To build the installer
Note that you must have a codesigning certificate installed in order to use the `install\windows\build.bat` script, because it codesigns `dangerzone.exe` and `Dangerzone.msi`. Note that you must have a codesigning certificate installed in order to use the `install\windows\build-app.bat` script, because it codesigns `dangerzone.exe` and `Dangerzone.msi`.
Open a command prompt, cd to the dangerzone directory, and run:
``` ```
poetry run install\windows\step1-build-exe.bat poetry run .\install\windows\build-app.bat
```
Open a second command prompt _as an administratror_, cd to the dangerzone directory, and run:
```
install\windows\step2-make-symlink.bat
```
Then back in the first command prompt, run:
```
poetry run install\windows\step3-build-installer.bat
``` ```
When you're done you will have `dist\Dangerzone.msi`. When you're done you will have `dist\Dangerzone.msi`.

View file

@ -430,7 +430,9 @@ class GlobalCommon(object):
print("Installing Dangerzone container image...") print("Installing Dangerzone container image...")
p = subprocess.Popen( p = subprocess.Popen(
[self.get_container_runtime(), "load"], stdin=subprocess.PIPE [self.get_container_runtime(), "load"],
stdin=subprocess.PIPE,
startupinfo=self.get_subprocess_startupinfo(),
) )
chunk_size = 1024 chunk_size = 1024
@ -473,6 +475,7 @@ class GlobalCommon(object):
self.container_name, self.container_name,
], ],
text=True, text=True,
startupinfo=self.get_subprocess_startupinfo(),
) )
found_image_id = found_image_id.strip() found_image_id = found_image_id.strip()
@ -484,7 +487,8 @@ class GlobalCommon(object):
print(f"Deleting old dangerzone container image") print(f"Deleting old dangerzone container image")
subprocess.check_output( subprocess.check_output(
[self.get_container_runtime(), "rmi", found_image_id] [self.get_container_runtime(), "rmi", found_image_id],
startupinfo=self.get_subprocess_startupinfo(),
) )
return installed return installed

View file

@ -512,7 +512,9 @@ class ConvertThread(QtCore.QThread):
except: except:
print(f"Invalid JSON returned from container: {line}") print(f"Invalid JSON returned from container: {line}")
self.error = True self.error = True
self.update.emit(True, "Invalid JSON returned from container", 0) self.update.emit(
True, f"Invalid JSON returned from container:\n\n{line}", 0
)
return return
s = Style.BRIGHT + Fore.CYAN + f"{status['percentage']}% " s = Style.BRIGHT + Fore.CYAN + f"{status['percentage']}% "

View file

@ -0,0 +1,26 @@
REM delete old dist and build files
rmdir /s /q dist
rmdir /s /q build
REM build the exe with pyinstaller
pyinstaller install\pyinstaller\pyinstaller.spec
REM code sign dangerzone.exe
signtool.exe sign /v /d "Dangerzone" /sha1 28a4af3b6ba5ed0ef307e1b96a140e1b42450c3b /tr http://timestamp.digicert.com dist\dangerzone\dangerzone.exe
REM build the wix file
python install\windows\build-wxs.py > install\windows\Dangerzone.wxs
REM build the msi package
cd build
mkdir wix
cd wix
candle.exe ..\..\install\windows\Dangerzone.wxs
light.exe -ext WixUIExtension Dangerzone.wixobj
REM code sign dangerzone.msi
signtool.exe sign /v /d "Dangerzone" /sha1 28a4af3b6ba5ed0ef307e1b96a140e1b42450c3b /tr http://timestamp.digicert.com Dangerzone.msi
REM moving Dangerzone.msi to dist
cd ..\..
move build\wix\Dangerzone.msi dist

View file

@ -222,7 +222,6 @@ def main():
print(f'<?define ProductVersion = "{version}"?>') print(f'<?define ProductVersion = "{version}"?>')
print('<?define ProductUpgradeCode = "12b9695c-965b-4be0-bc33-21274e809576"?>') print('<?define ProductUpgradeCode = "12b9695c-965b-4be0-bc33-21274e809576"?>')
ET.indent(root_el)
ET.dump(root_el) ET.dump(root_el)

View file

@ -1,9 +0,0 @@
REM delete old dist and build files
rmdir /s /q dist
rmdir /s /q build
REM build the exe with pyinstaller
pyinstaller install\pyinstaller\pyinstaller.spec
REM code sign dangerzone.exe
signtool.exe sign /v /d "Dangerzone" /a /tr http://time.certum.pl/ dist\dangerzone\dangerzone.exe

View file

@ -1,4 +0,0 @@
REM make dangerzone-container.exe symbolic link (as administrator)
cd dist\dangerzone
mklink dangerzone-container.exe dangerzone.exe
cd ..\..

View file

@ -1,16 +0,0 @@
REM build the wix file
python install\windows\build-wxs.py > install\windows\Dangerzone.wxs
REM build the msi package
cd build
mkdir wix
cd wix
candle.exe ..\..\install\windows\Dangerzone.wxs
light.exe -ext WixUIExtension Dangerzone.wixobj
REM code sign dangerzone.msi
signtool.exe sign /v /d "Dangerzone" /a /tr http://time.certum.pl/ Dangerzone.msi
REM moving Dangerzone.msi to dist
cd ..\..
move build\wix\Dangerzone.msi dist