Browse Source

Re-add docs

minexew 1 year ago
  1. 24
  2. 56
  3. 72


@ -0,0 +1,24 @@
Building from source
Building Shrine requires an x86-64 Linux machine with Docker/Podman.
Then the process is as easy as
mkdir out
podman run -it -v .:/usr/src/shrine -v ./out:/build/shrine/out --rm minexew/shrine-build:1
The output will be `out/Shrine.ISO`.
The resultant build can be tested by running
qemu-system-x86_64 \
-cdrom out/Shrine.ISO \
-boot d \
-machine kernel_irqchip=off \
-smp cores=4 \
-m 2048 \
-rtc base=localtime \
-soundhw pcspk \
-netdev user,id=u1 -device pcnet,netdev=u1


@ -0,0 +1,56 @@
Pkg package format
*Pkg* is the name of Shrine's package manager.
Each package ships as a manifest + one or more *installables*.
The only installable format currently supported is RedSea disk image (.ISO.C)
Manifest format
The manifest is a key-value format, using exactly one Tab character as delimiter. The keys are:
- `name` (string - package name)
- `osmin` (int - minimum supported OS version, default 0)
- `osmax` (int - maximum OS version, default *+∞*)
- `pkgmin` (int - minimum *Pkg* version, default *+∞*)
- `version` (string up to 6 chars - version for display purposes, default *NULL*)
- `release` (int - version for comparison purposes, default 0)
- `installdir` (string, default *NULL*)
- `iso.c` (string - see below, default *NULL*)
- `size` (int - download size in bytes, default 0)
- `post-install-doc` (string, default *NULL*)
Name of file to open after package installation. Must be an absolute path.
Currently ignored keys:
- `website` (string)
For a package to be installable, it needs to specify at least `pkgmin`, `name`, `version`, `installdir` and an installable.
The manifest can contain any other keys; *Pkg* might or might not preserve them when manipulating the package.
`iso.c` changes meaning depending on the context.
This is somewhat confusing, which makes it a perfect fit for TempleOS.
- in repo, it's a (usually relative) URL to the package's ISO.C download
- in a downloaded package it is a filesystem path
- when building a package it specifies the output filename
`size` is ambiguous if the package provides multiple download formats. It's not a big deal.
To maximize compatibility with systems in the wild, you should generally use the lowest `pkgmin` that's suitable for your package.
Format versions are described below:
- 10 - Initial public release
- 11 - Adds support for `post-install-doc` (Shrine 5.03.1)
Dependency resolution
--------------------- omitted on purpose, to keep things simple.


@ -0,0 +1,72 @@
Shrine is a TempleOS distribution that aims to be more modern & approachable.
Shrine aims to improve upon TempleOS in several aspects:
- Approachability: Shrine ships with Lambda Shell, a more traditional Unix-like command interpreter
- Connectivity: TCP/IP stack! Internet access!
- Software access: Shrine includes a package downloader
- Versatility: unlike stock TempleOS, Shrine requires only 64MB RAM, making it feasible for cloud micro-instances and similar setups (note: this is planned, but currently not true)
Software included in Shrine:
- Mfa (minimalist file access)
- Lsh (Lambda Shell)
- Pkg (package downloader)
- Wget
Setting up with networking
- Native Stack (highly experimental)
- configure your VM networking: *Adapter Type: PCnet-PCI II* (QEMU: `-netdev user,id=u1 -device pcnet,netdev=u1`)
- *Attached to: NAT* seems to be the most reliable setting, Bridged Mode also works somewhat
- On boot, Shrine will automatically attempt to acquire an IP address. If you don't get a message about "Configuring network", the adapter was not detected.
- To enable tunelled networking through Snail:
- configure your VM: COM3 - TCP, server, 7777 (in VirtualBox, server = UNCHECK *Connect to existing*)
- (make sure to *disable* networking for the VM, otherwise Native Stack will get precedence)
- start the VM
- run ./
- you will now be able to access the Internet, try for example `pkg-list`
- To enable file access through Mfa, configure the VM as follows:
- configure your VM: COM1 - TCP, server, 7770
- start `/Apps/Mfa.HC.Z` in the VM
- on the host, use ./ to transfer commands and files
- for example: `./ list /Apps/Mfa.HC.Z Mfa.HC`
Both of these can be used simultaneously.
Package management functions
Note: In Lsh, use `pkg-install xyz` in place of `PkgInstall("xyz")` etc.
- `PkgList;`
List all packages available in the repository.
- `PkgInstall(U8* package_name);`
Download & install a specific package.
- `PkgInstallFromFile(U8* manifest_path);`
Manually install a downloaded package. Manifest must reference an existing .ISO.C path.
- `PkgMakeFromDir(U8* manifest_path, U8* src_dir);`
Build a package from directory contents. For an example manifest, check [here](Shrine/Packages/Lsh/manifest). Manifest must reference a valid .ISO.C path which will be used as **output**!
- `PkgMakeFromFile(U8* manifest_path, U8* file_path);`
Build a package from a single file. See above for details.
[See here]( for more information about how packages work.
Building from source
[See here](