Giter VIP home page Giter VIP logo

dolmades-cli's Introduction

Dolmades v1.2 - "Soap-free Cleanser"

Introduction

Dolmades are intended as a mean to ease packaging, installation, usage and distribution of Windows applications in Linux environments to the utmost extent. A dolma is a containerized Windows app which runs on Linux without external dependencies.

Features

  • Usage

    • Installation: build your application using recipes and create a desktop symlink and menu entry
    • Target launcher: choose between installed binaries which one to run
    • Shares: bind selected paths from the host system to internal Windows drives
    • Import and Export: share your applications across Linux systems
  • Development:

    • Create recipes: use the existing recipes as template and derive your own for a specific Windows apps
    • Create installers: distribute your dolmades as standalone installers
    • Debug mode: examine problems, add fixes and instantly rebuild the app
    • Selectable base: choose between several Wine versions
    • GOG gaming support: generate template recipes for your personal GOG collection

The focus of the v1.x release cycle will be put on support for latest vanilla wine stable and staging, the standardization of the recipe specification used to create dolmades, proper ingredients handling, the protoypical implementation of the basic concepts and the completion of major unresolved issues.

Advantages

  • Ease of use: standalone installable on major Linux distros while requiring no special permissions
  • Compatibility: recipes create functional dolmades across various distros and system hardware
  • Mobility: designehttps://github.com/id to be executable across various distros and system hardware
  • Safety: isolated from each other and from the host system by default to prevent data loss

Implementation

The current prototypical implementation is done in form of the following Python scripts:

  • dolmades - to maintain your installed windows applications
  • cook - cooks a dolma given a recipe and its ingredients
  • box - creates a standalone installer from a cooked dolma
  • goglizer - creates template recipes for win-only GOG games; GOG account required
  • config.py - a configuration file providing important settings

Long-term Goal

Once the prototype is feature-complete I want to work on an enhanced version based on Qt and a remote repository service where user can store their dolmades, ingredients and recipes.

Requirements

  • x86 Linux (32 or 64 bit) with X.Org and XDG-compliant desktop environment
  • Python 2.7
  • tar+gzip+curl

Acknowledgements

Dolmades make use of the following underlying technologies:

  • Docker + DockerHub: for the dolmades base images
  • udocker + proot: for user-level containerization
  • wine: for running windows application in Linux
  • winetricks: for installing most common ingredients
  • lgogdownloader: for GOG support
  • makeself: for creating standalone installers

Changelog

v1.2.1

  • Possibility to define file/directory/device binds in recipes
  • Create boxed dolmas as offline standalone installable
  • Fixes for singularity, and if installed dolmas do not use it by default any longer
  • Updated docs and lots of bug fixes

v1.2 "Soap-free Cleanser"

  • Wine 4.0.2 / 4.20
  • Refactored docker base images: winehq-stable-xenial, winehq-stable-bionic, winehq-staging-bionic
  • Code cleanup / bug fixing / beautification
  • New dolmades help subcommand
  • Fix broken menu entry deinstallation
  • Make dolmades export reproducible

v1.1 "From Blue To Green"

  • Support creation of self-installable dolmades
  • Import&Export working reliably now even when user name changes
  • Support for 32 bit kernels
  • Improved recipe specification
  • Improved ingredients handling
  • Lots of refactoring / bug fixing
  • Beautification (concept, textual output, code)
  • Improved documentation
  • Updated base images to Wine 4

v1.0 "The Goglizer" - 2018-11-27

  • Initial release

Basics

Dolmades makes use of several concepts which will be briefly explained here:

  • Dolmades: Win apps which behave like containers. They can be created, configured, executed and migrated.
  • Recipes: Specification files similar to Dockerfiles which define the building process of a dolmade.
  • Ingredients: Recipes require certain ingredients which can be ISO files, installers, media files ...
  • Binds: Files contained in dolmades are isolated by default but access to files or directories on the host system can be configured using shared binds

Setup

Either download the release tar ball

curl -L -o dolmades.tgz https://github.com/dolmades/dolmades-cli/archive/v1.2.tar.gz
tar -xzf dolmades.tgz
cd dolmades-cli-1.2/

or simply clone it using git:

git clone -b "v1.2" --single-branch --depth 1 https://github.com/dolmades/dolmades-cli.git
cd dolmades-cli

Cooking a dolmade

Cooking describes the process of building a dolma from a recipe given its required ingredients. To cook a dolma use the very simple example:

./cook recipes/ASD_LifeForce.dolma

cooking asd lifeforce

This will install the winning demo of Assembly 2007 by Andromeda Software Development. At first the required ingredients will be downloaded and verified by its checksum. Next, the dolmade is created and the installation as defined in the recipe is being performed. Finally, you can run the installed dolmade:

./dolmades launch LifeForce_ASD

running asd lifeforce

The dolma can now be uninstalled again:

./dolmades del LifeForce_ASD

Now a second example: the free (as in beer) adventure game "Broken Sword":

./cook recipes/Broken_Sword.dolma --serve

This will create the dolma and add menu entries and a desktop symbol.

./cook launch Broken_Sword

screen shot 0

A launcher will appear and offer you multiple choices created by the installer. Select Windowed Mode and click "Ok":

screen shot 1

The game will be started. You should be hearing sound unless wine detects the wrong alsa device which still may happen on some hardware.

screen shot 2

A system tray icon indicates the running dolmade. On left click you can access the run log, on right click you can forcibly terminate the running dolma in case it hangs. The dolma can be removed via the corresponding menu entry.

More recipes for dolmades can be downloaded here

Generating a GOG dolma

For this to work you'll need to be registered at GOG. They offer some items for free so you can actually test goglizer without purchasing a game. If you have not done so already obtain the free item "Flight of the Amazon Queen" and verify that it is shown in your personal game collection. Retrieve a list of your games using the script goglizer:

./goglizer -u

The -u parameter tells goglizer to retrieve the dolmades runtime container and your personal game list. At first, you will be asked to authorize using your GOG account. Since two-factor-authentication is mandatory you will need to check your email and enter the code that GOG has sent to you. This needs to be done only once since the authorization credentials are being stored in your home directory for subsequent use. Finally, a list of your games is displayed:

Found dolmades repo under /home/stefan/.dolmades/repo
Pulling dolmades runtime container...
da4bf27d-3bf2-3436-916a-e1bc83098523
done
Fetching detailed info about games from GOG...
Retrieving detailed linux game list...
Getting game names (1/1) 48 / 48
Getting game info 26 / 26
Retrieving detailed linux/windows game list...
Getting game names (1/1) 48 / 48
Getting game info 48 / 48
Retrieving detailed windows game list...
Getting game names (1/1) 48 / 48
Getting game info 48 / 48
done!
Windows games available on this account which have no linux installer available
broken_sword_3__the_sleeping_dragon
...
flight_of_the_amazon_queen
...

Note, that only games are listed that have no linux installer. If you want linux games to be listed as well you need to use the -l parameter:

./goglizer -l
Found dolmades repo under /home/stefan/.dolmades/repo
Windows games available on this account (bold: no linux installer available)
akalabeth_world_of_doom
beneath_a_steel_sky
broken_sword_2__the_smoking_mirror
broken_sword_3__the_sleeping_dragon
...

Now choose a game of your liking and instruct goglizer to download the ingredients and create a corresponding recipe template using the -d parameter:

./goglizer -d=flight_of_the_amazon_queen

Now the dolma can be installed:

./cook "flight_of_the_amazon_queen:en:1.1.dolma" --serve

After successful completion you will find a clickable icon on your desktop and a menu entry :) You can skip the goglizer run completely by using the recipe under recipes/flight_of_the_amazon_queen:en:1.1.dolma.

Fixing issues

As of now for one out of two games the installation procedure fails or the installed game won't work properly. If that happens dolmades makes it easy to find and apply fixes to the generated recipe. Let's give an real example:

./goglizer -d=edna_harvey_the_breakout

We try to cook it:

./cook edna_harvey_the_breakout:en.dolma

The java installation will fail and leave a broken dolma. First, we need to figure out interactively what needs to be done:

./dolmades debug edna_harvey_the_breakout:en.dolma

> # THIS IS THE REQUIRED FIX: set windows version to WinXP
> winetricks winxp

> # rerun installer and ensure that it works now
> /install/setup_edna_and_harvey_the_breakout_2.1.0.5.exe

# test cooked dolmade, start in windowed mode
targetSelector

The previous changes are now applied permanently to the dolma but will get lost if it will be recooked. That is why we ought to update the corresponing recipe to include that fix. Edit edna_harvey_the_breakout:en.dolma and add the following section right before the RunUser command which launches the installer using wine:

RunUser
 winetricks winxp

Finally, the dolma can be cooked once more:

./cook edna_harvey_the_breakout:en.dolma

This erases the previous dolma and helps keeping recipe and cooked dolma in sync with each other.

Installable Dolmades

Once a dolma has been cooked and thoroughly tested it is possible to convert it into a standalone installer:

./box LifeForce_ASD

This will package all dependencies and create an offline installer script based on makeself which installs on various Linux systems without special privileges. The approximate size overhead produced by the Ubuntu Base Image and the wineprefix will be 800Mb.

Users who download this file should open a terminal at the location of the downloaded file and run the installer like this:

sh LifeForce_ASD.dma.sh

After accepting the license the dolma will be installed under $HOME/Dolmades-v1.1/LifeForce_ASD. It can then be launched or removed again from the created menu entry or the desktop symbol.

Note: as of now self-installable dolmades will require Python 2.7 and curl on the host system. A future release will probably get rid of this requirement.

Managing dolmades

Your dolmades are managed by dolmades

Listing

Lists the locally available dolmades:

./dolmades list

Removal

Removes the given dolma (data, menu entries and desktop symbols) and frees up the allocated space:

./dolmades del name-of-dolma

You can pass multiple dolma names or sha256 container ids.

Execution

Executes the /.dolmades/start.sh script which either runs the executable defined via SetTarget in the dolmafile or the target selector script which lets you choose between all installed targets.

./dolmades launch name-of-dolma

Debugging

It is possible to launch a bash inside the container. The installation directory will be available under /install and installed windows applications under /wineprefix. Furthermore, the home directory of the calling user is available:

./dolmades debug name-of-dolma
ls -lad $HOME /wineprefix /install

In rare cases you might want to run as fake root, e.g. to install a missing package:

./dolmades root-debug runtime
apt-get update && apt-get -y install vim

If name-of-dolma is given as argument the changes are being applied permanently. If name-of-base is given as argument a temporary dolma is being created and destroyed after the shell is being closed. name-of-base is used as template and currently can be one of the following:

  • runtime - used internally by dolmades, cook and goglizer
  • base - Ubuntu 18.04 LTS prepared for the installation of wine
  • winestable - base with wine stable added and preconfigured
  • winedevel- base with wine testing added and preconfigured

Binding

It is possible to make files or directories of the host file system accessible from within the container by defining so-called binds. These will apply just when a dolma is being launched but not when it is being debugged. Usually it is sufficient to use the predefined default binds in the recipe.

./dolmades rebind name-of-dolma
# reset the binds as defined in the recipe
# this command is performed during the cooking procedure
./dolmades binds name-of-dolma
# listing the currently configured binds
./dolmades bind name-of-dolma bind1 bind2 ...

A bind is defined using absolute path names as follows: /dolmadedir/dolmadefile:/hostdir/hostfile or /dolmadedir/:/hostdir/ Use this way to set binds just for tests as they are temporary and will not persist when a dolma is being exported and imported subsequently. Generally define the binds in your recipe where they will persist over imports/exports.

Notes

  • In wine the C and the Z drive are predefined. Utilize /wineprefix/drive_e:/my/hostdir/ to bind to drive E.
  • config.py predefines a certain set of binds which can be enabled by default. These will allocate some more driver letters starting from Y in reverse.
  • The output of dolmades export will not change depending on configured binds whereas the output of box will!
  • config.py predefines a certain set of binds which can be enabled by default
    • DOC
  • It is possible to use

Migration

It is possible to export and import a readily installed dolmade.

./dolmades export Broken_Sword Broken_Sword.dme
./dolmades import Broken_Sword

The final goal is to be able to export the dolma on some linux system running under some hardware and import it on another linux system running another hardware. Since the user name will likely change all users home directories are shared and being symlinked to root. Also, things can stop working if the hardware changes, e.g. sound stops working, but can be fixed easily by running winecfg in debug mode.

Menu entries and desktop symbols

Last but not least the dolma can be served on the desktop

./dolmades serve name-of-dolmade

This will create a clickable icon on the desktop and a sub-menu entry which will launch the corresponding dolmade. In addition a menu entry for uninstallation is created. It is possible to remove the menu entries and the desktop symbol again without uninstalling the dolmade:

./dolmades clearaway name-of-dolmade

Initialization

You should hardly need this command but better safe than sorry!

Initialization does two things:

  • if it doesn't exist yet: initializing the dolmades directory under DOLMADES_PATH
  • downloading the dolmades-runtime container with the matching version and (re)create it
./dolmades init

Advanced

Base Images

dolmades pulls its base images from DockerHub. The Dockerfiles specifying the build and the build script are to be found in the docker subdirectory.

  • winehq-stable-xenial - current wine stable version with mesa 18
  • winehq-stable-bionic - current wine stable version with mesa 19
  • winehq-staging-bionic - current wine staging version: development version + custom patches with mesa 19

As of dolmades 1.2 all immages are for 64-bit linux only. If you need a 32-bit image you can modify the Dockerfiles and easily build them yourself. These images for releases will be tagged accordingly and not being rebuilt in future. This is what all images have in common:

  • Ubuntu LTS base with wine PPA
  • Wine installation under $WINEPREFIX with 32-bit prefix
  • targetLauncher GUI script under /usr/local/bin
  • yad required by targetLauncher
  • wget curl less vim for convenience

The following environment variables are available in a dolma (these are example values):

DOLMADES_BUILDDATE=2019-11-20
DOLMADES_GECKOVERSION=2.47
DOLMADES_WINEVERSION=4.0.2
DOLMADES_WINEBRANCH=stable
DOLMADES_VERSION=1.2
DOLMADES_UBUNTUVERSION=bionic
DOLMADES_MONOVERSION=4.7.5
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
WINEARCH=win32
WINEPREFIX=/wineprefix

It is possible to create custom docker images on DockerHub as base for recipes which e.g. offer legacy wine, pba or Proton support.

Help

All available tools give help output:

./dolmades help
./dolmades help bind
./cook
./box
./goglizer -h

Configuration

Dolmades ships with preconfigured settings in config.py. These are the most important ones:

  • VERSION = "1.2.0" - this is the utilized version of dolmades. It derives the MAJOR_VERSION = 1.2 which serves as tag to be used for base docker images and it has to match the VERSION setting in the Dolmafile. The syntax used in Dolmafiles is compatible across all versions sharing a common major versions.

  • DOLMADES_PATH = HOME + '/.dolmades-MAJOR_VERSION' - this is the base path where dolmades stores its runtime, base images, dolmades, meta data, icons and GOG games lists. Note: you could change this path, but this will affect which host directories you can bind. A bind is never allowed to contain DOLMADES_PATH since it would be a security issue!

Recipe Syntax

A recipe is a specification which allows the guided build of the respective dolmade. Dolmafiles are for dolmades what Dockerfiles are for Docker except that dolmades are not necessarily built fully automated and hence require interaction if a graphical installer is being used.

The structure of a Dolmafile is:

# Arbitrary comment...
COMMAND1
  ARGUMENTS
  FURTHER ARGUMENTS
  ...
  
COMMAND2
  ARGUMENTS
  ...

Commands

DOLMA
 Name_Of_The_Dolma

This command is mandatory. It defines the name of the dolma used internally by dolmades. Whitespaces are not allowed. This name is going to be slightly converted and used in the desktop icon title.

VERSION
 1.2

This command is optional. It defines the tag of the base image pulled by the recipe, and has to match with the version reported by cook. Advised to be omitted in development, such that no version checking takes place, and the latest base image is being used.

BASE
 dolmades/winehq-stable-bionic

This command is mandatory. It defines the DockerHub repository to be used. The tag of the image used is defined by VERSION.

DESCRIPTION
 A description of the contents of this dolma

This command is optional. This description is stored inside the container and it is not being used yet.

INGREDIENT
 sha256
 filename
 description
 http://remote1
 ftp://remote2
 file://local3
 gog://remoteid
 ...

This command is repeatable and optional. For each ingredient used within the recipe one entry is needed. The ingredient will be fetched from one of the locations defined and made available inside the container under filename.

RUNUSER
 cmd1 &&
 cmd2 &&
 ...  &&
 cmdN

This command is repeatable and optional. This command will be launched as the calling user in a bash environment inside the dolmade. config.py:INST_PATH will be the target directory. You can cascade multiple commands by && and they will be executed subsequently. The first failing command, however, will terminate the execution. If all commands succeed a final wineserver --wait ensures the proper termination of all wine processes.

RUNROOT
 cmd1 &&
 cmd2 &&
 ...  &&
 cmdN

This command is repeatable and optional. This command will be launched as fake root in a bash environment inside the dolmade. config.py:INST_PATH will be the target directory. You can cascade multiple commands by && and they will be executed subsequently. The first failing command however will termine the execution. Usually RUNUSER should suffice but if you need to install some packages using apt RUNROOT will be required.

TARGET
 targetCall

This command is optional. If omitted the dolma will launch using the target launcher and allow the user to select one of all installed targets i.e. lnk-files created during the installation. Sometimes it is desirable to launch a specific executable and then this option can be used to set the exe-binary.

TARGETARGS
 targetArgs

This command is optional. Sometimes if TARGET is used it is neccessary to also specify arguments. This can be done using this command.

TARGETENV
 targetEnv

This command is optional. Sometimes it is necessary to set some environment variables for an executable. For instance it is possible to force DLL overrides or specific language settings.

TARGETPROLOGUE
 targetPrologue

This command is optional. Sometimes it is necessary to call wine using a preceding command e.g. taskset -c 0 wine in order to limit the execution to a single CPU. This can help fix race conditions.

ICON
 iconFileName

This command is optional. It specifies the icon file to be used for the desktop symbol and the target launcher with absolute path and file name. If an absolute path is ommitted the /install and /wineprefix/drive_c directories will be browsed and the first occurrence of the given icon file name will be used. If the command is omitted or the given file name cannot be found it defaults to the dolma icon.

BINDS
 DirDeviceOnHost

This command is optional. It is possible to make certain locations or devices of the host system available by keywords predefined in bind.py. These binds are kept as setting and will be preserved when a container is being boxed, exported and imported again. Currently predefined binds are:

  • DOWNLOAD
  • DOCUMENT
  • PICTURES
  • MUSIC
  • VIDEOS
  • HOME
  • COM1
  • COM2
  • LPT1
  • LPT2
  • CDROM
  • FLOPPY

FINAL NOTES

  • There has to be an empty line in between subsequent commands
  • Comments can be added as lines starting with #. Comments cannot be appended to existing command lines.
  • The order of the commands has to be obeyed until parsing has been refactored. This is planned for the next release.
  • The INGREDIENT - and maybe some other commands - are likely to undergo slight changes until the next release

FAQ

  • Which distros have been tested? See this issue
  • Will dolmades focus on a particular distribution? I develop under Linux Mint, so Ubuntu and Debian-based distros might be most compatible. I plan to keep compatibility to major distributions though.
  • Why does the syntax for the recipes change? So that it can evolve! As of now the syntax may change for every version. This does not matter since dolmades recipes will work when the VERSION of the recipe matches the dolmades run script. Exported dolmades will contain all scripts necessary to rebuild and rerun the dolmade.
  • Will the syntax for the recipes be fixed anytime? Probably. But not in the prototypical implementation phase.
  • How secure is the sandboxing? If singularity is installed it will be used after installation by default. This offers real chrooted environments. Otherwise proot is used as a fallback which is not really secure but relatively safe since it prevents accidental destruction of data on the host system.
  • Will dolmades support ever MacOSX or Windows? Maybe. But not for the foreseeable future.
  • Is it enough to lookup ingredients by SHA256? TODO

Future

Dolmades currently are a prototypical implementation done in python. Once feature-complete I want to work on an enhanced version based on Qt combining a remote repository service. The primary goal will be to create a powerful GUI to setup, maintain and run Windows software under Linux.

I figure some exciting use cases which would become addressable as well, e.g.

  • Automated deployment of windows software and complex development environments on large pools of computers
  • Cloud-based GUI applications based on Linux and VNC
  • Enhanced debugging and development for wine development
  • Fully automated dolma cooking using Xvfb / AutoHotKey
  • Functional archival of legacy software
  • Support for complex Linux software setups

Troubleshooting

  • udocker requires Python 2.7 and will hopefully receive Python 3 support soon: indigo-dc/udocker#77
  • udocker requires tar with support of -delay-directory-restore (see indigo-dc/udocker#137) which every recent distro should provide
  • dolmades will be written to support Python 2.7 and bearing in mind Python 3 compatibility for later when udocker starts supporting it, too.
  • wine does not work well with pure x86-64 software which is why the installed windows software actually needs to be compatible with 32-bit windows
  • do not report issues to wine directly when winetricks has been used in the recipe
  • sometimes udocker fails to pull some layers from the docker registry (timeouts) - simply repeating the commands should help.
  • GOG installer errors: many GOG games display error messages at the end of the installation process. I suspect some failing installer script commands are the source. The installed games seem to work anyways! According to this post these messages even occur on Windows machines!

Last but not least: if you are in trouble, check out the issues and open a new one if applicable.

dolmades-cli's People

Contributors

54r4 avatar katakombi avatar serious-steve avatar

Stargazers

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

Watchers

 avatar  avatar

dolmades-cli's Issues

Save most important metadata

I put the most important metadata inside metadatadir /.dolmades. Decide on what this is:

As of now:

  • Dolmadename
  • Application Icon for the Desktop Symbol
  • Required icon resources
  • sha256 hash of container - not needed, it is in the tarball and the parent dir ..
  • Utilized Dolmadefile

NB Dolmadename appears in Dolmadefile. Better keep this redundancy since it allows for changing the dolmadename

Migration Support

What is needed for successfully exporting and importing a dolmade on another machine?

  • tar -xzvpf dolmade.tgz to ~/.dolmade/repo/containers
  • udocker name shasumdirname DolmadeName`
  • wineboot -u - why? what does it do?
    TBD manually: winecfg - reconfigure sound settings if system uses different sound hw

Put together a howto for that...

MS Office 2013 leads to segfault in marco compositor

On Startup marco segfaults:

[40156.404470] marco[6391]: segfault at 555f8970cd3e ip 0000555f868f7981 sp 00007fff196c1960 error 6 in marco[555f868de000+8f000]

Workaround: start up a console and restart marco

GOG windows gaming support

Uselgogdownloader to support GOG games

  • initial support implemented with goglizer script
  • let user select installer
  • let user select target binary (use yad script targetLauncher to do so!)
  • implement gog:// protocol handler in cook

interactive selection of installer

After concise investigation it seems impossible to reliably retrieve the installer binary for a GOG game. Reasons:

  • inconsistent naming (also due to multiple language support)

Solution:

  • show users a selection and let them choose

`cook` is vulnerable to evil cmd injections

When putting stupid cmd strings in a Dolmadefile and cooking them unchecked cook might execute arbitrary commands as the running user.
Most probably (I didn't check it!). But if you cook Dolmadefiles without checking them you are acting irresponsible!
This should definitely be fixed by the cook script.
Just not right now yet...

Get rid of licensed resources

Dolmades using some icons licensed by icons8.
I don't trust their licensing...
Replace them by own icons even if they look shittier...

  • replace icon resources used by targetLauncher
  • SVG replacement used in the official web site and as github logos... (going to be hard...)

Make users wine profile dir independent of linux user name

wine creates a profile dir for wine under /wineprefix/$USER which will be changing once the dolmade will be exported and reimported by another user. think of a way to symlink several differing user names to a unique profile dir which will be shared among every user.

Proposal:

  1. Modify cook
  • Create proper wineprefix prior to all subsequent runs
  1. Modify dolmade [debug,launch]
  • Add code which symlinks each new user to Public prior to executing debug / launch

OOTB Support Major Distros

GOAL: goglizer OOTB support for current Mint/Ubuntu/Debian/Manjaro/Fedora "Broken Sword 2.5"

Tests:

  1. install/run/uninstall boxed "LifeForce_ASD"
  2. download dolmades-cli, cook/serve/del "LifeForce_ASD"

Results

  • Mint 19 / Mate - best support as I use it for development :)

TODO --- from here repeat and update:

  • Official Ubuntu Desktop 18.04.1 LTS - GNOME 3 (ugh!)

  • requires sudo apt -y install git python curl

  • No SysTray feature using yad. What to do?

  • Did not have ~/.Xauthority. It works without. FIXME: adapt cook and dolmades

  • Debian Live 9.5 - KDE

  • no systray

  • requires sudo apt -y install git curl

  • Desktop symbol receives no run permissions. These can be given manually by user...

  • Manjaro - XFCE

  • I'm not even able to install git without breaking the system...hmm, download zip and install like that

  • Did not have ~/.Xauthority. It works without. FIXME: adapt cook and dolmades

  • Desktop symbol receives no run permissions. These can be given manually by user...

  • Fedora 29 Workstation - Gnome localized German

  • sudo yum install python2

  • gnome is so advanced it even removed desktop symbols ๐Ÿคฆ

General Issues

  • udocker needs curl or pycurl
  • python2 shebang might differ from distro to distro we cover most with python2
  • desktop file doesnt receive exec permissions on some distros (WHY?)
  • git is often needed - change docs to use curl instead!
  • Some WMs might not have systrays
  • Some WMs do not display desktop icons by default
  • Full Screen did not work. Might be due to VirtualBox though...

Create

  • a very simple test suite
  • make it work out-of-the-box on the most common distros

build local ingredient cache

Write a new script called ingredients with commands

  • list
  • store
  • del

Implement a cache operating on the sha256sum:size of each ingredient and add a primary check.
Never use any of the URL handles if ingredient can be found in the local cache.

speed up installation time for the example

  • Take ASD demo for primary example as it does not require download. But then it should depend on winestable. Maybe this will work with wine 4.0
  • Take Broken Sword as secondary example
  • Speedup download time for docker base images - HOW?

implement bind concept

these things are crucial for external binds into dolmades:

  • binds should be made available as win drive letters
  • do not allow binds to host dirs which make accessible dolmade_path (default: $HOME/.dolmades)

Right now that means users cant bind their home directories which of course is inconvenient. This cant be avoided unless dolmade_path is somewhere outside the users dir.

Plan:

  • Implement dolmades bind to set binds from d:\ to y:\. c:\ is the default wine drive, z:\ is the root of the container
  • On binding make sure that DOLMADE_PATH is not reachable under the bound path. Otherwise bail out. TODO implement this check also for dolmades launch
  • Save the bound path under DOLMADE_PATH/containers/targetBinds so it can be exported together with the dolmade

NB: devices are not supported yet!

store icon inside container

dolmades should stay self-contained hence store the icon inside them!
this will be easy and lead to consistency esp. on deletion/moving/renaming...

Acquire testers

  • I need to acquire testers - HOW?
  • Need testers with dedicated Gfx: ATI and NVidia

interactive selection of target binary

After concise investigation it seems impossible to reliably retrieve the target binary of a GOG game automatically. Reasons:

  • lnk-Files resolve case-insensitively to the target binaries
  • parameters missing
  • multiple binaries, and no clue which one is the proper one
  • ...

Solution:

  • resolve all .lnk files to their respective .exe/.EXE/.bat/.com files with full path
  • check whether the file exists: need to make matches case-insensitively here!
  • show users a selection and let them choose

we require digest support in udocker

Right now Dolmadefiles refer to the VERSION tag in the base DockerHub repo. This is not very reliable since tags can be rebuilt any time and we want a more reproducible build. This can be solved when we can refer to digests.
Hopefully this will be resolved upstream before our 1.1 release: indigo-dc/udocker#112

Develop Base Image Concept

This needs to be thought through again...
Especially how to manage the builds on docker hub. Right now it is too much hassle....

make `cook` run without requirements

Use a shared dolmade-runtime container to decouple helper functionality and runtime dependencies from the host system

  • get rid of PIL dependency
  • remove pycurl dependency, have a look into udocker how it is implemented there

Implement Target Launcher v1

Instead of setting a custom udocker command as startup in a .desktop file point it to a "Target Launcher Script". This should behave as follows:

  • shoot up a GUI
  • let user launch any installed targets

Definition of target : lnk-files created by windows installers. They provide all info needed for proper launching.

Realization

  • use yad script

auto-generate sha256sums for ingredients

  • if a ingredient is added for the first time the sha256sum might be unknown
  • if '0' in the sha256 sum field entry:
    • generate the sha256sum
    • store them
    • after successfully completing the dolmade build write it back to the Dolmade file

Implement "Target Launcher" v2

Instead of setting a custom udocker command as startup in a .desktop file point it to a "Target Launcher Script". This should behave as follows:

  • shoot up a GUI
  • let user launch targets
  • let user add/remove multiple targets
  • let user specify custom binds
  • let user enable debugging
  • saves last used settings

Definition of target

  • as of now use lnk-files created by installation. They provide all info needed for proper launching
  • properties
    ** executable filepath
    ** executable arguments
    ** run path
    ** icon filepath

Realization

  • use PyQt for the GUI
  • use perl script for treating windows lnk files. As of now I see no way do this with vanilla wine

Consequences

  • disable handling of setTarget / setIcon of cook in dolmade files, not required right now

Documentation for `the_goglizer`

Create detailed documentation

  • Introduction
  • Features
  • Basics
    • Usage
    • Development
    • Versioning
    • Base Images
    • External Binds
    • Future: next version, C++ rewrite, registry support...
    • Acknowledgement
  • Tools
    • dolmades
    • goglizer
    • cook
    • config.py
    • goglizer / cook / dolmades should receive proper help texts (with param -h)
  • Dolmadefile 1.0 Syntax - mark which command is mandatory and which one is optional
  • FAQ: supported distros, requirements, limits, caveats, ...
  • HOWTOS
    • Cook a dolmade recipe
    • Create a dolmade recipe
    • Migrate a dolmade
    • Copy-Protected CD/DVD Game: Describe how we can install Harry Potter 1 and Harry Potter 2 from copy protected CD media
    • Contribution
  • Roadmap

Add respective Dolmadefiles

Keep this in repo as md-Files under docs

investigate possibility to store dolmades as additional docker layer

it should be possible to manage a stack of snapshot layers for dolmades and create them just on demand when they are being run. However, after running (and modification), a new layer has to be created or the previous has to be updated.
This mechanism could also guide during recipe creation when intermediate errors occur and it is tedious to repeat the entire building progress from beginning.

how to create a layer for a dolmade

  • create a clean base image
  • if the layer is relative to a previous layer, subsequently apply all layers below this layer
  • perform a diff (sha256+size) on the entire file system tree
  • create the layer based on the diff (yet unclear in detail - how is the format?)

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.