freebsd / pkg

Package management tool for FreeBSD. Help at #pkg on Libera Chat or pkg@FreeBSD.org
Other
737 stars 277 forks source link

multi-repo: provide PPA like functionality where a single-package-repo pulls dependencies from elsewhere #2259

Open igalic opened 3 months ago

igalic commented 3 months ago

I would like to provide a (preferably single) repo of (architecture independent package) net/cloud-init-devel releases to my test VMs, so they can install a fresh version of net/cloud-init-devel that I can then do testing on. This is the kind of thing that Ubuntu PPAs and other Linux package managers do.

However, that is, broadly speaking, not possible pkg.

If I provide a repo with only net/cloud-init-devel, the package will not be installable from that repo:

root@freebsd:~ # pkg install -r cloud-init net/cloud-init-devel
Updating cloud-init repository catalogue...
cloud-init repository is up to date.
All repositories are up to date.
pkg: py39-cloud-init-devel has a missing dependency: py39-requests
pkg: Package database is busy while closing!

If I force installation with pkg install --ignore-missing the dependencies will be missing, and there's no way to install them short of enumerating them all. On Debian, if I install a package as file with dpkg that ends up having missing dependencies, I can pull those in with apt install -f. No such thing is possible with pkg:

root@freebsd:~ # pkg install --ignore-missing  -r cloud-init net/cloud-init-devel
Updating cloud-init repository catalogue...
cloud-init repository is up to date.
All repositories are up to date.
pkg: py39-cloud-init-devel has a missing dependency: py39-requests
pkg: py39-cloud-init-devel has a missing dependency: sudo
pkg: py39-cloud-init-devel has a missing dependency: py39-oauthlib
pkg: py39-cloud-init-devel has a missing dependency: py39-netifaces
pkg: py39-cloud-init-devel has a missing dependency: py39-jsonschema
pkg: py39-cloud-init-devel has a missing dependency: py39-jsonpointer
pkg: py39-cloud-init-devel has a missing dependency: py39-jsonpatch
pkg: py39-cloud-init-devel has a missing dependency: py39-configobj
pkg: py39-cloud-init-devel has a missing dependency: py39-boto
pkg: py39-cloud-init-devel has a missing dependency: py39-Jinja2
pkg: py39-cloud-init-devel has a missing dependency: py39-pyserial
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        py39-cloud-init-devel: 23.4.289 [cloud-init]

Number of packages to be installed: 1

The process will require 4 MiB more space.
1 MiB to be downloaded.

Proceed with this action? [y/N]: 
[1/1] Fetching py39-cloud-init-devel-23.4.289.pkg: 100%    1 MiB   1.1MB/s    00:01    
Checking integrity... done (0 conflicting)                                                                            
[1/1] Installing py39-cloud-init-devel-23.4.289...                                                                    
[1/1] Extracting py39-cloud-init-devel-23.4.289: 100%                                                                 
=====                                                                                                                 
Message from py39-cloud-init-devel-23.4.289:                                                                          

--                                                         
To enable cloud-init, add the following line to rc.conf:                                                              

cloudinit_enable="YES"                                                                                                

This will make sure cloud-init is started at boot.                                                                    
root@freebsd:~ # cloud-init --version                 
Traceback (most recent call last):                                                                                    
  File "/usr/local/bin/cloud-init", line 33, in <module>
    sys.exit(load_entry_point('cloud-init==23.4', 'console_scripts', 'cloud-init')())
  File
etc…

There is no apt install -f equivalent in pkg and pkg upgrade is entirely unfazed:

root@freebsd:~ # pkg upgrade
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
Updating cloud-init repository catalogue...
cloud-init repository is up to date.
All repositories are up to date.
Checking for upgrades (1 candidates): 100%
Processing candidates (1 candidates): 100%
Checking integrity... done (0 conflicting)
Your packages are up to date.
root@freebsd:~ # 

Mina, what do you even want??

I want to be able to provide single-package repos, like PPAs, which provide a higher version of packages. I want to be able to configure that package repo, and when running pkg install have pkg automatically pick packages from there because their version or priority is higher;

And because I lack the resources, I also want to be able to provide architecture independent repositories (think FreeBSD:14:any, or, heck perhaps even FreeBSD:all), which I think is the main hindrance here, since by default, poudriere builds (or downloads) all dependencies of a package to provide in the repo it creates.

bapt commented 2 days ago

what prevent you from doing that already?? pkg has nothing which prevents you from doing that.