Re: pkg installation into non-default location
- In reply to: Andriy Gapon : "Re: pkg installation into non-default location"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 11 Aug 2021 10:20:24 UTC
On Wed, 11 Aug 2021 12:59:52 +0300 Andriy Gapon <avg@FreeBSD.org> wrote: > On 2021-08-10 16:57, Emmanuel Vadot wrote: > > On Tue, 10 Aug 2021 15:47:03 +0300 > > Andriy Gapon <avg@FreeBSD.org> wrote: > > > >> > >> I noticed at least three way of installing a package under "alternative > >> root". One of them is very straightforward, but for two other I am not > >> sure about details. I guess, I can get them all from the source code, > >> but maybe someone would be kind to give me a summary. > >> > >> So, the obvious way is to use pkg with -c or -j option. In this case > >> pkg just chroot-s or jexec-s before doing anything. So, conceptually > >> everything is like the normal operation, but in the chroot or the jail. > >> > >> Then, there is -r option: > >> -r ?root directory?, --rootdir ?root directory? > >> pkg will install all packages within the specified ?root > >> directory?. > >> It's not entirely clear what that means and when that can be useful. > >> In other words, why this option exists if we already have -c and -j. > > > > Having -r is useful for different things : > > > > - We use that for the tests so every test installation/delete is done > > under a specified dir. > > - It's also useful when creating image for a different arch than the > > native one. > > - It's also useful for pkgbase to bootstrap a system/jail/whatever as > > at first you will not have something to chroot/jail on. > > Thank you for the information! > Still curious about some technical details. > > I assume that -r simply unpacks packages files under an alternative root > (similar to DESTDIR). > So, does it still use the package database under the main root? The db and cache dirs are under the destdir, pkg(8) doesn't uses the main root dir when using -r > > Is a package installed with -r marked as such? > Or is it registered as if there was no -r ? There is not such thing being done, it's simply registered in the db under the rootdir. > What about installation scripts that the package may have? Some scripts are rootdir compliant but not all. See https://cgit.freebsd.org/ports/commit/Mk/Scripts/do-users-groups.sh?id=ab88b482cc9ccea1277e98ebf0a64eacb1e82c23 for some example of making something -r compliant. > Is that the script's job to ensure that it works correctly with -r or > does pkg arrange an alternative root somehow? > > Thank you. Yes it is, note that we also have triggers now and defered triggers which means that if a package needs to run some programs after the installation (like registering a font or something like that) it can use triggers based on the dirs and if the arch isn't the same the triggers is defered by default iirc, so one have to use pkg-triggers to run it after. Not much have been done in the ports tree for triggers yet though. > -- > Andriy Gapon > -- Emmanuel Vadot <manu@bidouilliste.com> <manu@FreeBSD.org>