Skip to content
This repository has been archived by the owner on Jul 11, 2023. It is now read-only.

Make a linux build #329

Open
OtakuSenpai opened this issue May 6, 2019 · 16 comments
Open

Make a linux build #329

OtakuSenpai opened this issue May 6, 2019 · 16 comments

Comments

@OtakuSenpai
Copy link

Please make a linux build so that linux users can use your software.

@remyroy
Copy link
Owner

remyroy commented May 6, 2019

Short answer is no, it's not going to happen in the current form.

The Linux official builds are known for being difficult to run on various distributions partially because of the dependencies they need. Most Linux players already compile their own game.

I've heard people having success with using a compatibility layer like Wine or Proton to run both the launcher and the game. That could be a good alternative.

@jhagrid77 started some kind of linux launcher. That could be a good alternative as well.

Ultimately, I believe the proper linux way of doing this would be with some kind of automation with the CI server that would push the latest experimental to a Personal Package Archive (PPA) on Launchpad. This way, you could have automated updates on Ubuntu and Debian derivatives using their package manager.

@Ramblurr
Copy link

Ramblurr commented May 19, 2019

I'm willing to solve the Linux execution issues for the game, possibly by adding custom compilation and/or automating the creation of distro packages.

I actually started working on a new project, coincidentally also using python and Qt, before I realized that CDDAGL also uses PyQt (I assumed it was some windows-only tech like .NET/WPF. Then I discovered this repo and realized it was in fact PyQt based. It wouldn't make much sense to re-implement everything in a separate project just for Linux.

Would you accept PRs to make this work within CDDAGL?

(I've worked on packaging DF for Linux, as well as the LNP, so this stuff isn't new to me)

@remyroy
Copy link
Owner

remyroy commented May 20, 2019

Last time I checked, it was really hard to get the proper dependencies for the official linux build. If you can show me how to use the official linux builds and make it run properly on the top 4 linux distros (something like Ubuntu/Debian/Linux Mint, Arch, Fedora, Gentoo on a clean install), I'll consider adding and supporting a linux launcher.

@OtakuSenpai
Copy link
Author

OtakuSenpai commented May 22, 2019 via email

@Djent-
Copy link

Djent- commented May 24, 2020

Building in a Docker container would solve dependency issues and make it able to run cleanly on all Linux distributions.

@remyroy
Copy link
Owner

remyroy commented May 24, 2020

@Djent- If you want to build, test and host those docker distributions somewhere and do so consistently with every experimental releases, let me know and we'll see how to integrate those with the launcher.

@ElonSatoshi
Copy link

ElonSatoshi commented Jul 5, 2020

What about a CDDA mod manager? Something that you could just download to whatever folder you have CDDA mods and soundpacks installed in, and then you can run it and download mods and soundpacks?

Also, there are now cross-platform package managers for Linux such as Flatpak that will run on any distro that the package manager can be installed on. Maybe we could have some kind of CDDA installer for Flatpak?

@Dudecake
Copy link

Dudecake commented Jul 14, 2020

Last time I checked, it was really hard to get the proper dependencies for the official linux build. If you can show me how to use the official linux builds and make it run properly on the top 4 linux distros (something like Ubuntu/Debian/Linux Mint, Arch, Fedora, Gentoo on a clean install), I'll consider adding and supporting a linux launcher.

I have created a bash script (see below) that can install the dependencies taken from official packages of CentOS/RHEL, Debian/Ubuntu, Fedora and OpenSUSE. Would that be workable, or would you prefer something in Python?

#!/bin/bash

KIND="${1:-tiles}"

. /etc/os-release

unsupported_os() {
  os_name=${PRETTY_NAME}
  if [[ ! -z ${os_name} ]]; then
    os_name="${NAME} ${VERSION_ID}"
  fi
  echo "OS ${os_name} is not supported" >&2
}

if [[ ${KIND} = "curses" ]]; then
  case ${ID} in
  centos|rhel)
  # Adapted from https://fedora.pkgs.org/32/fedora-updates-x86_64/cataclysm-dda-0.E.2-1.fc32.x86_64.rpm.html
  if [[ ${VERSION_ID} -gt 7 ]]; then
    dnf install libc.so.6\(\)\(64bit\) libgcc_s.so.1\(\)\(64bit\) libm.so.6\(\)\(64bit\) libncursesw.so.5\(\)\(64bit\) libstdc++.so.6\(\)\(64bit\) libtinfo.so.5\(\)\(64bit\)
  else
    unsupported_os
    exit 1
  fi
  ;;
  debian|ubuntu)
  # Adapted from https://debian.pkgs.org/sid/debian-main-amd64/cataclysm-dda-curses_0.E-1-1_amd64.deb.html
  apt install libc6 libgcc-s1 libncursesw5 libstdc++6 libtinfo5
  ;;
  fedora)
  # Adapted from https://fedora.pkgs.org/32/fedora-updates-x86_64/cataclysm-dda-0.E.2-1.fc32.x86_64.rpm.html
  dnf install libc.so.6\(\)\(64bit\) libgcc_s.so.1\(\)\(64bit\) libm.so.6\(\)\(64bit\) libncursesw.so.5\(\)\(64bit\) libstdc++.so.6\(\)\(64bit\) libtinfo.so.5\(\)\(64bit\)
  ;;
  opensuse-*)
  zypper in libc.so.6\(\)\(64bit\) libgcc_s.so.1\(\)\(64bit\) libm.so.6\(\)\(64bit\) libncursesw.so.5\(\)\(64bit\) libstdc++.so.6\(\)\(64bit\) libtinfo.so.5\(\)\(64bit\)
  ;;
  *)
  unsupported_os
  exit 1
  ;;
  esac
elif [[ "${KIND}" = "tiles" ]]; then
  case ${ID} in
  arch|manjaro)
  # Adapted from https://archlinux.pkgs.org/rolling/archlinux-community-x86_64/cataclysm-dda-tiles-0.E.2-1-x86_64.pkg.tar.zst.html
  pacman -S freetype2 sdl2_image sdl2_mixer sdl2_ttf --needed
  ;;
  centos|rhel)
  # Adapted from https://fedora.pkgs.org/32/fedora-updates-x86_64/cataclysm-dda-tiles-0.E.2-1.fc32.x86_64.rpm.html
  if [[ ${VERSION_ID} -gt 7 ]]; then
    # At the time of writing SDL_image, SDL_mixer and SDL_ttf are not yet available in EPEL, this will probably get rectified in the future
    dnf install mesa-dri-drivers mesa-libGL libSDL2-2.0.so.0\(\)\(64bit\) libSDL2_image-2.0.so.0\(\)\(64bit\) libSDL2_mixer-2.0.so.0\(\)\(64bit\) libSDL2_ttf-2.0.so.0\(\)\(64bit\) libc.so.6\(\)\(64bit\) libgcc_s.so.1\(\)\(64bit\) libm.so.6\(\)\(64bit\) libpthread.so.0\(\)\(64bit\) libstdc++.so.6\(\)\(64bit\)
  else
    unsupported_os
    exit 1
  fi
  ;;
  debian|ubuntu)
  # Adapted from https://debian.pkgs.org/sid/debian-main-amd64/cataclysm-dda-sdl_0.E-1-1_amd64.deb.html
  apt install libc6 libgcc-s1 libsdl2-2.0-0 libsdl2-image-2.0-0 libsdl2-mixer-2.0-0 libsdl2-ttf-2.0-0 libstdc++6
  ;;
  fedora)
  # Adapted from https://fedora.pkgs.org/32/fedora-updates-x86_64/cataclysm-dda-tiles-0.E.2-1.fc32.x86_64.rpm.html
  dnf install mesa-dri-drivers mesa-libGL libSDL2-2.0.so.0\(\)\(64bit\) libSDL2_image-2.0.so.0\(\)\(64bit\) libSDL2_mixer-2.0.so.0\(\)\(64bit\) libSDL2_ttf-2.0.so.0\(\)\(64bit\) libc.so.6\(\)\(64bit\) libgcc_s.so.1\(\)\(64bit\) libm.so.6\(\)\(64bit\) libpthread.so.0\(\)\(64bit\) libstdc++.so.6\(\)\(64bit\)
  ;;
  opensuse-*)
  zypper in Mesa-dri libSDL2-2_0-0 libSDL2_image-2_0-0 libSDL2_mixer-2_0-0 libSDL2_ttf-2_0-0 libc.so.6\(\)\(64bit\) libgcc_s.so.1\(\)\(64bit\) libm.so.6\(\)\(64bit\) libpthread.so.0\(\)\(64bit\) libstdc++.so.6\(\)\(64bit\)
  ;;
  *)
  unsupported_os
  exit 1
  ;;
  esac
else
  echo "Usage: $0 [curses|tiles]" >&2
  exit 1
fi

@remyroy
Copy link
Owner

remyroy commented Jul 14, 2020

@Dudecake Have you tested this script with a recent version of those distributions?

@Dudecake
Copy link

I have tested the curses path on CentOS 7 and 8 (7 doesn't work), Ubuntu 20.04, Fedora 32 and OpenSUSE Leap 15.2. The tiles path is tested the same way, but with that testing method SDL naturally can't open the display. Tonight I can test this better.

@Dudecake
Copy link

@remyroy I have since tested the tiles path and made some changes so CDDA correctly starts. I've edited the script in the previous post.

@PassionateAngler
Copy link

@remyroy
I have put my hands on porting CDD-Game-Launcher to Linux. Here is my fork:
https://github.com/PassionateAngler/CDDA-Game-Launcher
It is WiP. What works now is downloading stable game and launching it, but every evening it gets better :)
Small discussion here:
https://www.reddit.com/r/cataclysmdda/comments/j6dk5d/cdda_game_launcher_remyroy_linux_port/

@remyroy
Copy link
Owner

remyroy commented Oct 7, 2020

@PassionateAngler This is awesome! Keep up the good work 💪

@rodneyrod
Copy link

@PassionateAngler Hey just tried to open this up on my system but getting an error when building with Python 3.9.

CDDA Game Launcher started: 1.4.12
Global error:
Launcher version: 1.4.12
Type: <class 'AttributeError'>
Value: 'NoneType' object has no attribute 'strip'
Traceback:
  File "/home/USER/git/CDDA-Game-Launcher/cddagl/ui/views/main.py", line 3326, in run
    build_changes = list(unique(build_changes))
  File "/home/USER/git/CDDA-Game-Launcher/cddagl/functions.py", line 35, in unique
    for x in seq:
  File "/home/USER/git/CDDA-Game-Launcher/cddagl/ui/views/main.py", line 3324, in <lambda>
    build_changes = map(lambda x: html.escape(x.text.strip(), True),

I'd have posted this on your fork but doesn't look like issues are enabled there.

@scanevaro
Copy link

Launcher is freezeing on my end. @PassionateAngler Is this a reported bug?
104960328-c939ef00-59b2-11eb-8548-1b2e740af6c6
Pop! OS.
i7
16gb
GTX 960m

@PassionateAngler
Copy link

Hi guys @scanevaro @rodneyrod thank you for feedback.
I have enabled issues on my repo.
https://github.com/PassionateAngler/CDDA-Game-Launcher/issues
Please create tickets there.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants