Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
igalic opened this issue Mar 21, 2024 · 1 comment

Comments

@igalic
Copy link

igalic commented Mar 21, 2024

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
Copy link
Member

bapt commented Jul 1, 2024

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants