Commit All
This commit is contained in:
		
							
								
								
									
										241
									
								
								FIX_INSTALLATION.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										241
									
								
								FIX_INSTALLATION.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,241 @@
 | 
			
		||||
# 🔧 Fix Installation Issues on Raspberry Pi
 | 
			
		||||
 | 
			
		||||
This guide helps fix the "No space left on device" error when installing the Turmli Calendar on Raspberry Pi.
 | 
			
		||||
 | 
			
		||||
## 🚨 The Problem
 | 
			
		||||
 | 
			
		||||
When running `pip install` on Raspberry Pi, you're getting:
 | 
			
		||||
```
 | 
			
		||||
ERROR: Could not install packages due to an OSError: [Errno 28] No space left on device
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This happens because:
 | 
			
		||||
- `/tmp` is in RAM (tmpfs) and limited to ~214MB on your Pi
 | 
			
		||||
- The `watchfiles` package requires compilation with Rust
 | 
			
		||||
- The build process needs more space than available in `/tmp`
 | 
			
		||||
 | 
			
		||||
## ✅ Quick Fix
 | 
			
		||||
 | 
			
		||||
### Option 1: Use the Fix Script (Recommended)
 | 
			
		||||
 | 
			
		||||
1. Copy the fix script to your Pi:
 | 
			
		||||
```bash
 | 
			
		||||
# From your development machine
 | 
			
		||||
scp fix_install_rpi.sh pi@turmli-pi:/tmp/turmli-calendar/
 | 
			
		||||
scp requirements-rpi.txt pi@turmli-pi:/tmp/turmli-calendar/
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
2. Run the fix script:
 | 
			
		||||
```bash
 | 
			
		||||
cd /tmp/turmli-calendar
 | 
			
		||||
sudo ./fix_install_rpi.sh
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Option 2: Manual Fix
 | 
			
		||||
 | 
			
		||||
1. **Clean up temp space:**
 | 
			
		||||
```bash
 | 
			
		||||
# Clean pip cache
 | 
			
		||||
rm -rf /tmp/pip-*
 | 
			
		||||
sudo apt-get clean
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
2. **Create a custom temp directory:**
 | 
			
		||||
```bash
 | 
			
		||||
sudo mkdir -p /opt/turmli-calendar/tmp
 | 
			
		||||
sudo chown pi:pi /opt/turmli-calendar/tmp
 | 
			
		||||
export TMPDIR=/opt/turmli-calendar/tmp
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
3. **Use the optimized requirements file:**
 | 
			
		||||
```bash
 | 
			
		||||
cd /opt/turmli-calendar
 | 
			
		||||
 | 
			
		||||
# Create optimized requirements without problematic packages
 | 
			
		||||
cat > requirements-rpi.txt << 'EOF'
 | 
			
		||||
fastapi>=0.104.0
 | 
			
		||||
uvicorn>=0.24.0
 | 
			
		||||
httpx>=0.25.0
 | 
			
		||||
icalendar>=5.0.0
 | 
			
		||||
jinja2>=3.1.0
 | 
			
		||||
python-multipart>=0.0.6
 | 
			
		||||
apscheduler>=3.10.0
 | 
			
		||||
pytz>=2023.3
 | 
			
		||||
EOF
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
4. **Install packages with the custom temp directory:**
 | 
			
		||||
```bash
 | 
			
		||||
# Activate virtual environment
 | 
			
		||||
source /opt/turmli-calendar/venv/bin/activate
 | 
			
		||||
 | 
			
		||||
# Upgrade pip first
 | 
			
		||||
TMPDIR=/opt/turmli-calendar/tmp pip install --upgrade pip wheel setuptools
 | 
			
		||||
 | 
			
		||||
# Install packages
 | 
			
		||||
TMPDIR=/opt/turmli-calendar/tmp pip install \
 | 
			
		||||
    --no-cache-dir \
 | 
			
		||||
    --prefer-binary \
 | 
			
		||||
    --no-build-isolation \
 | 
			
		||||
    -r requirements-rpi.txt
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
5. **Clean up:**
 | 
			
		||||
```bash
 | 
			
		||||
rm -rf /opt/turmli-calendar/tmp
 | 
			
		||||
deactivate
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## 🎯 Alternative: Install Packages One by One
 | 
			
		||||
 | 
			
		||||
If the above doesn't work, install packages individually:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
cd /opt/turmli-calendar
 | 
			
		||||
source venv/bin/activate
 | 
			
		||||
 | 
			
		||||
# Set temp directory
 | 
			
		||||
export TMPDIR=/opt/turmli-calendar/tmp
 | 
			
		||||
mkdir -p $TMPDIR
 | 
			
		||||
 | 
			
		||||
# Install each package separately
 | 
			
		||||
pip install --no-cache-dir fastapi
 | 
			
		||||
pip install --no-cache-dir uvicorn  # Without [standard] extras
 | 
			
		||||
pip install --no-cache-dir httpx
 | 
			
		||||
pip install --no-cache-dir icalendar
 | 
			
		||||
pip install --no-cache-dir jinja2
 | 
			
		||||
pip install --no-cache-dir python-multipart
 | 
			
		||||
pip install --no-cache-dir apscheduler
 | 
			
		||||
pip install --no-cache-dir pytz
 | 
			
		||||
 | 
			
		||||
# Clean up
 | 
			
		||||
rm -rf $TMPDIR
 | 
			
		||||
deactivate
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## 🚀 Start the Application
 | 
			
		||||
 | 
			
		||||
After fixing the installation:
 | 
			
		||||
 | 
			
		||||
### Using systemd service:
 | 
			
		||||
```bash
 | 
			
		||||
sudo systemctl start turmli-calendar
 | 
			
		||||
sudo systemctl status turmli-calendar
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Or manually with minimal resources:
 | 
			
		||||
```bash
 | 
			
		||||
cd /opt/turmli-calendar
 | 
			
		||||
./start_minimal.sh
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Or directly:
 | 
			
		||||
```bash
 | 
			
		||||
cd /opt/turmli-calendar
 | 
			
		||||
source venv/bin/activate
 | 
			
		||||
python -m uvicorn main:app --host 0.0.0.0 --port 8000 --workers 1 --log-level warning
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## 💾 Increase System Resources (Optional)
 | 
			
		||||
 | 
			
		||||
### 1. Increase Swap Space
 | 
			
		||||
```bash
 | 
			
		||||
sudo nano /etc/dphys-swapfile
 | 
			
		||||
# Change: CONF_SWAPSIZE=512
 | 
			
		||||
sudo dphys-swapfile setup
 | 
			
		||||
sudo dphys-swapfile swapon
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### 2. Use Different Temp Location
 | 
			
		||||
```bash
 | 
			
		||||
# Edit /etc/fstab to mount /tmp on disk instead of RAM
 | 
			
		||||
sudo nano /etc/fstab
 | 
			
		||||
# Add: tmpfs /tmp tmpfs defaults,noatime,nosuid,size=512m 0 0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### 3. Free Up Disk Space
 | 
			
		||||
```bash
 | 
			
		||||
# Remove unnecessary packages
 | 
			
		||||
sudo apt-get autoremove
 | 
			
		||||
sudo apt-get clean
 | 
			
		||||
 | 
			
		||||
# Clear journal logs
 | 
			
		||||
sudo journalctl --vacuum-time=7d
 | 
			
		||||
 | 
			
		||||
# Remove old kernels (if any)
 | 
			
		||||
sudo apt-get autoremove --purge
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## ⚠️ What We're Skipping
 | 
			
		||||
 | 
			
		||||
The optimized installation skips these optional packages that require compilation:
 | 
			
		||||
- `watchfiles` - File watching for auto-reload (not needed in production)
 | 
			
		||||
- `websockets` - WebSocket support (not used by this app)
 | 
			
		||||
- `httptools` - Faster HTTP parsing (marginal improvement)
 | 
			
		||||
- `uvloop` - Faster event loop (nice to have, but not essential)
 | 
			
		||||
 | 
			
		||||
The application will work perfectly fine without these packages!
 | 
			
		||||
 | 
			
		||||
## 🔍 Verify Installation
 | 
			
		||||
 | 
			
		||||
Test that everything is working:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
cd /opt/turmli-calendar
 | 
			
		||||
source venv/bin/activate
 | 
			
		||||
 | 
			
		||||
# Test imports
 | 
			
		||||
python -c "import fastapi, uvicorn, httpx, icalendar, jinja2, apscheduler, pytz; print('✓ All modules OK')"
 | 
			
		||||
 | 
			
		||||
# Test the application
 | 
			
		||||
python -c "from main import app; print('✓ Application loads OK')"
 | 
			
		||||
 | 
			
		||||
deactivate
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## 📊 Check System Resources
 | 
			
		||||
 | 
			
		||||
Monitor your system during installation:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
# In another terminal, watch resources
 | 
			
		||||
watch -n 1 'free -h; echo; df -h /tmp /opt'
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## 🆘 Still Having Issues?
 | 
			
		||||
 | 
			
		||||
1. **Check available space:**
 | 
			
		||||
   ```bash
 | 
			
		||||
   df -h
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
2. **Check memory:**
 | 
			
		||||
   ```bash
 | 
			
		||||
   free -h
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
3. **Try rebooting:**
 | 
			
		||||
   ```bash
 | 
			
		||||
   sudo reboot
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
4. **Use a bigger SD card** (16GB+ recommended)
 | 
			
		||||
 | 
			
		||||
5. **Consider Raspberry Pi OS Lite** (uses less resources)
 | 
			
		||||
 | 
			
		||||
## 📝 Notes
 | 
			
		||||
 | 
			
		||||
- The application uses about 80-120MB RAM when running
 | 
			
		||||
- Installation needs about 200-300MB free disk space
 | 
			
		||||
- Compilation can use up to 500MB temp space
 | 
			
		||||
- Using pre-built wheels (--prefer-binary) avoids most compilation
 | 
			
		||||
 | 
			
		||||
## ✨ Success!
 | 
			
		||||
 | 
			
		||||
Once installed, the application will:
 | 
			
		||||
- Start automatically on boot
 | 
			
		||||
- Restart if it crashes
 | 
			
		||||
- Use minimal resources (limited to 256MB RAM)
 | 
			
		||||
- Be accessible at `http://your-pi-ip:8000`
 | 
			
		||||
 | 
			
		||||
Good luck with your installation! 🚀
 | 
			
		||||
		Reference in New Issue
	
	Block a user