182 lines
6.0 KiB
Docker
182 lines
6.0 KiB
Docker
# Dockerfile for an Arch Linux Toolbox environment with a variety of development and utility tools.
|
|
|
|
###########################
|
|
##### CPU Image #####
|
|
###########################
|
|
|
|
# Base image using the latest version from quay.io/toolbx/arch-toolbox.
|
|
FROM docker.io/archlinux:latest AS cpu
|
|
|
|
########################
|
|
##### Pacman #####
|
|
########################
|
|
|
|
# Enable multilib support by appending it to /etc/pacman.conf.
|
|
RUN tee -a /etc/pacman.conf <<EOF
|
|
[multilib]
|
|
Include = /etc/pacman.d/mirrorlist
|
|
EOF
|
|
|
|
# Set the architecture for Pacman manually to x86_64 since automatic detection might not work properly.
|
|
RUN sed -i 's/^Architecture = auto/Architecture = x86_64/' /etc/pacman.conf
|
|
|
|
# Sync repository databases.
|
|
RUN pacman -Syu --noconfirm
|
|
|
|
# Install a variety of commonly used tools and utilities using Pacman.
|
|
RUN pacman -S --noconfirm \
|
|
# A powerful shell with syntax highlighting, autosuggestions, and more.
|
|
zsh \
|
|
# Utility to find which packages own files or directories in the system.
|
|
pkgfile \
|
|
# Advanced text editor for code editing and other tasks.
|
|
vim \
|
|
# DNS name resolver
|
|
bind \
|
|
# Network bandwidth measuring tool.
|
|
iperf3 \
|
|
# Command-line interface for managing Kubernetes clusters.
|
|
kubectl \
|
|
# Package manager and deployment tool for Kubernetes.
|
|
helm \
|
|
# Utility to monitor real-time network usage of processes.
|
|
nethogs \
|
|
# Python programming language interpreter, pip package manager, and pipx for isolated package management.
|
|
python python-pip python-pipx \
|
|
# DevOps configuration management tool.
|
|
ansible \
|
|
# Terminal multiplexer.
|
|
tmux \
|
|
# Multimedia player with support for a wide range of codecs and file formats.
|
|
ffmpeg \
|
|
# Microsoft Windows compatibility layer.
|
|
wine \
|
|
# Container engine providing an interface that works similarly to Docker but is container format-agnostic.
|
|
podman \
|
|
# Docker compatibility. We won't be using the daemon unless you want to.
|
|
docker docker-compose docker-buildx \
|
|
# Archive utility similar to GNU tar, used to package files into single archive files.
|
|
unzip \
|
|
# An open source version of cat(1) with syntax highlighting and Git integration.
|
|
bat \
|
|
# A terminal activity monitor (top clone).
|
|
btop \
|
|
# Command-line JSON processor.
|
|
jq \
|
|
# YAML-based configuration-as-code tool for command-line interfaces written in Go, Rust, Python, and more.
|
|
yq \
|
|
# An image manipulation software suite based on ImageMagick.
|
|
imagemagick \
|
|
# Cross-platform JavaScript runtime built for developing the server-side of web applications.
|
|
nodejs npm \
|
|
# The Go programming language environment including a toolchain (gc) and libraries.
|
|
go \
|
|
# Rust package manager and compiler installation utility.
|
|
rust rustup \
|
|
# Distributed version control system, Git extension that adds support for large files like multimedia assets.
|
|
git-lfs \
|
|
# Provides traditional network tools such as ifconfig, netstat, hostname, etc., in a single package.
|
|
net-tools \
|
|
# A cross-platform system monitor that works similarly to htop(1).
|
|
glances \
|
|
# Network manager tool
|
|
networkmanager \
|
|
# Document conversion tool and markup language converter.
|
|
pandoc \
|
|
# Comprehensive LaTeX distribution for high-quality typesetting of documents.
|
|
texlive-latex texlive-latexextra texlive-latexrecommended texlive-binextra texlive-fontsrecommended texlive-fontsextra \
|
|
# Python static type checker and code formatter.
|
|
ruff \
|
|
# Generate strong passwords.
|
|
pwgen \
|
|
# Custom keyboard c onfiguration
|
|
qmk \
|
|
# libmemcachd for python projects
|
|
libmemcached-awesome \
|
|
# For distrobox
|
|
systemd \
|
|
# Code build
|
|
make gcc \
|
|
# makepkg support
|
|
base-devel \
|
|
# Fonts, so you never have to think about them again
|
|
noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra \
|
|
# Reattach to running processes
|
|
reptyr \
|
|
# Netcat, for basic tcp/udp operations
|
|
openbsd-netcat \
|
|
# 7zip support
|
|
7zip
|
|
|
|
########################
|
|
##### Extra Apps #####
|
|
########################
|
|
|
|
# Install oh-my-zsh
|
|
|
|
RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
|
|
|
|
# Install AWS CLI version 2.
|
|
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
|
|
unzip -qq awscliv2.zip && \
|
|
./aws/install && \
|
|
rm awscliv2.zip && \
|
|
rm -rf aws
|
|
|
|
# Install yt-dlp, a command-line program for downloading YouTube videos.
|
|
RUN curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/youtube-dlp && \
|
|
chmod a+rx /usr/local/bin/youtube-dlp
|
|
|
|
#################
|
|
##### AUR #####
|
|
#################
|
|
|
|
# Create build user and switch to build home dir
|
|
RUN useradd -m build
|
|
RUN echo "build ALL = (root) NOPASSWD: $(which pacman)" >> /etc/sudoers
|
|
WORKDIR /home/build
|
|
USER build
|
|
|
|
# Install VSCode
|
|
RUN git clone https://aur.archlinux.org/visual-studio-code-bin.git && \
|
|
cd visual-studio-code-bin && \
|
|
makepkg -si --noconfirm && \
|
|
cd .. && \
|
|
rm -rf visual-studio-code-bin
|
|
|
|
# Switch back to root user
|
|
USER root
|
|
WORKDIR /
|
|
|
|
####################
|
|
##### COPIES #####
|
|
####################
|
|
|
|
# Copy tmux.conf to configure tmux in the container.
|
|
COPY arch-toolbox-supporting-files/arch-toolbox-tmux.conf /etc/tmux.conf
|
|
|
|
# Copy useradd to set default shell
|
|
COPY arch-toolbox-supporting-files/arch-toolbox-default-useradd /etc/default/useradd
|
|
|
|
#####################
|
|
##### AMD GPU #####
|
|
#####################
|
|
|
|
FROM cpu AS amdgpu
|
|
|
|
# Install ROCM Drivers
|
|
RUN pacman -S --noconfirm rocm-hip-sdk rocm-opencl-sdk
|
|
|
|
# Install Ollama, an AI language model application.
|
|
RUN curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz && \
|
|
tar -C /usr -xzf ollama-linux-amd64.tgz && \
|
|
rm ollama-linux-amd64.tgz
|
|
|
|
# Install Ollama AMD drivers
|
|
RUN curl -L https://ollama.com/download/ollama-linux-amd64-rocm.tgz -o ollama-linux-amd64-rocm.tgz && \
|
|
tar -C /usr -xzf ollama-linux-amd64-rocm.tgz && \
|
|
rm ollama-linux-amd64-rocm.tgz
|
|
|
|
# Set up ollama-server and ollama-kill scripts
|
|
COPY arch-toolbox-supporting-files/ollama-* /usr/local/bin/
|
|
RUN chmod -R +x /usr/local/bin |