fix: auto-configure git safe.directory in setup.sh for /opt-style installs
Git 2.35.2+ rejects repos where directory owner != current user, which is the common case when cloned as root into /opt. setup.sh now detects this and calls git config --global --add safe.directory automatically. When run via sudo, it writes into SUDO_USER's config rather than root's. README updated with both fixes: git safe.directory and chown for preflight.
This commit is contained in:
parent
ae29996a8a
commit
e0e7717b56
2 changed files with 36 additions and 2 deletions
12
README.md
12
README.md
|
|
@ -42,13 +42,21 @@ make start PROFILE=single-gpu
|
||||||
|
|
||||||
### Installing to `/opt` or other system directories
|
### Installing to `/opt` or other system directories
|
||||||
|
|
||||||
If you clone into a root-owned directory, fix ownership first so preflight can write `.env` and `compose.override.yml`:
|
If you clone into a root-owned directory (e.g. `sudo git clone ... /opt/peregrine`), two things need fixing:
|
||||||
|
|
||||||
|
**1. Git ownership warning** (`fatal: detected dubious ownership`) — `./manage.sh setup` fixes this automatically. If you need git to work *before* running setup:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git config --global --add safe.directory /opt/peregrine
|
||||||
|
```
|
||||||
|
|
||||||
|
**2. Preflight write access** — preflight writes `.env` and `compose.override.yml` into the repo directory. Fix ownership once:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo chown -R $USER:$USER /opt/peregrine
|
sudo chown -R $USER:$USER /opt/peregrine
|
||||||
```
|
```
|
||||||
|
|
||||||
Then run without `sudo` — Peregrine doesn't need it.
|
After that, run everything without `sudo`.
|
||||||
|
|
||||||
### Podman
|
### Podman
|
||||||
|
|
||||||
|
|
|
||||||
26
setup.sh
26
setup.sh
|
|
@ -64,6 +64,31 @@ install_build_tools() {
|
||||||
success "make installed."
|
success "make installed."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ── Git safe.directory ─────────────────────────────────────────────────────────
|
||||||
|
# Git 2.35.2+ rejects repos where the directory owner != current user.
|
||||||
|
# Common when cloned as root into /opt and then run as a regular user.
|
||||||
|
# Fix by registering the repo path in the appropriate user's git config.
|
||||||
|
configure_git_safe_dir() {
|
||||||
|
local repo_dir
|
||||||
|
repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
|
||||||
|
# If git is happy already, nothing to do
|
||||||
|
if git -C "$repo_dir" rev-parse --git-dir &>/dev/null 2>&1; then
|
||||||
|
success "Git repository ownership OK."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
info "Configuring git safe.directory for $repo_dir…"
|
||||||
|
if [[ -n "${SUDO_USER:-}" ]]; then
|
||||||
|
# Running under sudo — write into the invoking user's config, not root's
|
||||||
|
sudo -u "$SUDO_USER" git config --global --add safe.directory "$repo_dir"
|
||||||
|
success "safe.directory set for user '${SUDO_USER}'."
|
||||||
|
else
|
||||||
|
git config --global --add safe.directory "$repo_dir"
|
||||||
|
success "safe.directory set."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# ── Git ────────────────────────────────────────────────────────────────────────
|
# ── Git ────────────────────────────────────────────────────────────────────────
|
||||||
install_git() {
|
install_git() {
|
||||||
if cmd_exists git; then success "git already installed: $(git --version)"; return; fi
|
if cmd_exists git; then success "git already installed: $(git --version)"; return; fi
|
||||||
|
|
@ -317,6 +342,7 @@ main() {
|
||||||
|
|
||||||
install_build_tools
|
install_build_tools
|
||||||
install_git
|
install_git
|
||||||
|
configure_git_safe_dir
|
||||||
# Podman takes precedence if already installed; otherwise install Docker
|
# Podman takes precedence if already installed; otherwise install Docker
|
||||||
if ! check_podman; then
|
if ! check_podman; then
|
||||||
install_docker
|
install_docker
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue