(feat): drastic improvements to automation of LXC configuration with scaffolding in place for automating VM and LXC build downloads
This commit is contained in:
parent
98a055da3e
commit
e071937cf1
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
repo-to*
|
||||||
|
build/
|
16
.repo-to-text-settings.yaml
Normal file
16
.repo-to-text-settings.yaml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# Details: https://github.com/kirill-markin/repo-to-text
|
||||||
|
# Syntax: gitignore rules
|
||||||
|
|
||||||
|
# Ignore files and directories for all sections from gitignore file
|
||||||
|
# Default: True
|
||||||
|
gitignore-import-and-ignore: True
|
||||||
|
|
||||||
|
# Ignore files and directories for tree
|
||||||
|
# and "Contents of ..." sections
|
||||||
|
ignore-tree-and-content:
|
||||||
|
- ".repo-to-text-settings.yaml"
|
||||||
|
|
||||||
|
# Ignore files and directories for "Contents of ..." section
|
||||||
|
ignore-content:
|
||||||
|
- "README.md"
|
||||||
|
- "LICENSE"
|
@ -1,122 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Function to display usage
|
|
||||||
usage() {
|
|
||||||
echo "Usage: $0 <container_id> --ssh-key <ssh_key> --ip <ip_address> --gateway <gateway> --user <username>"
|
|
||||||
echo " <container_id>: ID of the container (100-999)"
|
|
||||||
echo " --ssh-key: SSH public key for the user"
|
|
||||||
echo " --ip: IP address for the container"
|
|
||||||
echo " --gateway: Gateway IP address"
|
|
||||||
echo " --user: Username for the admin user (default: admin)"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to validate IP address format
|
|
||||||
validate_ip() {
|
|
||||||
if [[ $1 =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Parse command-line arguments
|
|
||||||
CTID=$1
|
|
||||||
shift
|
|
||||||
|
|
||||||
while [[ $# -gt 0 ]]; do
|
|
||||||
case $1 in
|
|
||||||
--ssh-key) SSH_KEY="$2"; shift 2 ;;
|
|
||||||
--ip) IP_ADDRESS="$2"; shift 2 ;;
|
|
||||||
--gateway) GATEWAY="$2"; shift 2 ;;
|
|
||||||
--user) USERNAME="$2"; shift 2 ;;
|
|
||||||
*) echo "Unknown option: $1"; usage ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# Validate inputs
|
|
||||||
[[ ! $CTID =~ ^[1-9][0-9]{2}$ ]] && { echo "Error: Invalid container ID"; usage; }
|
|
||||||
[[ -z $SSH_KEY ]] && { echo "Error: SSH key is required"; usage; }
|
|
||||||
[[ -z $IP_ADDRESS ]] && { echo "Error: IP address is required"; usage; }
|
|
||||||
[[ -z $GATEWAY ]] && { echo "Error: Gateway is required"; usage; }
|
|
||||||
validate_ip "$IP_ADDRESS" || { echo "Error: Invalid IP address"; usage; }
|
|
||||||
validate_ip "$GATEWAY" || { echo "Error: Invalid gateway"; usage; }
|
|
||||||
USERNAME=${USERNAME:-admin}
|
|
||||||
|
|
||||||
# Function to generate NixOS configuration
|
|
||||||
generate_nixos_config() {
|
|
||||||
cat << EOF
|
|
||||||
{ modulesPath, config, pkgs, ... }:
|
|
||||||
{
|
|
||||||
imports = [ "\${modulesPath}/virtualisation/lxc-container.nix" ];
|
|
||||||
boot.isContainer = true;
|
|
||||||
|
|
||||||
systemd.suppressedSystemUnits = [
|
|
||||||
"dev-mqueue.mount"
|
|
||||||
"sys-kernel-debug.mount"
|
|
||||||
"sys-fs-fuse-connections.mount"
|
|
||||||
];
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [ openssh binutils man git ];
|
|
||||||
|
|
||||||
users.users.${USERNAME} = {
|
|
||||||
isNormalUser = true;
|
|
||||||
extraGroups = [ "wheel" ];
|
|
||||||
openssh.authorizedKeys.keys = [ "${SSH_KEY}" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
security.sudo.wheelNeedsPassword = false;
|
|
||||||
|
|
||||||
programs.nix-ld.enable = true;
|
|
||||||
|
|
||||||
services.openssh = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
AllowUsers = ["${USERNAME}"];
|
|
||||||
PasswordAuthentication = false;
|
|
||||||
PermitRootLogin = "no";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
networking = {
|
|
||||||
dhcpcd.enable = false;
|
|
||||||
useDHCP = false;
|
|
||||||
useHostResolvConf = false;
|
|
||||||
defaultGateway = "${GATEWAY}";
|
|
||||||
nameservers = [ "8.8.8.8" "8.8.4.4" ];
|
|
||||||
interfaces.eth0.ipv4.addresses = [{
|
|
||||||
address = "${IP_ADDRESS}";
|
|
||||||
prefixLength = 24;
|
|
||||||
}];
|
|
||||||
};
|
|
||||||
|
|
||||||
system.stateVersion = "24.05";
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
# Main execution
|
|
||||||
if ! pct status "$CTID" >/dev/null 2>&1; then
|
|
||||||
echo "Error: Container $CTID does not exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
CONFIG_CONTENT=$(generate_nixos_config)
|
|
||||||
|
|
||||||
pct start ${CTID}
|
|
||||||
sleep 10
|
|
||||||
|
|
||||||
pct enter ${CTID} << EOF
|
|
||||||
/run/current-system/sw/bin/bash << 'INNEREOF'
|
|
||||||
export PATH=/run/current-system/sw/bin:/nix/var/nix/profiles/default/bin:/run/current-system/sw/bin:\$PATH
|
|
||||||
source /etc/profile
|
|
||||||
mkdir -p /etc/nixos
|
|
||||||
cat > /etc/nixos/configuration.nix << 'CONFIGEOF'
|
|
||||||
${CONFIG_CONTENT}
|
|
||||||
CONFIGEOF
|
|
||||||
nixos-rebuild switch
|
|
||||||
INNEREOF
|
|
||||||
EOF
|
|
||||||
|
|
||||||
echo "Configuration applied successfully!"
|
|
@ -1,64 +0,0 @@
|
|||||||
{ modulesPath, config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports =
|
|
||||||
[
|
|
||||||
# Default path for lxc/lxd configuration
|
|
||||||
"${modulesPath}/virtualisation/lxc-container.nix"
|
|
||||||
];
|
|
||||||
boot.isContainer = true;
|
|
||||||
|
|
||||||
systemd.suppressedSystemUnits = [
|
|
||||||
"dev-mqueue.mount"
|
|
||||||
"sys-kernel-debug.mount"
|
|
||||||
"sys-fs-fuse-connections.mount"
|
|
||||||
];
|
|
||||||
|
|
||||||
# Essential packages
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
openssh
|
|
||||||
binutils
|
|
||||||
man
|
|
||||||
git
|
|
||||||
];
|
|
||||||
|
|
||||||
# Administrative sudo user
|
|
||||||
users.users.admin = {
|
|
||||||
isNormalUser = true;
|
|
||||||
extraGroups = [ "wheel" ]; # wheel group is sudo access
|
|
||||||
};
|
|
||||||
|
|
||||||
security.sudo.wheelNeedsPassword = true;
|
|
||||||
|
|
||||||
# Facilitates access via VS Code Remote Explorer
|
|
||||||
programs.nix-ld.enable = true;
|
|
||||||
|
|
||||||
# Enable password-based SSH login for admin user
|
|
||||||
services.openssh = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
AllowUsers = ["admin"]; # everyone
|
|
||||||
PasswordAuthentication = true;
|
|
||||||
PermitRootLogin = "no";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
networking = {
|
|
||||||
dhcpcd.enable = false;
|
|
||||||
useDHCP = false;
|
|
||||||
useHostResolvConf = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.network = {
|
|
||||||
enable = true;
|
|
||||||
networks."50-eth0" = {
|
|
||||||
matchConfig.Name = "eth0";
|
|
||||||
networkConfig = {
|
|
||||||
DHCP = "ipv4";
|
|
||||||
IPv6AcceptRA = true;
|
|
||||||
};
|
|
||||||
linkConfig.RequiredForOnline = "routable";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
system.stateVersion = "24.05"; # Did you read the comment?
|
|
||||||
}
|
|
42
nix-config/configuration.nix
Normal file
42
nix-config/configuration.nix
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
{ modulesPath, config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./lxc.nix
|
||||||
|
./users.nix
|
||||||
|
./network.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# Nix settings
|
||||||
|
nix = {
|
||||||
|
settings = {
|
||||||
|
auto-optimise-store = true;
|
||||||
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
|
allowed-users = [ "@wheel" ];
|
||||||
|
};
|
||||||
|
gc = {
|
||||||
|
automatic = true;
|
||||||
|
dates = "weekly";
|
||||||
|
options = "--delete-older-than 30d";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Allow unfree packages
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
# Set NIX_PATH
|
||||||
|
nix.nixPath = [
|
||||||
|
"nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos"
|
||||||
|
"nixos-config=/etc/nixos/configuration.nix"
|
||||||
|
"/nix/var/nix/profiles/per-user/root/channels"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Auto upgrades
|
||||||
|
system.autoUpgrade = {
|
||||||
|
enable = true;
|
||||||
|
dates = "04:00";
|
||||||
|
randomizedDelaySec = "45min";
|
||||||
|
persistent = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
system.stateVersion = "24.05";
|
||||||
|
}
|
23
nix-config/lxc.nix
Normal file
23
nix-config/lxc.nix
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{ modulesPath, config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
"${modulesPath}/virtualisation/lxc-container.nix"
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.isContainer = true;
|
||||||
|
|
||||||
|
systemd.suppressedSystemUnits = [
|
||||||
|
"dev-mqueue.mount"
|
||||||
|
"sys-kernel-debug.mount"
|
||||||
|
"sys-fs-fuse-connections.mount"
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
openssh
|
||||||
|
binutils
|
||||||
|
man
|
||||||
|
git
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.nix-ld.enable = true;
|
||||||
|
}
|
20
nix-config/network.nix
Normal file
20
nix-config/network.nix
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
networking = {
|
||||||
|
dhcpcd.enable = false;
|
||||||
|
useDHCP = false;
|
||||||
|
useHostResolvConf = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.network = {
|
||||||
|
enable = true;
|
||||||
|
networks."50-eth0" = {
|
||||||
|
matchConfig.Name = "eth0";
|
||||||
|
networkConfig = {
|
||||||
|
DHCP = "ipv4";
|
||||||
|
IPv6AcceptRA = true;
|
||||||
|
};
|
||||||
|
linkConfig.RequiredForOnline = "routable";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
20
nix-config/user-config.nix
Normal file
20
nix-config/user-config.nix
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{ modulesPath, config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Administrative sudo user
|
||||||
|
users.users.admin = {
|
||||||
|
isNormalUser = true;
|
||||||
|
extraGroups = [ "wheel" ]; # wheel group is sudo access
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable password-based SSH login for admin user
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
AllowUsers = ["admin"]; # everyone
|
||||||
|
PasswordAuthentication = true;
|
||||||
|
PermitRootLogin = "no";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
18
nix-config/users.nix
Normal file
18
nix-config/users.nix
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
users.users.nixos = {
|
||||||
|
isNormalUser = true;
|
||||||
|
extraGroups = [ "wheel" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
security.sudo.wheelNeedsPassword = true;
|
||||||
|
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
AllowUsers = ["nixos"];
|
||||||
|
PasswordAuthentication = true;
|
||||||
|
PermitRootLogin = "no";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
2
scripts/create.sh
Normal file
2
scripts/create.sh
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
TODO: Deploy lxc using user defined variables
|
||||||
|
TODO: Deploy vm using user defined variables
|
25
scripts/get-latest.sh
Normal file
25
scripts/get-latest.sh
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
IMAGE_TYPE="$1"
|
||||||
|
BASE_URL="https://hydra.nixos.org/job/nixos/release-24.11/nixos"
|
||||||
|
DOWNLOAD_DIR="./build"
|
||||||
|
|
||||||
|
if [ "$IMAGE_TYPE" = "VM" ]; then
|
||||||
|
DOWNLOAD_URL="${BASE_URL}.proxmoxImage.x86_64-linux/latest/download/1"
|
||||||
|
OUTPUT_FILE="${DOWNLOAD_DIR}/nixos_proxmox_vm.vma.zst"
|
||||||
|
elif [ "$IMAGE_TYPE" = "LXC" ]; then
|
||||||
|
DOWNLOAD_URL="${BASE_URL}.proxmoxLXC.x86_64-linux/latest/download/1"
|
||||||
|
OUTPUT_FILE="${DOWNLOAD_DIR}/nixos_proxmox_lxc.tar.xz"
|
||||||
|
else
|
||||||
|
echo "Error: Invalid image type. Must be 'VM' or 'LXC'" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
wget -q --show-progress -O "$OUTPUT_FILE" "$DOWNLOAD_URL"
|
||||||
|
EXIT_CODE=$?
|
||||||
|
|
||||||
|
if [ $EXIT_CODE -ne 0 ]; then
|
||||||
|
echo "Error: Download failed" >&2
|
||||||
|
rm -f "$OUTPUT_FILE"
|
||||||
|
exit $EXIT_CODE
|
||||||
|
fi
|
49
scripts/list-lxcs.sh
Normal file
49
scripts/list-lxcs.sh
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#!/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"
|
39
scripts/mount-nixos-config.sh
Normal file
39
scripts/mount-nixos-config.sh
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#!/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"
|
10
scripts/post-deploy.sh
Normal file
10
scripts/post-deploy.sh
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# ANSI color codes
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# Get primary IP address (excluding docker/vm interfaces)
|
||||||
|
IP_ADDRESS=$(ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v '^127\.' | head -n 1)
|
||||||
|
|
||||||
|
echo -e "${HOSTNAME} is now deployed at ${GREEN}${IP_ADDRESS}${NC}"
|
17
scripts/rebuild-nixos.sh
Normal file
17
scripts/rebuild-nixos.sh
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#!/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"
|
37
scripts/setup-lxc-terminal.sh
Normal file
37
scripts/setup-lxc-terminal.sh
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#!/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"
|
65
setup.sh
Executable file
65
setup.sh
Executable file
@ -0,0 +1,65 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# ANSI color codes
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
# Check if running as root
|
||||||
|
if [ "$(id -u)" -ne 0 ]; then
|
||||||
|
echo -e "${RED}This script must be run as root${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check and install git if needed
|
||||||
|
if ! command -v git >/dev/null 2>&1; then
|
||||||
|
echo "Installing git..."
|
||||||
|
nix-env -i git
|
||||||
|
fi
|
||||||
|
|
||||||
|
REPO_DIR="/root/.nixos-utils"
|
||||||
|
|
||||||
|
# Clone or update repository
|
||||||
|
if [ -d "$REPO_DIR" ]; then
|
||||||
|
echo "Updating existing repository..."
|
||||||
|
cd "$REPO_DIR"
|
||||||
|
git pull
|
||||||
|
else
|
||||||
|
echo "Cloning repository..."
|
||||||
|
git clone https://git.jeirslab.xyz/jeirmeister/NixOS-PVE-LXC.git "$REPO_DIR"
|
||||||
|
cd "$REPO_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make scripts executable
|
||||||
|
echo "Making scripts executable..."
|
||||||
|
find ./scripts -name "*.sh" -execdir chmod u+x {} +
|
||||||
|
|
||||||
|
# Get CTID from list-lxcs.sh
|
||||||
|
echo -e "${BLUE}Detecting NixOS containers...${NC}"
|
||||||
|
CTID=$(./scripts/list-lxcs.sh)
|
||||||
|
|
||||||
|
if [ -z "$CTID" ]; then
|
||||||
|
echo -e "${RED}No container ID was selected${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${GREEN}Selected container: $CTID${NC}"
|
||||||
|
|
||||||
|
# Execute configuration steps in sequence
|
||||||
|
echo -e "\nConfiguring NixOS container $CTID..."
|
||||||
|
|
||||||
|
echo "Step 1: Setting up LXC terminal..."
|
||||||
|
./scripts/setup-lxc-terminal.sh "$CTID"
|
||||||
|
|
||||||
|
echo "Step 2: Mounting and copying NixOS configuration..."
|
||||||
|
./scripts/mount-nixos-config.sh "$CTID"
|
||||||
|
|
||||||
|
echo "Step 3: Rebuilding NixOS configuration..."
|
||||||
|
./scripts/rebuild-nixos.sh "$CTID"
|
||||||
|
|
||||||
|
echo "Step 4: Running post-deployment tasks..."
|
||||||
|
./scripts/post-deploy.sh
|
||||||
|
|
||||||
|
echo -e "${GREEN}NixOS container $CTID has been configured successfully!${NC}"
|
Loading…
Reference in New Issue
Block a user