On 04/24/2013 05:49 PM, pulkomandy@xxxxxxxxxxxxx wrote:
I don't find that nice. I frequently find myself in the situation where I desperately want some help from the package management in getting rid of bogged configurations. I.e. I don't want package management to ignore the problem of settings. Ingo's proposal is to at least "mark" packages where merging should be possible. Sounds good to me. But even if merging is not possible, I want PM to be aware of settings. For example, it should at least allow me to get rid of any customizations (overridden default settings) when deinstalling a package.Well, it's certainly fine for the package manager to know that a new version of the file is available, and the older one might be incompatible. Taking Debian/apt as an example (maybe other package managers do better ?), it will try to do a 3-way merge (knowing the previous version of the settings files, the user modified one, and the new one). The problem is : - The merge often fails. Examples are when an option is removed/renamed and was modified, or the file was just reorganized, etc. - Even if the merge succeeds, you're not sure that the merged file will work with the new version of the package. This leaves you with an even worse situation: you're left with only the merged config file, and no trace of any of the original versions. (Debian now keeps the 3 versions next to the file. That solves the problem but clutters the settings directory with a lot of older version of setting files over time).
Haiku would keep all necessary versions of the file in either case, though probably not in the settings directory, but in a dedicated subdirectory in packages/administrative/.
The merge process is also painful to integrate in the package management system. In command-line, Debian will ask what to do each time it encounters such a file, which means you have to wait for the questions as packages are installing. In an UI-based package manager/update application, it's not easy to ask the user what to do in a simple way (we can list the places where the process failed, but that leaves the user clueless with how to solve the problem anyway).
I would simply present a list of all concerned files with their respective status (the status texts may be more user-friendly):
* "not merged": Merge necessary, but disabled by the user. * "merged": Merge successful. * "merge failed": Merge necessary, but failed.Selecting an entry (or double-clicking it to bring out a new window) would show additional info. If we wanted to go all out, we could even implement a dialog to assist with the merge.
I think this moves the bad experience of "ported software stops working after an upgrade" to "Haiku package manager corrupts configuration files and leaves programs in non-working state".
As written before, that's why the user should always be notified of the situation. I.e. after an update the problems and potential problems should be clearly listed. Ideally it would also be possible to inspect the status of a recent update at a later point.
I don't think we can do more than warning the user about a conflict of settings files. For software that really can't handle more than a single settings file, I'd go with a default one in the package (read-only) and let the user copy it to its home directory and modify it if needed. Since we already patch most of the software to use find_directory anyway, I don't see how that would make the porting task significantly more work.
As long as the software can handle a way to include a configuration file from another, the user settings can do so and just set the few options the user wants to change. This makes the settings file easier to understand. I think most ported software will allow that.
User-specific settings aren't really the files we're talking about. I don't think there's that many ported software that requires a user specific settings file. In most cases those will be optional, explicitly created by the user, and likely reasonably forward compatible anyway. Or the software notifies the user when started that a configuration file is required or the existing one is obsolete. That's simply what multi-user systems dictate, since you can't mess with all users' settings when updating a software, and when creating a new user, creating settings files for all installed software isn't sensible either.
The interesting cases are the global configuration files (stuff that normally lives in common/settings). In some cases you'll probably never want to edit them or maybe just add/change a line or two (e.g. your "man" configuration) while others may be highly customized (e.g. your apache config). The package manager's merge feature would mainly be helpful for the first group.
On 04/24/2013 06:09 PM, Antti Soininen wrote: [...] > If user has not modified a configuration file and a new is available, > the old one is always overwritten.Yes, I think that's a given. Both alternatives -- leaving the old file or bothering the user -- would be highly annoying.
On 04/25/2013 12:01 AM, Clemens wrote:> On Wed, 24 Apr 2013 03:01:40 +1200, Ingo Weinhold <ingo_weinhold@xxxxxx>
> wrote: > is this case included? > > 4) Not installed packages > > For example, an app on a removable drive for portable usage that is > opened by just double clicking the hpkg file. > > Should the app know if its installed or not? > Should the app know what hpkg it lifes in? e.g. to attach settings to > its package file > > In this way an app opened by double clicking a hpkg file would know > that it should not write settings into the home directory but attach > it directly to the package. Copying the package to the install > directory of a new host would omit this settings and install fresh > settings to the settings directory of the new environment. > > However, settings directly attached to a hpkg might be dangerous > because the settings may also contain passwords. A user who only > wants to copy the app may not realize that --> a settings dir on the > removable drive?We haven't given the "app bundle" concept much thought yet. One idea is to simply temporarily activate the package in home/config (i.e. an application would usually appear in home/config/apps/) or in a packagefs volume for that purpose alone. An API could be added to allow the application to determine whether it has been activated just temporarily.
Storing settings in the package file's attribute is not a good solution IMO. Such an attribute would not normally be visible to the user and therefore easily unknowingly copied. Which is indeed a problem for sensitive data. Even for harmless ones I wouldn't find it nice, if another user inherited settings simply be copying the package.
A better alternative might be to require the user to explicitly set up an installation location on the removable media -- basically just a directory with a "packages" and a "settings" directory and maybe some marker. A new packagefs volume would then be mounted there and the application would store settings there as well. If the package doesn't live in such an installation location the application would use the user's settings directory as usual. This would still need explicit support from the application, I think.
Anyway, since the application bundle feature isn't high priority, we probably won't implement it before merging the package management branch back to the trunk. The same goes for any more advanced settings file handling BTW. Initially, installing new and auto-updating unchanged settings files is a reasonable feature set to go for.