This example requires the cvs and xinetd packages. Run rpm -q cvs
to see if the cvs package is installed. If it is not installed, run the following command as the root user to install cvs:
# yum install cvs
Run rpm -q xinetd
to see if the xinetd package is installed. If it is not installed, run the following command as the root user to install xinetd:
# yum install xinetd
Create a group named CVS
. This can be done via the groupadd CVS
command as the root user, or by using the system-config-users tool.
Create a user with a username of cvsuser
and make this user a member of the CVS group. This can be done using the system-config-users tool.
Edit the /etc/services
file and make sure that the CVS server has uncommented entries looking similar to the following:
cvspserver 2401/tcp # CVS client/server operations
cvspserver 2401/udp # CVS client/server operations
Create the CVS repository in the root area of the file system. When using SELinux, it is best to have the repository in the root file system so that recursive labels can be given to it without affecting any other subdirectories. For example, as the root user, create a /cvs
directory to house the repository:
[root@cvs-srv]# mkdir /cvs
Give full permissions to the /cvs
directory to all users:
[root@cvs-srv]# chmod -R 777 /cvs
This is an example only and these permissions should not be used in a production system.
Edit the /etc/xinetd.d/cvs
file and make sure that the CVS section is uncommented and configured to use the /cvs
directory. The file should look similar to:
service cvspserver
{
disable = no
port = 2401
socket_type = stream
protocol = tcp
wait = no
user = root
passenv = PATH
server = /usr/bin/cvs
env = HOME=/cvs
server_args = -f --allow-root=/cvs pserver
# bind = 127.0.0.1
Start the xinetd
daemon by running service xinetd start
as the root user.
Add a rule which allows inbound connections using TCP on port 2401 by using the system-config-firewall tool.
As the cvsuser
user, run the following command:
[cvsuser@cvs-client]$ cvs -d /cvs init
At this point, CVS has been configured but SELinux will still deny logins and file access. To demonstrate this, set the $CVSROOT variable on cvs-client
and try to log in remotely. The following step should be performed on cvs-client
:
[cvsuser@cvs-client]$ export CVSROOT=:pserver:[email protected]:/cvs
[cvsuser@cvs-client]$
[cvsuser@cvs-client]$ cvs login
Logging in to :pserver:[email protected]:2401/cvs
CVS password: ********
cvs [login aborted]: unrecognized auth response from 192.168.100.1: cvs pserver: cannot open /cvs/CVSROOT/config: Permission denied
SELinux has blocked access. In order to get SELinux to allow this access, the following step should be performed on cvs-srv
:
Change the context of the /cvs
directory as the root user in order to recursively label any existing and new data in the /cvs
directory, giving it the cvs_data_t
type:
[root@cvs-srv]# semanage fcontext -a -t cvs_data_t '/cvs(/.*)?'
[root@cvs-srv]# restorecon -R -v /cvs
The client, cvs-client
should now be able to log in and access all CVS resources in this repository:
[cvsuser@cvs-client]$ export CVSROOT=:pserver:[email protected]:/cvs
[cvsuser@cvs-client]$
[cvsuser@cvs-client]$ cvs login
Logging in to :pserver:[email protected]:2401/cvs
CVS password: ********
[cvsuser@cvs-client]$