259 lines
7.1 KiB
Markdown
259 lines
7.1 KiB
Markdown
# Optional Dependencies Guide
|
|
|
|
DigiServer v2 uses an optimized dependency installation strategy to minimize Docker image size while maintaining full functionality.
|
|
|
|
## Overview
|
|
|
|
The base Docker image (~400MB) includes only essential dependencies:
|
|
- **Poppler Utils** - PDF to image conversion
|
|
- **FFmpeg** - Video processing and validation
|
|
- **Python 3.13** - Application runtime
|
|
|
|
Optional dependencies can be installed on-demand:
|
|
- **LibreOffice** (~500MB) - PowerPoint (PPTX/PPT) to image conversion
|
|
|
|
## Why Optional Dependencies?
|
|
|
|
By excluding LibreOffice from the base image, we reduce:
|
|
- **Initial image size**: From ~900MB to ~400MB (56% reduction)
|
|
- **Download time**: Faster deployments
|
|
- **Storage requirements**: Lower disk usage on hosts
|
|
|
|
Users who don't need PowerPoint conversion benefit from a smaller, faster image.
|
|
|
|
## Installation Methods
|
|
|
|
### 1. Web UI (Recommended)
|
|
|
|
The easiest way to install LibreOffice:
|
|
|
|
1. Log in to DigiServer admin panel
|
|
2. Navigate to **Admin Panel** → **System Dependencies**
|
|
3. Click **"Install LibreOffice"** button
|
|
4. Wait 2-5 minutes for installation
|
|
5. Refresh the page to verify installation
|
|
|
|
The web interface provides:
|
|
- Real-time installation status
|
|
- Version verification
|
|
- Error reporting
|
|
- No terminal access needed
|
|
|
|
### 2. Docker Exec (Manual)
|
|
|
|
For Docker deployments, use `docker exec`:
|
|
|
|
```bash
|
|
# Enter the container
|
|
docker exec -it digiserver bash
|
|
|
|
# Run the installation script
|
|
sudo /app/install_libreoffice.sh
|
|
|
|
# Verify installation
|
|
libreoffice --version
|
|
```
|
|
|
|
### 3. Direct Installation (Non-Docker)
|
|
|
|
For bare-metal or VM deployments:
|
|
|
|
```bash
|
|
# Make script executable (if not already)
|
|
chmod +x /srv/digiserver-v2/install_libreoffice.sh
|
|
|
|
# Run the installation script
|
|
sudo /srv/digiserver-v2/install_libreoffice.sh
|
|
|
|
# Verify installation
|
|
libreoffice --version
|
|
```
|
|
|
|
## Checking Dependency Status
|
|
|
|
### Web Interface
|
|
|
|
Navigate to **Admin Panel** → **System Dependencies** to see:
|
|
- ✅ LibreOffice: Installed or ❌ Not installed
|
|
- ✅ Poppler Utils: Installed (always present)
|
|
- ✅ FFmpeg: Installed (always present)
|
|
|
|
### Command Line
|
|
|
|
Check individual dependencies:
|
|
|
|
```bash
|
|
# LibreOffice
|
|
libreoffice --version
|
|
|
|
# Poppler
|
|
pdftoppm -v
|
|
|
|
# FFmpeg
|
|
ffmpeg -version
|
|
```
|
|
|
|
## File Type Support Matrix
|
|
|
|
| File Type | Required Dependency | Status |
|
|
|-----------|-------------------|---------|
|
|
| **Images** (JPG, PNG, GIF) | None | Always supported |
|
|
| **PDF** | Poppler Utils | Always available |
|
|
| **Videos** (MP4, AVI, MOV) | FFmpeg | Always available |
|
|
| **PowerPoint** (PPTX, PPT) | LibreOffice | Optional install |
|
|
|
|
## Upload Behavior
|
|
|
|
### Without LibreOffice
|
|
|
|
When you try to upload a PowerPoint file without LibreOffice:
|
|
- Upload will be **rejected**
|
|
- Error message: *"LibreOffice is not installed. Please install it from the Admin Panel → System Dependencies to upload PowerPoint files."*
|
|
- Other file types (PDF, images, videos) work normally
|
|
|
|
### With LibreOffice
|
|
|
|
After installation:
|
|
- PowerPoint files are converted to high-quality PNG images
|
|
- Each slide becomes a separate media item
|
|
- Slides maintain aspect ratio and resolution
|
|
- Original PPTX file is deleted after conversion
|
|
|
|
## Technical Details
|
|
|
|
### Installation Script
|
|
|
|
The `install_libreoffice.sh` script:
|
|
1. Checks for root/sudo privileges
|
|
2. Verifies if LibreOffice is already installed
|
|
3. Updates apt package cache
|
|
4. Installs `libreoffice` and `libreoffice-impress`
|
|
5. Verifies successful installation
|
|
6. Reports version and status
|
|
|
|
### Docker Implementation
|
|
|
|
The Dockerfile includes:
|
|
- Sudo access for `appuser` to run installation script
|
|
- Script permissions set during build
|
|
- No LibreOffice in base layers (smaller image)
|
|
|
|
### Security Considerations
|
|
|
|
- Installation requires sudo/root access
|
|
- In Docker, `appuser` has limited sudo rights (only for installation script)
|
|
- Installation script validates LibreOffice binary after install
|
|
- No external downloads except from official apt repositories
|
|
|
|
## Installation Time
|
|
|
|
Typical installation times:
|
|
- **Fast network** (100+ Mbps): 2-3 minutes
|
|
- **Average network** (10-100 Mbps): 3-5 minutes
|
|
- **Slow network** (<10 Mbps): 5-10 minutes
|
|
|
|
The installation downloads approximately 450-500MB of packages.
|
|
|
|
## Troubleshooting
|
|
|
|
### Installation Fails
|
|
|
|
**Error**: "Permission denied"
|
|
- **Solution**: Ensure script has execute permissions (`chmod +x`)
|
|
- **Docker**: Check sudoers configuration in Dockerfile
|
|
|
|
**Error**: "Unable to locate package"
|
|
- **Solution**: Run `sudo apt-get update` first
|
|
- **Docker**: Rebuild image with fresh apt cache
|
|
|
|
### Installation Hangs
|
|
|
|
- Check internet connectivity
|
|
- Verify apt repositories are accessible
|
|
- In Docker, check container has network access
|
|
- Increase timeout if on slow connection
|
|
|
|
### Verification Fails
|
|
|
|
**Symptom**: Installation completes but LibreOffice not found
|
|
- **Solution**: Check LibreOffice was installed to expected path
|
|
- Run: `which libreoffice` to locate binary
|
|
- Verify with: `libreoffice --version`
|
|
|
|
### Upload Still Fails After Installation
|
|
|
|
1. Verify installation: Admin Panel → System Dependencies
|
|
2. Check server logs for conversion errors
|
|
3. Restart application: `docker restart digiserver` (Docker) or restart Flask
|
|
4. Try uploading a simple PPTX file to test
|
|
|
|
## Uninstallation
|
|
|
|
To remove LibreOffice and reclaim space:
|
|
|
|
```bash
|
|
# In container or host
|
|
sudo apt-get remove --purge libreoffice libreoffice-impress
|
|
sudo apt-get autoremove
|
|
sudo apt-get clean
|
|
```
|
|
|
|
This frees approximately 500MB of disk space.
|
|
|
|
## Production Recommendations
|
|
|
|
### When to Install LibreOffice
|
|
|
|
Install LibreOffice if:
|
|
- Users need to upload PowerPoint presentations
|
|
- You have >1GB free disk space
|
|
- Network bandwidth supports 500MB download
|
|
|
|
### When to Skip LibreOffice
|
|
|
|
Skip LibreOffice if:
|
|
- Only using PDF, images, and videos
|
|
- Disk space is constrained (<2GB)
|
|
- Want minimal installation footprint
|
|
- Can convert PPTX to PDF externally
|
|
|
|
### Multi-Container Deployments
|
|
|
|
For multiple instances:
|
|
- **Option A**: Create custom image with LibreOffice pre-installed
|
|
- **Option B**: Install on each container individually
|
|
- **Option C**: Use shared volume for LibreOffice binaries
|
|
|
|
## FAQ
|
|
|
|
**Q: Will removing LibreOffice break existing media?**
|
|
A: No, converted slides remain as PNG images after conversion.
|
|
|
|
**Q: Can I pre-install LibreOffice in the Docker image?**
|
|
A: Yes, uncomment the `libreoffice` line in Dockerfile and rebuild.
|
|
|
|
**Q: How much space does LibreOffice use?**
|
|
A: Approximately 450-500MB installed.
|
|
|
|
**Q: Does LibreOffice run during conversion?**
|
|
A: Yes, in headless mode. It converts slides to PNG without GUI.
|
|
|
|
**Q: Can I use other presentation converters?**
|
|
A: The code currently only supports LibreOffice. Custom converters require code changes.
|
|
|
|
**Q: Is LibreOffice safe for production?**
|
|
A: Yes, LibreOffice is widely used in production environments for document conversion.
|
|
|
|
## Support
|
|
|
|
For issues with optional dependencies:
|
|
1. Check the **System Dependencies** page in Admin Panel
|
|
2. Review server logs: `docker logs digiserver`
|
|
3. Verify system requirements (disk space, memory)
|
|
4. Consult DOCKER.md for container-specific guidance
|
|
|
|
## Version History
|
|
|
|
- **v2.0**: Introduced optional LibreOffice installation
|
|
- **v1.0**: LibreOffice included in base image (larger size)
|