diff options
Diffstat (limited to 'share/doc/handbook/ports.sgml')
-rw-r--r-- | share/doc/handbook/ports.sgml | 847 |
1 files changed, 0 insertions, 847 deletions
diff --git a/share/doc/handbook/ports.sgml b/share/doc/handbook/ports.sgml deleted file mode 100644 index 09cd781..0000000 --- a/share/doc/handbook/ports.sgml +++ /dev/null @@ -1,847 +0,0 @@ -<!-- $Id: ports.sgml,v 1.24 1997/03/08 11:44:08 jkh Exp $ --> -<!-- The FreeBSD Documentation Project --> - -<chapt><heading>Installing Applications: The Ports collection<label id="ports"></heading> - -<p><em>Contributed by &a.jraynard;.</em> - -The FreeBSD Ports collection allows you to compile and install a very -wide range of applications with a minimum of effort. - -<p> For all the hype about open standards, getting a program to work -on different versions of Unix in the real world can be a tedious and -tricky business, as anyone who has tried it will know. You may be lucky -enough to find that the program you want will compile cleanly on your -system, install itself in all the right places and run flawlessly -``out of the box'', but this is unfortunately rather rare. With most -programs, you will find yourself doing a fair bit of head-scratching, -and there are quite a few programs that will result in premature -greying, or even chronic alopecia... - -<p> Some software distributions have attacked this problem by -providing configuration scripts. Some of these are very clever, but -they have an unfortunate tendency to triumphantly announce that your -system is something you have never heard of and then ask you lots of -questions that sound like a final exam in system-level Unix -programming (``Does your system's gethitlist function return a const -pointer to a fromboz or a pointer to a const fromboz? Do you have -Foonix style unacceptable exception handling? And if not, why not?''). - -<p> Fortunately, with the Ports collection, all the hard work involved -has already been done, and you can just type 'make install' and get a -working program. - -<sect><heading>Why have a Ports Collection?</heading> - -<p>The base FreeBSD system comes with a very wide range of tools and -system utilities, but a lot of popular programs are not in the base -system, for good reasons:- - -<enum> -<item>``I can not live without x y and z on my system'' type programs -(eg a certain Lisp-based editor, or the mtools set of programs for -dealing with DOS floppy disks), because it is too subjective (many -people can not stand Emacs and/or never use DOS floppies and seem none -the worse for it). - -<item>Too specialised to put in the base system (CAD, databases). - -<item>Programs which fall into the ``I would not mind having a look at -that when I get a spare minute'' category, rather than system-critical -ones (some languages, perhaps). - -<item>``Wow fab this is way cool'' fun type programs that could not -possibly be supplied with a serious operating system like FreeBSD ;-) - -<item>However many programs you put in the base system, people will -always want more, and a line has to be drawn somewhere (otherwise -FreeBSD distributions would become absolutely enormous). -</enum> - -<p> Obviously it would be unreasonable to expect everyone to port their -favourite programs by hand (not to mention a tremendous amount of -duplicated work), so the FreeBSD Project came up with an ingenious -way of using standard tools that would automate the process. - -<p> Incidentally, this is an excellent illustration of how ``the Unix way'' -works in practice by combining a set of simple but very flexible tools -into something very powerful. - -<sect><heading> How does the Ports collection work?</heading> -<p> -Programs are typically distributed on the Internet as a -<ref id="ports:tarball" name="tarball"> consisting of -a Makefile and the source code for the program and usually -some instructions (which are unfortunately not always as instructive -as they could be), with perhaps a configuration script. -<p> -The standard scenario is that you FTP down the tarball, extract it -somewhere, glance through the instructions, make any changes that seem -necessary, run the configure script to set things up and use the standard -`make' program to compile and install the program from the source. -<p> -FreeBSD ports still use the tarball mechanism, but use a -<ref id="ports:skeleton" name="skeleton"> to hold the "knowledge" -of how to get the program working on FreeBSD, rather than expecting the -user to be able to work it out. They also supply their own customised -<ref id="ports:makefile" name="Makefile">, so that almost every port -can be built in the same way. -<p> -If you look at a port skeleton (either on <htmlurl -url="file://localhost/usr/ports/shells/bash" name="your FreeBSD -system"> or <htmlurl -url="ftp://ftp.freebsd.org/pub/FreeBSD/ports/shells/bash" name="the -FTP site">) and expect to find all sorts of pointy-headed rocket -science lurking there, you may be disappointed by the one or two -rather unexciting-looking files and directories you find there. -(We will discuss in a minute how to go about <ref id="ports:getting" -name="Getting a port">). - -<p>``How on earth can this do anything?'' I hear you cry. ``There -is not even any source code there!'' - -<p> Fear not, gentle reader, all will become clear (hopefully). Let's -see what happens if we try and install a port. I have chosen `bash', also -known as the Bourne-Again Shell, as that seems fairly typical. - -<em>Note</em> if you are trying this at home, you will need to be root. - -<verb> - # cd /usr/ports/shells/bash - # make install - Checksums OK. - ===> Extracting for bash-1.14.5 - ===> Patching for bash-1.14.5 - ===> Applying FreeBSD patches for bash-1.14.5 - ===> Configuring for bash-1.14.5 - ===> Building for bash-1.14.5 - [lots and lots of compiler output here...] - ===> Installing for bash-1.14.5 - make -f bash-Makefile bindir=/usr/local/bin prefix=/usr/local install - (cd ./documentation/; make ) - rm -f builtins.txt - nroff -man builtins.1 > builtins.txt - install -c -o bin -g bin -m 555 bash /usr/local/bin/bash - install -c -o bin -g bin -m 555 bashbug /usr/local/bin/bashbug - ( cd ./documentation/ ; make mandir=/usr/local/man/man1 man3dir=/usr/local/man/man3 infodir=/usr/local/info install ) - [ -d /usr/local/man/man1 ] || mkdir /usr/local/man/man1 - [ -d /usr/local/info ] || mkdir /usr/local/info - ../support/install.sh -c -m 644 bash.1 /usr/local/man/man1 - ../support/install.sh -c -m 644 builtins.1 /usr/local/man/man1/bash_builtins.1 - ../support/install.sh -c -m 644 features.info /usr/local/info/bash.info - gzip -9nf /usr/local/man/man1/bash.1 /usr/local/man/man1/bash_builtins.1 - ===> Registering installation for bash-1.14.5 -</verb> - -<p> To avoid confusing the issue, I have slightly pruned the install -output, as well as completely removing the build output. If you tried -this yourself, you may well have got something like this at the start:- - -<label id="ports:fetch"> -<verb> - >> bash-1.14.5.tar.gz doesn't seem to exist on this system. - >> Attempting to fetch from ftp://slc2.ins.cwru.edu/pub/dist/. -</verb> - -<p> The `make' program has noticed that you did not have a local copy -of the source code and tried to FTP it down so it could get the job -done (are you starting to feel impressed? 8-)). I already had the -source handy in my example, so it did not need to fetch it. - -<p> Let's go through this and see what the `make' program was doing. - -<enum> -<item> Locate the source code <ref id="ports:tarball" -name="tarball."> If it is not available locally, try to grab it from an -FTP site. - -<item> Run a <ref id="ports:checksum" name="checksum"> test on the -tarball to make sure it has not been tampered with, accidentally -truncated, struck by neutrinos while in transit, etc. - -<item> Extract the tarball into a temporary work directory. - -<item> Apply any <ref id="ports:patch" name="patches"> needed to get -the source to compile and run under FreeBSD. - -<item> Run any configuration script required by the build process and -correctly answer any questions it asks. - -<item> (Finally!) Compile the code. - -<item> Install the program executable and other supporting files, man -pages, etc. under the /usr/local hierarchy, where they will not get mixed -up with system programs. This also makes sure that all the ports you -install will go in the same place, instead of being flung all over -your system. - -<item> Register the installation in a database. This means -that, if you do not like the program, you can cleanly <ref -id="ports:remove" name="remove"> all traces of it from your system. - -</enum> - -<p> See if you can match these steps to the make output. And if you -were not impressed before, you should be by now! - -<sect><heading>Getting a FreeBSD Port<label id="ports:getting"></heading> -<p> -There are two ways of getting hold of the FreeBSD port for a -program. One requires a <ref id="ports:cd" name="FreeBSD -CDROM">, the other involves using an <ref id="ports:inet" -name="Internet Connection."> - -<sect1><heading>Compiling ports from CDROM<label id="ports:cd"></heading> -<p> -If you answered yes to the question ``Do you want to link the ports -collection to your CDROM'' during the FreeBSD installation, the initial -setting up will already have been done for you. -<p> -If not, make sure the <em /FreeBSD/ CDROM is in the drive and mounted on, -say, /cdrom. Then do - -<verb> - # mkdir /usr/ports - # cd /usr/ports - # ln -s /cdrom/ports/distfiles distfiles -</verb> - -to enable the ports make mechanism to find the tarballs (it expects to -find them in /usr/ports/distfiles, which is why we sym-linked the -CDROM's tarball directory to there). -<p> -Now, suppose you want to install the gnats program from the databases -directory. Here is how to do it:- - -<verb> - # cd /usr/ports - # mkdir databases - # cp -R /cdrom/ports/databases/gnats databases - # cd databases/gnats - # make install -</verb> - -Or if you are a serious database user and you want to compare all the -ones available in the Ports collection, do - -<verb> - # cd /usr/ports - # cp -R /cdrom/ports/databases . - # cd databases - # make install -</verb> - -(yes, that really is a dot on its own after the cp command and not a -mistake. It is Unix-ese for ``the current directory'') -<p> -and the ports make mechanism will automatically compile and install -all the ports in the databases directory for you! -<p> -If you do not like this method, here is a completely different way of -doing it:- -<p> -Create a "link tree" to it using the <tt>lndir(1)</tt> command that -comes with the <em>XFree86</em> distribution. Find a location with -some free space, create a directory there and then cd to it. Then -invoke the <tt>lndir(1)</tt> command with the full pathname of the ``ports'' -directory on the CDROM as the first argument and . (the current directory) -as the second. This might be, for example, something like: -<verb> - lndir /cdrom/ports . -</verb> -<p>Then you can build ports directly off the CDROM by building them in the -link tree you have created. -<p> -Note that there are some ports for which we cannot provide the original -source in the CDROM due to licensing limitations. In that case, -you will need to look at the section on <ref id="ports:inet" -name="Compiling ports using an Internet connection."> - -<sect1><heading>Compiling ports from the Internet<label -id="ports:inet"></heading> -<p> -If you do not have a CDROM, or you want to make sure you get the very -latest version of the port you want, you will need to download the -<ref id="ports:skeleton" name="skeleton"> for the port. Now this -might sound like rather a fiddly job -full of pitfalls, like downloading the patches into the pkg -sub-directory by mistake, but it is actually very easy. -<p> -The key to it is that the FreeBSD FTP server can create on-the-fly -<ref id="ports:tarball" name="tarballs"> for you. Here is how it works, -with the gnats program in the databases directory as an example (the -bits in square brackets are comments, do not type them in if you are -trying this yourself!):- - -<verb> - # cd /usr/ports - # mkdir databases - # cd databases - # ftp ftp.freebsd.org - [log in as `ftp' and give your email address when asked for a - password. Remember to use binary (aka image) mode!] - > cd /pub/FreeBSD/ports/databases - > get gnats.tar.gz [tarballs up the gnats skeleton for us] - > quit - # tar xzf gnats.tar.gz [extract the gnats skeleton] - # cd gnats - # make install [build and install gnats] -</verb> - -What happened here? We connected to the FTP server in the usual way -and went to its databases sub-directory. When we gave it the command -`get gnats.tar.gz', the FTP server <ref id="ports:tarball" -name="tarballed"> up the gnats directory for us and even went to the -trouble of compressing it before sending it so we could get our hands -on it a little quicker. -<p> -We then extracted the gnats skeleton and went into the gnats directory -to build the port. As we explained <ref id="ports:fetch" -name="earlier">, the make process noticed we did not have a copy of the -source locally, so it fetched one before extracting, patching and -building it. -<p> -Let's try something more ambitious now. Instead of getting a single -port skeleton, let's get a whole sub-directory, for example all the -database skeletons in the ports collection. It looks almost the same:- - -<verb> - # cd /usr/ports - # ftp ftp.freebsd.org - [log in as `ftp' and give your email address when asked for a - password. Remember to use binary (aka image) mode!] - > cd /pub/FreeBSD/ports - > get databases.tar.gz [tarballs up the databases directory for us] - > quit - # tar xzf databases.tar.gz [extract all the database skeletons] - # cd databases - # make install [build and install all the database ports] -</verb> - -With half a dozen straightforward commands, we have now got a set of -database programs on our FreeBSD machine! All we did that was -different from getting a single port skeleton and building it was that -we got a whole directory at once, and compiled everything in it at -once. Pretty impressive, no? -<p> -If you expect to be installing more than one or two ports, it is -probably worth downloading all the ports directories - this involves -downloading 2 or 3MB, when they are compressed. However, don't get -carried away and type 'get ports.tar.gz' unless you are prepared to -download the distfiles directory as well - this contains the source -code for every single port and will take a very long time to download! - -<sect><heading>Skeletons<label id="ports:skeleton"></heading> -<p> -A team of compulsive hackers who have forgotten to eat in a frantic -attempt to make a deadline? Something unpleasant lurking in the FreeBSD -attic? No, a skeleton here is a minimal framework that supplies everything -needed to make the ports magic work. - -<sect1><heading>Makefile<label id="ports:makefile"></heading> -<p> -The most important component of a skeleton is the Makefile. This contains -various statements that specify how the port should be compiled and -installed. Here is the Makefile for bash:- - -<verb> - # New ports collection makefile for: bash - # Version required: 1.14.5 - # Date created: 21 August 1994 - # Whom: jkh - # - # Makefile,v 1.13 1995/10/04 14:45:01 asami Exp - # - - DISTNAME= bash-1.14.5 - CATEGORIES= shells - MASTER_SITES= ftp://slc2.ins.cwru.edu/pub/dist/ - - MAINTAINER= ache@FreeBSD.ORG - - post-install: - .if !defined(NOMANCOMPRESS) - gzip -9nf ${PREFIX}/man/man1/bash.1 ${PREFIX}/man/man1/bash_builtins.1 - .endif - - .include <bsd.port.mk> -</verb> - -The lines beginning with a "#" sign are comments for the benefit -of human readers (as in most Unix script files). -<p> -`DISTNAME" specifies the name of the <ref id="ports:tarball" -name="tarball">, but without the extension. -<p> -`CATEGORIES" states what kind of program this is. -<p> -`MASTER_SITES" is the URL(s) of the master FTP site, which is -used to retrieve the <ref id="ports:tarball" name="tarball"> if it is not -available on the local system. This is a site which is regarded as -reputable, and is normally the one from which the program is officially -distributed (in so far as any software is "officially" distributed -on the Internet). -<p> -`MAINTAINER" is the email address of the person who is -responsible for updating the skeleton if, for example a new version -of the program comes out. (Note: The title of "maintainer" -is mainly an administrative one; it does <em /not/ mean the person -concerned is responsible for supporting the program. If you have any -<ref id="ports:kaput" name="problems with a port,"> please mail -&a.ports; and <em /not/ the maintainer. Thank you!) -<p> -Skipping over the next few lines for a minute, the line -<verb> - .include <bsd.port.mk> -</verb> -says that the other statements and commands -needed for this port are in a standard file called -`bsd.port.mk". As these are the same for all ports, there is -no point in duplicating them all over the place, so they are kept in a -single standard file. -<p> -This is probably not the place to go into a detailed examination of -how Makefiles work; suffice it to say that the lines starting with -`post-install" over-ride the instructions in bsd.port.mk -about what to do after installing the program, so that the man pages -can be compressed after they have been put in their final destination. - -<sect1><heading>The files directory</heading> -<p> -The file containing the <ref id="ports:checksum" name="checksum"> for -the port is called "md5", after the MD5 algorithm -used for ports checksums. It lives in a directory with the slightly -confusing name of "files". -<p> -This directory can also contain other miscellaneous files that are required -by the port and do not belong anywhere else. - -<sect1><heading>The patches directory</heading> -<p> -This directory contains the <ref id="ports:patch" name="patches"> needed -to make everything work properly under FreeBSD. - -<sect1><heading>The pkg directory</heading> -<p> -This program contains three quite useful files:- - -<itemize> -<item> -COMMENT - a one-line description of the program. - -<item> -DESCR - a more detailed description. - -<item> -PLIST - a list of all the files that will be created when the program is installed. -</itemize> - -<sect><heading>It does not work?!<label id="ports:kaput"></heading> - -<p>Oh. You can do one of four (4) things : - -<enum> -<item> Fix it yourself. Technical details can be found in - <ref id="porting" name="Porting applications."> -<item> Gripe. This is done by e-mail *ONLY*! The people at Walnut Creek are - in no way responsible for the functionality (or lack thereof) of the - FreeBSD system as a whole, and especially the ports system, which - is mainly contributed by 3rd parties. (If you do not believe me, check - the catalogue, especially the line saying "We cannot offer tech-support - on this product") - - The e-mail address is the &a.ports;. Please include - details of the port, where you got both the port source & - distfile(s) from, and what the error was. - - Note: At time of writing, lang/Sather does not seem to work on Pentium - machines due to the Intel Curse (aka the Floating Point Division Bug). - Please do not tell us about this - gripe to Intel instead - it is their - bug! - -<item> Forget it. This is the easiest for most - very few of the programs in - ports can be classified as `essential'! - -<item> Grab the pre-compiled package from a ftp server. The ``master'' package - collection is on FreeBSD's FTP server in the <htmlurl - url="ftp://ftp.FreeBSD.org/pub/FreeBSD/packages/" -name="packages directory."> - - though check your local mirror first, please! - - These are more likely to work (on the whole) than trying to compile from - source, and a lot faster! Use the <tt>pkg_add(1)</tt> -dddprogram to install them to your system. - -</enum> - -<sect><heading>I have this program that I would like to make into a port...</heading> - -<p>Great! Please see the <ref id="porting:starting" name="guidelines"> -for detailed instructions on how to do this. - -<sect><heading>Some Questions and Answers</heading> -<p> -<itemize> -<item> -Q. I thought this was going to be a discussion about modems??! -<p> -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). - -<item> -Q. I thought you were supposed to use packages to install extra -programs? -<p> -A. Yes, that is usually the quickest and easiest way of doing it. - -<item> -Q. So why bother with ports then? -<p> -A. Several reasons:- - -<enum> -<item> The licensing conditions on some software distributions -require that they be distributed as source code, not binaries. - -<item> Some people do not trust binary distributions. At least with -source code you can (in theory) read through it and look for potential -problems yourself. - -<item> If you have some local patches, you will need the source to add -them yourself. - -<item> You might have opinions on how a program should be compiled -that differ from the person who did the package - some people have -strong views on what optimisation setting should be used, whether to -build debug versions and then strip them or not, etc. etc. - -<item> Some people like having code around, so they can read it if -they get bored, hack around with it, borrow from it (licence terms -permitting, of course!) and so on. - -<item> If you ain't got the source, it ain't software! ;-) -</enum> - -<item><label id="ports:patch"> -Q. What is a patch? -<p> -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. - -<item><label id="ports:tarball"> -Q. What is all this about tarballs? -<p> -A. It is a file ending in .tar.gz (with variations like .tar.Z, or -even .tgz if you are trying to squeeze the names into a DOS filesystem). -<p> -Basically, it is a directory tree that has been archived into a single -file (.tar) and then compressed (.gz). This technique was originally -used for <em /T/ape <em /AR/chives (hence the name `tar'), but it is a -widely used way of distributing program source code around the -Internet. -<p> -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:- - -<verb> - tar tvzf foobar.tar.gz # View contents of foobar.tar.gz - tar xzvf foobar.tar.gz # Extract contents into the current directory -</verb> - -<item><label id="ports:checksum"> -Q. And a checksum? -<p> -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). - -<item> -Q. I did what you said for <ref id="ports:cd" name="compiling ports -from a CDROM"> and it worked great until I tried to install the kermit -port:- - -<verb> - # make install - >> cku190.tar.gz doesn't seem to exist on this system. - >> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/. -</verb> - -Why can it not be found? Have I got a dud CDROM? -<p> -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). - -<item> -Q. I did that, but when I tried to put it into /usr/ports/distfiles I -got some error about not having permission. -<p> -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 - -<verb> - DISTDIR=/where/you/put/it make install -</verb> - -<item> -Q. Does the ports scheme only work if you have everything in -/usr/ports? My system administrator says I must put everything under -/u/people/guests/wurzburger, but it does not seem to work. -<p> -A. You can use the PORTSDIR and PREFIX variables to tell the ports -mechanism to use different directories. For instance, - -<verb> - PORTSDIR=/u/people/guests/wurzburger/ports make install -</verb> - -will compile the port in /u/people/guests/wurzburger/ports and install -everything under /usr/local. - -<verb> - PREFIX=/u/people/guests/wurzburger/local make install -</verb> - -will compile it in /usr/ports and install it in -/u/people/guests/wurzburger/local. - -And of course - -<verb> - PORTSDIR=.../ports PREFIX=.../local make install -</verb> - -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). -<p> -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. - -<item> -Q. I do not have a FreeBSD CDROM, but I would like to have all the tarballs -handy on my system so I do not have to wait for a download every time I -install a port. Is there an easy way to get them all at once? -<p> -A. To get every single tarball for the ports collection, do - -<verb> - # cd /usr/ports - # make fetch -</verb> - -For all the tarballs for a single ports directory, do - -<verb> - # cd /usr/ports/directory - # make fetch -</verb> - -and for just one port - well, I think you have guessed already. - -<item> -Q. I know it is probably faster to fetch the tarballs from one of the -FreeBSD mirror sites close by. Is there any way to tell the port to -fetch them from servers other than ones listed in the MASTER_SITES? -<p> -A. Yes. If you know, for example, ftp.FreeBSD.ORG is much closer than -sites listed in MASTER_SITES, do as following example. -<verb> - # cd /usr/ports/directory - # make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/distfiles/ fetch -</verb> - -<item> -Q. I want to know what files make is going to need before it tries to -pull them down. -<p> -A. 'make fetch-list' will display a list of the files needed for a port. - -<item> -Q. Is there any way to stop the port from compiling? I want to do some -hacking on the source before I install it, but it is a bit tiresome having -to watch it and hit control-C every time. -<p> -A. Doing 'make extract' will stop it after it has fetched and -extracted the source code. - -<item> -Q. I am trying to make my own port and I want to be able to stop it -compiling until I have had a chance to see if my patches worked properly. -Is there something like 'make extract', but for patches? -<p> -A. Yep, 'make patch' is what you want. And by the way, thank you for -your efforts! - -<item> -Q. I have heard that some compiler options can cause bugs. Is this true? -How can I make sure that I compile ports with the right settings? -<p> -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 <em /should/ be able to specify the compiler options -used by something like - -<verb> - # CFLAGS='-O2 -fno-strength-reduce' make install -</verb> - -or by editing /etc/make.conf, but this does not always seem to get -picked up. 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. - -<item> -Q. There are so many ports it is hard to find the one I want. Is there a -list anywhere of what ports are available? -<p> -A. Look in the INDEX file in /usr/ports. - -<item> -Q. I went to install the 'foo' port but the system suddenly stopped -and starting compiling the 'bar' port. What's going on? -<p> -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. - -<item><label id="ports:remove"> -Q. I installed the grizzle program from the ports and frankly it is a -complete waste of disk space. I want to delete it but I do not know -where it put all the files. Any clues? -<p> -A. No problem, just do - -<verb> - pkg_delete grizzle-6.5 -</verb> -<item> - -Q. Hang on a minute, you have to know the version number to use that -command. You do not seriously expect me to remember that, do you?? -<p> -A. Not at all, you can find it out by doing - -<verb> - pkg_info -a | grep grizzle -</verb> - -And it will tell you:- - -<verb> - Information for grizzle-6.5: - grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game. -</verb> - -<item> -Q. Talking of disk space, the ports directory seems to be taking up -an awful lot of room. Is it safe to go in there and delete things? -<p> -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 - -<verb> - # cd /usr/ports - # make clean -</verb> - -which will go through all the ports subdirectories and delete -everything except the skeletons for each port. -<item> -Q. I tried that and it still left all those tarballs or whatever you -called them in the distfiles directory. Can I delete those as well? -<p> -A. Yes, if you are sure you have finished with them, those can go as -well. - -<item> -Q. I like having lots and lots of programs to play with. Is there any -way of installing all the ports in one go? -<p> -A. Just do - -<verb> - # cd /usr/ports - # make install -</verb> - -<item> -Q. OK, I tried that, but I thought it would take a very long time so I -went to bed and left it to get on with it. When I looked at the -computer this morning, it had only done three and a half ports. Did -something go wrong? -<p> -A. No, the problem is that some of the ports need to ask you questions -that we can not 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. - -<item> -Q. I really do not want to spend all day staring at the monitor. Any -better ideas? -<p> -A. OK, do this before you go to bed/work/the local park:- - -<verb> - # cd /usr/ports - # make -DBATCH install -</verb> - -This will install every port that does <em /not/ require user -input. Then, when you come back, do - -<verb> - # cd /usr/ports - # make -DIS_INTERACTIVE install -</verb> - -to finish the job. - -<item> -Q. At work, we are using frobble, which is in your ports collection, -but we have altered it quite a bit to get it to do what we need. Is -there any way of making our own packages, so we can distribute it more -easily around our sites? -<p> -A. No problem, assuming you know how to make patches for your changes:- - -<verb> - # cd /usr/ports/somewhere/frobble - # make extract - # cd work/frobble-2.8 - [Apply your patches] - # cd ../.. - # make package -</verb> - -<item> -Q. This ports stuff is really clever. I am desperate to find out how -you did it. What is the secret? -<p> -A. Nothing secret about it at all, just look at the bsd.ports.mk and -bsd.ports.subdir.mk files in your <htmlurl -url="file://localhost/usr/share/mk/" name="makefiles directory."> -(Note: readers with an aversion to intricate shell-scripts are advised -not to follow this link...) -</itemize> |