Age | Commit message (Collapse) | Author |
|
Kernel 5.15, and probably newer, present an EXEDEV error when the
vyatta-cfg code tries to boost::filesystem::copy_file on UnionFS
FUSE mounts. This completely breaks operation on newer kernels, and
is therefore a blocker to the rest of the project moving on to new
Linux LTS versions.
Boost is complex and fraught, this code behaves inconsistently in
verious operating environments, and can be a nightmare to debug.
Handle the concerns above using binary streaming in C++ to copy the
source to the destination if an exception occurs during the
existing Boost copy_file operation.
Testing:
Built ISO (cloud target), packer install, booted in OpenStack on
KVM, booted in AWS on Xen, verified configurations are committed in
both cases and that error logs are being generated to inform users
about the fall-through being utilized to write-out configurations.
Notes:
Logging may be dropped to avoid flooding storage on often-updated
systems. It is left in-place to aid developers in debugging the root
concern underpinning Boot breakage (which may impact other areas of
the code).
|
|
In release v1.0 of unionfs-fuse, the meta directory was renamed from
.unionfs to .unionfs-fuse. Consequently, the clean up of the directory
following a commit vacuously succeeds, and the meta data remains. On a
subsequent commit, this hidden directory will be copied into the tmp
directory structure. As permissions on the whiteout files belong solely
to the user, commit actions in a multiuser environment may encounter
permission errors, leading to a failure in commit. Change the meta
directory name here to accord with the change in unionfs-fuse, but
beware that the change is reverted in release v2.0 of unionfs-fuse.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
If a configuration session is exited uncleanly, either as a result of a
network disconnect / timeout or other forced quit from within config
mode, the unionfs mount is left in place. These remain until the
system is rebooted, giving an error when unmounting the config
directory.
This commit checks for old configuartion directories when a user enters
config mode, removing any found that are owned by that user but not
part of any active configuration seesion.
Bug #564 http://bugzilla.vyos.net/show_bug.cgi?id=564
|
|
|
|
When changes are made to the system by more than one user, only the
first user after a reboot is able to commit successfully, the others
fail with "Failed to generate committed config". This is caused as
a result of the underlying unionfs-fuse mount used for the system
configuration and the fact that a .unionfs directory if left in the
active configuration with permissions set such that only the original
committing user can change them.
Bug #403 http://bugzilla.vyos.net/show_bug.cgi?id=403
|
|
Use Build-iso to create /etc/fuse.conf file.
Use pipe(),fork(),execl() functions instead of system() function to
call unionfs-fuse.
|
|
|
|
|
|
Don't fail if lock file already exists
|
|
Bug 8204
Make sure we don't handle unnecessary file descriptors to child
processes. This is done by marking file descriptors as close on
exec, and closing pipe before exec.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(cherry picked from commit 1b2a0fd1ae1e6dfc18e4f75f73cd7befb47cf538)
|
|
|
|
|
|
* fix paths issue in edit mode.
|
|
* part of the config backend cleanup/optimization work.
* improves the performance of "load" (w/o commit) by ~55% and "show" by ~15%.
|
|
|
|
|
|
* this improves backend performance by ~15% in, e.g., "load" (w/o commit) and "show".
* this is only temporary and eventually caching should be done at higher level for better performance, and that will require config path abstraction.
|
|
|
|
|
|
|
|
* change shell API to only use "edit level" when needed.
* add factory functions for cstore creation to simplify code.
(cherry picked from commit 2208bfef1004295d3227492c6a3e9d7b36903db5)
|
|
* for unionfs cstore implementation, enforce file size limit on both read and write and raise limit to 256 KB.
|
|
* don't throw away "unsaved" state when doing "discard".
|
|
* fix ".*" filtering.
|
|
|
|
|
|
* remove public status modifier as high-level operations no longer need it.
* add more information to clarify changed status handling in library.
* mark changed status at appropriate places in library.
|
|
* need to move changed status handling into the library.
|
|
|
|
* original backend implementation uses unionfs-specific "changes only" dir to determine "changed" status. this breaks when it involves deactivated nodes.
* new library design uses explicit per-node "changed" marker. however, since previously "commit" only handles a root "changed" marker, the new library could not implement this scheme and used a workaround instead.
* now add API functions for "commit" to properly clean up "changed" markers.
* modify "commit" to use these API functions and remove the workaround from the new library.
|
|
* would have been a problem if template tree becomes more than 2^32 levels deep or if value strings longer than 2^32 characters are allowed.
|
|
|
|
|
|
|
|
|