base-debian refactor
This commit is contained in:
parent
752824afa0
commit
087eee8ca7
@ -1,39 +1,39 @@
|
|||||||
ARG VARIANT="bookworm"
|
ARG VARIANT="trixie"
|
||||||
FROM debian:${VARIANT}
|
FROM debian:${VARIANT}
|
||||||
|
|
||||||
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
|
ENV TERM=xterm-256color
|
||||||
&& apt-get -y install --no-install-recommends \
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
ca-certificates \
|
|
||||||
zsh \
|
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends \
|
||||||
vim \
|
# basics
|
||||||
tmux \
|
git wget locales ca-certificates sudo \
|
||||||
curl \
|
# utils
|
||||||
unzip \
|
tree jq \
|
||||||
git \
|
&& apt-get autoremove -y \
|
||||||
python3 \
|
&& apt-get clean -y \
|
||||||
build-essential \
|
|
||||||
libssl-dev \
|
|
||||||
sudo \
|
|
||||||
&& apt-get clean \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Set up UTF-8 locale
|
||||||
|
RUN localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
|
||||||
|
ENV LANG=en_US.UTF-8
|
||||||
|
ENV LC_ALL=en_US.UTF-8
|
||||||
|
ENV LC_CTYPE=en_US.UTF-8
|
||||||
|
|
||||||
|
ARG WORKSPACE_DIR="/workspace"
|
||||||
ARG USERNAME=dev
|
ARG USERNAME=dev
|
||||||
ARG USER_UID=1000
|
ARG UID=1000
|
||||||
ARG USER_GID=$USER_UID
|
ARG GID=1000
|
||||||
|
|
||||||
RUN groupadd --gid $USER_GID $USERNAME \
|
RUN groupadd -g ${GID} ${USERNAME} \
|
||||||
&& useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \
|
&& useradd -u ${UID} -g ${GID} -m -s /bin/zsh ${USERNAME} \
|
||||||
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
|
&& echo "${USERNAME} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
|
||||||
&& chmod 0440 /etc/sudoers.d/$USERNAME
|
|
||||||
|
|
||||||
RUN mkdir /workspace && chown -R $USERNAME:$USERNAME /workspace
|
RUN mkdir -p ${WORKSPACE_DIR} && chown ${USERNAME}:${USERNAME} ${WORKSPACE_DIR}
|
||||||
USER $USERNAME
|
WORKDIR ${WORKSPACE_DIR}
|
||||||
|
|
||||||
RUN git clone https://gitea.tomastm.com/tomas.mirchev/dotfiles.git ~/.dotfiles
|
USER ${USERNAME}
|
||||||
RUN ~/.dotfiles/install.sh
|
|
||||||
|
|
||||||
SHELL ["/bin/zsh", "-c"]
|
COPY install-packages.sh /tmp/install-packages.sh
|
||||||
WORKDIR /workspace
|
RUN sudo chmod +x /tmp/install-packages.sh && /tmp/install-packages.sh && sudo rm /tmp/install-packages.sh
|
||||||
ENV w=/workspace
|
|
||||||
|
|
||||||
CMD ["zsh"]
|
CMD ["zsh"]
|
||||||
|
|||||||
52
base-debian/install-packages.sh
Normal file
52
base-debian/install-packages.sh
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
sudo apt-get update && sudo apt-get install -y --no-install-recommends \
|
||||||
|
luarocks curl unzip ripgrep fd-find \
|
||||||
|
python3 build-essential
|
||||||
|
|
||||||
|
# Install Tree-sitter and Neovim
|
||||||
|
ARCH=$(dpkg --print-architecture)
|
||||||
|
TREE_SITTER_VERSION="0.25.2"
|
||||||
|
NVIM_VERSION="0.10.4"
|
||||||
|
|
||||||
|
if [[ "$ARCH" == "arm64" ]]; then
|
||||||
|
TREE_SITTER_URL="https://github.com/tree-sitter/tree-sitter/releases/download/v${TREE_SITTER_VERSION}/tree-sitter-linux-arm64.gz"
|
||||||
|
NVIM_URL="https://github.com/neovim/neovim/releases/download/v${NVIM_VERSION}/nvim-linux-arm64.tar.gz"
|
||||||
|
elif [[ "$ARCH" == "amd64" ]]; then
|
||||||
|
TREE_SITTER_URL="https://github.com/tree-sitter/tree-sitter/releases/download/v${TREE_SITTER_VERSION}/tree-sitter-linux-x64.gz"
|
||||||
|
NVIM_URL="https://github.com/neovim/neovim/releases/download/v${NVIM_VERSION}/nvim-linux-x86_64.tar.gz"
|
||||||
|
else
|
||||||
|
echo "Unsupported architecture: $ARCH"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Download and install Tree-sitter
|
||||||
|
echo "Installing Tree-sitter..."
|
||||||
|
wget -O /tmp/tree-sitter.gz "$TREE_SITTER_URL"
|
||||||
|
gzip -d /tmp/tree-sitter.gz
|
||||||
|
chmod +x /tmp/tree-sitter
|
||||||
|
sudo mv /tmp/tree-sitter /usr/local/bin/tree-sitter
|
||||||
|
|
||||||
|
# Download and install Neovim
|
||||||
|
echo "Installing Neovim..."
|
||||||
|
wget -O /tmp/nvim.tar.gz "$NVIM_URL"
|
||||||
|
sudo tar -xzf /tmp/nvim.tar.gz -C /opt
|
||||||
|
NVIM_DIR=$(find /opt -maxdepth 1 -type d -name "nvim-linux-*")
|
||||||
|
sudo ln -s "${NVIM_DIR}/bin/nvim" /usr/local/bin/nvim
|
||||||
|
rm /tmp/nvim.tar.gz
|
||||||
|
|
||||||
|
git clone https://gitea.tomastm.com/tomas.mirchev/dotfiles.git $HOME/.dotfiles
|
||||||
|
cd $HOME/.dotfiles
|
||||||
|
echo $(pwd)
|
||||||
|
echo $(ls -a)
|
||||||
|
python3 manage.py install linux-dev
|
||||||
|
python3 manage.py link linux-dev --copy --force
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
rm -rf $HOME/.dotfiles
|
||||||
|
# sudo apt-get purge -y build-essential python3
|
||||||
|
sudo apt-get autoremove -y
|
||||||
|
sudo apt-get clean -y
|
||||||
|
sudo rm -rf /var/lib/apt/lists/*
|
||||||
54
build-image.sh
Executable file
54
build-image.sh
Executable file
@ -0,0 +1,54 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
echo "Usage: $0 <image-name>"
|
||||||
|
echo "Example: $0 base-debian"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
IMAGE_NAME=${1:-base-debian}
|
||||||
|
echo "Building Docker image: $IMAGE_NAME"
|
||||||
|
|
||||||
|
REPO="registry.tomastm.com"
|
||||||
|
TAG_LATEST="latest"
|
||||||
|
|
||||||
|
BUILD_DIR="./${IMAGE_NAME}"
|
||||||
|
|
||||||
|
if [ ! -d "${BUILD_DIR}" ]; then
|
||||||
|
echo "❌ Error: Directory '${BUILD_DIR}' does not exist."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
UID=$(id -u)
|
||||||
|
GID=$(id -g)
|
||||||
|
|
||||||
|
COMMIT_ID=$(git rev-parse --short HEAD)
|
||||||
|
|
||||||
|
IMAGE_LATEST="${REPO}/${IMAGE_NAME}:${TAG_LATEST}"
|
||||||
|
IMAGE_COMMIT="${REPO}/${IMAGE_NAME}:${COMMIT_ID}"
|
||||||
|
|
||||||
|
docker build \
|
||||||
|
-t ${IMAGE_COMMIT} \
|
||||||
|
--no-cache \
|
||||||
|
--build-arg UID=${UID} \
|
||||||
|
--build-arg GID=${GID} \
|
||||||
|
${BUILD_DIR}
|
||||||
|
|
||||||
|
docker tag ${IMAGE_COMMIT} ${IMAGE_LATEST}
|
||||||
|
|
||||||
|
echo "✅ Successfully built and tagged:"
|
||||||
|
echo " 📌 ${IMAGE_COMMIT}"
|
||||||
|
echo " 🔄 ${IMAGE_LATEST}"
|
||||||
|
|
||||||
|
read -p "🚀 Do you want to push the image to ${REPO}? (y/N): " PUSH_CONFIRM
|
||||||
|
if [[ "$PUSH_CONFIRM" =~ ^[Yy]$ ]]; then
|
||||||
|
echo "📤 Pushing images..."
|
||||||
|
docker push ${IMAGE_COMMIT}
|
||||||
|
docker push ${IMAGE_LATEST}
|
||||||
|
echo "✅ Successfully pushed images to ${REPO}"
|
||||||
|
else
|
||||||
|
echo "ℹ️ Skipping push. You can manually push later with:"
|
||||||
|
echo " docker push ${IMAGE_COMMIT}"
|
||||||
|
echo " docker push ${IMAGE_LATEST}"
|
||||||
|
fi
|
||||||
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
docker build -t web-stack \
|
|
||||||
--no-cache \
|
|
||||||
--build-arg UID=$(id -u) \
|
|
||||||
--build-arg GID=$(id -g) .
|
|
||||||
Loading…
Reference in New Issue
Block a user