78 lines
2.2 KiB
Markdown
78 lines
2.2 KiB
Markdown
# Build Scripts
|
|
|
|
This directory contains build scripts that run during image creation. Scripts are executed in numerical order.
|
|
|
|
## How It Works
|
|
|
|
Scripts are named with a number prefix (e.g., `10-build.sh`, `20-onepassword.sh`) and run in ascending order during the container build process.
|
|
|
|
## Included Scripts
|
|
|
|
- **`10-build.sh`** - Main build script for base system modifications, package installation, and service configuration
|
|
|
|
## Example Scripts
|
|
|
|
- **`20-onepassword.sh.example`** - Example showing how to install software from third-party RPM repositories (Google Chrome, 1Password)
|
|
|
|
To use an example script:
|
|
1. Remove the `.example` extension
|
|
2. Make it executable: `chmod +x build/20-yourscript.sh`
|
|
3. The build system will automatically run it in numerical order
|
|
|
|
## Creating Your Own Scripts
|
|
|
|
Create numbered scripts for different purposes:
|
|
|
|
```bash
|
|
# 10-build.sh - Base system (already exists)
|
|
# 20-drivers.sh - Hardware drivers
|
|
# 30-development.sh - Development tools
|
|
# 40-gaming.sh - Gaming software
|
|
# 50-cleanup.sh - Final cleanup tasks
|
|
```
|
|
|
|
### Script Template
|
|
|
|
```bash
|
|
#!/usr/bin/env bash
|
|
set -oue pipefail
|
|
|
|
echo "Running custom setup..."
|
|
# Your commands here
|
|
```
|
|
|
|
### Best Practices
|
|
|
|
- **Use descriptive names**: `20-nvidia-drivers.sh` is better than `20-stuff.sh`
|
|
- **One purpose per script**: Easier to debug and maintain
|
|
- **Clean up after yourself**: Remove temporary files and disable temporary repos
|
|
- **Test incrementally**: Add one script at a time and test builds
|
|
- **Comment your code**: Future you will thank present you
|
|
|
|
### Disabling Scripts
|
|
|
|
To temporarily disable a script without deleting it:
|
|
- Rename it with `.disabled` extension: `20-script.sh.disabled`
|
|
- Or remove execute permission: `chmod -x build/20-script.sh`
|
|
|
|
## Execution Order
|
|
|
|
The Containerfile runs scripts like this:
|
|
|
|
```dockerfile
|
|
RUN /ctx/build/10-build.sh
|
|
```
|
|
|
|
If you want to run multiple scripts, you can:
|
|
|
|
1. **Modify Containerfile** to run each script explicitly
|
|
2. **Create a runner script** that executes all numbered scripts
|
|
3. **Use the default** and keep everything in `10-build.sh` (simplest)
|
|
|
|
## Notes
|
|
|
|
- Scripts run as root during build
|
|
- Build context is available at `/ctx`
|
|
- Use dnf5 for package management (not dnf or yum)
|
|
- Always use `-y` flag for non-interactive installs
|