mirror_zfs/man/man8/zgenhostid.8
Érico Rolim 9c4b6dbb31 zgenhostid: accept hostid arguments equal to zero.
A common usage pattern for zgenhostid, including in the ZFS dracut
module, is running it as:

  zgenhostid $(hostid)

However, zgenhostid only accepted hostid arguments greater than 0, which
meant that, when the output of hostid(1) was "00000000", zgenhostid
would error out, even though 0 is a possible return value for the
gethostid(3) function used by hostid(1):

- On current musl libc, gethostid(3) is a stub that always returns 0.
- On glibc, gethostid(3) will return 0 if /etc/hostid exists but is
  smaller than 4 bytes.

In these cases, it makes more sense for zgenhostid to treat a value of 0
as other parts of the zfs codebase do, meaning that a hostid value
couldn't be determined; therefore, it should attempt to generate a
random value to write into /etc/hostid.

The manpage and usage output have been updated to reflect this.

Whitespace has also been fixed in the usage output.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Georgy Yakovlev <gyakovlev@gentoo.org>
Reviewed-by: Andrew J. Hesford <ajh@sideband.org>
Signed-off-by: Érico Rolim <erico.erc@gmail.com>
Closes #11174
Closes #11189
2020-11-14 17:20:54 -08:00

104 lines
2.5 KiB
Groff

.\"
.\" CDDL HEADER START
.\"
.\" The contents of this file are subject to the terms of the
.\" Common Development and Distribution License (the "License").
.\" You may not use this file except in compliance with the License.
.\"
.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
.\" or http://www.opensolaris.org/os/licensing.
.\" See the License for the specific language governing permissions
.\" and limitations under the License.
.\"
.\" When distributing Covered Code, include this CDDL HEADER in each
.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
.\" If applicable, add the following below this CDDL HEADER, with the
.\" fields enclosed by brackets "[]" replaced with your own identifying
.\" information: Portions Copyright [yyyy] [name of copyright owner]
.\"
.\" CDDL HEADER END
.\"
.\"
.\" Copyright (c) 2017 by Lawrence Livermore National Security, LLC.
.\"
.Dd September 13, 2020
.Dt ZGENHOSTID 8 SMM
.Os
.Sh NAME
.Nm zgenhostid
.Nd generate and store a hostid in
.Em /etc/hostid
.Sh SYNOPSIS
.Nm
.Op Fl f
.Op Fl o Ar filename
.Op Ar hostid
.Sh DESCRIPTION
Creates
.Pa /etc/hostid
file and stores hostid in it.
If the user provides
.Op Ar hostid
on the command line, validates and stores that value.
Otherwise, randomly generates a value to store.
.Bl -tag -width "hostid"
.It Fl h
Display a summary of the command-line options.
.It Fl f
Force file overwrite.
.It Fl o Ar filename
Write to
.Pa filename
instead of default
.Pa /etc/hostd
.It Ar hostid
Specifies the value to be placed in
.Pa /etc/hostid .
It should be a number with a value between 1 and 2^32-1.
If it is 0, zgenhostid will generate a random hostid.
This value
.Sy must
be unique among your systems.
It
.Sy must
be expressed in hexadecimal and be exactly
.Em 8
digits long, optionally prefixed by
.Em 0x .
.El
.Sh FILES
.Pa /etc/hostid
.Sh EXAMPLES
.Bl -tag -width Bd
.It Generate a random hostid and store it
.Bd -literal
# zgenhostid
.Ed
.It Record the libc-generated hostid in Pa /etc/hostid
.Bd -literal
# zgenhostid "$(hostid)"
.Ed
.It Record a custom hostid (0xdeadbeef) in Pa /etc/hostid
.Bd -literal
# zgenhostid deadbeef
.Ed
.It Record a custom hostid (0x01234567) in Pa /tmp/hostid
and ovewrite the file if it exists
.Bd -literal
# zgenhostid -f -o /tmp/hostid 0x01234567
.Ed
.El
.Sh SEE ALSO
.Xr genhostid 1 ,
.Xr hostid 1 ,
.Xr sethostid 3 ,
.Xr spl-module-parameters 5
.Sh HISTORY
.Nm
emulates the
.Xr genhostid 1
utility and is provided for use on systems which
do not include the utility or do not provide
.Xr sethostid 3
call.