[LEDE-DEV] [PATCH] base-files: do not backup unchanged files
Jonas Gorski
jonas.gorski at gmail.com
Sat Nov 18 04:26:09 PST 2017
On 17 November 2017 at 13:23, Jonas Gorski <jonas.gorski at gmail.com> wrote:
> On 17 November 2017 at 11:35, Matthias Schiffer
> <mschiffer at universe-factory.net> wrote:
>> On 11/17/2017 10:14 AM, Jonas Gorski wrote:
>>> On 17 November 2017 at 01:41, <luizluca at gmail.com> wrote:
>>>> From: Luiz Angelo Daros de Luca <luizluca at gmail.com>
>>>>
>>>> Only backup /aaa/bbb/ccc if /rom/aaa/bbb/ccc does not exist
>>>> or /aaa/bbb/ccc is different from /rom/aaa/bbb/ccc.
>>>>
>>>> Signed-off-by: Luiz Angelo Daros de Luca <luizluca at gmail.com>
>>>> ---
>>>> package/base-files/files/sbin/sysupgrade | 6 ++++--
>>>> 1 file changed, 4 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade
>>>> index 359f21f51c..0085dbe07e 100755
>>>> --- a/package/base-files/files/sbin/sysupgrade
>>>> +++ b/package/base-files/files/sbin/sysupgrade
>>>> @@ -101,8 +101,10 @@ add_uci_conffiles() {
>>>> local file="$1"
>>>> ( find $(sed -ne '/^[[:space:]]*$/d; /^#/d; p' \
>>>> /etc/sysupgrade.conf /lib/upgrade/keep.d/* 2>/dev/null) \
>>>> - -type f -o -type l 2>/dev/null;
>>>> - opkg list-changed-conffiles ) | sort -u > "$file"
>>>> + $(opkg list-changed-conffiles) \
>>>> + \( -type f -o -type l \) \
>>>> + \( \( -exec test -e /rom{} \; -exec cmp -s {} /rom{} \; \) -o -print \) 2>/dev/null;
>>>> + ) | sort -u > "$file"
>>>
>>> "opkg list-changed-conffiles" should have already filtered by that
>>> (but obviously didn't), so the issue should be fixed at the source
>>> instead of being worked around.
>>
>> `opkg list-changed-conffiles` does filter for changed files
>
> The issue seems to be a bit more complex than at first sight.
>
> There are at least two issues causing all /rom files treated as modified:
>
> 1) The hashing of opkg seems to be broken:
>
> # opkg -V2 list-changed-conffiles
> ...
> conffile_has_been_modified: Conffile /etc/ppp/options:
> old chk=851bf20b58373edaba24255bb5c8abf86288379f6f0d99c72c01b76cee56a7b7
> new chk=a0509db666fc831a3f9332ca6e911ba9a32e7f1ce13733e539a719f0413794b9
> # sha256sum /etc/ppp/options
> a0509db666fc831a3f9332ca6e911ba9a32e7f1ce13733e539a719f0413794b9
> /etc/ppp/options
> # grep "/etc/ppp/options" /usr/lib/opkg/status
> /etc/ppp/options
> a0509db666fc831a3f9332ca6e911ba9a32e7f1ce13733e539a719f0413794b9
>
> (old chk is the calculated checksum of the existing file, new chk is
> the one according to status)
>
> So while the one from status is properly read, the generated one
> doesn't match the existing file at all.
Okay, found the issue, the sha256sum calculation was broken for big
endian systems.
With it fixed it's a much more managable list (with a freshly booted system):
root at LEDE:/# opkg list-changed-conffiles
/etc/group
/etc/passwd
/etc/shadow
/etc/config/dhcp
/etc/dropbear/dropbear_rsa_host_key
root at LEDE:/#
Regards
Jonas
More information about the Lede-dev
mailing list