Administering Multics

From Multics Wiki
Jump to: navigation, search

This page includes a collection of sections on administering Multics. For now, they are in no particular order and will be organized once there is a critical mass of such articles.


How to Add a New User

Follow the following example to add a new user to your Multics system. Make sure you are logged into a user on the SysAdmin project. For a brand new system, the only accessible SysAdmin account will be Repair.SysAdmin.

cwd >udd>sa>a
r 11:05 0.017 0

ec master register

Enter full user name (Last, First I.)
Full name           Swenson, Eric J.

Enter mailing address
Address             Room 13

Enter programmer number
Prog. number        

Enter notes
Notes               

Enter default project
Project ID          SysAdmin
Password:
Password again:
Network Password:

User ID assigned is "Swenson".
Is this OK? y

More users to add? no
r 11:06 0.390 55

Note: You must provide some value for the Full name and Address fields. The newly created user will not be able to login until you add this user to some project. See the next section for help on how to add a user to a project.

How to Add a User to a Project

Before you can add a user to a project, you must have created the user. See the FAQ entry on how to do that.

Follow the following example to add a user to a project. Make sure you are logged in as a user on the SysAdmin project. For a brand new system, the only accessible SysAdmin account will be Repair.SysAdmin.

cwd >udd>sa>a
r 11:16 0.016 0

ec master upmf SysAdmin Swenson
r 11:17 0.250 47

The first parameter to the upmf function (in master.ec) is the ProjectId. The second parameter is the Personid.

Note: the above command will extract the project PMF from pmf.archive, update it, convert the PMF to a PDT, and install the PDT. Then, it will re-archive the PMF in pmf.archive.

Creating a New Project

To create a new project, and set the initial member(s) of the project, you must login to an project with sufficient privileges (e.g. *.SysAdmin). You can follow the example below, substituting appropriate values for the project name, various fields, and members. You can hit <enter> or <return> at each prompt to accept the default value. Note that in a clean system, the Other (load control group), which will be selected as the default group, doesn't allow shift 1 logins, so either specify System (as shown below) if appropriate, or create a new load control group first, and specify it here. Alternately, you can change the Other load control group to allow shift 1 logins, which might be the best option.

cwd >udd>sa>a
r 13:34 0.899 354

ec master new_proj Multics
Creating new project "Multics".
Title:   Multics
Investigator:   
Inv. Address:   
Supervisor:   
 Phone:   
Account:   
Requisition:   
Amount:                 open

Cutoff date:            12/02/16  0000.0 pdt Fri

Billing name:   
Billing Address:   
Project Alias: type "." to delete current alias from SAT.
Alias:   
Project administrators. Type "." to delete.
 Administrator:   
Absentee foreground cpu limit: 0

Authorization:          system_low

Audit flags:            fsobj=N/N,fsattr=N/N,rcp=N/N,admin=N/N,special=N/N,other=N/N,^admin_op,^priv_op,^fault,^small_cc,^moderate_cc

Segment quota:          100

Directory quota:        10

Rate structure:         default

Default group:          Other
System
Authorized groups. Type "." to delete.
 Group:   
Attributes:             anonymous, bumping, brief, vinitproc, vhomedir, nostartup;

Grace:                  2880

Minimum login ring:     4

Maximum login ring:     5

Maximum pdir quota:     0

Maximum foreground processes: 0

Maximum background processes: 0

new_proj: Do you wish to review the project?   no
Project directory logical volume: 
Enter initial list of users. Type "." to exit
 Person:                Swenson
 Person:                

Input for "Multics" complete.
daily_summary: cut 0, warned 0, total $0.00
archive: >udd>sa>a>Multics.pmf appended to >udd>sa>a>pmf.archive
r 13:35 1.390 93


Adding a Guest Account with Anonymous Logins

While any project can support anonymous logins, a typical convention is to use the Guest project for this purpose. The Guest project does not exist on a new (cold booted or QuickStart) Multics system. In order to create the Guest project, you proceed just like you were creating any other project. However, usually, you want to place some limits on the number of Guest logins. The Multics way of controlling the number of logins (interactive or absentee) of an account is through "Load Control Groups". Before creating the Guest project, it is recommended that you add a load control group, called "Guest", for the Guest project.

First, login as a user in the SysAdmin project. Then, execute the following commands:

cwd >udd>sa>a
r 16:59 0.096 7

ed_mgt

The ed_mgt command uses a prompt of "type " to let you know it is ready for a command. For example:

ed_mgt
type    

Issue the "a" command to add a new load control group. Name the group "Guest" and specify, for example, "4.0" load control units for this group.

a Guest 4.0

You will once again receive a "type " prompt, do which you should reply with the "w" and "q" commands (which "write" the changes and "quit" the ed_mgt program):

Your session should look like this:

ed_mgt
type      a Guest 4.0
type    w
type    q
r 17:29 0.111 15

Next, install the new MGT (Master Group Table) with this command:

install MGT.mgt
r 17:30 0.106 1

This safely copies the MGT (MGT.mgt) to the >system_control_1 directory, ensuring no collisions with other administrators.

Next, create the Guest project.

ec master new_proj Guest

You will be given a series of prompts, all of which you can just accept the default (by typing <return> or <enter>) UNTIL you see the prompt for "Default group:". For that prompt, enter "Guest". Then, continue typing <return> or <enter> until you see the question: "Do you wish to review the project?":

The prompts will look like this:

Creating new project "Guest".
Title:   
Investigator:   
Inv. Address:   
Supervisor:   
 Phone:   
Account:   
Requisition:   
Amount:                 open

Cutoff date:            03/22/17  0000.0 pst Wed

Billing name:   
Billing Address:   
Project Alias: type "." to delete current alias from SAT.
Alias:   
Project administrators. Type "." to delete.
 Administrator:   
Absentee foreground cpu limit: 0

Authorization:          system_low

Audit flags:            fsobj=N/N,fsattr=N/N,rcp=N/N,admin=N/N,special=N/N,other=N/N,^admin_op,^priv_op,^fault,^small_cc,^moderate_cc

Segment quota:          100

Directory quota:        10

Rate structure:         default

Default group:          Other
Guest

Authorized groups. Type "." to delete.
 Group:   
Attributes:             anonymous, bumping, brief, vinitproc, vhomedir, nostartup;

Grace:                  2880

Minimum login ring:     4

Maximum login ring:     5

Maximum pdir quota:     0

Maximum foreground processes: 0

Maximum background processes: 0


new_proj: Do you wish to review the project?   

At the "Do you wish to review the project?" prompt, answer "no".

You will be prompted with:

Project directory logical volume: 

to which you can reply with <return> or <enter>.

Next, you will be asked for a list of initial users. Here, in order to allow anonymous logins, enter a Personid of "*". At the next "Person:" prompt, type "." followed by <return> or <enter> to end the list.

Enter initial list of users. Type "." to exit
 Person:                *
 Person:                .

Input for "Guest" complete.

WARNING 14, SEVERITY 1 IN LINE 7
Anonymous user had no "homedir" statement; assuming project directory.

WARNING 15, SEVERITY 1 IN LINE 7
Anonymous user has no password specified.

WARNING 16, SEVERITY 1 IN LINE 7
Anonymous user has no initial procedure specified.
daily_summary: cut 0, warned 0, total $0.00
archive: >udd>sa>a>Guest.pmf appended to >udd>sa>a>pmf.archive
r 17:06 2.771 73

Do not worry about the warning messages. They are expected.

Now, you will have a Guest account that supports anonymous logins.

How to Set the Password for a User

Login as a user in the SysAdmin project. Then execute the following commands:

cwd >udd>sa>admin
ec master chpass <username>
Password
<enter password>
Password again:
<enter password>

How to Increase the Inactivity Timeout Period

By default, Multics enforces an hour inactivity timeout. If a user does not interact with Multics for more than 1 hour, he/she will be automatically logged out. There is a warning message displayed to the user 5 minutes before this automatic logout.

If you wish to increase the inactivity timeout period (you can't disable it), you can follow these procedures:

ed_installation_parms >sc1>installation_parms

The program will respond with the prompt:

type

You can see the current inactivity timeout by typing:

p inactive_time

And you will get a response similar to this one:

inactive_time:      3600 sec.
type

You can change this value by typing something like:

c inactive_time

And you will prompted with:

inactive_time (seconds):

Enter a value in seconds, such as:

7200

Then save your changes and quit with:

type w
type q

Note that Multics doesn't support per-user or per-project inactivity timeouts. This is a system-wide parameter.

How to Forcibly Bump a User

If you wish to force-logout a user, which is called, in Multics, "bumping" a user, you can use the operator "bump" command.

On the operator console, you can type: “bump <personid>.<projectid>

As an administrator, you can use the command “send_admin_command sc_command bump <personid>.<projectid> <time> <message>”. the short name for send_admin_command is “sac”.

Using “send_admin_command sc_command <command>” is a way for an admin to execute arbitrary operator commands.

How to Change the Name of My Multics System

When you cold boot a new Multics system, its name will be "Installation and location". Clearly, this is not what you want. You may also not like the choice you (or someone else) originally made for the so-called "installation_id". The installation id shows up in many places, but the most prominent is when you connect to Multics:

Multics MR12.6d: Installation and location (Channel d.h000)
Load = 5.0 out of 90.0 units: users = 5, 12/01/15  1121.4 pdt Tue

To change the installation id, make sure you are logged in with sufficient privileges (such as an account in the SysAdmin project). Then use the ed_installation_parms prorgram like this:

ed_installation_parms >sc1>installation_parms

The system will respond with:

Hit QUIT and use "program_interrupt" to return this request loop.
type

Here, you can use the "p all" command to see all the parameters. Or the "p installation_id" to see the current setting of this installation parameter. You can change the value with the "c installation_id" command:

type c installation_id
Installation id     Gold Hill Multics
type

To check the value, do this:

type p installation_id
Installation id     Gold Hill Multics
type w
type q
r 22:01 0.067 2

Now, when you logout and log back in, you will be greeted with your new installation id:

logout
Swenson.SysAdmin logged out 12/01/15  1301.7 pdt Tue
CPU usage 3 sec, memory usage 7.7 units, cost $1.76.
hangup
Multics has disconnected you
Multics is now listening to this line

Multics MR12.6: Gold Hill Multics (Channel d.h000)
Load = 5.0 out of 90.0 units: users = 5, 12/01/15  1301.7 pdt Tue

How to Add an Alias for my Personid

While historically, Multics Personids were either a user's last name, or more frequently, a combination of initials and last name, it was also possible to have an alias. An alias might be user's initials or something easier to type and all lower-case. With an alias, you can login with the shorter alias, rather than your possibly difficult-to-type Personid. Although not specifically tied to aliases, a common practice was to also get the alias as an added name on your home directory.

To add an alias for a Personid, make sure you are logged into a privileged project, such as SysAdmin, and use the following example as a guide:

cwd >udd>sa>a
r 13:34 0.740 97

ec master chalias Swenson ejs
Alias:
r 13:34 0.402 33

The first parameter to the chalias function (in master.ec) is the Personid. The second is the desired alias. The command displays the old alias.

If you'd like to add the alias to the home directory, use the add_name (an) command, as follows:

an >udd>SysAdmin>Swenson ejs

How to Enable Multiple Logins (from same Personid.Projectid)

By default, projects are setup to only allow one login session at a time. You can easily change this by giving the project the "multip" attribute.

Without this attribute, a second login attempt might result in a login message such as the following:

Multics MR12.6: Gold Hill Multics (Channel d.h002)
Load = 6.0 out of 90.0 units: users = 6, 12/02/15  1342.3 pdt Wed
l ejs Multics
Password:
Attempt to log in Swenson.Multics from ASCII terminal "none".
Swenson.Multics already logged in from ASCII terminal "none".
Please try to login again or type "help" for instructions.

You can, of course, login to a different project, but you will be warned that this is what you are doing when you login:

Multics MR12.6: Gold Hill Multics (Channel d.h002)
Load = 6.0 out of 90.0 units: users = 6, 12/02/15  1342.3 pdt Wed
l ejs sa
Password:
Another Swenson (Swenson.SysAdmin) is now logging in from ASCII terminal "none".
This is your 2nd interactive login instance.
You are protected from preemption.
Swenson.SysAdmin logged in 12/02/15  1344.8 pdt Wed from ASCII terminal "none".
Last login 12/02/15  1333.9 pdt Wed from ASCII terminal "none".
r 13:44 0.792 24

In order to give a Project or a specific user on a Project the multip attribute, you have to update the Project in the SAT as well as the project's PDT. It is not enough to do one or the other.

To update the Project in the SAT, follow similar steps to these:

cwd >udd>sa>a
r 14:56 0.044 5

edit_proj Multics attributes 
Attributes:             anonymous, bumping, brief, vinitproc, vhomedir, nostartup;
multip
r 14:57 0.078 2

install smf.cur.sat -a
r 14:57 0.029 2

Note that we didn't use the "master.ec" this time, but the new_proj command directly. We gave edit_proj the project name (Multics) and the field we wanted to update (attributes). Edit_proj displayed the existing allowed attributes for the project and then prompted for changes. Typing "multip" added that attribute to the list (it didn't change any of the other attributes). Because we didn't use "master.ec", we have to manually install the updated candidate SAT (smf.cur.sat).

You can verify that this change was made by doing the following:

print_sat >sc1>sat Multics 

   projectid:       Multics;
/* state:           1; */
   projectdir:      >user_dir_dir>Multics;
/* pdt_ptr:         554|0; */
   maxprim:         32767;
/* n_users:         1; */
   attributes:      anonymous, multip, bumping, brief, vinitproc, vhomedir, nostartup;
   authorization:   "system_low";
/* days_to_cutoff:  366; */
/* pct_balance:     100%; */
/* dollars_to_cutoff: $0.00; */
   ring:            4,5;
   group:           System;
   grace:           2880;
   pdir_quota:      0;
   max_foreground:  0;
   max_background:  0;
   abs_foreground_cpu_limit: 0;

r 15:00 0.069 2

Note the "multip" attribute is now allowed for this project. Next, you have to update the PDT for the project. You can do that by editing the PMF with your favorite editor (emacs, qedx, ted, etc.). Change the Attrributes line (fields with initial capital letters are per-project and those with initial lowecase letters are per-user) to include the multip attribute.

PMFs for undelegated projects are stored in the archive >udd>sa>a>pmf.archive. You should extract the PMF from the archive using a command similar to this (assuming you're still in the >udd>sa>a directory):

ac x pmf Multics.pmf
r 15:04 0.319 1

Then, edit the PMF to add the multip attribute. Here is an example PMF edited already:

pr Multics.pmf

                    Multics.pmf         12/02/15  1501.7 pdt Wed

Projectid:          Multics;
Initproc:           process_overseer_;
Grace:              0;
Attributes:         vinitproc, vhomedir, nostartup, multip;

personid:           Swenson;
end;

r 15:01 0.054 7

Once you have edited the PMF, convert it to a PDT, install the PDT, and put the PMF back in pmf.archive:

cv_pmf Multics
r 15:06 0.059 2

install Multics.pdt
r 15:06 0.018 1

ac rd pmf Multics.pmf
r 15:06 0.028 1

Now, you will be able to login to the project more than once, concurrently:

Multics MR12.6: Gold Hill Multics (Channel d.h002)
Load = 6.0 out of 90.0 units: users = 6, 12/02/15  1507.5 pdt Wed
l ejs Multics
Password:
Another Swenson (Swenson.Multics) is now logging in from ASCII terminal "none".
This is your 2nd interactive login instance.
You are protected from preemption until 15:07.
Swenson.Multics logged in 12/02/15  1507.6 pdt Wed from ASCII terminal "none".
Last login 12/02/15  1506.2 pdt Wed from ASCII terminal "none".

r 15:07 0.246 19

How to Add Quota When You Get a Record Quota Overflow

Multics supports per-directory quotas. A directory may have a specific quota, or it may get its quota from its parent directory. Each directory off of the root must have a quota. If you run out of quota, you need to "move" quota to an appropriate parent directory (or a directory with a quota) from a parent directory.

Note: Multics supports both segment quota and directory quota. We're only talking about segment quota here.

For example: Let's say that you get a record_quota_overflow error while attempting to write something in your home directory. You can check to see if your home directory has quota via a command like this:

gq >udd>SysAdmin>Swenson
quota = 0; used = 2975
r 15:54 0.013 0

The above example shows that there is no explicit quota on >udd>SysAdmin>Swenson, but this directory is currently using 2975 records. It presumably is getting these from its parent directory. Let's check:

gq >udd>SysAdmin
quota = 3000; used = 3000
r 15:55 0.013 0

Aha! We see that Swenson's home directory is getting its quota from >udd>SysAdmin, which is at its maximum quota of 3000 records.

We need to give more quota to >udd>SysAdmin. Let's make sure that the parent directory (>udd) has enough quota.

gq >udd
quota = 3790; used = 0
r 15:56 0.010 0

We can see that it has 3790 records. So without giving more quota to >udd, we can only move a maximum of 3790 records of quota from >udd to >udd>SysAdmin. Let's do that:

mq >udd>SysAdmin 3790
move_quota: Record quota overflow. >udd>SysAdmin
r 15:58 0.020 0

Well, that didn't work. We can't allocate the maximum. Let's try 3000 records:

mq >udd>SysAdmin 3000
r 15:58 0.009 0

That worked. Let's check:

gq >udd>SysAdmin
quota = 6000; used = 3000
r 15:59 0.011 0

That should give all users of the SysAdmin project 3000 more records of quota. Since the original directory we tried to add segemnts to (>udd>SysAdmin>Swenson) didn't have any quota set, we don't need to move quota to it. It will just borrow from the parent. We should be all set now (until we run out of the 3000 records!)

How to Set Up the Crank

The "crank" are the daily, weekly, and disk report absentee jobs run by the system administrators. These are necessary to keep the system healthy and also provide reports for administrators.

To set up the crank, decide on the SysAdmin user who is doing to run the crank and related exec_coms. It can be anyone on the SysAdmin project.

Then, login as that SysAdmin user.

Before you can schedule the absentee jobs, you have to set up a few variables in the "value segment" (think of this as a config file that can be queried via exec_coms).

The pathname of the value segment used by the crank is >udd>sa>a>sys_admin.value.

To see the current values in this segment, use these command:

cwd >udd>sa>a
r 13:24 0.051 8

value_list -pn sys_admin
    abort_crank               "false"
    accounting_start_up_time  "2015-12-22__17:36:46.203305_pst_Tue"
    admin_online              "SA1.SysAdmin"
    crank_time                "0300."
    default_addr              "ADMINISTRATOR"
    default_dest              "SYSTEM"
    disk_time                 "0230."
    log_number                "0"
r 13:24 0.051 8

To set the required variables to allow the crank to run, do the following (still in the >udd>sa>a directory):

value_set -pn sys_admin last_diskreport "2015-12-17__22:57:20.526510_pst_Thu"
r 13:24 0.051 8

value_set -pn sys_admin last_log_time "2015-12-17__22:57:20.526510_pst_Thu"
r 13:24 0.051 8

value_set -pn sys_admin weekly_time "0400._6days"
r 13:24 0.051 8

The first two settings for last_diskreport and last_log_time configure when the crank was last run. You will get errors if these are not set, so set these to dates in the past (the above values should work).

The third setting tells the system what time to run the weekly job. In the example above, we run the weekly job at 04:00 (4AM). Note that the disk report is run at 02:30 and the crank at 03:00. Those values were already set in the sys_admin.value segment.

The crank requires the Terminals, Operator, and HFED projects to exist. If these exist already, you can skip this next step. It won't hurt to execute it in any case. But before you do, make sure that the Terminals.pmf, Operator.pmf, and HFED.pmf segments are in the >udd>sa>a directory. If they are not, they are likely archived in >udd>sa>a>pmf.archive. Extract them from the archive, as shown below -- but only if they don't already exist -- in other words, skip the "ac x pmf (Terminals Operator HFED).pmf step if they already exist in >udd>sa>a. Depending on what has happened on your machine before you attempt to setup the crank, the PMF files may, or may not be in >udd>sa>a.


ac x pmf (Terminals Operator HFED).pmf
r 13:35 0.148 34

cv_pmf (Terminals Operator HFED)
r 13:35 0.148 34

install (Terminals Operator HFED).pdt -a
r 13:35 0.148 34

ac ad pmf [segs *.pmf]
r 14:02 0.110 15

Now it is time to run the crank for the first time. This will actually not complete successfully, but will schedule the crank run for 0300 the next day. It should run successfully then.

ec master crank
ID: 10455982; 0 already requested.
>udd>sa>a>crank.absin in queue 1
sumry at end of file.
cutrpt at end of file.
daily_summary: cut 0, warned 0, total $0.00
sumry device detached.
cutrpt device detached.
system_total: range err: dayx = 0, not 1-190. set to 190
system_total: range err: qhi = 2804154368, not 1-96. set to 96
summarize_sys_log: 5 streams, 37 selectors
summarize_sys_log: Log >system_control_dir>as_logs>log from 2015-12-22 17:37:07.968223 to 2016-01-11 13:37:26.593098
summarize_sys_log: 175 messages read.
summarize_sys_log: 3 streams, 15 selectors
summarize_sys_log: Log >system_library_1>syserr_log from 2015-12-22 17:23:47.496112 to 2016-01-11 13:17:41.657665
summarize_sys_log: 561 messages read.
summarize_sys_log: 1 streams, 1 selectors
summarize_sys_log: Log >system_control_dir>as_logs>admin_log from 2015-12-22 17:25:03.502298 to 2016-01-11 13:16:43.186541
summarize_sys_log: 1942 messages read.
summarize_sys_log: 1 streams, 1 selectors
summarize_sys_log: The requested log message cannot be located. Cannot find message before 2016-01-11 13:37:27.594181
move_log_segments: At least two log segments must be present in >sc1>syserr_log>syserr_log in order to migrate one.
move_log_segments: Use of star convention resulted in no match. Listing >sc1>as_logs>log.????????.??????
move_log_segments: Use of star convention resulted in no match. Listing >sc1>as_logs>admin_log.????????.??????
move_log_segments: Use of star convention resulted in no match. Listing >sc1>as_logs>iolog.????????.??????
     105 messages copied into:
>system_control_1>heals_dir>heals_log
     371 messages processed,
     syserr seq_num 1000179 through
     syserr seq_num 1000550.
    No records were deleted from:
>system_control_1>heals_dir>heals_log.
remove_registry: Use of star convention resulted in no match. >udd>sa>a>safe_registries>**.rcpr
delete_registry: Use of star convention resulted in no match. >udd>sa>a>safe_registries>**.old
copy_registry: Use of star convention resulted in no match. >sc1>rcp>**.rcpr
truncate: Entry not found. meter_data.print
truncate: Entry not found. bwchart.print

Error:  out_of_bounds at b_and_w$|2253
(>system_library_tools>bound_admin_rtnes_)
referencing >udd>sa>a>today.use_totals|776206
Attempt to access beyond end of segment.
r 13:37 7.572 578 level 2

You can release that command level with:

rl
r 13:37 7.572 578

If you then list your absentee requests, you'll see that the crank is scheduled:

lar

Absentee queue 1:    1 request. 1 total request.

213725.5 crank.absin (deferred by user to 01/12/16 03:00)

r 13:39 0.097 1

Invoke this command to get the disk report doing:

ec master disk_auto
$ Following figure is total quota / current use.
557883/76140
dir: 267340/924
seg: 290543/75216
charge_disk: No logical volumes specified. Storage on all logical volumes will 
\cbe charged for.
charge_disk: charged 7 dirs out of 20 to 6 projects
ID: 12557720; 1 already requested.
>udd>sa>a>dodrp.absin in queue 1
r 13:40 1.425 71

Invoke this command to get the weekly job running:

ec master weekly
ID: 13024732; 2 already requested.
>udd>sa>a>weekly.absin in queue 1
save_dir_info: Incorrect access on entry. Cannot get quota of PNT.safe.pnt
save_dir_info: Incorrect access on entry. Cannot list inacl of PNT.safe.pnt
save_dir_info: Incorrect access on entry. >udd>SysAdmin>admin>PNT.safe.pnt
comp_dir_info: Entry not found. Accessing dir_info segment
(>udd>SysAdmin>admin>old.admin.dir_info).
delete: Entry not found. >udd>SysAdmin>admin>old.admin.dir_info
comp_dir_info: Entry not found. Accessing dir_info segment
(>udd>SysAdmin>admin>old.lib.dir_info).
delete: Entry not found. >udd>SysAdmin>admin>old.lib.dir_info
save_dir_info: Incorrect access on entry. Cannot get quota of PNT.pnt
save_dir_info: Incorrect access on entry. Cannot list inacl of PNT.pnt
save_dir_info: Incorrect access on entry. >system_control_1>PNT.pnt
save_dir_info: Incorrect access on entry. Cannot get quota of user_messages
save_dir_info: Incorrect access on entry. Cannot list inacl of user_messages
save_dir_info: Incorrect access on entry. >system_control_1>user_messages
comp_dir_info: Entry not found. Accessing dir_info segment
(>udd>SysAdmin>admin>old.system_control_1.dir_info).
delete: Entry not found. >udd>SysAdmin>admin>old.system_control_1.dir_info
comp_dir_info: Entry not found. Accessing dir_info segment
(>udd>SysAdmin>admin>old.pdt.dir_info).
delete: Entry not found. >udd>SysAdmin>admin>old.pdt.dir_info
r 13:41 3.194 63

The errors are ok at this point.

Now you should have the daily and weekly absentee jobs setup.

How to Enable Access Auditing

First, enable auditing at the system level (the example below only enables unsuccessful access attempts, see the documentation on set_system_audit_flags for more options):

set_system_audit_flags -unsuccessful_access system_low

Next, establish the default auditing for new projects:

cwd >udd>sa>admin
admin_util set audit fsobj=N/R,fsattr=N/R,rcp=N/R,admin=N/R,special=N/R,other=N/R,admin_op,priv_op,fault

The above command will set the default value for the audit flags for any new projects you create. However, audit flags for all existing projects will remain at the previous default value defined by "admin_util". To see what those default are, you can issue this command:

admin_util print

Now, you have to set the audit flags for any projects for which you want to have auditing enabled. This example, sets audit flags for the SysAdmin project.

cwd >udd>sa>a
edit_proj SysAdmin audit fsobj=N/R,fsattr=N/R,rcp=N/R,admin=N/R,special=N/R,other=N/R,admin_op,priv_op,fault
install smf.cur.sat -a

You can verify your new audit settings with the print_sat command:

print_sat >sc1>sat SysAdmin

To set audit flags for existing users, use the following command:

new_user$cga Swenson audit fsobj=N/R,fsattr=N/R,rcp=N/R,admin=N/R,special=N/R,other=N/R,admin_op,priv_op,fault

To verify the audit flags for an existing user, use this command:

print_pnt Swenson

How to Dump Ring-0 Segments for Debugging

The command rzdump (rzd) can be used to display the contents of both ring-0 segments and outer-ring segments. By default, it dumps out segments as a sequence of words in octal. However, it is capable of displaying structured data it knows about.

For example, you can use the command:

rzd [pd]>kst -as kst

Will dump out the KST in your process directory in a format like the following:

kst                           @ 373|0
  lowseg = 152, highseg = 1023, highest_used_segno = 336, lvs = 0, time_of_bootload = 0, garbage_collections = 0,
  entries_collected = 0, free_list = "000000"b3, uid_hash_bucket (0) = "001600"b3, uid_hash_bucket (1) = "002460"b3,
  uid_hash_bucket (2) = "000650"b3, uid_hash_bucket (3) = "001420"b3, uid_hash_bucket (4) = "002030"b3,
  uid_hash_bucket (5) = "001730"b3, uid_hash_bucket (6) = "002510"b3, uid_hash_bucket (7) = "000000"b3,
...

See the documentation on rzd ("help rzd") for details. The help file >doc>ss>azm>structure_names.info documents all the structures known to rzd. For those structures it doesn't know about, you can create your own definitions for rzd.

You create your own structure declaration in an object segment compiled with the -table option. Just create an PL/1 program that declares the structure you want, compile it with the -table control argument, and specify the name of the object segment with the -in control argument of rzd.

As an example, assuming you have created a PL/1 program named gdStructures.pl1 from the declaration of the pds structure in pds.cds, invoke rzd on a pds this way:

rzd [pd]>pds -as pds.stacks -in gdStructures

You will get output like the following:

000000
  stacks (0) = 230|0 (Invalid segment number), stacks (1) = 231|0   [pd]>stack_1, stacks (2) = 232|0   [pd]>stack_2,
  stacks (3) = null, stacks (4) = 234|0   [pd]>stack_4, stacks (5) through stacks (7) = null
...

Note: You will need access to the phcs_ gate in order to dump ring-0 segments.

Note 2: Thanks to Gary Dixon for this information. You can find a sample (gdStructures.pl1) here: http://swenson.org/multics_wiki/downloads/doc/gdStructures.pl1

How to Add a New Terminal Type

Terminal types are defined in the system TTT (Terminal Type Table). This binary segment is located in >sc1>ttt. You never modify this segment directly, however. The source for this segment is found in >udd>sa>a>TTF.ttf. It is compiled using the cv_ttf command, which produces the file TTF.ttt. This is installed using the command "install TTF.ttt", which safely updates the system version in >sc1>ttt.

In order to add a new terminal type definition, you perform the following steps:

cwd >udd>sa>a
<edit the TTF.ttf segment to add the new definition(s).
cv_ttf TTF
install TTF.ttt

What To Do When The System is Hung

If your Multics system appears hung, first determine whether or not the Initializer process can respond to commands from the operator console. Do this by going to the terminal shell in which you started the simulator and pressing the Esc key. If you get the response:

M->

Then your system is probably not hung. Issue a command, such as "who" to the operator console and look for the output of that command. If you see the output, then your system is not really hung. If you can talk to the Initializer process, but your system is really not working (you can't login, those logged in are hung, etc), you can try to shut your system down by using these commands:

logout * * *
shut
 

You may wish to shut down all the way to your OS shell, and restart everything.

However, if your system does not respond to operator input, and appears otherwise hung, you may need to crash the system and restart. You may wish to "take a dump of the system" and you will certainly want to perform an "emergency shutdown". These are described next:

Interrupt A Hung (or Running) System

To interrupt a hung (or running) system, you perform what is called (in Multics parlance) an "execute fault" (EXF). In the days of hardware-based Multics systems, this involved pressing some buttons on hardware panels. Chances are, today, that you are using the DPS8M simulator. In order to "execute fault" on the simulator, you have two choices:

  1. send the dps8 process a USR1 signal
  2. interrupt the simulator by typing Control-E in the running dps8 process, and then issuing the simulator "exf" command.

If you are using a Linux or macOS host, you can send the USR1 signal to the process by first determining the process id (PID) for the process (use "ps -elf | grep dps8" or "ps aux | grep dps8") and then using the "kill" command to send the USR1 signal to that PID ("kill -USR1 NNN" where NNN is the PID of the dps8 process.

I have no idea how to do this on Windows, but you can use the second option (typing Control-E) to the simulator and using the "exf" command.

Both options should cause an "execute fault". Below is an example of commands executed on macOS to "find" the dps8 PID:

$ ps aux | grep dps8
eswenson         65997   1.4  0.8  2587720 135564 s007  S+   11:46AM   0:24.93 /Users/eswenson/Personal/Multics/src/dps8m-code/src/dps8/dps8 MR12.6f_boot.ini
eswenson         66017   0.0  0.0  2432804    800 s005  S+   11:47AM   0:00.00 grep dps8
 

You can see that the PID is 65997.

Now, here is an example of the command on Linux and macOS to send the USR1 signal to that process:

$ kill -USR1 65997
$
 

Expect to see something like the following on the operator console:

1047.2  RCP: Detached prta from Utility.SysDaemon.z
USR1 signal caught; pressing the EXF button
DBG(2399749397065)> ERR ERR: Need status register data format
DBG(2399749397113)> ERR ERR: doPayloadChan expected IDCW 10 (12)
CONSOLE: ALERT
sys_trouble: Execute fault by operator.
bce (crash) 1049.1:

The Bootload Command Environment (BCE) is now waiting for you to enter a command.

Taking a Crash Dump and Performing an Emergency Shutdown

The best practice here is to make a dump of the system and then perform an emergency shutdown:

bce (crash) 1049.1: M-> dump -long

Dumping Multics image.
Dump #1
Filling sst_names_
proc 1, dbr = 171714500004007775100023
proc 2, dbr = 000524000004000775100000
proc 3, dbr = 170740140004003775100000
proc 4, dbr = 170754740004003775100023
proc 5, dbr = 170764540004001775100023
proc 6, dbr = 170765740004001775100023
proc 7, dbr = 170766740004001775100023
proc 10, dbr = 170770140004001775100023
proc 11, dbr = 170771740004001775100023
bce (crash) 1051.2: M-> esd

1051.3  begin emergency shutdown part 1.
1051.3  emergency shutdown part 1 complete.
1051.3  shutdown complete
DBG(2400991064787)> ERR ERR: Need status register data format
DBG(2400991064835)> ERR ERR: doPayloadChan expected IDCW 10 (12)
bce (boot) 1051.3:
 

Now, you can reboot your system:

bce (boot) 1051.3: M-> boot star

Multics MR12.6f - 04/03/17  1052.2 pst Mon
1052.2  Loading FNP d, >system_library_unbundled>site_mcs 7.6c
Received BOOTLOAD command...
1052.2  FNP d loaded successfully
...
 

When the system is up, you may wish to analyze the dump (once Utility.SysDaemon has copied it from the dump partition to the >dumps directory). You do this with analyze_multics (azm). See the documentation for details.