Aug 292021

Last last night, after renaming some buildlists, which were actually setnames, for poudriere, I realized that files in /usr/local/etc/poudriere.d also needed to be renamed.

In this post:

  • poudriere 3.3.7
  • nginx 1.20.1_2,2
  • Both running on FreeBSD 13.0-RELEASE-p4

These are my renamed files:

[dan@pkg01:/usr/local/etc/poudriere.d]: $ ls *primary*
primary-make.conf          primary-poudriere.conf     primaryi386-make.conf      primaryi386-poudriere.conf

The output of svn status illustrates the changes I made:

[dan@pkg01:/usr/local/etc/poudriere.d]: $ svn st
D       master-list-i386-make.conf
        > moved to primaryi386-make.conf
D       master-list-i386-poudriere.conf
        > moved to primaryi386-poudriere.confa
D       master-list-make.conf
        > moved to primary-make.conf
D       master-list-poudriere.conf
        > moved to primary-poudriere.conf
M       ports/default/timestamp
M       ports/dvl-git/mnt
M       ports/testing/timestamp
A  +    primary-make.conf
        > moved from master-list-make.conf
A  +    primary-poudriere.conf
        > moved from master-list-poudriere.conf
A  +    primaryi386-make.conf
        > moved from master-list-i386-make.conf
A  +    primaryi386-poudriere.confa
        > moved from master-list-i386-poudriere.conf

Next, I’ll do the Nginx aliases.

Nginx Aliases

These are the old directories for which I want aliases:

drwxr-xr-x  3 root  wheel  11 May 23 21:33 13i386-default-master-list-i38686
[dan@pkg01:/usr/local/poudriere/data/packages]: $ ls -ld *master-list* | egrep -e '122|13'
drwxr-xr-x  3 root  wheel  13 Aug 28 04:18 122amd64-default-master-list
drwxr-xr-x  4 root  wheel  14 Aug 11 08:36 122amd64-dvl-master-list
drwxr-xr-x  3 root  wheel  13 Aug 28 04:22 122i386-default-master-list-i386
drwxr-xr-x  3 root  wheel  13 Aug 28 04:22 13amd64-default-master-list
drwxr-xr-x  3 root  wheel  13 Aug  8 16:13 13amd64-dvl-master-list
drwxr-xr-x  4 root  wheel   5 Aug 27 16:55 13i386-default-master-list
drwxr-xr-x  3 root  wheel  13 Aug 28 04:26 13i386-default-master-list-i386
drwxr-xr-x  3 root  wheel  11 May 23 21:33 13i386-default-master-list-i38686

These are what they will be aliased to:

[dan@pkg01:/usr/local/poudriere/data/packages]: $ ls -ld *primary*
drwxr-xr-x  3 root  wheel  13 Aug 29 05:20 122amd64-default-primary
drwxr-xr-x  3 root  wheel  13 Aug 29 06:37 122i386-default-primaryi386
drwxr-xr-x  3 root  wheel  13 Aug 29 08:38 13amd64-default-primary
drwxr-xr-x  3 root  wheel  13 Aug 29 10:14 13i386-default-primaryi386

Not everything will be aliased:

  1. 13i386-default-master-list-i38686 is a typo – I put one too many 86’s in the build name
  2. Anything containing dvl is me running testport

The configuration file at /usr/local/etc/nginx/nginx.conf already contains:

        location /packages {
            root      /usr/local/poudriere/data;
            autoindex on;
            index     index.html index.htm;

Let’s start with this host for testing:

[dan@empty:~] $ pkg -vv | grep url
    url             : "pkg+",

For testing, I first created this file:

[dan@pkg01:/usr/local/poudriere/data/packages]: $ sudo touch 13amd64-default-master-list/THINGS

Then browsed to the above mentioned URL and saw the empty file THINGS listed there. OK, this proves I’m looking at the old data.

Directory listing showing THINGS in the browser

Directory listing showing THINGS in the browser

Next, I added an alias, which failed. I’ll explain why later.

        location /packages/13amd64-default-master-list {
            alias /packages/13amd64-default-primary;

That gives a 404:

2001:470:8abf:[redacted] - - [29/Aug/2021:16:35:03 +0000] "GET /packages/13amd64-default-master-list/ HTTP/1.1" 404 153 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Safari/605.1.15"

Why? The target of the alias should be a directory, not a URL. Let’s try this instead:

Let’s try this instead:

        location /packages/13amd64-default-master-list {
            alias /usr/local/poudriere/data/packages/13amd64-default-primary;

That is an improvement, but gives a Forbidden.

Let’s try this, just like /packages above.

        location /packages/13amd64-default-master-list {
            alias /usr/local/poudriere/data/packages/13amd64-default-primary;
            autoindex on;
            index     index.html index.htm;

That works, and as shown by the screen shot, there is no THINGS file, so I know I’m in the right place.

NOTE: I’ll go back and delete that file later.

Rewrite may be better

I think rewrite is better than alias for this situation.

Let’s try it:

Based on the documentation, I’ll try this:

        # master-list became primary - to help poudriere with hyphens in set
        # names - see
        rewrite ^(/packages/.*)master-list/(.*)$ $1primary/$2 last;
        rewrite ^(/packages/.*)master-list-i386/(.*)$ $1primaryi386/$2 last;

That is much cleaner and replaces the entire location directive I was using.

Further testing

For more testing, I created WRONG files in the old directories:

[dan@pkg01:/usr/local/poudriere/data/packages]: $ sudo touch 122amd64-default-master-list/WRONG
[dan@pkg01:/usr/local/poudriere/data/packages]: $ sudo touch 122i386-default-master-list-i386/WRONG
[dan@pkg01:/usr/local/poudriere/data/packages]: $ sudo touch 13amd64-default-master-list/WRONG
[dan@pkg01:/usr/local/poudriere/data/packages]: $ sudo touch 13i386-default-master-list/WRONG
[dan@pkg01:/usr/local/poudriere/data/packages]: $ sudo touch 13i386-default-master-list-i386/WRONG

NOTE: 13i386-default-master-list is wrong by definition. It should never be built. It should always be: 13i386-default-master-list-i386 with the trailing -i386. That is my naming convention.

There is nothing in there but my file:

[dan@pkg01:/usr/local/poudriere/data/packages]: $ ls -l 13i386-default-master-list
total 1
-rw-r--r--  1 root  wheel  0 Aug 29 16:50 WRONG
[dan@pkg01:/usr/local/poudriere/data/packages]: $ ls -dl 13i386-default-master-list
drwxr-xr-x  4 root  wheel  6 Aug 29 16:50 13i386-default-master-list
[dan@pkg01:/usr/local/poudriere/data/packages]: $ 

I suspect a failed build, halted when I realized my error. I’m removing it:

[dan@pkg01:/usr/local/poudriere/data/packages]: $ sudo rm -rf 13i386-default-master-list
[dan@pkg01:/usr/local/poudriere/data/packages]: $ 

When I commented out those rewrite statements, restarted nginx and browsed to all those URLs, I saw WRONG listed.

Conclusion: the rewrite work. I’m keeping them.

EDIT: 2021-09-04 – still working well. Success.

Website Pin Facebook Twitter Myspace Friendfeed Technorati Digg Google StumbleUpon Premium Responsive