First experiences with ports-mgmt/synth
I spun up a virtual machine yesterday with the intent of learning how to use ports-mgmt/synth
.
I installed the FreeBSD/amd64 stable/11 r326620 snapshot. I used the defaults for a three-way raidz1 zpool.
I nuked the contents of /usr/ports
and pulled new working copies of the source and ports trees from our unofficial, local Subversion mirror. I created /usr/ports/distfiles
, /usr/ports/local
, /usr/ports/packages
, /usr/ports/workdirs
, /var/cache/ccache
, /var/synth
, and /var/synth/live_packages
as separate ZFS filesystems. /var/cache
was created as an intermediary filesystem with the ZFS canmount
property set to off
.
The ports collection was instructed to store work directories in /usr/ports/workdirs
.
WRKDIRPREFIX=/usr/ports/workdirs
I installed ports-mgmt/pkg
, ports-mgmt/dialog4ports
, devel/ccache
, and ports-mgmt/synth
using the ports tree.
ccache
was configured to use 16G of disk space and to place the cached files in /var/cache/ccache
.
max_size = 16.0G cache_dir = /var/cache/ccache
synth
was instructed to use ccache
from /var/cache/ccache
.
The first run of synth upgrade-system
went without a hitch.
I created a simple, local metaport, mymetaport
.
SUBDIR+= local
COMMENT= Local software SUBDIR+= mymetaport .include <bsd.port.subdir.mk>
PORTNAME= mymetaport PORTVERSION= 2017121300 PORTREVISION= 0 CATEGORIES= local VALID_CATEGORIES+= local MAINTAINER= hostmaster@localhost COMMENT= mymetaport USES= metaport # These two ports must come first in this particular order. RUN_DEPENDS+= pkg>0:${PORTSDIR}/ports-mgmt/pkg RUN_DEPENDS+= dialog4ports>0:${PORTSDIR}/ports-mgmt/dialog4ports # Ports for upgrading 3rd party software. RUN_DEPENDS+= ccache>0:${PORTSDIR}/devel/ccache RUN_DEPENDS+= synth>0:${PORTSDIR}/ports-mgmt/synth # Additional ports as you see fit. #RUN_DEPENDS+= name>0:${PORTSDIR}/category/name .include <bsd.port.mk>
mymetaport WWW: http://localhost/
Next, I began searching for a way of mounting /usr/ports/local
beneeth /xports
for all builders. Using /usr/local/etc/synth/hook_run_start
didn’t give me any results.
Manually mounting /usr/ports/local
as /xports/local
with a 3 seconds delay while running synth upgrade-system
, resulted in synth
nuking all of my files in /usr/ports/local
.
Keeping /usr/ports/local
together with /usr/ports
is an acceptable compromise, but I would avoid it if I can. You should use version control for your local metaports either way. Maybe ports-mgmt/portshaker
is something to look into.
I have reached out to the maintainer of synth
, asking for a way of mounting additional ports subtrees. Maybe my suggestion is unfounded, but I like the FreeBSD idea of separating base from localbase, and I think that should apply equally to the ports tree and any local metaports. I think it will be nice to have a 24h wall clock in the top, right corner of the ncurses display. It will make a nice companion to the clock showing elapsed time.
If you add www/apache24
to your builder, this fragment might be handy:
<IfModule alias_module> Alias /synth-logs /var/log/synth </IfModule> <Directory /var/log/synth> AllowOverride None Options Indexes FollowSymlinks Require all granted </Directory> <IfModule alias_module> Alias /pkg /var/synth/live_packages </IfModule> <IfModule alias_module> Alias /synth /var/synth </IfModule> <Directory /var/synth> AllowOverride None Options Indexes FollowSymlinks Require all granted </Directory>
synth
are far from perfect
Sometimes synth
will complain about some error and grind to a complete standstill.
# synth upgrade-system Regenerating flavor index: this may take a while ... Scanning entire ports tree. progress: 74.12% culprit: sysutils/DtraceToolkit Scan aborted because 'make' encounted an error in the Makefile. sysutils/DtraceToolkit (return code = 1) progress: 74.16%
This problem was due to a typo in head/sysutils/Makefile
, corrected in r459917. And yes, sysutils/DTraceToolkit
was resurrected after being removed in early January.
At any rate, synth
should be able to cope better with these incidents, i.e. clean up and terminate.
I decided to blow away my ports tree and fetch it anew. This cured a problem with print/texlive-full
. Finally, I was able to please synth
.
Use of ccache
Using ccache
outside of synth
, I discovered that /root/.ccache/ccache.conf
is sometimes ignored. ccache
thus places its stuff in /root/.ccache
. Let /root/.ccache
be a symlink to ../var/cache/ccache
.
mv ~/.ccache/ccache.conf /var/cache/ccache rm -Rf ~/.ccache ln -s ../var/cache/ccache ~/.ccache