A. Ah. You must be thinking of the serial ports on the back of your computer. We are using `port' here to mean the result of `porting' a program from one version of Unix to another. (It is an unfortunate bad habit of computer people to use the same word to refer to several completely different things).
A. Yes, that is usually the quickest and easiest way of doing it.
A. Several reasons:-
A. A patch is a small (usually) file that specifies how to go from one version of a file to another. It contains text that says, in effect, things like ``delete line 23'', ``add these two lines after line 468'' or ``change line 197 to this''. Also known as a `diff', since it is generated by a program of that name.
A. It is a file ending in .tar or .tar.gz (with variations like .tar.Z, or even .tgz if you are trying to squeeze the names into a DOS filesystem).
Basically, it is a directory tree that has been archived into a single file (.tar) and optionally compressed (.gz). This technique was originally used for Tape ARchives (hence the name `tar'), but it is a widely used way of distributing program source code around the Internet.
You can see what files are in them, or even extract them yourself, by using the standard Unix tar program, which comes with the base FreeBSD system, like this:-
tar tvzf foobar.tar.gz # View contents of foobar.tar.gz tar xzvf foobar.tar.gz # Extract contents into the current directory tar tvf foobar.tar # View contents of foobar.tar tar xvf foobar.tar # Extract contents into the current directory
A. It is a number generated by adding up all the data in the file you want to check. If any of the characters change, the checksum will no longer be equal to the total, so a simple comparison will allow you to spot the difference. (In practice, it is done in a more complicated way to spot problems like position-swapping, which will not show up with a simplistic addition).
# make install >> cku190.tar.gz doesn't seem to exist on this system. >> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.Why can it not be found? Have I got a dud CDROM?
A. The licensing terms for kermit do not allow us to put the tarball for it on the CDROM, so you will have to fetch it by hand - sorry! The reason why you got all those error messages was because you were not connected to the Internet at the time. Once you have downloaded it from any of the sites above, you can re-start the process (try and choose the nearest site to you, though, to save your time and the Internet's bandwidth).
A. The ports mechanism looks for the tarball in /usr/ports/distfiles, but you will not be able to copy anything there because it is sym-linked to the CDROM, which is read-only. You can tell it to look somewhere else by doing
DISTDIR=/where/you/put/it make install
A. You can use the PORTSDIR and PREFIX variables to tell the ports mechanism to use different directories. For instance,
make PORTSDIR=/u/people/guests/wurzburger/ports install
will compile the port in /u/people/guests/wurzburger/ports and install everything under /usr/local.
make PREFIX=/u/people/guests/wurzburger/local install
will compile it in /usr/ports and install it in /u/people/guests/wurzburger/local.
And of course
make PORTSDIR=.../ports PREFIX=.../local install
will combine the two (it is too long to fit on the page if I write it in full, but I am sure you get the idea).
If you do not fancy typing all that in every time you install a port (and to be honest, who would?), it is a good idea to put these variables into your environment.
A. To get every single tarball for the ports collection, do
# cd /usr/ports # make fetch
For all the tarballs for a single ports directory, do
# cd /usr/ports/directory # make fetch
and for just one port - well, I think you have guessed already.
A. Yes. If you know, for example, ftp.FreeBSD.ORG is much closer than sites listed in MASTER_SITES, do as following example.
# cd /usr/ports/directory # make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/ports/distfiles/ fetch
A. 'make fetch-list' will display a list of the files needed for a port.
A. Doing 'make extract' will stop it after it has fetched and extracted the source code.
A. Yep, 'make patch' is what you want. You will probably find the PATCH_DEBUG option useful as well. And by the way, thank you for your efforts!
A. Yes, with version 2.6.3 of gcc (the version shipped with FreeBSD 2.1.0 and 2.1.5), the -O2 option could result in buggy code unless you used the -fno-strength-reduce option as well. (Most of the ports don't use -O2). You should be able to specify the compiler options used by something like
make CFLAGS='-O2 -fno-strength-reduce' install
or by editing /etc/make.conf, but unfortunately not all ports respect this. The surest way is to do 'make configure', then go into the source directory and inspect the Makefiles by hand, but this can get tedious if the source has lots of sub-directories, each with their own Makefiles.
A. Look in the INDEX file in /usr/ports. If you would like to search the ports collection for a keyword, you can do that too. For example, you can find ports relevant to the LISP programming language using:
cd /usr/ports make search key=lisp
A. The 'foo' port needs something that is supplied with 'bar' - for instance, if 'foo' uses graphics, 'bar' might have a library with useful graphics processing routines. Or 'bar' might be a tool that is needed to compile the 'foo' port.
A. No problem, just do
pkg_delete grizzle-6.5
A. Not at all, you can find it out by doing
pkg_info -a | grep grizzle
And it will tell you:-
Information for grizzle-6.5: grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game.
A. Yes, if you have installed the program and are fairly certain you will not need the source again, there is no point in keeping it hanging around. The best way to do this is
# cd /usr/ports # make clean
which will go through all the ports subdirectories and delete everything except the skeletons for each port.
A. Yes, if you are sure you have finished with them, those can go as well.
A. Just do
# cd /usr/ports # make install
A. No, the problem is that some of the ports need to ask you questions that we cannot answer for you (eg ``Do you want to print on A4 or US letter sized paper?'') and they need to have someone on hand to answer them.
A. OK, do this before you go to bed/work/the local park:-
# cd /usr/ports # make -DBATCH install
This will install every port that does not require user input. Then, when you come back, do
# cd /usr/ports # make -DIS_INTERACTIVE install
to finish the job.
A. No problem, assuming you know how to make patches for your changes:-
# cd /usr/ports/somewhere/frobble # make extract # cd work/frobble-2.8 [Apply your patches] # cd ../.. # make package
A. Nothing secret about it at all, just look at the bsd.ports.mk and bsd.ports.subdir.mk files in your makefiles directory. (Note: readers with an aversion to intricate shell-scripts are advised not to follow this link...)