Start here
Build & install
VM builds, pinned dependencies, installation paths, and staged packaging.
60c72c2bView original On this page
Build in the disposable guest
The current target is Linux x86-64. All development builds and tests use
tools/vm/vm.sh
; do not run test binaries, listeners,
or account-management tests on the host.
tools/vm/vm.sh start
tools/vm/vm.sh wait
tools/vm/vm.sh sync
tools/vm/vm.sh run 'make -j2 all'
The binaries are build/psh and build/pshd inside /work/psh in the guest.
Source sync preserves guest build artifacts and excludes the host’s root
build/ directory. See the VM guide
for prerequisites,
state-directory overrides, and guest access.
Dependencies
OpenSSL 4.1.0 and libyaml 0.2.5 source trees and release archives are vendored.
The build verifies the pinned inputs and builds static libraries under
build/deps; it does not fetch dependencies or use host/system crypto or YAML
libraries. Initial VM provisioning downloads the cloud image and installs guest
build tools separately. See dependency provenance
.
Install
Exercise installation in the guest:
tools/vm/vm.sh run 'make install'
System installation requires root for the default ownership and paths.
| Installed content | Default path |
|---|---|
| Client | /usr/local/bin/psh |
| Daemon | /usr/local/sbin/pshd |
| Server configuration | /etc/psh/pshd.yaml |
| Configuration examples | /usr/local/share/psh/examples/ |
| Guides and specifications | /usr/local/share/doc/psh/ |
| Manual pages | /usr/local/share/man/man1/, man5/, and man8/ |
Binaries install with mode 0755; configuration directories use 0750, and
the initial server configuration uses 0640. Existing configuration and host
keys are preserved. Installation creates no identities or accounts and starts
or enables no service. The installed server YAML is a template; complete the
setup guide
before starting the daemon.
Package or customize paths
Run these examples inside the guest, from /work/psh:
make install DESTDIR=/tmp/psh-package
make install DESTDIR=/tmp/psh-package-usr prefix=/usr sysconfdir=/etc
DESTDIR stages files without executing installed programs or generating
identities. It is prepended to each installation path.
| Make variable | Default |
|---|---|
prefix | /usr/local |
bindir | $(prefix)/bin |
sbindir | $(prefix)/sbin |
sysconfdir | /etc |
datarootdir | $(prefix)/share |
docdir | $(datarootdir)/doc/psh |
examplesdir | $(datarootdir)/psh/examples |
mandir | $(datarootdir)/man |
pshd always defaults to /etc/psh/pshd.yaml, independently of installation
variables. If sysconfdir changes, pass the actual path with pshd -f.
Runtime requirements
The daemon requires Linux 5.14 or newer, cgroup v2, clone3(CLONE_INTO_CGROUP),
and permission to create root-owned connection cgroups under /sys/fs/cgroup
and write cgroup.kill. Restricted environments reject connections without a
fallback; a successful build or configuration check does not establish those
runtime capabilities.