USE_TMPFS=all context: poudriere bulk -a fails for the tmpfs : /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/.p having no space left

From: Mark Millard <marklmi_at_yahoo.com>
Date: Fri, 26 Apr 2024 06:59:39 UTC
# poudriere version
poudriere-git-3.4.99.20240419

Note the "1024 1024 0 100%" for /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/.p
It is the only "Avail" being near or at 0.

# df -m
Filesystem                                                             1M-blocks   Used  Avail Capacity  Mounted on
zoptb/ROOT/main-amd64                                                     667579   4902 662676     1%    /
. . .
tmpfs                                                                       1024   1024      0   100%    /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/.p
/usr/ports                                                                667677   5001 662676     1%    /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/usr/ports
/usr/local/poudriere/data/packages/main-amd64-bulk_a-default/.building    797764 135087 662676    17%    /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/packages
/usr/ports/distfiles                                                      667677   5001 662676     1%    /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/distfiles
tmpfs                                                                     707954      0 707954     0%    /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/var/db/portspoudreire 


The actual errors that show up start after "Gathering ports metadata":

[00:00:01] [Dry Run] Loading MOVED for /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/usr/ports
[00:00:01] [Dry Run] Gathering ports metadata
[00:00:15] [Dry Run] Warning: (sysutils/pacman): make: "/usr/ports/Mk/bsd.options.mk" line 480: Unknown modifier "local//"
[00:00:15] [Dry Run] Warning: (sysutils/pacman): make: "/usr/ports/Mk/bsd.options.mk" line 482: Unknown modifier "local//"
[00:00:15] [Dry Run] Warning: (sysutils/pacman): make: "/usr/ports/Mk/bsd.options.mk" line 480: Unknown modifier "local//"
[00:00:15] [Dry Run] Warning: (sysutils/pacman): make: "/usr/ports/Mk/bsd.options.mk" line 482: Unknown modifier "local//"
[00:00:15] [Dry Run] Warning: (sysutils/pacman): make: "/usr/ports/Mk/bsd.options.mk" line 480: Unknown modifier "local//"
[00:00:15] [Dry Run] Warning: (sysutils/pacman): make: "/usr/ports/Mk/bsd.options.mk" line 482: Unknown modifier "local//"
[00:00:15] [Dry Run] Warning: (sysutils/pacman): make: "/usr/ports/Mk/bsd.options.mk" line 480: Unknown modifier "local//"
[00:00:15] [Dry Run] Warning: (sysutils/pacman): make: "/usr/ports/Mk/bsd.options.mk" line 484: Unknown modifier "local//"
[00:00:15] [Dry Run] Warning: (sysutils/pacman): make: Fatal errors encountered -- cannot continue
[00:00:15] [Dry Run] Warning: (sysutils/pacman): Error: Error looking up dependencies for sysutils/pacman
[00:00:18] [Dry Run] Warning: (www/rubygem-socksify): Error: (91456) /usr/local/share/poudriere/bulk.sh:shash_set:257: cannot create var/cache/pkgname-deps-run%rubygem-socksify-1.7.1: No space left on device
[00:00:18] [Dry Run] Warning: (www/rubygem-socksify): Error: (91456) /usr/local/share/poudriere/bulk.sh:shash_set:257: cannot create var/cache/pkgname-run_deps%rubygem-socksify-1.7.1: No space left on device
[00:00:18] [Dry Run] Warning: (www/rubygem-sitemap_generator): Error: /usr/local/share/poudriere/bulk.sh:deps_fetch_vars:177:Duplicated origin for rubygem-sitemap_generator-6.3.0: www/rubygem-sitemap_generator AND . Rerun with -v to see which ports are depending on these.
[00:00:18] [Dry Run] Warning: (www/rubygem-sinatra1): Error: /usr/local/share/poudriere/bulk.sh:deps_fetch_vars:177:Duplicated origin for rubygem-sinatra1-1.4.8: www/rubygem-sinatra1 AND . Rerun with -v to see which ports are depending on these.
[00:00:18] [Dry Run] Warning: (www/rubygem-tailwindcss-rails-rails70): Error: /usr/local/share/poudriere/bulk.sh:deps_fetch_vars:177:Duplicated origin for rubygem-tailwindcss-rails-rails70-1.0.0: www/rubygem-tailwindcss-rails-rails70 AND . Rerun with -v to see which ports are depending on these.
. . .
[00:00:19] [Dry Run] Warning: (x11-wm/cosmic-comp): Error: /usr/local/share/poudriere/bulk.sh:deps_fetch_vars:177:Duplicated origin for cosmic-comp-s20240419: x11-wm/cosmic-comp AND . Rerun with -v to see which ports are depending on these.
[00:00:19] [Dry Run] Warning: (x11-wm/niri): Error: /usr/local/share/poudriere/bulk.sh:deps_fetch_vars:177:Duplicated origin for niri-0.1.5: x11-wm/niri AND . Rerun with -v to see which ports are depending on these.
[00:00:19] [Dry Run] Error: /usr/local/share/poudriere/bulk.sh:gather_port_vars:125:Fatal errors encountered gathering initial ports metadata
[main-amd64-bulk_a-default] [2024-04-26_05h44m38s] [crashed] Time: 00:00:18
[00:00:19] [Dry Run] Logs: /usr/local/poudriere/data/logs/bulk/main-amd64-bulk_a-default/2024-04-26_05h44m38s
[00:00:19] [Dry Run] Cleaning up
Error: (3616) _mktemp:_mktemp:257: mkstemp failed on ../usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/.p/tmp/parallel.pipe.4kKzIqN2: No space left on device
Error: (5921) mkfifo:parallel_start:1: : No such file or directory
Error: (5921) exit:parallel_start:1: cannot create : No such file or directory


The 1024 figure seems to be tied to:

do_portbuild_mounts() {
        [ $# -eq 4 ] || eargs do_portbuild_mounts mnt jname ptname setname
        local mnt="$1"
        local jname="$2"
        local ptname="$3"
        local setname="$4"
        local optionsdir opt o msgmount msgdev

        # Create our data dirs
        MNT_DATADIR="${mnt:?}/${DATADIR_NAME:?}"
        mkdir -p "${MNT_DATADIR:?}"
        add_relpath_var MNT_DATADIR
        if [ ${TMPFS_DATA} -eq 1 -o ${TMPFS_ALL} -eq 1 ]; then
                mnt_tmpfs data "${MNT_DATADIR:?}"
        fi
. . .

and:

mnt_tmpfs() {
        [ $# -ge 2 ] || eargs mnt_tmpfs type dst
        local type="$1"
        local dst="$2"
        local limit size
                 case ${type} in
                data)
                        # Limit data to 1GiB
                        limit=1
                        ;;
                         *)
                        limit=${TMPFS_LIMIT}
                        ;;
        esac
                                 size=
        case "${limit:+set}" in
        set) size="-o size=${limit}G" ;;
        esac
                 mount -t tmpfs ${size} tmpfs "${dst:?}"
}

If I use limit=2 I still get the early error messages but not
the later ones:

# poudriere bulk -jmain-amd64-bulk_a -a -n
[00:00:01] [Dry Run] Creating the reference jail... done
[00:00:01] [Dry Run] Mounting system devices for main-amd64-bulk_a-default
[00:00:01] [Dry Run] Stashing existing package repository
[00:00:01] [Dry Run] Mounting ports from: /usr/ports
[00:00:01] [Dry Run] Mounting packages from: /usr/local/poudriere/data/packages/main-amd64-bulk_a-default
[00:00:01] [Dry Run] Mounting distfiles from: /usr/ports/distfiles
[00:00:01] [Dry Run] Copying /var/db/ports from: /usr/local/etc/poudriere.d/options
[00:00:01] [Dry Run] Appending to make.conf: /usr/local/etc/poudriere.d/make.conf
[00:00:01] [Dry Run] Appending to make.conf: /usr/local/etc/poudriere.d/main-amd64-bulk_a-make.conf
[00:00:01] [Dry Run] Warning: DEVELOPER=yes ignored from make.conf. Use 'bulk -t' or 'testport' for testing instead.
/etc/resolv.conf -> /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/etc/resolv.conf
[00:00:01] [Dry Run] Starting jail main-amd64-bulk_a-default
Updating /var/run/os-release done.
[00:00:01] [Dry Run] Will build as nobody:nobody (65534:65534)
[00:00:02] [Dry Run] Ports supports: FLAVORS SUBPACKAGES SELECTED_OPTIONS
[00:00:02] [Dry Run] Inspecting /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref//usr/ports for modifications to git checkout... yes
[00:00:02] [Dry Run] Ports top-level git hash: 62a76b7dc95a (dirty)
[00:00:02] [Dry Run] Acquiring build logs lock for main-amd64-bulk_a-default... done
[00:00:02] [Dry Run] Logs: /usr/local/poudriere/data/logs/bulk/main-amd64-bulk_a-default/2024-04-26_06h32m01s
[00:00:02] [Dry Run] Loading MOVED for /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/usr/ports
[00:00:02] [Dry Run] Gathering ports metadata
[00:00:16] [Dry Run] Warning: (sysutils/pacman): make: "/usr/ports/Mk/bsd.options.mk" line 480: Unknown modifier "local//"
[00:00:16] [Dry Run] Warning: (sysutils/pacman): make: "/usr/ports/Mk/bsd.options.mk" line 482: Unknown modifier "local//"
[00:00:16] [Dry Run] Warning: (sysutils/pacman): make: "/usr/ports/Mk/bsd.options.mk" line 480: Unknown modifier "local//"
[00:00:16] [Dry Run] Warning: (sysutils/pacman): make: "/usr/ports/Mk/bsd.options.mk" line 482: Unknown modifier "local//"
[00:00:16] [Dry Run] Warning: (sysutils/pacman): make: "/usr/ports/Mk/bsd.options.mk" line 480: Unknown modifier "local//"
[00:00:16] [Dry Run] Warning: (sysutils/pacman): make: "/usr/ports/Mk/bsd.options.mk" line 482: Unknown modifier "local//"
[00:00:16] [Dry Run] Warning: (sysutils/pacman): make: "/usr/ports/Mk/bsd.options.mk" line 480: Unknown modifier "local//"
[00:00:16] [Dry Run] Warning: (sysutils/pacman): make: "/usr/ports/Mk/bsd.options.mk" line 484: Unknown modifier "local//"
[00:00:16] [Dry Run] Warning: (sysutils/pacman): make: Fatal errors encountered -- cannot continue
[00:00:16] [Dry Run] Warning: (sysutils/pacman): Error: Error looking up dependencies for sysutils/pacman
[00:00:20] [Dry Run] Error: /usr/local/share/poudriere/bulk.sh:gather_port_vars:125:Fatal errors encountered gathering initial ports metadata
[main-amd64-bulk_a-default] [2024-04-26_06h32m01s] [crashed] Time: 00:00:18
[00:00:20] [Dry Run] Logs: /usr/local/poudriere/data/logs/bulk/main-amd64-bulk_a-default/2024-04-26_06h32m01s
[00:00:20] [Dry Run] Cleaning up
[00:00:20] [Dry Run] Unmounting file systems


That should establish that limit=1 is a problem.


The sysutils/pacman problems seems to be tied to its Makefile 's:

SUB_FILES=      pkg-message pkg-deinstall
SUB_LIST=       PACMAN_ROOT="${PACMAN_ROOT}" PREFIX="${PREFIX}"
PLIST_SUB=      PACMAN_ROOT="${PACMAN_ROOT:C/^${PREFIX}//}"

leading to bad PLIST_SUB usage in /usr/ports/Mk/bsd.options.mk :

.      if ! ${PLIST_SUB:M${opt}=*}
.        if ${PORT_OPTIONS:M${opt}}
PLIST_SUB:=     ${PLIST_SUB} ${opt}="" NO_${opt}="@comment "
.        else
PLIST_SUB:=     ${PLIST_SUB} ${opt}="@comment " NO_${opt}=""
.        endif
.      endif



===
Mark Millard
marklmi at yahoo.com