CS4513 Distributed Systems - Program 0

WPI Worcester Polytechnic Institute

Computer Science Department

CS4513 Distributed Computer Systems - Term D04
Instructor: Bob Kinicki

Project 0 - Linux Specifics and
WPI File System Installation

10 Points
Assigned: Tuesday, March 16, 2004
Due: 10:00 a.m. Tuesday, March 23, 2004

Note, you must have formed groups and received your machine name and password from the TAs before starting this project.



The purpose of this project is two-fold. The first is to get you familiar with the Linux system: how to create and add users, how to use some common Unix tools, where the kernel (the operating system) source code is located, how to reboot and how to save your work onto the Fossil server. The set of commands is not intended to be exhaustive. Rather, it is to get you started on the kinds of work you will need to do for future projects. The second purpose is to install WPI File System, which is identical with Linux's Minix file system. This part of the project will both help you understand what is needed to create and install a file system under Linux as well as serve as a basis for future projects.

As you work the project below, feel free to explore further than the basic commands below, if you so desire. Refer to the Hotlinks section for more information on Linux and the Fossil lab. You may also send questions to the TA mailing list at cs4513-ta@cs.wpi.edu.

Linux Specifics

This project primarily involves running the following commands in a "cookbook-like" fashion and then answering some simple questions. When you are asked to use a command you are not familiar with, use the man command to learn about the command. You should consider getting familiar with reading Linux man pages as one of the goals of this project, too.


You will be the system administrator for your Linux machine for the entire term. Here, you will create some user accounts and give them the ability to access system-private stuff as root.

Carry out following steps:

  1. Log into your machine as user root.
  2. Create a new user account with the command useradd. You may want to use the -m flag, too.
  3. Create a password for the new account using the passwd command.
  4. Give sudo permissions to the new account by editing the file /etc/sudoers with your favorite editor (emacs, vi or pico, say). If you like vi, you might consider running the command visudo. Add a line to the end of the sudoers file that looks like:
       newuser ALL=(ALL) ALL
    replacing "newuser" with your new account name.
  5. Add the new account to the group "root" (in /etc/group). You'll need this to get access to linux kernel sources.
  6. Login to the new account to be sure it works. From the same machine use login or su. From a different Fossil machine use slogin or ssh. From a different WPI machine, you must first login to the Fossil server (fossil.wpi.edu) using slogin or ssh.
  7. As a user, you may use passwd to change your password or chsh to change your shell as desired.
  8. Repeat the above steps for each person in your group.
  9. Note, to delete an account use the command userdel, with a -r option to remove home directories. Please note that the user accounts "guest" and "admin" should never be deleted. If you ever find a machine with the "guest" account not working, please report it to the TA mailing list (cs4513-ta@cs.wpi.edu).

After the above steps, you will typically log into your machine as a normal user and then use the sudo command to perform any commands that require root access. This is the preferred method used below.


Here, you will find where the Linux source code is located, how many lines of code it is, how large the "core" part of the kernel is and locate some specific kernel modules.

  1. Go to the main directory of the Linux source code by doing a cd /usr/src/linux.
  2. Run the command find to see how many files there are.
  3. Run the command find | wc -l to count how many files there are.
  4. Run the command find -name '*.c' to see how many .c files there are.
  5. Count the lines of source code.
  6. Find how many source code files have been copyrighted (at one time, at least) in the kernel (in /usr/src/linux/kernel, the core part of the Linux operating system) by Linus Torvalds using:
    grep -l Linus `find -name '*.c'` | wc -l

Fossil Lab Use

All the client machines are on a private network. The only remote access to the rest of WPI (and the rest of the Internet) is through the Fossil server (fossil.wpi.edu), which is a Firewall.

Your client machines are not backed up. You should save your source code and any other class-specific files by copying the files to the Fossil server, which is backed up nightly.

  1. From your assigned machine, type ssh ccc.wpi.edu and login to a CCC machine (bert, ernie ...).
  2. From the CCC machine, ping (using ping, of course) your assigned machine.
  3. Type slogin fossil.wpi.edu and log into the server (using the account given to you by the TAs).
  4. Use slogin to log into your assigned machine.
  5. Type scp /usr/src/linux/.config fossil:/home/newuser/config.save to save the linux kernel configuration to the fossil server, replacing "newuser" with your login name. In general, you should use scp to backup your work to the fossil server.

Installing the WPI File System

The WPI file system is identical with the Minix file system provided with Linux, just named differently and made as a separate module for the kernel. You will add the WPI file system source files to existing default kernel source, modify the existing kernel codes slightly to register the WPI file system and re-compile the kernel image and the module. You will only need to compile the kernel image once. However, you will need to frequently compile and load WPI file system module as projects go on.

Refer to "Building Linux Kernel" and "Installing WPI File System Module" section of the Fossil Howto page for detailed information on how to install the file system module. The following are the general steps you will need to follow.

  1. Copy the linux source to your own directory and make appropriate soft linkages.
  2. Download WPI file system source codes from the Fossil server and place them in the appropriate places.
  3. Compile the new kernel image and modules.
  4. Install your new kernel image and modules. In order to boot your new kernel, you'll need to copy the kernel image to the place where your regular bootable kernel is found. Copy your kernel image to /boot/vmlinuz.wpi.
  5. Configure lilo (the Linux boot manager) to enable you to select your new kernel in addition to the old kernel. Edit /etc/lilo.conf (using sudo) and add the following lines to the end of the file:
      image = /boot/vmlinuz.wpi
        root = /dev/hda5
        label = wpi
        append = "idebus=66"
  6. Run lilo to enable it to recognize your new kernel by typing sudo /sbin/lilo.
  7. Prepare to reboot. Check if anyone else (your group members) is logged into your machine using the who command. If there is, ask them to log out (use talk or write or something similar). Once they log out, use sudo /sbin/reboot to reboot the machine. Note, in general, if you cannot reach a remotely logged in user and need to reboot, you may try using sudo /sbin/shutdown -r +5 to reboot it in 5 minutes, sending out warning messages.
  8. At the "lilo" prompt, type wpi to select the new kernel you have for booting. You can use /sbin/reboot to reboot and then select "linux" to get back to the original kernel.
  9. Load the WPI file system module into the kernel by typing insmod /lib/modules/2.2.14/fs/wpi.o. You can verify if the module is loaded by typing lsmod. To unload the module, type rmmod wpi
  10. Insert a blank floppy disk and type mkfs.minix /dev/fd0. This will format the disk using Minix file system format.
  11. Mount the floppy disk to /mnt directory by typing: mount -t wpi /dev/fd0 /mnt
  12. Copy some files onto the floppy mounted to /mnt (ex: cp /etc/fstab /mnt and do cat /mnt/fstab. Also, make a directory on the floppy: mkdir /mnt/tmp.
  13. Unmount the floppy by typing umount /mnt.


Answer the following questions:

  1. What is the user ID (UID) for each user? (The UID is the first number next to the login name). What is the UID for "root"?
  2. How many lines of .c are there in the WPI file system source tree?
  3. What does is say when you try to ping your assigned machine from a CCC machine?
  4. How long did it take to re-compile your kernel and modules?
  5. Can you mount and read the floppy disk that was mounted and written using WPI with Minix?
  6. Which function registers a filesystem to the kernel?
  7. In which functions in which source files of the WPI filesystem is the mtime field modified?

Type up answers to your questions and turn them in via turnin.


The main Fossil home page is at http://fossil.wpi.edu/. It has additional information on the Lab itself, system administration, and Linux.

Send all project questions to the TA mailing list.
Send all Fossil administrative questions to the Fossil mailing list.