moving everything to active or retired vs incubating and graduated
All checks were successful
Reese's Arch Toolbox / build-and-push-arch-toolbox (push) Successful in 14s
All checks were successful
Reese's Arch Toolbox / build-and-push-arch-toolbox (push) Successful in 14s
This commit is contained in:
30
active/software_distoolbox/arch-build.sh
Executable file
30
active/software_distoolbox/arch-build.sh
Executable file
@@ -0,0 +1,30 @@
|
||||
#!/bin/bash
|
||||
|
||||
COMMAND_PREFIX=""
|
||||
|
||||
# If you haven't already, read up on setting the docker context to use podman as the backend.
|
||||
# TL;DR
|
||||
# systemctl --user enable --now podman.socket
|
||||
# docker context create podman --docker host=unix://$XDG_RUNTIME_DIR/podman/podman.sock
|
||||
# docker context use podman
|
||||
|
||||
export DEBUG_TAG="debug-$(date +"%s")"
|
||||
|
||||
podman image pull podman.io/archlinux:latest
|
||||
|
||||
# Run the build for the CPU image
|
||||
podman build \
|
||||
-t gitea.reeseapps.com/services/arch-toolbox:$DEBUG_TAG \
|
||||
-f ./active/software_distoolbox/arch-toolbox.containerfile \
|
||||
--target cpu \
|
||||
--load \
|
||||
--no-cache \
|
||||
./active/software_distoolbox
|
||||
|
||||
# Run the build for the AMD gpu image
|
||||
podman build \
|
||||
-t gitea.reeseapps.com/services/arch-toolbox-amdgpu:$DEBUG_TAG \
|
||||
-f ./active/software_distoolbox/arch-toolbox.containerfile \
|
||||
--target amdgpu \
|
||||
--load \
|
||||
.active/software_distoolbox
|
||||
@@ -0,0 +1,27 @@
|
||||
# Default values for useradd(8)
|
||||
#
|
||||
# The SHELL variable specifies the default login shell on your
|
||||
# system.
|
||||
SHELL=/bin/zsh
|
||||
|
||||
# The default group for users
|
||||
GROUP=users
|
||||
|
||||
# The default home directory.
|
||||
HOME=/home
|
||||
|
||||
# The number of days after a password expires until the account is permanently
|
||||
# disabled
|
||||
INACTIVE=-1
|
||||
|
||||
# The default expire date
|
||||
EXPIRE=
|
||||
|
||||
# The SKEL variable specifies the directory containing "skeletal" user files;
|
||||
# in other words, files such as a sample .profile that will be copied to the
|
||||
# new user's home directory when it is created.
|
||||
SKEL=/etc/skel
|
||||
|
||||
# Defines whether the mail spool should be created while
|
||||
# creating the account
|
||||
CREATE_MAIL_SPOOL=no
|
||||
@@ -0,0 +1 @@
|
||||
set-option -g default-shell "/bin/zsh"
|
||||
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
kill $(cat /tmp/ollama.pid)
|
||||
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
tail -f /tmp/ollama.log
|
||||
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
ollama serve &> /tmp/ollama.log &
|
||||
OLLAMA_PID=$!
|
||||
echo $OLLAMA_PID > /tmp/ollama.pid
|
||||
@@ -0,0 +1,38 @@
|
||||
# History
|
||||
HISTFILE=~/.zsh_history
|
||||
HISTSIZE=10000
|
||||
SAVEHIST=10000
|
||||
setopt appendhistory
|
||||
|
||||
# Basic settings
|
||||
autoload bashcompinit && bashcompinit
|
||||
autoload -U compinit; compinit
|
||||
zstyle ':completion:*' menu select
|
||||
|
||||
# Prompt settings
|
||||
autoload -Uz promptinit
|
||||
promptinit
|
||||
PROMPT_EOL_MARK=
|
||||
|
||||
# Syntax Highlighting
|
||||
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
|
||||
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
|
||||
|
||||
### Custom Commands and Aliases ###
|
||||
|
||||
# Local bin PATH
|
||||
export PATH="$HOME/.local/bin:$HOME/.local/scripts:$PATH"
|
||||
|
||||
# Fix for Ansible
|
||||
export LC_ALL="C.UTF-8"
|
||||
|
||||
# AWS
|
||||
complete -C '/usr/local/bin/aws_completer' aws
|
||||
|
||||
# Go puts binaries here
|
||||
export PATH="$PATH:$(go env GOBIN):$(go env GOPATH)/bin"
|
||||
|
||||
# Calculate all folder sizes in current dir
|
||||
alias {dudir,dud}='du -h --max-depth 1 | sort -h'
|
||||
# Calculate all file sizes in current dir
|
||||
alias {dufile,duf}='ls -lhSr'
|
||||
163
active/software_distoolbox/arch-toolbox.containerfile
Normal file
163
active/software_distoolbox/arch-toolbox.containerfile
Normal file
@@ -0,0 +1,163 @@
|
||||
# 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 \
|
||||
# Visual Studio Code editor
|
||||
code \
|
||||
# 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
|
||||
|
||||
####################
|
||||
##### 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
|
||||
1
active/software_distoolbox/bump.txt
Normal file
1
active/software_distoolbox/bump.txt
Normal file
@@ -0,0 +1 @@
|
||||
1
|
||||
150
active/software_distoolbox/distoolbox.md
Normal file
150
active/software_distoolbox/distoolbox.md
Normal file
@@ -0,0 +1,150 @@
|
||||
# Distoolbox
|
||||
|
||||
Distrobox? Toolbox? Whatever you want.
|
||||
|
||||
- [Distoolbox](#distoolbox)
|
||||
- [Reese's Arch Distoolbox](#reeses-arch-distoolbox)
|
||||
- [Using Reese's Arch Toolbox](#using-reeses-arch-toolbox)
|
||||
- [Integrating distoolbox into your workflow](#integrating-distoolbox-into-your-workflow)
|
||||
- [Aliases using Distrobox](#aliases-using-distrobox)
|
||||
- [Aliases using Toolbox](#aliases-using-toolbox)
|
||||
- [Building Reese's Arch Toolbox](#building-reeses-arch-toolbox)
|
||||
- [Distrobox Notes](#distrobox-notes)
|
||||
|
||||
## Reese's Arch Distoolbox
|
||||
|
||||
### Using Reese's Arch Toolbox
|
||||
|
||||
Head to <https://gitea.reeseapps.com/services/-/packages> and pick the CPU
|
||||
image or AMD GPU image.
|
||||
|
||||
If you can't decide pick the CPU image.
|
||||
|
||||
The GPU image was built and tested with a Framework 16 with 7700s GPU module.
|
||||
|
||||
Click the image and copy the tag (should be something like:
|
||||
2a421392b1bde168973a0c7ac8be05a6ffa1c48a)
|
||||
|
||||
Next you need [distrobox](https://distrobox.it/) or
|
||||
[toolbox](https://docs.fedoraproject.org/en-US/fedora-silverblue/toolbox/).
|
||||
Both are good options.
|
||||
|
||||
If you don't know whether to use distrobox or toolbox:
|
||||
|
||||
- If you're on Fedora, and you haven't used either, toolbox is built-in
|
||||
- If you understand toolbox and you've never used distrobox, try distrobox
|
||||
- If you understand distrobox and you've never used toolbox, try toolbox
|
||||
- If you care what I use: distrobox
|
||||
|
||||
Once you have toolbox or distrobox installed, try the following:
|
||||
|
||||
```bash
|
||||
export TBOX_REPO='gitea.reeseapps.com/services'
|
||||
export TBOX_IMAGE='arch-toolbox'
|
||||
export TBOX_TAG=paste image tag copied above here
|
||||
export TBOX_NAME="$TBOX_IMAGE-$TBOX_TAG"
|
||||
|
||||
# With distrobox
|
||||
distrobox create --name $TBOX_NAME --image $TBOX_REPO/$TBOX_IMAGE:$TBOX_TAG
|
||||
distrobox enter $TBOX_NAME
|
||||
|
||||
# With toolbox
|
||||
toolbox create -i $TBOX_REPO/$TBOX_IMAGE:$TBOX_TAG
|
||||
SHELL=/bin/zsh toolbox enter $TBOX_NAME
|
||||
```
|
||||
|
||||
### Integrating distoolbox into your workflow
|
||||
|
||||
Copy the relevant aliases below into your `.bashrc`.
|
||||
|
||||
Run `ntbox` the first time to create a new toolbox.
|
||||
|
||||
Run `tbox` anytime you want to enter the toolbox.
|
||||
|
||||
Run `rtbox` to delete the toolbox.
|
||||
|
||||
#### Aliases using Distrobox
|
||||
|
||||
Add the following to your `.bashrc`
|
||||
|
||||
```bash
|
||||
# Reese's Toolbox Commands
|
||||
export TBOX_REPO='gitea.reeseapps.com/services'
|
||||
|
||||
# NOTE: Uncomment one of the below for either the amdgpu or cpu image
|
||||
# export TBOX_IMAGE='arch-toolbox'
|
||||
# export TBOX_IMAGE='arch-toolbox-amdgpu'
|
||||
|
||||
export TBOX_TAG=paste image tag copied above here
|
||||
export TBOX_NAME="$TBOX_IMAGE-$TBOX_TAG"
|
||||
|
||||
# Creates a new toolbox
|
||||
alias ntbox="distrobox create --name $TBOX_NAME --image $TBOX_REPO/$TBOX_IMAGE:$TBOX_TAG"
|
||||
# Enters the toolbox when you want to use it, you'll be running this all the time
|
||||
alias tbox="distrobox enter $TBOX_NAME"
|
||||
# Removes the toolbox
|
||||
alias rtbox="distrobox stop $TBOX_NAME --yes && podman container rm $TBOX_NAME"
|
||||
```
|
||||
|
||||
#### Aliases using Toolbox
|
||||
|
||||
```bash
|
||||
# Reese's Toolbox Commands
|
||||
export TBOX_REPO='gitea.reeseapps.com/services'
|
||||
|
||||
# NOTE: Uncomment one of the below for either the amdgpu or cpu image
|
||||
# export TBOX_IMAGE='arch-toolbox'
|
||||
# export TBOX_IMAGE='arch-toolbox-amdgpu'
|
||||
|
||||
export TBOX_TAG='latest'
|
||||
export TBOX_NAME="$TBOX_IMAGE-$TBOX_TAG"
|
||||
|
||||
# Creates a new toolbox
|
||||
alias ntbox="toolbox create -i $TBOX_REPO/$TBOX_IMAGE:$TBOX_TAG"
|
||||
# Enters the toolbox when you want to use it, you'll be running this all the time
|
||||
alias tbox="SHELL=/bin/zsh toolbox enter $TBOX_NAME"
|
||||
# Removes the toolbox
|
||||
alias rtbox="podman container stop $TBOX_NAME && podman container rm $TBOX_NAME"
|
||||
```
|
||||
|
||||
## Building Reese's Arch Toolbox
|
||||
|
||||
You can build and run the image with the `arch-build.sh` script (See `Containerfile` in this directory):
|
||||
|
||||
```bash
|
||||
./active/software_distoolbox/arch-build.sh
|
||||
```
|
||||
|
||||
In vscode you can set this as your default build task for homelab and trigger it with
|
||||
`ctrl shift B`
|
||||
|
||||
.vscode/tasks.json
|
||||
|
||||
```json
|
||||
{
|
||||
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||
// for the documentation about the tasks.json format
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Build arch-toolbox",
|
||||
"type": "shell",
|
||||
"command": "./active/software_distoolbox/arch-build.sh",
|
||||
"problemMatcher": [],
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Distrobox Notes
|
||||
|
||||
<https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-create.md>
|
||||
|
||||
```bash
|
||||
# --init creates a separate systemd environment. You won't be able to access the system's host processes.
|
||||
distrobox create -i docker.io/library/debian --name test-debian
|
||||
```
|
||||
Reference in New Issue
Block a user