636 lines
13 KiB
Markdown
636 lines
13 KiB
Markdown
# Automatic Updates Guide
|
|
|
|
## Overview
|
|
|
|
NIP's automatic update system keeps your recipes, build tools, and NIP itself up to date with minimal user intervention. Updates are checked periodically and can be applied with a single command.
|
|
|
|
## Features
|
|
|
|
- **Automatic Update Checking**: Periodic checks for new versions
|
|
- **Multiple Update Channels**: Stable, Beta, and Nightly
|
|
- **Configurable Frequency**: Never, Daily, Weekly, or Monthly
|
|
- **Selective Notifications**: Choose which components to monitor
|
|
- **Automatic Backups**: All updates create backups before applying
|
|
- **Easy Rollback**: Revert to previous versions if needed
|
|
- **Non-Intrusive**: Updates never interrupt your workflow
|
|
|
|
## Quick Start
|
|
|
|
### 1. Check for Updates
|
|
|
|
```bash
|
|
nip update check
|
|
```
|
|
|
|
Output:
|
|
```
|
|
🔍 Checking for updates...
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
📦 Update Available: recipes
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
Current Version: abc1234
|
|
Latest Version: def5678
|
|
|
|
Changelog:
|
|
- Added 50 new recipes
|
|
- Updated Nix recipes for 24.05
|
|
- Fixed Gentoo build issues
|
|
|
|
To update, run:
|
|
nip update recipes
|
|
```
|
|
|
|
### 2. Update Components
|
|
|
|
```bash
|
|
# Update recipes
|
|
nip update recipes
|
|
|
|
# Update all components
|
|
nip update all
|
|
|
|
# Update NIP itself
|
|
nip update self
|
|
```
|
|
|
|
### 3. Configure Automatic Updates
|
|
|
|
```bash
|
|
# Enable automatic updates
|
|
nip update config --enable --frequency weekly
|
|
|
|
# Set update channel
|
|
nip update config --channel stable
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Update Configuration File
|
|
|
|
Settings are stored in `~/.config/nip/update-config.json`:
|
|
|
|
```json
|
|
{
|
|
"enabled": true,
|
|
"channel": "stable",
|
|
"frequency": "weekly",
|
|
"lastCheck": 1700000000,
|
|
"notifyRecipes": true,
|
|
"notifyTools": true,
|
|
"notifyNip": true
|
|
}
|
|
```
|
|
|
|
### Configuration Options
|
|
|
|
| Option | Description | Values | Default |
|
|
|--------|-------------|--------|---------|
|
|
| `enabled` | Enable automatic updates | true/false | true |
|
|
| `channel` | Update channel | stable/beta/nightly | stable |
|
|
| `frequency` | Check frequency | never/daily/weekly/monthly | weekly |
|
|
| `notifyRecipes` | Notify of recipe updates | true/false | true |
|
|
| `notifyTools` | Notify of tool updates | true/false | true |
|
|
| `notifyNip` | Notify of NIP updates | true/false | true |
|
|
|
|
### Update Channels
|
|
|
|
**Stable** (Recommended)
|
|
- Thoroughly tested releases
|
|
- Recommended for production use
|
|
- Updates every 2-4 weeks
|
|
- Maximum stability
|
|
|
|
**Beta**
|
|
- Early access to new features
|
|
- Tested but may have minor issues
|
|
- Updates weekly
|
|
- Good for testing new features
|
|
|
|
**Nightly**
|
|
- Bleeding edge development builds
|
|
- May have bugs or breaking changes
|
|
- Updates daily
|
|
- For developers and early adopters
|
|
|
|
### Update Frequency
|
|
|
|
**Never**
|
|
- Manual updates only
|
|
- No automatic checking
|
|
- Use when you want full control
|
|
|
|
**Daily**
|
|
- Check for updates every day
|
|
- Good for nightly channel users
|
|
- Ensures latest features/fixes
|
|
|
|
**Weekly** (Recommended)
|
|
- Check for updates once per week
|
|
- Good balance of freshness and stability
|
|
- Recommended for most users
|
|
|
|
**Monthly**
|
|
- Check for updates once per month
|
|
- Minimal interruption
|
|
- Good for stable environments
|
|
|
|
## Usage
|
|
|
|
### Check for Updates
|
|
|
|
```bash
|
|
# Check if updates are available
|
|
nip update check
|
|
|
|
# Force check even if not due
|
|
nip update check --force
|
|
```
|
|
|
|
### Update Recipes
|
|
|
|
Recipes contain package definitions and build instructions:
|
|
|
|
```bash
|
|
# Update recipe repository
|
|
nip update recipes
|
|
```
|
|
|
|
Output:
|
|
```
|
|
📥 Fetching recipe updates...
|
|
🔄 Updating recipes...
|
|
|
|
📝 Changes:
|
|
abc1234 Added vim recipe
|
|
def5678 Updated firefox to 120.0
|
|
ghi9012 Fixed gentoo portage issues
|
|
|
|
✅ Recipes updated successfully
|
|
```
|
|
|
|
### Update Tools
|
|
|
|
Build tools (Nix, Gentoo, PKGSRC) are updated via recipes:
|
|
|
|
```bash
|
|
# Tools are updated through recipes
|
|
nip update recipes
|
|
```
|
|
|
|
### Update NIP
|
|
|
|
Update NIP itself to the latest version:
|
|
|
|
```bash
|
|
# Check for NIP updates
|
|
nip update check
|
|
|
|
# Update NIP
|
|
nip update self
|
|
```
|
|
|
|
Output:
|
|
```
|
|
📦 NIP Update Available
|
|
|
|
Current Version: 0.1.0
|
|
Latest Version: 0.2.0
|
|
|
|
Changelog:
|
|
- Added remote binary cache
|
|
- Improved container support
|
|
- Performance improvements
|
|
|
|
Update now? (y/N): y
|
|
|
|
📥 Downloading NIP update...
|
|
🔄 Installing update...
|
|
✅ NIP updated successfully
|
|
Please restart NIP to use the new version
|
|
```
|
|
|
|
### Update All Components
|
|
|
|
Update everything at once:
|
|
|
|
```bash
|
|
nip update all
|
|
```
|
|
|
|
Output:
|
|
```
|
|
🔄 Updating all components...
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
📦 Updating Recipes
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
✅ Recipes updated successfully
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
📦 Updating NIP
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
✅ NIP updated successfully
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
✅ All updates completed successfully
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
```
|
|
|
|
## Configuration Commands
|
|
|
|
### Enable/Disable Updates
|
|
|
|
```bash
|
|
# Enable automatic updates
|
|
nip update config --enable
|
|
|
|
# Disable automatic updates
|
|
nip update config --disable
|
|
```
|
|
|
|
### Set Update Channel
|
|
|
|
```bash
|
|
# Use stable channel (recommended)
|
|
nip update config --channel stable
|
|
|
|
# Use beta channel
|
|
nip update config --channel beta
|
|
|
|
# Use nightly channel
|
|
nip update config --channel nightly
|
|
```
|
|
|
|
### Set Update Frequency
|
|
|
|
```bash
|
|
# Check weekly (recommended)
|
|
nip update config --frequency weekly
|
|
|
|
# Check daily
|
|
nip update config --frequency daily
|
|
|
|
# Check monthly
|
|
nip update config --frequency monthly
|
|
|
|
# Never check automatically
|
|
nip update config --frequency never
|
|
```
|
|
|
|
### Configure Notifications
|
|
|
|
```bash
|
|
# Enable recipe notifications
|
|
nip update config --notify-recipes yes
|
|
|
|
# Disable tool notifications
|
|
nip update config --notify-tools no
|
|
|
|
# Enable NIP notifications
|
|
nip update config --notify-nip yes
|
|
```
|
|
|
|
### View Configuration
|
|
|
|
```bash
|
|
nip update status
|
|
```
|
|
|
|
Output:
|
|
```
|
|
Update Configuration
|
|
====================
|
|
|
|
Enabled: Yes
|
|
Channel: stable
|
|
Frequency: weekly
|
|
Last Check: 2024-11-15 10:30:00
|
|
|
|
Notifications:
|
|
Recipes: Yes
|
|
Tools: Yes
|
|
NIP: Yes
|
|
|
|
🔍 Checking for updates...
|
|
✅ All components are up to date
|
|
```
|
|
|
|
## Backup and Rollback
|
|
|
|
### Automatic Backups
|
|
|
|
All updates automatically create backups before applying changes:
|
|
|
|
```
|
|
~/.cache/nip/backups/
|
|
├── recipes-20241115-103000/
|
|
├── nip-20241115-103100.bin
|
|
└── gentoo-20241110-150000/
|
|
```
|
|
|
|
### List Backups
|
|
|
|
```bash
|
|
nip update backups
|
|
```
|
|
|
|
Output:
|
|
```
|
|
Available Backups:
|
|
==================
|
|
|
|
recipes-20241115-103000
|
|
Date: 2024-11-15 10:30:00
|
|
Path: /home/user/.cache/nip/backups/recipes-20241115-103000
|
|
|
|
nip-20241115-103100.bin
|
|
Date: 2024-11-15 10:31:00
|
|
Path: /home/user/.cache/nip/backups/nip-20241115-103100.bin
|
|
|
|
Total: 2 backups
|
|
```
|
|
|
|
### Rollback to Previous Version
|
|
|
|
```bash
|
|
# Rollback recipes
|
|
nip update rollback recipes
|
|
|
|
# Rollback NIP
|
|
nip update rollback nip
|
|
```
|
|
|
|
Output:
|
|
```
|
|
🔄 Rolling back recipes to backup from 2024-11-15 10:30:00
|
|
✅ Rollback successful
|
|
```
|
|
|
|
### Clean Old Backups
|
|
|
|
```bash
|
|
# Clean backups older than 30 days (default)
|
|
nip update clean-backups
|
|
|
|
# Keep only last 7 days
|
|
nip update clean-backups --keep-days 7
|
|
```
|
|
|
|
## Integration with Workflows
|
|
|
|
### Daily Development Workflow
|
|
|
|
```bash
|
|
# Morning routine
|
|
nip update check
|
|
|
|
# If updates available
|
|
nip update all
|
|
|
|
# Continue working
|
|
nip build myproject
|
|
```
|
|
|
|
### CI/CD Integration
|
|
|
|
```yaml
|
|
# GitHub Actions
|
|
name: Build with Latest Recipes
|
|
|
|
on: [push, pull_request]
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Install NIP
|
|
run: curl -sSL https://nip.example.com/install.sh | sh
|
|
|
|
- name: Update Recipes
|
|
run: nip update recipes
|
|
|
|
- name: Build Package
|
|
run: nip build myapp
|
|
```
|
|
|
|
### Automated Update Script
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# update-nip.sh - Automated update script
|
|
|
|
# Check for updates
|
|
nip update check --force
|
|
|
|
# Update all components
|
|
nip update all
|
|
|
|
# Verify installation
|
|
nip --version
|
|
|
|
# Run tests
|
|
nip build --test myproject
|
|
```
|
|
|
|
## Update Notifications
|
|
|
|
### Non-Intrusive Notifications
|
|
|
|
Updates are checked in the background and notifications are shown at appropriate times:
|
|
|
|
```bash
|
|
$ nip build firefox
|
|
|
|
📦 Update Available: recipes (run 'nip update check' for details)
|
|
|
|
🔨 Building firefox...
|
|
```
|
|
|
|
### Disable Notifications
|
|
|
|
```bash
|
|
# Disable all notifications
|
|
nip update config --notify-recipes no --notify-tools no --notify-nip no
|
|
|
|
# Or disable updates entirely
|
|
nip update config --disable
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Update Check Fails
|
|
|
|
```bash
|
|
❌ Failed to check for updates: connection timeout
|
|
```
|
|
|
|
**Solutions:**
|
|
1. Check internet connectivity
|
|
2. Verify firewall allows HTTPS
|
|
3. Try again later
|
|
4. Use `--force` to retry immediately
|
|
|
|
### Update Fails
|
|
|
|
```bash
|
|
❌ Failed to update recipes: merge conflict
|
|
```
|
|
|
|
**Solutions:**
|
|
1. Rollback to previous version: `nip update rollback recipes`
|
|
2. Clean and re-clone: `rm -rf ~/.local/share/nip/recipes && nip update recipes`
|
|
3. Check for local modifications
|
|
|
|
### Backup Fails
|
|
|
|
```bash
|
|
⚠️ Failed to create backup: disk full
|
|
```
|
|
|
|
**Solutions:**
|
|
1. Free up disk space
|
|
2. Clean old backups: `nip update clean-backups`
|
|
3. Disable backups (not recommended): Edit config manually
|
|
|
|
### Rollback Fails
|
|
|
|
```bash
|
|
❌ No backup found for: recipes
|
|
```
|
|
|
|
**Solutions:**
|
|
1. List available backups: `nip update backups`
|
|
2. Manually restore from backup directory
|
|
3. Re-install component from scratch
|
|
|
|
## Best Practices
|
|
|
|
### For Individual Users
|
|
|
|
1. **Enable automatic updates** with weekly frequency
|
|
2. **Use stable channel** for production work
|
|
3. **Check updates** before starting important work
|
|
4. **Keep backups** for at least 30 days
|
|
5. **Test updates** in non-critical projects first
|
|
|
|
### For Teams
|
|
|
|
1. **Coordinate updates** across team members
|
|
2. **Use same update channel** for consistency
|
|
3. **Document update schedule** in team wiki
|
|
4. **Test updates** in staging environment first
|
|
5. **Keep update logs** for troubleshooting
|
|
|
|
### For CI/CD
|
|
|
|
1. **Update recipes** at start of pipeline
|
|
2. **Pin specific versions** for reproducibility
|
|
3. **Cache updated recipes** between runs
|
|
4. **Monitor update failures** in CI logs
|
|
5. **Rollback automatically** on build failures
|
|
|
|
## Advanced Configuration
|
|
|
|
### Custom Update Server
|
|
|
|
Edit `~/.config/nip/update-config.json`:
|
|
|
|
```json
|
|
{
|
|
"updateUrl": "https://custom-updates.example.com/v1",
|
|
"enabled": true,
|
|
"channel": "stable"
|
|
}
|
|
```
|
|
|
|
### Update Hooks
|
|
|
|
Run custom scripts after updates:
|
|
|
|
```bash
|
|
# ~/.config/nip/hooks/post-update.sh
|
|
#!/bin/bash
|
|
|
|
echo "Update completed at $(date)"
|
|
|
|
# Rebuild critical packages
|
|
nip build --rebuild myapp
|
|
|
|
# Send notification
|
|
notify-send "NIP Updated" "Recipes and tools updated successfully"
|
|
```
|
|
|
|
### Selective Component Updates
|
|
|
|
Update only specific components:
|
|
|
|
```bash
|
|
# Update only recipes, skip NIP
|
|
nip update config --notify-nip no
|
|
nip update recipes
|
|
|
|
# Update only NIP, skip recipes
|
|
nip update config --notify-recipes no
|
|
nip update self
|
|
```
|
|
|
|
## Security Considerations
|
|
|
|
### Update Verification
|
|
|
|
- All updates are verified with checksums
|
|
- HTTPS is used for all downloads
|
|
- Backups are created before applying updates
|
|
- Rollback is available if issues occur
|
|
|
|
### Update Sources
|
|
|
|
- Official updates come from trusted servers
|
|
- Custom update servers can be configured
|
|
- Updates are signed (future feature)
|
|
- Verify update authenticity before applying
|
|
|
|
### Permissions
|
|
|
|
- Updates don't require root access
|
|
- User-level installations only
|
|
- No system-wide modifications
|
|
- Isolated from system packages
|
|
|
|
## FAQ
|
|
|
|
**Q: How often should I update?**
|
|
A: Weekly is recommended for most users. Daily for nightly channel, monthly for stable environments.
|
|
|
|
**Q: Will updates break my builds?**
|
|
A: Stable channel updates are thoroughly tested. Backups allow easy rollback if issues occur.
|
|
|
|
**Q: Can I skip an update?**
|
|
A: Yes, updates are never forced. You can skip any update and apply it later.
|
|
|
|
**Q: How much disk space do backups use?**
|
|
A: Typically 100-500MB per backup. Clean old backups regularly to save space.
|
|
|
|
**Q: Can I update offline?**
|
|
A: No, updates require internet connectivity. Download updates on another machine and transfer manually if needed.
|
|
|
|
**Q: What happens if an update fails?**
|
|
A: The system automatically rolls back to the previous version using the backup.
|
|
|
|
**Q: Can I test updates before applying?**
|
|
A: Yes, use beta or nightly channels in a test environment before updating production.
|
|
|
|
**Q: How do I know what changed in an update?**
|
|
A: Changelogs are shown before applying updates. Check `nip update check` for details.
|
|
|
|
## See Also
|
|
|
|
- [Binary Cache Guide](binary-cache.md) - Caching system
|
|
- [Remote Cache Guide](remote-cache.md) - Team collaboration
|
|
- [Configuration Guide](configuration.md) - NIP configuration
|
|
- [Build System Guide](source-build-guide.md) - Building packages
|