Giter VIP home page Giter VIP logo

logoslinuxinstaller's Introduction

GitHub All Releases Codacy Badge Automation testing Installer LogosBible LastRelease

Install Logos Bible Software on Linux

This repository contains a Python program for installing and maintaining FaithLife's Logos Bible (Verbum) Software on Linux.

This program is created and maintained by the FaithLife Community and is licensed under the MIT License.

Logos Linux Installer

The main program is a distributable executable and contains Python itself and all necessary Python packages.

When running the program, it will attempt to determine your operating system and package manager. It will then attempt to install all needed system dependencies during the install of Logos. When the install is finished, it will place two shortcuts on your computer: one will launch Logos directly; the other will launch the Control Panel.

To access the GUI version of the program, double click the executable in your file browser or on your desktop, and then follow the prompts.

The program can also be run from source and should be run from a Python virtual environment. See below.

By default the program installs Logos, but you can pass the -C|--control-panel optarg to access the Control Panel, which allows you to install Logos or do various maintenance functions on your install. In time, you should be able to use the program to restore a backup.

Usage: ./LogosLinuxInstaller.sh
Installs ${FLPRODUCT} Bible Software with Wine on Linux.

Options:
    -h   --help                 Prints this help message and exit.
    -v   --version              Prints version information and exit.
    -V   --verbose              Enable extra CLI verbosity.
    -D   --debug                Makes Wine print out additional info.
    -C   --control-panel        Open the Control Panel app.
    -c   --config               Use the Logos on Linux config file when
                                setting environment variables. Defaults to:
                                \$HOME/.config/Logos_on_Linux/Logos_on_Linux.conf
                                Optionally can accept a config file provided by
                                the user.
    -b   --custom-binary-path   Set a custom path to search for wine binaries
                                during the install.
    -F   --skip-fonts           Skips installing corefonts and tahoma.
    -s   --shortcut			    Create or update the Logos shortcut, located in
                                HOME/.local/share/applications.
    -d   --dirlink              Create a symlink to the Windows Logos directory
                                in your Logos on Linux install dir.
                                The symlink's name will be 'installation_dir'.
    -e   --edit-config          Edit the Logos on Linux config file.
    -i   --indexing             Run the Logos indexer in the
                                background.
    --remove-all-index          Removes all index and library catalog files.
    --remove-library-catalog    Removes all library catalog files.
    -l   --logs                 Turn Logos logs on or off.
    -L   --delete-install-log   Delete the installation log file.
    -R   --check-resources      Check Logos's resource usage while running.
    -b   --backup               Saves Logos data to the config's
                                backup location.
    -r   --restore              Restores Logos data from the config's
                                backup location.
    -f   --force-root           Sets LOGOS_FORCE_ROOT to true, which permits
                                the root user to run the script.
    -P   --passive              Install Logos non-interactively .
    -k   --make-skel            Make a skeleton install only.

Installation

This section is a WIP.

You can either run the program from the CLI for a CLI-only install, or you can double click the icon in your file browser or on your desktop for a GUI install. Then, follow the prompts.

Installing/running from Source

You can clone the repo and install the app from source. To do so, you will need to ensure a few prerequisites:

  1. Install Python 3.12 and Tcl/Tk
  2. Clone this repository
  3. Set up a virtual environment

Install Python 3.12 and Tcl/Tk

Your system might already include Python 3.12 built with Tcl/Tk. This will verify the installation:

$ python3 --version
Python 3.12.1
$ python3 -m tkinter # should open a basic Tk window

If your Python version is < 3.12, then you might want to install 3.12 and tcl/tk using your system's package manager or compile it from source using the following guide or the script provided in scripts/ensure-python.sh. This is because the app is built using 3.12 and might have errors if run with other versions.

# install build dependencies; e.g. for debian-based systems:
$ apt install build-essential tcl-dev tk-dev libreadline-dev
# install & build python 3.12
$ wget 'https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tar.xz'
$ tar xf Python-3.12.1.tar.xz
$ cd Python-3.12.1
Python-3.12.1$ ./configure --prefix=/opt --enable-shared
Python-3.12.1$ make
Python-3.12.1$ sudo make install
Python-3.12.1$ LD_LIBRARY_PATH=/opt/lib /opt/bin/python3.12 --version
Python 3.12.1

The script scripts/ensure-python.sh is not yet fully tested. Feedback is welcome! Both methods install python into /opt to avoid interfering with system python installations.

Clone this repository

$ git clone 'https://github.com/FaithLife-Community/LogosLinuxInstaller.git'
$ cd LogosLinuxInstaller
LogosLinuxInstaller$

Set up and use a virtual environment

Use the following guide or the provided script at scripts/ensure-venv.sh to set up a virtual environment for running and/or building locally.

LogosLinuxInstaller$ LD_LIBRARY_PATH=/opt/lib /opt/bin/python3.12 -m venv env # create a virtual env folder called "env" using python3.12's path
LogosLinuxInstaller$ echo "LD_LIBRARY_PATH=/opt/lib" >> env/bin/activate # tell python where to find libs
LogosLinuxInstaller$ echo "export LD_LIBRARY_PATH" >> env/bin/activate
LogosLinuxInstaller$ source env/bin/activate # activate the env
(env) LogosLinuxInstaller$ python --version # verify python version
Python 3.12.1
(env) LogosLinuxInstaller$ python -m tkinter # verify that tkinter test window opens
(env) LogosLinuxInstaller$ pip install -r requirements.txt # install python packages
(env) LogosLinuxInstaller$ ./LogosLinuxInstaller.py --help # run the script

Install Guide

For an install guide with pictures and video, see the wiki's Install Guide.

NOTE: You can run Logos on Linux using the Steam Proton Experimental binary, which often has the latest and greatest updates to make Logos run even smoother. The script should be able to find the binary automatically, unless your Steam install is located outside of your HOME directory.

If you want to install your distro's dependencies outside of the script, please see the following.

NOTE: The following section is WIP.

Debian and Ubuntu

Install Dependencies

sudo apt install coreutils patch lsof wget findutils sed grep gawk winbind cabextract x11-apps bc binutils

If using wine from a repo, you must install wine staging. Run:

sudo dpkg --add-architecture i386
sudo mkdir -pm755 /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key
CODENAME=$(lsb_release -a | grep Codename | awk '{print $2}')
sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/"${CODENAME}"/winehq-"${CODENAME}".sources
sudo apt update
sudo apt install --install-recommends winehq-staging

See https://wiki.winehq.org/Ubuntu for help.

If using the AppImage, run:

sudo apt install fuse3

Arch

Install Dependencies

sudo pacman -S patch lsof wget sed grep gawk cabextract samba bc

If using wine from a repo, run:

sudo pacman -S wine

Manjaro

Install Dependencies

sudo pamac install patch lsof wget sed grep gawk cabextract samba bc 

If using wine from a repo, run:

sudo pamac install wine

You may need to install pamac if you are not using Manjaro GNOME:

sudo pacman -S pamac-cli

Steamdeck

The steam deck has a locked down filesystem. There are some missing dependencies which cause irregular crashes in Logos. These can be installed following this sequence:

  1. Enter Desktop Mode
  2. Use passwd to create a password for the deck user, unless you already did this.
  3. Disable read-only mode: sudo steamos-readonly disable
  4. Initialize pacman keyring: sudo pacman-key --init
  5. Populate pacman keyring with the default Arch Linux keys: sudo pacman-key --populate archlinux
  6. Get package lists: sudo pacman -Fy
  7. Fix locale issues sudo pacman -Syu glibc
  8. then sudo locale-gen
  9. Install dependencies: sudo pacman -S samba winbind cabextract appmenu-gtk-module patch bc lib32-libjpeg-turbo

Packages you install may be overwritten by the next Steam OS update, but you can easily reinstall them if that happens.

After these steps you can go ahead and run the your install script.

RPM

Install Dependencies

sudo dnf install patch mod_auth_ntlm_winbind samba-winbind cabextract bc samba-winbind-clients

If using wine from a repo, run:

sudo dnf install winehq-staging

If using the AppImage, run:

sudo dnf install fuse3

CentOS

Install Dependencies

sudo yum install patch mod_auth_ntlm_winbind samba-winbind cabextract bc 

If using wine from a repo, run:

sudo yum install winehq-staging

If using the AppImage, run:

sudo yum install fuse3

OpenSuse

TODO

sudo zypper install …

Alpine

TODO

sudo apk add …

BSD

TODO.

doas pkg install …

ChromeOS

TODO.

logoslinuxinstaller's People

Contributors

c-reeder avatar callen44 avatar codacy-badger avatar ferion11 avatar jg00dman avatar n8marti avatar tbleher avatar thw26 avatar vskilet avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

logoslinuxinstaller's Issues

Add an option to reinstall winetricks

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.

  • optarg
  • CLI menu
  • GUI menu

Potential GUI Improvements

  • Modify CSS of installer panel so that the disabled fields are more distinct from the active fields
  • Make the installer panel's get release list run automatically to reduce clicks (?)
  • Make the installer panel's get exe list run automatically (?)

Add ARM/AARCH64 Support

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.

Arch on python version < 3.12, causing install script to error

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() flagcase-sensitive

Gzip'd Response causes Failed File Size Check

Expected Behavior

File Size check should deflate the url response to compute size if content-encoding: gzip is in the headers

Current Behavior

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.

Possible Solution

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

Steps to Reproduce

  1. fresh install
  2. download 10, use wine app image
  3. wait till it gets to wine tricks
  4. see error

Context (Environment)

Fedora 39, GNOME Wayland

Detailed Description

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')

Possible Implementation

Separate Optargs

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?

Debian Cannot Find `ldconfig`

def have_lib(library, ld_library_path):
ldconfig_cmd = ["ldconfig", "-N", "-v", ":".join(ld_library_path.split(':'))]
try:
result = subprocess.run(ldconfig_cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, check=True, text=True)
return library in result.stdout
except subprocess.CalledProcessError:
return False

This function needs an additional test to try ldconfig with sudo or doas if it fails to find the command as a regular user.

Linux Mint installation failed with Proton and v30 also fails with appimage

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:

  • sudo apt install python3-tk
  • pip3 install distro

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:
image

v29 i could install.

But i have two questions:

  • How to set scaling. It seems to small to be readable at all. Like the installation screen on screenshot above it is really small.
  • Is it possible to have a desktop shortcut?

Add an Option for Moving the Install

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.

Cannot Detect If On Devel Branch

@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.

Logos 30+ Support

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:

  • icuuc.dll (this is the ICU "common" library)
  • icuin.dll (this is the ICU "i18n" library)

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.

TUI Improvements

  • Add Curses file selector in place of curses_get_user_input() for file selections. See #99 and fc44b00
  • Create a tui_screen.TextScreen (see #99) that shows the list of required packages and show them being scanned/checked off when found, as a form of user feedback, during the dependency checking.
  • Add a status line. See #99.
    • When the TUI is running, we cannot see the CLI itself. We may want to consider making the TUI a full app, as in do not return to the CLI but keep the TUI open even on a blank screen, so as not to obscure output.
  • Add a progress bar. See #85.
  • Rework using curses.wrapper() for error handling. See 8183588.
  • Add a progress spinner/wheel to show that we are still working and not stalled. See #99.
  • Reduce number of screens by having multiple choices on one??? Probably too painful to generate nicely.
  • Implement doupdate instead of refresh

GitHub API Limits

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?

Update Install Guide

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.

  • CLI
  • TUI
  • GUI

Tk window needs an app icon

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.

Add A Self-Update Command

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.

Status Messages

Once we implement #42, we should have a status bar for both the TUI and GUI. As part of this, we should have them reuse a msg.status() function to reduce code duplication.

This is also a nice consolidation and coincides well for implementing #19.

GUI doesn't update "Install" button to "Run" after installation.

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.

Installer should exit if connection times out

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.

Test get_os and get_package_manager functionality

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
    • Debian variants, apt
    • RHEL variants, dnf
    • RHEL variants, yum (this should be deprecated by now)
    • Arch variants, pacman
    • Arch variants, pamac
  • get_package_manager() properly detects the host's package manager
    • apt
    • dnf
    • yum
    • pacman
    • pamac
  • verify the necessary packages for installation.
    • This requires a fresh ISO
    • Logos 9 necessary packages.
      • Should we update the Logos 9 install routine or just use the Bash one? See #53.
    • Debian. See #90.
    • Ubuntu. See #90.
    • Fedora
    • CentOS (or another RHEL alternative)
    • Arch. See #82.
    • Manjaro. See #95.
    • SteamOS. See #82.

The python rewrite reduces the number of dependencies in the application because we are now using python modules instead.

Stretch Goals

Update README

After all alpha work is done, update the README to reflect the current state of the program.

Clean up #TODO and #FIXME

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.

  • TODO
  • FIXME
  • Redundant config vars
  • Clean up PEP8 warnings

AppImage handling

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.

  • Convert checkAppImages(). See ferion11/LogosLinuxInstaller@bfefb3c
    • Another way to describe this would be: scan for additional AppImages (in Downloads only?) and add them to the binary list
  • Modify AppImage code to check branch version (see #32 and #38)
  • Fix set_appimage()
    • This option should only be presented if the user installed using an AppImage. See #56.
    • Update/Modify the config. See #36.
    • We should present our recommended AppImages from the FaithLife-Community repo. See #5 (comment). See #54.
    • We should also present those downloaded by the user and which are available in their Logos APPDIR_BINDIR. See #36.
  • Add update_appimage()
    • This is similar to 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().
    • This option should only be presented if the user installed using an AppImage. See #56.
    • The user should be able to click a button or run a command to update to the latest recommended AppImage. See #5 (comment).
    • This also will need the ability to check GitHub for new releases. See #5 (comment). See #54.
    • Make app use the https://github.com/FaithLife-Community/wine-appimages repo. See 1d7024a.
      • Delete AppImage releases from this repo, but only after the above is done
  • Detect if AppImage Launcher is running, and, if so, prompt to disable it and warn that a reboot is necessary to proceed. See #5 (comment). See #52.

We may want to have Logos launch and automatically check to see if there is a newer (recommended, as in, in repo) AppImage available.

Beautify the GUI

@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?

Updating Non-AppImage Wine Binaries

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?

Add ChromeOS Support

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.

Downloaded binary is not executable

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:

  1. Keep it as-is, inform users how to make it executable after downloading.
  2. Release it as a .tar.gz file, which will retain the file permissions but then require the user to extract it after download.
    References:

ChromeOS Compositor Issues

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?

Remove Logos 9 Support

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.

#44

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.

Test optargs and menu options

This is part of alpha testing. To get to beta, we need to verify the following.

  • All optargs available function as intended
  • All CLI menu options available function as intended
  • All GUI menu options available function as intended

Add *BSD Support

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.

Pre-4.0.0 Config Files Cannot Be Used and Need Migrated

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.