[1;33m[WARNING][0m No existing semantic tags found. Starting from v0.0.0
v0.0.1 - Reorganize ISO build tree, add docs/plans/scripts, and stage Phase 2 Slice B+C service integration artifacts
This commit is contained in:
42
docs/RUNNING.md
Normal file
42
docs/RUNNING.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# Running n-OS-tr ISO (Phase 2 Slice B+C)
|
||||
|
||||
This slice boots a live system with these services enabled:
|
||||
|
||||
- `n-os-tr-firstboot.service` (oneshot): generates a per-boot ginxsom identity and self-signed TLS cert.
|
||||
- `ginxsom.service`: Blossom FastCGI server on `/run/ginxsom/ginxsom-fcgi.sock`.
|
||||
- `nginx.service`: TLS front-end on `https://localhost/`.
|
||||
- `fips.service` + `fips-dns.service`: mesh transport and DNS responder.
|
||||
- `c-relay.service`: Nostr relay behind nginx.
|
||||
|
||||
## Endpoints
|
||||
|
||||
- Landing page: `https://localhost/`
|
||||
- Relay websocket: `wss://localhost/relay`
|
||||
- Relay admin/API: `https://localhost/admin/`
|
||||
|
||||
## Retrieve generated identity
|
||||
|
||||
- Ginxsom pubkey and key hints are shown in `/etc/motd`.
|
||||
- Provisioning logs: `journalctl -u n-os-tr-firstboot.service`
|
||||
- Ginxsom nsec: `cat /var/lib/n-os-tr/keys/ginxsom.nsec`
|
||||
- fips node identity (npub): `fipsctl identity`
|
||||
- c-relay admin key from first boot logs: `journalctl -u c-relay.service | grep 'Admin Private Key:'`
|
||||
|
||||
## Smoke test
|
||||
|
||||
Run [`n-os-tr-smoketest`](iso/config/includes.chroot/usr/local/bin/n-os-tr-smoketest) for a one-line-per-check health summary across core + blossom + fips + relay services, with output shaped like `[PASS|FAIL|SKIP] <label> (<detail>)` and a final PASS/FAIL/SKIP counter.
|
||||
|
||||
```bash
|
||||
n-os-tr-smoketest
|
||||
```
|
||||
|
||||
If terminal colours render poorly, use:
|
||||
|
||||
```bash
|
||||
NO_COLOR=1 n-os-tr-smoketest
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Identity is ephemeral by default in this slice.
|
||||
- fips is configured for ethernet discovery and a static UDP bootstrap peer.
|
||||
913
docs/debian_live_notes.md
Normal file
913
docs/debian_live_notes.md
Normal file
@@ -0,0 +1,913 @@
|
||||
# Debian Live Build Notes
|
||||
|
||||
> **Archived developer notes.** This document was the original [`README.md`](../README.md) for this repository when it was primarily a Debian live-build tutorial. It has been moved here to preserve the reference material now that [`README.md`](../README.md) focuses on the n-OS-tr product vision.
|
||||
>
|
||||
> Nothing in this document is a contract — it is a collection of live-build recipes, package-discovery tips, GUI options, minimization tactics, and persistence notes we accumulated while bootstrapping the ISO build. Anything that is part of the real product lives elsewhere (typically in [`plans/`](../plans/) or under [`iso/`](../iso/)).
|
||||
|
||||
## Debian Live Build Setup and Tutorial 1 Implementation
|
||||
|
||||
This document covers the complete process of setting up live-build and implementing Tutorial 1 from the Debian Live Manual.
|
||||
|
||||
### System Requirements
|
||||
|
||||
Tested on Pop!_OS 22.04 LTS (Ubuntu-based system).
|
||||
|
||||
### Phase 1: Installing Dependencies
|
||||
|
||||
The following packages are required for building Debian Live images:
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install debootstrap xorriso squashfs-tools syslinux-utils cpio gzip gettext
|
||||
```
|
||||
|
||||
**Package purposes:**
|
||||
- `debootstrap`: Creates minimal Debian base system
|
||||
- `xorriso`: Creates ISO images
|
||||
- `squashfs-tools`: Creates compressed filesystem
|
||||
- `syslinux-utils`: Boot loader utilities
|
||||
- `cpio`, `gzip`, `gettext`: Archive and localization utilities
|
||||
|
||||
### Phase 2: Setting up Live-Build from Repository
|
||||
|
||||
Instead of installing live-build via system packages (which may be outdated), we use the repository directly for the most current version.
|
||||
|
||||
#### Creating the Wrapper Script
|
||||
|
||||
Create `lb-wrapper.sh` for convenient access to live-build commands:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# Set the LIVE_BUILD environment variable to point to our repository
|
||||
export LIVE_BUILD="$(dirname "$0")/live-build"
|
||||
|
||||
# Execute the live-build frontend with all arguments passed through
|
||||
"$LIVE_BUILD/frontend/lb" "$@"
|
||||
```
|
||||
|
||||
Make it executable:
|
||||
```bash
|
||||
chmod +x lb-wrapper.sh
|
||||
```
|
||||
|
||||
**Usage:** Replace all `lb` commands with `./lb-wrapper.sh` to use the repository version.
|
||||
|
||||
### Phase 3: Tutorial 1 - Default Image Creation
|
||||
|
||||
Following the Debian Live Manual Tutorial 1 to create a basic live system:
|
||||
|
||||
```bash
|
||||
mkdir tutorial1
|
||||
cd tutorial1
|
||||
../lb-wrapper.sh config
|
||||
```
|
||||
|
||||
This creates the basic configuration structure in the `config/` directory.
|
||||
|
||||
### Phase 4: Building the Image
|
||||
|
||||
**Important:** Due to keyring compatibility issues between Ubuntu/Pop!_OS and Debian, we need to bypass GPG verification for development builds.
|
||||
|
||||
Build the image as root with security bypass:
|
||||
|
||||
```bash
|
||||
sudo ../lb-wrapper.sh config --apt-secure false --distribution stable
|
||||
sudo ../lb-wrapper.sh build 2>&1 | tee build.log
|
||||
```
|
||||
|
||||
### Keyring Issues and Troubleshooting
|
||||
|
||||
**Problem:** Pop!_OS/Ubuntu keyrings are incompatible with both Debian testing and stable distributions, causing GPG verification failures.
|
||||
|
||||
**Error examples:**
|
||||
- Debian testing: `The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 78DBA3BC47EF2265`
|
||||
- Debian stable: `The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 762F67A0B2C39DE4`
|
||||
|
||||
**Solution:** Use `--apt-secure false` flag to bypass GPG verification for development purposes.
|
||||
|
||||
**Production note:** For production builds, proper keyring setup should be implemented instead of disabling security checks.
|
||||
|
||||
### Expected Results
|
||||
|
||||
- Build time: Varies based on internet connection and system performance
|
||||
- Output file: `live-image-amd64.hybrid.iso` (approximately 298MB)
|
||||
- This ISO can be:
|
||||
- Tested in virtual machines (QEMU, VirtualBox)
|
||||
- Written to USB drives
|
||||
- Burned to optical media
|
||||
|
||||
### Command Summary
|
||||
|
||||
Complete sequence for Tutorial 1:
|
||||
|
||||
```bash
|
||||
# 1. Install dependencies
|
||||
sudo apt install debootstrap xorriso squashfs-tools syslinux-utils cpio gzip gettext
|
||||
|
||||
# 2. Create wrapper script (if not exists)
|
||||
# [Create lb-wrapper.sh as shown above]
|
||||
chmod +x lb-wrapper.sh
|
||||
|
||||
# 3. Create and configure tutorial
|
||||
mkdir tutorial1
|
||||
cd tutorial1
|
||||
../lb-wrapper.sh config --apt-secure false --distribution stable
|
||||
|
||||
# 4. Build image
|
||||
sudo ../lb-wrapper.sh build 2>&1 | tee build.log
|
||||
|
||||
# 5. Result: live-image-amd64.hybrid.iso ready for testing
|
||||
```
|
||||
|
||||
### Notes
|
||||
|
||||
- The `--distribution stable` ensures we use Debian stable instead of the default testing
|
||||
- Build logs are automatically saved due to the wrapper script configuration
|
||||
- The `--apt-secure false` flag is a workaround for keyring issues on Ubuntu-based systems
|
||||
- For clean rebuilds, use `sudo ../lb-wrapper.sh clean` before building again
|
||||
|
||||
## FAQ
|
||||
|
||||
### Q: What are the auto, config, and local directories created by `lb config` for?
|
||||
|
||||
**A:** When you run `lb config`, three directories are created:
|
||||
|
||||
1. **auto/** - Created but empty by default
|
||||
- Used for optional automation scripts that you create yourself
|
||||
- You can add `auto/config`, `auto/build`, `auto/clean` scripts that run automatically before their respective `lb` commands
|
||||
- Most basic builds (like Tutorial 1) don't need these files
|
||||
- Useful for advanced scenarios where you want reproducible builds with version control
|
||||
|
||||
2. **config/** - This is where the real configuration lives
|
||||
- Contains all the subdirectories for customizing your live system
|
||||
- Has the main config files (binary, bootstrap, chroot, common, source) with your build parameters
|
||||
- This is where you add package lists, custom files, hooks, etc.
|
||||
- Most important directory for customization
|
||||
|
||||
3. **local/** - For local customizations
|
||||
- Also typically empty unless you have custom executables or files to include
|
||||
- Used for build-time scripts and tools, not files to include in the final system
|
||||
|
||||
### Q: How do I add files to specific locations in the final live system?
|
||||
|
||||
**A:** Several directories in the config structure map directly to the final system filesystem:
|
||||
|
||||
**For files you want in the final live system:**
|
||||
|
||||
1. **config/includes.chroot/** - Maps directly to the root filesystem (`/`)
|
||||
- To put a file in `/usr/local/bin/myscript` in the final system
|
||||
- Place it at `config/includes.chroot/usr/local/bin/myscript`
|
||||
- Everything in this directory gets copied to `/` in the live system
|
||||
|
||||
2. **config/includes.chroot_after_packages/** - Same mapping, but copied after packages are installed
|
||||
- Use when you want to overwrite files that packages might have installed
|
||||
- Same directory mapping as above
|
||||
|
||||
3. **config/includes.chroot_before_packages/** - Copied before packages are installed
|
||||
- Less commonly used, but available if needed
|
||||
|
||||
**For files you want on the ISO/boot media itself (not in the live system):**
|
||||
|
||||
4. **config/includes.binary/** - Files that go on the boot media
|
||||
- These appear on the USB/CD itself, not inside the running live system
|
||||
- Useful for documentation, additional tools, etc.
|
||||
|
||||
**Example:** To put a custom script in `/usr/local/bin/hello` in your live system:
|
||||
```bash
|
||||
# 1. Create the directory structure
|
||||
mkdir -p config/includes.chroot/usr/local/bin/
|
||||
|
||||
# 2. Put your script there
|
||||
cp myscript config/includes.chroot/usr/local/bin/hello
|
||||
|
||||
# 3. Make it executable
|
||||
chmod +x config/includes.chroot/usr/local/bin/hello
|
||||
```
|
||||
|
||||
The build process will automatically copy it to the correct location in the live system.
|
||||
|
||||
### Q: How would I add a splash screen that would come up upon booting?
|
||||
|
||||
**A:** There are several methods to add splash screens to your Debian Live system, depending on when and how you want the splash to appear:
|
||||
|
||||
#### Method 1: Boot Loader Splash (Easiest - SYSLINUX)
|
||||
|
||||
For a simple graphical background during boot menu selection:
|
||||
|
||||
**1. Prepare your splash image:**
|
||||
```bash
|
||||
# Create the bootloader directory
|
||||
mkdir -p config/bootloaders/syslinux
|
||||
|
||||
# Your image should be:
|
||||
# - PNG or JPEG format
|
||||
# - 640x480 resolution (for best compatibility)
|
||||
# - Named something like splash.png
|
||||
cp your-splash-image.png config/bootloaders/syslinux/splash.png
|
||||
```
|
||||
|
||||
**2. Create custom syslinux configuration:**
|
||||
```bash
|
||||
# Copy the default syslinux config to customize
|
||||
cp live-build/share/bootloaders/syslinux/* config/bootloaders/syslinux/
|
||||
|
||||
# Edit config/bootloaders/syslinux/syslinux.cfg
|
||||
# Add this line after the first line:
|
||||
# MENU BACKGROUND splash.png
|
||||
```
|
||||
|
||||
#### Method 2: Plymouth Boot Splash (Advanced - Animated)
|
||||
|
||||
For professional animated boot screens like Ubuntu's spinning logo:
|
||||
|
||||
**1. Add Plymouth to your package list:**
|
||||
```bash
|
||||
echo "plymouth plymouth-themes" >> config/package-lists/splash.list.chroot
|
||||
```
|
||||
|
||||
**2. Configure Plymouth theme:**
|
||||
```bash
|
||||
# Create Plymouth configuration directory
|
||||
mkdir -p config/includes.chroot/etc/plymouth
|
||||
|
||||
# Set the default theme (example: solar theme)
|
||||
echo "[Daemon]" > config/includes.chroot/etc/plymouth/plymouthd.conf
|
||||
echo "Theme=solar" >> config/includes.chroot/etc/plymouth/plymouthd.conf
|
||||
```
|
||||
|
||||
**3. Enable Plymouth in boot parameters:**
|
||||
```bash
|
||||
# When running lb config, add:
|
||||
../lb-wrapper.sh config --bootappend-live "boot=live components splash quiet"
|
||||
```
|
||||
|
||||
#### Method 3: GRUB Graphical Splash (For EFI systems)
|
||||
|
||||
For systems using GRUB (EFI boot):
|
||||
|
||||
**1. Create GRUB bootloader directory:**
|
||||
```bash
|
||||
mkdir -p config/bootloaders/grub-pc
|
||||
```
|
||||
|
||||
**2. Add custom GRUB background:**
|
||||
```bash
|
||||
# Copy your background image (PNG, JPG, or TGA format)
|
||||
# Recommended size: 1024x768 or your target resolution
|
||||
cp your-background.png config/includes.binary/boot/grub/background.png
|
||||
```
|
||||
|
||||
**3. Create custom GRUB configuration:**
|
||||
```bash
|
||||
# Create config/bootloaders/grub-pc/grub.cfg with:
|
||||
cat > config/bootloaders/grub-pc/grub.cfg << 'EOF'
|
||||
if background_image /boot/grub/background.png; then
|
||||
set color_normal=white/black
|
||||
set color_highlight=black/light-gray
|
||||
else
|
||||
set menu_color_normal=cyan/blue
|
||||
set menu_color_highlight=white/blue
|
||||
fi
|
||||
EOF
|
||||
```
|
||||
|
||||
#### Method 4: Desktop Splash Screen
|
||||
|
||||
For splash screens that appear when the desktop environment starts:
|
||||
|
||||
**1. Add to package list (example with LXDE):**
|
||||
```bash
|
||||
echo "lxsplash" >> config/package-lists/desktop.list.chroot
|
||||
```
|
||||
|
||||
**2. Configure desktop splash:**
|
||||
```bash
|
||||
# Create desktop configuration directory
|
||||
mkdir -p config/includes.chroot/etc/xdg/lxsession/LXDE
|
||||
|
||||
# Configure lxsession to show splash
|
||||
echo "lxsplash -s" > config/includes.chroot/etc/xdg/lxsession/LXDE/autostart
|
||||
```
|
||||
|
||||
#### Quick Start Recommendation
|
||||
|
||||
**For beginners:** Start with Method 1 (SYSLINUX background) - it's simple and works reliably.
|
||||
|
||||
**Example complete setup:**
|
||||
```bash
|
||||
# 1. Create bootloader directory and add image
|
||||
mkdir -p config/bootloaders/syslinux
|
||||
cp ~/my-logo.png config/bootloaders/syslinux/splash.png
|
||||
|
||||
# 2. Copy default syslinux files to customize
|
||||
cp -r live-build/share/bootloaders/syslinux/* config/bootloaders/syslinux/
|
||||
|
||||
# 3. Edit the main config file
|
||||
sed -i '2i MENU BACKGROUND splash.png' config/bootloaders/syslinux/syslinux.cfg
|
||||
|
||||
# 4. Build with your custom splash
|
||||
sudo ../lb-wrapper.sh build
|
||||
```
|
||||
|
||||
**Notes:**
|
||||
- Image formats: PNG works best for syslinux, JPG for GRUB
|
||||
- Keep images reasonably sized to avoid slowing boot time
|
||||
- Test your splash screen in a virtual machine first
|
||||
- For production systems, ensure images are properly licensed
|
||||
|
||||
### Q: What are the main options for adding a GUI? How do I add them?
|
||||
|
||||
**A:** Debian Live supports several GUI options, from lightweight window managers to full desktop environments. Here are the main options and how to implement them:
|
||||
|
||||
#### Lightweight Window Managers (Minimal Resource Usage)
|
||||
|
||||
##### 1. Openbox (Very Light)
|
||||
```bash
|
||||
echo "openbox obconf obmenu tint2 pcmanfm lxappearance" >> config/package-lists/gui.list.chroot
|
||||
```
|
||||
**Features:** Basic window manager, highly customizable, ~50MB additional space
|
||||
**Best for:** Minimal systems, older hardware, custom interfaces
|
||||
|
||||
##### 2. i3 (Tiling Window Manager)
|
||||
```bash
|
||||
echo "i3 i3status dmenu i3lock" >> config/package-lists/gui.list.chroot
|
||||
```
|
||||
**Features:** Tiling window manager, keyboard-driven, very efficient
|
||||
**Best for:** Power users, developers, keyboard-focused workflows
|
||||
|
||||
##### 3. Fluxbox
|
||||
```bash
|
||||
echo "fluxbox fbpanel pcmanfm" >> config/package-lists/gui.list.chroot
|
||||
```
|
||||
**Features:** Fast, simple, tabbed windows
|
||||
**Best for:** Minimal desktop needs, simple interfaces
|
||||
|
||||
#### Desktop Environments (Full-Featured)
|
||||
|
||||
##### 4. LXDE (Lightweight Desktop Environment)
|
||||
```bash
|
||||
echo "task-lxde-desktop" >> config/package-lists/gui.list.chroot
|
||||
```
|
||||
**Features:** Complete desktop with panel, file manager, settings
|
||||
**Size:** ~400MB additional
|
||||
**Best for:** Beginner-friendly, low resource usage, complete desktop experience
|
||||
|
||||
##### 5. Xfce (Moderate Resource Usage)
|
||||
```bash
|
||||
echo "task-xfce-desktop" >> config/package-lists/gui.list.chroot
|
||||
```
|
||||
**Features:** Full-featured, customizable, good performance
|
||||
**Size:** ~600MB additional
|
||||
**Best for:** Balance between features and performance
|
||||
|
||||
##### 6. GNOME (Full-Featured)
|
||||
```bash
|
||||
echo "task-gnome-desktop" >> config/package-lists/gui.list.chroot
|
||||
```
|
||||
**Features:** Modern interface, many applications, polished experience
|
||||
**Size:** ~1.5GB additional
|
||||
**Best for:** Modern desktop experience, touch interfaces, latest features
|
||||
|
||||
##### 7. KDE Plasma (Full-Featured)
|
||||
```bash
|
||||
echo "task-kde-desktop" >> config/package-lists/gui.list.chroot
|
||||
```
|
||||
**Features:** Highly customizable, many applications, modern interface
|
||||
**Size:** ~1.2GB additional
|
||||
**Best for:** Power users who want customization and modern features
|
||||
|
||||
#### Quick Setup Examples
|
||||
|
||||
##### Example 1: Minimal GUI System (LXDE + Firefox)
|
||||
```bash
|
||||
# Create tutorial directory
|
||||
mkdir tutorial-gui
|
||||
cd tutorial-gui
|
||||
|
||||
# Configure with GUI
|
||||
../lb-wrapper.sh config --apt-secure false --distribution stable
|
||||
|
||||
# Add desktop and browser
|
||||
echo "task-lxde-desktop firefox-esr" >> config/package-lists/desktop.list.chroot
|
||||
|
||||
# Optional: Add useful applications
|
||||
echo "synaptic gdebi leafpad galculator" >> config/package-lists/apps.list.chroot
|
||||
|
||||
# Build
|
||||
sudo ../lb-wrapper.sh build
|
||||
```
|
||||
|
||||
##### Example 2: Kiosk System (Single Application)
|
||||
```bash
|
||||
# Minimal X11 setup for single application
|
||||
echo "xorg gdm3 openbox firefox-esr" >> config/package-lists/kiosk.list.chroot
|
||||
|
||||
# Auto-start Firefox in kiosk mode
|
||||
mkdir -p config/includes.chroot/etc/skel
|
||||
cat > config/includes.chroot/etc/skel/.xsession << 'EOF'
|
||||
#!/bin/sh
|
||||
openbox &
|
||||
firefox --kiosk https://example.com
|
||||
EOF
|
||||
```
|
||||
|
||||
##### Example 3: Developer Workstation
|
||||
```bash
|
||||
# Add Xfce desktop with development tools
|
||||
echo "task-xfce-desktop" >> config/package-lists/desktop.list.chroot
|
||||
echo "code git build-essential python3 nodejs npm" >> config/package-lists/dev.list.chroot
|
||||
echo "terminator vim emacs" >> config/package-lists/editors.list.chroot
|
||||
```
|
||||
|
||||
#### GUI Components Explanation
|
||||
|
||||
##### Essential X11 Components (Required for any GUI)
|
||||
```bash
|
||||
# Always needed for graphical interface
|
||||
echo "xorg" >> config/package-lists/x11.list.chroot
|
||||
```
|
||||
|
||||
##### Display Managers (Login Screen)
|
||||
```bash
|
||||
# Lightweight
|
||||
echo "lightdm" >> config/package-lists/dm.list.chroot
|
||||
|
||||
# GNOME/modern
|
||||
echo "gdm3" >> config/package-lists/dm.list.chroot
|
||||
|
||||
# Simple
|
||||
echo "slim" >> config/package-lists/dm.list.chroot
|
||||
```
|
||||
|
||||
##### Common Applications by Category
|
||||
```bash
|
||||
# File managers
|
||||
echo "pcmanfm nautilus thunar" >> config/package-lists/filemanagers.list.chroot
|
||||
|
||||
# Text editors
|
||||
echo "gedit mousepad kate" >> config/package-lists/editors.list.chroot
|
||||
|
||||
# Web browsers
|
||||
echo "firefox-esr chromium" >> config/package-lists/browsers.list.chroot
|
||||
|
||||
# Media players
|
||||
echo "vlc mpv rhythmbox" >> config/package-lists/media.list.chroot
|
||||
|
||||
# Graphics
|
||||
echo "gimp inkscape" >> config/package-lists/graphics.list.chroot
|
||||
```
|
||||
|
||||
#### Resource Usage Comparison
|
||||
|
||||
| Desktop Environment | RAM Usage | Disk Space | Boot Time | Complexity |
|
||||
|-------------------|-----------|------------|-----------|------------|
|
||||
| Openbox alone | ~100MB | ~50MB | Fast | Simple |
|
||||
| LXDE | ~200MB | ~400MB | Fast | Easy |
|
||||
| Xfce | ~300MB | ~600MB | Medium | Medium |
|
||||
| GNOME | ~800MB | ~1.5GB | Slow | Complex |
|
||||
| KDE Plasma | ~600MB | ~1.2GB | Medium | Complex |
|
||||
|
||||
#### Advanced GUI Configuration
|
||||
|
||||
##### Custom Desktop Theme
|
||||
```bash
|
||||
# Create theme directory
|
||||
mkdir -p config/includes.chroot/usr/share/themes/MyTheme
|
||||
|
||||
# Add custom wallpaper
|
||||
mkdir -p config/includes.chroot/usr/share/pixmaps
|
||||
cp my-wallpaper.jpg config/includes.chroot/usr/share/pixmaps/
|
||||
|
||||
# Set default wallpaper for LXDE
|
||||
mkdir -p config/includes.chroot/etc/xdg/pcmanfm/LXDE
|
||||
cat > config/includes.chroot/etc/xdg/pcmanfm/LXDE/desktop-items-0.conf << 'EOF'
|
||||
[*]
|
||||
wallpaper_mode=stretch
|
||||
wallpaper_common=1
|
||||
wallpaper=/usr/share/pixmaps/my-wallpaper.jpg
|
||||
EOF
|
||||
```
|
||||
|
||||
##### Auto-login Configuration
|
||||
```bash
|
||||
# For LXDE with automatic login
|
||||
mkdir -p config/includes.chroot/etc/lightdm
|
||||
cat > config/includes.chroot/etc/lightdm/lightdm.conf << 'EOF'
|
||||
[Seat:*]
|
||||
autologin-user=user
|
||||
autologin-user-timeout=0
|
||||
EOF
|
||||
```
|
||||
|
||||
#### Recommendation Guide
|
||||
|
||||
**For new users:** Start with LXDE (`task-lxde-desktop`)
|
||||
- Easy to use
|
||||
- Good performance
|
||||
- Includes essential applications
|
||||
- Well documented
|
||||
|
||||
**For minimal systems:** Use Openbox + essential apps
|
||||
- Very low resource usage
|
||||
- Fast boot times
|
||||
- Customizable
|
||||
|
||||
**For modern experience:** Choose Xfce or GNOME
|
||||
- Modern interface
|
||||
- Good hardware support
|
||||
- Regular updates
|
||||
|
||||
**For specific use cases:** Custom combinations
|
||||
- Kiosk systems: Openbox + single application
|
||||
- Developer workstations: Xfce + development tools
|
||||
- Media centers: Minimal WM + media applications
|
||||
|
||||
### Q: How do I look up applications on my current system to get package names for config/package-lists?
|
||||
|
||||
**Q: I want to include applications I currently use in my live system. How do I find the exact package names to add to my config/package-lists files?**
|
||||
|
||||
**A:** There are several methods to discover package names from installed applications. Here are the most effective approaches:
|
||||
|
||||
#### Method 1: List All Installed Packages
|
||||
|
||||
##### Using dpkg (Debian Package Manager)
|
||||
```bash
|
||||
# List all installed packages with descriptions
|
||||
dpkg -l | grep -i "search-term"
|
||||
|
||||
# Examples:
|
||||
dpkg -l | grep -i firefox # Find Firefox packages
|
||||
dpkg -l | grep -i editor # Find text editors
|
||||
dpkg -l | grep -i media # Find media applications
|
||||
```
|
||||
|
||||
##### Using apt
|
||||
```bash
|
||||
# List all manually installed packages
|
||||
apt list --installed | grep -i "search-term"
|
||||
|
||||
# Show only manually installed (not dependencies)
|
||||
apt-mark showmanual | grep -i "search-term"
|
||||
|
||||
# Examples:
|
||||
apt list --installed | grep -i gimp
|
||||
apt-mark showmanual | grep -i code
|
||||
```
|
||||
|
||||
#### Method 2: Find Package for Specific Application
|
||||
|
||||
##### Using which and dpkg
|
||||
```bash
|
||||
# Find which package provides a specific command
|
||||
which firefox
|
||||
dpkg -S $(which firefox)
|
||||
|
||||
# Or in one command:
|
||||
dpkg -S $(which firefox) | cut -d: -f1
|
||||
|
||||
# Examples:
|
||||
dpkg -S $(which code) # Find VS Code package
|
||||
dpkg -S $(which vlc) # Find VLC package
|
||||
dpkg -S $(which gimp) # Find GIMP package
|
||||
```
|
||||
|
||||
##### Using apt-file (if installed)
|
||||
```bash
|
||||
# First install and update apt-file
|
||||
sudo apt install apt-file
|
||||
sudo apt-file update
|
||||
|
||||
# Find package containing a file
|
||||
apt-file search /usr/bin/firefox
|
||||
apt-file search gimp
|
||||
|
||||
# Find package containing any file with name
|
||||
apt-file search -x '/usr/bin/.*firefox.*'
|
||||
```
|
||||
|
||||
#### Method 3: Application-Specific Discovery
|
||||
|
||||
##### Desktop Applications (.desktop files)
|
||||
```bash
|
||||
# List all desktop applications
|
||||
ls /usr/share/applications/*.desktop | while read app; do
|
||||
name=$(basename "$app" .desktop)
|
||||
echo "Desktop entry: $name"
|
||||
# Find which package provides this .desktop file
|
||||
dpkg -S "$app" 2>/dev/null | cut -d: -f1
|
||||
done
|
||||
```
|
||||
|
||||
##### GUI Application Discovery
|
||||
```bash
|
||||
# Find packages by searching application menu names
|
||||
dpkg -l | awk '/^ii/{print $2}' | while read pkg; do
|
||||
if dpkg -L "$pkg" 2>/dev/null | grep -q "/usr/share/applications/"; then
|
||||
echo "Package with GUI: $pkg"
|
||||
fi
|
||||
done
|
||||
```
|
||||
|
||||
#### Method 4: Category-Based Package Discovery
|
||||
|
||||
##### By Package Sections
|
||||
```bash
|
||||
# Find packages by category
|
||||
dpkg-query -W -f='${Package} ${Section}\n' | grep -E "(graphics|video|audio|editors|web|games)" | sort
|
||||
|
||||
# Specific categories:
|
||||
dpkg-query -W -f='${Package} ${Section}\n' | grep graphics
|
||||
dpkg-query -W -f='${Package} ${Section}\n' | grep editors
|
||||
dpkg-query -W -f='${Package} ${Section}\n' | grep web
|
||||
```
|
||||
|
||||
##### By Description Content
|
||||
```bash
|
||||
# Search package descriptions for keywords
|
||||
apt-cache search "text editor" | head -10
|
||||
apt-cache search "media player" | head -10
|
||||
apt-cache search "graphics" | head -10
|
||||
apt-cache search "development" | head -10
|
||||
```
|
||||
|
||||
#### Method 5: Practical Examples
|
||||
|
||||
##### Common Applications and Their Package Names
|
||||
|
||||
**Web Browsers:**
|
||||
```
|
||||
Firefox → firefox-esr
|
||||
Google Chrome → google-chrome-stable (requires external repository)
|
||||
Chromium → chromium
|
||||
```
|
||||
|
||||
**Text Editors:**
|
||||
```
|
||||
VS Code → code (requires external repository)
|
||||
Sublime Text → sublime-text (requires external repository)
|
||||
Vim → vim
|
||||
Emacs → emacs
|
||||
Nano → nano
|
||||
Gedit → gedit
|
||||
```
|
||||
|
||||
**Media Applications:**
|
||||
```
|
||||
VLC → vlc
|
||||
GIMP → gimp
|
||||
Inkscape → inkscape
|
||||
Audacity → audacity
|
||||
OBS Studio → obs-studio
|
||||
```
|
||||
|
||||
**Development Tools:**
|
||||
```
|
||||
Git → git
|
||||
Node.js → nodejs
|
||||
Python → python3
|
||||
Docker → docker.io
|
||||
```
|
||||
|
||||
#### Method 6: Generate Package List from Current System
|
||||
|
||||
##### Create Complete Package List
|
||||
```bash
|
||||
# Generate a list of all manually installed packages
|
||||
apt-mark showmanual > my-current-packages.txt
|
||||
|
||||
# Clean up the list (remove system packages you don't want)
|
||||
# Then use in your live-build:
|
||||
cp my-current-packages.txt config/package-lists/current-system.list.chroot
|
||||
```
|
||||
|
||||
##### Create Filtered Package List
|
||||
```bash
|
||||
# Create list excluding system packages
|
||||
apt-mark showmanual | grep -v -E "^(linux-|grub-|systemd|udev|apt|dpkg)" > config/package-lists/applications.list.chroot
|
||||
```
|
||||
|
||||
#### Method 7: Interactive Package Discovery
|
||||
|
||||
##### Using Synaptic Package Manager
|
||||
```bash
|
||||
# Install Synaptic for GUI package browsing
|
||||
sudo apt install synaptic
|
||||
|
||||
# Launch Synaptic, browse categories, note package names
|
||||
# Then add them to your package lists
|
||||
```
|
||||
|
||||
##### Using aptitude (Text UI)
|
||||
```bash
|
||||
# Install aptitude for interactive package management
|
||||
sudo apt install aptitude
|
||||
|
||||
# Launch aptitude, browse packages interactively
|
||||
aptitude
|
||||
```
|
||||
|
||||
#### Tips and Best Practices
|
||||
|
||||
**Package Name Variations:**
|
||||
- Some applications have different names in Debian repositories
|
||||
- Use `apt search application-name` to find alternatives
|
||||
- Check both the main package and `-dev` packages if you need development files
|
||||
|
||||
**Metapackages vs Individual Packages:**
|
||||
- `task-*` packages install complete desktop environments
|
||||
- Individual packages give more control over what's installed
|
||||
- You can mix both approaches in different `.list.chroot` files
|
||||
|
||||
**External Repositories:**
|
||||
- Some applications (VS Code, Chrome) require external repositories
|
||||
- Consider using alternative packages available in Debian repos (Chromium instead of Chrome)
|
||||
- Document external repository requirements separately
|
||||
|
||||
**Testing Package Lists:**
|
||||
- Test your package lists in a virtual machine before final build
|
||||
- Use `apt-cache policy package-name` to verify package availability
|
||||
- Check package dependencies with `apt-cache depends package-name`
|
||||
|
||||
### Q: This is live-build, so it runs in memory. Can you also install it to disk if you want?
|
||||
|
||||
**A:** Yes! Debian Live systems are designed to run both ways - as temporary live systems in memory AND as permanent installations to disk.
|
||||
|
||||
#### Live vs Installed - The Difference
|
||||
|
||||
**Live Mode (Default):**
|
||||
- Runs entirely from USB/CD/DVD in RAM
|
||||
- No changes are saved (unless using persistence - see below)
|
||||
- Perfect for testing, troubleshooting, portable computing
|
||||
- No installation required - boot and go
|
||||
|
||||
**Installed Mode:**
|
||||
- Permanently installed to hard disk like any other OS
|
||||
- All changes saved normally
|
||||
- Full desktop OS experience
|
||||
- Can dual-boot with other operating systems
|
||||
|
||||
#### Installation Methods
|
||||
|
||||
##### Method 1: Include Debian Installer (Recommended)
|
||||
|
||||
Add the installer to your live build configuration:
|
||||
|
||||
```bash
|
||||
# When configuring your build, enable the installer
|
||||
../lb-wrapper.sh config --debian-installer live --apt-secure false --distribution stable
|
||||
|
||||
# Add installer launcher to desktop
|
||||
echo "debian-installer-launcher" >> config/package-lists/installer.list.chroot
|
||||
```
|
||||
|
||||
##### Method 2: Text-based Installer
|
||||
|
||||
```bash
|
||||
# Add text installer to config
|
||||
../lb-wrapper.sh config --debian-installer true --apt-secure false --distribution stable
|
||||
```
|
||||
|
||||
##### Method 3: Live-Installer (Simpler)
|
||||
|
||||
```bash
|
||||
# Add live-installer package
|
||||
echo "live-installer" >> config/package-lists/installer.list.chroot
|
||||
```
|
||||
|
||||
#### Persistence (Hybrid Approach)
|
||||
|
||||
##### Create Persistent USB
|
||||
|
||||
```bash
|
||||
# Create persistence partition on USB after writing ISO
|
||||
# (This example assumes USB device is /dev/sdb - VERIFY YOUR DEVICE!)
|
||||
|
||||
# 1. Write ISO to USB first
|
||||
sudo dd if=live-image-amd64.hybrid.iso of=/dev/sdb bs=4M status=progress
|
||||
|
||||
# 2. Create additional partition for persistence
|
||||
sudo fdisk /dev/sdb
|
||||
# Create new partition using remaining space
|
||||
|
||||
# 3. Format persistence partition
|
||||
sudo mkfs.ext4 -L persistence /dev/sdb2
|
||||
|
||||
# 4. Mount and create persistence.conf
|
||||
sudo mkdir -p /mnt/persistence
|
||||
sudo mount /dev/sdb2 /mnt/persistence
|
||||
echo "/ union" | sudo tee /mnt/persistence/persistence.conf
|
||||
sudo umount /mnt/persistence
|
||||
```
|
||||
|
||||
##### Enable Persistence at Boot
|
||||
|
||||
```bash
|
||||
# Add to boot parameters
|
||||
boot=live components persistence
|
||||
```
|
||||
|
||||
> **Note for n-OS-tr**: persistence is **explicitly discouraged** for this project — see [`plans/threat_model.md`](../plans/threat_model.md) for why ephemerality is a privacy property we refuse to weaken by default. Persistence is kept here only as reference material.
|
||||
|
||||
### Q: How small can you go?
|
||||
|
||||
**A:** System minimization in Debian Live is possible, but there are important limitations. Core utilities like `ls` are part of essential packages that cannot be safely removed.
|
||||
|
||||
#### Understanding Essential vs Optional Packages
|
||||
|
||||
**Essential Packages (Cannot Remove):**
|
||||
- **coreutils** (includes `ls`, `cp`, `mv`, `cat`, `mkdir`, etc.)
|
||||
- **bash** (shell interpreter)
|
||||
- **init systems** (systemd or equivalent)
|
||||
- **libc6** (core C library)
|
||||
- **dpkg** (package manager)
|
||||
|
||||
**Why `ls` Cannot Be Removed:**
|
||||
```bash
|
||||
dpkg -S $(which ls)
|
||||
# Output: coreutils: /bin/ls
|
||||
|
||||
dpkg -s coreutils | grep Essential
|
||||
# Output: Essential: yes
|
||||
```
|
||||
|
||||
Essential packages are marked as such because removing them would break the system fundamentally.
|
||||
|
||||
#### Minimization Strategies
|
||||
|
||||
##### Strategy 1: Minimal Debootstrap (Recommended)
|
||||
|
||||
```bash
|
||||
../lb-wrapper.sh config \
|
||||
--apt-secure false \
|
||||
--distribution stable \
|
||||
--debootstrap-options "--variant=minbase" \
|
||||
--apt-recommends false \
|
||||
--apt-indices false \
|
||||
--firmware-chroot false \
|
||||
--memtest none \
|
||||
--binary-image hdd
|
||||
|
||||
echo "user-setup sudo" > config/package-lists/essential.list.chroot
|
||||
echo "ifupdown isc-dhcp-client" >> config/package-lists/essential.list.chroot
|
||||
```
|
||||
|
||||
**Results:** ~298MB system (compared to ~380MB default)
|
||||
|
||||
##### Strategy 2: Remove Non-Essential Recommended Packages
|
||||
|
||||
```bash
|
||||
../lb-wrapper.sh config --apt-recommends false
|
||||
echo "live-tools eject" > config/package-lists/minimal-live.list.chroot
|
||||
```
|
||||
|
||||
##### Strategy 3: Custom Package Exclusions
|
||||
|
||||
```bash
|
||||
mkdir -p config/hooks/normal
|
||||
cat > config/hooks/normal/0010-remove-optional.hook.chroot << 'EOF'
|
||||
#!/bin/bash
|
||||
|
||||
# Remove documentation to save space
|
||||
rm -rf /usr/share/doc/*
|
||||
rm -rf /usr/share/man/*
|
||||
rm -rf /usr/share/info/*
|
||||
|
||||
# Remove locale data except for English
|
||||
find /usr/share/locale -mindepth 1 -maxdepth 1 -type d ! -name 'en*' -exec rm -rf {} \;
|
||||
|
||||
# Remove cached package files
|
||||
apt-get clean
|
||||
EOF
|
||||
```
|
||||
|
||||
**Warning:** This violates package integrity and may cause issues.
|
||||
|
||||
#### Size Comparison Table
|
||||
|
||||
| Configuration Type | Size | Boot Time | Functionality |
|
||||
|-------------------|------|-----------|---------------|
|
||||
| Default Tutorial 1 | ~380MB | Medium | Basic console + live tools |
|
||||
| Minimal (minbase) | ~280MB | Fast | Essential console only |
|
||||
| Ultra-minimal hook | ~250MB | Very fast | Bare minimum (risky) |
|
||||
| Minimal GUI | ~450MB | Medium | Basic graphical interface |
|
||||
| Full LXDE | ~800MB | Slow | Complete desktop |
|
||||
|
||||
#### The Bottom Line: Practical Limits
|
||||
|
||||
- **Theoretical minimum:** ~180-200MB (unstable, breaks functionality)
|
||||
- **Practical minimum:** ~250-280MB (stable, console-only)
|
||||
- **Recommended minimum:** ~350-400MB (includes basic GUI capability)
|
||||
|
||||
#### Best Practices for Minimization
|
||||
|
||||
1. **Start with `--debootstrap-options "--variant=minbase"`** — safest reduction
|
||||
2. **Disable recommendations** with `--apt-recommends false`
|
||||
3. **Remove documentation/locales** via hooks if space is critical
|
||||
4. **Test thoroughly** — minimal systems may lack expected tools
|
||||
5. **Document what you removed** for troubleshooting
|
||||
6. **Consider alternatives** like Alpine Linux for truly minimal containers
|
||||
|
||||
**Remember:** Core utilities like `ls`, `cp`, `mv` are fundamental to Unix-like systems. Focus on removing optional packages, documentation, and recommended packages instead of core system utilities.
|
||||
|
||||
The goal should be "minimal but functional" rather than "absolutely smallest possible" for any system you plan to actually use.
|
||||
Reference in New Issue
Block a user