ruby install hangs on user input · Issue #231 · rvm/rvm1-ansible · GitHub
Skip to content

ruby install hangs on user input #231

Open

Description

@ruudgrosmann

I noticed that installing a ruby on a remote server with a user install always hangs after some time. The ruby appears to be installed, but the ansible-playbook command hangs. I figured out what is going on by adding a redirect to the install command and keeping an eye on the output file.
The rvm command asks for user input and the ansible task hangs.

I see this in the rvm output:

Ruby was built without documentation, to build it run: rvm docs generate-ri
******************************************************************************
* NOTICE                                                                     *
******************************************************************************
* RVM has encountered a new or modified after_install_auto_gem file in the   *
* current directory, environment variables from this file will be exported   *
* and therefore may influence your shell.                                    *
*                                                                            *
* Examine the contents of this file carefully to be sure the contents are    *
* safe before trusting it!                                                   *
* Do you wish to trust '/home/deploy/.rvm/hooks/after_install_auto_gem'?     *
* Choose v[iew] below to view the contents                                   *
******************************************************************************
y[es], n[o], v[iew], c[ancel]>

Ideally, rvm should have an option to force install. I posted an issue on their github. I resolved this locally by editing rubies.yml in the rvm.ruby distribution and replacing

command: '{{ rvm1_rvm }} install {{ item.item }} {{ rvm1_ruby_install_flags }}'
by

shell: "bash -c 'yes | {{ rvm1_rvm }} install {{ item.item }} {{ rvm1_ruby_install_flags }} '"

It is not a nice solution, but for now it works: ansible does not hang on the install rubies task.

Activity

  1. pkuczynski commented on Mar 26, 2022

    @pkuczynski
    Member

    @thbar @sfgeorge what do you think about this one?

  2. sfgeorge commented on Mar 27, 2022

    @sfgeorge
    Contributor

    That's very helpful that this workaround is documented for people who hit this issue.

    But I'm wary to build that in though for a few reasons, mainly because we will be blindly saying 'yes' to any other anticipating prompts that come up, from RVM, Ruby or otherwise.

    Moreover, A fresh install of RVM & a Ruby should not trigger RVM to be prompting this. This is either a bug in RVM (which I am unsuccessful at reproducing) or the result of an environmental factor on the machine in question.

    @ruudgrosmann So I can try again to reproduce this, would you be kind enough to provide this info?

    • Version of rvm/rvm1-ansible
    • The name of the Ansible Playbook "TASK" that was running when this errored.
    • A tarball or zip file of /home/deploy/.rvm.
    • The .rvmrc file(s) if they exist:
      • /etc/rvmrc
      • /home/deploy/.rvmrc
    • Operating System and version
    • Some of your ansible playbook details, including:
      • Tasks that relate to rvm1-ansible usage
      • All variables in variable .yml files that relate to rvm1-ansible usage
  3. thbar commented on Mar 27, 2022

    @thbar
    Contributor

    @pkuczynski it is the type of temporary issues for which I usually create a fork myself, report the problem back upstream, until the upstream problem is fixed.

    Completely agree with the points raised by @sfgeorge, and we can investigate though!

  4. pkuczynski commented on Mar 27, 2022

    @pkuczynski
    Member

    Let's wait if @ruudgrosmann will come up with reproducible case, otherwise we will close...

  5. ruudgrosmann commented on Mar 29, 2022

    @ruudgrosmann
    Author

    In the meantime I have upgraded my OS and as well ansible. I have tried reproducing this issue successfully though. On the install server, I removed ruby and tried reinstalling it. After the cpu load dropped, I could see from the output of rvm (on the install server) that the ruby was installed, but on the host ansible was still busy doing nothing.

    The information you asked for:

    • Version of rvm/rvm1-ansible
      • rvm 1.29.3 (master)
      • from ~/.ansible/roles/rvm.ruby/CHANGELOG.md: the first version comment was 2.1.2. Not sure if this is the proper way to determine the version though....
    • The name of the Ansible Playbook "TASK" that was running when this errored.
      • TASK [rvm.ruby : Install rubies_v1]
    • A tarball or zip file of /home/deploy/.rvm.
      • I will create one and attach it.
    • The .rvmrc file(s) if they exist:
      • no rvmrc found, not for the ansible-user, nor for the deployuser
    • Operating System and version
      • ansible host and install server: Debian GNU/Linux 11 (bullseye)
    • Some of your ansible playbook details, including:
      • Tasks that relate to rvm1-ansible usage
      • All variables in variable .yml files that relate to rvm1-ansible usage
        I think the playbook itself is sufficient
    hosts:            bullseye
      remote_user:      deploy
      vars:
        - rubyversie:           "2.4.2"
      roles:
        - role: rvm.ruby
          become: yes
          become_user: deploy
          tags: ruby
          rvm1_rubies: ["{{rubyversie}}", "{{jrubyversie}}"]
          rvm1_gpg_key_server: "keyserver.ubuntu.com"
          rvm1_install_flags: '--auto-dotfiles --user-install'
          rvm1_install_path: /data/rvm
          rvm1_user: deploy
          rvm1_rvm_check_for_updates: False
    
  6. ruudgrosmann commented on Mar 29, 2022

    @ruudgrosmann
    Author

    the rvm.ruby install: tarfile created, but I cannot attach it here. I have no graphical file manager to drag and drop or copy it to the clip board. Can I upload it somewhere?

  7. pkuczynski commented on Mar 29, 2022

    @pkuczynski
    Member
  8. sfgeorge commented on Mar 29, 2022

    @sfgeorge
    Contributor

    Thank you, @ruudgrosmann! Investigating.

  9. sfgeorge commented on Mar 30, 2022

    @sfgeorge
    Contributor

    @ruudgrosmann, I haven't yet been able to successfully reproduce this. Could I trouble you for some additional context?

    • The value of {{jrubyversie}}
    • From the install server, can you share a tarball or zip of ls -lah /data | head -n 2? Looking just for the permissions on the /data directory.
    • From the install server, can you share a tarball or zip of /data/rvm?
    • Can you share the recent final text output from the ansible host at the point that it stalled? Did it include the exact same "Do you wish to trust '/home/deploy/.rvm/hooks/after_install_auto_gem'?" message as before?
    • When you ssh to the install server and run rvm list, do you get the same Do you wish to trust . . . confirmation prompt?

    If you're curious, here's the branch where I'm attempting to replicate your setup as close as possible. And here are the test results, which are currently successful.

  10. ruudgrosmann commented on Mar 30, 2022

    @ruudgrosmann
    Author

    The output from the ansible install on the installation server is the same as in the question: the do-you-wish-to-trust message
    The value of the jrubybversion is not that relevant for the problem, because the problem occurs before the playbook tries to install jruby, but its value is jruby-9.2.14.0
    The /data directory has owner root, group ruud and file mode 775. So user deploy is not allowed to write in it.
    If I log in on the install server as deploy, rvm list does not come with the confirmation request, but lists the rubies without problem.

    The tarfile of /data/rvm on the installation server:
    https://wetransfer.com/downloads/33087c8b9958189f0499d89820ed4a3820220330080110/56682745348102f1f3a18a88d4533fb220220330080127/2a1921

  11. ruudgrosmann commented on Mar 30, 2022

    @ruudgrosmann
    Author

    By reading the rvm script rvmrc_trust I found another workaround for this problem, which does not include hacking the rvm.ruby role code. That would be to add a line to the deploy user's .rvmrc
    rvm_trust_rvmrcs_flag=1
    in a seperate role prior to running the rmv.ruby role. Not perfect either, but visible in the playbook.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions