13 KiB
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
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
# Update recipes
nip update recipes
# Update all components
nip update all
# Update NIP itself
nip update self
3. Configure Automatic Updates
# 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:
{
"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
# 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:
# 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:
# Tools are updated through recipes
nip update recipes
Update NIP
Update NIP itself to the latest version:
# 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:
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
# Enable automatic updates
nip update config --enable
# Disable automatic updates
nip update config --disable
Set Update Channel
# 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
# 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
# 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
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
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
# 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
# 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
# Morning routine
nip update check
# If updates available
nip update all
# Continue working
nip build myproject
CI/CD Integration
# 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
#!/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:
$ nip build firefox
📦 Update Available: recipes (run 'nip update check' for details)
🔨 Building firefox...
Disable Notifications
# 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
❌ Failed to check for updates: connection timeout
Solutions:
- Check internet connectivity
- Verify firewall allows HTTPS
- Try again later
- Use
--forceto retry immediately
Update Fails
❌ Failed to update recipes: merge conflict
Solutions:
- Rollback to previous version:
nip update rollback recipes - Clean and re-clone:
rm -rf ~/.local/share/nip/recipes && nip update recipes - Check for local modifications
Backup Fails
⚠️ Failed to create backup: disk full
Solutions:
- Free up disk space
- Clean old backups:
nip update clean-backups - Disable backups (not recommended): Edit config manually
Rollback Fails
❌ No backup found for: recipes
Solutions:
- List available backups:
nip update backups - Manually restore from backup directory
- Re-install component from scratch
Best Practices
For Individual Users
- Enable automatic updates with weekly frequency
- Use stable channel for production work
- Check updates before starting important work
- Keep backups for at least 30 days
- Test updates in non-critical projects first
For Teams
- Coordinate updates across team members
- Use same update channel for consistency
- Document update schedule in team wiki
- Test updates in staging environment first
- Keep update logs for troubleshooting
For CI/CD
- Update recipes at start of pipeline
- Pin specific versions for reproducibility
- Cache updated recipes between runs
- Monitor update failures in CI logs
- Rollback automatically on build failures
Advanced Configuration
Custom Update Server
Edit ~/.config/nip/update-config.json:
{
"updateUrl": "https://custom-updates.example.com/v1",
"enabled": true,
"channel": "stable"
}
Update Hooks
Run custom scripts after updates:
# ~/.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:
# 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 - Caching system
- Remote Cache Guide - Team collaboration
- Configuration Guide - NIP configuration
- Build System Guide - Building packages