# synth 1.40 has been released



## marino (Jun 12, 2016)

ports-mgmt/synth: Upgrade version 1.34 => 1.40


```
This release brings a behavioral change to Synth.  The action of building
package repositories is much more conservative now; packages that would
fail sanity checks are only removed under the following commands:
  * synth prepare-system
  * synth upgrade-system
  * synth rebuild-repository
  * synth everything

That means the following commands will never result in built packages
being removed now:
  * synth install
  * synth build (followed by "yes" to rebuild repo question)
  * synth force (followed by "yes" to rebuild repo question)

Other changes/fixes:
  * The PORTSCAN.SEEK_FAILURE exception is usually a false positive and
    should be fixed now
  * Under test mode leftover check, all changes to /var/db between
    installation and deinstallation are ignored rather than being flagged
    as a failure (see databases/mysql56-server test failure)
  * Add support for DragonFly's /boot/modules.local (similar to FreeBSD's
    /boot/modules)
  * Bring in ports patch to use installed libraries instead of the bundled
    versions
```


----------



## marino (Jun 20, 2016)

*ports-mgmt/synth: Upgrade version 1.40 => 1.41*


```
This release adds detection and handling of circular dependencies.
Two users that tried replacing OpenSSL with LibreSSL found out that
ftp/curl depends on itself when its built with GNUTLS.  That's because
Synth goes into an infinity dependency loop, runs out of stack space,
and crashes.

Now Synth can detect a circular dependency and abort gracefully and
informatively, e.g.

> synth status ftp/curl
ftp/curl scan aborted because a circular dependency on ftp/curl was detected.
... backtrace devel/cmake
... backtrace emulators/tpm-emulator
... backtrace security/trousers
... backtrace security/gnutls
... backtrace ftp/curl

While here, build synth with stack-checking on so out-of-stack situations
result in an exception and not an illegal instruction crash.
```


----------



## rhsbsd (Jun 24, 2016)

Upgrading to Synth-1.41 helped resolve my circular dependencies as follows.
	
	



```
# synth status
Querying system about current package installations.
Stand by, comparing installed packages against the ports tree.

graphics/ksaneplugin scan aborted because a circular dependency on devel/dbus was detected.
... backtrace print/cups
... backtrace print/ghostscript9-agpl-base
... backtrace print/texlive-base
... backtrace print/texlive-texmf
... backtrace textproc/dblatex
... backtrace textproc/xmlto
... backtrace devel/dbus
... backtrace devel/dbus-qt4
... backtrace net/hupnp
... backtrace x11/kdelibs4
... backtrace graphics/ksaneplugin
Unfortunately, the system upgrade failed.
```
Using `make rmconfig-recursive` in above listed directories resulted in a successful `synth status` build. I had been trying to resolve this problem using other packaging tools but none had listed the circular reference. Point is I knew I had a problem with cups but could not find it. Previouse versions of Synth core dumped. Excellent job on detecting those. I would be really interested in knowing what command you are using. Absolutely 110% hooked.


----------



## marino (Jun 25, 2016)

I'm glad this new circular logic detection was useful so quickly.
There's no command involved.  With the exception of "everything" commands [1], the scans have to recursively scan each dependency as deep as necessary.  I just added a new flag that is set before the dep scans start and unset it when they are done.  If this flag is set for a dependency before a scan, then it's clear that it has already been seen and the build aborts.  As the routine unwinds the recursion, the parent package is printed out.  Now I thought ports-mgmt/poudriere should be able to detect the presence of circular logic, but not provide any information on which ports are involved.  I could be wrong as I haven't used newer versions of Poudriere on FreeBSD in a long time.


[1] In "everything" mode, the tree is broken down into chunks and scanned in parallel by a number of builders equal to the number of cores on the machine.  So a 4-core machine will scan the tree with 4 builders simultaneously in order.  There are very few users of "everything" though, so this mode doesn't apply to most people.


----------



## ooglek (Jul 18, 2016)

I'm hoping to try Synth, but I've run into a roadblock and it is confusing me.

I'm not running in a Jail, just a 10.3-RELEASE server.

`synth status`

```
raised REPLICANT.SCENARIO_UNEXPECTED : /sbin/mount_tmpfs tmpfs /usr/obj/synth-live/SL09 => failed with code 1
```

Hmmm, ok.

`/sbin/mount_tmpfs`

```
/sbin/mount_tmpfs: Command not found.
```

So where is it?

`ll /sbin/mount*`

```
-r-xr-xr-x  1 root  wheel  24752 Jul 18 16:25 mount*
-r-xr-xr-x  1 root  wheel  12400 Jul 18 16:25 mount_cd9660*
-r-xr-xr-x  1 root  wheel  17832 Jul 18 16:25 mount_fusefs*
-r-xr-xr-x  2 root  wheel  15664 Jul 18 16:25 mount_mfs*
-r-xr-xr-x  1 root  wheel  13048 Jul 18 16:25 mount_msdosfs*
-r-xr-xr-x  2 root  wheel  24472 Jul 18 16:25 mount_nfs*
-r-xr-xr-x  1 root  wheel   9448 Jul 18 16:25 mount_nullfs*
-r-xr-xr-x  2 root  wheel  24472 Jul 18 16:25 mount_oldnfs*
-r-xr-xr-x  1 root  wheel  12064 Jul 18 16:25 mount_udf*
-r-xr-xr-x  1 root  wheel  10472 Jul 18 16:25 mount_unionfs*
```

`locate mount_tmpfs`
nothing found

I've got /tmp mounted as a tmpfs filesystem, so I know it is enabled...
`df -k`

```
Filesystem 1024-blocks     Used    Avail Capacity  Mounted on
/dev/da0p2    66049244 16861748 43903560    28%    /
devfs                1        1        0   100%    /dev
fdescfs              1        1        0   100%    /dev/fd
/dev/md0       1015324       28   934072     0%    /tmp
```

I even tried looking for the man page on `mount_tmpfs` and searched the ports tree for tmpfs and couldn't find anything.

https://www.freebsd.org/cgi/man.cgi...D+Ports+10.3-RELEASE&arch=default&format=html

I've googled "FreeBSD mount_tmpfs" but only found the man page in sunOS, not FreeBSD.

There are no configuration options for the synth port.

Where have I gone wrong, and what can I do about it?


----------



## ooglek (Jul 18, 2016)

I love it when I can solve my own issues. 

I installed ports-mgmt/synth, then upgraded FreeBSD to 10.0, then ran synth for the first time, before updating pkg. This caused the configuration file to hold and store a value for Operating_system that was unexpected by synth, thus trying to use mount_tmpfs when there was none.

Recommend a bug fix -- when synth is run for the first time:

Have a regular expression look for things that should be expected... quotation marks probably not in there. OR
Publish a list of acceptable values of Operating_system and abort initialization if it isn't in that list
I like #1 better because you can sanity check it without publishing a full list of supported OSes; though #2 is more "complete" and can give an error when the OS detected isn't one that is supported.

`cat /usr/local/etc/synth/synth.ini`

```
; This Synth configuration file is automatically generated
; Take care when hand editing!

[Global Configuration]
profile_selected= LiveSystem

[LiveSystem]
Operating_system= pkg-static: Warning: Major OS version upgrade detected.  Running "pkg-static install -f pkg" recommended
Directory_packages= /var/synth/live_packages
Directory_repository= /var/synth/live_packages/All
Directory_portsdir= /usr/ports
Directory_options= /var/db/ports
Directory_distfiles= /usr/ports/distfiles
Directory_buildbase= /usr/obj/synth-live
Directory_logs= /var/log/synth
Directory_ccache= disabled
Directory_system= /
Number_of_builders= 8
Max_jobs_per_builder= 8
Tmpfs_workdir= true
Tmpfs_localbase= true
Display_with_ncurses= true
leverage_prebuilt= false
```


----------



## marino (Jul 22, 2016)

*ports-mgmt/synth: Upgrade version 1.41 => 1.42*


```
This is a bug fix version.  Changes include:
  * Fix potential exception seen with a large number of builders.  The
    height of the log area was determined by subtracting the height of
    the other two zones from the overall xterm height.  This allowed for
    the possibility of a negative height for the log area resulting in a
    thrown exception.  Now the log is defined to be at least 10 lines
    log, but ncurses will just truncate as necessary.
  * Detection of bad OPSYS value added.  There's a rare case where pkg
    can corrupt the configuration value of the Operating System.  If it
    happens on FreeBSD, Synth thinks it is running on DragonFly which
    causes all sorts of problems.  The corruption can't be auto-fixed,
    but Synth will gracefully abort with instructions on how to correct
    the issue.
  * Fix filtering of port-mgmt/pkg in list of ports.  Synth was designed
    to always skip building pkg and thus remove it from a given list of
    ports, but the filtering didn't work correctly resulting in an
    exception with a misleading message.
  * Redirect failed jail setup command output to a new log:
    /var/log/synth/05_abnormal_cmd.out.  Under normal operation, the
    log will be empty, but any abnormal output will now be sent there
    rather than corrupt the ncurses display as it before now.
  * Fix mount cleanup procedure.  The output of "df -h" was being
    sorted alphabetically which caused mounts-on-mounts (an exception
    condition that dillon has been getting with H2 testing) to fail
    during dismount.  The df output is already in the correct order so
    it only needs to be iterated in reverse without the pre-sort.

Change:
  * Synth now links curses statically so it should not pull in any
    additional packages when the Synth binary package is installed.
```


```
The only known bug is the curses display will freeze if running in an
xterm window that gets resized.  The cause is still unknown because in
theory Synth should correctly react to a window-resize event.  Some
people may have success with ^z followed by fg command, but it's best
to avoid resizing the window at all.
```

The devel/adacurses port should be rebuilt first to ensure the static build. This happens automatically when built with Synth or Poudriere.


----------

