# poudriere ports -u



## astyle (Aug 31, 2021)

Need some help understanding what poudriere-ports(8) does... Specifically when I run the command `poudriere ports -u`... I tried googling around, but have been unable to find any usable examples of specifically that option. I can imagine it's something like `portsnap extract math/adol-c` (assuming that math/adol-c is the port I want to update). `portsnap extract` will clean out the work/ subdirectory, but respect any makefile knobs I modify, and I like that.  I just want to learn about the behavior of `poudriere ports -u`... can I feed a list into that, or not?


----------



## SirDice (Aug 31, 2021)

astyle said:


> Need some help understanding what poudriere-ports(8) does... Specifically when I run the command `poudriere ports -u`...


It depends on how that ports tree was set up to begin with. If you created it without providing any options then portsnap(8) is used to check out a copy and keeping it updated. I have checked out ports trees using git(1) so for me a `poudriere ports -u` uses git to update it. 


```
root@molly:/usr/local/etc/poudriere.d # poudriere ports -l
desktop   git+https 2021-08-29 14:14:04 /usr/local/poudriere/ports/desktop
server    git+https 2021-08-29 14:14:08 /usr/local/poudriere/ports/server
```



astyle said:


> I can imagine it's something like `portsnap extract math/adol-c` (assuming that math/adol-c is the port I want to update).


poudriere-ports(8) doesn't update single ports, it updates the ports tree as a whole. 



astyle said:


> `portsnap extract` will clean out the work/ subdirectory, but respect any makefile knobs I modify, and I like that.


A port's configuration options are stored in /var/db/ports/, not in the port's work/ directory (See PORT_DBDIR in ports(7)). poudriere-options(8) stores them in /usr/local/etc/poudriere.d/<jail name>-<ports tree>-options/. 


```
root@molly:/usr/local/etc/poudriere.d # poudriere jail -l
122-release 12.2-RELEASE-p9 amd64 ftp                                       2021-08-04 12:20:35 /usr/local/poudriere/jails/122-release
130-release 13.0-RELEASE-p3 amd64 ftp                                       2021-07-16 17:34:36 /usr/local/poudriere/jails/130-release
13-stable   13.0-STABLE     amd64 url=file:///storage/release/13-stable/ftp 2021-08-18 09:14:53 /usr/local/poudriere/jails/13-stable
```


```
root@molly:/usr/local/etc/poudriere.d # ls -ald *-options
drwxr-xr-x  316 root  wheel  316 Jan  3  2021 122-release-server-options
drwxr-xr-x  166 root  wheel  166 Jan 30  2021 13-stable-server-options
drwxr-xr-x  399 root  wheel  399 Aug 28 17:58 130-release-desktop-options
drwxr-xr-x  342 root  wheel  342 Jun 21 21:21 130-release-server-options
```


----------



## astyle (Aug 31, 2021)

SirDice said:


> poudriere-ports(8) doesn't update single ports, it updates the ports tree as a whole.


Thanks, SirDice . That part above is one thing I was looking for (It does have implications for how I choose to handle this enchilada), but your post did provide a LOT of info I didn't even realize I should be paying attention to.  So, if I got you correctly,

```
# poudriere ports -u
```
would be a rough equivalent to

```
# portsnap fetch
# portsnap extract
```
With the difference being that I *cannot* feed a list of specific ports to `# poudriere ports -u`, while `# portsnap extract` will take a list no problem... 

As an aside, I imagine that it's not impossible to set up git(1) to only track the list of ports that I want to keep updated within the ports tree, then `# poudriere ports -u` would be usable for me.  Looking even further down the road, some deps that I don't care to track/update will eventually become too stale, and require an update, as well. But that  - I'll cross that bridge when I get there.


----------



## SirDice (Aug 31, 2021)

astyle said:


> would be a rough equivalent to


It does a `portsnap fetch update` when updating, `portsnap fetch extract` is used to checkout the initial tree. 



astyle said:


> With the difference being that I *cannot* feed a list of specific ports to `# poudriere ports -u`, while `# portsnap extract` will take a list no problem...


Correct. 


astyle said:


> As an aside, I imagine that it's not impossible to set up git(1) to only track the list of ports that I want to keep updated within the ports tree, then `# poudriere ports -u` would be usable for me.


Just checkout the ports tree with git(1). With a git tree you can just go to /usr/local/poudriere/ports/<ports tree>/ and use the usual git commands to manage it. I use it for example to downgrade a single port if I run into problems with one (usually you can just `git revert` the last commit to that port). I also created my own branches in order to test some updates I was working on. 

This will get you a ports tree named latest using git:
`poudriere ports -c -p latest -U https://git.freebsd.org/ports.git -B main -m git+https`
The `-B main` causes it to track the latest branch, if you want you can substitute it for one of the quarterly branches for example. And just remove the `-p latest` if you want to use the default ports tree for this.



astyle said:


> Looking even further down the road, some deps that I don't care to track/update will eventually become too stale, and require an update, as well.


Just checkout the whole tree and keep that updated. It's really not that much data. It's much more cumbersome to only update some individual ports with the added risk you'll eventually forget about some dependency that has gone stale.


----------



## astyle (Aug 31, 2021)

What I'm seeing above is good info... In the big picture, I'm trying to use port lists (that I generate) to isolate Wayland issues to specific ports. Yeah, there's benefits to keeping the whole ports tree updated, but - seems like there's a group of Wayland-related ports that worked at some point, but not any more. Updating them *together* with KDE conflates the results and makes troubleshooting difficult.


----------



## SirDice (Aug 31, 2021)

astyle said:


> In the big picture, I'm trying to use port lists (that I generate) to isolate Wayland issues to specific ports. Yeah, there's benefits to keeping the whole ports tree updated, but - seems like there's a group of Wayland-related ports that worked at some point, but not any more. Updating them *together* with KDE conflates the results and makes troubleshooting difficult.


I'd still use the git method. Then create your own branch, you can then easily selectively merge changes (cherry-picking) from the main branch into your own branch. Or rebase your changes on top of the main branch. There are various different ways how this could be achieved. With git you have a lot more freedom to "work" the ports tree while still keeping track of all the changes in the main branch.


----------



## grahamperrin@ (Sep 2, 2021)

astyle said:


> … poudriere-ports(8) … respect any makefile knobs I modify, …




```
null            This option can be used to import an
                                    existing directory that already contains a
                                    manually managed ports tree.  The path
                                    must be specified with -M path.  The path
                                    will be null-mounted during builds.
```


----------



## astyle (Sep 13, 2021)

SirDice said:


> Code:
> 
> ```
> root@molly:/usr/local/etc/poudriere.d # poudriere ports -l
> ...


What's the point of maintaining separate *trees *for desktop and server sets? 

Just trying to understand if that is absolutely necessary due to how poudriere works, or if it's possible to set up differently? I can see the idea of wanting 3 different versions of FreeBSD to have the same set of server software...

My goal/idea is to have KDE be upgradeable *independently* from everything else, and have a few other sets also be upgradeable in the same way, but is it really necessary to maintain separate trees for that? If I had a port I maintain, and needed to test it, and make sure it plays nice with the rest of the tree, then yeah, I do see a need for a separate tree.


----------



## SirDice (Sep 13, 2021)

astyle said:


> What's the point of maintaining separate *trees *for desktop and server sets?


For starters my package directories are now nicely named; 

```
root@molly:/usr/local/poudriere/data/packages # ls -al
total 134
drwxr-xr-x  6 root  wheel   8 Mar 23 09:43 .
drwxr-xr-x  7 root  wheel   7 Mar  4  2021 ..
drwxr-xr-x  7 root  wheel  18 Sep 13 17:20 122-release-server
drwxr-xr-x  7 root  wheel  18 Sep 13 10:10 13-stable-server
drwxr-xr-x  8 root  wheel  19 Sep 13 17:20 130-release-desktop
drwxr-xr-x  7 root  wheel  18 Sep 13 14:53 130-release-server
lrwxr-xr-x  1 root  wheel  18 Nov  7  2020 FreeBSD:12:amd64 -> 122-release-server
lrwxr-xr-x  1 root  wheel  18 Feb 15  2021 FreeBSD:13:amd64 -> 130-release-server
```

Second reason is that I have different options enabled between the server and desktop builds, separating them based on ports tree makes sense from a option directory naming:

```
root@molly:/usr/local/etc/poudriere.d # ls -ld *-options
drwxr-xr-x  316 root  wheel  316 Jan  3  2021 122-release-server-options
drwxr-xr-x  166 root  wheel  166 Jan 30  2021 13-stable-server-options
drwxr-xr-x  399 root  wheel  399 Aug 28 17:58 130-release-desktop-options
drwxr-xr-x  342 root  wheel  342 Jun 21 21:21 130-release-server-options
```

Third reason is that I have two ports trees I can individually manage (revert changes, add custom tests, etc) without interfering the other tree. 

```
root@molly:/usr/local/poudriere/ports # ls -al
total 36
drwxr-xr-x   4 root  wheel   4 Aug 18 09:54 .
drwxr-xr-x   5 root  wheel   5 Jan 31  2021 ..
drwxr-xr-x  70 root  wheel  81 Sep 12 20:37 desktop
drwxr-xr-x  70 root  wheel  81 Sep 12 20:37 server
```



astyle said:


> Just trying to understand if that is absolutely necessary due to how poudriere works


No, not necessary, it's just my setup. You can have one default ports tree to work with, I just like to have my 'server' and 'desktop' separated. 


astyle said:


> or if it's possible to set up differently?


You can set it up however you like. You could have a latest and quarterly tree. Or a custom tree, or just stick to one. It's all up to you. 



astyle said:


> If I had a port I maintain, and needed to test it, and make sure it plays nice with the rest of the tree, then yeah, I do see a need for a separate tree.


I just use the 'server' or 'desktop' tree I already have (whichever one is more appropriate for the port I'm working on). I make a new branch, put my changes in it and start the appropriate build (and poudriere-testport(8)).


----------

