|
|
Creating FreeBSD packages from portsA python vulnerability made it necessary for me to upgrade the python installation on FreeBSD. Since this would have to be performed on three machines, I decided to built the port on my fastest hardware, then create a package of it for installation on the two slow machines. First, I had to update the ports tree: csup -g -L 2 /usr/local/etc/cvsup/ports-supfile There is a standard make target for ports, package, which will create a package from the installed port. So I used the following sequence of commands: # cd /usr/ports/lang/python25 # make clean # make # make deinstall # make reinstall # make package The created package can then be installed by: pkg_add python25-2.5.2_2.tbz on the target machine. The same effect can be achieved using the pkg_create command, e.g. pkg_create -jb python25-2.5.2_2 However, the make package command resulted in the following error: Creating bzip'd tar ball in '/usr/ports/lang/python25/python25-2.5.2_2.tbz' tar: lib/python2.5/lib-dynload/nis.so: Cannot stat: No such file or directory tar: Error exit delayed from previous errors. pkg_create: make_dist: tar command failed with code 256 *** Error code 1 Stop in /usr/ports/lang/python25. The error was due to two factors: (a) I set NO_NIS="true" in /etc/make.conf, and (b) I had an old copy of /usr/bin/ypcat on my machine. This triggered the following code in the python Makefile: .if !exists(/usr/bin/ypcat) # the world with NO_NIS PLIST_SUB+= NO_NIS="@comment " .else PLIST_SUB+= NO_NIS="" .endif This code then ignores the /etc/make.conf NO_NIS setting. One easy fix was to delete /usr/bin/ypcat. Maybe a better fix would be to change the Makefile to obey the setting in /etc/make.conf. Something like:
.if !exists(/usr/bin/ypcat) || ${NO_NIS} != "" # the world with NO_NIS
PLIST_SUB+= NO_NIS="@comment "
.else
PLIST_SUB+= NO_NIS=""
.endif
Producing the following unified diff:
--- Makefile 2008-04-27 13:35:47.000000000 +0100
+++ Makefile.new 2008-04-27 13:35:33.000000000 +0100
@@ -104,7 +104,7 @@
CFLAGS+= -DPYTHON_DEFAULT_RECURSION_LIMIT=900
.endif
-.if !exists(/usr/bin/ypcat) # the world with NO_NIS
+.if !exists(/usr/bin/ypcat) || ${NO_NIS} != "" # the world with NO_NIS
PLIST_SUB+= NO_NIS="@comment "
.else
PLIST_SUB+= NO_NIS=""
Once this change is made in the Makefile, the port must be re-built so that the package list reflects the absence of NIS. I see from the FreeBSD PR database that this problem has already been reported in ports/119440 and ports/115940. One less job to do.
|