feat: enhance workshop VM setup and developer experience
This commit is contained in:
2
Makefile
2
Makefile
@@ -107,7 +107,7 @@ destroy-cloud:
|
|||||||
cd terraform && terraform destroy -auto-approve
|
cd terraform && terraform destroy -auto-approve
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf result .direnv terraform/.terraform terraform/terraform.tfstate*
|
rm -rf result .direnv terraform/.terraform terraform/terraform.tfstate* workshop-vm.*
|
||||||
@echo "🧹 Cleaned up build artifacts"
|
@echo "🧹 Cleaned up build artifacts"
|
||||||
|
|
||||||
opencode:
|
opencode:
|
||||||
|
|||||||
56
common.nix
56
common.nix
@@ -133,11 +133,12 @@ isoConfig // {
|
|||||||
virtualisation.docker.enable = true;
|
virtualisation.docker.enable = true;
|
||||||
|
|
||||||
services.getty.autologinUser = "workshop";
|
services.getty.autologinUser = "workshop";
|
||||||
|
users.users.root.password = "root";
|
||||||
users.users.workshop = {
|
users.users.workshop = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
shell = pkgs.bash;
|
shell = pkgs.bash;
|
||||||
extraGroups = [ "networkmanager" "wheel" "docker" ];
|
extraGroups = [ "networkmanager" "wheel" "docker" ];
|
||||||
password = "";
|
password = "workshop";
|
||||||
};
|
};
|
||||||
|
|
||||||
security.sudo.wheelNeedsPassword = false;
|
security.sudo.wheelNeedsPassword = false;
|
||||||
@@ -148,7 +149,6 @@ isoConfig // {
|
|||||||
git
|
git
|
||||||
networkmanager
|
networkmanager
|
||||||
firefox
|
firefox
|
||||||
xterm
|
|
||||||
docker
|
docker
|
||||||
docker-compose
|
docker-compose
|
||||||
bash
|
bash
|
||||||
@@ -200,28 +200,52 @@ isoConfig // {
|
|||||||
|
|
||||||
# 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..."
|
||||||
sudo -u workshop mkdir -p /home/workshop/.local/bin
|
sudo -u workshop mkdir -p /home/workshop/.local/bin
|
||||||
cd /home/workshop
|
cd /home/workshop
|
||||||
sudo -u workshop ${pkgs.curl}/bin/curl -fsSL https://install.abra.coopcloud.tech | sudo -u workshop ${pkgs.bash}/bin/bash
|
# Run installer and log output
|
||||||
|
install_log="/tmp/abra-install.log"
|
||||||
|
sudo -u workshop ${pkgs.curl}/bin/curl -fsSL https://install.abra.coopcloud.tech | sudo -u workshop ${pkgs.bash}/bin/bash &> "$install_log"
|
||||||
|
if [ -f /home/workshop/.local/bin/abra ]; then
|
||||||
|
echo "✅ abra installed successfully."
|
||||||
|
else
|
||||||
|
echo "❌ abra installation failed. See logs: cat $install_log"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "✅ abra already installed."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Initialize Docker Swarm
|
# Initialize Docker Swarm
|
||||||
|
echo "🔄 Checking Docker Swarm status..."
|
||||||
if ! ${pkgs.docker}/bin/docker info | grep -q "Swarm: active"; then
|
if ! ${pkgs.docker}/bin/docker info | grep -q "Swarm: active"; then
|
||||||
|
echo "🔥 Initializing Docker Swarm..."
|
||||||
${pkgs.docker}/bin/docker swarm init --advertise-addr 127.0.0.1 2>/dev/null || true
|
${pkgs.docker}/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
|
||||||
|
echo "✅ Docker Swarm initialized."
|
||||||
|
else
|
||||||
|
echo "❌ Docker Swarm initialization failed."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
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..."
|
||||||
usermod -aG docker workshop
|
usermod -aG docker workshop
|
||||||
|
if id -nG workshop | grep -q "docker"; then
|
||||||
|
echo "✅ workshop user is in docker group."
|
||||||
|
else
|
||||||
|
echo "❌ Failed to add workshop user to docker group."
|
||||||
|
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
|
||||||
sudo -u workshop mkdir -p /home/workshop/.abra/servers/
|
sudo -u workshop mkdir -p /home/workshop/.abra/servers/
|
||||||
|
fi
|
||||||
|
|
||||||
# Set up autocomplete
|
# Set up autocomplete
|
||||||
if command -v abra &> /dev/null; then
|
if command -v abra &> /dev/null; then
|
||||||
sudo -u workshop abra autocomplete bash > /home/workshop/.abra/autocomplete.bash
|
sudo -u workshop source <(abra autocomplete bash)
|
||||||
echo "source ~/.abra/autocomplete.bash" >> /home/workshop/.bashrc
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Test final DNS resolution
|
# Test final DNS resolution
|
||||||
@@ -451,6 +475,21 @@ isoConfig // {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abra-status() {
|
||||||
|
echo "🔍 Checking workshop-abra-setup service status..."
|
||||||
|
systemctl status workshop-abra-setup
|
||||||
|
echo ""
|
||||||
|
if [ -f /tmp/abra-install.log ]; then
|
||||||
|
echo "📚 Last abra installation log (/tmp/abra-install.log):"
|
||||||
|
cat /tmp/abra-install.log
|
||||||
|
else
|
||||||
|
echo "ℹ️ No abra installation log found at /tmp/abra-install.log"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
echo "💡 To check if abra is in your PATH: which abra"
|
||||||
|
echo "💡 To check abra version: abra --version"
|
||||||
|
}
|
||||||
|
|
||||||
help() {
|
help() {
|
||||||
echo "🚀 CODE CRISPIES Workshop Commands:"
|
echo "🚀 CODE CRISPIES Workshop Commands:"
|
||||||
echo ""
|
echo ""
|
||||||
@@ -460,6 +499,7 @@ isoConfig // {
|
|||||||
echo " deploy <recipe> - Deploy app locally (e.g., deploy wordpress)"
|
echo " deploy <recipe> - Deploy app locally (e.g., deploy wordpress)"
|
||||||
echo " browser [recipe] - Launch Firefox [to specific app]"
|
echo " browser [recipe] - Launch Firefox [to specific app]"
|
||||||
echo " desktop - Start GUI desktop session"
|
echo " desktop - Start GUI desktop session"
|
||||||
|
echo " abra-status - Check the status of the abra setup service"
|
||||||
echo ""
|
echo ""
|
||||||
echo "☁️ Cloud Access:"
|
echo "☁️ Cloud Access:"
|
||||||
echo " connect <name> - SSH to cloud server (e.g., connect hopper)"
|
echo " connect <name> - SSH to cloud server (e.g., connect hopper)"
|
||||||
|
|||||||
@@ -90,8 +90,10 @@
|
|||||||
"-monitor"
|
"-monitor"
|
||||||
"stdio"
|
"stdio"
|
||||||
# Add port forwarding for SSH
|
# Add port forwarding for SSH
|
||||||
"-netdev" "user,id=net0,hostfwd=tcp::2222-:22"
|
"-netdev"
|
||||||
"-device" "virtio-net,netdev=net0"
|
"user,id=net0,hostfwd=tcp::2222-:22"
|
||||||
|
"-device"
|
||||||
|
"virtio-net,netdev=net0"
|
||||||
];
|
];
|
||||||
# Fix the auto-login conflict with mkForce
|
# Fix the auto-login conflict with mkForce
|
||||||
services.displayManager.autoLogin = lib.mkForce {
|
services.displayManager.autoLogin = lib.mkForce {
|
||||||
@@ -100,7 +102,7 @@
|
|||||||
};
|
};
|
||||||
# Keep GUI session commands for when GUI is used
|
# Keep GUI session commands for when GUI is used
|
||||||
services.xserver.displayManager.sessionCommands = ''
|
services.xserver.displayManager.sessionCommands = ''
|
||||||
${pkgs.xfce.xfce4-terminal}/bin/xfce4-terminal --fullscreen --title="Workshop Terminal" &
|
${pkgs.xfce.xfce4-terminal}/bin/xfce4-terminal --fullscreen --maximize --hide-toolbar --hide-borders --hide-menubar --hide-toolbar --title="Workshop Terminal" &
|
||||||
'';
|
'';
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user