This document provides you with all necessary steps to install an OpenAFS server on Gentoo Linux. Parts of this document are taken from the AFS FAQ and IBM's Quick Beginnings guide on AFS. Well, never reinvent the wheel. :)
AFS is a distributed filesystem that enables co-operating hosts (clients and servers) to efficiently share filesystem resources across both local area and wide area networks. Clients hold a cache for often used objects (files), to get quicker access to them.
AFS is based on a distributed file system originally developed at the Information Technology Center at Carnegie-Mellon University that was called the "Andrew File System". "Andrew" was the name of the research project at CMU - honouring the founders of the University. Once Transarc was formed and AFS became a product, the "Andrew" was dropped to indicate that AFS had gone beyond the Andrew research project and had become a supported, product quality filesystem. However, there were a number of existing cells that rooted their filesystem as /afs. At the time, changing the root of the filesystem was a non-trivial undertaking. So, to save the early AFS sites from having to rename their filesystem, AFS remained as the name and filesystem root.
An AFS cell is a collection of servers grouped together administratively and presenting a single, cohesive filesystem. Typically, an AFS cell is a set of hosts that use the same Internet domain name (for example, gentoo.org) Users log into AFS client workstations which request information and files from the cell's servers on behalf of the users. Users won't know on which server a file which they are accessing, is located. They even won't notice if a server will be located to another room, since every volume can be replicated and moved to another server without any user noticing. The files are always accessible. Well, it's like NFS on steroids :)
The main strengths of AFS are its: caching facility (on client side, typically 100M to 1GB), security features (Kerberos 4 based, access control lists), simplicity of addressing (you just have one filesystem), scalability (add further servers to your cell as needed), communications protocol.
Read the
OpenAFS main page is at
AFS was originally developed by Transarc which is now owned by IBM.
You can find some information about AFS on
OpenAFS has great logging facilities. However, by default it logs straight into
its own logs instead of through the system logging facilities you have on your
system. To have the servers log through your system logger, use the
This section aims to help you through the process of upgrading an existing OpenAFS installation to OpenAFS version 1.4.0 or higher (or 1.2.x starting from 1.2.13. The latter will not be handled specifically, as most people will want 1.4 for a.o. linux-2.6 support, large file support and bug fixes).
If you're dealing with a clean install of a 1.4 version of OpenAFS, then you can safely skip this chapter. However, if you're upgrading from a previous version, we strongly urge you to follow the guidelines in the next sections. The transition script in the ebuild is designed to assist you in quickly upgrading and restarting. Please note that it will (for safety reasons) not delete configuration files and startup scripts in old places, not automatically change your boot configuration to use the new scripts, etc. If you need further convincing, using an old OpenAFS kernel module together with the updated system binaries, may very well cause your kernel to freak out. So, let's read on for a clean and easy transition, shall we?
Traditionally, OpenAFS has used the same path-conventions that IBM TransArc labs had used, before the code was forked. Understandably, old AFS setups continue using these legacy path conventions. More recent setups conform with FHS by using standard locations (as seen in many Linux distributions). The following table is a compilation of the configure-script and the README accompanying the OpenAFS distribution tarballs:
| Directory | Purpose | Transarc Mode | Default Mode | translation to Gentoo |
|---|---|---|---|---|
There are some other oddities, like binaries being put in
Also as a result of the path changes, the default disk cache location has
been changed from
Furthermore, the init-script has been split into a client and a server part.
You used to have
Another change to the init script is that it doesn't check your disk cache
setup anymore. The old code required that a separate ext2 partition be
mounted at
First of all, emerging a newer OpenAFS version should not overwrite any old configuration files. The script is designed to not change any files already present on the system. So even if you have a totally messed up configuration with a mix of old and new locations, the script should not cause further problems. Also, if a running OpenAFS server is detected, the installation will abort, preventing possible database corruption.
One caveat though -- there have been ebuilds floating around the internet that
partially disable the protection that Gentoo puts on
# emerge info | grep "CONFIG_PROTECT_MASK" CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/texmf/web2c /etc/env.d"
Though nothing in this ebuild would touch the files in
It should be clear to the experienced user that in the case he has tweaked his
system by manually adding soft links (e.g.
Now that you know what doesn't happen, you may want to know what does:
So you haven't got an OpenAFS server setup? Or maybe you do, the previous sections have informed you about what is going to happen, and you're still ready for it?
Let's go ahead with it then!
If you do have a server running, you want to shut it down now.
# /etc/init.d/afs stop
And then the upgrade itself.
# emerge -u openafs
If you had an OpenAFS server running, you would have not have been forced to shut it down. Now is the time to do that.
# /etc/init.d/afs stop
As you may want keep the downtime to a minimum, so you can restart your OpenAFS server right away.
# /etc/init.d/openafs-server start
You can check whether it's running properly with the following command:
# /usr/bin/bos status localhost -localauth
Before starting the OpenAFS client again, please take time to check your
cache settings. They are determined by
# /etc/init.d/openafs-client start
Before cleaning up, please make really sure that everything runs smoothly and that you have restarted after the upgrade (otherwise, you may still be running your old installation).
The following directories may be safely removed from the system:
The following files are also unnecessary:
# tar czf /root/oldafs-backup.tgz /etc/afs /usr/vice /usr/afs /usr/afsws # rm -R /etc/afs /usr/vice /usr/afs /usr/afsws # rm /etc/init.d/afs /etc/conf.d/afs
In case you've previously used ebuilds =openafs-1.2.13 or =openafs-1.3.85, you may also have some other unnecessary files:
Now most people would have their systems configured to automatically start the OpenAFS client and server on startup. Those who don't can safely skip this section. If you had your system configured to start them automatically, you will need to re-enable this, because the names of the init scripts have changed.
# rc-update del afs default # rc-update add openafs-client default # rc-update add openafs-server default
If you had
Don't panic. You shouldn't have lost any data or configuration files. So let's
analyze the situation. Please file a bug at
If you're having problems starting the client, this should help you diagnosing the problem:
If you're having problems starting the server, then these hints may be useful:
You can get the original IBM AFS Documentation. It is very well written and you really want read it if it is up to you to administer a AFS Server.
# emerge app-doc/afsdoc
You also have the option of using the documentation delivered with OpenAFS. It
is installed when you have the USE flag
# emerge net-fs/openafs
After successful compilation you're ready to go.
If you're not part of a specific OpenAFS-cell you want to access, and you just
want to try browsing globally available OpenAFS-shares, then you can just
install OpenAFS, not touch the configuration at all, and start
If you need to access a specific cell, say your university's or company's own cell, then some adjustments to your configuration have to be made.
Firstly, you need to update
Secondly, in order to be able to log onto the OpenAFS cell, you need to specify
its name in
CellServDB: >netlabs #Cell name 10.0.0.1 #storage ThisCell: netlabs
CellServDB tells your client which server(s) it needs to contact for a specific cell. ThisCell should be quite obvious. Normally you use a name which is unique for your organisation. Your (official) domain might be a good choice.
For a quick start, you can now start
You can house your cache on an existing filesystem (if it's ext2/3), or you
may want to have a separate partition for that. The default location of the
cache is
The following command will create the appropriate links to start your afs client on system startup.
# rc-update add openafs-client default
If you haven't already done so, the following command will install all
necessary binaries for setting up an AFS Server
# emerge net-fs/openafs
You need to run the
# bosserver -noauth &
Verify that the BOS Server created
# ls -al /etc/openafs/server/ -rw-r--r-- 1 root root 41 Jun 4 22:21 CellServDB -rw-r--r-- 1 root root 7 Jun 4 22:21 ThisCell
Now assign your cell's name.
Run the
# bos setcellname <server name> <cell name> -noauth
Next use the
# bos create <server name> kaserver \ simple /usr/libexec/openafs/kaserver \ -cell <cell name> -noauth # bos create <server name> buserver \ simple /usr/libexec/openafs/buserver \ -cell <cell name> -noauth # bos create <server name> ptserver \ simple /usr/libexec/openafs/ptserver \ -cell <cell name> -noauth # bos create <server name> \ vlserver simple /usr/libexec/openafs/vlserver \ -cell <cell name> -noauth
You can verify that all servers are running with the
# bos status <server name> -noauth Instance kaserver, currently running normally. Instance buserver, currently running normally. Instance ptserver, currently running normally. Instance vlserver, currently running normally.
Now we'll initialize the cell's security mechanisms. We'll begin by creating
the following two initial entries in the Authentication Database: The main
administrative account, called admin by convention and an entry for
the AFS server processes, called
Enter
# kas -cell <cell name> -noauth ka> create afs initial_password: Verifying, please re-enter initial_password: ka> create admin initial_password: Verifying, please re-enter initial_password: ka> examine afs User data for afs key (0) cksum is 2651715259, last cpw: Mon Jun 4 20:49:30 2001 password will never expire. An unlimited number of unsuccessful authentications is permitted. entry never expires. Max ticket lifetime 100.00 hours. last mod on Mon Jun 4 20:49:30 2001 by <none> permit password reuse ka> setfields admin -flags admin ka> examine admin User data for admin (ADMIN) key (0) cksum is 2651715259, last cpw: Mon Jun 4 20:49:59 2001 password will never expire. An unlimited number of unsuccessful authentications is permitted. entry never expires. Max ticket lifetime 25.00 hours. last mod on Mon Jun 4 20:51:10 2001 by <none> permit password reuse ka>
Run the
# bos adduser <server name> admin -cell <cell name> -noauth
Issue the
# bos addkey <server name> -kvno 0 -cell <cell name> -noauth input key: Retype input key:
Issue the
# pts createuser -name admin -cell <cell name> [-id <AFS UID>] -noauth
Issue the
# pts adduser admin system:administrators -cell <cell name> -noauth # pts membership admin -cell <cell name> -noauth Groups admin (id: 1) is a member of: system:administrators
At this moment, proper authentication is possible, and the OpenAFS server can be started in a normal fashion. Note that authentication also requires a running OpenAFS client (set it up is described in the previous chapter).
# bos shutdown <server name> -wait -noauth # killall bosserver
# /etc/init.d/openafs-server start # /etc/init.d/openafs-client start
# rc-update add openafs-server default
# klog admin
Start the
# bos create <server name> fs \ fs /usr/libexec/openafs/fileserver /usr/libexec/openafs/volserver /usr/libexec/openafs/salvager \ -cell <cell name> -noauth
Verify that all processes are running:
# bos status <server name> -long -noauth Instance kaserver, (type is simple) currently running normally. Process last started at Mon Jun 4 21:07:17 2001 (2 proc starts) Last exit at Mon Jun 4 21:07:17 2001 Command 1 is '/usr/libexec/openafs/kaserver' Instance buserver, (type is simple) currently running normally. Process last started at Mon Jun 4 21:07:17 2001 (2 proc starts) Last exit at Mon Jun 4 21:07:17 2001 Command 1 is '/usr/libexec/openafs/buserver' Instance ptserver, (type is simple) currently running normally. Process last started at Mon Jun 4 21:07:17 2001 (2 proc starts) Last exit at Mon Jun 4 21:07:17 2001 Command 1 is '/usr/libexec/openafs/ptserver' Instance vlserver, (type is simple) currently running normally. Process last started at Mon Jun 4 21:07:17 2001 (2 proc starts) Last exit at Mon Jun 4 21:07:17 2001 Command 1 is '/usr/libexec/openafs/vlserver' Instance fs, (type is fs) currently running normally. Auxiliary status is: file server running. Process last started at Mon Jun 4 21:09:30 2001 (2 proc starts) Command 1 is '/usr/libexec/openafs/fileserver' Command 2 is '/usr/libexec/openafs/volserver' Command 3 is '/usr/libexec/openafs/salvager'
Your next action depends on whether you have ever run AFS file server machines in the cell.
If you are installing the first AFS Server ever in the cell, create the first AFS volume, root.afs
# vos create <server name> <partition name> root.afs -cell <cell name> -noauth
If there are existing AFS file server machines and volumes in the cell
issue the
If the command fails with the message "partition /vicepa does not exist on
the server", ensure that the partition is mounted before running OpenAFS
servers, or mount the directory and restart the processes using
# vos syncvldb <server name> -cell <cell name> -verbose -noauth # vos syncserv <server name> -cell <cell name> -verbose -noauth
# bos create <server name> \ upserver simple "/usr/libexec/openafs/upserver \ -crypt /etc/openafs/server -clear /usr/libexec/openafs" \ -cell <cell name> -noauth
First you need to set some ACLs, so that any user can lookup
# fs setacl /afs system:anyuser rl
Then you need to create the root volume, mount it readonly on
# vos create <server name> <partition name> root.cell # fs mkmount /afs/<cell name> root.cell # fs setacl /afs/<cell name> system:anyuser rl # fs mkmount /afs/.<cell name> root.cell -rw
# vos create <server name> <partition name> <myvolume> # fs mkmount /afs/<cell name>/<mymountpoint> <myvolume> # fs mkmount /afs/<cell name>/.<mymountpoint> <myvolume> -rw # fs setquota /afs/<cell name>/.<mymountpoint> -max <quotum>
Finally you're done!!! You should now have a working AFS file server on your local network. Time to get a big cup of coffee and print out the AFS documentation!!!
OpenAFS is an extensive technology. Please read the AFS documentation for more information. We only list a few administrative tasks in this chapter.
To use AFS you need to authenticate against the KA Server if using
an implementation AFS Kerberos 4, or against a Kerberos 5 KDC if using
MIT, Heimdal, or ShiShi Kerberos 5. However in order to login to a
machine you will also need a user account, this can be local in
You will need to update
auth required pam_env.so auth sufficient pam_unix.so likeauth nullok auth sufficient pam_afs.so.1 use_first_pass ignore_root auth required pam_deny.so account required pam_unix.so password required pam_cracklib.so retry=3 password sufficient pam_unix.so nullok md5 shadow use_authtok password required pam_deny.so session required pam_limits.so session required pam_unix.so
In order for
# Here, users with uid > 100 are considered to belong to AFS and users with # uid <= 100 are ignored by pam_afs. auth sufficient pam_afs.so.1 ignore_uid 100 auth sufficient pam_rootok.so# If you want to restrict users begin allowed to su even more, # create /etc/security/suauth.allow (or to that matter) that is only # writable by root, and add users that are allowed to su to that # file, one per line. #auth required pam_listfile.so item=ruser \ # sense=allow onerr=fail file=/etc/security/suauth.allow # Uncomment this to allow users in the wheel group to su without # entering a passwd. #auth sufficient pam_wheel.so use_uid trust # Alternatively to above, you can implement a list of users that do # not need to supply a passwd with a list. #auth sufficient pam_listfile.so item=ruser \ # sense=allow onerr=fail file=/etc/security/suauth.nopass # Comment this to allow any user, even those not in the 'wheel' # group to su auth required pam_wheel.so use_uid auth required pam_stack.so service=system-auth account required pam_stack.so service=system-auth password required pam_stack.so service=system-auth session required pam_stack.so service=system-auth session optional pam_xauth.so# Here we prevent the real user id's token from being dropped session optional pam_afs.so.1 no_unlog