initial revision
This commit is contained in:
commit
009bff7106
37
.build.yml
Normal file
37
.build.yml
Normal file
@ -0,0 +1,37 @@
|
||||
image: alpine/edge
|
||||
|
||||
secrets:
|
||||
- 0ee986ff-5686-43cd-ac3a-1fe5b2e5dd8f
|
||||
- f523ee29-5ef8-490f-8903-43ad7c49060b
|
||||
- 130adee5-3a8f-4035-8cad-e3d044be2961
|
||||
|
||||
sources:
|
||||
- https://git.sr.ht/~jswank/alpine-cli
|
||||
|
||||
packages:
|
||||
- podman
|
||||
- just
|
||||
- runit
|
||||
|
||||
tasks:
|
||||
# cgroups need to be running in order to run podman
|
||||
- prep: |
|
||||
sudo rc-service cgroups start
|
||||
sleep 1
|
||||
|
||||
# build the image using the just recipe
|
||||
# - sudo (-u root) is required to run podman without more setup
|
||||
- build: |
|
||||
cd alpine-cli
|
||||
sudo --preserve-env just build
|
||||
|
||||
# publish the image using the just recipe
|
||||
# - set environment variables from the ~/.envdir directory. see
|
||||
# http://smarden.org/runit/chpst.8.html for details on chpst
|
||||
# - sudo (-u root) is required to run podman without more setup
|
||||
# - sudo --preserve-env is required to pass environment variables
|
||||
- publish: |
|
||||
cd alpine-cli
|
||||
chpst -e ~/.envdir sudo --preserve-env just registry_pass_var=GH_PAT publish
|
||||
chpst -e ~/.envdir sudo --preserve-env just registry=docker.io registry_pass_var=DH_PAT publish
|
||||
chpst -e ~/.envdir sudo --preserve-env just registry=quay.io registry_pass_var=QUAY_PAT publish
|
||||
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.env
|
||||
26
Dockerfile
Normal file
26
Dockerfile
Normal file
@ -0,0 +1,26 @@
|
||||
FROM public.ecr.aws/amazonlinux/amazonlinux:2023
|
||||
|
||||
LABEL org.opencontainers.image.title=jswank/aws-cli \
|
||||
org.opencontainers.image.description="A minimal image for running AWS CLI " \
|
||||
org.opencontainers.image.url=https://git.sr.ht/~jswank/aws-cli \
|
||||
org.opencontainers.image.authors="Jason Swank" \
|
||||
org.opencontainers.image.licenses=MIT
|
||||
|
||||
RUN yum install -y --allowerasing \
|
||||
coreutils shadow-utils \
|
||||
less which \
|
||||
sudo vim-minimal \
|
||||
aws-cli && \
|
||||
yum clean all
|
||||
|
||||
RUN adduser -r --create-home --shell /bin/bash --groups wheel cli
|
||||
|
||||
RUN echo "%wheel ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/00-all-wheel-np
|
||||
|
||||
COPY --chown=cli:cli home /home/cli
|
||||
|
||||
WORKDIR /home/cli
|
||||
|
||||
USER cli
|
||||
|
||||
CMD ["/bin/bash", "-l"]
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2023 Jason Swank
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
5
NOTICE
Normal file
5
NOTICE
Normal file
@ -0,0 +1,5 @@
|
||||
THIRD PARTY SOFTWARE NOTICES AND INFORMATION
|
||||
Do Not Translate or Localize
|
||||
|
||||
This software incorporates material from third parties.
|
||||
---
|
||||
77
README.md
Normal file
77
README.md
Normal file
@ -0,0 +1,77 @@
|
||||
# aws-cli
|
||||
|
||||
A minimal image for running the AWS CLI based on Amazon Linux 2023. This is
|
||||
useful for interactive purposes or as the basis for other utility images.
|
||||
|
||||
* [Quickstart](#quickstart)
|
||||
* [More Info](#more-info)
|
||||
* [Available Images](#available-images)
|
||||
* [Helper Script](#helper-script)
|
||||
* [License](#license)
|
||||
|
||||
## Quickstart
|
||||
```console
|
||||
$ docker run -ti --rm ghcr.io/jswank/aws-cli:2023
|
||||
~ $ ^D
|
||||
exit
|
||||
|
||||
$ bin/cli
|
||||
~ $ ^D
|
||||
exit
|
||||
```
|
||||
|
||||
## More Info
|
||||
|
||||
The image is based on *aws:3*, with a small amount of additional
|
||||
setup/installation done. See the [Dockerfile](Dockerfile) and [ctx/home](ctx)
|
||||
for the specifics.
|
||||
|
||||
- Some basic utilities are installed for interative and script-based shell usage
|
||||
- A user is created with sudo (`-u root`) access.
|
||||
- A few personal preferences are enabled via dotfiles.
|
||||
|
||||
## Available Images
|
||||
|
||||
See ghcr.io/jswank/aws-cli for current available images.
|
||||
|
||||
|
||||
## Helper Script
|
||||
|
||||
A helper script, using [casey/just](https://github.com/casey/just') is in
|
||||
[bin/cli](bin/cli). It can be used to quickly start an ephemeral (or
|
||||
persistent) container.
|
||||
|
||||
```console
|
||||
$ bin/cli help
|
||||
|
||||
Available recipes:
|
||||
clean # Remove the persistent container
|
||||
default # Invoke the 'run' recipe
|
||||
help recipe="help" # Display this listing. Detailed help is available with 'help recipe_name'.
|
||||
persist # Run (or attach to) a persistent container
|
||||
pull # Pull the latest version of the image
|
||||
restart # Remove a running container, and run the default recipe
|
||||
run # Run an ephemeral container.
|
||||
save i=image # Save the running container as a new image
|
||||
|
||||
|
||||
$ bin/cli
|
||||
~ $ ^D
|
||||
exit
|
||||
|
||||
$ bin/cli persist
|
||||
~ $ ls
|
||||
~ $
|
||||
exit
|
||||
|
||||
$ podman cp foo.json cli:/home/cli # copy a file to the persistent container
|
||||
|
||||
$ bin/cli persist
|
||||
~ $ ls
|
||||
foo.json
|
||||
~ $ ^D
|
||||
exit
|
||||
```
|
||||
|
||||
## License
|
||||
MIT
|
||||
70
bin/cli
Executable file
70
bin/cli
Executable file
@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env -S just --working-directory . --justfile
|
||||
|
||||
image := "jswank/aws-cli"
|
||||
n := "aws-cli"
|
||||
|
||||
# Invoke the 'run' recipe
|
||||
default: run
|
||||
|
||||
# Usage: run
|
||||
#
|
||||
# Start a shell in an ephemeral container.
|
||||
#
|
||||
# Examples:
|
||||
# cli run
|
||||
#
|
||||
# Run an ephemeral container.
|
||||
@run:
|
||||
docker run -ti --userns=keep-id --rm {{image}}
|
||||
|
||||
# Usage: persist
|
||||
#
|
||||
# Start a shell in a persistent container.
|
||||
#
|
||||
# Examples:
|
||||
# cli persist
|
||||
#
|
||||
# Run (or attach to) a persistent container
|
||||
persist:
|
||||
#!/bin/sh
|
||||
if [ $(docker ps --all --filter name="^{{n}}$" -q | wc -l) -gt 0 ]; then
|
||||
docker start -i -a {{n}}
|
||||
else
|
||||
docker run -ti --userns=keep-id --name {{n}} {{image}}
|
||||
fi
|
||||
|
||||
# Pull the latest version of the image
|
||||
@pull:
|
||||
docker pull {{image}} >/dev/null 2>&1
|
||||
|
||||
# Remove the persistent container
|
||||
@clean:
|
||||
docker rm -f {{n}} >/dev/null 2>&1
|
||||
|
||||
# Usage: save [new_image_name]
|
||||
#
|
||||
# Sometimes you want a quick snapshot of your work in progress. Use this target
|
||||
# to create an image based on the running container.
|
||||
#
|
||||
# Examples:
|
||||
# cli save foo` - saves the current (persistent) container as a new image
|
||||
# named "foo"
|
||||
# ` cli save - saves the current (persistent) container as a new
|
||||
# default image
|
||||
#
|
||||
# Save the running container as a new image
|
||||
save i=image:
|
||||
docker commit -q {{n}} {{i}} >/dev/null 2>&1
|
||||
|
||||
# Remove a running container, and run the default recipe
|
||||
@restart: clean default
|
||||
|
||||
# Display this listing. Detailed help is available with 'help recipe_name'.
|
||||
help recipe="help":
|
||||
#!/bin/sh
|
||||
if [ "{{recipe}}" = "help" ]; then
|
||||
just --list --justfile {{justfile()}}
|
||||
else
|
||||
grep -B 32 -E '^@?{{recipe}}\s?.*:' {{justfile()}} \
|
||||
| tac | awk 'NR==1 {print; next}; !/^#/{exit}1;' | tac
|
||||
fi
|
||||
1
ctx/home/.exrc
Normal file
1
ctx/home/.exrc
Normal file
@ -0,0 +1 @@
|
||||
set tabstop=4
|
||||
1
ctx/home/.inputrc
Normal file
1
ctx/home/.inputrc
Normal file
@ -0,0 +1 @@
|
||||
set editing-mode vi
|
||||
8
ctx/home/.profile
Normal file
8
ctx/home/.profile
Normal file
@ -0,0 +1,8 @@
|
||||
export LANG=en_US.UTF-8
|
||||
export EDITOR=vi
|
||||
export VISUAL=${EDITOR}
|
||||
export PAGER=less
|
||||
export LESS=RX # R for ANSI color sequences, X to not clear screen on exit
|
||||
export TMPDIR=/var/tmp
|
||||
export PS1="\w $ "
|
||||
export PATH=${PATH}:~/.local/bin
|
||||
21
justfile
Normal file
21
justfile
Normal file
@ -0,0 +1,21 @@
|
||||
set dotenv-load
|
||||
|
||||
tag := `grep ^FROM Dockerfile | cut -d: -f2`
|
||||
image := "jswank/aws-cli"
|
||||
|
||||
registry := "ghcr.io"
|
||||
registry_user := "jswank"
|
||||
|
||||
# this environment variable will be passed to podman login as the password
|
||||
registry_pass_var := "REGISTRY_PASSWORD"
|
||||
|
||||
# build a new image
|
||||
build flags="":
|
||||
podman build -t {{image}}:{{tag}} {{flags}} -f Dockerfile ctx
|
||||
|
||||
# publish the image
|
||||
publish alt_tag=tag:
|
||||
@ podman tag {{image}}:{{tag}} {{registry}}/{{image}}:{{alt_tag}}
|
||||
@ echo "${{ registry_pass_var }}" | podman login {{registry}} -u {{registry_user}} --password-stdin
|
||||
@ podman push {{registry}}/{{image}}:{{alt_tag}}
|
||||
@ podman logout {{registry}}
|
||||
Loading…
Reference in New Issue
Block a user