Page MenuHomeFreeBSD

Verify the system can perform install/rollback
Needs ReviewPublic

Authored by aryeeteygerald_rogers.com on Jan 11 2019, 9:29 PM.
Tags
None
Referenced Files
Unknown Object (File)
Sat, Mar 23, 11:31 PM
Unknown Object (File)
Sat, Mar 16, 3:08 AM
Unknown Object (File)
Mon, Mar 4, 10:06 AM
Unknown Object (File)
Feb 22 2024, 10:15 PM
Unknown Object (File)
Dec 23 2023, 12:15 AM
Unknown Object (File)
Dec 17 2023, 4:35 PM
Unknown Object (File)
Dec 15 2023, 2:06 PM
Unknown Object (File)
Dec 10 2023, 10:01 PM

Details

Reviewers
emaste
delphij
Summary

Ensure that / and /usr have read-write permissions before install/rollback.

Ensure that chflags is supported by the file system (i.e. NFS does not support chflags).

PR: 128501

Diff Detail

Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 21972
Build 21209: arc lint + arc unit

Event Timeline

  • Ensure install flags can be removed

This is a problem for NFS users. Exit early if it isn't supported with an error message with next steps.

Also do both system checks on rollback (since the same issues can occur then as well)

aryeeteygerald_rogers.com retitled this revision from Verify that / and /usr are mounted with read-write to Verify the system can perform install/rollback.Jan 15 2019, 7:35 PM
aryeeteygerald_rogers.com edited the summary of this revision. (Show Details)

I think this is not complete. For example, /usr may be a symlink to somewhere else, and freebsd-update needs to have write access there (this applies to /boot, /var, etc. too).

usr.sbin/freebsd-update/freebsd-update.sh
2646

I really don't like this approach: what if the system have a file called "chflags_test"?

2647

I don't think this would work: chflags(1) only attempt to make modification when the old flags is different (and freebsd-update wouldn't complain if schg can't be applied at a later time).

Maybe just issue a warning if we are running over NFS (or if / and /usr is neither UFS nor ZFS) instead ?

This revision now requires changes to proceed.Jan 18 2019, 12:59 AM
usr.sbin/freebsd-update/freebsd-update.sh
2635

One idea: perhaps we could do:

for mp in / /usr /boot ...; do

if mount -p ${mp} ...

done

and examine the file system properties and issue warning or bail out?

Note that you should consider BASEDIR as well.

  • Update permissions check and chflag check

Simplify chflag test to just check if they are on NFS

Check for read-write permissions of mounted directory (using BASEDIR).

usr.sbin/freebsd-update/freebsd-update.sh
2641

Please check the return value of mount -p: it's possible that e.g. /boot is a directory, in which case checking / would covered us, but with the current code it would go to the * case and fail.

2642

Note that shell case would not fall through, therefore I think this would have covered IS_NFS case, if the file system is mounted read-write.

aryeeteygerald_rogers.com added inline comments.
usr.sbin/freebsd-update/freebsd-update.sh
2641

If $required_dir is not the mounted filesystem directory, then $mounted_dir should match the directory it's mounted on. i.e. required_dir=/boot should map to mounted_dir=/ in normal cases.

usr.sbin/freebsd-update/freebsd-update.sh
2639

Also which directories should be included here? I think you also wanted /var in this list but I assume there are others...

Also sometimes these directories (i.e. $BASEDIR/boot) don't exist, would it be reasonable to skip them?

usr.sbin/freebsd-update/freebsd-update.sh
2635

Do we have a good list of potential mount points? At least ones that would form part of the base system?

/usr/src
/usr/ports