History log of /haiku/src/servers/package/Volume.cpp
Revision Date Author Comments
# a4ae49d5 01-Feb-2024 PulkoMandy <pulkomandy@pulkomandy.tk>

Package server: turn down logging a bit.

This prints two quite long lists of packages that are mixed up with
other logs, making them annoying to read. It is also not very useful now
that the package server is working quite reliably.

Change-Id: Ibf9d5fc3eadc5cef42a78aea831e0a035e248de3
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7366
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# fce7f3a7 09-Dec-2020 X512 <danger_mail@list.ru>

integrate AutoDeleter's into pointers

Change-Id: I6c3925a7aec4d0647c76c2a03aad7b08985d7166
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3490
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# f32d5c5c 03-Jul-2021 Andrew Lindesay <apl@lindesay.co.nz>

Packages: signal added|removed packages

Update the package server so that it reports the
added and removed packages when it commits a
change so that clients are able to pickup and
act on the changes without iterating over all of
the packages.

Change-Id: I6feb52c34fc51a78e2282d8d5ca6cb6775b221ca
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4141
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>


# 3376ed1a 02-Feb-2021 Alexander G. M. Smith <agmsmith@ncf.ca>

Package Kit: Proper Installation for First Boot Packages

Do the final installation operations for all the packages in the
/system/packages directory when the OS is booted for the first time.

This will run their post-install scripts, create users, groups and generate
settings files (marked with a package version attribute). Previously we just
ran all the shell scripts found in the /system/boot/post-install directory
(don't do that as much now).

Fixes bug #14382

This patch has simpler code flow in CommitTransactionHandler::_ApplyChanges
Tested on 32 and 64 bit systems. Once it's official, need to remove the
open_ssh redundant post-install script that creates users etc. from HaikuPorts.
Now we can notice bugs like package version attributes on settings files aren't
fully working. :-)

Didn't remove special case for add_catalog_entry_attributes.sh since it
still does stuff that the build system doesn't do. Might be able to add
that script as part of the Haiku.hpkg. See change 3751 for removing it,
https://review.haiku-os.org/c/haiku/+/3751

Change-Id: I3807b78042fdb70e5a79eca2e2a45816ece0236f
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2342
Reviewed-by: Alexander G. M. Smith <agmsmith@ncf.ca>
Reviewed-by: Niels Sascha Reedijk <niels.reedijk@gmail.com>
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>


# 228006ea 13-Mar-2020 Adrien Destugues <pulkomandy@pulkomandy.tk>

package_daemon: fix path of activated-package files

Until now the activated-packages file was not used for anything, because
it was not looked for in the correct place.

Change-Id: Ib38f28b52e85af6900c0e2b61a9621734428ad25
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2341
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# f6f19105 15-May-2019 Augustin Cavalier <waddlesplash@gmail.com>

package_daemon: Actually return transaction errors instead of OK always.

This "fixes" #10959, though now the varying potential causes of that
will now print actual errors earlier instead of the error message
in that ticket.


# a5fb17bc 29-Jun-2017 Sergey Avilov <throttle10@protonmail.com>

package_daemon: fix an issue with package overwrite

When overwriting a package the sequence is: remove old, add new package.
On remove we add package to ToBeDeactivated set. This is ok.
On adding new package there is a check if package exists or not. On true
return. But package still in ToBeDeactivated set.

Fixes #10038

Signed-off-by: Augustin Cavalier <waddlesplash@gmail.com>
Signed-off-by: Axel Dörfler <axeld@pinc-software.de>


# d70f22ac 28-Jun-2017 Sergey Avilov <throttle10@protonmail.com>

package_daemon: fix crash on system update

We can't delete old volume state while it's still active and can be
accessed until reboot.

Fixes #10898

Signed-off-by: Augustin Cavalier <waddlesplash@gmail.com>
Signed-off-by: Axel Dörfler <axeld@pinc-software.de>


# 6f19d31c 13-Jun-2015 Jessica Hamilton <jessica.l.hamilton@gmail.com>

package_daemon: queue post-install scripts to run after reboot

* Creates symlinks to the post-install scripts into the
administrative/queued-scripts directory.
* Upon reboot, post-install scripts in the queued-scripts
are run, and then the symlinks to the scripts removed.
* This solves the issue of post-install scripts not being
run when the package is installed/upgraded along with the
system packages, as experienced with the latest upgrade
to the bash package.


# 5c9672ed 17-Jun-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Add watching support for installation location package changes

Can be requested/stopped via BPackageRoster::{Start,Stop}Watching().
The notification message has the what code B_PACKAGE_UPDATE and contains
fields "event", "location", and "change count".


# 0de3219e 14-Jun-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Rework error and issue propagation to client

* BDaemonClient: Move inner class BCommitTransactionResult to top level
and make it public.
* BCommitTransactionResult:
- Add a whole bunch of specific error code enum values. Such an error
code is now the primary error, as opposed to before where we would
mix status_t and enum value errors. There's a systemError property
of type status_t which may provide additional information, though
(depending on the primary error type).
- Remove the errorMessage property. Due to mapping all errors to the
specific error codes this is no longer necessary. Mixing such a
message with another error description is also not very helpful when
it comes to localization (still not supported, though).
- Add several properties (paths, strings, error codes) that serve as
arguments to the primary error and are used by FullErrorMessage().
- Add issues property, a list of instances of new class
BTransactionIssue. Those describe non-critical issues (e.g. failed
update of a settings file) that occurred in the process of
committing the transaction. Those issues should be presented to the
user by the package management program.
* Exception: Adjust to transport the BCommitTransactionResult
properties.
* CommitTransactionHandler, FsTransactions, Root, Volume: Adjust to
BCommitTransactionResult/Exception changes.
* CommitTransactionHandler: Now requires a BCommitTransactionResult to
which it adds the issues it encounters. The reply BMessage is no
longer needed, though.
* Volume: Refactor common code from the three methods that use
CommitTransactionHandler into new method _CommitTransaction.


# f307a185 12-May-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Volume: Fix destruction order

We must destroy the VolumeStates before destroying the
PackageFileManager that manages their packages.

Kudos to Rene for analyzing.


# c2f3b81d 05-May-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Fix manual package [de/]activation

CommitTransactionHandler: Since the VolumeState is now always copied
(including the contained packages), we can't just use the passed in
packagesAlready{Added,Removed} sets, since they refer to the original
packages.


# 4284b6c9 02-May-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

BInstallationLocationInfo: Provide more info

* If the active state is not the latest state, also provide a package
set for it.
* If an old state has been booted, provide its name.


# 870e93ac 01-May-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Move volume change counter back to Volume


# 2dbf8167 27-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Initial old packages state support

* VolumeState: Move locking to Volume.
* Package: Pull the file related functionality into new class
PackageFile. A Package refers to a PackageFile. A PackageFile can be
referenced by multiple Packages. PackageFiles are managed by the new
PackageFileManager.
* CommitTransactionHandler: Clone the passed volume state.
* Volume now manages two VolumeStates: A state reflecting the currently
active packages and the latest state (i.e. the one reflecting the
situation of the packages directory). Usually the two are the same,
unless an old state has been booted.
* The client interface hasn't been adjusted yet. Clients only see the
latest state.


# 09014425 01-May-2014 Oliver Tappe <zooey@hirschkaefer.de>

Fix #10804: package_daemon crashing in Volume destructor.

* use delete [] for fPackagesDirectories, as it has been allocated
via array new


# 333d4efe 25-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Extend PACKAGE_FS_OPERATION_GET_PACKAGE_INFOS ioctl

Also return the package file names.


# c8dd5bbd 22-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Retrieve all package directories from packagefs


# 7a3253f0 20-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Pass volume state CommitTransactionHandler

... and remove the getter from Volume again.


# 7a35d803 20-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Move pending job accounting back to Volume


# 8c6e1bf5 20-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Sever Volume-CommitTransactionHandler friendship

Move quite a bit of transaction related methods from Volume to
CommitTransactionHandler.


# 933e7b32 20-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Move Volume::CommitTransactionHandler to top level

Also move constant definitions to Constants.h/cpp.


# 273763d0 19-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Move Volume::State to top level

... and rename it to VolumeState.


# 2d91773d 18-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Adjust packagefs ioctl interface to support old states

* PackageFSVolumeInfo: Add the directories for all relevant states.
* PackageFSPackageInfo: Include the package file's parent directory node
ref.

Package daemon and package kit still don't support old states yet.


# 32cae724 06-Feb-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Handle location info request in app thread

* ... instead of queuing it for the job thread. The advantage is that
the request will be handled immediately and clients won't have to wait
for transactions (which may even require user feedback) to finish. It
complicates Volume a bit, since there are now two threads that may
access it. The shared data have been moved to a State object which is
protected by a lock.
* For commit transaction requests check whether another package request
is already pending/in progress before queuing a job. Fail immediately,
if there is.

Fixes bug #10039.


# 080ef2e5 24-Oct-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Fix handling of multiple writable files

When attempting to extract the second writable file from the package,
we noticed that the root directory already existed and assumed
everything had been already extracted. Now we first extract all files
and process them one by one afterwards. Fixes #10131.


# a6cf8e1c 24-Oct-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Fix error handling of manually added packages

Since we don't move those packages out of the "packages" directory, we
don't want to remove their respective object from the hash tables
either. Fixes #10102.


# 0ea8902c 10-Oct-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Fix typo in error message


# 4b7e2196 03-Oct-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove /boot/common for good

* Remove support for the "common" installation location from packagefs,
package kit, package daemon, package managers.
* Rename the B_COMMON_*_DIRECTORY constants referring to writable
directories to B_SYSTEM_*_DIRECTORY.
* Remove/adjust the use of various B_COMMON_*_DIRECTORY constants.
I'm sure some occurrence still remain. They can be adjusted when the
remaining B_COMMON_*_DIRECTORY constants are removed.


# f73f5d4c 29-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Initial changes to remove /boot/common

* find_directory() and hard-coded paths use /boot/system instead of
/boot/common.
* The build system creates the writable directories in /boot/system
instead of /boot/common.
* The build system no longer installs any packages in /boot/common.


# 23733521 26-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Implement writable files handling

* Move Volume::Exception to top level and into own files.
* Add utility class FSUtils, move Volume::RelativePath there and add a
bunch of FS utility functionality.
* Add FSTransaction, a helper class to record FS operations and revert
them.
* When activating a package we now extract the writable
files/directories it declares. The handling is not quite complete:
- We don't handle merges yet. I.e. the user will have to do that
manually for now.
- We don't propagate issues/infos regarding the writable files (e.g.
that a manual intervention is required) to the user yet.


# be2254e3 18-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Handle post-installation scripts, users/groups

... specified by a package when it is going to be activated. We don't
try to remove users/groups when deactivating packages yet, nor is the
user properly identified in all error cases.


# 8b600ba4 14-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Use CommitTransactionHandler in all cases

... also when only activating/deactivating already moved packages.


# 0af009d2 15-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Fix use of destroyed objects

Fixes #9957.


# 33dc65c7 14-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Ignore only entry events of packages to remove


# 38c62dfb 10-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Implement dependency resolution support

... for package changes performed manually by the user (i.e.
adding/removing files in a packages directory). Currently only done for
the system root. Alternative roots should still work as before, so this
shouldn't affect haikuporter (not tested yet).

Needs some more work (e.g. the GUI part).


# 46d77ed7 09-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Delay handling node monitor events to group them


# 998ef890 13-Aug-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Volume: fix package removal after transaction

Volume::_ChangePackageActivation(): Refactoring oversight:
fPackagesToBeDeactivated was still used instead of the
packagesToDeactivate parameter, so the packages wouldn't be removed from
the hash tables when invoked from the CommitTransactionHandler. Fixes
#9921.


# 600620e7 06-Jul-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package_daemon: create the administrative dir when mounted


# cca3f3b7 20-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Fix Volume::_WriteActivationFile()

* Wasn't using the toActivate and toDeactivate parameters, but the
attributes. Thus failed when called from the
CommitTransactionHandler.
* Volume::_ChangePackageActivation(): Fix debug output.


# a3b1c7b9 20-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Volume::_WriteActivationFile(): Init _entry


# 2e3f5000 20-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Fix check in Volume::_PackagesEntryCreated()


# 85d2badf 19-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Add support for activation change request

* daemon: Handle new request B_MESSAGE_COMMIT_TRANSACTION. It activates
and deactivates given sets of packages. The new packages must be
placed in a directory in the administrative directory. The daemon
moves them to the packages directory and the deactivated packages to
a subdirectory it creates. It also save the old activation state
there.
* Add private BActivationTransaction, describing an activation change
transaction.
* BDaemonClient: Add CommitTransaction(), which sends a given
BActivationTransaction as a B_MESSAGE_COMMIT_TRANSACTION request to
the daemon.

Completely untested yet.


# e6216e37 14-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Implement getting a BInstallationLocationInfo

* Rename PackageDaemonDefs.h to DaemonDefs.h.
* Replace the MESSAGE_GET_PACKAGES by the new
B_MESSAGE_GET_INSTALLATION_LOCATION_INFO, which not only returns the
packages, but also other information about the installation location.
* daemon: Volume: Implement a change count which is bumped whenever
packages are activated/deactivated/added/removed. Cache the reply
for a location info request, using the change count to check whether
it is still up-to-date.
* Add private BDaemonClient for communication with the daemon.
* BRoster:
- Add GetInstallationLocationInfo() using BDaemonClient.
- Reimplement GetActivePackages(), using
GetInstallationLocationInfo().


# eb13a353 11-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Rename "packages" subdir "config" to "administrative"

... to avoid the impression that it contains something the user can
play with.


# 62f7022a 10-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package kit: get active packages list from daemon

* daemon: Implement private message protocol to retrieve the active
packages.
* BPackageRoster::GetActivePackages(): Get the active packages list
from the daemon.


# b254217a 10-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Properly qualify private package headers

... instead of adding the private package header directory to the
include paths.


# a96531fc 09-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: On changes write a file with the active packages


# 92b6d585 09-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Check volume package dependencies initially

Dumps the result (i.e. found problems and solutions) to the syslog.
Eventually the user should be asked what to do when inconsistencies are
encountered.


# 1047e84f 08-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Volume::InitPackages(): Fix error case

Don't assign fListener, when starting node monitoring fails.


# a6c7f5e3 08-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: De/-activate all changed packages together

* We first process the node monitoring events, collecting the required
package activation changes, then apply all changes together.
* Change the PackageFSActivationChangeItem/-Request structs. The former
is no longer variable in size, which makes it easier to work with.


# def92c01 08-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs/daemon: Ignore packages/ entries without .hpkg suffix


# 91a9b5f2 08-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Volume: Make sure move entry events don't get split


# 9e409614 08-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Add a Listener interface for Volume

* This way, Volume doesn't have to know Root.
* Suppress listener notifications for node monitoring events when there
are were already events pending.


# 8fb3930a 07-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Make all work with the packages asynchronous

There's now a worker thread per Root that does all the work that can
take time. Node monitoring notifications received in the main thread are
just pushed into the worker's job queue, so the application looper
remains responsive.


# 3d53bd47 06-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Add package monitoring and de-/activation

* packagefs: Disable (comment out) node monitoring of the packages
directory.
* package daemon:
- When a packagefs volume is added load the respective packages
directory and get from the volume which of the packages are
activated.
- Add node monitoring for the packages directory and
activate/deactivate packages as packages are added/removed.


# 26296b0a 05-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Add the humble beginnings of the package daemon

It doesn't really do anything yet save for tracking what packagefs
volumes are mounted and unmounted.


# 6f19d31cd4d8fda1e85d5a2ab8717263c9b84f34 13-Jun-2015 Jessica Hamilton <jessica.l.hamilton@gmail.com>

package_daemon: queue post-install scripts to run after reboot

* Creates symlinks to the post-install scripts into the
administrative/queued-scripts directory.
* Upon reboot, post-install scripts in the queued-scripts
are run, and then the symlinks to the scripts removed.
* This solves the issue of post-install scripts not being
run when the package is installed/upgraded along with the
system packages, as experienced with the latest upgrade
to the bash package.


# 5c9672edebef5990fe9fc81fa917287448ac1ac4 17-Jun-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Add watching support for installation location package changes

Can be requested/stopped via BPackageRoster::{Start,Stop}Watching().
The notification message has the what code B_PACKAGE_UPDATE and contains
fields "event", "location", and "change count".


# 0de3219e339506a0c94b584a0df0287414437033 14-Jun-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Rework error and issue propagation to client

* BDaemonClient: Move inner class BCommitTransactionResult to top level
and make it public.
* BCommitTransactionResult:
- Add a whole bunch of specific error code enum values. Such an error
code is now the primary error, as opposed to before where we would
mix status_t and enum value errors. There's a systemError property
of type status_t which may provide additional information, though
(depending on the primary error type).
- Remove the errorMessage property. Due to mapping all errors to the
specific error codes this is no longer necessary. Mixing such a
message with another error description is also not very helpful when
it comes to localization (still not supported, though).
- Add several properties (paths, strings, error codes) that serve as
arguments to the primary error and are used by FullErrorMessage().
- Add issues property, a list of instances of new class
BTransactionIssue. Those describe non-critical issues (e.g. failed
update of a settings file) that occurred in the process of
committing the transaction. Those issues should be presented to the
user by the package management program.
* Exception: Adjust to transport the BCommitTransactionResult
properties.
* CommitTransactionHandler, FsTransactions, Root, Volume: Adjust to
BCommitTransactionResult/Exception changes.
* CommitTransactionHandler: Now requires a BCommitTransactionResult to
which it adds the issues it encounters. The reply BMessage is no
longer needed, though.
* Volume: Refactor common code from the three methods that use
CommitTransactionHandler into new method _CommitTransaction.


# f307a18588cb273d9180d1dc50c6874bee0a1d2c 12-May-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Volume: Fix destruction order

We must destroy the VolumeStates before destroying the
PackageFileManager that manages their packages.

Kudos to Rene for analyzing.


# c2f3b81d45f9f1a2a891813f9499818b1d72515e 05-May-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Fix manual package [de/]activation

CommitTransactionHandler: Since the VolumeState is now always copied
(including the contained packages), we can't just use the passed in
packagesAlready{Added,Removed} sets, since they refer to the original
packages.


# 4284b6c93ad90effc93057772d6e4595043cbf3d 02-May-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

BInstallationLocationInfo: Provide more info

* If the active state is not the latest state, also provide a package
set for it.
* If an old state has been booted, provide its name.


# 870e93acf88329489473abf19e0471454ff9dd2e 01-May-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Move volume change counter back to Volume


# 2dbf8167fec7282ac384273014903a1bbdfa49e6 27-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Initial old packages state support

* VolumeState: Move locking to Volume.
* Package: Pull the file related functionality into new class
PackageFile. A Package refers to a PackageFile. A PackageFile can be
referenced by multiple Packages. PackageFiles are managed by the new
PackageFileManager.
* CommitTransactionHandler: Clone the passed volume state.
* Volume now manages two VolumeStates: A state reflecting the currently
active packages and the latest state (i.e. the one reflecting the
situation of the packages directory). Usually the two are the same,
unless an old state has been booted.
* The client interface hasn't been adjusted yet. Clients only see the
latest state.


# 090144251db64ff3187b7849a9252fc58beefd41 01-May-2014 Oliver Tappe <zooey@hirschkaefer.de>

Fix #10804: package_daemon crashing in Volume destructor.

* use delete [] for fPackagesDirectories, as it has been allocated
via array new


# 333d4efe4f2356d9898e1749f49eef5c3931af11 25-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs: Extend PACKAGE_FS_OPERATION_GET_PACKAGE_INFOS ioctl

Also return the package file names.


# c8dd5bbd9427cd219a880b00c6f077888a3df6ce 22-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Retrieve all package directories from packagefs


# 7a3253f07c1268b15f6a16bf15cb0a8607ade304 20-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Pass volume state CommitTransactionHandler

... and remove the getter from Volume again.


# 7a35d803d00c1e363c41dca1802be1dd24a404ea 20-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Move pending job accounting back to Volume


# 8c6e1bf54868b11ec9df027700858e36cb421ac0 20-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Sever Volume-CommitTransactionHandler friendship

Move quite a bit of transaction related methods from Volume to
CommitTransactionHandler.


# 933e7b3280f1d1ed01b4080288fbe767a2d18379 20-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Move Volume::CommitTransactionHandler to top level

Also move constant definitions to Constants.h/cpp.


# 273763d052bcb49a153fd8b434006cce9a0fbe63 19-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Move Volume::State to top level

... and rename it to VolumeState.


# 2d91773d2e07651749bacd0b5b144366df9fdc6f 18-Apr-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

Adjust packagefs ioctl interface to support old states

* PackageFSVolumeInfo: Add the directories for all relevant states.
* PackageFSPackageInfo: Include the package file's parent directory node
ref.

Package daemon and package kit still don't support old states yet.


# 32cae72412f4e1503d124ee00a09832022a4840f 06-Feb-2014 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Handle location info request in app thread

* ... instead of queuing it for the job thread. The advantage is that
the request will be handled immediately and clients won't have to wait
for transactions (which may even require user feedback) to finish. It
complicates Volume a bit, since there are now two threads that may
access it. The shared data have been moved to a State object which is
protected by a lock.
* For commit transaction requests check whether another package request
is already pending/in progress before queuing a job. Fail immediately,
if there is.

Fixes bug #10039.


# 080ef2e53ddbb7ead440b0ceb3e348a7303df9e4 24-Oct-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Fix handling of multiple writable files

When attempting to extract the second writable file from the package,
we noticed that the root directory already existed and assumed
everything had been already extracted. Now we first extract all files
and process them one by one afterwards. Fixes #10131.


# a6cf8e1c4ec4a567f828911a80a209d1e2198ff3 24-Oct-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Fix error handling of manually added packages

Since we don't move those packages out of the "packages" directory, we
don't want to remove their respective object from the hash tables
either. Fixes #10102.


# 0ea8902c52a49e303ba4cd208c963802791be752 10-Oct-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Fix typo in error message


# 4b7e219688450694efc9d1890f83f816758c16d3 03-Oct-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Remove /boot/common for good

* Remove support for the "common" installation location from packagefs,
package kit, package daemon, package managers.
* Rename the B_COMMON_*_DIRECTORY constants referring to writable
directories to B_SYSTEM_*_DIRECTORY.
* Remove/adjust the use of various B_COMMON_*_DIRECTORY constants.
I'm sure some occurrence still remain. They can be adjusted when the
remaining B_COMMON_*_DIRECTORY constants are removed.


# f73f5d4c42a01ece688cbb57b5d332cc0f68b2c6 29-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Initial changes to remove /boot/common

* find_directory() and hard-coded paths use /boot/system instead of
/boot/common.
* The build system creates the writable directories in /boot/system
instead of /boot/common.
* The build system no longer installs any packages in /boot/common.


# 23733521a7b2d6c16027654c606c6069ef026357 26-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Implement writable files handling

* Move Volume::Exception to top level and into own files.
* Add utility class FSUtils, move Volume::RelativePath there and add a
bunch of FS utility functionality.
* Add FSTransaction, a helper class to record FS operations and revert
them.
* When activating a package we now extract the writable
files/directories it declares. The handling is not quite complete:
- We don't handle merges yet. I.e. the user will have to do that
manually for now.
- We don't propagate issues/infos regarding the writable files (e.g.
that a manual intervention is required) to the user yet.


# be2254e30db907dc1a8b26dd3c3b9dde014bb385 18-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Handle post-installation scripts, users/groups

... specified by a package when it is going to be activated. We don't
try to remove users/groups when deactivating packages yet, nor is the
user properly identified in all error cases.


# 8b600ba48deafbe63747e28b705551b00adb00a7 14-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Use CommitTransactionHandler in all cases

... also when only activating/deactivating already moved packages.


# 0af009d250c4f07925a26d60c735e94746e8de62 15-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Fix use of destroyed objects

Fixes #9957.


# 33dc65c7ff8c5878d83b545629c4db4dd67546bf 14-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Ignore only entry events of packages to remove


# 38c62dfb8b5acffe9373b19e087d037d38a281a5 10-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Implement dependency resolution support

... for package changes performed manually by the user (i.e.
adding/removing files in a packages directory). Currently only done for
the system root. Alternative roots should still work as before, so this
shouldn't affect haikuporter (not tested yet).

Needs some more work (e.g. the GUI part).


# 46d77ed7da9f732996740c90ff0ce2e93869f650 09-Sep-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Delay handling node monitor events to group them


# 998ef890654e102c89634fbc9e40eb605878542f 13-Aug-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Volume: fix package removal after transaction

Volume::_ChangePackageActivation(): Refactoring oversight:
fPackagesToBeDeactivated was still used instead of the
packagesToDeactivate parameter, so the packages wouldn't be removed from
the hash tables when invoked from the CommitTransactionHandler. Fixes
#9921.


# 600620e7907793cd45550fac400f825690737ab0 06-Jul-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package_daemon: create the administrative dir when mounted


# cca3f3b7431cf5e22fa612b171d04933197af3a9 20-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Fix Volume::_WriteActivationFile()

* Wasn't using the toActivate and toDeactivate parameters, but the
attributes. Thus failed when called from the
CommitTransactionHandler.
* Volume::_ChangePackageActivation(): Fix debug output.


# a3b1c7b96e47e5129c83a5dae6e3b17d1ad06b19 20-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Volume::_WriteActivationFile(): Init _entry


# 2e3f5000e34297071e630ab70303026715021e31 20-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Fix check in Volume::_PackagesEntryCreated()


# 85d2badf007cb152215485db7916578ed6700504 19-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Add support for activation change request

* daemon: Handle new request B_MESSAGE_COMMIT_TRANSACTION. It activates
and deactivates given sets of packages. The new packages must be
placed in a directory in the administrative directory. The daemon
moves them to the packages directory and the deactivated packages to
a subdirectory it creates. It also save the old activation state
there.
* Add private BActivationTransaction, describing an activation change
transaction.
* BDaemonClient: Add CommitTransaction(), which sends a given
BActivationTransaction as a B_MESSAGE_COMMIT_TRANSACTION request to
the daemon.

Completely untested yet.


# e6216e372af01cc90339fe7afb70c113c99974bd 14-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Implement getting a BInstallationLocationInfo

* Rename PackageDaemonDefs.h to DaemonDefs.h.
* Replace the MESSAGE_GET_PACKAGES by the new
B_MESSAGE_GET_INSTALLATION_LOCATION_INFO, which not only returns the
packages, but also other information about the installation location.
* daemon: Volume: Implement a change count which is bumped whenever
packages are activated/deactivated/added/removed. Cache the reply
for a location info request, using the change count to check whether
it is still up-to-date.
* Add private BDaemonClient for communication with the daemon.
* BRoster:
- Add GetInstallationLocationInfo() using BDaemonClient.
- Reimplement GetActivePackages(), using
GetInstallationLocationInfo().


# eb13a353e39799c58dd2a8704e8553ba18a7b1d3 11-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Rename "packages" subdir "config" to "administrative"

... to avoid the impression that it contains something the user can
play with.


# 62f7022a8294bbd5407826c0bb8b071975ed90d5 10-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package kit: get active packages list from daemon

* daemon: Implement private message protocol to retrieve the active
packages.
* BPackageRoster::GetActivePackages(): Get the active packages list
from the daemon.


# b254217a09a45fe317ae8b8e9ad9a8ddfc3df4b0 10-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Properly qualify private package headers

... instead of adding the private package header directory to the
include paths.


# a96531fc511e210c34cb054310b61b560a82a06c 09-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: On changes write a file with the active packages


# 92b6d58598fb09b38150027f6cbfa38fd5fb53e6 09-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Check volume package dependencies initially

Dumps the result (i.e. found problems and solutions) to the syslog.
Eventually the user should be asked what to do when inconsistencies are
encountered.


# 1047e84f39654c67e966afd0b41d3488d8d9b09d 08-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Volume::InitPackages(): Fix error case

Don't assign fListener, when starting node monitoring fails.


# a6c7f5e33c2a4e8596b2901d2fbecdd579d47b36 08-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: De/-activate all changed packages together

* We first process the node monitoring events, collecting the required
package activation changes, then apply all changes together.
* Change the PackageFSActivationChangeItem/-Request structs. The former
is no longer variable in size, which makes it easier to work with.


# def92c01eec2711ecf3bc42c64d92be7c90c650f 08-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

packagefs/daemon: Ignore packages/ entries without .hpkg suffix


# 91a9b5f2765833cec3bfeda5f4962f45931dbe9d 08-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Volume: Make sure move entry events don't get split


# 9e4096146fa5a20df2fc06301683853029851163 08-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Add a Listener interface for Volume

* This way, Volume doesn't have to know Root.
* Suppress listener notifications for node monitoring events when there
are were already events pending.


# 8fb3930a4290eb1156bbe53fba7947b0cd2be237 07-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Make all work with the packages asynchronous

There's now a worker thread per Root that does all the work that can
take time. Node monitoring notifications received in the main thread are
just pushed into the worker's job queue, so the application looper
remains responsive.


# 3d53bd473b49aa91a9611dfe6500492500e1e8c6 06-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

package daemon: Add package monitoring and de-/activation

* packagefs: Disable (comment out) node monitoring of the packages
directory.
* package daemon:
- When a packagefs volume is added load the respective packages
directory and get from the volume which of the packages are
activated.
- Add node monitoring for the packages directory and
activate/deactivate packages as packages are added/removed.


# 26296b0aa4ddcc1b8baf1e6c380d0f8634730068 05-Apr-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Add the humble beginnings of the package daemon

It doesn't really do anything yet save for tracking what packagefs
volumes are mounted and unmounted.