Using pyenv-hook for setting up python/pip persistence over pyenv bought in unwanted issues and increased a maintenance burden, something that I had not anticipated (#868).
Before going ahead with pyenv-hooks I had tried native kernel overlayfs but that didn't work1. Recently, I looked for alternative methods in an effort to simplify the pyenv setup, it seems that a fuse implementation of overlayfs works.
By using fuse-overlayfs, we can get rid of all the custom logic that was implemented via pyenv-hook bash scripts.
| with pyenv-hooks |
with fuse-overlayfs |
 |
 |
Implications:
- Requires the host workspace to have privileged access to
/dev/fuse, if not found it will simply skip mounting on $HOME/.pyenv and things will keep working normally except they will lack persistence between prebuilds/reboots.
- Unsure if it got any drawbacks.
Questions
- Does it work inside
gp validate environment?
- When is it mounted?
- It is mounted when
$GITPOD_REPO_ROOT exists. Means it will be mounted before supervisor tasks are executed in a prebuild-workspace or user-workspace. Uses an atomic lock to avoid race conditions and makes all the terminals await for the completion.
Proposed implementation
You can check the following commit for an example implementation: axonasif@d9ec66a
A docker image with the above change is available as: axonasif/workspace-python:debug2
fuse-overlayfs for solving Ruby issues
It could help with Ruby and nix as well with one simple command.
Some recent examples
----
Using pyenv-hook for setting up python/pip persistence over pyenv bought in unwanted issues and increased a maintenance burden, something that I had not anticipated (#868).
Before going ahead with pyenv-hooks I had tried native kernel overlayfs but that didn't work1. Recently, I looked for alternative methods in an effort to simplify the pyenv setup, it seems that a fuse implementation of overlayfs works.
By using fuse-overlayfs, we can get rid of all the custom logic that was implemented via pyenv-hook bash scripts.
Implications:
/dev/fuse, if not found it will simply skip mounting on$HOME/.pyenvand things will keep working normally except they will lack persistence between prebuilds/reboots.Questions
gp validateenvironment?$GITPOD_REPO_ROOTexists. Means it will be mounted beforesupervisortasks are executed in a prebuild-workspace or user-workspace. Uses an atomic lock to avoid race conditions and makes all the terminals await for the completion.Proposed implementation
fuse-overlayfsfor easy use.You can check the following commit for an example implementation: axonasif@d9ec66a
A docker image with the above change is available as:
axonasif/workspace-python:debug2fuse-overlayfs for solving Ruby issues
It could help with Ruby and nix as well with one simple command.
Some recent examples
Footnotes
https://gitpod.slack.com/archives/C02F19UUW6S/p1653321259722329 (internal) ↩