From nobody Thu Sep 28 13:41:17 2023 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 4RxF4Z0Dbhz4tnQS; Thu, 28 Sep 2023 13:41:18 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4RxF4Y6tlnz3Phw; Thu, 28 Sep 2023 13:41:17 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1695908478; 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=USsSYy9VG+VQQWDFR812VjeVLm2ITFtDg2nUZltzE+Q=; b=VE6vn3N/mwhFUPd+d56tfBZlF1LtPyIYOcLnPYU7Vp40bKpIUknejp6+xEWow3wN/4X3HM eKLfCBw4p2trMclFCM6r+zOL4sizWU0Ow0xlGd+9yPwRgFqI/oZyOxLboPC1SgIZaNK/5k XCMri7mMfWHv1C6302JqNX3mGR9Ajtum1XCXTdtYMYzvE+Qdv7TwLh4LEdN5GDdis3Ejvg xYHXINOE/Vt3X1qJv4a+tBEi/ob/ZDzNbm3oS7o2eKwC8AMPYd+oQ6WTcT2zYZVqYzN8nD iSUyEvnhCv+/qipT+7OZWPUYZch9jV9aiagPO/qlTaGjUz+cfSj8dY59szgdQw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1695908478; a=rsa-sha256; cv=none; b=w0cxXMVk84ZYM9YPV1Fd7KB/NqAIL46WzG2WLwBnUU8rmcdLONSrB1RBr+fNCraRR6zVMI UYtS+xBDyP29nY3mGyKuUvcfeFwI0myGDAF+brJIdju0pZi4gG4Lu9hAoRkQtvajFAZ2k6 SL0NJR0in1HgyAdeJ1iRmnHd3Y52DeWYC2iKiYTcmyfmlCEHrdh3ZQ6TySIk/e7mqhiNDG u4R3yyP4/1/2lLaR0Npfmyh1JF64pGEKAXEcvyOZTXvhhC3Qf7tmO4AIRDgIG4lvh2+pyE IkBp5lDD+WHYEqsay7odM16EIz7Sh66bUM5B+1NsMObUs20yWW7xr7zx2n/KGQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1695908478; 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=USsSYy9VG+VQQWDFR812VjeVLm2ITFtDg2nUZltzE+Q=; b=xqDNMYeRQAWWhy+M6JCiu2YD44oa7sIOdvO4N1aTBOT9hCbTvWkuk4FReNabj6mrZWPdHC q3ueduqdSifzynntyEq+2cTBUUNcb7axBp/pffLpudMbSuhMIxTGPE+3svl20RgXACgbzb OwcrI5JnaeKBsgLgSRI+EOokEVhQl2PG/3FpBNSc8C9u3ZmT37m5kPsZNapYnv+skOlxzi SwDVk1CY1GbMqEc7fJINYEuiYPkIZNimDTJFeJYkTBJWfglO6SmKQOBxdzfrAqJOdzDgfc lvdITDnQiuQ5x2kfE2aABo9c3KkISk3ZjTWgDbz4LpuTlxiDVoaeaypyDJ3VQw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4RxF4Y5yZwz8ZB; Thu, 28 Sep 2023 13:41:17 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 38SDfHuI000778; Thu, 28 Sep 2023 13:41:17 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 38SDfHaL000775; Thu, 28 Sep 2023 13:41:17 GMT (envelope-from git) Date: Thu, 28 Sep 2023 13:41:17 GMT Message-Id: <202309281341.38SDfHaL000775@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Ed Maste Subject: git: 5f446a12dac2 - stable/12 - freebsd-update: Fix merging already-updated files 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: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: emaste X-Git-Repository: src X-Git-Refname: refs/heads/stable/12 X-Git-Reftype: branch X-Git-Commit: 5f446a12dac2a8be8a1b4fc53a383d18896df611 Auto-Submitted: auto-generated The branch stable/12 has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=5f446a12dac2a8be8a1b4fc53a383d18896df611 commit 5f446a12dac2a8be8a1b4fc53a383d18896df611 Author: Colin Percival AuthorDate: 2023-05-05 03:00:58 +0000 Commit: Ed Maste CommitDate: 2023-09-28 13:40:38 +0000 freebsd-update: Fix merging already-updated files When performing an "upgrade" (moving between FreeBSD releases, as opposed to "update" which merely applies security/errata updates to the installed release) FreeBSD Update: 1. Generates a list of "files needing to be merged", namely those files which don't match the version installed in the "old" release and have paths matching the MergeChanges configuration directive (by default, /boot/device.hints and everything under /etc/). and later on, 2. Compares the currently-installed files to the versions in the "new" release, removing index entries for files which "don't need to be updated because they're not changing". Unfortunately if a file falls into both of these categories -- that is to say, if a file in /etc/ is the same as the version in the new release and not the same as the version in the old release -- the resulting "merge" step saw that the file was no longer listed as being part of the new release, resulting in the file being deleted. For the first 18 years of FreeBSD Update's existence, this never happened, since $FreeBSD$ tags resulted in "new release" files always being different from any files systems would already have installed. This commit fixes this behaviour by only placing a file into the "files needing to be merged" list if it does not match the version in the old release *or* the version in the new release. Reported by: des Reviewed by: delphij (earlier version), des, emaste MFC after: 7 days X-EN-Candidate: yes Differential Revision: https://reviews.freebsd.org/D39973 (cherry picked from commit c55b7e522629cb78adeb54bd9964304481d55eab) --- usr.sbin/freebsd-update/freebsd-update.sh | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/usr.sbin/freebsd-update/freebsd-update.sh b/usr.sbin/freebsd-update/freebsd-update.sh index b0e7ea1ce538..0641aa41921c 100644 --- a/usr.sbin/freebsd-update/freebsd-update.sh +++ b/usr.sbin/freebsd-update/freebsd-update.sh @@ -1677,11 +1677,12 @@ fetch_inspect_system () { echo "done." } -# For any paths matching ${MERGECHANGES}, compare $1 and $2 and find any -# files which differ; generate $3 containing these paths and the old hashes. +# For any paths matching ${MERGECHANGES}, compare $2 against $1 and $3 and +# find any files with values unique to $2; generate $4 containing these paths +# and their corresponding hashes from $1. fetch_filter_mergechanges () { # Pull out the paths and hashes of the files matching ${MERGECHANGES}. - for F in $1 $2; do + for F in $1 $2 $3; do for X in ${MERGECHANGES}; do grep -E "^${X}" ${F} done | @@ -1689,9 +1690,10 @@ fetch_filter_mergechanges () { sort > ${F}-values done - # Any line in $2-values which doesn't appear in $1-values and is a - # file means that we should list the path in $3. - comm -13 $1-values $2-values | + # Any line in $2-values which doesn't appear in $1-values or $3-values + # and is a file means that we should list the path in $3. + sort $1-values $3-values | + comm -13 - $2-values | fgrep '|f|' | cut -f 1 -d '|' > $2-paths @@ -1703,10 +1705,10 @@ fetch_filter_mergechanges () { while read X; do look "${X}|" $1-values | head -1 - done < $2-paths > $3 + done < $2-paths > $4 # Clean up - rm $1-values $2-values $2-paths + rm $1-values $2-values $3-values $2-paths } # For any paths matching ${UPDATEIFUNMODIFIED}, remove lines from $[123] @@ -2711,7 +2713,7 @@ upgrade_run () { # Based on ${MERGECHANGES}, generate a file tomerge-old with the # paths and hashes of old versions of files to merge. - fetch_filter_mergechanges INDEX-OLD INDEX-PRESENT tomerge-old + fetch_filter_mergechanges INDEX-OLD INDEX-PRESENT INDEX-NEW tomerge-old # Based on ${UPDATEIFUNMODIFIED}, remove lines from INDEX-* which # correspond to lines in INDEX-PRESENT with hashes not appearing