• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

Synth - Erfahrungen und Beispiele

Vril

Well-Known Member
Themenstarter #1
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
 

Esjott

Well-Known Member
#2
Gleich mal in die bookmarks geschoben, danke für die Kurzfassung!:cool: Wollte mir Synth sowieso mal ansehen...
 

SolarCatcher

Well-Known Member
#3
@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.
 

Vril

Well-Known Member
Themenstarter #4
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 )
 

holgerw

Well-Known Member
#5
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.
 

foxit

Moderator
Mitarbeiter
#6
Wenn alle Pakete gelöscht sind und /usr/local/ leer ist, könnte man auch noch /var/db/pkg/ aufräumen.
 

joneum

FreeBSD Committer
#7
Soweit ich weiß hat Marino, der Maintainer von Synth, FreeBSD verlassen, daher wird das wohl nicht weiter entwickelt.
 

joneum

FreeBSD Committer
#9
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.
 

Elwood

Naiver Mutmaßlicher
Mitarbeiter
#10
Wäre doof, kaum kommt mir synth in den Fokus, dank dieses Threads, schon ist's ein Wackelkandidat?
 

lme

FreeBSD Committer
#11
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.
 

klimaschreck

Well-Known Member
#12
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?
 
#13
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
 

Vril

Well-Known Member
Themenstarter #14
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
 

SolarCatcher

Well-Known Member
#15
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.
 

ralli

BSD Fanboy
#16
Danke Walter für die gute Einführung, werde mich dann wohl dem mainstream beugen und mich auch mit Synth beschäftigen.
 

mr44er

Trödel-Troll
#22
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:

CrimsonKing

Systemzerstörer
#24
Dass Synth Probleme hat, "Flavors" zu erkennen (s.o.), ist aber dann doch erstaunlich. Ich dachte, darum ging es bei der Version 2.00.