Synth - Erfahrungen und Beispiele

Vril

Well-Known Member
da ueber Synth als Alternative zu Poudriere noch nicht allzuviel hier zu lesen ist,
mache ich mal nen Thread auf - in dem Erfahrungen, Beispiele etc. sich wiederfinden sollten.

In einem anderen Thread schrieb @Yamagi:
Die drei Klassiker portmanager, portmaster und portupgrade sind de facto tot. Keines der 3 Tools hat jemals den Sprung in die pkg-Ära geschafft. Sie lösen zum Beispiel Abhängigkeiten selbst auf Basis der Port-Makefile auf, anstatt pkg zu nutzen. Das führt dann regelmäßig zu Chaos. portupgrade nutzt noch immer eine eigene Datenbank, was zu Split-Brain-Situationen führt; portmaster schreibt Einträge für die Datenbank der alten pkg_* Tools nach /var/db/pkg... Vor allem bauen sie alle nicht in einer sauberen Umgebung, stattdessen einfach im laufenden System und haben die Staging-Stufe nicht wirklich integriert. Viele Ports schlagen daher grundlos fehl, was immer wieder zu nicht reproduzierbaren Bugreports führt. Es gab auf freebsd-ports@ daher letztens eine Diskussion, ob man die 3 Tools nicht endlich offiziell als überholt erklären und in naher Zukunft entfernen sollte.

Also: Tut euch selbst den Gefallen und nehmt poudriere oder das schlankere, mehr an portmaster angelehnte synth. Ja, man muss etwas umlernen, aber als Ergebnis bauen die Ports dann auch zuverlässig.

deshalb hab ich das "mal wie folgt ausprobiert:
Code:
pkg install synth
pkg install ccache

in die /.cshrc:
Code:
# set ccache varibles
setenv PATH /usr/local/libexec/ccache:$PATH
setenv CCACHE_PATH /usr/bin:/usr/local/bin
setenv CCACHE_DIR /var/cache/ccache
setenv CCACHE_LOGFILE /var/log/ccache.log

in die /etc/make.conf:
Code:
WITH_CCACHE_BUILD=yes

ccache initialisieren und defaults ansehen:
Code:
ccache -s

ccache anpassen:
Code:
ccache --max-size=8G
ccache --set-config=cache_dir=/var/cache/ccache
kann man aber auch in die /root/.ccache/ccache.conf direkt reinschreiben:
max_size = 8G
cache_dir = /var/cache/ccache

so .. nun zu synth:
Code:
synth status

configurieren: hier muss nur der ccache-Pfad (Option H) gesetzt werden:
Code:
synth configure

nochmal anschauen:
Code:
synth status

nun kann es losgehen:
Code:
synth upgrade-system

das laeuft dann auf Konsole/Terminal im curses-mode, kann aber auch unter
file:///var/log/synth/Report/index.html
im Browser betrachtet werden.

mit ccache -s kann man dann auch mal schauen, wie effizient, welche Auslastungen und Trefferraten
der Cache hat.

einzelne Ports installieren:
Code:
synth just-build editors/vim editors/libreoffice

oder halt ne Liste:
Code:
synth just-build /tmp/ports.liste

wobei die Liste dann wohl so aussehen sollte:

editors/vim
.
.
.
editors/libreoffice

synth baut mit den default-options und man erhaelt also das gleiche Ergebnis, wie beim
Holen der Binaries mittels pkg install

will man bestimmt Optionen aendern, dann vor synth am Beispiel vim:
Code:
make -C /usr/ports/editors/vim config

und danach natuerlich von synth den Port bauen lassen:
Code:
synth just-build editors/vim

Abschliessend ist vielleicht ein:
Code:
synth purge-distfiles
sinnvoll

........................................................................................................................

Bitte um Tipps, Ergaenzungen, Hinweise auf Fehler und Unfug :-) .. Danke

Nachtrag: ich lese grade, dass synth derzeit auf 12 current nicht geht!! - also ich habe 11.0
 
Gleich mal in die bookmarks geschoben, danke für die Kurzfassung!:cool: Wollte mir Synth sowieso mal ansehen...
 
@Vril Gute Kurzübersicht. Danke!

Synth ist für den Start deutlich einfacher als Poudriere. Eigentlich kann man schon ohne irgendwelche zusätzlichen Schritte sofort loslegen.

Für mich das absolut beste Feature von Synth ist diese Konfigurations-Option
Code:
  [N] Fetch prebuilt packages  true
Das entspricht ungefähr dem, was Portmaster mit der "-P" Option machte: Es versucht Abhängigkeiten erstmal als Package aus dem Repo zu ziehen und nur wenn das nicht existiert, baut es die Abhängigkeiten auch (wie Synth damit umgeht, dass ein Paket aus dem Repo exisitiert aber möglicherweise nicht die notwendigen Build-Optionen hat, weiß ich allerdings nicht...). Gerade reine Build-Dependencies kann man sich so schön sparen. Das ist etwas, was mich echt wahnsinnig macht bei Poudriere. Da muss man erstmal die ganze Build-Chain bauen, um etwas machen zu können. Und wenn man eine Java-Applikation benötigt, muss man auch OpenJDK oder ähnliches bauen...

Ich habe Synth eine Weile verwendet, um die 2 bis 3 Ports, die ich selber baue, zu erzeugen (graphics/mozjpeg mit Prefix nach /usr/local/mozjpeg, x11/nvidia-driver ohne Linux,...). Mittlerweile habe ich aber Poudriere am Laufen und wenn es einmal steht, ist das schon flexibler, mächtiger - z.B. musste ich letztens auf meinem 11.0-RELEASE Laptop Pakete für eine 10.3-RELEASE Jail bauen. Sowas geht meines Wissens mit Synth nicht. Auch das Verwalten/Updaten verschiedener Portstrees ist bei Poudriere komfortabel gelöst.
 
an anderer Stelle http://www.bsdforen.de/threads/libreoffice-5-3-3_1.33547/
hatte @foxit freundlicherweise dargestellt,
wie man ganz simpel alle installierten Ports "cleart" und neu aufbaut:
Code:
pkg query -e "%a == 0" "%n" > /root/pkgliste.txt
pkg delete -a
rm -rf /usr/local/*
pkg-static install pkg
pkg update -f
xargs pkg install < /root/pkgliste.txt

das geht natuerlich mit synth noch einfacher:

Zuerst die Liste erstellen, hier muss man halt bei pkg query das Format der evaluation condition aendern
damit der origin in die Liste kommt ( editors/vim statt vim ) - also "n" gegen "o" tauschen:
Code:
pkg query -e "%a == 0" "%o" > /root/pkgliste.txt
dann Pakete und Inhalt von /usr/local/* loeschen:
Code:
pkg delete -a
rm -rf /usr/local/*
.
nun wie schon beschrieben: synth und ( gegebenenfalls ccache ) installieren und konfigurieren
.
.
und nun alles neu mit:

Code:
synth just-build /root/pkgliste.txt
( vor just-build Aufruf noch default-optionen mit make -C anpassen, falls Bedarf ist )
 
Hallo Walter,

danke für den Thread zu synth, eine kleine Ergänzung zum Code von @foxit:
Code:
pkg delete -a

Das würde ich noch um ein -f ergänzen
Code:
pkg delete -a -f
sonst bricht pkg irgendwann, wenn es sich selbst am Wickel hat, ab, und dass kann auch - so meine Erfahrung - mittendrin passieren und es bleiben noch zahlreiche nicht entfernte Pakete übrig.
 
Wenn alle Pakete gelöscht sind und /usr/local/ leer ist, könnte man auch noch /var/db/pkg/ aufräumen.
 
Soweit ich weiß hat Marino, der Maintainer von Synth, FreeBSD verlassen, daher wird das wohl nicht weiter entwickelt.
 
Ich meine, dass ich entweder im FreeBSD Forum oder auf einer der ML gelesen habe, dass er, nachdem ihm sein Commit entzogen wurde, die Entwicklung auch für FreeBSD einstellen will.
 
Wäre doof, kaum kommt mir synth in den Fokus, dank dieses Threads, schon ist's ein Wackelkandidat?
 
Synth wird schon noch weiterentwickelt und neue Versionen kommen auch noch recht zügig über den neuen Maintainer in die Ports.

Nur auf HEAD ist es derzeit nicht lauffähig, weil eine Abhängigkeit kaputt ist.
 
Eine kleine Frage noch zu synth:
Ich habe bei der Konfiguration angegeben, dass synth auch Pakete aus den offiziellen Repositories nutzen soll. Ich hatte gehofft, kaum noch Pakete selber bauen zu müssen. Leider ist es nicht so. Jede Woche stellt synth fest, dass ca. 400 Pakete (darunter auch chrome) neu gebaut werden nüssen. Optionen bei den Ports habe ich so gut wie nicht gesetzt. Ausnahme sind firefox und audacity (sonst gibt es keine Einträge in /var/db/ports).

Gibt es Tipps, wie man die Anzahl der offiziellen Pakete erhöhen kann?
 
Hallo klimaschreck,

zu diesem Problem steht etwas im Readme auf der Github-Seite. Ich benutze synth selber nicht, aber es scheint, dass Du die Ports auf den Quarterly-Branch setzen musst (falls Du diesen verwendest). Falls ich es richtig verstanden habe, dann verwendet synth einfach die Ports unter /usr/ports.

Viele Grüße
bastorran
 
ich hol das mal wieder nach vorne --- da sich ja jetzt mehrere Leute mit synth befassen,
kann man hier vielleicht ergänzen oder auch korrigieren
 
Danke @Vril ! Das erinnert mich daran, dass ich Synth mal wieder ausprobieren muss... bei nächster Gelegenheit. Mittlerweile bin ich nämlich runter auf 1 selbstgebauten Port (x11/nvidia-driver ohne Linux). Als im Oktober das Quarterly Repo alles neu machte, musste ich auch den nvidia-driver neu bauen. Poudriere hat fast 5 Stunden gewerkelt für diesen einen Popel-Port, weil es natürlich llvm & Co neu bauen muss. Das wäre mit Synth und den richtigen Optionen (s.o.) nicht passiert. Da hätte das vermutlich keine 1/4h gedauert.

Allerdings: Wenn die pkg-Flavors in 11 Einzug halten, gibt es vielleicht nicht einmal mehr einen Grund für diesen einen Selbstbau-Port. Denn ich denke mal, dass es auch andere gibt, die den nvidia-driver haben wollen, ohne gleich ein ganzes Linux-Basissystem installieren zu müssen.
 
Danke Walter für die gute Einführung, werde mich dann wohl dem mainstream beugen und mich auch mit Synth beschäftigen.
 
Aha, danke natürlich. Dann komm ich daran wohl auch nicht vorbei. Mal sehen, ob sich der Aufwand lohnt, denn ich baue nur äußerst selten ein Paket und nur dann, wenn es sich nicht vermeiden läßt.;)
Bei Deiner Rechenpower - das schreit doch nach Repobau mit poudriere :D

Sorry für das OffTopic
 
Bei Deiner Rechenpower - das schreit doch nach Repobau mit poudriere :D
Bei so viel Überzeugungsarbeit bröckelt meine Verweigerungshaltung. Kurze Frage dennoch, ist das deutsche Handbuch in Sachen Poudriere aktuell? Nicht das ich nach kurzer Zeit wieder in eine Falle tappe, das wäre sehr frustrierend.
 
Die ersten Tappser gingen schief. Hab deine Anleitung (Vril) nachgetackert. prebuilt packages angeschaltet.

Doch dann:

Code:
synth upgrade-system
Builder mounts detected; attempting to remove them automatically ...
Dismounting successful!
Querying system about current package installations.
Stand by, comparing installed packages against the ports tree.

devel/scons scan aborted because dependency could not be located.
py27-setuptools>0:devel/py-setuptools@py27 (required dependency of devel/scons) does not exist.
Scan of devel/yajl failed, it will not be considered.
Encountered issue with mail/thunderbird or its dependencies
  => py27-sqlite3>0:databases/py-sqlite3@py27 (required dependency of mail/thunderbird) does not exist.
Scan of mail/thunderbird failed, it will not be considered.
Encountered issue with devel/py-gobject or its dependencies
  => /usr/local/libdata/pkgconfig/pycairo.pc:graphics/py-cairo@py27 (required dependency of devel/py-gobject) does not exist.
Scan of devel/py-gobject failed, it will not be considered.

devel/py-enum34 scan aborted because dependency could not be located.
py27-setuptools>0:devel/py-setuptools@py27 (required dependency of devel/py-enum34) does not exist.
Scan of x11-drivers/xf86-video-scfb failed, it will not be considered.

graphics/py-pillow scan aborted because dependency could not be located.
py27-tkinter>0:x11-toolkits/py-tkinter@py27 (required dependency of graphics/py-pillow) does not exist.
Scan of security/keepass failed, it will not be considered.

textproc/gnome-doc-utils scan aborted because dependency could not be located.
/usr/local/lib/python2.7/site-packages/libxml2mod.so:textproc/py-libxml2@py27 (required dependency of textproc/gnome-doc-utils) does not exist.
Scan of sysutils/gnome-mount failed, it will not be considered.
Encountered issue with databases/py-sqlite3 or its dependencies
  => py27-setuptools>0:devel/py-setuptools@py27 (required dependency of databases/py-sqlite3) does not exist.
Scan of databases/py-sqlite3 failed, it will not be considered.

devel/meson scan aborted because dependency could not be located.
py36-setuptools>0:devel/py-setuptools@py36 (required dependency of devel/meson) does not exist.
Scan of sysutils/mate-power-manager failed, it will not be considered.
Encountered issue with devel/py-gobject3 or its dependencies
  => /usr/local/libdata/pkgconfig/pycairo.pc:graphics/py-cairo@py27 (required dependency of devel/py-gobject3) does not exist.
Scan of devel/py-gobject3 failed, it will not be considered.

textproc/itstool scan aborted because dependency could not be located.
/usr/local/lib/python2.7/site-packages/libxml2.py:textproc/py-libxml2@py27 (required dependency of textproc/itstool) does not exist.
Scan of graphics/atril failed, it will not be considered.
Encountered issue with graphics/py-imagesize or its dependencies
  => py27-setuptools>0:devel/py-setuptools@py27 (required dependency of graphics/py-imagesize) does not exist.
Scan of graphics/py-imagesize failed, it will not be considered.

hier hab ich mal abgeschnitten, es geht so weiter.....

Edith sagt:
Bis dann am Ende das kommt:

Stand by, updating external repository catalogs ... done.
Scanning existing packages.
Queue integrity lost!  (Synth must exit)

Bin gestern nämlich auch in die Falle getappt mit portmaster....bei python irgendwas.
 
Zuletzt bearbeitet:
Dass Synth Probleme hat, "Flavors" zu erkennen (s.o.), ist aber dann doch erstaunlich. Ich dachte, darum ging es bei der Version 2.00.
 
Zurück
Oben