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

How can I create my own layer? #37

Open
ThompsonNJ opened this issue Apr 1, 2022 · 4 comments
Open

How can I create my own layer? #37

ThompsonNJ opened this issue Apr 1, 2022 · 4 comments

Comments

@ThompsonNJ
Copy link

ThompsonNJ commented Apr 1, 2022

I love this layer. However, due to security concerns, we cannot use your layer for our production environment; similarly, we cannot simply download your layer and reupload it to a new layer on our account.

Can you please tell me how you went about creating the binary files so I can follow that process? I tried downloading them from git directly, but those files are heavily bloated compared to yours. Also, is there a way to remove the ssh binaries entirely?

@ThompsonNJ
Copy link
Author

As an update to this, it seems like we might be able to download your layer and reupload it, but since our account does not have cross-account permissions, we would have to do this in a roundabout way. If we end up being able to go that route, would we just upload this zip file to a layer ourselves?
https://github.com/lambci/git-lambda-layer/blob/master/lambda2/layer.zip

I think our preferred route is still what I posted in the original question though. Ideally, we would like to download the binarys ourselves.

@ThompsonNJ
Copy link
Author

As an update to this, it seems like we might be able to download your layer and reupload it, but since our account does not have cross-account permissions, we would have to do this in a roundabout way.

Did a test for this and I was able to use your layer but was having VPC issues with the git clone. To learn more about how the layer worked, I used awscli to download your layer and reupload it. However, it seems to work completely differently than referencing your layer directly by arn.

I keep getting an error saying "git" is not recognized as a command. I could eventually fix this by into /opts/bin, but I don't understand how you are able to just access /tmp in this way and it works without issues. Do you know why your layer is being put into /tmp?

@ThompsonNJ
Copy link
Author

ThompsonNJ commented Apr 3, 2022

Did a test for this and I was able to use your layer but was having VPC issues with the git clone. To learn more about how the layer worked, I used awscli to download your layer and reupload it. However, it seems to work completely differently than referencing your layer directly by arn.

I was able to get the git clone working just by providing a proxy config to the git command and was able to get the same functionality as your layer just by uploading the zip file exactly as it was downloaded.

I keep getting an error saying "git" is not recognized as a command. I could eventually fix this by into /opts/bin, but I don't understand how you are able to just access /tmp in this way and it works without issues. Do you know why your layer is being put into /tmp?

I misunderstood what your code was doing. After looking into the defaults /opts/bin and /opts/lib, I realized my layer extracted to a subfolder. It looks like even unzipping and zipping without any edits causes some of the files to be corrupted due to Windows so I had some issues around there. I ended up figuring all the above out except for how you are creating the original layer.

Is this the only thing you're doing to get the git files?
yum install -y git
Zipping them up, then uploading them?

@nenadn-arnica
Copy link

nenadn-arnica commented Aug 24, 2022

I did this successfully some time ago, it's not difficult to do so.

I believe the image that I used was amd64/amazonlinux(uname -m needs to say x86_64, not aarch64 or whatever it is)

Start the docker container with the image above and run the commands below.

Here are the commands I ran, though if you execute them 1 by 1 they might not work, but regardless, you can see what the goal is from the commands:

  • yum install -y git zip which
  • mkdir myfolder
  • cd myfolder
  • mkdir bin etc lib libexec share
  • cd ..
  • cp -r /usr/bin/git* /usr/bin/fips* /usr/bin/scp /usr/bin/sftp /usr/bin/slogin /usr/bin/ssh* /usr/bin/xmlwf myfolder/bin/
  • cp -r /etc/alternatives/ /etc/pki /etc/prelink.conf.d/ /etc/ssh/ /etc/libaudit.conf myfolder/etc/
  • cp -r /usr/libexec/git-core/ /usr/libexec/openssh/ myfolder/libexec/
  • cp -r /usr/share/git-core/ /usr/share/licenses/ myfolder/share/
  • cp -r /usr/lib64/fipscheck/ /usr/lib64/nss/ /usr/lib64/lib* myfolder/lib
  • cd myfolder
  • mkdir lib64
  • cd ..
  • cp -r /usr/lib64/libpcre2-8.so.0 /myfolder/lib64/
  • cd myfolder
  • zip -yr ../layer.zip .

You can now copy the layer.zip file from the container to your host (google how to do that).

Now the lambda itself needs an env var:
GIT_EXEC_PATH: /opt/libexec/git-core (this tells git where to look for the binary or something like that)

When you do git clone, you need to specify a template, --template=/opt/share/git-core/templates
Example: git clone --template=/opt/share/git-core/templates https://github.com/aneagoie/background-generator.git

If you're pushing, you need to setup the git config stuff yourself
Note: I didn't setup the git config to be global because I got the error: fatal: $HOME not set

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