Skip to content
Pear-ProjectPublic

About

pearOS ISO builder source code

Resources

Stars

8 stars

Watchers

1 watching

Forks

Latest commit

Β 

History

49 Commits

Folders and files

Repository files navigation



pearOS-debian-base πŸ“Œ

It is pearOS, but with Debian Base. Yes! It uses vanilla debian, less bugs, easier, better etc.

Why? πŸ“Œ

A Debian base means the vast APT package ecosystem, a more conservative/stable release cadence, and broader out-of-the-box hardware support than a rolling-release base β€” while keeping the same pearOS look, feel and app set.

Ok... How do I build it? πŸ“Œ

build-iso.sh is a generic Debian live-ISO engine: package list, extra APT repo, package selection, branding and boot menu/theme names all come from a profile under profiles/<name>/, not from the script itself.

sudo ./build-iso.sh

Note: The build script must be run as root since it needs to create chroot environments and install packages β€” if not already root, it re-executes itself via pkexec (or sudo as a fallback).

It accepts the following flags:

  • --profile <name> Distro profile to build, from profiles/<name>/. Default: pear (Pulsar OS).
  • --branch stable, replacing stable with forky or rolling (mapped to Debian's trixie, forky and testing suites respectively).
  • --local to package from the packages in the /PKG folder, which must be in the same folder that contains the /ISO folder
  • --nvidia Build ISO image with privative drivers (BROADCOM, NVIDIA, etc...)
  • --clean-base Delete the cached base Debian chroot and rebuild it from scratch.
  • --clean-target Delete the working target rootfs and re-clone it from the base cache, even if one already exists from a previous run.
  • --chroot Drop into an interactive shell inside the target rootfs right before compression (proc/sys/dev are still mounted), then stop -- never falls through to packaging the ISO in the same run. The target rootfs is never deleted automatically: if one already exists (from an earlier --chroot session, a finished build, or days ago), any run -- --chroot or plain -- reuses it as-is and skips straight past repo/package install. Pass --clean-target to force a fresh one.

The ISO boots via Ploader (pearOS's own rebrand of rEFInd 0.14.1, a prebuilt EFI binary+theme vendored under profiles/<name>/ploader/) for UEFI, with syslinux as the BIOS/legacy fallback -- there's no bootloader choice to make.

Dependencies: πŸ“Œ

Building from an Arch Linux / CachyOS / Manjaro host

sudo pacman -S --needed \
  squashfs-tools syslinux xorriso mtools dosfstools \
  binutils libisoburn sassc imagemagick psmisc \
  fakeroot rsync jq curl unzip wget git

You'll also need mmdebstrap from the AUR (e.g. yay -S mmdebstrap), since it bootstraps the Debian chroot regardless of the host distro.

Building from a Debian / Ubuntu / Pop!_OS host

sudo apt-get install -y \
  mmdebstrap squashfs-tools isolinux syslinux-common \
  xorriso mtools dosfstools binutils unzip sassc imagemagick psmisc \
  debian-archive-keyring rsync jq curl wget fakeroot git

Verify dependencies:

The build script itself checks for missing dependencies and tells you what to install β€” you don't need to check manually beforehand.

Package Purpose
mmdebstrap Bootstrap the base Debian chroot
squashfs-tools Compress the rootfs into a SquashFS image
isolinux / syslinux-common BIOS boot binaries (isolinux.bin, *.c32 modules) for the ISO -- installed into the profile's own chroot, not the host
xorriso Create hybrid ISO images (BIOS + UEFI)
mtools Manipulate FAT filesystems (EFI image inside ISO)
dosfstools Format FAT partitions (EFI image)
binutils / libisoburn Linker and ISO manipulation tools
sassc SCSS compiler for Plymouth themes
imagemagick Image processing for branding assets
psmisc Provides fuser to kill leftover processes on port 5900
fakeroot Build packages without real root privileges
rsync Sync the base chroot into the working target
jq / curl / wget / unzip / git Download and extract resources during build

ko-fi

Profiles πŸ“Œ

A profile lives under profiles/<name>/ and provides:

  • profile.conf β€” display name, package-name slug, ISO volume label/filename prefix, Plymouth theme name, boot-icons source
  • packages.list β€” the mmdebstrap bootstrap package list
  • repo.sh β€” defines profile_setup_repo() / profile_teardown_repo(), configuring the profile's own APT repo and keyring inside the chroot
  • packages.sh β€” defines PROFILE_REPO_PACKAGES, PROFILE_COMMON_PACKAGES, PROFILE_BACKPORTS_PACKAGES, PROFILE_LOCAL_PIN_GLOB
  • customize.sh β€” defines profile_customize(), the post-install branding/extra-apps step
  • ploader/ β€” the vendored Ploader EFI binary (ploader_x64.efi) and boot theme (theme/)
  • syslinux/ β€” the BIOS boot menu background (splash.png)
  • boot-icons/ β€” asset files (the profile's APT signing key, if any, is embedded directly in repo.sh instead of a separate file)

profiles/pear/ is the existing Pulsar OS setup. Adding a second, completely different distro is just adding a new profiles/<name>/ directory β€” the engine in build-iso.sh doesn't change.

Refreshing the chroot quickly πŸ“Œ

sync-rootfs.sh re-clones build/rootfs-target-<branch> from the already-bootstrapped build/rootfs-base-<branch> and reinstalls the local .deb packages from PKG/debian/build/packages, without redoing the full base bootstrap. Useful while iterating on packages. Accepts --branch|-b <branch> and --nvidia.

Boot Status sequence πŸ“Œ

Result: booted, installed pearOS and booted it βœ…

Success score: 100/100

Test Score
Boot 100/100
UI sanity 100/100
Installable 100/100
Usability 100/100

Usability checks:

Check Result
login + desktop βœ…
UI sanity (installed) βœ… top 99% / dock 100%
Konsole opens βœ…
os-release says pearOS βœ…
sudo apt-get dist-upgrade βœ…
Pafari opens βœ…
Calculator opens βœ…
Notes opens βœ…
Finder opens βœ…
Kate opens βœ…

One screenshot every 10s.

  1. 10s β€” boot 1
  2. 20s β€” boot 2
  3. 30s β€” boot 3
  4. 40s β€” boot 4
  5. 50s β€” boot 5
  6. 60s β€” boot 6
  7. 70s β€” boot 7
  8. 80s β€” boot 8
  9. 90s β€” boot 9
  10. 100s β€” boot 10
  11. 110s β€” desktop ready, then clicked Install pearOS in Welcome β€” boot 11
  12. 120s β€” pearOS installer loading β€” boot 12
  13. 130s β€” pearOS installer loading β€” boot 13
  14. 140s β€” Language screen, then selected English β€” boot 14
  15. 150s β€” Language screen, then clicked Next β€” boot 15
  16. 160s β€” Recovery screen, then selected Install pearOS Goldwing β€” boot 16
  17. 170s β€” Recovery screen, then clicked Continue β€” boot 17
  18. 180s β€” Installer welcome, then clicked Continue β€” boot 18
  19. 190s β€” Terms and Conditions, then clicked Continue β€” boot 19
  20. 200s β€” boot 20
  21. 210s β€” boot 21
  22. 220s β€” boot 22
  23. 230s β€” boot 23
  24. 240s β€” boot 24
  25. 250s β€” boot 25
  26. 260s β€” boot 26
  27. 270s β€” Calamares β€” boot 27
  28. 280s β€” Calamares: Welcome, clicked Next β€” boot 28
  29. 290s β€” Calamares: Location, clicked Next β€” boot 29
  30. 300s β€” Calamares: Keyboard, clicked Next β€” boot 30
  31. 310s β€” Calamares: Partitions, selected Erase disk β€” boot 31
  32. 320s β€” Calamares: Partitions, clicked Next β€” boot 32
  33. 330s β€” Calamares: Summary, clicked Install β€” boot 33
  34. 340s β€” Calamares: installing (2 min) β€” boot 34
  35. 350s β€” Calamares: installing (4 min) β€” boot 35
  36. 360s β€” Calamares: installation finished β€” boot 36
  37. 370s β€” Installed system: first boot β€” boot 37
  38. 380s β€” Installed system: first boot β€” boot 38
  39. 390s β€” Installed system: first boot β€” boot 39
  40. 400s β€” Installed system: first boot β€” boot 40
  41. 410s β€” Installed system: first boot β€” boot 41
  42. 420s β€” Installed system: reached the login screen / desktop β€” boot 42
  43. 430s β€” First boot: country β€” boot 43
  44. 440s β€” First boot: transfer β€” boot 44
  45. 450s β€” First boot: languages β€” boot 45
  46. 460s β€” First boot: accessibility β€” boot 46
  47. 470s β€” First boot: data & privacy β€” boot 47
  48. 480s β€” First boot: PearID β€” boot 48
  49. 490s β€” First boot: create account β€” boot 49
  50. 500s β€” First boot: account filled in β€” boot 50
  51. 510s β€” First boot: terms β€” boot 51
  52. 520s β€” First boot: location services β€” boot 52
  53. 530s β€” First boot: time zone β€” boot 53
  54. 540s β€” First boot: analytics β€” boot 54
  55. 550s β€” First boot: screen time β€” boot 55
  56. 560s β€” First boot: Piri β€” boot 56
  57. 570s β€” First boot: look β€” boot 57
  58. 580s β€” First boot: updates β€” boot 58
  59. 590s β€” First boot: ready β€” boot 59
  60. 600s β€” First boot: applying settings β€” boot 60
  61. 610s β€” Login screen β€” boot 61
  62. 620s β€” Login screen β€” boot 62
  63. 630s β€” Login screen β€” boot 63
  64. 640s β€” Login screen β€” boot 64
  65. 650s β€” Login screen β€” boot 65
  66. 660s β€” Login screen β€” boot 66
  67. 670s β€” Login screen β€” boot 67
  68. 680s β€” Login screen β€” boot 68
  69. 690s β€” Login screen β€” boot 69
  70. 700s β€” Login screen β€” boot 70
  71. 710s β€” Logging in β€” boot 71
  72. 720s β€” Logging in β€” boot 72
  73. 730s β€” Logging in β€” boot 73
  74. 740s β€” Logging in β€” boot 74
  75. 750s β€” Logging in β€” boot 75
  76. 760s β€” Installed system: desktop β€” boot 76
  77. 770s β€” Konsole opened β€” boot 77
  78. 780s β€” Konsole: cat /etc/os-release β€” boot 78
  79. 790s β€” Konsole: apt-get dist-upgrade succeeded β€” boot 79
  80. 800s β€” App: Pafari opened β€” boot 80
  81. 810s β€” App: Calculator opened β€” boot 81
  82. 820s β€” App: Notes opened β€” boot 82
  83. 830s β€” App: Finder opened β€” boot 83
  84. 840s β€” App: Kate opened β€” boot 84

UI Sanity Test πŸ“Œ

Result: menu bar + dock look as expected βœ…
Compared against the reference tests/ui-reference/debian/desktop.png (% of pixels within Β±16 per channel; pass β‰₯ 90%).

Area Similarity
Top bar (first 30 px) 96.8%
Dock (last 100 px) 100.0%

Current frame: desktop

Star History

Star History Chart

Copyright and Licensing πŸ“Œ

This project is released under the GNU Pubilc License v3 or later

Copyright: Alexandru Balan @ Pear Software and Services S.R.L. based in Romania, Dacia Boulevard 133, floor D, Sector 2, Bucharest C.I.F.: 50888207

Raspberry Pi (arm64)

Latest boot / first-boot / usability test sequence: seq-pi/README.md

About

pearOS ISO builder source code

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages