Linux Automatic Installer (ansible) thread

The Nix version of Atom isn't working for me either (crashes when I try to open/save a file), so I'm giving up on that path now..

Do you think your ansible method is ready to put on the Tidal install page for Linux @cleary?

@yaxu maybe, thinking through all the things I'd like to do with it, I think there's only one thing I need to do before you go ahead:

Currently I have custom synth paths as a variable defined in each individual playbook, which means you have to make sure that variable is present in all playbooks if you want to try different editors. I just need to make it global, it shouldn't take long - I'll have a look at it today/tonight tomorrow and ping you back when it's done.

I'd also like to look at being able to handling more interesting scd startup variables in there too (custom midi, additional synth defs etc) but getting the custom vars moved to a global scope is really the first thing to do, and the only thing blocking you adding it to the front page.

1 Like

@yaxu lol, so much for that optimism.

There was a 30 day time limit for editing posts. I've reconfigured it so now people should be able to edit their post forever. Thanks for all this btw!

1 Like

all done, I guess that's ready to release to the seething hordes of tidalcycles users :grimacing: :stuck_out_tongue:

2 Likes

Great! Do you have time to add instructions to the wiki, and then link it here as the 'easy' option? https://tidalcycles.org/index.php/Installation

Happy to close this issue: https://github.com/tidalcycles/Tidal/issues/284 :slight_smile:

Hey I'd forgotten about that discussion!

I'm not sure what I've got actually solves that issue though (yet) - I've only made it useful for a very limited distro set (*buntu 20.04 only)

I've been doing a little unrelated investigations into vagrant at work, and I think I can at least begin transitioning my ansible-tidalcycles testing to a headless, partially automated testing process using the vagrant tool (with the plan to eventually have it fully automated using a CI tool in github).

If I can confirm that works, then I can begin building per-distro and per-version considerations into the ansible roles (I'll probably need some extra interested collaborators on that though)
Once we have that infrastructure created and in the wild for a bit, then I'd feel better about closing that ticket.

@yaxu What are your thoughts?

PS just re-running my ansible roles against my current installs to upgrade to 1.4.9, 1.5.1, 1.5.2 has gone absolutely swimmingly

1 Like

Hi @cleary, thanks for your effort!
I have been trying to install Tidal on WSL using the ansible method but when running sudo ansible-playbook --connection=local -i localhost, tidal.play.yml it keeps complaining that [localhost]: UNREACHABLE!
Do you have any idea about why?

I haven't tried WSL so thankyou for testing! That is a more generic networking issue beyond my control by the looks -
[edit] (The previously linked issue was related to forwarding between the WSL environment and windows - )

As a very quick and easy diagnostic - what does this command return when you run it in your ubuntu terminal:

ping localhost

Hi @cleary and thank you for the 'ansible' option. After some very frustrating attempts I tried this way on a freshly installed Ubuntu Studio 20.04. It worked fine but stopped after installing SC 3.10.0 without the plugins. I had to install Atom manually.

ghci works in the terminal but does not import Sound.Tidal.Context

nuelmyr@nuelmyr-tidalcaycles:~$ ghci GHCi, version 8.6.5: http://www.haskell.org/ghc/ :? for help Prelude> import Sound.Tidal.Context

<no location info>: error: Could not find module β€˜Sound.Tidal.Context’ It is not a module in the current program, or in any known package. Prelude>

And in Atom I get the same response like in my other attempts
No configured ghc path
Ghci command: ghci
Ghc-pkg command: ghc-pkg
Load BootTidal.hs from /home/nuelmyr/.atom/packages/tidalcycles/lib/BootTidal.hs
t>
t>: error:
Could not find module β€˜Sound.Tidal.Context’
It is not a module in the current program, or in any known package.

Variable not in scope: d1 :: t1 -> t0

β€’ Variable not in scope: sound :: [Char] -> t1
β€’ Perhaps you meant β€˜round’ (imported from Prelude)


Variable not in scope: (#) :: t0 -> t2 -> t


Variable not in scope: gain :: Integer -> t2

And the end I don't know what to do, I need Tidal for Streaming in a new machine. Maybe it's me who's doing something wrong while installing? Bad tidal-kharma :wink:

Maybe there is more than one ghci installed? Try whereis ghci to see

Hi @nuelmyr
[edit] it was a clean install - sorry I misread

My recommendation, nuke some of the install directories in your $HOME - eg:

mv .cabal .config/SuperCollider .local/share/SuperCollider .ghc /tmp/

and try again

Thanks @cleary and @yaxu for your support. In the end after tweaking and trying to reinstall and update ghci I finally succeeded. Don't ask me how please! This moment when there is no more error message in the system and the sound comes out of the speakers ... Wow!!! Everything is so amazing then and the whole frustrating process before is forgotten.
But to be honest: a lot a people who are interested in making music and sounds will not have the frustration tolerance to keep on twiddling until it works. Choco and ansible are the right ways to make this installation process smoother and easier for us who are NOT software engineers and developers. I appreciate your work!! Thanks again for supporting.

1 Like

Thanks so much for this! I resurrected my old 2010 Macbook pro and chucked Ubuntu Studio on it, and this method worked a damn treat, though with SC3.10. I gotta update that at some stage, but eh.

1 Like

you're welcome! thanks for the feedback - I've been studiously procrastinating about my todo list for that repo... will spend some time on it next week though, promise :slight_smile:

Side note, did you make use of the custom sample definitions option in vars/all.yml file?
Another feature I'm thinking about looking at is adding custom synth defs for sc in there too, so curious to know if even the basic functionality is being used at all

update for today:
SuperCollider will now handle being installed in a headless environment -

The default sc in the ubuntu repos has been compiled with QT support, and that includes an execution dependency, even when running sclang from the commandline.
There are builds that do not include the QT dependency, but I'm working off the standard ubuntu repos, so I've worked around it by running an xvfb (virtual framebuffer) on DISPLAY=:99 which will allow sclang to execute.

For my personal requirements, I'm gradually working towards including the ability to execute ansible unit testing via molecule in a headless CI environment - however, if you are on a low resource usage device, you could now feasibly run tidal without your X server using vim + headless supercollider.

I'm currently turning xvfb off after my testing, but let me know if there's interest and I'll consider leaving it in -

Commit here:

1 Like

updates from this morning:
Now that I can do (somewhat automated) testing in vagrant, I did!
I tested the tidal/supercollider (no editor) role on:

  • debian/buster box :+1:
  • mint 19.3 :-1:

@yaxu, my next plan is to make use of the github continuous integration testing features, which will be able to give me/us feedback on which distros work, and which don't - in a quick and easy way, which could then translate to a simple recommended distro list on your install page:

[edit] resolution to the below issue in this thread

For starters, mint 19.3 fails to install tidal with the following hosc compile error:

  Building hosc-0.18...
Preprocessing library hosc-0.18...
[ 1 of 18] Compiling Sound.OSC.Wait   ( Sound/OSC/Wait.hs, dist/build/Sound/OSC/Wait.o )
[ 2 of 18] Compiling Sound.OSC.Coding.Convert ( Sound/OSC/Coding/Convert.hs, dist/build/Sound/OSC/Coding/Convert.o )
[ 3 of 18] Compiling Sound.OSC.Time   ( Sound/OSC/Time.hs, dist/build/Sound/OSC/Time.o )
[ 4 of 18] Compiling Sound.OSC.Datum  ( Sound/OSC/Datum.hs, dist/build/Sound/OSC/Datum.o )
[ 5 of 18] Compiling Sound.OSC.Packet ( Sound/OSC/Packet.hs, dist/build/Sound/OSC/Packet.o )
[ 6 of 18] Compiling Sound.OSC.Transport.FD ( Sound/OSC/Transport/FD.hs, dist/build/Sound/OSC/Transport/FD.o )
[ 7 of 18] Compiling Sound.OSC.Transport.Monad ( Sound/OSC/Transport/Monad.hs, dist/build/Sound/OSC/Transport/Monad.o )
[ 8 of 18] Compiling Sound.OSC.Coding.Cast ( Sound/OSC/Coding/Cast.hs, dist/build/Sound/OSC/Coding/Cast.o )
[ 9 of 18] Compiling Sound.OSC.Coding.Byte ( Sound/OSC/Coding/Byte.hs, dist/build/Sound/OSC/Coding/Byte.o )
[10 of 18] Compiling Sound.OSC.Coding.Decode.Base ( Sound/OSC/Coding/Decode/Base.hs, dist/build/Sound/OSC/Coding/Decode/Base.o )
[11 of 18] Compiling Sound.OSC.Coding.Decode.Binary ( Sound/OSC/Coding/Decode/Binary.hs, dist/build/Sound/OSC/Coding/Decode/Binary.o )
[12 of 18] Compiling Sound.OSC.Coding.Encode.Base ( Sound/OSC/Coding/Encode/Base.hs, dist/build/Sound/OSC/Coding/Encode/Base.o )
[13 of 18] Compiling Sound.OSC.Coding.Encode.Builder ( Sound/OSC/Coding/Encode/Builder.hs, dist/build/Sound/OSC/Coding/Encode/Builder.o )

Sound/OSC/Coding/Encode/Builder.hs:33:36: error:
    β€’ Variable not in scope:
        (<>) :: B.Builder -> B.Builder -> B.Builder
    β€’ Perhaps you meant one of these:
        β€˜<$>’ (imported from Prelude), β€˜*>’ (imported from Prelude),
        β€˜<$’ (imported from Prelude)

Sound/OSC/Coding/Encode/Builder.hs:37:33: error:
    β€’ Variable not in scope:
        (<>) :: B.Builder -> B.Builder -> B.Builder
    β€’ Perhaps you meant one of these:
        β€˜<$>’ (imported from Prelude), β€˜*>’ (imported from Prelude),
        β€˜<$’ (imported from Prelude)

Sound/OSC/Coding/Encode/Builder.hs:42:55: error:
    β€’ Variable not in scope: (<>) :: B.Builder -> B.Builder -> t0
    β€’ Perhaps you meant one of these:
        β€˜<$>’ (imported from Prelude), β€˜*>’ (imported from Prelude),
        β€˜<$’ (imported from Prelude)

Sound/OSC/Coding/Encode/Builder.hs:43:26: error:
    β€’ Variable not in scope: (<>) :: t0 -> B.Builder -> B.Builder
    β€’ Perhaps you meant one of these:
        β€˜<$>’ (imported from Prelude), β€˜*>’ (imported from Prelude),
        β€˜<$’ (imported from Prelude)
cabal: Leaving directory '/tmp/cabal-tmp-14650/hosc-0.18'
Building vector-0.12.1.2...
Installed distributive-0.6.2
Downloading comonad-5.0.6...
Configuring comonad-5.0.6...
Building comonad-5.0.6...
Installed comonad-5.0.6
Downloading bifunctors-5.5.7...
Configuring bifunctors-5.5.7...
Building bifunctors-5.5.7...
Installed bifunctors-5.5.7
Installed vector-0.12.1.2
cabal: Error: some packages failed to install:
hosc-0.18 failed during the building phase. The exception was:
ExitFailure 1
tidal-1.6.0 depends on hosc-0.18 which failed to install.

more updates - I've been thinking about how to quickly patch/workaround issues like hosc error above - I think injecting a specific .yml where it needed to go is a clean way to insert (and remove when required) way around it:

Having this patched meant I could test/verify some more distros - confirmed working on the tidal/supercollider role (editors still todo):

  • ubuntu 18.04/bionic
  • debian 9 stretch
  • Linux Mint 19.3 Tricia

Failed/unsupported:

  • ubuntu 16.04 xenial (sc 3.6 is too old for superdirt)

Todo:

  • work out Mint version numbering
  • test editor roles
1 Like

Update for today:

  • added support for the experimental feedforward editor... experimental! being the keyword here
  • the ff VU meter support is also added to your startup.scd (globally at this stage)
  • I've also validated all my playbooks in an ubuntu 20.04 vagrant instance (relief they all passed!) so I'll be digging into full molecule (ansible) testing next I think, before I head to travisCI

Todo:

  • implement molecule ansible testing
  • work out Mint version numbering
1 Like

updates for the last couple of days:

  • I've made the superdirt install/check code WAY more robust
  • I've worked out that my vagrant testing was not actually testing what a user is likely to see, since the ansible version executed in my testing was from my 20.04 host, not in the guest - turns out the older distros are definitely NOT working unless you've installed a non-repo version of ansible >= 2.8 - I will work on that over the next few days