# الأجهزة الافتراضية التجريبية

أنشئ مجموعات أجهزة افتراضية محلية على محطة عملك للتطوير والاختبار, دون الحاجة إلى مزوّدي سحابة خارجيين.

## المتطلبات

يتطلب `rdc ops` **المحوّل المحلي**. غير متاح مع محوّل السحابة.

```bash
rdc ops check
```

## نظرة عامة

تتيح لك أوامر `rdc ops` إنشاء وإدارة مجموعات VM التجريبية محلياً. هذه هي نفس البنية التحتية المستخدمة بواسطة خط أنابيب CI لاختبارات التكامل، وهي متاحة الآن للتجربة العملية.

حالات الاستخدام:
- اختبار نشر Rediacc بدون مزوّدي VM خارجيين (Linode، Vultr، إلخ.)
- تطوير تكوينات المستودعات وتصحيح أخطائها محلياً
- تعلّم المنصة في بيئة معزولة تماماً
- تشغيل اختبارات التكامل على محطة عملك

## دعم المنصات

| المنصة | المعمارية | الخلفية | الحالة |
|--------|-----------|---------|--------|
| Linux | x86_64 | KVM (libvirt) | مختبر في CI |
| macOS | Intel | QEMU + HVF | مختبر في CI |
| Linux | ARM64 | KVM (libvirt) | مدعوم (غير مختبر في CI) |
| macOS | ARM (Apple Silicon) | QEMU + HVF | مدعوم (غير مختبر في CI) |
| Windows | x86_64 / ARM64 | Hyper-V | مخطط |

**Linux (KVM)** يستخدم libvirt للمحاكاة الافتراضية للأجهزة الأصلية مع الشبكات الجسرية.

**macOS (QEMU)** يستخدم QEMU مع إطار عمل Hypervisor (HVF) من Apple للحصول على أداء شبه أصلي، مع شبكات وضع المستخدم وإعادة توجيه منافذ SSH.

**Windows (Hyper-V)** الدعم مخطط. راجع [issue #380](https://github.com/rediacc/console/issues/380) للتفاصيل. يتطلب Windows Pro/Enterprise.

## المتطلبات الأساسية والإعداد

### Linux

```bash
# تثبيت المتطلبات الأساسية تلقائياً
rdc ops setup

# أو يدوياً:
sudo apt install libvirt-daemon-system virtinst qemu-utils cloud-image-utils docker.io
sudo systemctl enable --now libvirtd
```

### macOS

```bash
# تثبيت المتطلبات الأساسية تلقائياً
rdc ops setup

# أو يدوياً:
brew install qemu cdrtools
```

### التحقق من الإعداد

```bash
rdc ops check
```

يُشغّل هذا الأمر فحوصات خاصة بالمنصة ويُبلّغ عن نجاح/فشل كل متطلب أساسي.

## البدء السريع

```bash
# 1. التحقق من المتطلبات الأساسية
rdc ops check

# 2. تجهيز مجموعة بسيطة (جسر + عامل واحد)
rdc ops up --basic

# 3. التحقق من حالة VM
rdc ops status

# 4. الاتصال بـ VM الجسر عبر SSH
rdc ops ssh --vm-id 1

# 4b. أو تشغيل أمر مباشرة
rdc ops ssh --vm-id 1 -c hostname

# 5. إيقاف التشغيل
rdc ops down
```

## تكوين المجموعة

بشكل افتراضي، يُجهّز `rdc ops up`:

| VM | المعرّف | الدور |
|----|---------|-------|
| Bridge | 1 | العقدة الأساسية, تشغّل خدمة Rediacc bridge |
| Worker 1 | 11 | عقدة عاملة لنشر المستودعات |
| Worker 2 | 12 | عقدة عاملة لنشر المستودعات |

استخدم خيار `--basic` لتجهيز الجسر والعامل الأول فقط (المعرّفان 1 و 11).

استخدم `--skip-orchestration` لتجهيز الأجهزة الافتراضية بدون بدء خدمات Rediacc, مفيد لاختبار طبقة VM بمعزل.

## الإعداد

يستخدم VM الجسر إعدادات افتراضية أصغر من VMs العاملة:

| دور VM | وحدات المعالج | ذاكرة الوصول العشوائي | القرص |
|--------|--------------|----------------------|-------|
| Bridge | 1 | 1024 MB | 8 GB |
| Worker | 2 | 4096 MB | 16 GB |

تتجاوز متغيرات البيئة موارد VM العاملة:

| المتغير | الافتراضي | الوصف |
|---------|-----------|-------|
| `VM_CPU` | 2 | أنوية المعالج لكل VM عاملة |
| `VM_RAM` | 4096 | ذاكرة الوصول العشوائي بالميغابايت لكل VM عاملة |
| `VM_DSK` | 16 | حجم القرص بالغيغابايت لكل VM عاملة |
| `VM_NET_BASE` | 192.168.111 | قاعدة الشبكة (KVM فقط) |
| `RENET_DATA_DIR` | ~/.renet | مجلد البيانات لأقراص VM والإعداد |

## مرجع الأوامر

| الأمر | الوصف |
|-------|-------|
| `rdc ops setup` | تثبيت متطلبات المنصة الأساسية (KVM أو QEMU) |
| `rdc ops check` | التحقق من تثبيت المتطلبات الأساسية وعملها |
| `rdc ops up [options]` | تجهيز مجموعة VM |
| `rdc ops down` | تدمير جميع VMs وتنظيف الموارد |
| `rdc ops status` | عرض حالة جميع VMs |
| `rdc ops ssh <vm-id> [command...]` | الاتصال بـ VM عبر SSH، أو تشغيل أمر عليها |

### خيارات `rdc ops up`

| الخيار | الوصف |
|--------|-------|
| `--basic` | مجموعة بسيطة (جسر + عامل واحد) |
| `--lite` | تخطي تجهيز VM (مفاتيح SSH فقط) |
| `--force` | فرض إعادة إنشاء الأجهزة الافتراضية الموجودة |
| `--parallel` | تجهيز VMs بالتوازي |
| `--skip-orchestration` | VMs فقط، بدون خدمات Rediacc |
| `--backend <kvm\|qemu>` | تجاوز الخلفية المكتشفة تلقائياً |
| `--os <name>` | صورة نظام التشغيل (الافتراضي: ubuntu-24.04) |
| `--debug` | مخرجات مفصّلة |

## الفروق بين المنصات

### Linux (KVM)
- يستخدم libvirt لإدارة دورة حياة VM
- شبكات جسرية, تحصل VMs على عناوين IP على شبكة افتراضية (192.168.111.x)
- اتصال SSH مباشر بعناوين IP للـ VM
- يتطلب `/dev/kvm` وخدمة libvirtd

### macOS (QEMU + HVF)
- يستخدم عمليات QEMU تُدار عبر ملفات PID
- شبكات وضع المستخدم مع إعادة توجيه منافذ SSH (localhost:222XX)
- SSH عبر المنافذ المُعاد توجيهها، وليس عناوين IP المباشرة
- إنشاء ISOs لـ Cloud-init عبر `mkisofs`

## استكشاف الأخطاء وإصلاحها

### وضع التصحيح

أضف `--debug` إلى أي أمر للحصول على مخرجات مفصّلة:

```bash
rdc ops up --basic --debug
```

### المشاكل الشائعة

**KVM غير متاح (Linux)**
- تحقق من وجود `/dev/kvm`: `ls -la /dev/kvm`
- فعّل المحاكاة الافتراضية في BIOS/UEFI
- حمّل وحدة النواة: `sudo modprobe kvm_intel` أو `sudo modprobe kvm_amd`

**libvirtd لا يعمل (Linux)**
```bash
sudo systemctl enable --now libvirtd
```

**QEMU غير موجود (macOS)**
```bash
brew install qemu cdrtools
```

**VMs لا تبدأ**
- تحقق من مساحة القرص في `~/.renet/disks/`
- شغّل `rdc ops check` للتحقق من جميع المتطلبات الأساسية
- جرّب `rdc ops down` ثم `rdc ops up --force`