Installed Poudriere...whats is it and whats next ?

I would like to understand what is Poudriere and how to consume it.
Im trying to understand it but im lack of knowledge and experience and technical understanding.
My Poudriere is not 100% setup as i want due to - i have no idea what i can do with it and how to!
How can you describe Poudriere and its abilities ?
Poudriere can build different architectures
Poudriere is my personal freshports ?
As far as i understand: Poudriere builds packages from ports with your configs and later you install them with pkg ?
how can i add packages to the list to keep them build and updated ? Can i use some packages from git ? Lets say Qtile ( bsd version is behind a bit )
I have two local repos though nginx not yet fully setup- i can use my laptop and install packages from my local repo where Poudreire built it ? my WS and laptop both with x64 but some things not needed for laptop in my case ( nvidia and few extras ) so i can use one repo to build pc ports and one to build laptop ports different repos )?
Thank You.
P.s. also good documentation with examples of Poudriere would be great... :)
 
i use poudriere to build the linux-widevine-cdm port to enable drm playback with chromium

 
Poudriere is my personal freshports ?
Freshports is a website originally created by dvl@ that shows interesting information from the ports tree in a convenient way. It is NOT a repository.

As far as i understand: Poudriere builds packages from ports with your configs
That's the gist of it. It produces a directory with packages. You can share this directory to other systems to install the packages there.

how can i add packages to the list to keep them build and updated ?
poudiere-bulk(8):
Code:
     -f file  Build ports listed in the file.

              The path to the file has to be absolute.  Ports must be
              specified in the form of “category/port” and sh(1)-style
              comments are allowed.  Multiple -f file arguments may be
              specified at once.

Can i use some packages from git ?
No, you typically don't store binaries in git. Besides that, poudriere was specifically designed to build FreeBSD ports. It is not a generic build system.

Lets say Qtile ( bsd version is behind a bit )
Only if you update the x11-wm/qtile port, sure.
 
I have two local repos though nginx not yet fully setup- i can use my laptop and install packages from my local repo where Poudreire built it ? my WS and laptop both with x64 but some things not needed for laptop in my case ( nvidia and few extras ) so i can use one repo to build pc ports and one to build laptop ports different repos )?
Just use a single repository to build packages for both the workstation and laptop. Unless you have different options for each there's no reason for two repositories. I have a set of packages for servers and a set of packages for desktops. Those have different options, for the server packages for example I don't want any X/GUI variants, but I do want those for the desktop set.
 
Freshports is a website originally created by dvl@ that shows interesting information from the ports tree in a convenient way. It is NOT a repository.


That's the gist of it. It produces a directory with packages. You can share this directory to other systems to install the packages there.


poudiere-bulk(8):
Code:
     -f file  Build ports listed in the file.

              The path to the file has to be absolute.  Ports must be
              specified in the form of “category/port” and sh(1)-style
              comments are allowed.  Multiple -f file arguments may be
              specified at once.


No, you typically don't store binaries in git. Besides that, poudriere was specifically designed to build FreeBSD ports. It is not a generic build system.
Thank You!
poudrierie-bulk - shows me no info for some reasons, but i would like to expand on this with question:
i have a list i named it pkglist ( basically i used freebsd foundation journal September/October 2023 ) i did exactly like it was there but my list contains only few pkg to test it - so now i want to add conky, nvidia,python and few more - so i have to add these to same list and build it again ? if yes - will Poudriere rebuild already build packages or it will skip it ?
Then i have another question: my pc runs nvidia but i want nvidia-drm , lets say i build it with Poudriere and want to install it - so i just do pkg install nvidia-drm and because port was build already - its will install that nvidia-drm correct ? and if Poudriere does not have it will pull from freebsd even if FreeBSD.conf states - no but poudriere.conf FREEBSD_HOST=ftp://ftp.freebsd.org ?
 
Just use a single repository to build packages for both the workstation and laptop. Unless you have different options for each there's no reason for two repositories. I have a set of packages for servers and a set of packages for desktops. Those have different options, for the server packages for example I don't want any X/GUI variants, but I do want those for the desktop set.
yes, my laptop and pc uses different options as my laptop does not have nvidia etc. so this is why i was talking about 2 different repos.
 
i did exactly like it was there but my list contains only few pkg to test it - so now i want to add conky, nvidia,python and few more - so i have to add these to same list and build it again ? if yes - will Poudriere rebuild already build packages or it will skip it ?
Yes, you just add them to the list. Poudriere will only rebuild if necessary, it'll use whatever was created by the previous builds if possible.
 
I dont want to have conky with nvidia on laptop but ill use conky with nvidia on pc.
There is no difference. "Nvidia" isn't an option on sysutils/conky.

I think you might be confused with x11-drivers/xorg-drivers. It does have an "NV" option, but this is the old x11-drivers/xf86-video-nv driver, you shouldn't enable that one. For your NVidia powered system you simply install x11/nvidia-driver (assuming you need the latest driver version).

My "desktop" set repository is used on different types of desktops, some use the Intel graphics drivers, some use the NVidia drivers (different versions too). But it's all in the same repository.
 
There is no difference. "Nvidia" isn't an option on sysutils/conky.

I think you might be confused with x11-drivers/xorg-drivers. It does have an "NV" option, but this is the old x11-drivers/xf86-video-nv driver, you shouldn't enable that one. For your NVidia powered system you simply install x11/nvidia-driver (assuming you need the latest driver version).

My "desktop" set repository is used on different types of desktops, some use the Intel graphics drivers, some use the NVidia drivers (different versions too). But it's all in the same repository.
Sorry for confusion etc. as now im confused...
I used conky as example only ( i dont know how you call it ... i call options but whats the correct word to remmember for the future ? bindings? support ? )

To be more precise ill draw this sample:

package A = pkg install A
package B = A+(cairo bindings enabled) make install ( ports )
so we have two basically same packages but one is whit cairo bindings and another without.

So this is what i want to have separatelly. I dont want to install package B to my laptop only to my pc even though it is same package but with cairo bindings but it makes difference to me ( mentaly , ocd )
 
I used conky as example only ( i dont know how you call it ... i call options but whats the correct word to remmember for the future ? bindings? support ? )
I believe the word or term you're looking for is linking. Conky does not get linked to the NVidia driver. It's not a dependency.

package A = pkg install A
package B = A+(cairo bindings enabled) make install ( ports )
so we have two basically same packages but one is whit cairo bindings and another without.
This is linking to the cairo libraries. This causes cairo to become a dependency of package B but not of package A. Conky does not have a dependency on the NVidia libraries/driver, at all.
 
So this is what i want to have separatelly. I dont want to install package B to my laptop only to my pc even though it is same package but with cairo bindings but it makes difference to me ( mentaly , ocd )
Assuming I understand your question correctly (building the same package, with different options) then this is best done using package-sets (-z option to poudriere). I do the same as SirDice does, making a distinction between server & desktop/laptop but I guess you could have package-sets "desktop" and "laptop". Why exactly you'd really want this separation, I can't see (I too have desktop(s) and laptop(s) using the same packages).

Now if your actual intent is to remove specifically cairo support from all ports: I'm quite sure that's not going to work as it's required by quite a few ports. A quick check on the laptop I'm typing this on shows:
Code:
> pkg info -r cairo | grep -v : | sort
        audacity-3.5.1
        cairomm-1.12.2_6
        firefox-126.0.1,2
        frei0r-plugins-cairo-2.3.2
        gegl-0.4.48
        gimp-app-2.10.38,1
        gimp-gutenprint-5.3.4
        graphviz-9.0.0_4
        gspell-1.10.0_5
        gtk3-3.24.42
        gtkmm30-3.24.2_4
        gtksourceview4-4.8.3_2
        inkscape-1.3.2_2
        kicad-7.0.2_6,2
        lib2geom-1.3_1
        libdecor-0.2.2_3
        libreoffice-24.2.3.2
        librsvg2-rust-2.58.1
        libspectre-0.2.12_1
        lv2-1.18.10
        p5-Cairo-1.109_1
        p5-Cairo-GObject-1.005_1
        pango-1.50.14
        pangomm-2.40.1_6
        plasma5-kde-gtk-config-5.27.11
        poppler-24.02.0_1
        poppler-glib-24.02.0_1
        poppler-qt5-24.02.0_1
        poppler-utils-24.02.0_1
        py39-cairo-1.21.0,1
        py39-gobject3-3.42.2
        qt6-base-6.7.1
        slurm-wlm-23.11.7
        suil-0.10.12_3
        thunderbird-115.11.0_2
        webkit2-gtk3-2.34.6_10
        wifimgr-1.23_3
        wx32-gtk3-3.2.4_2
Getting a desktop/laptop running without gtk3, qt and quite a few others will be difficult. But just like SirDice said I'm going to stress that installing graphics/cairo has nothing to do with any of the nvidia drivers. That said, if the nvidia drivers are installed automatically as a dependency of something (e.g. via the official FreeBSD repository) that's a different question to ask altogether.
 
package A = pkg install A
package B = A+(cairo bindings enabled) make install ( ports )
Perhaps I'm misunderstanding you, but I think the "normal" poudriere way to do this is:
  1. Your local ports tree#1 -> poudriere build run where port A + option X -> package A -> (output) repository "for-my-PC"
  2. Your local ports tree#2 -> poudriere build run where port A + option Y -> package A -> (output) repository "for-my-laptop"
You now have two tailormade (local) package repositories where clients can select the desired repository. For each client you must specify the desired local package repository in the client's directory /usr/local/etc/pkg/repos/

In Poudriere: A complete guide at "Configuring clients" it is shown how to set the desired repository of a client in the context of that setup. A new file /usr/local/etc/pkg/repos/insaneengineer.conf that uses the desired repository (after disabling the /usr/local/etc/pkg/repos/FreeBSD.conf). That is for one repository, you'll have to do that for two clients (laptop and PC) where each is set to use the appropriate repository.

The building of a package, be it by issuing a manual make install command as described in Installing Ports or by poudriere, the package name being generated is controlled by the make file; see for more info about ports: FreeBSD Porter's Handbook. Taking the example the lsof(8) example mentioned in the Handbook and say you want to create two different variants of lsof, but you want them to have the same name! That would not be allowed according to the Porter's Handbook:
! Important

The package name must be unique across the entire ports tree. Make sure that the PORTNAME is not already in use by an existing port, and that no other port already has the same PKGBASE. If the name has already been used, add either PKGNAMEPREFIX or PKGNAMESUFFIX.
Perhaps adapting PKGNAMEPREFIX or PKGNAMESUFFIX (see PKGNAMEPREFIX or PKGNAMESUFFIX) is what your looking for. The usual way is to just have two separate local versions of the ports tree (as referenced above as "Your local ports tree#1" & "Your local ports tree#2". I don't know if there's any other way being used, or if it is even possible.

EDIT:
It seems that the "-z option" mentioned by malavon as is shown in Poudriere: Getting Started - Tutorial - 4. Sets, for example separate packages for:
• ${POUDRIERE_DATA}/packages/111x64-default-py27/
• ${POUDRIERE_DATA}/packages/111x64-default-py36/

Hmm, if you have the need for only a few different packages depending on your client (laptop, PC), then probably the generation of different packages based on flavor (see Ports/FlavorsTools - FreeBSD Wiki and Porter's Handbook - Chapter 7. Flavors) would be a better option to consider. In that case one local ports tree and one package repository would suffice. Poudriere can be directed to build all flavors by using bulk -a (Poudriere(8) - FLAVORS). Then you'd get packages like the ones available for editors/vim/:
Package flavors (<flavor>: <package>)

• console: vim
• gtk2: vim-gtk2
• gtk3: vim-gtk3
• motif: vim-motif
• x11: vim-x11
• tiny: vim-tiny
The Makefile - vim is where the flavors are coded.
 
I believe the word or term you're looking for is linking. Conky does not get linked to the NVidia driver. It's not a dependency.


This is linking to the cairo libraries. This causes cairo to become a dependency of package B but not of package A. Conky does not have a dependency on the NVidia libraries/driver, at all.
Yes, it does not have as i was mixing with Linux.
Linking - i will remember it.
 
Assuming I understand your question correctly (building the same package, with different options) then this is best done using package-sets (-z option to poudriere). I do the same as SirDice does, making a distinction between server & desktop/laptop but I guess you could have package-sets "desktop" and "laptop". Why exactly you'd really want this separation, I can't see (I too have desktop(s) and laptop(s) using the same packages).
Perhaps I'm misunderstanding you, but I think the "normal" poudriere way to do this is:
  1. Your local ports tree#1 -> poudriere build run where port A + option X -> package A -> (output) repository "for-my-PC"
  2. Your local ports tree#2 -> poudriere build run where port A + option Y -> package A -> (output) repository "for-my-laptop"
You now have two tailormade (local) package repositories where clients can select the desired repository. For each client you must specify the desired local package repository in the client's directory /usr/local/etc/pkg/repos/

In Poudriere: A complete guide at "Configuring clients" it is shown how to set the desired repository of a client in the context of that setup. A new file /usr/local/etc/pkg/repos/insaneengineer.conf that uses the desired repository (after disabling the /usr/local/etc/pkg/repos/FreeBSD.conf). That is for one repository, you'll have to do that for two clients (laptop and PC) where each is set to use the appropriate repository.
This.
I see where i missed SirDice mentioning it.
Just to double check if i understood correctly:
I create one poudriere jail with packages for my PC and create /usr/local/etc/pkg/repos/pc.conf
I create one poudriere jail with packages for my Laptop and create /usr/local/etc/pkg/repos/pc.conf but on my laptop (conf file) ?
Obviously i have to make sure im able to download packages to my laptop from my PC...

P.s. i noted that some people use bhyve instead of jails or its jail inside of bhyve ? anyway - what does bhyve gives that jail does not ? as i want to learn bhyve - i think iit would be great add`on/lesson to learn it.
 
Back
Top