Snyk failed to patch in Alpine docker

Synk depends on GNU version of patch utility.

Snyk initially runs fine on Alpine, until you try to snyk protect to patch the modules. Turns out Synk depends on GNU version of patch utility.

Edit: Snyk v1.131.0 onwards no longer use patch.

Snyk is used to patch vulnerabilities of node_modules (read my previous post for installation guide). I never had any issue with it running on Alpine docker image. That was because there was no modules to patch.

That is until I install renovate, which has vulnerabilities that can be patched.

Snyk only tells modules failed to patch, which is not helpful at all. I initially thought it was due to file permissions, which I now realise don’t make sense. All commands are executed as root and files are owned by root.

The issue was only pinpointed after I ran snyk with --debug, which I should’ve used it in the first place anyway. The issue is due to BusyBox’s patch doesn’t support --backup option. Sigh, BusyBox versus GNU, back at it again.

To install GNU’s patch, simply add apk add patch before npm install in your CI config (e.g. .gitlab-ci.yml). The installation will automatically replace the BusyBox’s patch symlink, so you don’t need to.