(fix) deleted unnescessary scripts, converted installation to binary method

This commit is contained in:
root 2024-12-10 05:08:06 -08:00
parent 10fc60f4bc
commit 5fd43a04ff
7 changed files with 146 additions and 259 deletions

View File

@ -16,18 +16,19 @@ A comprehensive toolkit for managing NixOS containers in Proxmox VE. This reposi
## Quick Installation ## Quick Installation
```bash ```bash
curl -sSf https://git.jeirslab.xyz/jeirmeister/NixOS-PVE-Deployment-Util/raw/branch/main/setup.sh | bash curl -sSf https://git.jeirslab.xyz/jeirmeister/NixOS-PVE-LXC/raw/branch/main/setup.sh | bash
``` ```
## What It Does ## What It Does
The installation script will: The installation script will:
1. Install required dependencies (git) 1. Install required dependencies (git)
2. Clone/update the configuration repository 2. Clone/update the configuration repository to `/root/.nixos-utils`
3. Detect available NixOS containers 3. Install the configuration utility system-wide
4. Apply optimized configuration settings 4. Detect and list available NixOS containers
5. Configure proper LXC terminal access 5. Apply optimized configuration settings
6. Set up system maintenance tasks 6. Configure proper LXC terminal access
7. Set up system maintenance tasks
## Manual Installation ## Manual Installation
@ -49,10 +50,8 @@ cd NixOS-PVE-LXC
│ ├── network.nix # Network configuration │ ├── network.nix # Network configuration
│ └── users.nix # User and SSH settings │ └── users.nix # User and SSH settings
└── scripts/ # Utility scripts └── scripts/ # Utility scripts
├── list-lxcs.sh # Container detection ├── get-latest.sh # Download latest NixOS builds
├── mount-nixos-config.sh # Configuration deployment └── post-deploy.sh # Post-deployment tasks
├── rebuild-nixos.sh # System rebuild
└── setup-lxc-terminal.sh # Terminal setup
``` ```
## Features in Detail ## Features in Detail
@ -84,6 +83,10 @@ cd NixOS-PVE-LXC
Contributions are welcome! Please feel free to submit pull requests or create issues for bugs and feature requests. Contributions are welcome! Please feel free to submit pull requests or create issues for bugs and feature requests.
## License
MIT License - See LICENSE.md for details
## Note ## Note
Always review scripts before running them with curl. You can inspect all source code at the repository. Always review scripts before running them with curl. You can inspect all source code at the repository.

View File

@ -1,49 +0,0 @@
#!/bin/bash
# ANSI color codes
BLUE='\033[0;34m'
RED='\033[0;31m'
NC='\033[0m'
# Array to store valid CTIDs
declare -a valid_ctids
echo -e "${BLUE}Available NixOS Containers:${NC}"
printf "%-8s %s\n" "VMID" "Name"
echo "----------------"
# Populate the list and store valid CTIDs
for conf in /etc/pve/lxc/*.conf; do
if grep -q "^ostype: nixos" "$conf"; then
vmid=$(basename "$conf" .conf)
name=$(grep "^hostname:" "$conf" | cut -d' ' -f2)
printf "%-8s %s\n" "$vmid" "$name"
valid_ctids+=("$vmid")
fi
done
if [ ${#valid_ctids[@]} -eq 0 ]; then
echo -e "${RED}No NixOS containers found!${NC}" >&2
exit 1
fi
# Ask for user input
echo -e "\nEnter the CTID of the container you want to configure:"
read -r selected_ctid
# Validate input
valid=0
for ctid in "${valid_ctids[@]}"; do
if [ "$ctid" = "$selected_ctid" ]; then
valid=1
break
fi
done
if [ $valid -eq 0 ]; then
echo -e "${RED}Error: Invalid CTID selected!${NC}" >&2
exit 1
fi
# Output the selected CTID for use in other scripts
echo "$selected_ctid"

View File

@ -1,39 +0,0 @@
#!/bin/bash
set -e
if [ -z "$1" ]; then
echo "Usage: $0 <container_id>"
exit 1
fi
CTID="$1"
CONFIG_FILE="/etc/pve/lxc/${CTID}.conf"
MOUNT_POINT="/root/nixos-config-${CTID}"
NIX_CONFIG_DIR="./nix-config"
if [ ! -d "$NIX_CONFIG_DIR" ]; then
echo "Error: nix-config directory not found"
exit 1
fi
# Parse container config and mount
echo "Parsing container configuration..."
ROOTFS_LINE=$(grep "^rootfs:" "$CONFIG_FILE")
VOLUME_NAME=$(echo "$ROOTFS_LINE" | sed 's/rootfs: local-lvm:\([^,]*\).*/\1/')
DEVICE_PATH="/dev/pve/${VOLUME_NAME}"
echo "Creating mount point..."
mkdir -p "$MOUNT_POINT"
echo "Mounting container filesystem..."
mount "$DEVICE_PATH" "$MOUNT_POINT"
echo "Copying NixOS configuration..."
mkdir -p "${MOUNT_POINT}/etc/nixos"
cp -r ${NIX_CONFIG_DIR}/* "${MOUNT_POINT}/etc/nixos/"
echo "Unmounting container filesystem..."
umount "$MOUNT_POINT"
rmdir "$MOUNT_POINT"
echo "Configuration files copied successfully"

124
scripts/nixos-pve-config Normal file
View File

@ -0,0 +1,124 @@
#!/bin/bash
set -e
# ANSI color codes
BLUE='\033[0;34m'
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'
# Function to list and select NixOS containers
list_nixos_containers() {
declare -a valid_ctids
echo -e "${BLUE}Available NixOS Containers:${NC}"
printf "%-8s %s\n" "VMID" "Name"
echo "----------------"
for conf in /etc/pve/lxc/*.conf; do
if grep -q "^ostype: nixos" "$conf"; then
vmid=$(basename "$conf" .conf)
name=$(grep "^hostname:" "$conf" | cut -d' ' -f2)
printf "%-8s %s\n" "$vmid" "$name"
valid_ctids+=("$vmid")
fi
done
if [ ${#valid_ctids[@]} -eq 0 ]; then
echo -e "${RED}No NixOS containers found!${NC}" >&2
return 1
fi
echo -e "\nEnter the CTID of the container you want to configure:"
read -r selected_ctid
for ctid in "${valid_ctids[@]}"; do
if [ "$ctid" = "$selected_ctid" ]; then
echo "$selected_ctid"
return 0
fi
done
echo -e "${RED}Error: Invalid CTID selected!${NC}" >&2
return 1
}
# Function to setup LXC terminal
setup_lxc_terminal() {
local CTID="$1"
local PVE_CONFIG="/etc/pve/lxc/${CTID}.conf"
local LXC_CONFIG="/var/lib/lxc/${CTID}/config"
update_config_line "$PVE_CONFIG" "lxc.init_cmd:" "lxc.init_cmd: /run/current-system/sw/bin/bash"
update_config_line "$PVE_CONFIG" "cmode:" "cmode: shell"
update_config_line "$LXC_CONFIG" "lxc.init.cmd" "lxc.init.cmd = /run/current-system/sw/bin/bash"
update_config_line "$LXC_CONFIG" "lxc.environment = TERM" "lxc.environment = TERM=linux"
update_config_line "$LXC_CONFIG" "lxc.environment = PATH" "lxc.environment = PATH=/run/current-system/sw/bin"
}
# Function to update config lines
update_config_line() {
local file="$1"
local search="$2"
local replace="$3"
if [ -f "$file" ]; then
if ! grep -q "^${search}" "$file"; then
echo "${replace}" >> "$file"
else
sed -i "s|^${search}.*|${replace}|" "$file"
fi
fi
}
# Function to mount and copy configs
mount_nixos_config() {
local CTID="$1"
local MOUNT_POINT="/root/nixos-config-${CTID}"
local CONFIG_FILE="/etc/pve/lxc/${CTID}.conf"
ROOTFS_LINE=$(grep "^rootfs:" "$CONFIG_FILE")
VOLUME_NAME=$(echo "$ROOTFS_LINE" | sed 's/rootfs: local-lvm:\([^,]*\).*/\1/')
DEVICE_PATH="/dev/pve/${VOLUME_NAME}"
mkdir -p "$MOUNT_POINT"
mount "$DEVICE_PATH" "$MOUNT_POINT"
mkdir -p "${MOUNT_POINT}/etc/nixos"
cp -r "${REPO_DIR}/nix-config/"* "${MOUNT_POINT}/etc/nixos/"
umount "$MOUNT_POINT"
rmdir "$MOUNT_POINT"
}
# Main execution
if [ "$(id -u)" -ne 0 ]; then
echo -e "${RED}This script must be run as root${NC}"
exit 1
fi
# Setup repository
REPO_DIR="/root/.nixos-utils"
if [ -d "$REPO_DIR" ]; then
cd "$REPO_DIR"
git pull
else
git clone https://git.jeirslab.xyz/jeirmeister/NixOS-PVE-LXC.git "$REPO_DIR"
cd "$REPO_DIR"
fi
# Select and configure container
CTID=$(list_nixos_containers)
if [ -z "$CTID" ]; then
echo -e "${RED}No container ID was selected${NC}"
exit 1
fi
echo -e "${GREEN}Selected container: $CTID${NC}"
echo -e "\nConfiguring NixOS container $CTID..."
setup_lxc_terminal "$CTID"
mount_nixos_config "$CTID"
echo "Rebuilding NixOS configuration..."
pct exec ${CTID} -- nix-channel --update
pct exec ${CTID} -- nixos-rebuild switch -I nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos -I nixos-config=/etc/nixos/configuration.nix
echo -e "${GREEN}NixOS container $CTID has been configured successfully!${NC}"

View File

@ -1,17 +0,0 @@
#!/bin/bash
set -e
if [ -z "$1" ]; then
echo "Usage: $0 <container_id>"
exit 1
fi
CTID="$1"
echo "Updating channels..."
pct exec ${CTID} -- nix-channel --update
echo "Rebuilding NixOS configuration..."
pct exec ${CTID} -- nixos-rebuild switch -I nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos -I nixos-config=/etc/nixos/configuration.nix
echo "NixOS rebuild completed successfully"

View File

@ -1,37 +0,0 @@
#!/bin/bash
set -e
if [ -z "$1" ]; then
echo "Usage: $0 <container_id>"
exit 1
fi
CTID="$1"
# Function to add or update line in config file
update_config_line() {
local file="$1"
local search="$2"
local replace="$3"
if [ -f "$file" ]; then
if ! grep -q "^${search}" "$file"; then
echo "${replace}" >> "$file"
else
sed -i "s|^${search}.*|${replace}|" "$file"
fi
fi
}
# Update Proxmox LXC config
PVE_CONFIG="/etc/pve/lxc/${CTID}.conf"
update_config_line "$PVE_CONFIG" "lxc.init_cmd:" "lxc.init_cmd: /run/current-system/sw/bin/bash"
update_config_line "$PVE_CONFIG" "cmode:" "cmode: shell"
# Update LXC system config
LXC_CONFIG="/var/lib/lxc/${CTID}/config"
update_config_line "$LXC_CONFIG" "lxc.init.cmd" "lxc.init.cmd = /run/current-system/sw/bin/bash"
update_config_line "$LXC_CONFIG" "lxc.environment = TERM" "lxc.environment = TERM=linux"
update_config_line "$LXC_CONFIG" "lxc.environment = PATH" "lxc.environment = PATH=/run/current-system/sw/bin"
echo "LXC terminal configuration updated successfully"

116
setup.sh
View File

@ -1,124 +1,26 @@
#!/bin/bash #!/bin/bash
set -e set -e
# ANSI color codes # Check if running as root
BLUE='\033[0;34m'
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'
# Function to list and select NixOS containers
list_nixos_containers() {
declare -a valid_ctids
echo -e "${BLUE}Available NixOS Containers:${NC}"
printf "%-8s %s\n" "VMID" "Name"
echo "----------------"
for conf in /etc/pve/lxc/*.conf; do
if grep -q "^ostype: nixos" "$conf"; then
vmid=$(basename "$conf" .conf)
name=$(grep "^hostname:" "$conf" | cut -d' ' -f2)
printf "%-8s %s\n" "$vmid" "$name"
valid_ctids+=("$vmid")
fi
done
if [ ${#valid_ctids[@]} -eq 0 ]; then
echo -e "${RED}No NixOS containers found!${NC}" >&2
return 1
fi
echo -e "\nEnter the CTID of the container you want to configure:"
read -r selected_ctid
for ctid in "${valid_ctids[@]}"; do
if [ "$ctid" = "$selected_ctid" ]; then
echo "$selected_ctid"
return 0
fi
done
echo -e "${RED}Error: Invalid CTID selected!${NC}" >&2
return 1
}
# Function to setup LXC terminal
setup_lxc_terminal() {
local CTID="$1"
local PVE_CONFIG="/etc/pve/lxc/${CTID}.conf"
local LXC_CONFIG="/var/lib/lxc/${CTID}/config"
update_config_line "$PVE_CONFIG" "lxc.init_cmd:" "lxc.init_cmd: /run/current-system/sw/bin/bash"
update_config_line "$PVE_CONFIG" "cmode:" "cmode: shell"
update_config_line "$LXC_CONFIG" "lxc.init.cmd" "lxc.init.cmd = /run/current-system/sw/bin/bash"
update_config_line "$LXC_CONFIG" "lxc.environment = TERM" "lxc.environment = TERM=linux"
update_config_line "$LXC_CONFIG" "lxc.environment = PATH" "lxc.environment = PATH=/run/current-system/sw/bin"
}
# Function to update config lines
update_config_line() {
local file="$1"
local search="$2"
local replace="$3"
if [ -f "$file" ]; then
if ! grep -q "^${search}" "$file"; then
echo "${replace}" >> "$file"
else
sed -i "s|^${search}.*|${replace}|" "$file"
fi
fi
}
# Function to mount and copy configs
mount_nixos_config() {
local CTID="$1"
local MOUNT_POINT="/root/nixos-config-${CTID}"
local CONFIG_FILE="/etc/pve/lxc/${CTID}.conf"
ROOTFS_LINE=$(grep "^rootfs:" "$CONFIG_FILE")
VOLUME_NAME=$(echo "$ROOTFS_LINE" | sed 's/rootfs: local-lvm:\([^,]*\).*/\1/')
DEVICE_PATH="/dev/pve/${VOLUME_NAME}"
mkdir -p "$MOUNT_POINT"
mount "$DEVICE_PATH" "$MOUNT_POINT"
mkdir -p "${MOUNT_POINT}/etc/nixos"
cp -r "${REPO_DIR}/nix-config/"* "${MOUNT_POINT}/etc/nixos/"
umount "$MOUNT_POINT"
rmdir "$MOUNT_POINT"
}
# Main execution
if [ "$(id -u)" -ne 0 ]; then if [ "$(id -u)" -ne 0 ]; then
echo -e "${RED}This script must be run as root${NC}" echo -e "${RED}This script must be run as root${NC}"
exit 1 exit 1
fi fi
# Setup repository # Install mode
INSTALL_DIR="/usr/local/bin"
REPO_DIR="/root/.nixos-utils" REPO_DIR="/root/.nixos-utils"
# Clone/update repository
if [ -d "$REPO_DIR" ]; then if [ -d "$REPO_DIR" ]; then
cd "$REPO_DIR" cd "$REPO_DIR"
git pull git pull
else else
git clone https://git.jeirslab.xyz/jeirmeister/NixOS-PVE-LXC.git "$REPO_DIR" git clone https://git.jeirslab.xyz/jeirmeister/NixOS-PVE-LXC.git "$REPO_DIR"
cd "$REPO_DIR"
fi fi
# Select and configure container # Install the configuration script
CTID=$(list_nixos_containers) ln -sf "$REPO_DIR/scripts/nixos-pve-config" "${INSTALL_DIR}/nixos-pve-config"
if [ -z "$CTID" ]; then chmod +x "${INSTALL_DIR}/nixos-pve-config"
echo -e "${RED}No container ID was selected${NC}"
exit 1
fi
echo -e "${GREEN}Selected container: $CTID${NC}" echo "Installation complete. Run 'nixos-pve-config' to configure containers."
echo -e "\nConfiguring NixOS container $CTID..."
setup_lxc_terminal "$CTID"
mount_nixos_config "$CTID"
echo "Rebuilding NixOS configuration..."
pct exec ${CTID} -- nix-channel --update
pct exec ${CTID} -- nixos-rebuild switch -I nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos -I nixos-config=/etc/nixos/configuration.nix
echo -e "${GREEN}NixOS container $CTID has been configured successfully!${NC}"