synth man page on DragonFly

Man page or keyword search:  
man Server   44335 pages
apropos Keyword Search (all sections)
Output format
DragonFly logo
[printable version]

SYNTH(1)		  BSD General Commands Manual		      SYNTH(1)

NAME
     synth — custom package repository builder for FreeBSD and DragonFly

SYNOPSIS
     synth [help | configure | version | status | purge-distfiles]
     synth [rebuild-repository | prepare-system | upgrade-system]
     synth [everything | status-everything]
     synth [status | build | just-build | install | force | test]
	   [file | port-origin ...]

DESCRIPTION
     The synth program is an advanced concurrent ports building tool aimed at
     system administrators that prefer or require the building of packages
     from source rather than installing official binary packages.  synth will
     build packages in a clean environment can exactly mirror the system that
     they are built on, it will create local package respositories and install
     pkg(8) repository configuration file that causes locally built packages
     to be used with the highest priority, all while allowing the system to
     fully upgraded with a single command.

   synth version
     When synth is executed with the version command, an unknown command, or
     no command at all, it will display a short block of text containing an
     identification, summary, version number, copyright, usage, and a summary
     of valid commands.

   synth help
     The help command displays lists each valid command with a short synopsis
     of the command's function. It also elaborates the several commands expect
     one or more port origins to be provided, or a path to a file with the
     same information.

   synth configure
     The configure command launches an interactive menu for providing the user
     with a clean method to configure synth.  It works on the concept of pro‐
     files, and the default profile “LiveSystem” is automatically installed
     with values that are determined by scanning the system. Most of the con‐
     figurable items are directories that are used to construct the build
     environment, but they aren't limited to that.

     Ports directory	       If the PORTSDIR environment variable is set
			       when the initial profile is created, it estab‐
			       lishes the initial value. Otherwise, synth will
			       extract the value of PORTSDIR from
			       /usr/share/mk and use that.  If neither source
			       points to a valid path, /usr/dports and
			       /usr/ports will be successfully tried.  If
			       those don't exist either, synth will exit with
			       an error message.

     Packages directory	       This is the location of the local repository
			       metadata and all the packages that are built by
			       synth.  It clearly must have lots of available
			       disk space. The default value is
			       /var/synth/live_packages but it should be
			       altered if the system has a /var partition with
			       limited space.

     Distfiles directory       This indicates where all the ports source dis‐
			       tribution files are stored, and the initial
			       value is determined by scanning the existing
			       configuration. The defaults are defined by
			       ports and are /usr/ports/distfiles for
			       (FreeBSD) and /usr/distfiles for (DragonFly).
			       Most users will want to keep the initial value
			       as that directory should already contain dist‐
			       files.

     Port options directory    This is the directory where all the selected
			       options for ports are cached.  The initial
			       value comes from a system scan, so chances are
			       it has the correct value. However, if the user
			       would like a separate configuration area for
			       port options, they would create the new direc‐
			       tory and set this value accordingly (but the
			       user would have to ensure the new location is
			       passed to the port when configuring port
			       options later in that case).

     Build logs directory      A log is produced for every port built (subse‐
			       quent builds of the same port will overwrite
			       previous logs). This item dictates where those
			       logs are stored, which is /var/log/synth by
			       default. If the /var partition is limited, the
			       user will definitely want to change this loca‐
			       tion as the uncompressed logs can potentially
			       consume gigabyte of space.

     Build base directory      This is the mount point for all the builders.
			       When tmpfs is used, this location requires very
			       little space as it contains empty directories
			       that serve as mount points. If tmpfs is not
			       used, then this location should have access to
			       a lot available diskspace as it will provide
			       the work area and virtual /usr/local for each
			       builder. The default location of
			       /usr/obj/synth-live should be fine for most
			       users (it generally has lots of space and tmpfs
			       is the default build mode).

     System root directory     Most users will use the base system as the
			       basis for the build environment, and thus the
			       default setting of / is correct. Advanced users
			       may use DESTDIR with installworld to create an
			       alternative build base (e.g. i386 cross-build
			       on amd64 architecture or a modified base that
			       serves as a fallout test for an upcoming fea‐
			       ture). Those would be the users that would mod‐
			       ify this value.

     Compiler cache directory  If ccache is properly installed on the system,
			       set this value to the location of the cache.
			       All the builders will leverage it. It is dis‐
			       abled by default.  It can be disabled again by
			       entering any invalid path as a new value, e.g.
			       “none”.

     Num. concurrent builders  The represents the number of ports that can be
			       simultaneously built on the system. The
			       selected value is influenced by the number of
			       physical cores and hyperthreads the system has,
			       the amount of memory on the system, the amount
			       of available swap, and if that swap is a solid-
			       state drive or not. Generally memory is the
			       limiting resource when tmpfs is used, so the
			       default value for the number of builders is
			       generally 75% of the number of CPUs of the sys‐
			       tem.  The user is free to balance jobs versus
			       builders as well.

     Max. jobs per builder     If memory is constrained, it's often a better
			       performance tradeoff to reduce the number of
			       builders and increase the number of jobs per
			       builder. The default value varies depending on
			       the system, but it will never exceed 5.

     Use tmpfs for work area   If the initial scan shows there is at least
			       1.25 Gb per builder, this item will default to
			       “true”.	Building on tmpfs is a big speed spot
			       and it's recommended if the memory resources
			       allow it. This item is directed at the work
			       area for building the port

     Use tmpfs for /usr/local  Before a port can start building, all the build
			       and library dependencies have to be installed
			       into the localbase. Extracting, installing and
			       later deinstalling is a lot of work for a disk,
			       so using tmpfs here is another performance
			       boost. It is recommended that users with ade‐
			       quate memory leave this enabled.

     Display using ncurses     During the concurrent building, the default
			       display is constructed using ncurses. It shows
			       a lot of good information and it should be
			       used. The display will fall back to a text mode
			       if the terminal doesn't support it.  This set‐
			       ting forces text mode unconditionally, but few
			       users will want or need to use this option.

     Fetch prebuilt packages   When active, this option will scan the external
			       repository for suitable prebuilt packages to
			       satisfy build requirements.  To be considered
			       suitable, the ABI, options, and dependencies of
			       the remote package must all match requirements.
			       If a package is located, it will be fetched and
			       placed in the packages directory and later
			       incorporated into the local repository.	This
			       option is not active by default, meaning that
			       synth will normally build everything from
			       source and ignore external repositories.

     To create alternative profiles, press the “>” key at the prompt. A new
     menu will appear that provides options to switch to another existing pro‐
     file or create a new one that can be tailored and named. Any newly cre‐
     ated profile becomes the new default profile, but this can be easily
     changed by repeating the profile selection process.

     Pressing the Alphabetic key associated with each configuration item
     brings up a prompt to change the value. Directory entries must be valid
     paths except in the case of ccache. The boolean values are modified with
     a single keypress (“T” or “F”) and the numeric items require positive
     integers. After changing the values, the old menu returns and altered
     values are marked with an asterisk.  Simply entering the “Enter” key
     (carriage return) saves the changes while pressing the “Escape” key will
     discard them.

   synth upgrade-system
     The upgrade-system command automates the full upgrade of the system upon
     which synth is installed. It is expected that the ports tree has been
     updated to the latest version before the command is executed. Using the
     ports tree as a reference, synth will query pkg(8) to determine what is
     currently installed and which software has newer versions available. It
     will rebuild those packages and any package that depends libraries they
     contain or that have a runtime dependency on the rebuild packages. In
     addition, any port that has changed with respect to its options, depen‐
     dencies, or ABI will be rebuilt as well. After analysis, the concurrent
     builder will begin building the set of packages that have been identified
     as requiring a rebuild. When that phase is complete, the local repository
     will be rebuilt without waiting for confirmation. Finally, synth will
     command pkg(8) to upgrade the system using the local repository, effec‐
     tively bringing it completely up to date.

   synth prepare-system
     The prepare-system command has the same functionality of the
     upgrade-system command with the exception that the packages will not be
     installed. Once the local repository is fully rebuilt, the command exits.

   synth rebuild-repository
     The rebuild-repository command will perform a full sanity check on all
     packages present in the packages directory and remove the ones which fail
     the check.	 The local Synth repository will be created (or recreated)
     using the remaining packages.  This step is also done as part of several
     other commands, so it mainly exists for scripting purposes.

   synth status
     The status command with no arguments performs a dry-run of the
     upgrade-system command. It will not delete obsolete packages, nor rebuild
     the local repository. It will list all the ports that will be rebuild
     along with a total, and it also logs the same information to
     /tmp/synth_status_results.txt since the full list is often longer than
     the terminal height.

   synth just-build [file | port-origin ...]
     The just-build command takes a list (one or more) of port origins (an
     origin is the combination of a category and the port directory, e.g.
     lang/python27) and it will builds the packages of those ports if neces‐
     sary. If analysis determines the packages are already up to date, nothing
     is done.

     This is the first of several commands that take arguments. The arguments
     are either an unlimited number of port origins, e.g.

	    synth just-build editors/joe editors/nano editors/libreoffice

     or they are limited to one, a path to a file, e.g.

	    synth just-build /tmp/build.list

     A file that is equivalent to the first example would contain:

	    editors/joe
	    editors/nano
	    editors/libreoffice

     When the building task is complete, synth exits.

   synth build [file | port-origin ...]
     The build command differs from the just-build command by asking the user
     if they wish to rebuild the local repository when the building is com‐
     plete. The answer is usually “N” (for “no”) because rebuilding the repos‐
     itory can take a few minutes to complete, and it only makes sense to do
     when all the building is complete. Should the user opt to rebuild the
     repository, synth will then ask if the user wishes to install the pack‐
     ages that come from the ports list on the system.

   synth install [file | port-origin ...]
     The install command is similar to the build command except that it will
     not ask permission to rebuild the repository or install the resulting
     packages. It will just do it all in sequence.

   synth force [file | port-origin ...]
     The force command is similar to the build command except that any pack‐
     ages related to the ports list will be deleted first, regardless if they
     are up to date or not. This results in that every port on the given list
     will build.  As with the build command, synth will request permission to
     rebuild the repository and possibly install the packages when the build‐
     ing phase is complete.

   synth test [file | port-origin ...]
     The test command will pre-delete any existing packages related to the
     ports list before rebuilding them with extra DEVELOPER_MODE tests and
     settings. When the building is complete, it will just exit without offer‐
     ing to rebuild the repository.

   synth status [file | port-origin ...]
     This version of the status command provides a dry-run and reports on what
     would happen if the just-build command was executed with the same argu‐
     ments. The output and logging is similar to the solo status command, but
     the build scope is limited to the given ports list.

   synth everything
     The everything command is not meant for most users. It will attempt to
     build every port in the ports tree, which can take several days depending
     on the power and resources of the building machine. Even downloading the
     tens of gigabytes worth of distfiles consumes significant time!

   synth status-everything
     The status-everything command is just a dry-run for the everything com‐
     mand. Since synth works through increment building (that is, it will not
     build a port if an up to date package already exists for it and all the
     packages dependencies are also in place) , the resultant build list can
     be much shorter than the full list of ports in the tree. Only those rare
     users that wish to build the entire set of ports would use this command.

   synth purge-distfiles
     This is a useful command that will first scan the entire ports tree to
     gather a full list of distfiles used by ports, and then it will scan the
     contents of the given distfiles directory. All source distribution files
     that cannot be matched to at least one port will be removed. This can
     result in gigabytes of recovered disk space if significant time has
     passed since the distfiles directory was last cleaned.

ENVIRONMENT
     PORTSDIR	   The PORTSDIR environment variable is only checked on the
		   very first signficant command of synth (meaning everything
		   except help and version) when the default profile is cre‐
		   ated. It is also checked when adding new profiles. The
		   variable dictates the default location of the ports tree
		   with a higher priority than the standard locations.

     SYNTHPROFILE  When this environment variable is set to name of an exist‐
		   ing synth profile, that profile will be loaded when synth
		   is launch rather than the active profile.  It is a tempo‐
		   rary override; removing the variable will allow the default
		   profile to load again.

     WHYFAIL	   When this environment variable is defined to any value, the
		   sanity check routines will provide more detail on depen‐
		   dency and option check failures on a separate output line.

     ENTERAFTER	   This environment variable only applies with the test com‐
		   mand, and then only when a single port is specified.	 If
		   both of those conditions are satisfied, and the variable
		   has the value of:
		   - extract
		   - patch
		   - configure
		   - build
		   - stage
		   - install
		   - deinstall
		   then an interactive build will be attempted. First, all the
		   port's prerequisites are built normally and synth will
		   return to text mode. If everything built successfully, the
		   specified port will build up to and including the point
		   specified by ENTERAFTER. At that point, control will be
		   given to the user by providing them with a tcsh shell with
		   the current directory set at the root of the builder.  When
		   the user is done, they should terminate the shell with the
		   exit command to signal synth to clean up and terminate.
		   This is a developer tool to troubleshoot port build prob‐
		   lems and it is not intended for the average user.

FILES
     The following files may be used or created:

     synth.ini	       This is the configuration file. It is automatically
		       generated and manipulated using the interactive config‐
		       uration menu. There is no need to touch this file other
		       than to remove unwanted profiles as currently that is
		       not possible from the program itself. It is normally
		       located at /usr/local/etc/synth/synth.ini

     <profile>-make.conf
		       This is an optional, user-provided file. If it exists,
		       the builder's /etc/make.conf will be appended with the
		       contents of this file. For the default profile, the
		       file would normally be located at
		       /usr/local/etc/synth/LiveSystem-make.conf

     <profile>-environment
		       This is an optional, user-provided file. It contains a
		       list of name-value pairs joins with an equals sign
		       (e.g. HTTP_PROXY=http://proxyserver:8888), one pair per
		       line.  If the file exists, these variables will be
		       defined in the builder environment.  For the default
		       profile, the file would normally be located at
		       /usr/local/etc/synth/LiveSystem-environment

     synth_status_results.txt
		       Whenever a status command is run, a list of ports that
		       would build with the actual command is produced at
		       /tmp/synth_status_results.txt

     synth_prefetch_list.txt
		       Whenever a status command is run, and the option to use
		       suitable prebuilt packages has been selected, a list of
		       packages that will be fetched as a result will be writ‐
		       ten to /tmp/synth_prefetch_list.txt

     port logs	       Every single attempt at building a port results in a
		       build log. The name of the log is always in the form of
		       [category]___[port].log so that subsequent builds will
		       overwrite previous attempts. They are created in the
		       directory specified by the configuration.

     hook_run_start    If this file exists, and it is executable (or it is a
		       symbolic link that leads to an executable file) then it
		       will be executed by synth at the start of the build.
		       The same requirement exists for all hooks. This hook,
		       and the next five hooks all define the following common
		       environment variables: PROFILE, DIR_PACKAGES,
		       DIR_REPOSITORY, DIR_PORTS, DIR_OPTIONS, DIR_DISTFILES,
		       DIR_LOGS, DIR_BUILDBASE.	 Uniquely, this hook also
		       defines PORTS_QUEUED which is the number of ports that
		       synth will attempt to build. This file must be colated
		       with synth.ini, so that would be
		       /usr/local/etc/synth/hook_run_start for most installa‐
		       tions.

     hook_run_end      This hook is fired when the build completes. In addi‐
		       tion to the common definitions, it defines PORTS_BUILT,
		       PORTS_FAILED, PORTS_IGNORED, and PORTS_SKIPPED in the
		       environment, which represents the results of the build.

     hook_pkg_success  This hook is fired whenever a builder successfully
		       packages a port. In addition to the common definitions,
		       it defines RESULT=success, ORIGIN, and PKGNAME in the
		       environment.

     hook_pkg_failure  This hook is fired whenever a builder fails to package
		       a port. In addition to the common definitions, it
		       defines RESULT=failure, ORIGIN, and PKGNAME in the
		       environment.

     hook_pkg_ignored  This hook is fired prior to the start of a build when
		       synth prescans the queue for ports that are to be
		       ignored according to the ports tree. Once the build has
		       started, this hook is never fired again. In addition to
		       the common definitions, it defines RESULT=ignored,
		       ORIGIN, and PKGNAME in the environment.

     hook_pkg_skipped  This hook is fired whenever a package gets ignored or
		       fails which in turns cascades into a number of ports
		       getting removed from the build queue due to the depen‐
		       dency's failure. This may fire before the build starts
		       due to ignored prescanning, or any time during the
		       build. In addition to the common definitions, it
		       defines RESULT=skipped, ORIGIN, and PKGNAME in the
		       environment.

SEE ALSO
     pkg(8)

NOTES
   Graceful exit
     During development, the interrupt signal (SIGINT) was captured and han‐
     dled. It turns out this handling extended to the builders, so any event
     resulting in a SIGINT in the build would lock up the builder permanently.
     There's no apparent workaround for this given the design, so pressing
     Control-C is no longer handled. It will stop the build, but it will leave
     everything in bad state. The next significant call to synth will attempt
     to clean that up though. If a user wants to stop the build, the best
     approach is to hit the Control-Q key combination. The program will shut
     down as soon as it can. During the building phase, that mean no new
     builds will start, but the current builds will continue until completion.

   Unprivileged users
     At this time, synth can only be run by the root user.

   Impulse indicator
     A common question is "What does the Impulse indicator on the display
     mean?"  It is the package build rate (packages/hour) over the last 500
     seconds.  For the first roughly ten minutes of a bulk run, the “Impulse”
     rate and the “Pkg/Hour” rate will be identical. After that, the “Impulse”
     build rate will differ from the rate averaged over the entire elapsed
     time, often by a great amount.  It's just a way to gauge the package pro‐
     duction rate over the previous few minutes.

   Supported architectures
     Synth is written in Ada, and thus an Ada compiler or cross-compiler is
     required to build it. For FreeBSD, that means synth is currently limited
     to amd64 and i386. It is feasible to port GNAT to the ARMv7 architecture
     as this has already been done (See lang/gnatdroid-armv7 port) but it's
     not a trivial task to do it. Other architectures would be challenging,
     although not impossible, to support.

HISTORY
     synth was conceived long before coding began in December of 2015. It was
     designed to be system-agnostic from the beginning, and in particular sup‐
     port for FreeBSD and DragonFly was added simulaneously. It was hoped that
     it would attract users of the older PortMaster and PortUpgrade ports man‐
     agement tools by providing them with a superior and well-maintained
     alternative.

     synth was written entirely by John Marino ⟨marino@FreeBSD.org⟩ and
     released under the Internet Software Consortium license.

BSD			       February 10, 2016			   BSD
[top]

List of man pages available for DragonFly

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net