Skip to content

Caching freebsd-update and pkg files

Change the domains as appropriate. The proxy_store location is where the cached files will be placed. This directory needs to be accessible by the user that NGINX is running as (defaults to www).

NGINX config:

# pkg
server {

  listen *:80;

  server_name           pkg.mydomain.local;

  access_log            /var/log/nginx/pkg.access.log;
  error_log             /var/log/nginx/pkg.error.log;

  location / {
    root      /var/cache/packages/freebsd;
    try_files $uri @pkg_cache;
  }

  location @pkg_cache {
    proxy_pass                  https://pkg.freebsd.org;
    proxy_set_header            Host $host;
    proxy_cache_lock            on;
    proxy_cache_lock_timeout    20s;
    proxy_cache_revalidate      on;
    proxy_cache_valid           200 301 302 30d;
    proxy_store                 /var/cache/packages/freebsd/$request_uri;
  }

}

# freebsd-update
server {

  listen *:80;

  server_name           freebsd-update.mydomain.local;

  access_log            /var/log/nginx/freebsd_update.access.log;
  error_log             /var/log/nginx/freebsd_update.error.log;

  location / {
    root      /var/cache/freebsd-update;
    try_files $uri @freebsd_update_cache;
  }

  location @freebsd_update_cache {
    proxy_pass                  http://update.freebsd.org;
    proxy_set_header            Host update.freebsd.org;
    proxy_cache_lock            on;
    proxy_cache_lock_timeout    20s;
    proxy_cache_revalidate      on;
    proxy_cache_valid           200 301 302 30d;
    proxy_store                 /var/cache/freebsd-update/$request_uri;
  }

}

Client config:

Create /usr/local/etc/pkg/repos/FreeBSD.conf with this content:

FreeBSD: { enabled: NO }
MyRepo: {
    url: "pkg+http://pkg.mydomain.local/${ABI}/latest",
    enabled:    true,
    signature_type: "fingerprints",
    fingerprints: "/usr/share/keys/pkg",
    mirror_type: "srv"
}

Edit /etc/freebsd-update.conf, change ServerName value to freebsd-update.mydomain.local.