mirror of
https://github.com/johndoe6345789/SparkOS.git
synced 2026-04-24 13:34:56 +00:00
185 lines
4.3 KiB
Markdown
185 lines
4.3 KiB
Markdown
# SparkOS
|
|
|
|
A minimal Linux distribution designed for simplicity and portability. SparkOS features:
|
|
|
|
- **Minimal footprint**: Barebones Linux system with bash shell
|
|
- **Portable**: dd-able disk image for USB flash drives
|
|
- **Custom init**: Lightweight C++ init system
|
|
- **Future-ready**: Designed to support Qt6/QML GUI and Wayland
|
|
- **Root elevation**: Uses sudo for privilege management
|
|
|
|
## MVP Status
|
|
|
|
The current MVP provides:
|
|
- ✅ Custom init system written in C
|
|
- ✅ Working bash shell environment
|
|
- ✅ dd-able AMD64 image creation scripts
|
|
- ✅ Minimal root filesystem structure
|
|
- ✅ Build system (Makefile)
|
|
|
|
## Prerequisites
|
|
|
|
To build SparkOS, you need:
|
|
|
|
- GCC compiler
|
|
- GNU Make
|
|
- Linux system (for building)
|
|
|
|
To create bootable images (optional):
|
|
- Root privileges
|
|
- `syslinux` bootloader
|
|
- `parted` partitioning tool
|
|
- `losetup` for loop devices
|
|
- `mkfs.ext4` filesystem tools
|
|
|
|
## Quick Start
|
|
|
|
### Building the Init System
|
|
|
|
```bash
|
|
# Build the init binary
|
|
make init
|
|
|
|
# Or use the quick build script
|
|
./scripts/build.sh
|
|
```
|
|
|
|
### Setting Up Root Filesystem
|
|
|
|
```bash
|
|
# Create the root filesystem structure
|
|
./scripts/setup_rootfs.sh
|
|
|
|
# Install init to rootfs
|
|
make install
|
|
```
|
|
|
|
### Creating a Bootable Image (Advanced)
|
|
|
|
⚠️ **Warning**: Creating bootable images requires root privileges and proper tools.
|
|
|
|
```bash
|
|
# Install required tools (Ubuntu/Debian)
|
|
sudo apt-get install syslinux parted
|
|
|
|
# Build everything and create image
|
|
make all
|
|
sudo make image
|
|
|
|
# Write to USB drive (CAUTION: destroys all data on target!)
|
|
sudo dd if=sparkos.img of=/dev/sdX bs=4M status=progress
|
|
```
|
|
|
|
Replace `/dev/sdX` with your actual USB device (e.g., `/dev/sdb`).
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
SparkOS/
|
|
├── config/ # Build configuration files
|
|
│ └── build.conf # Build parameters
|
|
├── scripts/ # Build and setup scripts
|
|
│ ├── build.sh # Quick build script
|
|
│ ├── setup_rootfs.sh # Root filesystem setup
|
|
│ └── create_image.sh # Image creation script
|
|
├── src/ # Source code
|
|
│ └── init.c # Custom init system
|
|
├── rootfs/ # Root filesystem (generated)
|
|
│ ├── bin/ # Essential binaries
|
|
│ ├── sbin/ # System binaries
|
|
│ ├── etc/ # Configuration files
|
|
│ └── ... # Standard FHS directories
|
|
├── Makefile # Build system
|
|
└── README.md # This file
|
|
```
|
|
|
|
## Architecture
|
|
|
|
### Init System
|
|
|
|
SparkOS uses a custom init system (`/sbin/init`) that:
|
|
- Mounts essential filesystems (proc, sys, dev, tmp)
|
|
- Spawns a bash login shell
|
|
- Handles process reaping
|
|
- Respawns shell on exit
|
|
|
|
### Root Filesystem
|
|
|
|
Follows the Filesystem Hierarchy Standard (FHS):
|
|
- `/bin`, `/sbin`: Essential binaries
|
|
- `/etc`: System configuration
|
|
- `/proc`, `/sys`, `/dev`: Kernel interfaces
|
|
- `/tmp`: Temporary files
|
|
- `/usr`: User programs and libraries
|
|
- `/var`: Variable data
|
|
- `/root`: Root user home
|
|
- `/home`: User home directories
|
|
|
|
## Development
|
|
|
|
### Building Components
|
|
|
|
```bash
|
|
# Build init system only
|
|
make init
|
|
|
|
# Install to rootfs
|
|
make install
|
|
|
|
# Clean build artifacts
|
|
make clean
|
|
|
|
# Show help
|
|
make help
|
|
```
|
|
|
|
### Adding Binaries to Root Filesystem
|
|
|
|
To create a fully functional system, you need to populate the rootfs with binaries:
|
|
|
|
```bash
|
|
# Example: Add bash (statically linked is best)
|
|
cp /bin/bash rootfs/bin/
|
|
|
|
# Example: Add essential utilities
|
|
cp /bin/{ls,cat,mkdir,rm,cp,mount} rootfs/bin/
|
|
|
|
# Copy required libraries if not static
|
|
ldd rootfs/bin/bash # Check dependencies
|
|
# Copy libraries to rootfs/lib or rootfs/lib64
|
|
```
|
|
|
|
## Future Roadmap
|
|
|
|
- [ ] Qt6/QML full screen GUI
|
|
- [ ] Wayland compositor integration
|
|
- [ ] C++ CLI tools
|
|
- [ ] Package management
|
|
- [ ] sudo integration
|
|
- [ ] Network configuration
|
|
- [ ] Android-like UI/UX
|
|
|
|
## Contributing
|
|
|
|
Contributions are welcome! This is an early-stage project focused on:
|
|
1. Maintaining minimal footprint
|
|
2. Clean, readable code
|
|
3. Proper documentation
|
|
|
|
## License
|
|
|
|
See LICENSE file for details.
|
|
|
|
## Notes
|
|
|
|
This is an MVP implementation. The system currently provides:
|
|
- Basic init system
|
|
- Shell environment
|
|
- Build infrastructure
|
|
- Image creation tooling
|
|
|
|
To create a fully bootable system, you'll also need:
|
|
- Linux kernel binary (`vmlinuz`)
|
|
- Essential system binaries and libraries
|
|
- Bootloader installation (handled by scripts)
|