Chế Độ Yolo An Toàn: Chạy Tác Nhân LLM Trong Máy Ảo Với Libvirt và Virsh
Hướng dẫn này hướng dẫn cách cô lập các tác nhân LLM trong máy ảo sử dụng libvirt và virsh trên máy chủ Linux.
Chạy LLM trong máy ảo giúp cô lập khỏi hệ thống chủ, giảm thiểu nhiều rủi ro bảo mật như các hoạt động phá hủy hoặc truy cập tệp không được phép. Điều này quan trọng khi cho phép LLM agents nhiều quyền hạn, như tự động chấp thuận việc sử dụng công cụ. Nó cũng hữu ích để giữ các phiên hoạt động lâu dài và tương tác từ xa.

Tại Sao Chọn Libvirt và Virsh?
Libvirt là API ảo hóa chuẩn cho Linux, cung cấp giao diện để quản lý các máy ảo trên nhiều hypervisor khác nhau như KVM, QEMU, và Xen. Công cụ dòng lệnh virsh là cách chính để tương tác với libvirt.
Libvirt lý tưởng cho việc cô lập tác nhân LLM cấp độ sản xuất trên máy chủ Linux. Kết hợp với hình ảnh đám mây Ubuntu và cloud-init, việc cung cấp máy ảo trở nên nhanh chóng và dễ dàng.
So sánh Libvirt và Lima
| Đặc Điểm | Libvirt/Virsh | Lima |
|---|---|---|
| Tốt Nhất Cho | Máy chủ Linux | Desktop macOS, Linux |
| Sử Dụng Sản Xuất | Phổ biến, thử thách qua thời gian | Chủ yếu cho phát triển |
| Hỗ Trợ Hypervisor | KVM/QEMU, Xen, LXC, v.v. | Apple’s Virtualization.framework, QEMU |
| Tài Nguyên Sử Dụng | Thấp hơn | Hơi cao hơn |
| Cài Đặt | Đơn giản (apt install) | Đơn giản (brew install lima) |
| Chia Sẻ Thư Mục Host | Thủ công (9p, virtiofs) | Tích hợp sẵn, YAML config, home mặc định (nguy hiểm) |
| Đẩy Cổng | Cấu hình iptables/NAT thủ công | Tích hợp sẵn, YAML config |
| Công Cụ GUI | virt-manager khả dụng | Không có (chỉ CLI) |
| Snapshot | Bản địa, vững chắc | Không hoạt động trên macOS |
Cài Đặt
Cài đặt các gói cần thiết trên máy chủ Ubuntu/Debian:
sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system virtinst
Kích hoạt và khởi động libvirt daemon:
sudo systemctl enable --now libvirtd
Kiểm tra cài đặt:
sudo virsh version
Để tránh cần sudo, có thể thêm người dùng của bạn vào nhóm libvirt (yêu cầu đăng nhập lại):
sudo usermod -aG libvirt $USER
Tải Cloud Image
Sử dụng Ubuntu với các ảnh cloud images. Tải ảnh xuống:
wget -O /var/lib/libvirt/images/project1-ubuntu.img https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
Ghi chú: Sử dụng biến thể arm64 cho máy chủ ARM.
Tăng kích cỡ đĩa:
sudo qemu-img resize /var/lib/libvirt/images/project1-ubuntu.img 40G
Tạo VM
Sử dụng virt-install để tạo máy ảo mới với cloud-init:
sudo virt-install \
--name project1 \
--ram 16384 \
--vcpus 4 \
--import \
--disk /var/lib/libvirt/images/project1-ubuntu.img \
--os-variant ubuntu24.04 \
--cloud-init
Điều này tạo VM với:
- Ubuntu 24.04
- 16 GB RAM
- 4 vCPUs
- 40 GB đĩa
- Cloud-init để tự động thiết lập
VM sẽ khởi động trong vài giây.
Truy Cập VM
Mở SSH để trải nghiệm tốt hơn! Sử dụng địa chỉ IP nội bộ hoặc thiết lập Tailscale để truy cập từ xa.
Thêm khóa SSH:
vim /home/ubuntu/.ssh/authorized_keys
SSH Sử Dụng IP Nội Bộ
Libvirt thiết lập mạng NAT cung cấp IP nội bộ cho máy ảo:
virsh domifaddr project1
ssh [email protected]
Tailscale Để Truy Cập Từ Xa
Tailscale tạo mạng VPN mã hóa giữa các thiết bị. Cài đặt bên trong VM:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
tailscale ip -4
Dùng IP trên Tailscale để truy cập VM:
ssh [email protected]
Thiết Lập VM
Công Cụ và Cấu Hình Cơ Bản
Bên trong VM, thiết lập cơ bản:
sudo apt update && sudo apt upgrade -y
sudo apt install -y vim git curl build-essential htop jq ca-certificates pkg-config libssl-dev
sudo timedatectl set-timezone UTC
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
Tmux cho Phiên Hoạt Động Bền Bỉ
Thêm vào ~/.bashrc để tự động khởi động tmux khi đăng nhập:
tee -a ~/.bashrc > /dev/null << 'EOF'
if [[ -z "$TMUX" && $- == *i* && -t 0 ]]; then
tmux attach -t main 2>/dev/null || tmux new -s main
fi
EOF
source ~/.bashrc
Tiện Ích Bash
Thêm vào /etc/bash.bashrc:
sudo tee -a /etc/bash.bashrc > /dev/null << 'EOF'
export HISTSIZE=262144
alias ll='ls -alh'
alias ai="sudo apt-get install -y"
alias g='git'
alias gs='git status -sb'
EOF
Cài Đặt Công Cụ Cơ Bản
Node.js
NVM_LATEST=$(curl -s https://api.github.com/repos/nvm-sh/nvm/releases/latest | jq -r .tag_name)
curl -fsSL "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_LATEST}/install.sh" | bash
source ~/.bashrc
nvm install --lts
fzf
FZF_LATEST=$(curl -s https://api.github.com/repos/junegunn/fzf/releases/latest | jq -r .tag_name)
curl -Lo fzf.tar.gz "https://github.com/junegunn/fzf/releases/download/${FZF_LATEST}/fzf-${FZF_LATEST#v}-linux_amd64.tar.gz"
sudo tar -xzf fzf.tar.gz -C /usr/local/bin fzf
rm fzf.tar.gz
echo 'eval "$(fzf --bash)"' >> ~/.bashrc
Golang
GO_LATEST=$(curl -s 'https://go.dev/dl/?mode=json' | jq -r '.[0].files[] | select(.os=="linux" and .arch=="amd64") | .filename')
curl -L "https://go.dev/dl/$GO_LATEST" -o go.tar.gz
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go.tar.gz
rm go.tar.gz
Docker/Containerd + nerdctl
NERDCTL_LATEST=$(curl -s https://api.github.com/repos/containerd/nerdctl/releases/latest | jq -r .tag_name)
curl -sSL "https://github.com/containerd/nerdctl/releases/download/${NERDCTL_LATEST}/nerdctl-full-${NERDCTL_LATEST#v}-linux-amd64.tar.gz" | sudo tar -xz -C /usr/local
sudo systemctl enable --now containerd
sudo systemctl enable --now buildkit
sudo nerdctl ps
sudo nerdctl run --rm hello-world
Cài Tác Nhân LLM
Claude Code
curl -fsSL https://claude.ai/install.sh | bash
echo 'alias claude="claude --dangerously-skip-permissions"' >> ~/.bashrc
Gemini
npm install -g @google/gemini-cli@latest
echo 'alias gemini="gemini --yolo"' >> ~/.bashrc
Codex CLI
npm install -g @openai/codex@latest
echo 'alias codex="codex --dangerously-bypass-approvals-and-sandbox"' >> ~/.bashrc
Lộ Trình Quản Lý VM Với Virsh
Lệnh Chính
virsh list --all
virsh start project1
virsh shutdown project1
virsh destroy project1
virsh undefine project1 --remove-all-storage
Truy Cập Bảng Điều Khiển
virsh console project1
virsh console project1 --force
Thông Tin VM
virsh dominfo project1
virsh domifaddr project1
virsh domblklist project1
Tùy Chỉnh Cloud-Init
Tạo file user-data.yaml:
#cloud-config
users:
- name: dev
sudo: ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
ssh_authorized_keys:
- ssh-ed25519 AAAA... your-key-here
packages:
- vim
- htop
- git
- build-essential
runcmd:
- echo "VM provisioned at $(date)" > /var/log/provision.log
Khởi tạo VM với config riêng:
sudo virt-install \
--name project1 \
--ram 16384 \
--vcpus 4 \
--import \
--disk /var/lib/libvirt/images/project1-ubuntu.img \
--os-variant ubuntu24.04 \
--cloud-init user-data=user-data.yaml
Ảnh Chụp
Lưu và phục hồi trạng thái VM:
virsh snapshot-create-as project1 --name "before-experiment" --description "Clean state"
virsh snapshot-list project1
virsh snapshot-revert project1 --snapshotname "before-experiment"
Sao Chép VMs
Sao chép một VM nhanh chóng:
virsh shutdown project1
virt-clone --original project1 --name project12 --auto-clone
virsh start project12
Cấu Hình Mạng
Libvirt tạo mạng NAT với truy cập internet cho VMs:
virsh net-list --all
virsh net-info default
virsh net-dhcp-leases default
Hy vọng hướng dẫn này sẽ có ích cho bạn! Câu hỏi và phản hồi được chào đón trong phần bình luận.