Discuss and implement the deployment/installation workflow for p4lf in customer SDP environments.
Binaries will be submitted to P4 as part of the release process, but
only in release and main streams (not dev). The bin/ directory stays
in .p4ignore for the dev stream. This allows:
curl binaries directly from workshop.perforce.com//p4lf/mainCorrect URL base: https://workshop.perforce.com/download/p4lf/<stream>/
main stream = stable "latest release" URLr1.0 etc = pinned release stream URLdev stream = available for testing but not recommended for productionExample:
https://workshop.perforce.com/download/p4lf/main/bin/p4lf-linux-amd64
https://workshop.perforce.com/download/p4lf/main/install.sh
Note: Always use curl -fsSL (and -L for redirect following) when
downloading from workshop.perforce.com.
The install script requires root to:
/p4/common/site/log_feeder//etc/systemd/system/p4lf.servicesystemctl daemon-reloadThe script bails immediately with a clear message if not run as root.
The problem of allowing the perforce OS user to manage the p4lf service
without root (via SDP limited-sudoers or a wrapper script) is deferred to
a future release. Tracked as job P4LF-2.
dev (test here)
└─ p4 copy → main (only promote tested code; main = "safe to rely on")
└─ p4 copy → rX.Y (release stream; add binaries here)
The //p4lf/main stream serves as the stable "latest release" URL.
Only promote to main code that has passed testing in dev.
Key features:
p4lf.cfg.example, p4lf.service via curl -fsSL-s <stream> (default: main), -d <dir>, -n (dry run), -hp4lf.cfgdaemon-reloadrelease target includes install.sh in dist/ tarballspromote comment block documents the full copy-up workflow with
correct workshop.perforce.com URLsTitle: "Enable perforce OS user to manage p4lf service without requiring root." Options to evaluate in a future release:
curl -fsSL https://workshop.perforce.com/download/p4lf/main/install.sh | sudo bash
# or for a specific stream:
sudo bash -c "$(curl -fsSL https://workshop.perforce.com/download/p4lf/main/install.sh)" -- -s r1.0
# P4LF Session Log — 2026-06-26 (Session 5: Deployment & Install Script)
## Session Goal
Discuss and implement the deployment/installation workflow for p4lf in
customer SDP environments.
## Key Decisions
### Binary versioning in P4
Binaries will be submitted to P4 as part of the release process, but
**only in release and main streams** (not dev). The `bin/` directory stays
in `.p4ignore` for the dev stream. This allows:
- Customers to `curl` binaries directly from workshop.perforce.com
- A predictable, stable URL via `//p4lf/main`
### Download URL format
Correct URL base: `https://workshop.perforce.com/download/p4lf/<stream>/`
- `main` stream = stable "latest release" URL
- `r1.0` etc = pinned release stream URL
- `dev` stream = available for testing but not recommended for production
Example:
```
https://workshop.perforce.com/download/p4lf/main/bin/p4lf-linux-amd64
https://workshop.perforce.com/download/p4lf/main/install.sh
```
Note: Always use `curl -fsSL` (and `-L` for redirect following) when
downloading from workshop.perforce.com.
### install.sh must run as root
The install script requires root to:
- Write to `/p4/common/site/log_feeder/`
- Install/update `/etc/systemd/system/p4lf.service`
- Run `systemctl daemon-reload`
The script bails immediately with a clear message if not run as root.
### Perforce user service management: deferred, tracked as P4LF-2
The problem of allowing the `perforce` OS user to manage the p4lf service
without root (via SDP limited-sudoers or a wrapper script) is deferred to
a future release. Tracked as **job P4LF-2**.
### Release/promotion workflow
```
dev (test here)
└─ p4 copy → main (only promote tested code; main = "safe to rely on")
└─ p4 copy → rX.Y (release stream; add binaries here)
```
The `//p4lf/main` stream serves as the stable "latest release" URL.
Only promote to main code that has passed testing in dev.
## What Was Built (CL 32834)
### install.sh (type text+x, carries $Id$/$Change$/$DateTime$ stamps)
Key features:
- Root check (bails early with clear message if not root)
- Platform detection: Linux amd64/arm64, macOS arm64/amd64
- Downloads binary, `p4lf.cfg.example`, `p4lf.service` via `curl -fsSL`
- Options: `-s <stream>` (default: main), `-d <dir>`, `-n` (dry run), `-h`
- Never overwrites an existing `p4lf.cfg`
- Installs/updates systemd unit only if content changed; runs `daemon-reload`
- Prints clear next-step instructions including P4LF-2 note
### Makefile updates
- `release` target includes `install.sh` in dist/ tarballs
- New `promote` comment block documents the full copy-up workflow with
correct workshop.perforce.com URLs
### Job P4LF-2 created
Title: "Enable perforce OS user to manage p4lf service without requiring root."
Options to evaluate in a future release:
1. SDP gen_sudoers.sh entries for p4lf systemctl commands
2. Wrapper script with sudoers entries
3. Split install.sh into root-required and perforce-user phases
## One-liner customer install (once binaries are in main)
```bash
curl -fsSL https://workshop.perforce.com/download/p4lf/main/install.sh | sudo bash
# or for a specific stream:
sudo bash -c "$(curl -fsSL https://workshop.perforce.com/download/p4lf/main/install.sh)" -- -s r1.0
```
## Status at End of Session
- CL 32834 submitted to //p4lf/dev
- install.sh reachable at: https://workshop.perforce.com/download/p4lf/dev/install.sh
- Binaries not yet in any stream (will be added when promoting to main/rX.Y)
- Ready to proceed to Linux integration testing
| # | Change | User | Description | Committed | |
|---|---|---|---|---|---|
| #1 | 32835 | C. Thomas Tyler |
Update P4WorkflowNotes.md and add session log 5. P4WorkflowNotes.md - Working with Jobs section improvements: - Fixed broken 'p4 job' example (was missing the 'job -i' subcommand and heredoc; the --field syntax shown previously does not work for multi-line descriptions or the full field set) - Removed 'User' field which does not exist in this server's job spec; use 'ReportedBy' instead - Added available fields list and Severity value guidance (A/B/C/D) - Clarified that the first Description line is the one-line summary/title - Added 'p4 fix' usage example ai/session_log_2026-06-26.md: Session 5 log covering deployment design, install.sh, release workflow, and job P4LF-2. |