faithlife-community / logoslinuxinstaller Goto Github PK
View Code? Open in Web Editor NEWA Python application that helps install and maintain FaithLife's Logos Bible (Verbum) Software on Linux through Wine.
License: MIT License
A Python application that helps install and maintain FaithLife's Logos Bible (Verbum) Software on Linux through Wine.
License: MIT License
As part of this rewrite, we should consider us still in alpha/beta until we rewrite the install guide. This will require that the software be in a stable enough position that we won't need to update it much before release.
This was a request from the old repo.
The bash script works on ChromeOS. This issue is more like, "Verify the Python app works on ChromeOS as Bash did", and is something closer to a regression check. We also should add necessary instructions to the README. See #7.
Not sure what would be necessary for this.
If the installer is run by double clicking then once you select to install it crashes the whole desktop session.
A user reported that he received a FileNotFoundError in chat for the Logo file. We need to investigate why that is.
@n8marti has done a good job of not only making the GUI but also making its colors to reflect Logos's own.
As we near closer to a release, let us reconsider the GUI and whether or not there are ways to make it more beautiful.
This issue was opened as the current GUI's colors for an unfilled theme look like a disabled field. Can we differentiate this to make it clearer for the user?
https://github.com/ferion11/LogosLinuxInstaller/wiki
We need to update the Wiki, preferably before release. This is a good time to prune the information and provide additional FAQ-type material.
See discussion starting at here.
A means of quick testing would be to disable all the code except for the installer's short cut creation, to speed up testing.
If you download the "LogosLinuxInstaller" binary from the "Releases" page it will not be executable. The user has to either chmod +x LogosLinuxInstaller
or use the file manager context menu to make it executable.
It looks like there are only 2 possibilities:
After all alpha work is done, update the README to reflect the current state of the program.
In general, if a user is not using an AppImage, then the path to their binary is stable, i.e., /usr/bin/wine64
. If the user is using Proton though, a couple of things could move the location of that binary or require updating the path. This would require manually editing the config file, which works. But it still requires user modification. I have gotten around this on my system using Proton by creating a symlink at /home/thwright/bin/wine64
and /home/thwright/bin/wineserver
. I no longer need to modify the config, but I now have to maintain the symlink.
We could automate this by allowing the user to trigger installer.choose_install_method()
and utils.get_wine_options()
from the control panel to update the binary path.
The trouble with using the existing code is that it assumes the menu being created should display all options (i.e., binaries and appimages) because it assumes this is a first run. Conditional logic should make this easy to get around by checking the WINEBIN_CODE
config and only supplying binaries of the same code. Checking the WINEBIN_CODE
config is necessary as I have seen issues in trying to switch from an AppImage to a binary or from Proton to a system binary. Perhaps there is something else going on.
A more heavy hammer would be cleaning the wine bottle of everything pertaining to the current WINEBIN_CODE
, moving the Logos install to a backup, then rerunning the creation of the wine bottle as during a first install, then moving the Logos install from backup back into position, sort of a combination of set new binary
and backup and restore
.
Should we add such an option? How could we do it well?
While an install can be moved manually, moving the install manually results in this error:
ferion11/LogosLinuxInstaller#45
If we could automate this move for people, we could bypass the above. That issue was drafted before we had some of the nicer script updates brought in in 3.0+.
The only other option would be to have an option for "update internal symlinks to new dir", or something like that. Perhaps both are needed.
The Python program is now *BSD compatible (ferion11/LogosLinuxInstaller#150), more or less. There may still be some Linux code, but the Python app puts us in a much better location.
We need to determine what package names are for *BSD and have tests done to see if Logos can be booted on *BSD.
See developer discussion.
To get to beta, we need to add an option to reinstall winetricks in case the user deletes it. This is also necessary for something like #3.
As we code, we might add TODOs and FIXMEs along the way. Verify that none of these remain before release, or most of them are fixed, or outstanding ones are converted to git issues.
config.VAR
to config[VAR
]?Attempting to run the binary with -h|--help
reports the following error when the program hasn't been run at least once:
./dist/LogosLinuxInstaller -h
ERROR:root:Error decoding config file /home/thwright/.config/Logos_on_Linux/Logos_on_Linux.conf: Expecting value: line 1 column 1 (char 0)
Traceback (most recent call last):
File "LogosLinuxInstaller.py", line 241, in <module>
File "LogosLinuxInstaller.py", line 146, in main
switch_logging()
File "config.py", line 104, in set_config_env
logos_error(f"Error: Unable to get config at {config_file_path}")
NameError: name 'logos_error' is not defined
[11339] Failed to execute script 'LogosLinuxInstaller' due to unhandled exception!
This also applies to running the main script:
./LogosLinuxInstaller.py -h
ERROR:root:Error decoding config file /home/thwright/.config/Logos_on_Linux/Logos_on_Linux.conf: Expecting value: line 1 column 1 (char 0)
Traceback (most recent call last):
File "/home/thwright/Dev/LogosLinuxInstaller/./LogosLinuxInstaller.py", line 223, in <module>
main()
File "/home/thwright/Dev/LogosLinuxInstaller/./LogosLinuxInstaller.py", line 128, in main
config.set_config_env(config.CONFIG_FILE)
File "/home/thwright/Dev/LogosLinuxInstaller/config.py", line 104, in set_config_env
logos_error(f"Error: Unable to get config at {config_file_path}")
^^^^^^^^^^^
NameError: name 'logos_error' is not defined
Per #34, we need to separate optargs as being either runtime variable setters or actions/commands.
The Bash script did this by iterating over the optargs twice, once for setters, once for actions.
How should we best handle this?
Should the GUI app be made into one panel rather than two, by making "install" an option on the control panel?
See ferion11/LogosLinuxInstaller#199
The only thing about this is that Mac computers already have their own native releases, noted in the issue above.
2024-02-19 15:16:47 DEBUG: Comparing size of https://github.com/FaithLife-Community/wine-appimages/releases/download/8.19-devel/wine-devel_8.19-x86_64.AppImage and /home/nate/Téléchargements/wine-devel_8.19-x86_64.AppImage.
2024-02-19 15:16:47 DEBUG: Getting headers from https://github.com/FaithLife-Community/wine-appimages/releases/download/8.19-devel/wine-devel_8.19-x86_64.AppImage.
2024-02-19 15:16:47 DEBUG: Starting new HTTPS connection (1): github.com:443
2024-02-19 15:17:01 ERROR: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
2024-02-19 15:17:01 DEBUG: Getting headers from https://github.com/FaithLife-Community/wine-appimages/releases/download/8.19-devel/wine-devel_8.19-x86_64.AppImage.
2024-02-19 15:17:01 DEBUG: Starting new HTTPS connection (1): github.com:443
2024-02-19 15:17:14 ERROR: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
2024-02-19 15:17:14 DEBUG: Getting headers from https://github.com/FaithLife-Community/wine-appimages/releases/download/8.19-devel/wine-devel_8.19-x86_64.AppImage.
2024-02-19 15:17:14 DEBUG: Starting new HTTPS connection (1): github.com:443
2024-02-19 15:17:27 ERROR: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
2024-02-19 15:17:27 DEBUG: url_size = None B; file_size = 929280344 B
2024-02-19 15:17:27 INFO: /home/nate/Téléchargements/wine-devel_8.19-x86_64.AppImage is the wrong size.
2024-02-19 15:17:27 INFO: Incomplete file: /home/nate/Téléchargements/wine-devel_8.19-x86_64.AppImage.
2024-02-19 15:17:27 INFO: Downloading 'https://github.com/FaithLife-Community/wine-appimages/releases/download/8.19-devel/wine-devel_8.19-x86_64.AppImage' to '/home/nate/Téléchargements/wine-devel_8.19-x86_64.AppImage'
A poor connection resulted in the installer not being able to download the file header information. It then compared the None
result to the existing file size and tried to download a new copy. It should exit after the Connection aborted.
error rather than try to continue.
GUI doesn't update "Install" button to "Run" after installation. The user has to close and re-open the app to see the button changed to "Run Logos".
The solution has to do with somehow signalling the Control Panel window from the Installer window that the installation has finished.
Let's rename --reinstall-dependencies
to --install-dependencies
and also allow this optarg to be run without a Logos install, in case someone wants to install dependencies separate of the Logos install itself.
After posting a discussion and calling the community to respond in Telegram/Matrix, after being open for three weeks we have not had any response pertaining to keeping Logos 9 support.
I suggest that we remove Logos 9 support. We can keep most of the infrastructure we have in place should a Logos 11 be forthcoming and we need to manage both versions. This would obviate the need to have a version selection menu/dropdown.
In general, I am in favor of supporting only the latest release of Logos, given that it is proprietary software. Of course #22 is an exception to this rule.
Hello
I tried to install Logos with the older Skript from the old repo which failed completely. The Logos installer says windows needs to be updated. I then tried tmanuall ylink the prodon dir but it then only found win64 and not winserver.
So i tried now the alpha:
To thet the python script working i aditianlly needed next to install the requirements.txt:
I then tried to Install using proton by also passing the custom path (On my machine i installed steam via the app store provided by Linux mint and htere the steamapps and also Proton Folder seems to be different than the default one). This failed with following error:
./LogosLinuxInstaller.py --custom-binary-path /home/joshua/.steam/debian-installation/steamapps/common/Proton\ 8.0/dist/bin
Installer log file: /home/joshua/.local/state/Logos_on_Linux/install.log
Logos Linux Installer, 4.0.0-alpha.1 by Ferion11, John Goodman, T. H. Wright, N. Marti.
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut… Fertig
Statusinformationen werden eingelesen… Fertig
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Downloading release list for Logos 10...
Traceback (most recent call last):
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/wine.py", line 128, in wineBinaryVersionCheck
version, release = version_string.split()
ValueError: not enough values to unpack (expected 2, got 1)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/./LogosLinuxInstaller.py", line 254, in <module>
main()
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/./LogosLinuxInstaller.py", line 221, in main
install()
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/installer.py", line 453, in install
prepare_install()
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/installer.py", line 461, in prepare_install
chooseInstallMethod() # We ask user for his desired install method.
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/installer.py", line 172, in chooseInstallMethod
binaries = createWineBinaryList()
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/wine.py", line 90, in createWineBinaryList
output1, output2 = wineBinaryVersionCheck(binary)
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/wine.py", line 131, in wineBinaryVersionCheck
release = get_wine_branch(TESTBINARY)
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/wine.py", line 326, in get_wine_branch
appimage, appimage_type = is_appimage(binary_obj)
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/utils.py", line 856, in is_appimage
return (elf_sig == b'ELF' and ai_sig == b'AI', int.from_bytes(v_sig))
TypeError: from_bytes() missing required argument 'byteorder' (pos 2)
This error i tried to fix manually, by adjusting the line to following:
return (elf_sig == b'ELF' and ai_sig == b'AI', int.from_bytes(v_sig, byteorder='little'))
Then i got following error (It seems not to get version correctly:
./LogosLinuxInstaller.py -p ~/.steam/debian-installation/steamapps/common/Proton*/dist/bin
Installer log file: /home/joshua/.local/state/Logos_on_Linux/install.log
Logos Linux Installer, 4.0.0-alpha.1 by Ferion11, John Goodman, T. H. Wright, N. Marti.
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut… Fertig
Statusinformationen werden eingelesen… Fertig
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Downloading release list for Logos 10...
/home/joshua/.steam/debian-installation/steamapps/common/Proton 8.0/dist/bin/wine64has binary
Traceback (most recent call last):
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/./LogosLinuxInstaller.py", line 254, in <module>
main()
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/./LogosLinuxInstaller.py", line 221, in main
install()
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/installer.py", line 453, in install
prepare_install()
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/installer.py", line 461, in prepare_install
chooseInstallMethod() # We ask user for his desired install method.
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/installer.py", line 172, in chooseInstallMethod
binaries = createWineBinaryList()
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/wine.py", line 92, in createWineBinaryList
output1, output2 = wineBinaryVersionCheck(binary)
File "/home/joshua/Dokumente/git/LogosLinuxInstaller/wine.py", line 137, in wineBinaryVersionCheck
release = release.lstrip('(').rstrip(')').lower() # remove parentheses
AttributeError: 'NoneType' object has no attribute 'lstrip'
I then tried the appImage version of the installation. THe latest v30.0 Version seems to have failed:
v29 i could install.
But i have two questions:
This is part of alpha testing. To get to beta, we need to verify the following.
get_os()
properly detects the host's operating system
apt
dnf
yum
(this should be deprecated by now)pacman
pamac
get_package_manager()
properly detects the host's package manager
apt
dnf
yum
pacman
pamac
The python rewrite reduces the number of dependencies in the application because we are now using python modules instead.
It would be great if we had our own built-in update utility for our binary. This would make it even easier for the average user.
I would think the work we do on implementing #5 would help us accomplish this same task, namely pulling updates from GitHub.
Options for ELF translation:
https://github.com/ptitSeb/box64/
https://github.com/FEX-Emu/FEX/
https://github.com/AndreRH/hangover/
qemu-user would be another option, but I think the above are better suited/targeted. Hangover would be best, but I am not sure of its box64/FEX integration at the current time, or how it would collide with our ability to choose our own wine version, and may for that reason be less than ideal.
This should also work for RISC-V.
This will require a new get_architecture()
command and storing it in the config.
Further, it will need a new package line for detecting the presence of the above solutions.
This may also require the ability to download the x86_64bit packages from the appropriate non-Arch repo.
This would be very helpful in testing and would serve a similar purpose as --skip-fonts
.
Lines 508 to 514 in cc55082
This function needs an additional test to try ldconfig
with sudo
or doas
if it fails to find the command as a regular user.
Our main ChromeOS user has reported that ChromeOS's containerization works with Logos, but it draws black bockes (i.e., compositor issues). Is this solely on ChromeOS's side? Is there anything we need to do or can do on our side?
@n8marti and I discussed this issue and we do not see a good solution. Beginning with 8.16+ (IIRC) we no longer need to use staging but can use devel. Unfortunately, our method for detecting the branch used can distinguish between staging and stable but not between devel and stable, or put another way, our current check can determine if we are using staging or if stable/devel.
What this means is that the script errors on a valid wine devel version, not presenting it as an option for install. Meaning we are effectively back to using staging.
At present, the only option would be to detect the branch based on an operating system specific check, which we have available with the get_os()
implemented in the rewrite, but this feels like overkill.
When attempting to install the latest Logos versions, the install will report that the Windows version is outdated.
We need to determine what new wine DLLs are needed. @jg00dman has been working on this one in particular. He has made some progress passed an initial hurdle, but at present he has hit a wall and said we need to pray for God's help.
ferion11/LogosLinuxInstaller#219
We no longer need the environment variable workaround in the Python script for this as we give users the option of selecting a Logos release version on install. Further, with this commit b33870d, we now filter out unusable Logos versions.
From John:
The issue has to do with the new dependency for Two system DLLs:
You can install them, but you need to install both the 32bit and the 64 bit versions for the installer to work due to an oddity in the way the installer checks for the libraries.
The problem is that's only part of the battle. Once installed you have a version of Logos which will only crash. I need to get that crash fixed before we move forward.
File Size check should deflate the url response to compute size if content-encoding: gzip
is in the headers
File size is taken from the content-length
. Since the file on the server was sent as compressed, it is smaller than the file to be checked.
The file downloads to the correct size, so maybe it gets downloaded with a temporary extension, after it completes, we check the file size of the temporary. Afterwards, remove the temporary extension before the md5 check.
Alternatively, I found this stackexchange that says to deflate and then do what you want. https://stackoverflow.com/questions/20537432/force-webserver-to-return-uncompressed-data-no-gzip
Fedora 39, GNOME Wayland
On a fresh install, the installer fails with error
2023-12-28 16:05:42 CRITICAL: Bad file size or checksum: /home/user1/Downloads/winetricks
In debug log, it shows a smaller url_size than after the size of the file downloaded:
2023-12-28 15:39:46 DEBUG: url_size = 191443 B; file_size = 904682 B
Examining the headers in firefox, github is responding with a gzip compression, so this line is returning a compressed value to be judged by the same_file size
Headers to the raw file:
HTTP/2 200
content-encoding: gzip
content-length: 191443
cache-control: max-age=300
content-security-policy: default-src 'none'; style-src 'unsafe-inline'; sandbox
content-type: text/plain; charset=utf-8
etag: W/"6ea1078523c73e321b37fc6db2781620d63401e3320f9033c20d9b6d4fcc0c48"
strict-transport-security: max-age=31536000
x-content-type-options: nosniff
x-frame-options: deny
x-xss-protection: 1; mode=block
x-github-request-id: D7C2:63A2:3A603F:47A7B1:658DEB1C
accept-ranges: bytes
date: Thu, 28 Dec 2023 22:58:02 GMT
via: 1.1 varnish
x-served-by: cache-dfw-kdfw8210092-DFW
x-cache: HIT
x-cache-hits: 1
x-timer: S1703804282.138054,VS0,VE105
vary: Authorization,Accept-Encoding,Origin
access-control-allow-origin: *
cross-origin-resource-policy: cross-origin
x-fastly-request-id: 1fb49f40c6dfdaa7a8f773e397fb219cd5dd68f6
expires: Thu, 28 Dec 2023 23:03:02 GMT
source-age: 0
X-Firefox-Spdy: h2
LogosLinuxInstaller/utils.py Line 92
content_length = self.headers.get('Content-Length')
This is part of alpha testing. To get to beta, we need to verify the following.
The script errors out complaining about Python 3.12 or highter for .rglob() flag 'case-sentitive'
Downloading release list for Logos 10... Traceback (most recent call last): File "/home/andy/code/LogosLinuxInstaller/LogosLinuxInstaller.py", line 324, in <module> main() File "/home/andy/code/LogosLinuxInstaller/LogosLinuxInstaller.py", line 320, in main run_control_panel() File "/home/andy/code/LogosLinuxInstaller/LogosLinuxInstaller.py", line 238, in run_control_panel tui_app.control_panel_app() File "/home/andy/code/LogosLinuxInstaller/tui_app.py", line 69, in control_panel_app installer.install() File "/home/andy/code/LogosLinuxInstaller/installer.py", line 497, in install prepare_install() File "/home/andy/code/LogosLinuxInstaller/installer.py", line 506, in prepare_install choose_install_method() # We ask user for his desired install method. ^^^^^^^^^^^^^^^^^^^^^^^ File "/home/andy/code/LogosLinuxInstaller/installer.py", line 132, in choose_install_method utils.find_appimage_files(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/andy/code/LogosLinuxInstaller/utils.py", line 1196, in find_appimage_files raise RuntimeError("Python 3.12 or higher is required for .rglob() flag
case-sensitive") RuntimeError: Python 3.12 or higher is required for .rglob() flag
case-sensitive
GitHub has a 60 request per hour limit per IP with its unauthenticated Rest API. This limit was reached during testing. This in general shouldn't be an issue for an average user. Should we account for this? Can we catch this easily? Do we add the ability to authenticate a user's API requests, i.e., add GitHub oauth2 support, if desired?
When LogosLinuxInstaller is run with the Tk GUI there is a blank icon in the panel. This should be fixable in the LogosLinuxInstaller.spec file.
We've had two reports of successful installations which throw an error after attempting to update the program or resources.
In order to get to beta, we need to make sure our AppImage functionality is properly working as this is how we provide the most stable base install.
We want the new application to be able to download the latest AppImage from the repo, set the AppImage to a newly downloaded exe, or update the appimage in repo to the latest in our repository.
set_appimage()
but bypasses the selection of any binary and simply updates to the latest installed if needed, sort of a quick action set_appimage().We may want to have Logos launch and automatically check to see if there is a newer (recommended, as in, in repo) AppImage available.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.