How to get QPixel bundle install working without sudo privileges on Debian? Question
When I tried to install QPixel with bundle install
I got the following message (on Debian 11):
~/qpixel$ bundle install
Bundler 2.3.15 is running, but your lockfile was generated with 2.4.13. Installing Bundler 2.4.13 and restarting using that version.
Fetching gem metadata from https://rubygems.org/.
Fetching bundler 2.4.13
Installing bundler 2.4.13
Then I am asked for the sudo password and afterwards a lot of orange warnings appear like this one (several for each "fetched" gem
):
Retrying download gem from https://rubygems.org/ due to error (2/4): Bundler::PermissionError There was an error while trying to write to `/var/lib/gems/3.1.0/cache/erubi-1.11.0.gem`. It is likely that you need to grant write permissions for that path.
And then the installation stops with the following red error message (similar error messages are displayed):
Bundler::PermissionError: There was an error while trying to write to
`/var/lib/gems/3.1.0/cache/concurrent-ruby-1.1.10.gem`. It is likely that
you need to grant write permissions for that path.
Bundler::PermissionError: There was an error while trying to write to
`/var/lib/gems/3.1.0/cache/concurrent-ruby-1.1.10.gem`. It is likely that
you need to grant write permissions for that path.
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/shared_helpers.rb:105:in `rescue in filesystem_access'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/shared_helpers.rb:102:in `filesystem_access'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/rubygems_integration.rb:483:in `block in download_gem'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/retry.rb:40:in `run'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/retry.rb:30:in `attempt'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/rubygems_integration.rb:474:in `download_gem'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/source/rubygems.rb:481:in `download_gem'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/source/rubygems.rb:443:in `fetch_gem'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/source/rubygems.rb:427:in `fetch_gem_if_possible'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/source/rubygems.rb:156:in `install'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/installer/gem_installer.rb:54:in `install'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/installer/gem_installer.rb:16:in `install_from_spec'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/installer/parallel_installer.rb:156:in `do_install'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/installer/parallel_installer.rb:147:in `block in worker_pool'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/worker.rb:62:in `apply_func'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/worker.rb:57:in `block in process_queue'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/worker.rb:54:in `loop'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/worker.rb:54:in `process_queue'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/worker.rb:90:in `block (2 levels) in create_threads'
Bundler::PermissionError: There was an error while trying to write to `/var/lib/gems/3.1.0/cache/minitest-5.16.3.gem`. It is likely that you need to grant write permissions for that path.
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/shared_helpers.rb:105:in `rescue in filesystem_access'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/shared_helpers.rb:102:in `filesystem_access'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/rubygems_integration.rb:483:in `block in download_gem'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/retry.rb:40:in `run'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/retry.rb:30:in `attempt'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/rubygems_integration.rb:474:in `download_gem'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/source/rubygems.rb:481:in `download_gem'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/source/rubygems.rb:443:in `fetch_gem'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/source/rubygems.rb:427:in `fetch_gem_if_possible'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/source/rubygems.rb:156:in `install'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/installer/gem_installer.rb:54:in `install'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/installer/gem_installer.rb:16:in `install_from_spec'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/installer/parallel_installer.rb:156:in `do_install'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/installer/parallel_installer.rb:147:in `block in worker_pool'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/worker.rb:62:in `apply_func'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/worker.rb:57:in `block in process_queue'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/worker.rb:54:in `loop'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/worker.rb:54:in `process_queue'
/var/lib/gems/3.1.0/gems/bundler-2.4.13/lib/bundler/worker.rb:90:in `block (2 levels) in create_threads'
An error occurred while installing minitest (5.16.3), and Bundler cannot continue.
[..] # Similar error messages apears after
So I have to run bundle
with sudo
: sudo bundle install
and I got the following message (but the installation is successful):
~/qpixel$ sudo bundle install
Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine.
Bundler 2.3.15 is running, but your lockfile was generated with 2.4.13. Installing Bundler 2.4.13 and restarting using that version.
Fetching gem metadata from https://rubygems.org/.
Fetching bundler 2.4.13
Installing bundler 2.4.13
Don't run Bundler as root. Installing your bundle as root will break this application for all non-root users on this machine.
[..] # After, the installation proceeds correctly
It seems to work fine because I have not detected any problem when running the local instance of QPixel, even if I start it with rails s
without sudo
.
But my questions are:
- What are the possible issues related to a QPixel
bundle install
withsudo
? -
How to avoid using
sudo
to obtain a successful QPixelbundle install
?
I tried to install first the "good" version ofbundle
withsudo gem install bundler:2.4.13
but I got the samePermissionError
messages during thebundle install
... EDIT 1.1 after answer: If I try to install bundle WITHOUT sudo, I got the following error message:~/qpixel$ gem install bundler Fetching bundler-2.4.16.gem ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /var/lib/gems/3.1.0 directory.
Set up
WSL2 Debian 11
I tried on a fresh Debian 11 bullseye on Windows Subsystem Linux Version 2 (WSL2), Windows 11 22H2 host and bundle
installed with:
sudo apt install bundler
Ruby installed with:
curl -sSL https://get.rvm.io | bash -s stable
EDIT 1.2 after answer:
Output of gem env
("tyty" is the Debian user and "Rigal" is the Windows host user)
gem env
("tyty" is the Debian user and "Rigal" is the Windows host user)~/qpixel$ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 3.3.15
- RUBY VERSION: 3.1.2 (2022-04-12 patchlevel 20) [x86_64-linux-gnu]
- INSTALLATION DIRECTORY: /var/lib/gems/3.1.0
- USER INSTALLATION DIRECTORY: /home/tyty/.local/share/gem/ruby/3.1.0
- RUBY EXECUTABLE: /usr/bin/ruby3.1
- GIT EXECUTABLE: /usr/bin/git
- EXECUTABLE DIRECTORY: /usr/local/bin
- SPEC CACHE DIRECTORY: /home/tyty/.local/share/gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /var/lib/gems/3.1.0
- /home/tyty/.local/share/gem/ruby/3.1.0
- /usr/local/lib/ruby/gems/3.1.0
- /usr/lib/ruby/gems/3.1.0
- /usr/lib/x86_64-linux-gnu/ruby/gems/3.1.0
- /usr/share/rubygems-integration/3.1.0
- /usr/share/rubygems-integration/all
- /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
- SHELL PATH:
- /usr/local/sbin
- /usr/local/bin
- /usr/sbin
- /usr/bin
- /sbin
- /bin
- /usr/games
- /usr/local/games
- /usr/lib/wsl/lib
- /mnt/c/Python311/Scripts/
- /mnt/c/Python311/
- /mnt/c/Program Files/ImageMagick-7.1.1-Q16-HDRI
- /mnt/c/Program Files/ImageMagick-7.1.0-Q16-HDRI
- /mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath
- /mnt/c/WINDOWS/system32
- /mnt/c/WINDOWS
- /mnt/c/WINDOWS/System32/Wbem
- /mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/
- /mnt/c/WINDOWS/System32/OpenSSH/
- /mnt/c/Program Files (x86)/Calibre2/
- /mnt/c/Strawberry/c/bin
- /mnt/c/Strawberry/perl/site/bin
- /mnt/c/Strawberry/perl/bin
- /mnt/c/Program Files/MATLAB/R2021b/bin
- /mnt/c/Program Files/nodejs/
- /mnt/c/ProgramData/chocolatey/bin
- /mnt/c/Ruby32-x64/bin
- /mnt/c/Users/Rigal/AppData/Local/Microsoft/WindowsApps
- /mnt/c/Users/Rigal/AppData/Local/atom/bin
- /mnt/c/Users/Rigal/AppData/Local/Programs/MiKTeX/miktex/bin/x64/
- /mnt/c/Users/Rigal/AppData/Local/Programs/Git/cmd
- /mnt/c/Users/Rigal/AppData/Roaming/npm
- /mnt/c/Users/Rigal/AppData/Local/Microsoft/WindowsApps
- /home/tyty/.rvm/bin
- /home/tyty/.rvm/binSylvain RIGAL
Debian 12 on VBox
Also tried with a fresh install of Debian 12 (iso image debian-12.0.0-amd64-netinst.iso) on Virtual Box (version 7.0.8) on Windows 11 22H2 Host.
Ruby installed with rbenv:
sudo apt install rbenv
rbenv install 3.1.2 # WITHOUT sudo!
sudo gem install bundler
The same errors occurs when trying the QPixel bundle install
without sudo
and if I tried to install bundle
without sudo
(i.e. with gem install bundler
), see EDIT 1.1.
Output of gem env
("tyty" is the Debian user, and note that I tried to install first Ruby with rvm (but it fails) before to install it with rbenv...)
gem env
("tyty" is the Debian user, and note that I tried to install first Ruby with rvm (but it fails) before to install it with rbenv...)~/qpixel$ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 3.3.15
- RUBY VERSION: 3.1.2 (2022-04-12 patchlevel 20) [x86_64-linux-gnu]
- INSTALLATION DIRECTORY: /var/lib/gems/3.1.0
- USER INSTALLATION DIRECTORY: /home/tyty/.local/share/gem/ruby/3.1.0
- RUBY EXECUTABLE: /usr/bin/ruby3.1
- GIT EXECUTABLE: /usr/bin/git
- EXECUTABLE DIRECTORY: /usr/local/bin
- SPEC CACHE DIRECTORY: /home/tyty/.local/share/gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /var/lib/gems/3.1.0
- /home/tyty/.local/share/gem/ruby/3.1.0
- /usr/local/lib/ruby/gems/3.1.0
- /usr/lib/ruby/gems/3.1.0
- /usr/lib/x86_64-linux-gnu/ruby/gems/3.1.0
- /usr/share/rubygems-integration/3.1.0
- /usr/share/rubygems-integration/all
- /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
- SHELL PATH:
- /usr/local/bin
- /usr/bin
- /bin
- /usr/local/games
- /usr/games
- /home/tyty/.rvm/bin
- /home/tyty/.rvm/bin
- /home/tyty/.rvm/bin
2 answers
Disclaimer: I use rbenv rather than rvm for installing ruby and have not tested the suggested setup locally.
Rather than install bundler via apt, install it via rubygems such that it uses your rvm installed version of ruby.
(after sudo apt purge bundler
)
gem install bundler
(don't run it with sudo)
This should set bundler up in such a way that the gems are installed to your rvm ruby location, where the current user should have writing permissions.
If this does not fix the problem, perhaps you can run gem env
and add its output to your question such that we can see which version of ruby is being used and what it was installed with.
Thanks to this answer and related comments I was able to install bundle without sudo privileges.
The problems were:
-
On Debian 11 WSL: I installed bundler with
sudo apt install bundler
before to install Ruby with rvm. Then, it install a ruby version in/var/lib
. It seems that this path, set up by apt, was taken as default bundler path even if I've installed after a new ruby version with rvm without sudo... -
On Debian 12 on VBox: I should not do
sudo apt install rbenv
because it creates also a ruby installation directory in/var/lib
...
So I had to purge ruby with sudo apt purge ruby
and then the "good" workflow (for me) with rvm was (tested on Debian 11 WSL and Debian 12 on VBox):
curl -sSL https://rvm.io/mpapis.asc | gpg --import -
curl -sSL https://rvm.io/pkuczynski.asc | gpg --import -
curl -sSL https://get.rvm.io | bash -s stable
Outputs of the last command (for "zetyty" user):
~$ curl -sSL https://get.rvm.io | bash -s stable
Downloading https://github.com/rvm/rvm/archive/1.29.12.tar.gz
Downloading https://github.com/rvm/rvm/releases/download/1.29.12/1.29.12.tar.gz.asc
gpg: Signature made Fri 15 Jan 2021 07:46:22 PM CET
gpg: using RSA key 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
gpg: Good signature from "Piotr Kuczynski <[email protected]>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 7D2B AF1C F37B 13E2 069D 6956 105B D0E7 3949 9BDB
GPG verified '/home/zetyty/.rvm/archives/rvm-1.29.12.tgz'
Installing RVM to /home/zetyty/.rvm/
Adding rvm PATH line to /home/zetyty/.profile /home/zetyty/.mkshrc /home/zetyty/.bashrc /home/zetyty/.zshrc.
Adding rvm loading line to /home/zetyty/.profile /home/zetyty/.bash_profile /home/zetyty/.zlogin.
Installation of RVM in /home/zetyty/.rvm/ is almost complete:
* To start using RVM you need to run `source /home/zetyty/.rvm/scripts/rvm`
in all your open shell windows, in rare cases you need to reopen all shell windows.
Thanks for installing RVM 🙏
Please consider donating to our open collective to help us maintain RVM.
👉 Donate: https://opencollective.com/rvm/donate
As mentioned in the rvm install output above, I have to run source /home/zetyty/.rvm/scripts/rvm
in order to be able to use rvm command.
And finely the ruby install:
rvm install 3.1.2
After this, the bundle install
of QPixel works without sudo!
1 comment thread