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.
- 1 How to Add a New User
- 2 How to Add a User to a Project
- 3 Creating a New Project
- 4 Adding a Guest Account with Anonymous Logins
- 5 How to Set the Password for a User
- 6 How to Increase the Inactivity Timeout Period
- 7 How to Forcibly Bump a User
- 8 How to Change the Name of My Multics System
- 9 How to Add an Alias for my Personid
- 10 How to Enable Multiple Logins (from same Personid.Projectid)
- 11 How to Add Quota When You Get a Record Quota Overflow
- 12 How to Set Up the Crank
- 13 How to Enable Access Auditing
- 14 How to Dump Ring-0 Segments for Debugging
- 15 How to Add a New Terminal Type
- 16 What To Do When The System is Hung
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:
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:
The program will respond with the prompt:
You can see the current inactivity timeout by typing:
And you will get a response similar to this one:
inactive_time: 3600 sec. type
You can change this value by typing something like:
And you will prompted with:
Enter a value in seconds, such as:
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:
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:
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:
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:
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:
- send the dps8 process a USR1 signal
- 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.