hashicorp/nomad · error
Unable to convert Gid to an int: %w
Error message
Unable to convert Gid to an int: %w
What it means
getGid is the group-id counterpart of getUid: it parses u.Gid with strconv.Atoi and wraps any parse failure. It runs while dropDirPermissions converts the resolved 'nobody' user's primary group for the subsequent os.Chown.
Source
Thrown at client/allocdir/fs_unix.go:82
return nil
}
// getUid for a user
func getUid(u *user.User) (int, error) {
uid, err := strconv.Atoi(u.Uid)
if err != nil {
return 0, fmt.Errorf("Unable to convert Uid to an int: %w", err)
}
return uid, nil
}
// getGid for a user
func getGid(u *user.User) (int, error) {
gid, err := strconv.Atoi(u.Gid)
if err != nil {
return 0, fmt.Errorf("Unable to convert Gid to an int: %w", err)
}
return gid, nil
}
// linkOrCopy attempts to hardlink dst to src and fallsback to copying if the
// hardlink fails.
func linkOrCopy(src, dst string, uid, gid int, perm os.FileMode) error {
// Avoid link/copy if the file already exists in the chroot
// TODO 0.6 clean this up. This was needed because chroot creation fails
// when a process restarts.
if fileInfo, _ := os.Stat(dst); fileInfo != nil {
return nil
}
// Attempt to hardlink.
if err := os.Link(src, dst); err == nil {
return nil
}View on GitHub (pinned to 482b49bf1a)
Solutions
- Fix the gid field for the user via `getent passwd nobody` inspection and edit /etc/passwd (or the NSS source).
- Ensure the referenced group exists with a numeric gid in /etc/group.
- Restore standard system user/group files on minimal images.
- Restart the Nomad client after the repair.
Example fix
// before: non-numeric gid nobody:x:65534:nogroup-nonnumeric::/nonexistent:/sbin/nologin // after nobody:x:65534:65534:nobody:/nonexistent:/sbin/nologin
Defensive patterns
Strategy: validation
Validate before calling
// preflight: referenced users must have numeric gids
u, err := user.Lookup(taskUser)
if err != nil { return err }
if _, err := strconv.Atoi(u.Gid); err != nil {
return fmt.Errorf("user %s has non-numeric gid %q", taskUser, u.Gid)
} Try / catch
if err := td.Build(); err != nil {
if strings.Contains(err.Error(), "convert Gid to an int") {
log.Printf("corrupt gid for task user; repair /etc/passwd or /etc/group")
}
return err
} Prevention
- Run `pwck`/`grpck` during host provisioning to catch malformed entries.
- Prefer useradd/groupadd over manual edits.
- Validate users referenced in jobspecs resolve to numeric ids on every client.
When it happens
Trigger: strconv.Atoi(u.Gid) failed because the Gid string on the looked-up user is not a valid integer.
Common situations: Corrupted /etc/passwd or NSS source where the gid field is non-numeric; hand-edited entries; broken container images.
Related errors
- Unable to convert Uid to an int: %w
- users: unable to parse uid/gid from username
- Unable to find nobody user: %w
- ErrCgroupMustBeSet
- <combined HCL diagnostics from str.String()>
AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04).
Data as JSON: /api/errors/d71b033be2566cf4.
Report an issue: GitHub.