Adding sources.
This commit is contained in:
40
Dockerfile
Normal file
40
Dockerfile
Normal file
@@ -0,0 +1,40 @@
|
||||
FROM ubuntu:24.04
|
||||
|
||||
# Add essential packages
|
||||
RUN apt-get update && apt-get upgrade -y && apt-get install -y curl jq gpg software-properties-common apt-transport-https ca-certificates
|
||||
|
||||
# Install Terraform
|
||||
RUN curl -sL https://apt.releases.hashicorp.com/gpg | gpg --dearmor -o - > /usr/share/keyrings/hashicorp-archive-keyring.gpg
|
||||
RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com noble main" > /etc/apt/sources.list.d/hashicorp.list
|
||||
RUN apt-get update && apt-get install -y terraform
|
||||
RUN cat <<EOF > /etc/bash_completion.d/terraform
|
||||
complete -C /usr/bin/terraform terraform
|
||||
EOF
|
||||
|
||||
# Install Azure CLI
|
||||
RUN curl -sL -o /tmp/packages-microsoft-prod.deb https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb && \
|
||||
dpkg -i /tmp/packages-microsoft-prod.deb && rm -f /tmp/packages-microsoft-prod.deb
|
||||
|
||||
RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/repos/azure-cli/ noble main" > /etc/apt/sources.list.d/azure-cli.list
|
||||
RUN apt-get update && apt-get install -y azure-cli
|
||||
|
||||
# Configure Bash
|
||||
RUN cat <<'EOF' >> /etc/bash.bashrc
|
||||
if [ -f /usr/lib/git-core/git-sh-prompt ]; then
|
||||
source /usr/lib/git-core/git-sh-prompt
|
||||
|
||||
# Then PS1 can include __git_ps1 which is optimized and shows branch + state:
|
||||
PS1='\[\e[32m\]\u@\h\[\e[0m\]:\[\e[34m\]\w\[\e[0m\]\[\e[33m\]$(__git_ps1 " (%s)")\[\e[0m\]\$ '
|
||||
fi
|
||||
|
||||
export PATH=$HOME/bin:$PATH
|
||||
EOF
|
||||
|
||||
# Add more packages (keep it last to optimize layer caching)
|
||||
RUN apt-get install -y zip unzip tree wget nano neovim \
|
||||
python3 python3-venv python3-pip
|
||||
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
61
azure-cli
Executable file
61
azure-cli
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case $1 in
|
||||
--account|-a)
|
||||
ACCOUNT_NAME="$2"
|
||||
shift 2
|
||||
;;
|
||||
--user|-u)
|
||||
USERNAME="$2"
|
||||
shift 2
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
IMAGE_NAME="skoszewski/azure-cli:latest"
|
||||
|
||||
# Normalize account name for use in volume name
|
||||
ACCOUNT_NAME="${ACCOUNT_NAME:-$(id -un)}"
|
||||
ACCOUNT_NAME="${ACCOUNT_NAME/@/_at_}"
|
||||
ACCOUNT_NAME="${ACCOUNT_NAME//[-.]/_}"
|
||||
USERNAME="${USERNAME:-ubuntu}"
|
||||
|
||||
# Find container runtime
|
||||
if command -v podman &> /dev/null; then
|
||||
CMD="podman"
|
||||
HOSTNAME_ARG="--hostname $(hostname -s)"
|
||||
elif command -v docker &> /dev/null; then
|
||||
CMD="docker"
|
||||
HOSTNAME_ARG="--hostname $(hostname -s)"
|
||||
elif command -v container &> /dev/null; then
|
||||
# Apple container command line tool
|
||||
CMD="container"
|
||||
HOSTNAME_ARG=""
|
||||
else
|
||||
echo "Error: No usable container runtime was found." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check, if the account volume exists, if not create it
|
||||
# This ensures persistent storage for the Azure CLI configuration
|
||||
if ! $CMD volume inspect "account_$ACCOUNT_NAME" &> /dev/null; then
|
||||
echo "Creating volume account_$ACCOUNT_NAME for Azure CLI configuration."
|
||||
if ! $CMD volume create "account_$ACCOUNT_NAME" &> /dev/null; then
|
||||
echo "Error: Failed to create volume account_$ACCOUNT_NAME." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Run the container
|
||||
$CMD run --rm -it \
|
||||
-v "account_$ACCOUNT_NAME":/home/${USERNAME} \
|
||||
-v $(pwd):/workdir \
|
||||
--name "azure-cli" \
|
||||
$HOSTNAME_ARG \
|
||||
--workdir /workdir \
|
||||
"$@" \
|
||||
$IMAGE_NAME
|
||||
17
build
Executable file
17
build
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Find container runtime
|
||||
if command -v podman &> /dev/null; then
|
||||
CMD="podman"
|
||||
elif command -v docker &> /dev/null; then
|
||||
CMD="docker"
|
||||
elif command -v container &> /dev/null; then
|
||||
# Apple container command line tool
|
||||
CMD="container"
|
||||
else
|
||||
echo "Error: No usable container runtime was found." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Using container runtime: $CMD"
|
||||
$CMD build -t skoszewski/azure-cli:latest .
|
||||
43
entrypoint.sh
Normal file
43
entrypoint.sh
Normal file
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# Let's set some defaults
|
||||
SU_USER="ubuntu"
|
||||
|
||||
# Parse command line arguments
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-u|--user)
|
||||
SU_USER="$2"
|
||||
shift 2
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Check if the user exists
|
||||
if ! id -u "$SU_USER" >/dev/null 2>&1; then
|
||||
useradd -m "$SU_USER"
|
||||
fi
|
||||
|
||||
# Check if the home directory exists
|
||||
if [ ! -d "/home/$SU_USER" ]; then
|
||||
echo "A home directory for $SU_USER does not exist. Exiting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check user ownership of the home directory
|
||||
if [ "$(stat -c '%u' /home/$SU_USER)" -ne "$(id -u $SU_USER)" ]; then
|
||||
# Change ownership of the home directory
|
||||
chown $SU_USER:$SU_USER /home/$SU_USER
|
||||
fi
|
||||
|
||||
# Switch to the specified user
|
||||
if [ $# -gt 0 ]; then
|
||||
exec su $SU_USER -c "$@"
|
||||
else
|
||||
exec su $SU_USER
|
||||
fi
|
||||
Reference in New Issue
Block a user