From: David Uhden Collado Subject: Re: Correctly create a symbolic link in a port To: ports@openbsd.org Date: Sun, 8 Sep 2024 02:37:43 +0200 >>>> Hello everyone, >>>> >>>> I am currently working on porting a BitTorrent client designed to >>>> run on the >>>> I2P network. While I originally intended to prioritize porting other >>>> tools, >>>> such as the Monero CLI [1] and SimpleX Chat CLI [2] [3], I >>>> unfortunately ran >>>> into challenges that were too complex for me to solve. Although I >>>> received >>>> some help with the Monero port, we were unable to achieve a fully >>>> functional >>>> result. >>>> >>>> At this point, I am focusing on this BitTorrent client, as I find it >>>> very >>>> useful to be able to run it as a background service on torrent seeding >>>> servers. However, I have encountered a specific problem that I have >>>> yet to >>>> resolve: in order to enable the command line interface, a symbolic >>>> link must >>>> be created from the "XD" binary to "XD-CLI". Despite several >>>> attempts, I >>>> continue to encounter errors when building the package. >> >> don't overthink things. >> >> assuming you mean you want a ${PREFIX}/bin/XD-CLI that links to the >> existing XD binary in the same dir then you want something like this >> in post-install: >> >>     ln -s XD ${PREFIX}/bin/XD-CLI >> >> then the usual, clean things from the previous build assuming you >> have one, and regen plist. "make clean=fake; make plist" > > Thank you very much; this worked for me. However, I've encountered > another issue: I'm unable to set the owner and group for the directories > created by the Makefile. I've tried several approaches: > > 1. Adding the -o and -g options to ${INSTALL_DATA} and ${INSTALL_DATA_DIR}. > > 2. Directly adding chown commands to the post-install section. > > 3. Adding @owner and @group to the PLIST file. > > None of these methods have successfully set the owner and group of the > directories to the daemon user and group. The directories consistently > end up with root as the owner and wheel as the group. I don't want to > use the -m 777 option, as that would be insecure. I was finally able to resolve the issue with the permissions on the directories created by this port. The problem was that I had not included a trailing slash (/) at the end of the listed directories when running the @sample command in the packing-list (PLIST). Without the slash, the system does not recognize it as a directory and fails to set the permissions correctly. I think it would be helpful if, when executing the make plist or make update-plist commands, the system could alert you to any directories that are not correctly listed, as this is something you might easily overlook without carefully reading the documentation. > >> >>> This doesn't help much, as you aren't sharing what issues are you >>> running into. >> >> ...or what was tried. >> >>> There 261 Makefiles that use 'ln -s' according to >>> >>> find . -type f \( -path './pobj/*' -o -path './mystuff/*' \) -prune -o \ >>>      -name Makefile -exec grep -Fl 'ln -s' {} + | wc -l >>> >>> Quite a bunch of them do it for linking binaries during the install >>> phase. Of those, all the ones I checked do it in the post-install >>> target, so maybe you should stick to that pattern. Also, in those cases, >>> what I saw is that the links are either cwd -> ${PREFIX}/... or >>> ${TRUEPREFIX}/... -> ${PREFIX}/... . Read bsd.port.mk(5), in particular >>> the parts for TRUEPREFIX and the section "THE FAKE FRAMEWORK", which >>> explicitly addresses symlinks. >>> >>>     Lucas >>> >> > > I have attached the current state of the port to this email.