Neuen Port erstellen?

Sadakazu

Well-Known Member
Moin moin...
Ich bin grade dabei zu versuchen ein Testprojekt als Port zu erstellen.
Dazu das Handbuch geschnappt und nach der Anleitung den Port erstellt.

Zuerst das Makefile geschrieben, mit den Informationen die aktuell erforderlich sind (das Handbuch hinkt da ein bisschen nach fürchte ich)

Als nächstes die pkg-descr erstellt und ein bisschen was hineingeschrieben.
Dann die pkg-plist
so da mein Testprogramm nur eine Binärdatei erstellt muss in die package liste ja auch nur das diese einge Datei aufgeführt werden:
Code:
bin/testprog

Im Handbuch stand zwar drin das bei Ports die nur eine Handvoll Dateien und Verzeichnisse installieren, die pkg-plist vollständig weggelassen werden kann, man aber trotzdem lieber die pkg -plist erstellen sollte...

So bis hier hin alles gut...
Anschließend mit make makesum die distinfo datei erzeugen.
Auch das verursachte keine fehler

Also den port mit make install überprüfen...
Folgende Fehlermeldung erhalte ich:
Code:
pkg-static: Unable to access file /usr/devel/testprog/work/stage/usr/local/bin/testprog:No such file or directory
*** Error code 74

Jetzt zwei witzige sachen.... kopiere ich das erstellte binari von /usr/devel/testprog/work/testprog/testprog nach /usr/devel/testprog/work/stage/usr/local/bin/testprog und führe dann make install nochmal durch... läuft das ganze sauber durch....
Daher die Frage... warum kopiert make die datei nicht nach stage/usr/local/bin?
Oder bessere Frage... warum muss sie denn nochmal dort hin kopiert werden, wenn sie in work/PORTNAME/ schon vorhanden ist?

und jetzt die zweite sache.... lösche ich die datei pkg-plist und rufe dann make install auf.... läuft er sofort sauber durch....

Warum?
Ich wills gern verstehen :D
 
Moin,
es ist vermutlich einfacher etwas dazu zu schreiben, wenn du das Makefile hier zum Besten gibst :)
 
Code:
# Created by: Sadakazu Yoshikawa <myEmail@someDomain.de>
# $FreeBSD: $

PORTNAME=  testprog
PORTVERSION=  0.10.6
CATEGORIES=  sysutils
MASTER_SITES=  https://someDomain.de/path/to/master/
MAINTAINER= myEmail@someDomain.de
COMMENT=  This is a simple testprog to learn about creating new ports

LICENSE=  GPLv3

MANPAGES=  off
MANCOMPRESSED=  yes
USE_IMAKE=  yes

.include <bsd.port.mk>

Kleine anmerkung.... Email und domain hab ich nur hier jetzt "unkenntlich" gemacht... daten werden soweit korrekt heruntergeladen und auch gebaut.... das programm selber funktioniert....

Aber was mir aufgefallen ist .... make deinstall scheint zwar durch zu laufen... aber das programm ist in /usr/local/bin/testprog noch immer vorhanden oO
 
Salü

Wenn du keine pkg-plist willst, weil es nur wenige Dateien sind, dann kannst du dies mit
PLIST_FILES= bin/testprog
im Makefile lösen.

MANPAGES=off und MANCOMPRESSED=yes scheint etwas oxymoronisch :D

Weiteres ist ohne das distfile schwer zu sagen =)

mfg Tobias
 
Ich habe noch nie einen Port selbst erstellt - aber den Tipp gehört, sich einen ähnlichen Port zu suchen und denn als Grundlage für den eigenen zu nehmen...

Wenn Du es nach Anleitung aus dem Porters' Handbuch auch so hinbekommst: Umso besser. Und: Hut ab!
 
Guten Morgähn ;)
MANPAGES=off und MANCOMPRESSED=yes scheint etwas oxymoronisch :D
Naja... ich hab mich da wie gesagt relativ strickt ans Handbuch gehalten... Wird aber auch rausfliegen... bzw nur MANPAGES=off bleiben...
Weiteres ist ohne das distfile schwer zu sagen =)
Meinst distinfo? Was hat die damit zu tun? Da stehen ja nur zeitstempel und hash werte drin...
Ich habe noch nie einen Port selbst erstellt - aber den Tipp gehört, sich einen ähnlichen Port zu suchen und denn als Grundlage für den eigenen zu nehmen...
so schlau war ich auch schon :D aber ich hab keinen port gefunden, das nur ein einziges exceutable erstellt, ohne Abhängigkeiten und Manpages auskommt xD
Wenn Du es nach Anleitung aus dem Porters' Handbuch auch so hinbekommst: Umso besser. Und: Hut ab!
Wie gesagt... hab ich keine pkg-plist installiert er das korrekt, baut mir sogar ein Paket das sich mit pkg installieren lässt...

Aber
Wenn du keine pkg-plist willst, weil es nur wenige Dateien sind, dann kannst du dies mit PLIST_FILES= bin/testprog
im Makefile lösen.
Das werd ich gleich mal ausprobieren....
 
AHHHAAAAAAAAAAAAAAA jetzt ist der groschen mehr oder weniger gefallen...

Das problem liegt in der Makefile vom programm selber.... jedenfalls scheinbar.... werd ich mal ausprobieren....
@marcel vielen dank :)

EDIT
So also....
Im Makefile zum bauen vom Programm fehlte folgendes:
Code:
PROGRAMM = testprog
PREFIX ?= /usr/local
INSTALL_PROGRAM = install -g wheel -m 0755 -o root

/* schnipp */
install:
  ${INSTALL_PROGRAM} ${PROGRAM} ${PREFIX}/bin

und dann halt im Makefile vom Port:
Code:
do-install:
  ${INSTALL_PROGRAM} ${WRKSRC}/${PORTNAME} ${STAGEDIR}${PREFIX}/bin
Dann klappts auch mit der Installation und sauberen deinstallation... Packetbau klappt auch... alles Chick xD

Echt vielen vielen Dank @marcel :)
 
Zuletzt bearbeitet:
:D doch gibt es, guck mal hier:
https://www.freebsd.org/doc/de_DE.ISO8859-1/books/porters-handbook/

PS: übrigens.. jetzt klappt das ganze auch wenn ich die pkg.plist benutze....
Das lag scheinbar echt nur am Makefile vom Program.....
Die deutsche Übersetzung ist komplett veraltet. Z.B. MANCOMPRESSED und MANPAGES machen im Ports Framework gar nichts mehr. Außerdem wird da noch von CVS geredet...

Wie gesagt... hab ich keine pkg-plist installiert er das korrekt, baut mir sogar ein Paket das sich mit pkg installieren lässt...
Ja klar, ohne pkg-plist installiert das Paket dann aber auch keine Dateien :p.
 
Ja klar, ohne pkg-plist installiert das Paket dann aber auch keine Dateien
:D das problem war ja, das mit der pkg-plist die installation abgebrochen hatte, weil er die stage daten nicht finden konnte.
Das lag wohl u.a. auch an dem Makefile vom Programm, da diese keine INSTALL_PROGRAM methode/variable hatte...

Die deutsche Übersetzung ist komplett veraltet.
hab ich aber auch schon gemerkt :(
 
Hi,

bevor extra ein neuer Thread erstellt werde, so ist "Recycling" eine Option.

Es wurde etwas portiert [was denn genau ist voellig unwichtig], wobei das Handbuch sehr detailliert und hilfreich ist.

Einige Fragen bzgl. Autodidaktik:

Wie wird ein sogenannter "Port" submitted bzw. soll der Portstree dafuer lokal "geklont" werden, damit bspw. die Portierung bzw. in ${category}/${name} in Repository via svn(1) dann "upstream" gesendet oder "added" werde?

Selbst arbeitete noch nicht mit svn(1), was sich wohl [jetzt] aendert bzw. fing an mit diesem Thema naeher zu beschaeftigen, da es jetzt anscheinend dafuer benoetigt werde?

Man verzeihe diese naiven Fragen, aber irgendwie ist einem der Parser im Kopf abhanden gekommen, da es einem selbst erscheine, dass das Handbuch davon ausginge, dass einige Dinge "selbsterklaerend" waeren?
 
Wie wird ein sogenannter "Port" submitted bzw. soll der Portstree dafuer lokal "geklont" werden, damit bspw. die Portierung bzw. in ${category}/${name} in Repository via svn(1) dann "upstream" gesendet oder "added" werde?
Wenn Du svn benutzen möchtest, um Änderungen (neuer Port/Update) per svn diff kenntlich zu machen, brauchst Du den mit svn ausgecheckten Portstree (Arbeitskopie) auf Deinem System. Nachdem Du Deine Änderungen an der Arbeitskopie des Portstrees vorgenommen hast, erzeugst Du ein Patch mit svn diff und postest diesen auf der Ports Mailingliste, mit der Bitte, denselben in das zentrale Repository einzupflegen. Du kannst zwar, sofern Du keine Commit-Rechte hast, nicht per svn in das zentrale Repository einchecken, aber Du machst es den Committern etwas leichter, wenn Du svn zur Erzeugung der Patches benutzt.
 
Danke fuer die Infos, wobei mangels Erfahrung bzgl. Gebrauch von Mailing Listen, da bisher [im Leben] noch an _keiner_ Mailing Liste teilnahm [kein Witz, das ist wirklich so], weil bisher keine Notwendigkeit dafuer bestand, deswegen [werde] naiv gefragt:

Welche ML ist gemeint, die oder die? In welcher inhaltlichen Form poste ich die Message bzw. poste ich das Diff und sende dann eine zweite Nachricht [als Antwort auf das Diff] mit der Bitte dass Diff zu committen?
 
Zuletzt bearbeitet von einem Moderator:
Welche ML ist gemeint, die oder die? In welcher inhaltlichen Form poste ich die Message bzw. poste ich das Diff und sende dann eine zweite Nachricht [als Antwort auf das Diff] mit der Bitte dass Diff zu committen?
Du meldest Dich im Webinterface auf der Mailingliste an, und nutzt dann einfach das entsprechende Formular. Dort kannst Du die Nachricht verfassen, sowie ein oder mehrere Dateien anhängen.

https://www.freebsd.org/doc/en/books/porters-handbook/porting-submitting.html
 
Eine [naive] Frage ist noch eingefallen, da [aus Respekt] nicht wie ein Elephant im Porzellanladen auftreten moechte:

Wenn bspw. das Port [erfolgreich] committet bzw. integriert wurde, aber noch ne klitzekleine Aenderung [nach dem Commit] an Makefile etwas [von mir] veraendert wurde, weil es [mir] aufgefallen waere, dass das da noch etwas ergaenzt werden sollte, wie wuerde die mit "# svn diff {$category}/${name} > ${name}.diff" erzeugte "Veraenderung" zur Person gesendet werden, die den Port [stellvertretend] integrierte?

Wird das per Bugzilla gemacht oder per E-Mail bzw. wenn das per E-Mail moeglich erscheine, in welcher Form, bspw. Text mit Anrede und hoeflicher Bitte sowie verbunden mit dem ${name}.diff als Anhang?

Sollte ggf. der Wert von "DISTVERSION= ${value}" in Makefile angepasst werden, wenn sich etwas in einer Quelltextdatei von dem Port veraenderte?
 
Zuletzt bearbeitet von einem Moderator:
Oehm, was bedeutet, wenn mir folgendes geschrieben wurde:
Code:
This new patch works against the curtent ports tree and builds on current, 11.1a and 10.3i. Please approve.
Der Patch ist okay. Was soll ich antworten?
 
Ich bin Maintainer, fuer was ist voellig unwichtig. Es ist sogar mein erster Port und versuche moeglichst zu vermeiden mich in den Vordergrund zu draengeln.

Danke fuer die Information, da ich [aus Unerfahrenheit] tagelang raetselte, was ich tun sollte, weil ich nicht dort [aus Respekt] als Elephant im Porzellanladen auftreten wollte. :)

Ich sendete als Reply: Approved.
 
Zurück
Oben