From nobody Sat Dec 13 22:02:38 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4dTL0b0r7hz6K99S for ; Sat, 13 Dec 2025 22:02:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dTL0Z5HLLz4317 for ; Sat, 13 Dec 2025 22:02:38 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1765663358; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=IDAgyuJoI8wtPiPzLPYtDY7YIU5RCKJWjCIIzqQVhcQ=; b=dB6Vwol5LybeQQT5XxEl0guR87iAmZeP2MxXticWQTrY1JeDjCdI4X3G3D1SufHvpcSmea 8i2kp/189gR/0zQDizcj2RtSmLzkKMu5vDgLqE/lBGzclzSonrpKafoySYqesQBHDGemag KKw4D6ZaWfQTZzTpjgw+ieWIT5fp8Un/aoCfpNhok8I7JwCTn/Q26ZVhV88bkOmjvR4oaD zpl2YLpwC2XP8+DcnhV+Hv1ZdRhUrbxcd2NYr8TF34cLSq29SVp1KtQ5GsBomCZZlREV/O DuvcSd42cj2YylGnE8bDLTEmb8WZrCqCMlz8xZzM0/Xii2XBYHnMuXje8fj/IA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1765663358; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=IDAgyuJoI8wtPiPzLPYtDY7YIU5RCKJWjCIIzqQVhcQ=; b=jyWKya0wLYKh/t9iDlx5vhPpoz/vfHMeBcjhQSCMud6qQZaHh1cqx0SgIsHrZobMOz1yjk nhXprUz9I1/khw18QQ7rweJwpRYTSZ7Md9kfmM/3pBm1DLgi/tNsoTs2PHBu+9Tf/L3aPA mlJrqGN26H1llyYUTpOhA8RJ+TsUQaYU2ocFb8aW9Chujwr65ab6MBpTy4FYv6u0sFt80Z TQr1JUOE1IMor1WP3EWoWjRMRkNDf8bg0I8Noav+B/8UTEHrNwcGgSSnS/32U2q/QZh3wI pVSDc5AkyPmBSAauXNqK8JZRpoe5j7q8vQjp8sFZgpizJMRfT95z+g62LyGmOA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1765663358; a=rsa-sha256; cv=none; b=J5oPfZzUnJJ23O59v5qFDzd9jxMgdnRLX1eph7cphTSn2urvYEV0MO0hDr/e907dz0Er6o gGZOqYDkhmquC2tABxpD/RGQVCayIEGf547q6L5SdeQbq1rxUmZbmFa2N23x7COGcB9AKA A1oFnj4m9u7NdF4JwrZtvKDNmYmvhMq0xa3p6t8YSx2b6vs4YXbazabFfabVTplNBa841h b+4SsvtfA9gTBVQunvQXVTBnffM2CRQRJ70lYqkD4CwzQ81q94m6SBouS7cmsDKc5NurBv WySiPgYVLRTqEBE1R6+8XtLUjw/8TBvkkou47/QXg+EmGbvqs6Khp3PwkSa4RA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dTL0Z4fH7z1KZV for ; Sat, 13 Dec 2025 22:02:38 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 384f0 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 13 Dec 2025 22:02:38 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 68ed90d5b089 - stable/15 - nextboot: Reimplement missing -a option List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 68ed90d5b08995ce28dd44c57b25723f393096c6 Auto-Submitted: auto-generated Date: Sat, 13 Dec 2025 22:02:38 +0000 Message-Id: <693de27e.384f0.94c9f0d@gitrepo.freebsd.org> The branch stable/15 has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=68ed90d5b08995ce28dd44c57b25723f393096c6 commit 68ed90d5b08995ce28dd44c57b25723f393096c6 Author: Dag-Erling Smørgrav AuthorDate: 2025-12-08 10:30:17 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2025-12-13 22:01:14 +0000 nextboot: Reimplement missing -a option * Reimplement the -a option which was available in the original shell script and is still documented. * Print the correct usage string when invoked as nextboot. * Add the -D option to the manual page synopsis. MFC after: 1 week Fixes: fd6d47375a78 ("rescue,nextboot: Install nextboot as a link to reboot, rm nextboot.sh") Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D54120 (cherry picked from commit de670c611b17939712a81dc56f73a3ff84f6c178) --- sbin/reboot/nextboot.8 | 4 ++-- sbin/reboot/reboot.c | 44 ++++++++++++++++++++++++++++++++++---------- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/sbin/reboot/nextboot.8 b/sbin/reboot/nextboot.8 index 188063dbfd3b..52f77bb75ebd 100644 --- a/sbin/reboot/nextboot.8 +++ b/sbin/reboot/nextboot.8 @@ -22,7 +22,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd March 29, 2022 +.Dd December 8, 2025 .Dt NEXTBOOT 8 .Os .Sh NAME @@ -30,7 +30,7 @@ .Nd "specify an alternate kernel and boot flags for the next reboot" .Sh SYNOPSIS .Nm -.Op Fl af +.Op Fl aDf .Op Fl e Ar variable=value .Op Fl k Ar kernel .Op Fl o Ar options diff --git a/sbin/reboot/reboot.c b/sbin/reboot/reboot.c index f6065e80fb66..59ae83ef6f6a 100644 --- a/sbin/reboot/reboot.c +++ b/sbin/reboot/reboot.c @@ -112,12 +112,13 @@ zfsbootcfg(const char *pool, bool force) } static void -write_nextboot(const char *fn, const char *env, bool force) +write_nextboot(const char *fn, const char *env, bool append, bool force) { char tmp[PATH_MAX]; FILE *fp; struct statfs sfs; - int tmpfd; + ssize_t ret; + int fd, tmpfd; bool supported = false; bool zfs = false; @@ -145,6 +146,7 @@ write_nextboot(const char *fn, const char *env, bool force) E("Path too long %s", fn); if (strlcat(tmp, ".XXXXXX", sizeof(tmp)) >= sizeof(tmp)) E("Path too long %s", fn); + tmpfd = mkstemp(tmp); if (tmpfd == -1) E("mkstemp %s", tmp); @@ -153,6 +155,21 @@ write_nextboot(const char *fn, const char *env, bool force) if (fp == NULL) E("fdopen %s", tmp); + if (append) { + if ((fd = open(fn, O_RDONLY)) < 0) { + if (errno != ENOENT) + E("open %s", fn); + } else { + do { + ret = copy_file_range(fd, NULL, tmpfd, NULL, + SSIZE_MAX, 0); + if (ret < 0) + E("copy %s to %s", fn, tmp); + } while (ret > 0); + close(fd); + } + } + if (fprintf(fp, "%s%s", supported ? "nextboot_enable=\"YES\"\n" : "", env != NULL ? env : "") < 0) { @@ -216,7 +233,7 @@ add_env(char **env, const char *key, const char *value) * Different options are valid for different programs. */ #define GETOPT_REBOOT "cDde:fk:lNno:pqr" -#define GETOPT_NEXTBOOT "De:fk:o:" +#define GETOPT_NEXTBOOT "aDe:fk:o:" int main(int argc, char *argv[]) @@ -225,7 +242,7 @@ main(int argc, char *argv[]) const struct passwd *pw; struct stat st; int ch, howto = 0, i, sverrno; - bool Dflag, fflag, lflag, Nflag, nflag, qflag; + bool aflag, Dflag, fflag, lflag, Nflag, nflag, qflag; uint64_t pageins; const char *user, *kernel = NULL, *getopts = GETOPT_REBOOT; char *env = NULL, *v; @@ -240,9 +257,12 @@ main(int argc, char *argv[]) /* reboot */ howto = 0; } - Dflag = fflag = lflag = Nflag = nflag = qflag = false; + aflag = Dflag = fflag = lflag = Nflag = nflag = qflag = false; while ((ch = getopt(argc, argv, getopts)) != -1) { switch(ch) { + case 'a': + aflag = true; + break; case 'c': howto |= RB_POWERCYCLE; break; @@ -363,7 +383,7 @@ main(int argc, char *argv[]) } if (env != NULL) - write_nextboot(PATH_NEXTBOOT, env, fflag); + write_nextboot(PATH_NEXTBOOT, env, aflag, fflag); if (donextboot) exit (0); @@ -483,10 +503,14 @@ restart: static void usage(void) { - - (void)fprintf(stderr, dohalt ? - "usage: halt [-clNnpq] [-k kernel]\n" : - "usage: reboot [-cdlNnpqr] [-k kernel]\n"); + if (donextboot) { + fprintf(stderr, "usage: nextboot [-aDf] " + "[-e name=value] [-k kernel] [-o options]\n"); + } else { + fprintf(stderr, dohalt ? + "usage: halt [-clNnpq] [-k kernel]\n" : + "usage: reboot [-cdlNnpqr] [-k kernel]\n"); + } exit(1); }