fix: resolve systemd service pathing and environment issues in common.nix
This commit is contained in:
40
common.nix
40
common.nix
@@ -167,44 +167,41 @@ isoConfig // {
|
|||||||
wants = [ "network-online.target" ];
|
wants = [ "network-online.target" ];
|
||||||
script = ''
|
script = ''
|
||||||
export HOME=/home/workshop
|
export HOME=/home/workshop
|
||||||
|
export PATH="/run/current-system/sw/bin:/usr/bin:/bin"
|
||||||
# Wait for network and services with better testing
|
# Wait for network and services with better testing
|
||||||
echo "Waiting for services to start..."
|
echo "Waiting for services to start..."
|
||||||
for i in {1..30}; do
|
for i in {1..30}; do
|
||||||
# Test external connectivity
|
# Test external connectivity
|
||||||
if ${pkgs.curl}/bin/curl -s --max-time 3 google.com >/dev/null 2>&1; then
|
if /run/current-system/sw/bin/curl -s --max-time 3 google.com >/dev/null 2>&1; then
|
||||||
echo "✅ External network ready"
|
echo "✅ External network ready"
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
sleep 2
|
sleep 2
|
||||||
done
|
done
|
||||||
|
|
||||||
# Test DNS resolution specifically
|
# Test DNS resolution specifically
|
||||||
for i in {1..20}; do
|
for i in {1..20}; do
|
||||||
if ${pkgs.dnsutils}/bin/nslookup test.workshop.local 127.0.0.1 >/dev/null 2>&1; then
|
if /run/current-system/sw/bin/nslookup test.workshop.local 127.0.0.1 >/dev/null 2>&1; then
|
||||||
echo "✅ Wildcard DNS ready"
|
echo "✅ Wildcard DNS ready"
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
echo "🔄 Waiting for DNS... (attempt $i)"
|
echo "🔄 Waiting for DNS... (attempt $i)"
|
||||||
sleep 2
|
sleep 2
|
||||||
done
|
done
|
||||||
|
|
||||||
# Test Docker
|
# Test Docker
|
||||||
for i in {1..10}; do
|
for i in {1..10}; do
|
||||||
if ${pkgs.docker}/bin/docker info >/dev/null 2>&1; then
|
if /run/current-system/sw/bin/docker info >/dev/null 2>&1; then
|
||||||
echo "✅ Docker ready"
|
echo "✅ Docker ready"
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
sleep 2
|
sleep 2
|
||||||
done
|
done
|
||||||
|
|
||||||
# Install abra for workshop user
|
# Install abra for workshop user
|
||||||
if [ ! -f /home/workshop/.local/bin/abra ]; then
|
if [ ! -f /home/workshop/.local/bin/abra ]; then
|
||||||
echo "🚀 Installing abra for user workshop..."
|
echo "🚀 Installing abra for user workshop..."
|
||||||
${pkgs.util-linux}/bin/su - workshop -c "mkdir -p /home/workshop/.local/bin"
|
/usr/bin/su - workshop -c "mkdir -p /home/workshop/.local/bin"
|
||||||
# Run installer and log output
|
# Run installer and log output
|
||||||
install_log="/tmp/abra-install.log"
|
install_log="/tmp/abra-install.log"
|
||||||
${pkgs.util-linux}/bin/su - workshop -c "bash -c \"cd /home/workshop && ${pkgs.curl}/bin/curl -fsSL https://install.abra.coopcloud.tech | bash\"" &> "$install_log"
|
/usr/bin/su - workshop -c "bash -c \"cd /home/workshop && /run/current-system/sw/bin/curl -fsSL https://install.abra.coopcloud.tech | bash\"" &> "$install_log"
|
||||||
if [ -f /home/workshop/.local/bin/abra ]; then
|
if [ -f /home/workshop/.local/bin/abra ]; then
|
||||||
echo "✅ abra installed successfully."
|
echo "✅ abra installed successfully."
|
||||||
else
|
else
|
||||||
@@ -213,13 +210,12 @@ isoConfig // {
|
|||||||
else
|
else
|
||||||
echo "✅ abra already installed."
|
echo "✅ abra already installed."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Initialize Docker Swarm
|
# Initialize Docker Swarm
|
||||||
echo "🔄 Checking Docker Swarm status..."
|
echo "🔄 Checking Docker Swarm status..."
|
||||||
if ! ${pkgs.docker}/bin/docker info | grep -q "Swarm: active"; then
|
if ! /run/current-system/sw/bin/docker info | grep -q "Swarm: active"; then
|
||||||
echo "🔥 Initializing Docker Swarm..."
|
echo "🔥 Initializing Docker Swarm..."
|
||||||
${pkgs.docker}/bin/docker swarm init --advertise-addr 127.0.0.1 2>/dev/null || true
|
/run/current-system/sw/bin/docker swarm init --advertise-addr 127.0.0.1 2>/dev/null || true
|
||||||
if ${pkgs.docker}/bin/docker info | grep -q "Swarm: active"; then
|
if /run/current-system/sw/bin/docker info | grep -q "Swarm: active"; then
|
||||||
echo "✅ Docker Swarm initialized."
|
echo "✅ Docker Swarm initialized."
|
||||||
else
|
else
|
||||||
echo "❌ Docker Swarm initialization failed."
|
echo "❌ Docker Swarm initialization failed."
|
||||||
@@ -227,39 +223,39 @@ isoConfig // {
|
|||||||
else
|
else
|
||||||
echo "✅ Docker Swarm already active."
|
echo "✅ Docker Swarm already active."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Ensure workshop user is in docker group
|
# Ensure workshop user is in docker group
|
||||||
echo "🔄 Ensuring workshop user is in docker group..."
|
echo "🔄 Ensuring workshop user is in docker group..."
|
||||||
${pkgs.shadow}/bin/${pkgs.shadow}/bin/usermod -aG docker workshop
|
/usr/bin/usermod -aG docker workshop
|
||||||
if id -nG workshop | grep -q "docker"; then
|
if id -nG workshop | grep -q "docker"; then
|
||||||
echo "✅ workshop user is in docker group."
|
echo "✅ workshop user is in docker group."
|
||||||
else
|
else
|
||||||
echo "❌ Failed to add workshop user to docker group."
|
echo "❌ Failed to add workshop user to docker group."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create proper abra server configuration
|
# Create proper abra server configuration
|
||||||
if [ ! -f /home/workshop/.abra/servers/workshop.local.env ]; then
|
if [ ! -f /home/workshop/.abra/servers/workshop.local.env ]; then
|
||||||
${pkgs.util-linux}/bin/su - workshop -c "mkdir -p /home/workshop/.abra/servers/"
|
/usr/bin/su - workshop -c "mkdir -p /home/workshop/.abra/servers/"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set up autocomplete
|
# Set up autocomplete
|
||||||
if command -v abra &> /dev/null; then
|
if command -v abra &> /dev/null; then
|
||||||
${pkgs.util-linux}/bin/su - workshop -c "source <\(/home/workshop/.local/bin/abra autocomplete bash\)"
|
/usr/bin/su - workshop -c "source <(/home/workshop/.local/bin/abra autocomplete bash)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Test final DNS resolution
|
# Test final DNS resolution
|
||||||
if ${pkgs.dnsutils}/bin/nslookup test.workshop.local 127.0.0.1; then
|
if /run/current-system/sw/bin/nslookup test.workshop.local 127.0.0.1; then
|
||||||
echo "🎉 All services ready!"
|
echo "🎉 All services ready!"
|
||||||
else
|
else
|
||||||
echo "⚠️ DNS may need manual restart: sudo systemctl restart dnsmasq"
|
echo "⚠️ DNS may need manual restart: sudo systemctl restart dnsmasq"
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "oneshot";
|
Type = "oneshot";
|
||||||
RemainAfterExit = true;
|
RemainAfterExit = true;
|
||||||
User = "root";
|
User = "root";
|
||||||
|
Environment = [
|
||||||
|
"PATH=/run/current-system/sw/bin:/usr/bin:/bin"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
# Enhanced bash configuration with complete recipe support
|
# Enhanced bash configuration with complete recipe support
|
||||||
programs.bash = {
|
programs.bash = {
|
||||||
|
|||||||
Reference in New Issue
Block a user