mirror of https://github.com/bohanyang/debi
parent
1f735da114
commit
804b2e05a1
5 changed files with 161 additions and 25 deletions
@ -0,0 +1,100 @@ |
|||||||
|
# CLAUDE.md |
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. |
||||||
|
|
||||||
|
## Project Overview |
||||||
|
|
||||||
|
Debi is a Debian Network Reinstall Script that allows reinstalling any VPS or physical machine to minimal Debian via network boot. It's a single POSIX-compliant shell script that automates the entire Debian installation process. |
||||||
|
|
||||||
|
## Commands |
||||||
|
|
||||||
|
### Running the Script |
||||||
|
```bash |
||||||
|
# Basic execution (requires root) |
||||||
|
sudo ./debi.sh |
||||||
|
|
||||||
|
# With options |
||||||
|
sudo ./debi.sh --user debian --timezone UTC --cloudflare |
||||||
|
|
||||||
|
# Dry run (generate config without installing) |
||||||
|
sudo ./debi.sh --dry-run |
||||||
|
|
||||||
|
# With cloud-init configuration |
||||||
|
sudo ./debi.sh --cidata ./cidata-example/ |
||||||
|
``` |
||||||
|
|
||||||
|
### Testing Changes |
||||||
|
```bash |
||||||
|
# Check shell script syntax |
||||||
|
sh -n debi.sh |
||||||
|
|
||||||
|
# Run shellcheck for linting (if available) |
||||||
|
shellcheck debi.sh |
||||||
|
|
||||||
|
# Test in a VM environment (recommended) |
||||||
|
# No automated test suite exists - manual testing required |
||||||
|
``` |
||||||
|
|
||||||
|
## Architecture |
||||||
|
|
||||||
|
The script operates in distinct phases: |
||||||
|
|
||||||
|
1. **Configuration Phase**: Parses command-line arguments and validates environment |
||||||
|
2. **Download Phase**: Fetches Debian installer components to `/boot/debian-$VERSION/` |
||||||
|
3. **Preseed Generation**: Creates automated installation configuration |
||||||
|
4. **GRUB Modification**: Adds installer entry to bootloader menu |
||||||
|
5. **Initramfs Injection**: Embeds preseed and network configuration into installer |
||||||
|
6. **Execution**: Updates GRUB and prepares for reboot |
||||||
|
|
||||||
|
Key architectural decisions: |
||||||
|
- Single-file design for easy distribution |
||||||
|
- POSIX compliance for maximum compatibility |
||||||
|
- No external dependencies beyond standard Linux utilities |
||||||
|
- Modular function design with clear separation of concerns |
||||||
|
- Extensive error handling with rollback capabilities |
||||||
|
|
||||||
|
## Key Functions and Their Purposes |
||||||
|
|
||||||
|
- `download()`: Handles file downloads with proxy support and multiple backend options (wget/curl/busybox) |
||||||
|
- `set_debian_version()` / `set_suite()`: Manages Debian version selection and mirror URLs |
||||||
|
- `configure_sshd()`: Sets up SSH access during installation for remote monitoring |
||||||
|
- `in_target()`: Executes commands within the target installation environment |
||||||
|
- `prompt_password()`: Securely handles password input with validation |
||||||
|
|
||||||
|
## Important Configuration Variables |
||||||
|
|
||||||
|
The script uses 80+ configuration options. Key ones include: |
||||||
|
- `$suite`: Debian version (bookworm, bullseye, etc.) |
||||||
|
- `$mirror_protocol` / `$mirror_host`: APT repository configuration |
||||||
|
- `$disk`: Target installation disk |
||||||
|
- `$authorized_keys_url`: SSH key provisioning |
||||||
|
- `$cidata`: Cloud-init configuration directory |
||||||
|
|
||||||
|
## Development Guidelines |
||||||
|
|
||||||
|
1. **Maintain POSIX compliance** - Script must work with dash/sh, not just bash |
||||||
|
2. **Test on real systems** - No test suite exists; changes require VM or physical testing |
||||||
|
3. **Preserve backward compatibility** - Many users rely on specific option behaviors |
||||||
|
4. **Document all options** - Update README.md for any new configuration options |
||||||
|
5. **Handle errors gracefully** - Always provide rollback paths for critical operations |
||||||
|
|
||||||
|
## Common Development Tasks |
||||||
|
|
||||||
|
### Adding New Configuration Options |
||||||
|
1. Add option to the case statement in the argument parsing section |
||||||
|
2. Define corresponding variable with sensible default |
||||||
|
3. Implement logic in appropriate phase function |
||||||
|
4. Update README.md documentation |
||||||
|
|
||||||
|
### Debugging Installation Issues |
||||||
|
1. Use `--dry-run` to generate and inspect preseed configuration |
||||||
|
2. Enable network console with `--ssh` for remote debugging |
||||||
|
3. Check `/boot/debian-$VERSION/` for downloaded components |
||||||
|
4. Review GRUB configuration changes in `/boot/grub/grub.cfg` |
||||||
|
|
||||||
|
### Testing Platform Compatibility |
||||||
|
Focus areas for testing: |
||||||
|
- Network configuration (static IP vs DHCP) |
||||||
|
- Disk detection and partitioning |
||||||
|
- GRUB installation and boot entries |
||||||
|
- Architecture-specific installer components |
||||||
Loading…
Reference in new issue