
W tym wpisie pokaże wam, jak przygotować własny obraz Ubuntu 24.04 dla Vagranta, a następnie pokaże jak przygotować środowisko developerskie.
Pobranie repozytorium z vagrantem
git clone https://gitlab.com/pl.rachuna-net/devtools/vagrant.git
-
-
-
echo "vagrant ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/vagrant
sudo apt-get update
sudo apt-get dist-upgrade -y
sudo apt install -y openssh-server curl wget sudo
sudo apt install -y build-essential dkms linux-headers-$(uname -r)
mkdir -p /home/vagrant/.ssh
curl -fsSL https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub -o /home/vagrant/.ssh/authorized_keys
chown -R vagrant:vagrant /home/vagrant/.ssh
chmod 700 /home/vagrant/.ssh
chmod 600 /home/vagrant/.ssh/authorized_keys
sudo apt-get autoremove -y
sudo apt-get clean
sudo rm -rf /var/lib/apt/lists/*
sudo timedatectl set-timezone UTC
sudo locale-gen en_US.UTF-8
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
-
sudo systemctl enable --now ssh
sudo apt autoremove -y
sudo apt clean
history -c
sudo truncate -s 0 /etc/machine-id
sudo rm -f /var/lib/dbus/machine-id
sudo shutdown -h now
-
vagrant package \
--base "ubuntu-24.04" \
--output ".box/ubuntu-24.04-1.0.0.box"
-
vagrant box add ubuntu-24.04-1.0.0 .box/ubuntu-24.04-1.0.0.box
Lista pobranych lokalnie boxes
-
hostname = ENV['VAGRANT_HOSTNAME'] || 'dev-station'
vm_memory = ENV['VAGRANT_VM_MEMORY'] || 4096
num_cpus = ENV['VAGRANT_NUM_CPUS'] || 2
vm_base_image = ENV['VAGRANT_VM_BASE_IMAGE'] || 'ubuntu-24.04-1.0.0'
Vagrant.configure("2") do |config|
config.vm.box = vm_base_image
config.vm.hostname = hostname
config.vm.provider "virtualbox" do |vb|
vb.name = hostname
vb.cpus = num_cpus
vb.memory = vm_memory
vb.gui = false
end
config.ssh.forward_agent = true
config.ssh.forward_x11 = true
config.vm.network "forwarded_port", guest: 22, host: 2222, id: "ssh"
config.vm.synced_folder ".", "/vagrant", type: "virtualbox"
# pliki do synchronizacji z home
config.vm.synced_folder "/userfiles", "/vagrant/userfiles", type: "virtualbox"
if File.file?("./bootstrap.sh")
config.vm.provision "shell", path: "./bootstrap.sh", privileged: true, run: "always"
end
end
-
#!/bin/env bash
set -euo pipefail
VAGRANT_DIRETORY="/vagrant"
MARKER="/var/lib/vagrant-bootstrap.done"
SCRIPTS_LIST="$VAGRANT_DIRETORY/scripts_to_run"
if [[ -f "${MARKER}" ]]; then
echo "[bootstrap] already done (${MARKER} exists) - skipping"
exit 0
fi
echo -e "\033[1;33m===>\033[0m 🚀 Run bootstrap script"
echo -e "\033[1;33m===>\033[0m 📁 Copy userfiles to $HOME"
cp -fr $VAGRANT_DIRETORY/userfiles/. ~/
if [ ! -f "$SCRIPTS_LIST" ]; then
echo "❌ Scripts list file '$SCRIPTS_LIST' not found!"
exit 1
fi
while IFS= read -r script; do
if [ -f "$VAGRANT_DIRETORY/$script" ]; then
echo -e "\033[1;33m===>\033[0m 🚀 Running script: $VAGRANT_DIRETORY/$script"
chmod +x "$VAGRANT_DIRETORY/$script"
bash "$VAGRANT_DIRETORY/$script"
else
echo "❌ Script '$script' not found in '$VAGRANT_DIRET/$script'!"
fi
done < "$SCRIPTS_LIST"
-
albo
chmod +x start_vm.bash
./start_vm.bash
-
export GITLAB_URL="https://gitlab.com"
export GITLAB_TOKEN=""
export PROJECT_ID="77501746"
export PACKAGE_NAME="ubuntu-24.04"
export PACKAGE_VERSION="1.0.0"
export FILE_NAME="${PACKAGE_NAME}$-${PACKAGE_VERSION}.box"
curl --fail --location -H "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \
--upload-file ".box/${FILE_NAME}" \
"${GITLAB_URL}/api/v4/projects/${PROJECT_ID}/packages/generic/${PACKAGE_NAME}/${PACKAGE_VERSION}/${FILE_NAME}"
export GITLAB_URL="https://gitlab.com"
export GITLAB_TOKEN=""
export PROJECT_ID="77501746"
export PACKAGE_NAME="ubuntu-24.04"
export PACKAGE_VERSION="1.0.0"
export FILE_NAME="${PACKAGE_NAME}$-${PACKAGE_VERSION}.box"
curl -L -H "PRIVATE-TOKEN: ${TOKEN}" \
"${GITLAB_URL}/api/v4/projects/${PROJECT_ID}/packages/generic/${PACKAGE_NAME}/${PACKAGE_VERSION}/${FILE_NAME}"
-o .box/$FILE_NAME
vagrant box add ubuntu-24.04-1.0.0 .box/ubuntu-24.04-1.0.0.box
vagrant up
- SSH jest dostępne na porcie
2222 na hoście, przekierowanym do portu 22 w VM.
- Włączone jest przekazywanie agenta SSH oraz X11.
- Połączenie można nawiązać poleceniem:
ssh -p 2222 vagrant@localhost
Edytuj plik ~/.ssh/config, dodając wpis:
Host dev-station
HostName 127.0.0.1
Port 2222
User vagrant
IdentityFile /repo/pl.rachuna-net/devtools/vagrant/.vagrant/machines/default/virtualbox/private_key
ForwardX11 yes
Dzięki temu możesz łatwo łączyć się z maszyną wirtualną za pomocą polecenia:
vagrant@dev-station:/vagrant$ cd /vagrant/
vagrant@dev-station:/vagrant$ ./bootstrap.bash
===> 🚀 Run bootstrap script
===> 📁 Copy userfiles to /home/vagrant
===> 🚀 Running script: /vagrant/provisioning/upgrade-ubuntu.bash
===> Upgrade system packages and distribution
===> 🚀 Running script: /vagrant/provisioning/install-packages.bash
===> Install packages