home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / answers / aix-faq / part1 next >
Internet Message Format  |  1993-11-14  |  56KB

  1. Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!gatech!swrinde!cs.utexas.edu!mavrick!basto@cactus.org
  2. From: basto@cactus.org (Luis Basto)
  3. Newsgroups: comp.unix.aix,news.answers,comp.answers
  4. Subject: AIX Frequently Asked Questions (Part 1 of 3)
  5. Summary: This posting contains a list of Frequently Asked Questions 
  6.          and their answers about AIX, IBM's version of Unix.
  7. Keywords: AIX RS/6000 questions answers
  8. Message-ID: <1472@mavrick.UUCP>
  9. Date: 15 Nov 93 06:29:52 GMT
  10. Expires: 15 Dec 93 01:23:45 GMT
  11. Sender: luis@mavrick.UUCP
  12. Reply-To: basto@cactus.org (Luis Basto)
  13. Followup-To: comp.unix.aix
  14. Lines: 1706
  15. Approved: news-answers-request@MIT.Edu
  16. Supersedes: <1462@mavrick.UUCP>
  17. Xref: senator-bedfellow.mit.edu comp.unix.aix:32876 news.answers:14708 comp.answers:2651
  18.  
  19. Archive-name: aix-faq/part1
  20. Last-modified: November 15, 1993
  21. Version: 2.43
  22.  
  23.  
  24. Version: $Id: aix.faq,v 2.43 93/11/15 basto $
  25.  
  26. Frequently Asked Questions to AIX 3.x and IBM RS/6000
  27. _____________________________________________________
  28.  
  29. This posting contains frequently asked questions and answers about the
  30. IBM RS/6000 series workstations and AIX version 3. All input is very
  31. welcome, please mail to me at basto@cactus.org. You can also use
  32. cs.utexas.edu!mavrick!luis.
  33.  
  34. The list is split into three articles to pass thru most mailers. I'll
  35. usually try to post them once a month to comp.unix.aix, news.answers,
  36. and comp.answers. Please let your input continue as I am most thankful
  37. for all of it.
  38.  
  39. If you see a From: line it means that whatever follows is either an
  40. unabridged or slightly edited version of the input I have received, and
  41. that I may not have verified its contents. If there is no From: line, I
  42. probably know what I am talking about, and the entry is edited from
  43. various sources.
  44.  
  45. All entries are numbered with major and minor subject number, e.g. 
  46. 2.11. If the subject is preceded by an asterisk, that entry has been
  47. changed or added since the last posting.
  48.  
  49. The comp.unix.aix group is for AIX on all IBM platforms -- RT, PS/2,
  50. 370, RS/6000 and mainframes (ESA based on OSF/1), but the traffic has
  51. evolved to discuss predominantly AIX 3.x and the RS/6000. The
  52. newsgroups comp.sys.ibm.pc.rt and comp.sys.ibm.ps2.hardware cover the
  53. RT, mostly hardware and AOS 4.3, and on PS/2 hardware respectively. 
  54. Mark Whetzel posts FAQ lists about RTs in the rt and *.answers groups.
  55. There are few to non-existent discussions on AIX/370 and AIX/ESA.
  56.  
  57. This article covers only AIX 3.x and the RS/6000, except when noted.
  58.  
  59. If you post questions to comp.unix.aix, please be sure to indicate:
  60.  
  61. - the machine type and brief configuration, e.g. Model 540, 64 MB RAM,
  62.   48 MB swap space (this is actually bad), 1.2 GB XYZ hard drive, etc.
  63.   Note: There are now three classes of RS/6000s - the original, RS or
  64.   POWER, RS/2 or POWER2, and PowerPC.
  65.  
  66. - the exact AIX version number, i.e. AIX 3.1 is NOT sufficient, whereas
  67.   AIX 3.1.5 or AIX 3.1 with the 3005 update is. With 3.2 you should
  68.   mention any significant ptfs using the U4xxxxx numbers.
  69.  
  70. I am doing this on my own time. Please do not ask me questions that
  71. should be asked to IBM. If you suspect you have software defect problems
  72. call (800) 237-5511. If you have hardware problems call (800) IBM-SERV.
  73. ______________________________________________________________________________
  74.  
  75. Table of contents:
  76.  
  77. 1.0    General concepts
  78. 1.000  The AIX operating system - what is it?
  79. 1.000  I know neither Unix nor AIX - where do I find more information?
  80. 1.002* What is the Object Database?
  81. 1.003  How do I get rid of the verbose error messages?
  82. 1.004* Which release of AIX do I have?
  83.  
  84. 1.1    SMIT, system administration, file systems
  85. 1.100  I am used to Unix systems programming, why should I learn SMIT?
  86. 1.101  How do I turn off the "running man" in smit?
  87. 1.102  How do I import an /etc/passwd or /etc/group file from another box?
  88. 1.103  Cleaning up utmp, who, and accounting problems
  89. 1.104  How to fsck the root filesystem
  90. 1.105  How can I unmount /usr to run fsck on it?
  91. 1.106  How do I shrink /usr?
  92. 1.107  How do I make a filesystem larger than 2 Gig?
  93. 1.108  How do I see/change system parameters like number of processes per user?
  94. 1.109  How do I shrink the default paging space on hd6?
  95. 1.110  The swapper seems to use enormous amounts of paging space, why?
  96. 1.111  How much paging space do I need?
  97. 1.112  How do I mount a floppy disk as a filesystem?
  98. 1.113  How do I remove a committed lpp?
  99. 1.114  How can I recover space after installing updates?
  100. 1.115  Where are the AIX log files kept?
  101. 1.116  How can I log information about ftp accesses to a file?
  102. 1.117  How do I find a file name from the inode number?
  103. 1.118  How do I set up postscript accounting?
  104. 1.119  How do I create boot diskettes for 3.2?
  105. 1.120  Where can I find tools for performance monitoring?
  106. 1.121  How can I tell what virtual printer a print queue is using?
  107. 1.122  Two srcmstr's are less useful than one?
  108. 1.123  How do I set the tty name associated with a physical port?
  109. 1.124  How do I use mksysb to clone a system?
  110. 1.125  How do I retain timestamps with mksysb?
  111. 1.126  How can I find out the machine type?
  112. 1.127* Updating to 3.2.5
  113. 1.128* AIX fix strategy
  114. 1.129* Are passwords limited to 8 char?
  115. 1.130* How do I increase the number of ptys > 64?
  116.  
  117. 1.2    Backups, tape
  118. 1.200  Some info about tape backups
  119. 1.201  How do I do remote backup?
  120. 1.202  How do I backup a multi-disk volume group?
  121. 1.203  How do I put multiple backups on a single 8mm tape?
  122. 1.204  How can I make an exact duplicate of a tape over the network?
  123. 1.205* What is tape block size of 0?
  124. 1.206* Resetting a hung tape drive
  125.  
  126. 1.3    Memory and process management
  127. 1.300  Some info about the memory management system
  128. 1.301  How much should I trust the ps memory reports?
  129.  
  130. 1.4    Shells, commands, man pages, InfoExplorer
  131. 1.400  How do I make an informative prompt in the shell?
  132. 1.401  How do I set up ksh for emacs mode command line editing?
  133. 1.402  Listing files with ls causes a core dump
  134. 1.403  How do I put my own text into InfoExplorer?
  135. 1.404  InfoExplorer ASCII key bindings 
  136. 1.405  How can I add new man pages to the system?
  137.  
  138. 1.5    Video, Graphics, X11
  139. 1.500  Which release of X11 do I have?
  140. 1.501  How to prevent ctrl-alt-backspace from killing the X session
  141. 1.502  Who has a termcap/terminfo source for aixterm or the HFT console?
  142. 1.503  How can I look at PostScript files?  Why is "dpsexec" so lousy?
  143. 1.504  unix:0 vs `hostname`:0
  144. 1.505  VT100 key bindings for aixterm
  145.  
  146. 1.6    Networks and communications
  147. 1.600  My named dies frequently, why?
  148. 1.601* How do I trace ethernet packets on an AIX system?
  149. 1.602  What is the authorized way of starting automount at boot time?
  150. 1.603  How do I set a tty port for both dial-in and dial-out?
  151. 1.604  How to move or copy whole directory trees across a network
  152. 1.605  How can I send mail to hosts that cannot be pinged?
  153. 1.606  How to setup dialup SLIP
  154. 1.607* Where is DCE discussed?
  155. 1.608* How do I make /var/spool/mail mountable?
  156.  
  157. 1.7
  158. 1.8
  159.  
  160. 1.9    Miscellaneous
  161. 1.900  SCSI-1 and SCSI-2 "interoperability" got you confused?
  162. 1.901  How to get your keyboard back after unplugging it from the 6000
  163. 1.902  How do I set up pcsim, the DOS emulator?
  164. 1.903  How do I transfer files between AIX and DOS disks?
  165.  
  166.  
  167. 2.00  C/C++
  168. 2.01  I cannot make alloca work
  169. 2.02  How do I compile my BSD programs?
  170. 2.03  Isn't the linker different from what I am used to?
  171. 2.04  How do I link my program with a non-shared /lib/libc.a?
  172. 2.05  How do I make my own shared library?
  173. 2.06  Linking my program fails with strange error, why?
  174. 2.07  What's with malloc()?
  175. 2.08  Why does xlc complain about 'extern char *strcpy()'
  176. 2.09  Why do I get 'Parameter list cannot contain fewer ....'
  177. 2.10  Why does xlc complain about '(sometype *)somepointer = something'
  178. 2.11  Some more common errors
  179. 2.12  Can the compiler generate assembler code?
  180. 2.13* Curses
  181. 2.14  How do I speed up linking?
  182. 2.15  What is deadbeef?
  183. 2.16  How do I statically link in 3.2?
  184.  
  185. 3.00  Fortran and other compilers
  186. 3.01  I have problems mixing Fortran and C code, why?
  187. 3.02  How do I statically bind Fortran libraries and dynamically bind
  188.       C libraries?
  189. 3.03  How do I check if a number is NaN?
  190. 3.04  Some info sources on IEEE floating point
  191.  
  192. 4.00  GNU and Public Domain software
  193. 4.01  How do I find PD software?
  194. 4.02  Are there any ftp sites?
  195. 4.03  General hints
  196. 4.04  GNU Emacs
  197. 4.05  gcc/gdb
  198. 4.06  GNU Ghostscript
  199. 4.07  TeX
  200. 4.08  Perl
  201. 4.09  X-Windows
  202. 4.10  bash
  203. 4.11  Elm
  204. 4.12  Oberon 2.2
  205. 4.13  Kermit
  206. 4.14  Gnu dbm
  207. 4.15  tcsh
  208. 4.16  Kyoto Common Lisp
  209. 4.17  Tcl/Tk
  210. 4.18  Expect
  211. 4.19  Public domain software on CD
  212. 4.20  Andrew Toolkit
  213. 4.21* sudo
  214. 4.22* Flexfax and other fax software
  215.  
  216. 5.00  Third party products
  217. 5.01  IBM List of third party products
  218. 5.02* Disk/Tape/SCSI
  219. 5.03  Memory
  220. 5.04  Others
  221. 5.05  C++ compilers
  222. 5.06* Memory leak detectors
  223. 5.07* PPP
  224.  
  225. 6.00  Miscellaneous other stuff
  226. 6.01  Can I get support by e-mail?
  227. 6.02  List of useful faxes
  228. 6.03  List of 3.2 ptfs
  229. 6.04  Some RS232 hints
  230. 6.05  What publications are available for AIX and RS/6000?
  231. 6.06  Some acronyms
  232. 6.07  How do I get this by mailserver or ftp?
  233. 6.08  Hypertext version of the FAQ
  234. 6.09  Where can I send suggestions for tools?
  235.  
  236. 7.00  Contributors
  237.  
  238. ______________________________________________________________________________
  239. 1.000: The AIX operating system - what is it?
  240.  
  241. This is best answered by reading the text files in /usr/lpp/bos. The
  242. README file there contains general information and the BSD files contain
  243. useful information if you know BSD and/or System V.
  244.  
  245. The last release for the RT PC is 2.2.1. The latest release for PS/2s
  246. and Intel architecture machines is AIX 1.3; for PS/2s only, 1.2.1. For
  247. the RS/6000, there are two major levels, 3.1 and 3.2, and various
  248. intermediate levels.
  249.  
  250.  
  251. 1.001: I know neither Unix nor AIX - where do I find more information?
  252.  
  253. Quite a number of questions posted to comp.unix.aix show that AIX is
  254. people's first experience with Unix. If this is the case with you, you
  255. are advised to look at the other newsgroups in the comp.unix hierarchy,
  256. in particular comp.unix.questions (for basic questions) or
  257. comp.unix.wizards (for difficult questions). These two groups have a
  258. common FAQ posting as well.
  259.  
  260. If you need information about C programming, try comp.lang.c or comp.std.c,
  261. the latter for Standard ANSI C issues.  comp.lang.c has a FAQ posting.
  262.  
  263.  
  264. 1.002: What is the Object Database?
  265. From: Uwe Geuder <Uwe.Geuder@informatik.uni-stuttgart.de>
  266.  
  267. AIX stores most of the system management information in /etc/objrepos,
  268. /usr/lib/objrepos, and /usr/share/lib/objrepos. Files (also referred to
  269. as system object classes) in these directories are adminstered by the
  270. Object Database Manager, ODM, which is a set of library routines and
  271. programs providing basic object oriented database facilities.
  272.  
  273. Under most circumstances, only SMIT or the commands SMIT call (see
  274. 1.100) should be used to change the contents of the system object
  275. classes. A harmless way to look at the object database is to use odmget
  276. <Class> where <Class> is one of the files in /etc/objrepos.
  277.  
  278. Experienced users can use the ODM editor, odme, to navigate the database
  279. in detail. Modifying the database should only be attempted if you know
  280. exactly what you are doing.
  281.  
  282.  
  283. 1.003: How do I get rid of the verbose error messages?
  284.  
  285. Many of the messages from the Unix commands are available in different
  286. languages. This is controlled by the LANG environment variable, the
  287. default being En_US meaning English in the US. All the default messages
  288. have a message number associated with them, e.g.:
  289.  
  290. $ cat no-such-file
  291. cat: 0652-050 Cannot open no-such-file.
  292.  
  293. If you prefer the terser Unix-looking error message, set your
  294. environment LANG to C, and you will get:
  295.  
  296. $ cat no-such-file
  297. cat: Cannot open no-such-file.
  298.  
  299.  
  300. 1.004: Which release of AIX or other products do I have?
  301.  
  302. The command 'lslpp -h bos.obj' will show all lines referring to the BOS, 
  303. Basic Operating System.  E.g.:
  304.  
  305. Option Name          State      Event      Date      Release         User Name
  306. -------------------- ---------- ---------- --------- --------------- ---------
  307. bos.obj              INACTIVE   COMMIT     02/03/90  03.01.0000.0000 root
  308.                      INACTIVE   APPLY      06/25/90  03.01.0000.0001 root
  309.                      INACTIVE   COMMIT     06/25/90  03.01.0000.0001 root
  310.                      INACTIVE   APPLY      11/16/90  03.01.0002.0015 root
  311.                      INACTIVE   COMMIT     11/16/90  03.01.0002.0015 root
  312.              ACTIVE     COMMIT     05/07/91  03.01.0005.0012 root
  313.  
  314. gives the history for the BOS lpp.  The last line, column four, indicates
  315. that this is release 3.1.5.
  316.  
  317. To see a listing of everything installed use lslpp -l '*', then use
  318. lslpp with the -h option as above to get a history of a particular lpp. 
  319.  
  320. 3.1.5 is considered the "base" release for users running 3.1.  You
  321. should be at least at this level.  If you request a ptf update you will
  322. get 201x.  If you are at some level earlier than 3.1.5, you must first
  323. apply 3.1.5, then 201x.  Customers using SNA should request the SNA
  324. Quality Refresh update.  Support for 3.1 will end on December 31, 1993.
  325.  
  326. For AIX 3.2, it's a completely different scheme. You may come across
  327. discussions on 3.2.0, 3.2.1, 3.2.2, or 3.2.3 extended. There is no
  328. absolute way to tell which of these you are running since the newer
  329. releases are simply 3.2.0 with some sets of PTFs added. These selective
  330. fixes could mean there are literally thousands of slightly different
  331. variations of 3.2 in use. Please see section 6 to request some useful
  332. faxes to help with this number game.
  333.  
  334. AIX 3.2.4 and later resolve this confusion. The OS is broken down into
  335. subsystems so that updates can be applied to an entire subsystem. lslpp
  336. also sports a new option; use 'lslpp -m bos.obj' to show what level and
  337. update the system is running. You can also use the new oslevel command. 
  338. Unless you have a pressing need (such as applications unsupported on >
  339. 3.2.3), it is recommended that you update to this level. Also see 1.128.
  340.  
  341. ______________________________________________________________________________
  342. 1.100: I am used to Unix systems programming, why should I learn SMIT?
  343.  
  344. Using SMIT is probably very different from your normal way of doing
  345. system administration, but could prove very useful in the long run. In
  346. some areas, in particular TCP/IP, NFS, etc., you can also do things the
  347. normal way, but it is unfortunately difficult to know exactly when the
  348. normal way works. Again, always using SMIT is probably your best way
  349. to go, even when you have to learn a new tool. 
  350.  
  351. What SMIT actually does is build up commands with all required options
  352. to perform the functions requested and execute them. The commands
  353. called and the output they produce are stored in the files smit.script
  354. and smit.log in your home directory. Looking in smit.script may teach
  355. you more about system administration.
  356.  
  357.  
  358. 1.101: How do I turn off the "running man" in smit?
  359.  
  360. Use smitty, the standard curses version or add this line to your .kshrc file:
  361. alias smit="smit -C"
  362.  
  363.  
  364. 1.102: How do I import an /etc/passwd or /etc/group file from another box?
  365.  
  366. Make sure that you run usrck, pwdck (/etc/passwd), and grpck
  367. (/etc/group) to let AIX work its password/group magic.
  368.  
  369.  
  370. 1.103: Cleaning up utmp, who, and accounting problems
  371. From: fritz@scipp.UCSC.EDU (Frederick Staats)
  372.  
  373. This applies if you are running an X11R5 xterm on 3.2.
  374. Add this to the top of X11R5 mit/clients/xterm/main.c:
  375.  
  376. #ifdef AIXV3
  377. #define USE_SYSV_UTMP
  378. #define HAS_UTMP_UT_HOST
  379. #define WTMP_FILENAME "/var/adm/wtmp"
  380. #endif
  381.  
  382. And your utmp problems should go away.  If you want xterminal sessions
  383. to go into the wtmp file you need to define -DWTMP in the Imakefile and
  384. be sure the WTMP_FILENAME is set to the right place.
  385.  
  386. The following program by jfh@rpp386.cactus.org (John F. Haugh)
  387. if run in the background by root will clean up the utmp file.
  388.  
  389. #include <sys/types.h>
  390. #include <utmp.h>
  391. #include <fcntl.h>
  392.  
  393. main ()
  394. {
  395.     int    fd;
  396.     struct    utmp    utmp;
  397.  
  398.     while (1) {
  399.         if ((fd = open ("/etc/utmp", O_RDWR)) < 0)
  400.             exit (1);
  401.  
  402.         while (read (fd, &utmp, sizeof utmp) == sizeof utmp) {
  403.             if (utmp.ut_type == USER_PROCESS &&
  404.                     kill (utmp.ut_pid, 0) != 0) {
  405.                 lseek (fd, - (long) sizeof utmp, 1);
  406.                 utmp.ut_type = DEAD_PROCESS;
  407.                 write (fd, &utmp, sizeof utmp);
  408.             }
  409.         }
  410.         close (fd);
  411.         sleep (60);
  412.     }
  413. }
  414.  
  415. Another utmp program was posted to comp.sources.unix, volume 25, issue
  416. 96 by David W. Sanderson (dws@cs.wisc.edu) that also works on AIX 3.1.
  417.  
  418.  
  419. 1.104: How to fsck the root filesystem
  420.  
  421. You can run fsck either in maintenance mode or on mounted filesystems.
  422. To enter maintenance mode to run fsck on the root filesystem:
  423.  
  424.   1. boot from diskette
  425.   2. select maintenance mode
  426.   3. type /etc/continue hdisk0 exit (replace hdisk0 with boot disk if
  427.      not hdisk0)
  428.   4. fsck /dev/hd4
  429.  
  430.  
  431. 1.105: How can I unmount /usr to run fsck on it?
  432. From: accapadi@mathew.austin.ibm.com (Matt Accapadi)
  433. [ This is for 3.2. ]
  434.  
  435. In order to fsck /usr, it has to be unmounted. But /usr cannot be
  436. unmounted because /bin is symbolically linked to /usr/bin. Also
  437. /etc/fsck is symbolically linked to /usr/sbin/fsck.
  438.  
  439. To work around this, when you boot from the boot/maintenance diskettes
  440. and enter maintenance mode, enter "getrootfs hdisk0 sh" instead of
  441. "getrootfs hdisk0" where hdisk0 is the name of the boot disk. Then run
  442. "fsck /dev/hd2".
  443.  
  444.  
  445. 1.106: How do I shrink /usr?
  446. From: mike@bria.UUCP (Michael Stefanik) and Richard Hasting
  447.  
  448. FOR AIX 3.1
  449. -----------
  450.  
  451.  1) Make a backup of /usr
  452.  
  453.         find /usr -print | backup -ivf /dev/rmt0 (or appropriate device)
  454.  
  455.  2) shutdown to maintenance mode
  456.  
  457.         shutdown -Fm
  458.  
  459.  3) export LANG=C
  460.  
  461.  4) remove the filesystem and the logical volume
  462.     ignore an error about the "dspmsg" command not found
  463.  
  464.         umount /usr
  465.         rmfs /usr
  466.  
  467.  5) make a new logical volume hd2 and place it on rootvg with desired size
  468.  
  469.         mklv -yhd2 -a'e' rootvg NNN 
  470.  
  471.    where NNN is the number of 4 meg partitions
  472.  
  473.  6) create a filesystem on /dev/hd2
  474.  
  475.         crfs -vjfs -dhd2 -m'/usr' -Ayes -p'rw'
  476.  
  477.  7) mount the new /usr filesystem and check it
  478.  
  479.         /etc/mount /usr
  480.         df -v
  481.  
  482.  8) restore from the tape; system won't reboot otherwise
  483.  
  484.         restore -xvf/dev/rmt0
  485.  
  486.  9) Sync and reboot the system; you now have a smaller /usr filesystem
  487.  
  488. FOR AIX 3.2
  489. -----------
  490.  
  491.  1) Remove any unneeded files from /usr.
  492.  
  493.  2) Make sure all filesystems in the root volume group are mounted. If
  494.     not, they will not be included in the re-installed system.
  495.  
  496.  3) Type mkszfile. This will create /.fs.size that contains a list of
  497.     the active filesystems in the root volume group that will be
  498.     included in the installation procedure.
  499.  
  500.  4) Edit .fs.size. Change the size of /usr to what you want.
  501.  
  502.     Example: This .fs.size file shows /usr to be 40MB.
  503.  
  504.     rootvg 4 hd2 /usr 10 40 jfs
  505.  
  506.     The number 10 is the number of physical partitions for the filesystem
  507.     and the 40 is 40 MB. Most systems have a physical partition size of
  508.     4 MB. Therefore, the second number (40) will always be 4 times the
  509.     previous number (10). Note, however, that a model 320 with a 120 MB
  510.     drive will have a physical partition size of only 2 MB, and the
  511.     total MB is twice the number of physical partitions. The first
  512.     number (4) in the .fs.size file represents the PP size.
  513.  
  514.     If you want to reduce the size of /usr from 40 MB to 32 MB, edit the
  515.     /usr entry to:
  516.  
  517.         rootvg 4 hd2 /usr 8 32 jfs
  518.  
  519.     IMPORTANT: Make sure that you DO NOT enter a value which is less
  520.     than the size of the filesystem required to contain the current
  521.     data. Doing so will cause the re-installation procedure to fail.
  522.  
  523.  5) chdev -l rmt0 -a block=512 -T
  524.  
  525.  6) Unmount all filesystems that are NOT in the root volume group.
  526.  
  527.  7) Varyoff all user-defined volume groups, if any
  528.  
  529.         varyoffvg VGname
  530.  
  531.  8) Export the user-defined volume groups, if any
  532.  
  533.         exportvg VGname
  534.  
  535.  9) With a tape in the tape drive, type
  536.  
  537.         mksysb /dev/rmt0
  538.  
  539.      This will do a complete system backup, which will include
  540.      information (in the .fs.size file) for the installation procedure
  541.      on how large the filesystems are to be created.
  542.  
  543.  10) Follow the instructions in the Installation Kit under "How to
  544.      Install and perform maintenance from Diskettes" using the
  545.      diskettes and tape that you created in the previous steps.
  546.      DO NOT select the option "Reinstall AIX with Current System
  547.      Settings". Instead use "Install AIX with Current System Settings"
  548.      for the logical volume size changes to take affect.
  549.  
  550.  11) When the installation is complete, you may then import the
  551.      information into your newly installed operating system for any
  552.      user-defined volume groups.
  553.  
  554.          importvg -y VGname PVname
  555.  
  556.      where "VGname" is the name of the volume group, and "PVname" is
  557.      the name of any one of the physical volumes in the volume group.
  558.  
  559.  12) Varyon your user-defined volume groups
  560.  
  561.          varyonvg VGname
  562.  
  563.  The reduction of the filesystems is now complete.
  564.  
  565.  
  566. 1.107: How do I make a filesystem larger than 2 Gig?
  567.  
  568. The largest filesystem under AIX is 2 Gigabytes because the largest
  569. signed integer is 2**31 - 1.
  570.  
  571.  
  572. 1.108: How do I see/change system parameters like number of processes
  573.        per user?
  574.  
  575. You can use SMIT as described below or simply use the lsattr/chdev pair. 
  576. The former will list the current setting as in:
  577.  
  578.   # lsattr -E -l sys0 -a maxuproc
  579.   maxuproc 40 Maximum # of processes allowed per user True
  580.  
  581. and you can then increase the maxuproc parameter:
  582.  
  583.   # chdev -l sys0 -a maxuproc=200
  584.   sys0 changed
  585.  
  586. If you just type 'lsattr -E -l sys0' you will get a list of all
  587. parameters, some of which can be changed but not others.
  588.  
  589. If you want to use smit, this procedure can be followed:
  590.  
  591. smit
  592.   System Environments and Processes
  593.     Change / Show Operating System Parameters
  594.       - on this screen you can change by overtyping the following fields:
  595.         - Maximum number of PROCESSES allowed per user
  596.         - Maximum number of pages in block I/O BUFFER CACHE
  597.         - Maximum Kbytes of real memory allowed for MBUFS
  598.       - toggle fields exist for:
  599.         - Automatically REBOOT system after a crash  (false/true)
  600.         - Continuously maintain DISK I/O history (true/false)
  601.  
  602.  
  603. 1.109: How do I shrink the default paging space on hd6?
  604.  
  605. 1) create a paging space to use temporarily
  606.    mkps -s 20 -a rootvg
  607.  
  608. 2) change default paging space hd6 so it is not used at next reboot
  609.    chps -a n hd6
  610.  
  611. 3) For AIX 3.1, edit /etc/rc.boot4 and change swapon /dev/hd6;
  612.    for AIX 3.2, edit /sbin/rc.boot and change swapon /dev/hd6
  613.    swapon /dev/paging00
  614.  
  615. 4) Update information in boot logical volume
  616.    bosboot -a             (3.1)
  617.    bosboot -a -d hdisk0   (3.2)
  618.  
  619. 5) shutdown and reboot
  620.  
  621. 6) remove current hd6 and create a new one of smaller size
  622.    rmps hd6
  623.    mklv -y hd6 -t paging rootvg <size of PS in 4 Meg blocks>
  624.  
  625. 7) Re-edit /etc/rc.boot4 (3.1), /sbin/rc.boot (3.2) to swap to /dev/hd6
  626.    swapon /dev/hd6
  627.  
  628. 8) Update information in boot logical volume
  629.    bosboot -a             (3.1)
  630.    bosboot -a -d hdisk0   (3.2)
  631.  
  632. 9) change current paging device (paging00) so it is inactive at next boot
  633.    chps -a n /dev/paging00
  634.  
  635. 10) shutdown, reboot, remove paging00 using the command:
  636.     rmps paging00
  637.  
  638.  
  639. 1.110: The swapper seems to use enormous amounts of paging space, why?
  640.  
  641. When you run ps, you may see a line like:
  642.  
  643. USER   PID %CPU %MEM    SZ   RSS     TT STAT  TIME CMD
  644. root     0 0.0%  14% 386528  8688      -    S 17:06 swapper
  645.  
  646. This is normal behavior, the swapper looks to ps like it has the entire
  647. paging space plus real memory allocated.
  648.  
  649.  
  650. 1.111: How much paging space do I need?
  651.  
  652. See answer 2 in question 1.300.
  653.  
  654.  
  655. 1.112: How do I mount a floppy disk as a filesystem?
  656. From: op@holmes.acc.Virginia.EDU (Olaf Pors)
  657.  
  658. You can build a filesystem on a floppy and mount it, however the
  659. filesystem will be read only. The reason that the filesystem will be
  660. read only is because AIX Version 3.1.5 cannot create a journal log on a
  661. diskette. The intended use is for temporary access to read only data. 
  662. The diskette file system must be unmounted after use and during system
  663. backup procedures or errors could occur.
  664.  
  665. To make the read only filesystem on a floppy:
  666.  
  667. 1. Make a subdirectory on an existing filesystem and place all of the
  668.    files that the diskette will contain into this subdirectory.
  669.  
  670. 2. Enter the following command to create a prototype file containing
  671.    information about the new filesystem, in the example /dir_struct
  672.    is the pathname of the subdirectory created in step 1, and
  673.    proto_filename is the name of the prototype file to be created.
  674.  
  675.          proto /dir_struct > proto_filename
  676.  
  677. 3. Place a formatted floppy into the drive.
  678.  
  679. 4. Edit the prototype file and replace the first line with the following:
  680.  
  681.          <noboot> 0 0
  682.  
  683. 5. Enter the following command to make the filesystem on your floppy:
  684.  
  685.           mkfs -p proto_filename -V jfs /dev/fd0
  686.  
  687. 6. Create the directory upon which you will mount the floppy based
  688.    filesystem, or you can use /mnt. Mount the filesystem:
  689.  
  690.           mount -r -V jfs /dev/fd0 /your_mount_point
  691.  
  692. 7. To unmount the filesystem:
  693.  
  694.           umount /dev/fd0
  695.  
  696. Since the filesystem is read-only it may be of limited use but if you
  697. are going to use it for utility programs and other data that does not
  698. change much, it may still be useful. If you need to change the data,
  699. you can copy the directory from the floppy into another directory, make
  700. your modifications, and remake the filesystem using this procedure.
  701.  
  702.  
  703. 1.113: How do I remove a committed lpp?
  704. From: drb@chmeds.ac.nz (Ross Boswell)
  705.  
  706. This seems to be a common problem. The following script for 3.2 only is
  707. from IBM NZ AIX software support. As far as I know, it works -- I used
  708. it to remove unwanted fonts. I have no official permission to post it
  709. -- use it at your own risk!
  710.  
  711. #!/bin/ksh
  712. #
  713. # Permanently remove a product from disk and AIX databases
  714. #
  715.  
  716. if [ `whoami` != "root" ] ; then
  717.   echo You must be root to run this script.
  718.   exit 1
  719. fi
  720.  
  721. if [ `uname -a | awk '{print $1$4$3}'` != "AIX32" ] ; then
  722.   echo This script only works on AIX 3.2.
  723.   exit 1
  724. fi
  725.  
  726. TMP_FREE=`df /tmp | awk '$3 ~ /[0-9]/{print $3}'`
  727. if [ "$TMP_FREE" -lt 1000 ] ; then
  728.    echo There is not enough room in your /tmp directory.
  729.    echo You need 1000 KB free, and you have only $TMP_FREE KB free.
  730.    echo Either remove some stuff from /tmp, or use chfs to make it bigger.
  731.    exit 1
  732. fi
  733.  
  734. ODMDIRS="/etc/objrepos /usr/lib/objrepos /usr/share/lib/objrepos"
  735. ODMDIR=/usr/lib/objrepos
  736. export ODMDIR
  737.  
  738. if [ $# -lt 1 ]
  739. then
  740.   echo usage: $0 lppname [lppname ...]
  741.   echo lppname is a string compatible with grep, ie "X11" or "PHIGS"
  742.   echo typing   $0 PHIGS   will remove all LPPs with PHIGS in their name.
  743.   exit 1
  744. fi
  745.  
  746. NAMES=$1
  747. shift
  748. while [ $# -gt 0 ] ; do
  749.   NAMES="$NAMES|$1"
  750.   shift
  751. done
  752. echo "Searching for lpps with egrep \"$NAMES\"...\c"
  753.  
  754. for ODMDIR in $ODMDIRS ; do
  755.   if [ ! -d $ODMDIR -o ! -w $ODMDIR ] ; then
  756.      echo $ODMDIR is not writeable or is not a directory.
  757.      echo I hope this is because you are a /usr client or diskless.
  758.      echo If you are not a diskless or a /usr client, you should stop.
  759.      echo "Enter y to continue ->\c"
  760.      read answer
  761.      if [ "$answer" != "y" ] ; then
  762.        exit 0
  763.      fi 
  764.   fi
  765.   TMP=`odmget lpp | awk -F\" '/name/ {print $2}' | egrep "$NAMES"`
  766.   LPPS=`echo $LPPS $TMP`
  767. done
  768.  
  769. if [ "$LPPS" = "" ]
  770. then
  771.   echo "failed.\nNo LPP with the name $NAMES detected."
  772.   exit 1
  773. fi
  774. echo ok.
  775.  
  776. for ODMDIR in $ODMDIRS ; do
  777.   mkdir -p /tmp/rmlpp/$ODMDIR > /dev/null 2>&1
  778. done
  779.  
  780. > /tmp/listOfFilesToRM$$    # truncate temporary file, just in case.
  781. echo
  782. echo This script is about to attempt to remove an LPP from your system.
  783. echo I say attempt, because it could fail.  If it fails, you may have
  784. echo to at least reload the LPP.  Use the \"lppchk\" command to make sure
  785. echo all is well with your system.
  786. echo
  787. # Loop through all the LPP names found.
  788. for LPP in $LPPS
  789. do
  790.   DESCR=none
  791.   answer=""
  792.  
  793.   # find the LPP ids.  They will be different in the three SWVPD databases.
  794.   for ODMDIR in $ODMDIRS ; do
  795.     # get the lpp id for this ODMDIR (yes, they are different)
  796.     LPPID=`odmget -q name=$LPP lpp | grep lpp_id | sed 's/.* = //'`
  797.  
  798.     # did we find the LPP?
  799.     if [ "$DESCR" = "none" -a "$LPPID" != ""  ] ; then
  800.       # all the descriptions should be the same
  801.       DESCR=`odmget -q name=$LPP lpp | grep description | sed 's/.* = //'`
  802.       echo "Delete $LPP, $DESCR?"
  803.       echo "y or (n) ->\c"
  804.       read answer
  805.       if [ "$answer" != "y" ] ; then # jump back up to the next LPP name
  806.         continue 2
  807.       fi
  808.     fi
  809.     # if there is no DESCR, then we didn't find the LPP.  Weird.
  810.     if [ "$DESCR" = "none" -o "$LPPID" = "" ] ; then
  811.       continue
  812.     fi
  813.     SOMETHING_DONE_FLAG=true
  814.     # Optionally, save the ODM stuff we are about to remove,
  815.     # in case something goes wrong.  The problem is it is difficult
  816.     # to determine if something really did fail, since these commands
  817.     # don't return any decent error return codes.
  818.     odmget -q lpp_id=$LPPID history   > /tmp/rmlpp/$ODMDIR/$LPP.history
  819.     odmget -q name=$LPP lpp           > /tmp/rmlpp/$ODMDIR/$LPP.lpp
  820.     odmget -q lpp_name=$LPP product   > /tmp/rmlpp/$ODMDIR/$LPP.product
  821.     # Get the list of files and links to remove later....
  822.     odmget -q lpp_id=$LPPID inventory > /tmp/rmlpp/$ODMDIR/$LPP.inventory
  823.     awk -F\" '/loc/ {print $2}' /tmp/rmlpp/$ODMDIR/$LPP.inventory | \
  824.       sed 's/,/ /g' >> /tmp/listOfFilesToRM$$
  825.     odmdelete -o history -q lpp_id=$LPPID   > /dev/null 2>&1
  826.     odmdelete -o lpp -q name=$LPP           > /dev/null 2>&1
  827.     odmdelete -o product -q lpp_name=$LPP   > /dev/null 2>&1
  828.     odmdelete -o inventory -q lpp_id=$LPPID > /dev/null 2>&1
  829.   done
  830. done
  831.  
  832. if [ "$SOMETHING_DONE_FLAG" = "true" ] ; then
  833.  
  834.   echo ODM work is done.  Now, time to delete files....
  835.  
  836.   # This could be catastrophic if there is a problem.  For example,
  837.   # if the ODM database for an application had / as one of its files.
  838.   # You be the judge.  Here's your rope....
  839.   cat /tmp/listOfFilesToRM$$ | sort -r | uniq | xargs rm -rf
  840.  
  841.   rm -rf /tmp/listOfFilesToRM$$
  842.   echo done.
  843. fi
  844.  
  845. # take this line out if you want to save your ODM saved files.
  846. rm -rf /tmp/rmlpp
  847.  
  848. exit 0
  849.  
  850.  
  851. 1.114: How can I recover space after installing updates?
  852. From: Milt Cloud <cloud@ux1.cso.uiuc.edu>
  853.  
  854. Note: If you are a /usr server, do not use this because the files
  855.       mentioned below are needed by /usr clients and cannot be deleted.
  856.  
  857. Installp creates numerous files in /usr to clean up after
  858. failed/rejected installs and also for de-installing uncommitted lpps. 
  859. Once you have COMMITted packages you can remove these files safely. 
  860. Depending on your installation activity the numbers can be significant
  861. here: hundreds-to-thousands of files, megabytes of data.
  862.  
  863. Files eligible for removal are associated with each "product" you have
  864. installed; the largest collection being due to bos.  After
  865. COMMITting bos lpps, you may safely remove all files of the form:
  866.  
  867.               /usr/lpp/bos/deinstl*
  868.               /usr/lpp/bos/inst_U4*
  869.               /usr/lpp/bosadt/deinstl*
  870.         and   /usr/lpp/bosadt/inst_U4*
  871.  
  872. You may repeat this for all additional COMMITted products (e.g.,
  873. bostext1, bosnet, xlc) you have on your system.
  874.  
  875. This problem of lingering install files is a known defect in installp. 
  876. If you have installed PTF U411711 (or any superceder of it: U412397,
  877. U413366, U413425) the deadwood in /usr will not be quite as prevalent. 
  878. No single PTF currently available completely corrects this problem.
  879.  
  880. On my own 320, the following freed up 12.4M in /usr:
  881.  
  882.        # rm -R /usr/lpp/bos/deinstl*
  883.        # rm -R /usr/lpp/bos/inst_U4*
  884.  
  885.  
  886. 1.115: Where are the AIX log files kept?
  887. From: dirk@kimosabi.ucsc.edu (Dirk Coldewey)
  888.  
  889. Such as the equivalent of the SunOS file '/var/log/syslog' and 
  890. '/var/adm/messages'.
  891.  
  892. If you want regular unix syslog files, you can configure syslogd
  893. in /etc/syslog.conf. Here's the one that I use:
  894.  
  895. #
  896. # See the supplied /etc/syslog.conf file for copious comments.
  897. #
  898. *.err;kern.debug;auth.notice;user.none          /dev/console
  899. *.err;kern.debug;daemon,auth.notice;mail.crit;user.none /var/adm/messages
  900. lpr.debug                                       /var/adm/lpd-errs
  901.  
  902. *.alert;kern.err;daemon.err;user.none           operator
  903. *.alert;user.none                               root
  904.  
  905. *.emerg;user.none                               *
  906.  
  907. # for loghost machines, to have authentication messages (su, login, etc.)
  908. # logged to a file, un-comment out the following line and adjust the 
  909. # file name as appropriate.
  910. #
  911. # if a non-loghost machine chooses to have such messages 
  912. # sent to the loghost machine, un-comment out the following line.
  913. #
  914. auth.notice                     /var/log/authlog
  915.  
  916. mail.debug                      /var/log/syslog
  917.  
  918. # following line for compatibility with old sendmails. they will send
  919. # messages with no facility code, which will be turned into "user" messages
  920. # by the local syslog daemon. only the "loghost" machine needs the following
  921. # line, to cause these old sendmail log messages to be logged in the
  922. # mail syslog file.
  923. #
  924. user.alert                       /var/log/syslog
  925. #
  926. # non-loghost machines will use the following lines to cause "user"
  927. # log messages to be logged locally.
  928. #
  929. user.err                         /dev/console
  930. user.err                         /var/adm/messages
  931. user.alert                       `root, operator'
  932. user.emerg                       *
  933.  
  934.  
  935. 1.116: How can I log information about ftp accesses to a file?
  936. From: elr@trintex.uucp (Ed Ravin) and
  937.       map@hal.maths.monash.edu.au (Michael Page)
  938.  
  939. 1) In /etc/syslog.conf, add the line:
  940.    daemon.debug        /tmp/daemon.log
  941.  
  942. 2) # touch  /tmp/daemon.log
  943.    # refresh -s syslogd
  944.  
  945. 3) Modify your inetd.conf so that ftpd is called with the "-l" flag.
  946.    You may also want the "-d" flag. This can be done with 'smit inetdconf'.
  947.  
  948. All the syslog messages from various system daemons should now appear in
  949. the file "/tmp/daemon.log".
  950.  
  951.  
  952. 1.117: How do I find a file name from the inode number?
  953. From: svpillay@berlioz.crs4.it (Kanthan Pillay)
  954.  
  955.      find /mntpoint -xdev -inum nnnn -print
  956.  
  957.  
  958. 1.118: How do I set up postscript accounting?
  959. From: taluskie@utpapa.ph.utexas.edu (Vince Taluskie)
  960.  
  961. The following program to configure postscript page accounting was
  962. originally written by Ephraim Vider. It acts as a backend wrapper which
  963. logs accounting information in /etc/qconfig. It can be ftp'd from
  964. utpapa.ph.utexas.edu in /pub/aix/psacct.tar.Z.
  965.  
  966. To get this program running compile it with
  967.  
  968. cc  pswrap.c -o pswrap -lqb
  969.  
  970. and then make this program suid root with
  971.  
  972. chown root pswrap
  973. chmod u+s pswrap
  974.  
  975. If this step is not done, the printer will hang.
  976.  
  977. Then start up SMIT and go to :
  978.  
  979. Spooler
  980.   Manage Local Printer Subsystem
  981.     Local Printer Queue Devices
  982.       Change / Show Characteristics of a Queue Device
  983.         <Select Queue>
  984.           <Select Device>
  985.  
  986. and change "BACKEND PROGRAM pathname" to the full pathname of pswrap
  987. since pswrap will now handle the backend interface with the queue.
  988.  
  989. A stream of info will be written to a logfile in /tmp (prob lp0.log) but
  990. this file is mainly used for status info and raw pagecounts. If the
  991. accounting data is going to the qconfig-specified acctfile, then use the
  992. 'pac' command to read it. I prefer to have readable ascii data files
  993. instead, so I just comment out the '#define WANT_PAC' line and it will
  994. only go to the ACCTFILE specfied in pswrap.c.
  995.  
  996. /*  pswrap.c
  997.  
  998.  compile with:   cc pswrap.c -o pswrap -lqb
  999.  (for doc on the qb library see "understanding backend routines in libqb")
  1000.  
  1001.  BTW:  The log_charge() function doesn't seem to do anything,
  1002.        but log_pages() updates the accounting info.
  1003.  
  1004. Ephraim Vider, original author 
  1005.  
  1006. --
  1007. Feb 10, 1993
  1008.  
  1009. You can set pswrap up to use either the accounting file specified in
  1010. /etc/qconfig (which means that you need to get your data from 'pac') or
  1011. you can comment out the #define WANT_PAC line and then the accounting
  1012. data will only go into the ACCTFILE.
  1013.  
  1014. Also modified the logging to the ASCII acctfile so that it looks more
  1015. readable.
  1016.  
  1017. Vince Taluskie
  1018. */
  1019.  
  1020.  #include <stdio.h>
  1021.  #include <string.h>
  1022.  #include <ctype.h>
  1023.  #include <fcntl.h>
  1024.  #include <signal.h>
  1025.  #include <setjmp.h>
  1026.  #include <sys/wait.h>
  1027.  #include <IN/backend.h>
  1028.  #include <IN/standard.h>
  1029.  #include "qprocs.h"
  1030.  
  1031.  char     *nextword (char *p);
  1032.  char     *skipvalue (char *p);
  1033.  
  1034.  #define LOGDIR     "/tmp"
  1035.  #define ACCTFILE   "/usr/adm/acct/lpr/ps-acct"
  1036. /* #define WANT_PAC     1 */     /* this define will also send accounting
  1037.                                  info to the acctfile specified in
  1038.                  /etc/qconfig file.  If this define is 
  1039.                  commented out then accounting info will
  1040.                  only go to ACCTFILE  */
  1041.  
  1042.  
  1043.  char     pcprog[] = "statusdict begin pagecount = end\n\x04";
  1044.  
  1045.  char     *keyw[] = {
  1046.      "idle",
  1047.      "busy",
  1048.      "waiting",
  1049.      "printing",
  1050.      "initializing",
  1051.      NULL
  1052.  };
  1053.  enum     { PS_IDLE, PS_BUSY, PS_WAIT, PS_PRINT, PS_INIT, PS_UNKNOWN };
  1054.  
  1055.  void     giveup();
  1056.  jmp_buf  jumper;
  1057.  
  1058.  char     logfname[30];
  1059.  FILE     *logfile, *acctfile;
  1060.  
  1061.  main (argc, argv)
  1062.  int argc;
  1063.  char     *argv[];
  1064.  {
  1065.      char *devname;
  1066.      int  pagcnt, c;
  1067.      int  pid;
  1068.      int  w, status;
  1069.  
  1070.      if (argc < 2) {
  1071.           fprintf(stderr, "Usage: psbe file\n");
  1072.           exit(-1);
  1073.      }
  1074.      if (log_init(argv[1]) < 0) {
  1075.           fprintf(stderr, "log_init failed!\n");
  1076.           exit(EXITBAD);
  1077.      }
  1078.      sprintf(logfname, "%s/%s.log", LOGDIR, get_device_name());
  1079.      if ((logfile = fopen(logfname, "a")) == NULL) {
  1080.           fprintf(stderr, "Can't open logfile.\n");
  1081.           exit(EXITBAD);
  1082.      }
  1083.  
  1084.      if ((acctfile = fopen(ACCTFILE, "a")) == NULL) {
  1085.      fprintf(stderr, "Can't open logfile.\n");
  1086.      exit(EXITBAD);
  1087.      }
  1088.  
  1089.      setvbuf(logfile, NULL, _IOLBF, BUFSIZ);
  1090.      setvbuf(acctfile, NULL, _IOLBF, BUFSIZ);
  1091.  
  1092.      setvbuf(stdin, NULL, _IONBF, 0);
  1093.      setvbuf(stdout, NULL, _IONBF, 0);
  1094.      fprintf(logfile, "start Job no. %d, queued on %s\n", get_job_number(),
  1095.                get_qdate());
  1096.      log_status(WAITING);
  1097.      pagcnt = getpagecnt();
  1098.      log_status(RUNNING);
  1099.      if ((pid = fork()) < 0) {
  1100.           perror("fork");
  1101.           exit(EXITBAD);
  1102.      }
  1103.      if (pid == 0) {
  1104.           argv[0] = "piobe";
  1105.           execv("/usr/lpd/piobe", argv);
  1106.           perror("exec");
  1107.           exit(EXITBAD);
  1108.      }
  1109.      while ((w = wait(&status)) != pid)
  1110.           if (w == -1) {
  1111.                perror("wait");
  1112.                exit(EXITBAD);
  1113.           }
  1114.      if (WEXITSTATUS(status) != 0)
  1115.           exit(WEXITSTATUS(status));
  1116.      log_status(WAITING);
  1117.  
  1118.      if (pagcnt > 0 && (c = getpagecnt()) > 0) {
  1119. #ifdef WANT_PAC 
  1120.           log_pages(c - pagcnt);
  1121. #endif
  1122.     }
  1123.  
  1124.      fprintf(logfile, "end Job no. %d, queued on %s\n", get_job_number(),
  1125.                get_qdate());
  1126.  
  1127. /* the accounting file format is 
  1128.  
  1129. pages_printed     user     queue_printed_on   time_queued
  1130.  
  1131. */
  1132.  
  1133.      fprintf(acctfile, "%d %35s %7s    %s \n", (c - pagcnt), get_from(), get_queue_name(), get_qdate());
  1134.  
  1135.      fclose(logfile);
  1136.      fclose(acctfile);
  1137.      exit(EXITOK);
  1138.  }
  1139.  
  1140.  void     giveup ()
  1141.  {
  1142.      longjmp(jumper, 1);
  1143.  }
  1144.  
  1145.  getpagecnt ()
  1146.  {
  1147.      int  pc = 0, pstat;
  1148.      char buf[81];
  1149.  
  1150.      if (setjmp(jumper) != 0) {
  1151.           fprintf(logfile, "giving up on status\n");
  1152.           return (0);
  1153.      }
  1154.      alarm(60 * 2);
  1155.      signal(SIGALRM, giveup);
  1156.      do {
  1157.           if (!gets(buf)) {
  1158.                sleep(5);
  1159.                putchar('\x14');    /* ^T returns status */
  1160.                sleep(1); /* wait for answer from printer */
  1161.                if (!gets(buf))
  1162.                     return (0);
  1163.           }
  1164.           fprintf(logfile, "%s\n", buf);
  1165.           if ((pstat = getstatus(buf)) == PS_WAIT) {
  1166.                putchar('\x04');
  1167.                sleep(1);
  1168.           }
  1169.      } while (pstat != PS_IDLE);
  1170.      alarm(0);
  1171.      while (gets(buf))
  1172.           fprintf(logfile, "%s\n", buf);
  1173.      printf("%s", pcprog);
  1174.      sleep(1); /* wait for answer from printer */
  1175.      if (!gets(buf))
  1176.           return (0);
  1177.      if (sscanf(buf, "%d", &pc) != 1)
  1178.           return (0);
  1179.      fprintf(logfile, "%d\n", pc);
  1180.      return (pc);
  1181.  }
  1182.  
  1183.  /*
  1184.   * Parser for printer status messages
  1185.   */
  1186.  
  1187.  getstatus (p)
  1188.  char     *p;
  1189.  {
  1190.      char *t;
  1191.      int  i;
  1192.  
  1193.      if ((p = strchr(p, '%')) == NULL)
  1194.           return (PS_UNKNOWN);
  1195.      if (strncmp(p, "%%[", 3) != 0)
  1196.           return (PS_UNKNOWN);
  1197.      for (p = nextword(p + 3) ; p != NULL ; p = skipvalue(p)) {
  1198.           t = p;
  1199.           p = strchr(p, ':');
  1200.           *p++ = '\0';
  1201.           p = nextword(p);
  1202.           if (strcmp(t, "status") == 0)
  1203.                break;
  1204.      }
  1205.      if (p == NULL)
  1206.           return (PS_UNKNOWN);
  1207.      t = p;
  1208.      p = strchr(p, ' ');
  1209.      if (p[-1] == ';')
  1210.           p--;
  1211.      *p = '\0';
  1212.      for (i = 0 ; keyw[i] != NULL ; i++)
  1213.           if (strcmp(t, keyw[i]) == 0)
  1214.                break;
  1215.      return (i);
  1216.  }
  1217.  
  1218.  char     *nextword (p)
  1219.  char     *p;
  1220.  {
  1221.      while (isspace(*p))
  1222.           p++;
  1223.      if (strncmp(p, "]%%", 3) == 0)
  1224.           return (NULL);
  1225.      return (p);
  1226.  }
  1227.  
  1228.  char     *skipvalue (p)
  1229.  char     *p;
  1230.  {
  1231.      char *t;
  1232.  
  1233.      while (p != NULL) {
  1234.           p = strchr(p, ' ');
  1235.           t = p;
  1236.           p = nextword(p);
  1237.           if (t[-1] == ';')
  1238.                break;
  1239.      }
  1240.      return (p);
  1241.  }
  1242.  
  1243.  /*********    qprocs.h    ***********/
  1244.  /* functions for communication between qdaemon and the backend */
  1245.  
  1246.  char     *get_from();
  1247.  char     *get_to();
  1248.  char     *get_qdate();
  1249.  char     *get_queue_name();
  1250.  char     *get_device_name();
  1251.  char     *get_title();
  1252.  
  1253.  
  1254. 1.119: How do I create boot diskettes for 3.2?
  1255.  
  1256. You need to have four formatted diskettes.
  1257.  
  1258. boot disk:                bosboot -d /dev/fd0 -a
  1259. display disk:             mkdispdskt
  1260. display extension disk:   mkextdskt
  1261. Install/Maintenance disk: mkinstdskt
  1262.  
  1263.  
  1264. 1.120: Where can I find tools for performance monitoring?
  1265.  
  1266. For 3.2 a few tools are available in /usr/lpp/bosperf. There are tools
  1267. to monitor traces, I/O events, CPU, virtual memory, disk block usage,
  1268. kernel extensions, etc. It even has a simulator, rmss, that allows one
  1269. to try out different memory size configurations to see how it impacts
  1270. performance. See 6.05 for the AIX Performance and Tuning Guide.
  1271.  
  1272.  
  1273. 1.121: How can I tell what virtual printer a print queue is using?
  1274. From: yoder@austin.ibm.com (Stuart R. Yoder)
  1275.  
  1276. Use the command 'lsvirprt'. Don't use any parameters and it will
  1277. run in an interactive mode that will give you a menu of all virtual
  1278. printers on the system with the queue and device for each one.
  1279.  
  1280.  
  1281. 1.122: Two srcmstr's are less useful than one?
  1282. From: hubert@rs530.ncs.mainz.ibm.com (Bernhard Zeller)
  1283.  
  1284. This can happen on systems that have no console, or systems with an
  1285. async terminal as the console but not attached or turned off. One of the
  1286. symptoms is a second srcmstr got run. But the second srcmstr is worthless
  1287. as we can't use the stop/startsrc commands, refresh inetd, qdaemon won't
  1288. start, etc.
  1289.  
  1290. To resolve this, type:
  1291.  
  1292.     smit chgtty
  1293.  
  1294. and add the keyword 'clocal' in following lines:
  1295.  
  1296.    STTY attributes for RUN TIME
  1297.    STTY attributes for LOGIN
  1298.  
  1299.  
  1300. 1.123: How do I set the tty name associated with a physical port?
  1301. From: accapadi@mathew.austin.ibm.com (Matt Accapadi)
  1302.  
  1303. Let's say you wanted to make a tty on the s1 port and call it rs0000
  1304. and a tty on the s2 port and call it rs0001.
  1305.  
  1306. You could run:
  1307.  
  1308. mkdev -c tty -s rs232 -t tty -l rs0000 -p sa0 -w s1   # creates rs0000
  1309. and
  1310. mkdev -c tty -s rs232 -t tty -l rs0001 -p sa1 -w s2   # creates rs0001
  1311.  
  1312.  
  1313. 1.124: How do I use mksysb to clone a system?
  1314. From: joann@ariadne.SLAC.Stanford.EDU (Jo Ann Malina)
  1315.  
  1316. I use the following steps on the master machine to clone an AIX system:
  1317. 1) Remove the password from root.
  1318. 2) Remove the NIS line from the end of the /etc/group file (the last
  1319.    line with the +: )
  1320. 3) Change most of the level '2' designations in /etc/inittab to level
  1321.    '3' to prevent them from being started up when the new system is
  1322.    booted (the minimum ones to change are rc.nfs and rc.tcpip)
  1323. 4) Boot in service mode and change the name and ip address to a "spare"
  1324.    set to avoid address collision.
  1325. 5) Clear /tmp, /usr/tmp and /usr/spool/lpd/stat.
  1326. 6) Run mkszfile and edit it to be sure /usr is as small as possible;
  1327.    then mksysb from the command line.
  1328.  
  1329. The above changes allow me to boot in normal mode the first time, get in
  1330. as root, change the above files back and do the other things necessary
  1331. to configure the new system.
  1332.  
  1333. Then, of course, I go back and clean up and reboot my master machine.
  1334.  
  1335. Note: 1 and 2 lets you log in even if you can't get on the network. 
  1336.    It prevents the login process from trying to reach an NIS server. 
  1337.    Step 2 needed only if you use NIS.
  1338.  
  1339.  
  1340. 1.125: How do I retain timestamps with mksysb?
  1341. From: graeme@ccu1.aukuni.ac.nz ( Graeme Moffat)
  1342.  
  1343. In /usr/lpp/bosinst/bosnet (for net installs), and bosrest (tape), the
  1344. 'pax' commands all have '-pmop' options.  m = "DON'T retain modification
  1345. times".  So, simply change all the '-pmop' to '-pop' and remake
  1346. inst/maint diskettes or mksysb tapes.
  1347.  
  1348.  
  1349. 1.126: How can I find out the machine type?
  1350. From: umar@compsci.cas.vanderbilt.edu (Sait Umar)
  1351.  
  1352. #!/bin/sh
  1353. #
  1354. #  Author G. Vitillaro              (peppe@ipgaix.unipg.it)
  1355. #  from an idea of Marc Pawliger    (marc@ibmpa.awdpa.ibm.com)
  1356. #
  1357. #  10/12/92  GVT  First (and last) implementation
  1358. #
  1359. # machine : will get machine type on RISC/6000
  1360. #
  1361. #
  1362. awk '
  1363.         BEGIN {
  1364.                 m["10"]="7013/530 or 7016/730";
  1365.                 m["11"]="7013/540";
  1366.                 m["14"]="7013/540";
  1367.                 m["18"]="7013/530H";
  1368.                 m["1C"]="7013/550";
  1369.                 m["20"]="7015/930";
  1370.                 m["2E"]="7015/950";
  1371.                 m["2E"]="7015/950E";
  1372.                 m["30"]="7013/520";
  1373.                 m["31"]="7012/320";
  1374.                 m["34"]="7013/520H";
  1375.                 m["35"]="7012/320H or 320E";
  1376.                 m["37"]="7012/340";
  1377.                 m["38"]="7012/350";
  1378.                 m["41"]="7011/220";
  1379.                 m["45"]="7011/M20";
  1380.                 m["5C"]="7013/560";
  1381.                 m["63"]="7015/970";
  1382.                 m["64"]="7015/980";
  1383.                 m["66"]="7015/580";
  1384.                 m["67"]="7015/570";
  1385.                 m["75"]="7012/370, 375, or 37T";
  1386.                 m["76"]="7012/360, 365, or 36T";
  1387.                 m["77"]="7012/350, 355, or 7013/550L";
  1388.                 m["78"]="7012/315 or 7013/510 ";
  1389.                 if ( m[code] != "" )
  1390.                         print "This RISC/6000 is a " m[code];
  1391.                 else
  1392.                         print "Unknown Machine";
  1393.         }
  1394. ' code=`uname -m | cut -c9-10` < /dev/null
  1395.  
  1396.  
  1397. 1.127: Updating to 3.2.5
  1398. From: kraemerf@franvm3.VNET.IBM.COM (Frank Kraemer)
  1399.  
  1400. (Ed.  The following is useful if you have to update a large number of
  1401. systems, large being > 3.)
  1402.  
  1403.    *** WARNING : Modify the scripts if you need dataless, diskless   ***
  1404.    ***           or remote /usr support.                             ***
  1405.  
  1406. 1) Receive the PMP3250 tape from your AIX support center the PTF number
  1407.    is U493250.
  1408.  
  1409. 2) Create a filesystem with 240 MB of space (60 PP's) and mount it as
  1410.  
  1411.    /dev/pmp3250  -  /pub/pmp3250
  1412.  
  1413. 3) Insert the tape (blocksize is 512) and install PTF U422467
  1414.  
  1415.    # installp -BXacgq -d /dev/rmt0 bos.obj 3.2.0.0.U422467
  1416.  
  1417. 4) Use the following script to load the tape in the new filesystem
  1418.  
  1419.    # cd /pub/pmp3250
  1420.    # mktape2disk.sh 0 447             <<-- read 447 files from rmt0
  1421.  
  1422. =-=-=-=-=-=-=-= cut here =-=-=-=-=-=-=-=-=-=-=
  1423. #!/bin/ksh
  1424. # @(#) mktape2disk.sh  creates files from tape on disk.
  1425.  
  1426. # change name prefix here
  1427. NAME="f"
  1428.  
  1429. # from file #i to file #j
  1430. integer i=1
  1431. integer j
  1432.  
  1433. # test arguments
  1434. if [ -z "${1}" ]
  1435. then
  1436.   echo "\nusage: $(basename ${0}) <drive_no> <#files>\n"
  1437.   echo "\t<drive_no>: tape drive number (e.g. 0)"
  1438.   echo "\t<#files>  : number of files to copy from the tape\n"
  1439.   exit 1
  1440. fi
  1441. device=/dev/rmt${1}.1
  1442.  
  1443. # test arguments
  1444. if [ -z "${2}" ]
  1445. then
  1446.   echo "\nusage: $(basename ${0}) <drive_no> <#files>\n"
  1447.   echo "\t<drive_no>: tape drive number (e.g. 0)"
  1448.   echo "\t<#files>  : number of files to copy from the tape\n"
  1449.   exit 1
  1450. fi
  1451. j=${2}
  1452.  
  1453. tctl -f ${device} rewind
  1454. if [ $? -ne 0 ]
  1455. then
  1456.   exit 1
  1457. fi
  1458.  
  1459. # create tape
  1460. while [ ${i} -le ${j} ]
  1461. do
  1462.     echo "Copy file #${i} of #${j} from (${device}) to disk as (${NAME}${i})."
  1463.     dd if=${device} of="${NAME}${i}" bs=200k
  1464.     i=i+1
  1465. done
  1466. tctl -f ${device} rewind
  1467. exit 0
  1468. =-=-=-=-=-=-=-= cut here =-=-=-=-=-=-=-=-=-=-=
  1469.  
  1470. 5) Create a new .toc file
  1471.  
  1472.    # cd /pub/pmp3250
  1473.    # inutoc .
  1474.    # pg .toc
  1475.  
  1476. 6) Place the following file named 'runme.sh' in the PMP directory
  1477.  
  1478. =-=-=-=-=-=-=-= cut here =-=-=-=-=-=-=-=-=-=-=
  1479. #!/bin/ksh
  1480. # @(#) runme.sh for PMP3250
  1481. #
  1482. INSTP="/usr/sbin/installp"
  1483. LOG="/tmp/installp.log"
  1484. TEE="/usr/bin/tee"
  1485. PATCHDIR=$(pwd)
  1486. #
  1487. /usr/bin/cp /usr/lpp/info/data/ispaths /usr/lpp/info/data/ispaths.save
  1488. #
  1489. INFODIR="/usr/lpp/info/$LANG/aixmin"
  1490. /usr/bin/mkdir ${INFODIR} 2>/dev/null >/dev/null
  1491. if [ ! -w ${INFODIR} ]
  1492. then
  1493.     print "\n\t*ERROR* Can not (write) access [${INFODIR}]."
  1494.     print "\tPlease unmount CD or NFS filesystems.\n"
  1495.     exit -1
  1496. fi
  1497. #
  1498. # Commit all ptf's
  1499. #
  1500. ${INSTP} -Xc all 2>&1 | ${TEE} ${LOG}.0
  1501. #
  1502. # Install latest installp patch
  1503. #
  1504. ${INSTP} -BXacgq -d ${PATCHDIR} bos.obj 3.2.0.0.U422463 2>&1 | ${TEE} ${LOG}.1
  1505. #
  1506. # Install latest installp patch
  1507. #
  1508. ${INSTP} -BXacgq -d ${PATCHDIR} bos.obj 3.2.0.0.U422467 2>&1 | ${TEE} ${LOG}.6
  1509. #
  1510. # Run the ptfdir clean utility.
  1511. #
  1512. /usr/sbin/ptfdir_clean -y -f -v 2>&1 | ${TEE} ${LOG}.2
  1513. #
  1514. # Install the PMP.    Version 1
  1515. #
  1516. /usr/lib/instl/sm_inst installp_cmd   \
  1517.         -T m -q -a -g -B              \
  1518.         -d ${PATCHDIR}                \
  1519.         -S '3250 AIX Maintenance Level U493250' \
  1520.         -c  -N  -X                    \
  1521.         2>&1 | ${TEE} ${LOG}.3
  1522. #
  1523. # Install the PMP.    Version 2
  1524. #
  1525. # /usr/sbin/update_all
  1526. #
  1527. # Install latest installp patch
  1528. #
  1529. /usr/bin/lppchk -v | ${TEE} ${LOG}.4
  1530. #
  1531. # Show level of installp patch
  1532. #
  1533. /usr/bin/lslpp -m bos.obj | ${TEE} ${LOG}.5
  1534. #
  1535. # Guess you should reboot now.
  1536. #
  1537. sync;sync
  1538. print - "\n\n\tDone......guess you should reboot now !!\n"
  1539. exit 0
  1540. =-=-=-=-=-=-=-= cut here =-=-=-=-=-=-=-=-=-=-=
  1541.  
  1542. 7) To run the update on your server
  1543.  
  1544.    ===>> Please read the Installation Instructions first <<==
  1545.  
  1546.    # cd /pub/pmp3250
  1547.    # ./runme.sh
  1548.  
  1549.                    ........WAIT...........
  1550.  
  1551.    # /etc/shutdown -Fr
  1552.  
  1553. 8) NFS export the PMP dir as READ-ONLY to all your clients.
  1554.  
  1555. 9) To update a client system
  1556.  
  1557.     a -  Mount the PMP filesystem from the server
  1558.     b -  cd <mounted_filesystem>
  1559.     c -  execute ./runme.sh
  1560.     d -  Unmount PMP filesystem
  1561.     e -  reboot
  1562.  
  1563. 10) To create a copy 1:1 of the tape you received use the script 'mktape.sh'
  1564.  
  1565.    # cd /pub/pmp3250
  1566.    # mktape.sh 0
  1567.  
  1568. =-=-=-=-=-=-=-= cut here =-=-=-=-=-=-=-=-=-=-=
  1569. #!/bin/ksh
  1570. # @(#) mktape.sh: creates a bootable tape from images on disk
  1571.  
  1572. # change name prefix here
  1573. NAME="f"
  1574.  
  1575. # usage: mktape drive_no
  1576. #        drive_no = tape drive number
  1577. # test arguments
  1578. if [ -z "${1}" ]
  1579. then
  1580.   echo "\nusage: mktape <drive_no>"
  1581.   echo "         <drive_no>: tape drive number (e.g. 0)\n"
  1582.   exit 1
  1583. fi
  1584. device=/dev/rmt${1}.1
  1585.  
  1586. tctl -f ${device} rewind
  1587. if [ $? -ne 0 ]
  1588. then
  1589.   exit 1
  1590. fi
  1591.  
  1592. # create tape
  1593. i=1
  1594. while test -r "${NAME}${i}"
  1595. do
  1596.     echo "copy ${i}"
  1597.     if [ $i -le 3 ]
  1598.     then
  1599.       dd if="${NAME}${i}" of=${device} conv=sync bs=1k
  1600.     else
  1601.       dd if="${NAME}${i}" of=${device} bs=200k
  1602.     fi
  1603.     let i=${i}+1
  1604. done
  1605. tctl -f ${device} rewind
  1606. exit 0
  1607.  
  1608.  
  1609. 1.128: AIX fix strategy
  1610. From: leedp@austin.ibm.com (Dennis Lee, PMP Release Manager)
  1611.  
  1612. First, a little history...
  1613.  
  1614. The maintenance strategy for AIX 3.1 was cumulative updates. Every few
  1615. months, we'd put all available fixes in one large package and ship it. 
  1616. There was no real strategy for providing a single fix. Although we'd
  1617. occasionally produce an emergency patch, there was no method for
  1618. tracking them; if you got a second one, it might overwrite the first. 
  1619. So, after a few of these patches, it's hard to track.
  1620.  
  1621. In AIX 3.2 we introduced a "selective fix" strategy which can package an
  1622. individual fix as a separate package.  The package contained information
  1623. about other fixes that were required for that fix to work correctly. 
  1624. For example, a Korn shell fix might require a change in libc.a, which
  1625. might in turn require a fix in the kernel.  This strategy allowed us to
  1626. keep track of which fixes were installed to make sure we didn't
  1627. overwrite one with another, and make sure they all worked together. 
  1628. But the initial selective fix design still had a few problems.
  1629.  
  1630.   o None of the fixes were cumulative.  If you got a fix for Korn shell,
  1631.     you may not receive all of the fixes for Korn shell.  This left the
  1632.     possibility of rediscovering other problems that were already fixed.
  1633.  
  1634.   o Since we chose to fix everything possible that was reported as a
  1635.     problem, instead of deferring them to the next release, the number
  1636.     of available fixes became quite large.
  1637.  
  1638.   o The number of additional fixes required by any given fix could also
  1639.     be quite large.  Since the installation program ran once for each
  1640.     fix, the size and complexity of the fix packages grew, and
  1641.     installation time lengthens greatly.
  1642.  
  1643. While developing the AIX 3.2.4 upgrade, we undertook a large effort to
  1644. resolve the selective fix concerns, and dramatically increase the
  1645. quality of AIX 3.2.  The base operating system and most of the optional
  1646. program products were split into subsystems.  A subsystem is a group of
  1647. logically related files.  The division was made such that changes to a
  1648. given subsystem were less likely to affect other subsystems.  In total
  1649. there are approximately 500 subsystems, but in practice, files have been
  1650. modified in only about half of them.  The advantages of the new
  1651. packaging strategy are:
  1652.  
  1653.   o Each subsystem package is cumulative, containing all of the fixes
  1654.     and enhancements to date for that subsystem.
  1655.  
  1656.   o The cumulative subsystem package is tested as an entity.
  1657.  
  1658.   o The number of fix packages is greatly reduced because the number of
  1659.     subsystems is far fewer than the number of fixes and enhancements.
  1660.  
  1661.   o The number of other fixes required by any given fix is also greatly
  1662.     reduced because a subsystem package has requisites only on other
  1663.     subsystem packages.
  1664.  
  1665.   o The reduced number of fix packages greatly reduced installation time.
  1666.  
  1667. Some customers also told us that they liked the maintenance level
  1668. strategy that we used in AIX 3.1.  They liked being able to install all
  1669. of the known fixes, and they liked knowing what "level" of AIX they had. 
  1670. To meet these requirements, we produced a Preventive Maintenance Package
  1671. (PMP).  The PMP is simply a collection of the latest cumulative
  1672. subsystem packages tied together in such a way that it can be installed
  1673. by selecting a single fix.  We also added flags to the lslpp command and
  1674. added a new command, oslevel, to show which PMP is installed.  Now we
  1675. had both! The good attributes of selective fix along with the good
  1676. attributes of maintenance levels. 
  1677.  
  1678. A few Q&As: 
  1679.  
  1680. Q. Why is the fix I just received 130 megabytes!@#? I already have the
  1681. AIX 3.2.4 update installed!
  1682. A. Your fix may be part of the AIX 3.2.5 update. AIX 3.2.5 is another
  1683. PMP that contains all of the fixes to date, as well as enhancements 
  1684. to support the PowerPC model 250, and the new high-end RS/2 models
  1685. 590 and 990, as well as support for new disk and tape drives, graphics
  1686. adapters and more.
  1687.  
  1688. Q. Why can't you just build my fix on 3.2.4? 
  1689. A. There really isn't such a thing as 3.2.1 or 3.2.2 or even 3.2.4. 
  1690. They're all nothing more than collections of fixes and enhancements
  1691. built on an AIX 3.2 base. If the fix for your problem was built prior
  1692. to the AIX 3.2.5 subsystems, you can get the older version. But if your
  1693. fix was built for the first time in a 3.2.5 subsystem, that's the only
  1694. version of the fix that exists.
  1695.  
  1696. See also 6.02.
  1697.  
  1698.  
  1699. 1.129: Are passwords limited to 8 char?
  1700.  
  1701. AIX passwords are only significant to 8 characters. You can set one
  1702. more than 8 characters but anything over eight characters are ignored. 
  1703. No messages or warnings are given.
  1704.  
  1705. Be careful if you're running NIS. You probably want to limit passwords
  1706. to 8 char on all machines (6000 and others) to be compatible.
  1707.  
  1708. Someone mentioned that DCE supports kerberos which supports passwords
  1709. greater than 8 characters.
  1710.  
  1711.  
  1712. 1.130: How do I increase the number of ptys > 64?
  1713. From: mick@oahu.cern.ch (Mickey Coggins)
  1714.  
  1715. SMIT only allows 64. Try this:
  1716.  
  1717. odmget -q"attribute=num and uniquetype=pty/pty/pty" PdAt |
  1718. sed "s/0-64/0-512/" |
  1719. odmchange -q"attribute=num and uniquetype=pty/pty/pty" -o PdAt
  1720.  
  1721. chdev -l pty0 -anum=256 -P
  1722. reboot
  1723.  
  1724.  
  1725.