Commit Graph

41107 Commits

Author SHA1 Message Date
Ingo Weinhold
6c6460e1f6 BPackageInfo: Add GetConfigString() and ToString() 2013-04-11 00:37:25 +02:00
Ingo Weinhold
1a34656b57 BPackageVersion: Make version string constructor explicit 2013-04-11 00:36:10 +02:00
Ingo Weinhold
5776551d3d pkgman: Move some classes into own file for reuse
Namely RepositoryBuilder and PackageInfoErrorListener.
2013-04-10 14:41:30 +02:00
Ingo Weinhold
483d49968d LibsolvSolver: Make repeated use of object possible
* _Solve(): Clean up the old solver before creating a new one.
* _AddRepositories(): Don't do anything, if the repositories haven't
  changed.
2013-04-10 13:20:38 +02:00
Ingo Weinhold
50888ebdc0 BSolverRepository: Add a change count
... so we can easily check whether the repository has changed since the
last time we used it.
2013-04-10 12:58:12 +02:00
Ingo Weinhold
40cbf171ef packagefs: don't dup() the packages directory FD
Volume::_AddInitialPackagesFromDirectory(): Use openat() instead of
dup() to get a FD for the packages directory. Currently our fdopendir()
implementation doesn't use it directly anyway, but in theory it could
and would then change the state of the original FD.
2013-04-09 23:35:57 +02:00
Ingo Weinhold
19dc1d084f packagefs: Use the package activation file
If the file exists load only the packages specified in it. If it doesn't
exist or any kind of error occurs, fall back to loading all packages in
the packages directory.
2013-04-09 23:26:56 +02:00
Ingo Weinhold
a96531fc51 package daemon: On changes write a file with the active packages 2013-04-09 22:37:18 +02:00
Ingo Weinhold
19a268a459 Update libiconv and sqlite packages
The new package files haven't been rebuilt, just repackaged. Only small
details in the package-info changed.
2013-04-09 20:07:46 +02:00
Ingo Weinhold
92b6d58598 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.
2013-04-09 19:51:10 +02:00
Ingo Weinhold
4b3ca457b6 BSolverProblemSolution: Fix ToString() template strings 2013-04-09 18:55:07 +02:00
Ingo Weinhold
5e01af3199 package kit: Add data structures for problem solutions
... and add the problem solutions in LibsolvSolver.
2013-04-09 17:24:27 +02:00
Ingo Weinhold
1047e84f39 package daemon: Volume::InitPackages(): Fix error case
Don't assign fListener, when starting node monitoring fails.
2013-04-08 23:36:56 +02:00
Ingo Weinhold
a6c7f5e33c 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.
2013-04-08 19:06:18 +02:00
Ingo Weinhold
ebbefc0151 package daemon: Root: Use a common job for volume work
Add VolumeJob which, besides the Volume, takes a Root method to be
invoked. That allows to replace the specific job classes by simple
methods.
2013-04-08 17:49:14 +02:00
Ingo Weinhold
2508cd615f packagefs: Volume::_ChangeActivation(): Check 0 request size 2013-04-08 17:45:24 +02:00
Ingo Weinhold
bb88feaa3a PackageFSActivationChangeRequest: Make items array 0 sized
That's more convenient to use and the actual size of an item is variable
anyway.
2013-04-08 17:45:00 +02:00
Ingo Weinhold
def92c01ee packagefs/daemon: Ignore packages/ entries without .hpkg suffix 2013-04-08 15:54:39 +02:00
Ingo Weinhold
379131d97d BString: Add StartsWith() and EndsWith() methods 2013-04-08 15:44:31 +02:00
Ingo Weinhold
91a9b5f276 package daemon: Volume: Make sure move entry events don't get split 2013-04-08 15:21:26 +02:00
Ingo Weinhold
9e4096146f 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.
2013-04-08 15:19:11 +02:00
Ingo Weinhold
8fb3930a42 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.
2013-04-08 00:05:51 +02:00
Ingo Weinhold
7136419383 Add shared PthreadMutexLocker, an AutoLocker for pthread_mutex_t 2013-04-07 23:59:43 +02:00
Ingo Weinhold
6978941aac packagefs: Remove support for multiple package domains per volume
That also get rid of the job stuff and the package loader thread.
2013-04-07 13:52:41 +02:00
Ingo Weinhold
af5c10ab19 packagefs: Remove the packages directory node monitoring 2013-04-07 12:21:54 +02:00
Ingo Weinhold
3d53bd473b 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.
2013-04-07 12:02:18 +02:00
Ingo Weinhold
17bb54dc38 packagefs: ioctls for getting and changing package activation
* Add PACKAGE_FS_OPERATION_GET_PACKAGE_INFOS which returns the node refs
  of all packages activated.
* Add PACKAGE_FS_OPERATION_CHANGE_ACTIVATION to activate/deactivate
  multiple packages.
2013-04-07 11:53:50 +02:00
Ingo Weinhold
e85e9dadda packagefs: Move the package loading code to Package
* Volume::_LoadPackage() -> Package::Load()
* Volume::_DomainEntryCreated(): Pull a bit of code into a new
  _LoadPackage() method for reuse.
2013-04-07 11:45:47 +02:00
Ingo Weinhold
27197fd74b packagefs Package: Add getters for device and node ID 2013-04-07 11:38:03 +02:00
Ingo Weinhold
2d8ec1d502 Add the obvious node_ref constructor 2013-04-06 23:30:18 +02:00
Ingo Weinhold
26296b0aa4 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.
2013-04-06 04:29:34 +02:00
Ingo Weinhold
0c6927b5d7 packagefs: Add ioctl to get basic volume information
Also rename the MountType enum and members, since they are no longer
packagefs private.
2013-04-06 04:26:40 +02:00
Ingo Weinhold
91586bd3b6 packagefs: Fix handling of package domain paths
* The package directory path specified when mounting must be interpreted
  in the caller's I/O context. We did always interpret it in the
  kernel's I/O context, so that a relative path or a path in a chroot
  environment wouldn't work correctly. Now opening the directory is done
  in PackageDomain::Init() where we can at least guess the path's
  origin.
* We also normalize the path, though merely to get more conclusive debug
  output, since after opening the directory the path isn't used for
  anything else anymore.
* Make the "packages" mount parameter optional. If not specified, use
  the "packages" folder at our mount point.
2013-04-05 19:19:20 +02:00
Ingo Weinhold
5b6fb78c40 VFS: _kern_open_dir(): Fix NULL path case
It would create an empty path buffer and pass that on to dir_open(),
which accepts NULL, but not empty paths.
2013-04-05 19:19:20 +02:00
Oliver Tappe
daf7cb41c4 Bring back libroot_build.a for now.
* the corresponding TODO has to be dealt with at a later stage
2013-04-05 18:34:28 +02:00
Oliver Tappe
259046a388 Fix build without xattrs being used
* need to invoke fs_fopen_attr() instead of fs_open_attr()
2013-04-05 18:31:58 +02:00
Ingo Weinhold
d482342399 VM: Fix vm_block_address_range() area protection
B_ALREADY_WIRED, which was erroneously passed for the area protection
parameter to map_backing_store(), has the value 7 which implies user
readable and writable. Hence the address ranges around 0xdeadbeef and
0xcccccccc could actually be read and written from anywhere.
2013-04-05 16:58:50 +02:00
Ingo Weinhold
ce577d8db0 packagefs: AttributeIndex: Support duplicates correctly
The tree comparisons didn't allow for different Nodes having the same
attribute value. Therefore only the first node would be added and later
we would try to remove a node not actually in the tree, leading to a
crash.

packagefs seems to finally unmount cleanly, now.
2013-04-05 16:50:20 +02:00
Ingo Weinhold
05940bc514 packagefs: Fix handling of package-links directory on unmount
* Volume::_RemovePackageLinksDirectory(): We don't want to call
  _RemovePackageLinksNode(). Besides that the ID hash table has already
  been emptied before and we would thus release a reference to the node
  erroneously, the method doesn't do anything we want anyway. We don't
  want any children to be removed, since we have unregistered the
  volume's packages already (which removes the respective package link
  directories); the remaining ones are from other volumes and not ours
  to remove.
* PackageFSRoot: Release a reference to the package links directory in
  the destructor. We create the directory in Init() after all and no one
  else takes over ownership.
2013-04-05 00:31:51 +02:00
Ingo Weinhold
c7382d4c9d packagefs: Acquire missing reference for shine-through dirs
Since we publish shine-through directories directly to the VFS, we need
to acquire an additional reference, because we release a reference when
a node is put.
2013-04-05 00:20:32 +02:00
Ingo Weinhold
dedc1369e1 packagefs: Acquire missing reference for the root dir
We need one for the ID table and one for the volume itself.
2013-04-05 00:17:22 +02:00
Ingo Weinhold
ce1d048183 packagefs: Fix adding package links twice to volume
PackageLinkDirectory::NotifyDirectoryAdded() first notified the listener
(Volume) about the directory itself, then about the links it contained.
Since Volume adds the nodes recursively, the latter were added twice,
resulting in a corrupted ID hash table.
2013-04-04 22:25:23 +02:00
Ingo Weinhold
6d04dfb7a9 bindfs: Fix double deletion of root node on unmount
The VFS calls the FS's put_vnode() for all nodes, including the root
node, prior to calling unmount().
2013-04-04 11:24:39 +02:00
Ingo Weinhold
1add554a83 Make LibSolv a mandatory package
... so it is actually installed on the image.
2013-04-03 21:04:55 +02:00
Ingo Weinhold
7216c8944d pkgman resolve-dependencies: Improve usage text formatting 2013-04-03 20:14:54 +02:00
Ingo Weinhold
046f1c4378 pkgman resolve-dependencies: Avoid code duplication 2013-04-03 20:11:11 +02:00
Ingo Weinhold
4b8aabfac9 pkgman resolve-dependencies: Print package paths
... instead of package name and version. The command should now
work as required by haikuporter.
2013-04-03 19:09:38 +02:00
Ingo Weinhold
a8b832bf46 BSolverRepository::AddPackage(): Add optional return parameter
... returning the added BSolverPackage object.
2013-04-03 19:06:47 +02:00
Ingo Weinhold
749884283a pkgman resolve-dependencies: Verify result
* Make sure that the computed dependencies don't themselves depend on
  the specified package.
* Print only the actual dependencies, not the specified package.
2013-04-03 18:44:14 +02:00
Ingo Weinhold
65502bbe88 BSolver: Add VerifyInstallation()
... and implement it in LibsolvSolver.
2013-04-03 18:42:20 +02:00