Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Please add support for Podman OCI #829

Open
1 task done
schinnaswamy opened this issue Feb 15, 2024 · 3 comments
Open
1 task done

Please add support for Podman OCI #829

schinnaswamy opened this issue Feb 15, 2024 · 3 comments

Comments

@schinnaswamy
Copy link

Is there an existing issue for this?

  • I have searched existing issues, it hasn't been reported yet

Use case description

When we tried running the Serverless-python-requirments plugin with Podman OCI runtime we are unable to build the pythonrequirments.zip

Getting the below error when I tried running the below command

sls requirements install

Environment: darwin, node 20.5.1, framework 3.34.0 (local) 3.34.0v (global), plugin 6.2.3, SDK 4.3.2
Docs:        docs.serverless.com
Support:     forum.serverless.com
Bugs:        github.com/serverless/serverless/issues

Error:
Error: spawn docker ENOENT
    at ChildProcess._handle.onexit (node:internal/child_process:286:19)
    at onErrorNT (node:internal/child_process:484:16)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)

Tried modifying directly in the docker.js with command as podman instead of docker in

async function dockerCommand(options, pluginInstance) {
  const cmd = 'Podman';

Error stack:

Environment: darwin, node 20.5.1, framework 3.34.0 (local) 3.34.0v (global), plugin 6.2.3, SDK 4.3.2
Docs: docs.serverless.com
Support: forum.serverless.com
Bugs: github.com/serverless/serverless/issues

Error:
Running "docker run --rm -v /Users/xxx/Library/Caches/serverless-python-requirements/f2a9c040ceb6c9df0b4f83fbcb8b91d74947ceb4a90d97443c866b1c103eb1d7_arm64_slspyc:/var/task:z -v /Users/xxx/Library/Caches/serverless-python-requirements/downloadCacheslspyc:/var/useDownloadCache:z -u 0 public.ecr.aws/sam/build-python3.9:latest-arm64 /bin/sh -c python3.9 -m pip install --platform manylinux2014_aarch64 --only-binary\=\:all\: -t /var/task/ -r /var/task/requirements.txt --cache-dir /var/useDownloadCache && find /var/task -name \*.so -exec strip \{\} \;" failed with: ""

Proposed solution (optional)

No response

@pgrzesik
Copy link
Collaborator

Hey @schinnaswamy 👋 Thanks for reporting and sorry you've run into trouble. Is podman CLI compatible with docker CLI? Did you try aliasing locally podman to docker? Plugin uses docker pretty transparently, so as long as the API is the same, it should work just fine, I'm not using podman personally so it's hard for me to verify at the moment.

@schinnaswamy
Copy link
Author

schinnaswamy commented Feb 26, 2024

@pgrzesik
Thanks for looking at the issue.

Yes I tried aliasing Podman to docker. But after making couple of modifications in the following .js files and removing :z from bind path syntax in the docker run command since Podman has some issues with extended attribute was getting error

lsetxattr /: operation not supported

Step 1:

alias docker=podman

Even though I have added alias but still for some reason the command was trying to connect to the docker daemon via API.

So I have to modify explicitly the following js files in the serverless-python-requirements

Step 2 : Modified docker.js Line No : 13.

const cmd = 'podman';

Step 3: Modified pip.js Line No: 269 & 371 & 416

dockerCmd.push('podman', 'run', '--rm', '-v', ${bindPath}:/var/task);

case 'podman':

if (cmd === 'podman' && e.stderrBuffer) {

Step 4: Removed :z in the pip.js file [ Line No: 269, 278, 280, 282 & 311 ]

With the above following modifications managed to run the serverless deploy with Python requirements without any issues.

@pgrzesik
Copy link
Collaborator

pgrzesik commented Mar 3, 2024

Hey @schinnaswamy - thanks a lot for more details. That's interesting that the compatibility doesn't seem to be universal, at least in case of use via the plugin. I will try to find some time to run it myself via podman, but I cannot promise anything concrete right now. I would like to avoid having specific code modifications for podman if possible to reduce complexity on plugin side

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants