mouse/src
| Name | Type | Object |
|---|---|---|
| kernel/ | tree | 6df130daf9d3 |
| patches/ | tree | c13ba99d478c |
| ports/ | tree | 912a02604da3 |
| rootfs/ | tree | 56390845f40e |
| scripts/ | tree | c7b6280eb8d4 |
| support/ | tree | 295542ea68ad |
| tests/ | tree | 292def7f74e4 |
| .containerignore | blob | 6e6498aa611c |
| .gitignore | blob | 953a7e39718c |
| Containerfile | blob | e6f70c5a6dee |
| Makefile | blob | 3848beab46aa |
| PLAN.md | blob | adce7ed0c555 |
| PORTS.md | blob | 83f3d597cc9c |
| README.md | blob | b0840cb95ae6 |
| sources.lock | blob | 2920cd260135 |
README.md
MOUSE source tree
This repository builds the MOUSE C3 boot image: Linux 6.18.35 from pinned
kernel.org source using MOUSE's own x86_64 configuration, a MOUSE-owned mini
rootfs with ChimeraUtils and static OpenRC 0.63.3, and cheesed from the
sibling repository as /sbin/cheesed.
The mini rootfs is assembled from an explicit file list rather than inheriting
another distribution's filesystem. The kernel, musl, NetBSD curses, tcsh, and
the selected ChimeraUtils base commands are compiled locally from pinned source
archives. C3 adds a static util-linux agetty and non-PAM Shadow login, with
libxcrypt supplying the static password-hashing interface. No shipped runtime
artifact comes from Alpine.
Build and boot
The canonical build is the multi-stage Containerfile. It uses a
digest-pinned Alpine build environment, builds both sibling repositories, and
exports only the kernel and initramfs. Alpine supplies build tools only; both
runtime artifacts are assembled entirely from MOUSE's pinned sources and
checked-in configuration.
make image uses Apple Container, Docker, or Podman and exports the results
into build/. The builder runs natively as arm64 and cross-compiles the base
system and cheesed for static x86_64 musl. Set CONTAINER_CLI to select a
specific implementation. The wrapper creates a clean temporary context
containing both sibling repositories, excluding Git metadata and prior build
outputs. make image-linux runs the inner build directly on an equivalent
Linux host. Homebrew and the macOS SDK are not used.
make run prefers a repository-local QEMU at
build/tools/qemu/bin/qemu-system-x86_64, then falls back to
qemu-system-x86_64 on PATH.
make image
make run
make check
Generated and downloaded files live under build/ and sources/, both of
which are ignored by Git. Every downloaded input is versioned and SHA-256
verified through sources.lock. Before writing the initramfs, the build rejects
any base ELF executable with an interpreter or dynamic NEEDED entry.
make check requires expect. It boots five policy and failure variants under
QEMU. The suite verifies the supervised serial login, root's tcsh login
environment, strict /etc/rc.conf translation into disposable runlevels,
enabled and disabled ports-service policy, missing dependencies and dependency
cycles without partial starts, required-service recovery, restart exhaustion,
forced termination, runtime-only service operations, and reverse-order
shutdown.
To select a container frontend explicitly:
CONTAINER_CLI=container make image
CONTAINER_CLI=docker make image
CONTAINER_CLI=podman make image
The wrapper selects linux/arm64 or linux/amd64 from the host architecture.
MOUSE_BUILDER_PLATFORM can override that choice when the frontend provides
cross-architecture emulation.
The serial console should include:
Cheesed to meet you! v0.1.0
cheesed: C3 bootstrap complete; cheesed is PID 1
cheesed: enabled optional services: mouse_echo
cheesed: OpenRC default transition complete
mouse login: root (automatic login)
MOUSE 0.1.0 (x86_64)
mouse:~#
The checked-in development image uses agetty --autologin root so the QEMU
acceptance suite is deterministic. It still enters the conventional
agetty → login → tcsh chain; the root password remains locked in
/etc/shadow.