223 lines
5.2 KiB
Markdown
223 lines
5.2 KiB
Markdown
# bold-nfs macOS Test Guide
|
|
|
|
**Date:** 2026-05-17 13:32
|
|
**Status:** Phase 1 - Testing bold-nfs on macOS
|
|
|
|
---
|
|
|
|
## 1. Test Results (bold-mem startup)
|
|
|
|
### ✅ Successful Indicators
|
|
|
|
**Build success:**
|
|
- bold-mem compiled successfully (14.88s)
|
|
- Binary location: `/tmp/bold-nfs/target/release/bold-mem`
|
|
- Dependencies: vfs-0.12.2, tokio, serde_yaml, clap
|
|
|
|
**Server startup success:**
|
|
```
|
|
INFO bold: Server listening self.bind=127.0.0.1:11112
|
|
DEBUG bold::server::filemanager: get_filehandle_by_path: /
|
|
DEBUG bold::server::filemanager: created new filehandle id: [128, 0, 0, 0, ...]
|
|
DEBUG bold::server::filemanager::filehandle: attr_change: Ok(VfsMetadata { file_type: Directory, len: 0, ... })
|
|
```
|
|
|
|
**Port listening:**
|
|
```
|
|
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
|
|
bold-mem 70821 accusys 9u IPv4 0x3f7e929e25b6f696 0t0 TCP localhost:dicom (LISTEN)
|
|
```
|
|
|
|
**Process status:**
|
|
- PID: 70821
|
|
- Command: `./target/release/bold-mem --debug exec/memoryfs.yaml`
|
|
- Status: Running (server loop active)
|
|
|
|
---
|
|
|
|
## 2. Manual Test Instructions
|
|
|
|
### Step 1: Start bold-mem NFS server
|
|
|
|
```bash
|
|
cd /tmp/bold-nfs
|
|
|
|
# Start server with debug logging
|
|
./target/release/bold-mem --debug exec/memoryfs.yaml
|
|
|
|
# Expected output:
|
|
# Loading YAML: "exec/memoryfs.yaml"
|
|
# INFO bold: Server listening 127.0.0.1:11112
|
|
# (Server will run indefinitely)
|
|
```
|
|
|
|
### Step 2: Create mount directory
|
|
|
|
```bash
|
|
sudo mkdir -p /tmp/nfs_demo
|
|
```
|
|
|
|
### Step 3: Mount NFS volume (macOS)
|
|
|
|
**Option A: NFSv4 mount (recommended)**
|
|
```bash
|
|
sudo mount_nfs -o vers=4,port=11112,mountport=11112 127.0.0.1:/ /tmp/nfs_demo
|
|
```
|
|
|
|
**Option B: NFSv3 mount (if v4 fails)**
|
|
```bash
|
|
sudo mount_nfs -o vers=3,port=11112,mountport=11112 127.0.0.1:/ /tmp/nfs_demo
|
|
```
|
|
|
|
**Option C: Generic NFS mount**
|
|
```bash
|
|
sudo mount -t nfs -o port=11112,mountport=11112 127.0.0.1:/ /tmp/nfs_demo
|
|
```
|
|
|
|
### Step 4: Verify mount
|
|
|
|
```bash
|
|
# Check mount status
|
|
mount | grep nfs_demo
|
|
|
|
# Expected output:
|
|
# 127.0.0.1:/ on /tmp/nfs_demo (nfs, ...
|
|
|
|
# List files
|
|
ls -la /tmp/nfs_demo/
|
|
|
|
# Expected output (from memoryfs.yaml):
|
|
# home/
|
|
# etc/
|
|
# init
|
|
```
|
|
|
|
### Step 5: Test file operations
|
|
|
|
```bash
|
|
# Navigate to home directory
|
|
ls -la /tmp/nfs_demo/home/user/
|
|
|
|
# Read file1
|
|
cat /tmp/nfs_demo/home/user/file1
|
|
|
|
# Expected content:
|
|
# This is the content of file1
|
|
|
|
# Create new file
|
|
echo "Test write" > /tmp/nfs_demo/home/user/test_write.txt
|
|
|
|
# Verify file created
|
|
ls -la /tmp/nfs_demo/home/user/test_write.txt
|
|
|
|
# Read back
|
|
cat /tmp/nfs_demo/home/user/test_write.txt
|
|
```
|
|
|
|
### Step 6: Unmount
|
|
|
|
```bash
|
|
sudo umount /tmp/nfs_demo
|
|
|
|
# Or force unmount if needed
|
|
sudo umount -f /tmp/nfs_demo
|
|
```
|
|
|
|
---
|
|
|
|
## 3. Expected Debug Output
|
|
|
|
When mount_nfs connects, bold-mem will show:
|
|
|
|
```
|
|
DEBUG bold: Client connected addr=127.0.0.1:XXXXX
|
|
DEBUG bold::server::filemanager: get_filehandle_by_path: /
|
|
DEBUG bold::server::nfs40::op_getattr: getattr request
|
|
DEBUG bold::server::nfs40::op_readdir: readdir request
|
|
DEBUG bold::server::nfs40::op_lookup: lookup request
|
|
DEBUG bold::server::nfs40::op_read: read request
|
|
```
|
|
|
|
---
|
|
|
|
## 4. Troubleshooting
|
|
|
|
### If mount_nfs fails
|
|
|
|
**Error: "mount_nfs: can't mount / from 127.0.0.1"**
|
|
|
|
**Solution:**
|
|
1. Check bold-mem is running: `ps aux | grep bold-mem`
|
|
2. Check port is listening: `lsof -i :11112`
|
|
3. Try different NFS options:
|
|
```bash
|
|
sudo mount_nfs -o vers=4,port=11112,mountport=11112,soft 127.0.0.1:/ /tmp/nfs_demo
|
|
sudo mount_nfs -o vers=4,port=11112,mountport=11112,fg 127.0.0.1:/ /tmp/nfs_demo
|
|
```
|
|
|
|
**Error: "Permission denied"**
|
|
|
|
**Solution:**
|
|
1. NFS requires root permissions for mount
|
|
2. Use sudo for mount command
|
|
3. Check bold-mem permissions: `ls -la /tmp/bold-nfs/target/release/bold-mem`
|
|
|
|
**Error: "Connection refused"**
|
|
|
|
**Solution:**
|
|
1. Restart bold-mem server
|
|
2. Check firewall: `sudo pfctl -s all`
|
|
3. Try different port: `bold-mem --bind 127.0.0.1:2049`
|
|
|
|
---
|
|
|
|
## 5. Success Criteria
|
|
|
|
**Phase 1 success criteria:**
|
|
- ✅ bold-mem compiles and runs
|
|
- ✅ Server listens on port 11112
|
|
- ⏳ macOS mount_nfs connects (requires manual test)
|
|
- ⏳ Files visible in mount directory
|
|
- ⏳ File reading works
|
|
- ⏳ File writing works
|
|
|
|
**If Phase 1 succeeds → Proceed to Phase 2 (MarkBaseFS implementation)**
|
|
|
|
**If Phase 1 fails → Investigate macOS NFS compatibility, consider libnfs-go fallback**
|
|
|
|
---
|
|
|
|
## 6. Reference Files
|
|
|
|
**bold-nfs source code:**
|
|
- `/tmp/bold-nfs/lib/src/lib.rs` - NFSServer implementation
|
|
- `/tmp/bold-nfs/lib/src/server/filemanager/mod.rs` - FileManager (624 lines)
|
|
- `/tmp/bold-nfs/lib/src/server/nfs40/*.rs` - NFSv4.0 operations
|
|
|
|
**vfs crate documentation:**
|
|
- https://docs.rs/vfs/0.12.0/vfs/filesystem/trait.FileSystem.html
|
|
|
|
**memoryfs.yaml example:**
|
|
- `/tmp/bold-nfs/exec/memoryfs.yaml` - YAML filesystem definition
|
|
|
|
---
|
|
|
|
## 7. Next Steps (After Manual Test)
|
|
|
|
**If mount succeeds:**
|
|
1. Document mount command that works
|
|
2. Note NFS options required for macOS
|
|
3. Proceed to Phase 2 (MarkBaseFS implementation)
|
|
4. Estimate: Day 2-3 (12-16 hours)
|
|
|
|
**If mount fails:**
|
|
1. Research macOS NFSv4 compatibility
|
|
2. Try NFSv3 mount (vers=3 option)
|
|
3. Consider libnfs-go fallback (Go implementation)
|
|
4. Estimate: +1 day debugging
|
|
|
|
---
|
|
|
|
**Test guide prepared by:** OpenCode AI Assistant
|
|
**Current status:** Waiting for manual mount test (sudo required)
|
|
**Recommendation:** Execute manual test, then proceed based on results |