Initial commit

This commit is contained in:
humocs-man
2026-02-17 17:27:26 +01:00
committed by GitHub
commit 302bbf2239
44 changed files with 4200 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
[[customizations.filesystem]]
mountpoint = "/"
minsize = "20 GiB"
+31
View File
@@ -0,0 +1,31 @@
# Anaconda ISO Installer Configuration
# This configuration creates a bootable ISO image for installing your custom bootc image.
#
# The installer will guide users through disk partitioning and basic system setup,
# then automatically switch to your custom image on first boot.
[customizations.installer.kickstart]
contents = """
%post
# After installation, switch to the custom image from this repository
# IMPORTANT: Update this URL to match your repository (ghcr.io/USERNAME/REPO:stable)
bootc switch --mutate-in-place --transport registry ghcr.io/USERNAME/REPO:stable
%end
"""
[customizations.installer.modules]
# Enable standard Anaconda installer modules for a guided installation experience
enable = [
"org.fedoraproject.Anaconda.Modules.Storage", # Disk partitioning and formatting
"org.fedoraproject.Anaconda.Modules.Runtime", # Basic runtime configuration
"org.fedoraproject.Anaconda.Modules.Network", # Network configuration
"org.fedoraproject.Anaconda.Modules.Security", # Security settings
"org.fedoraproject.Anaconda.Modules.Services", # System services
"org.fedoraproject.Anaconda.Modules.Users", # User account creation
"org.fedoraproject.Anaconda.Modules.Timezone" # Timezone selection
]
# Disable subscription management (not needed for community images)
disable = [
"org.fedoraproject.Anaconda.Modules.Subscription",
]
+128
View File
@@ -0,0 +1,128 @@
# Rclone Configuration Directory
This directory contains example rclone configuration files for uploading ISO images to various cloud storage providers.
## Available Configurations
- **cloudflare-r2.conf** - Cloudflare R2 (S3-compatible, zero egress fees)
- **aws-s3.conf** - Amazon S3 (highly reliable, standard pricing)
- **backblaze-b2.conf** - Backblaze B2 (affordable, low egress fees)
- **sftp.conf** - SFTP/SSH upload to any server
- **scp.conf** - SCP upload to any server
## How to Use
### 1. Choose Your Storage Provider
Select the configuration file that matches your preferred storage provider. Each file contains:
- Setup instructions
- Required GitHub secrets
- Provider-specific configuration options
### 2. Set Up GitHub Secrets
For the ISO build workflow to upload files, you need to configure GitHub secrets:
1. Go to your repository on GitHub
2. Navigate to **Settings****Secrets and variables****Actions**
3. Click **New repository secret**
4. Add the secrets required by your chosen provider (listed in the config file)
### 3. Choose Your Upload Method
The build-disk.yml workflow supports two upload methods:
#### Method A: Using rclone configs (Recommended)
This method uses the configuration files in this directory:
```yaml
# In .github/workflows/build-disk.yml, the workflow will:
# 1. Read the config from this directory
# 2. Substitute secrets automatically
# 3. Upload using rclone
```
To use this method, specify which config to use when triggering the workflow.
#### Method B: Direct environment variables (Legacy)
The workflow also supports direct environment variable configuration for backward compatibility.
### 4. Triggering the Workflow
The `build-disk.yml` workflow is triggered manually:
1. Go to **Actions** tab in your repository
2. Select **Build disk images** workflow
3. Click **Run workflow**
4. Select the platform (amd64 or arm64)
5. Enable **Upload to cloud storage** if you want to upload the ISO
## Configuration File Format
All configuration files use the rclone INI format with placeholders for secrets:
```ini
[remote-name]
type = provider_type
access_key_id = ${SECRET_NAME}
secret_access_key = ${ANOTHER_SECRET}
```
The workflow automatically replaces `${SECRET_NAME}` with the corresponding GitHub secret value.
## Customizing Configurations
You can modify these configuration files to suit your needs:
1. Edit the configuration file for your provider
2. Update the secret names in `${...}` placeholders
3. Add the corresponding secrets to your GitHub repository
4. Commit the changes
**Important:** Never commit actual credentials or secrets to the repository. Always use `${SECRET_NAME}` placeholders and GitHub secrets.
## Provider Comparison
| Provider | Setup Complexity | Cost | Egress Fees | Notes |
|----------|------------------|------|-------------|-------|
| Cloudflare R2 | Medium | $ | Free | Best for frequent downloads |
| AWS S3 | Medium | $$ | $$ | Most reliable, global reach |
| Backblaze B2 | Easy | $ | $ | Good balance of price/features |
| SFTP/SCP | Medium | Free* | Free | Requires your own server |
*Requires existing server infrastructure
## Troubleshooting
### "Permission denied" errors
- Check that your access keys are correct
- Verify IAM permissions (for AWS)
- Ensure the bucket exists and is accessible
### "Endpoint not found" errors
- Verify the endpoint URL is correct
- Check region settings
- For Cloudflare R2, ensure you're using the correct Account ID
### Upload fails silently
- Enable workflow debug logging in GitHub Actions
- Check that secrets are properly set
- Verify the rclone config syntax
## Additional Resources
- [Rclone Documentation](https://rclone.org/docs/)
- [GitHub Actions Secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets)
- [Cloudflare R2 Documentation](https://developers.cloudflare.com/r2/)
- [AWS S3 Documentation](https://docs.aws.amazon.com/s3/)
- [Backblaze B2 Documentation](https://www.backblaze.com/b2/docs/)
## Need Help?
If you encounter issues:
1. Check the workflow logs in the Actions tab
2. Review the rclone documentation for your provider
3. Ask in the [Universal Blue Discord](https://discord.gg/WEu6BdFEtp)
4. Post in the [Universal Blue Forums](https://universal-blue.discourse.group/)
+29
View File
@@ -0,0 +1,29 @@
# AWS S3 Configuration Example
#
# Amazon S3 is a highly reliable object storage service.
#
# Setup Instructions:
# 1. Create an AWS account
# 2. Create an S3 bucket in your desired region
# 3. Create an IAM user with S3 access permissions
# 4. Generate access keys for the IAM user
# 5. Set the following GitHub secrets in your repository:
# - AWS_ACCESS_KEY_ID: Your AWS Access Key ID
# - AWS_SECRET_ACCESS_KEY: Your AWS Secret Access Key
# - AWS_REGION: Your bucket region (e.g., us-east-1, eu-west-1)
# - AWS_BUCKET_NAME: Your S3 bucket name
#
# Note: S3 charges for both storage and egress bandwidth
[aws-s3]
type = s3
provider = AWS
# Access credentials - use GitHub secrets
access_key_id = ${AWS_ACCESS_KEY_ID}
secret_access_key = ${AWS_SECRET_ACCESS_KEY}
# Your bucket's region
region = ${AWS_REGION}
# ACL settings
acl = private
# Optional: Enable server-side encryption
# server_side_encryption = AES256
+24
View File
@@ -0,0 +1,24 @@
# Backblaze B2 Configuration Example
#
# Backblaze B2 is affordable cloud storage with low egress fees.
#
# Setup Instructions:
# 1. Create a Backblaze account
# 2. Create a B2 bucket in the Backblaze dashboard
# 3. Create an Application Key with read/write access to your bucket
# 4. Note your Application Key ID and Application Key
# 5. Set the following GitHub secrets in your repository:
# - B2_ACCOUNT_ID: Your Backblaze Account ID (also called Application Key ID)
# - B2_APPLICATION_KEY: Your Backblaze Application Key
# - B2_BUCKET_NAME: Your B2 bucket name
#
# Note: Backblaze charges for storage and egress over the free tier (1GB/day)
[backblaze-b2]
type = b2
# Account credentials - use GitHub secrets
account = ${B2_ACCOUNT_ID}
key = ${B2_APPLICATION_KEY}
# Optional: Specify the bucket directly in the remote name
# This allows using the remote without specifying bucket in commands
# endpoint =
+29
View File
@@ -0,0 +1,29 @@
# Cloudflare R2 Configuration Example
#
# Cloudflare R2 is S3-compatible storage with zero egress fees.
#
# Setup Instructions:
# 1. Create a Cloudflare account and enable R2
# 2. Create an R2 bucket in the Cloudflare dashboard
# 3. Generate API tokens from R2 > Manage R2 API Tokens
# 4. Copy your Account ID from the R2 dashboard
# 5. Set the following GitHub secrets in your repository:
# - R2_ACCOUNT_ID: Your Cloudflare Account ID
# - R2_ACCESS_KEY_ID: Your R2 Access Key ID
# - R2_SECRET_ACCESS_KEY: Your R2 Secret Access Key
# - R2_BUCKET_NAME: Your R2 bucket name
#
# The endpoint format is: https://<account-id>.r2.cloudflarestorage.com
[cloudflare-r2]
type = s3
provider = Cloudflare
# Access credentials - use GitHub secrets
access_key_id = ${R2_ACCESS_KEY_ID}
secret_access_key = ${R2_SECRET_ACCESS_KEY}
# Endpoint format
endpoint = https://${R2_ACCOUNT_ID}.r2.cloudflarestorage.com
# Region is not used for R2 but some tools require it
region = auto
# ACL settings
acl = private
+29
View File
@@ -0,0 +1,29 @@
# SCP Configuration Example
#
# Upload ISO files using SCP (SSH Copy Protocol).
# This is similar to SFTP but uses the SCP protocol directly.
#
# Setup Instructions:
# 1. Ensure you have SSH access to your target server
# 2. Generate an SSH key pair if you haven't already
# 3. Add the public key to your server's ~/.ssh/authorized_keys
# 4. Set the following GitHub secrets in your repository:
# - SCP_HOST: Your server hostname or IP address
# - SCP_USER: Your SSH username
# - SCP_SSH_KEY: Your private SSH key (entire contents)
# - SCP_PORT: SSH port (default: 22)
# - SCP_PATH: Remote path to upload files (e.g., /var/www/isos)
#
# Note: SCP is simpler but less feature-rich than SFTP
[scp]
type = sftp
# Server details - use GitHub secrets
host = ${SCP_HOST}
user = ${SCP_USER}
port = ${SCP_PORT:-22}
# Authentication - use key-based auth
key_pem = ${SCP_SSH_KEY}
# SCP-specific settings
# Use SCP protocol instead of SFTP
use_scp = true
+30
View File
@@ -0,0 +1,30 @@
# SFTP Configuration Example
#
# Upload ISO files to any server with SSH/SFTP access.
#
# Setup Instructions:
# 1. Ensure you have SSH access to your target server
# 2. Generate an SSH key pair if you haven't already
# 3. Add the public key to your server's ~/.ssh/authorized_keys
# 4. Set the following GitHub secrets in your repository:
# - SFTP_HOST: Your server hostname or IP address
# - SFTP_USER: Your SSH username
# - SFTP_SSH_KEY: Your private SSH key (entire contents)
# - SFTP_PORT: SSH port (default: 22)
# - SFTP_PATH: Remote path to upload files (e.g., /var/www/isos)
#
# Note: For password authentication, use SFTP_PASSWORD instead of SFTP_SSH_KEY
[sftp]
type = sftp
# Server details - use GitHub secrets
host = ${SFTP_HOST}
user = ${SFTP_USER}
port = ${SFTP_PORT:-22}
# Authentication - use key-based auth (recommended)
key_pem = ${SFTP_SSH_KEY}
# Or use password authentication (less secure)
# pass = ${SFTP_PASSWORD}
# Optional: Skip host key verification (not recommended for production)
# skip_links = false
# set_modtime = true