一站式AI续杯|cursor|augment|linux|OVF|虚拟机
在AI辅助编程工具快速发展的今天,Augment和Cursor已成为开发者不可或缺的编程助手。然而,Windows环境下的限制和复杂配置往往让用户望而却步。本文将详细介绍风车OVF 1.2虚拟机系统,这是一个专为AI开发优化的Linux环境,集成了最新的Augment和Cursor工具,实现真正的一键部署和无限制使用。
风车OVF 1.2采用虚拟化技术,提供了一个完全隔离的Linux环境,预装并优化了所有必要的AI开发工具。
# 系统基础信息
OS: Ubuntu 22.04 LTS (精简版)
Size: 6.91GB (高度压缩)
Memory: 2GB (推荐4GB)
Storage: 20GB (动态扩展)
AI_Tools:
- Augment: v0.48.1 (官方最新版)
- Cursor: v1.1.x (官方最新版)
- VS Code: 集成版本
Development_Tools:
- Python: 3.10+
- Node.js: 18.x
- Git: 最新版
- Docker: 可选安装
Utilities:
- 风车邮箱系统
- 一键挂载工具
- EXTERMINAL文件传输
- 网络配置工具
# 下载地址(天翼云盘不限速)
# 文件结构:
风车OVF_1.2/
├── 风车OVF_1.2.ovf # 主配置文件
├── 风车OVF_1.2.vmdk # 虚拟磁盘
├── 风车OVF_1.2.mf # 校验文件
└── tools/ # 附加工具
├── EXTERMINAL.exe
└── VMware_Workstation.exe
# 自动化导入脚本示例
import subprocess
import os
class OVFImporter:
def __init__(self, ovf_path, vmware_path):
self.ovf_path = ovf_path
self.vmware_path = vmware_path
def import_ovf(self):
"""导入OVF文件到VMware"""
try:
# 使用VMware命令行工具导入
cmd = [
self.vmware_path,
"-T", "ws",
"-v", self.ovf_path
]
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode == 0:
print("OVF导入成功")
return True
else:
print(f"导入失败: {result.stderr}")
return False
except Exception as e:
print(f"导入异常: {e}")
return False
def configure_vm(self):
"""配置虚拟机参数"""
config = {
"memory": "4096", # 4GB内存
"cpu_cores": "2", # 双核CPU
"network": "bridged" # 桥接网络
}
return config
# 使用示例
importer = OVFImporter(
ovf_path="./风车OVF_1.2/风车OVF_1.2.ovf",
vmware_path="C:/Program Files (x86)/VMware/VMware Workstation/vmware.exe"
)
importer.import_ovf()
# 默认登录信息
Username: y
Password: 1
# 首次登录后建议修改密码
sudo passwd y
#!/usr/bin/env python3
"""
网络配置自动化脚本
解决虚拟机网络连接问题
"""
import subprocess
import json
import re
class NetworkConfigurator:
def __init__(self):
self.interface_name = self.get_primary_interface()
def get_primary_interface(self):
"""获取主网络接口名称"""
try:
result = subprocess.run(['ip', 'route'], capture_output=True, text=True)
for line in result.stdout.split('\n'):
if 'default' in line:
# 提取接口名称
match = re.search(r'dev (\w+)', line)
if match:
return match.group(1)
except Exception as e:
print(f"获取网络接口失败: {e}")
return "ens33" # 默认接口名
def configure_static_ip(self, ip_address, gateway, dns_servers):
"""配置静态IP"""
netplan_config = {
"network": {
"version": 2,
"ethernets": {
self.interface_name: {
"addresses": [f"{ip_address}/24"],
"gateway4": gateway,
"nameservers": {
"addresses": dns_servers
}
}
}
}
}
# 写入netplan配置
config_path = "/etc/netplan/01-network-manager-all.yaml"
try:
with open(config_path, 'w') as f:
import yaml
yaml.dump(netplan_config, f, default_flow_style=False)
# 应用配置
subprocess.run(['sudo', 'netplan', 'apply'], check=True)
print("网络配置成功")
except Exception as e:
print(f"网络配置失败: {e}")
def configure_bridged_network(self):
"""配置桥接网络"""
# 检查当前IP配置
result = subprocess.run(['ip', 'addr', 'show', self.interface_name],
capture_output=True, text=True)
print(f"当前网络配置:\n{result.stdout}")
# 自动获取网关
gateway_result = subprocess.run(['ip', 'route', 'show', 'default'],
capture_output=True, text=True)
print(f"网关信息:\n{gateway_result.stdout}")
# 使用示例
configurator = NetworkConfigurator()
configurator.configure_bridged_network()
#!/bin/bash
# Augment一键续杯脚本
AUGMENT_TOOL_PATH="/home/y/Desktop/augment_tool"
augment_reset() {
echo "开始Augment续杯流程..."
# 1. 关闭VS Code
pkill -f "code"
sleep 2
# 2. 执行一键续杯
cd "$AUGMENT_TOOL_PATH"
python3 augment_reset.py
# 3. 等待处理完成
sleep 5
# 4. 重新启动VS Code
code &
echo "Augment续杯完成"
}
# 验证续杯效果
verify_augment() {
echo "验证Augment状态..."
# 检查扩展状态
code --list-extensions | grep -i augment
if [ $? -eq 0 ]; then
echo "✅ Augment扩展已安装"
else
echo "❌ Augment扩展未找到"
fi
}
# 执行续杯
augment_reset
verify_augment
"""
Augment环境验证脚本
测试续杯效果和功能完整性
"""
import time
import subprocess
import requests
from datetime import datetime
class AugmentTester:
def __init__(self):
self.test_results = []
self.start_time = datetime.now()
def test_extension_status(self):
"""测试扩展安装状态"""
try:
result = subprocess.run(
['code', '--list-extensions'],
capture_output=True, text=True
)
if 'augment' in result.stdout.lower():
self.log_result("扩展状态", "✅ 已安装", True)
return True
else:
self.log_result("扩展状态", "❌ 未安装", False)
return False
except Exception as e:
self.log_result("扩展状态", f"❌ 检查失败: {e}", False)
return False
def test_api_connectivity(self):
"""测试API连接性"""
try:
# 模拟API请求
response = requests.get(
"https://api.augment.dev/health",
timeout=10
)
if response.status_code == 200:
self.log_result("API连接", "✅ 正常", True)
return True
else:
self.log_result("API连接", f"❌ 状态码: {response.status_code}", False)
return False
except Exception as e:
self.log_result("API连接", f"❌ 连接失败: {e}", False)
return False
def test_message_response(self):
"""测试消息响应(需要手动验证)"""
print("\n=== 手动测试指南 ===")
print("1. 打开VS Code")
print("2. 创建新项目")
print("3. 发送测试消息给Augment")
print("4. 等待1小时后再次发送消息")
print("5. 验证两次都能正常回复")
# 记录测试时间戳
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self.log_result("测试时间戳", timestamp, True)
def log_result(self, test_name, result, success):
"""记录测试结果"""
self.test_results.append({
"test": test_name,
"result": result,
"success": success,
"timestamp": datetime.now()
})
def generate_report(self):
"""生成测试报告"""
print("\n" + "="*50)
print("Augment环境测试报告")
print("="*50)
for result in self.test_results:
status = "✅ 通过" if result["success"] else "❌ 失败"
print(f"{result['test']}: {result['result']} [{status}]")
# 统计
total_tests = len(self.test_results)
passed_tests = sum(1 for r in self.test_results if r["success"])
print(f"\n总测试数: {total_tests}")
print(f"通过测试: {passed_tests}")
print(f"成功率: {passed_tests/total_tests*100:.1f}%")
# 保存报告
report_file = f"augment_test_report_{self.start_time.strftime('%Y%m%d_%H%M%S')}.txt"
with open(report_file, 'w', encoding='utf-8') as f:
f.write("Augment环境测试报告\n")
f.write("="*30 + "\n")
for result in self.test_results:
f.write(f"{result['test']}: {result['result']}\n")
print(f"报告已保存至: {report_file}")
# 执行测试
if __name__ == "__main__":
tester = AugmentTester()
print("开始Augment环境测试...")
tester.test_extension_status()
tester.test_api_connectivity()
tester.test_message_response()
tester.generate_report()
"""
Cursor自动化重置工具
Linux环境专用版本
"""
import os
import subprocess
import shutil
import time
from pathlib import Path
class CursorResetTool:
def __init__(self):
self.home_dir = Path.home()
self.cursor_config_dirs = [
self.home_dir / ".config" / "cursor",
self.home_dir / ".cursor",
self.home_dir / ".local" / "share" / "cursor"
]
def complete_cleanup(self):
"""完整清理Cursor数据"""
print("开始Cursor完整清理...")
# 1. 停止Cursor进程
self.stop_cursor_processes()
# 2. 清理配置目录
self.clean_config_directories()
# 3. 清理缓存文件
self.clean_cache_files()
# 4. 清理系统注册信息
self.clean_system_registry()
print("Cursor清理完成")
def stop_cursor_processes(self):
"""停止所有Cursor相关进程"""
processes = ['cursor', 'cursor-helper', 'cursor-renderer']
for process in processes:
try:
subprocess.run(['pkill', '-f', process], check=False)
print(f"已停止进程: {process}")
except Exception as e:
print(f"停止进程失败 {process}: {e}")
time.sleep(2)
def clean_config_directories(self):
"""清理配置目录"""
for config_dir in self.cursor_config_dirs:
if config_dir.exists():
try:
shutil.rmtree(config_dir)
print(f"已清理目录: {config_dir}")
except Exception as e:
print(f"清理目录失败 {config_dir}: {e}")
def clean_cache_files(self):
"""清理缓存文件"""
cache_patterns = [
"~/.cache/cursor*",
"/tmp/cursor*",
"~/.local/share/recently-used.xbel"
]
for pattern in cache_patterns:
try:
expanded_pattern = os.path.expanduser(pattern)
subprocess.run(['rm', '-rf', expanded_pattern], check=False)
print(f"已清理缓存: {pattern}")
except Exception as e:
print(f"清理缓存失败 {pattern}: {e}")
def clean_system_registry(self):
"""清理系统注册信息"""
# Linux下主要是清理desktop文件和mime关联
desktop_files = [
"~/.local/share/applications/cursor.desktop",
"/usr/share/applications/cursor.desktop"
]
for desktop_file in desktop_files:
expanded_path = os.path.expanduser(desktop_file)
if os.path.exists(expanded_path):
try:
os.remove(expanded_path)
print(f"已清理desktop文件: {desktop_file}")
except Exception as e:
print(f"清理desktop文件失败: {e}")
def install_fresh_cursor(self):
"""安装全新的Cursor"""
print("开始安装全新Cursor...")
# 这里可以添加自动下载和安装逻辑
cursor_installer = "/home/y/Downloads/cursor.AppImage"
if os.path.exists(cursor_installer):
try:
# 设置执行权限
os.chmod(cursor_installer, 0o755)
# 创建符号链接到/usr/local/bin
link_path = "/usr/local/bin/cursor"
if os.path.exists(link_path):
os.remove(link_path)
os.symlink(cursor_installer, link_path)
print("Cursor安装完成")
except Exception as e:
print(f"Cursor安装失败: {e}")
else:
print("未找到Cursor安装包")
def verify_reset(self):
"""验证重置效果"""
print("验证Cursor重置效果...")
# 检查配置目录是否已清理
config_cleaned = all(not d.exists() for d in self.cursor_config_dirs)
if config_cleaned:
print("✅ 配置清理成功")
else:
print("❌ 配置清理不完整")
# 检查进程是否已停止
try:
result = subprocess.run(['pgrep', '-f', 'cursor'],
capture_output=True, text=True)
if result.returncode != 0:
print("✅ 进程清理成功")
else:
print("❌ 仍有Cursor进程运行")
except Exception:
print("✅ 进程清理成功")
return config_cleaned
# 使用示例
if __name__ == "__main__":
reset_tool = CursorResetTool()
# 执行完整重置
reset_tool.complete_cleanup()
# 验证重置效果
if reset_tool.verify_reset():
print("\n Cursor重置成功!")
print("现在可以使用全新账户登录Cursor")
else:
print("\n⚠️ 重置可能不完整,请手动检查")
"""
VMware共享文件夹自动挂载工具
实现Linux与Windows无缝文件共享
"""
import subprocess
import os
from pathlib import Path
class VMwareShareMounter:
def __init__(self):
self.mount_point = Path("/mnt/vmware-share")
self.vmware_tools_path = "/usr/bin/vmware-hgfsclient"
def check_vmware_tools(self):
"""检查VMware Tools是否已安装"""
if os.path.exists(self.vmware_tools_path):
print("✅ VMware Tools已安装")
return True
else:
print("❌ VMware Tools未安装")
self.install_vmware_tools()
return False
def install_vmware_tools(self):
"""安装VMware Tools"""
print("开始安装VMware Tools...")
try:
# 更新包列表
subprocess.run(['sudo', 'apt', 'update'], check=True)
# 安装open-vm-tools
subprocess.run([
'sudo', 'apt', 'install', '-y',
'open-vm-tools',
'open-vm-tools-desktop'
], check=True)
print("✅ VMware Tools安装完成")
except subprocess.CalledProcessError as e:
print(f"❌ VMware Tools安装失败: {e}")
def get_shared_folders(self):
"""获取共享文件夹列表"""
try:
result = subprocess.run(
['vmware-hgfsclient'],
capture_output=True, text=True, check=True
)
folders = result.stdout.strip().split('\n')
folders = [f for f in folders if f] # 过滤空行
print(f"发现共享文件夹: {folders}")
return folders
except subprocess.CalledProcessError:
print("❌ 无法获取共享文件夹列表")
return []
def mount_shared_folder(self, folder_name):
"""挂载指定的共享文件夹"""
mount_path = self.mount_point / folder_name
# 创建挂载点
mount_path.mkdir(parents=True, exist_ok=True)
try:
# 挂载共享文件夹
subprocess.run([
'sudo', 'mount', '-t', 'fuse.vmhgfs-fuse',
f'.host:/{folder_name}',
str(mount_path),
'-o', 'allow_other,uid=1000,gid=1000'
], check=True)
print(f"✅ 已挂载 {folder_name} 到 {mount_path}")
return True
except subprocess.CalledProcessError as e:
print(f"❌ 挂载失败 {folder_name}: {e}")
return False
def mount_all_shared_folders(self):
"""挂载所有共享文件夹"""
if not self.check_vmware_tools():
return False
shared_folders = self.get_shared_folders()
if not shared_folders:
print("❌ 没有发现共享文件夹")
return False
success_count = 0
for folder in shared_folders:
if self.mount_shared_folder(folder):
success_count += 1
print(f"✅ 成功挂载 {success_count}/{len(shared_folders)} 个文件夹")
return success_count > 0
def create_desktop_shortcuts(self):
"""创建桌面快捷方式"""
desktop_path = Path.home() / "Desktop"
for folder_path in self.mount_point.iterdir():
if folder_path.is_dir():
shortcut_content = f"""[Desktop Entry]
Version=1.0
Type=Link
Name={folder_path.name} (共享)
Comment=Windows共享文件夹
URL=file://{folder_path}
Icon=folder
"""
shortcut_file = desktop_path / f"{folder_path.name}_shared.desktop"
try:
with open(shortcut_file, 'w') as f:
f.write(shortcut_content)
# 设置可执行权限
os.chmod(shortcut_file, 0o755)
print(f"✅ 已创建快捷方式: {shortcut_file.name}")
except Exception as e:
print(f"❌ 创建快捷方式失败: {e}")
def setup_auto_mount(self):
"""设置开机自动挂载"""
fstab_entry = f"""
# VMware共享文件夹自动挂载
.host:/ {self.mount_point} fuse.vmhgfs-fuse allow_other,uid=1000,gid=1000 0 0
"""
try:
# 备份原fstab
subprocess.run(['sudo', 'cp', '/etc/fstab', '/etc/fstab.backup'], check=True)
# 添加挂载条目
with open('/tmp/fstab_addition', 'w') as f:
f.write(fstab_entry)
subprocess.run(['sudo', 'sh', '-c', 'cat /tmp/fstab_addition >> /etc/fstab'], check=True)
print("✅ 已设置开机自动挂载")
except Exception as e:
print(f"❌ 设置自动挂载失败: {e}")
# 一键挂载脚本
def one_click_mount():
"""一键挂载所有Windows共享文件夹"""
print("=== Windows文件夹一键挂载工具 ===")
mounter = VMwareShareMounter()
# 挂载所有共享文件夹
if mounter.mount_all_shared_folders():
# 创建桌面快捷方式
mounter.create_desktop_shortcuts()
# 询问是否设置自动挂载
response = input("是否设置开机自动挂载?(y/n): ")
if response.lower() == 'y':
mounter.setup_auto_mount()
print("\n 文件夹挂载完成!")
print(f"挂载位置: {mounter.mount_point}")
print("现在可以在Linux中直接访问Windows文件了")
else:
print("\n❌ 挂载失败,请检查VMware共享设置")
if __name__ == "__main__":
one_click_mount()
本文详细介绍了风车OVF 1.2虚拟机系统的部署和使用,为AI开发者提供了一个完整的Linux环境解决方案。所有工具和软件均可在开源网站免费获取,或作者网站免费获取