File:
[LON-CAPA] /
doc /
build /
Attic /
systemperl_howto.html
Revision
1.1:
download - view:
text,
annotated -
select for diffs
Mon Dec 16 21:23:33 2002 UTC (21 years, 8 months ago) by
matthew
Branches:
MAIN
CVS tags:
version_1_0_3,
version_1_0_2,
version_1_0_1,
version_1_0_0,
version_0_99_5,
version_0_99_4,
version_0_99_3,
version_0_99_2,
version_0_99_1,
version_0_99_0,
conference_2003,
HEAD
First version. Needs more information somewhere, I'm sure.
1: <html>
2: <head>
3: <title>The LON-CAPA systemperl HOW-TO</title>
4: </head>
5: <body>
6:
7: <h1>The LON-CAPA systemperl HOW-TO</h1>
8: <p>
9: The LON-CAPA systemperl rpm holds all of the perl modules required by LON-CAPA
10: but not a part of LON-CAPA. Additionally, other libraries have been included
11: as well.
12: This document describes in some detail the commands and
13: processes necessary to build a systemperl rpm.
14: My goal in writing this document is to never, ever have to do this again.
15: The difficulty is not simply the tedium involved in determining the
16: dependencies and build/install orders of the packages.
17: The real chore is the severity of an error - if the systemperl rpm is not
18: complete, LON-CAPA will not work properly.
19: </p><p>
20: <i>Fun Fact:emacs thinks 'systemperl' is a misspelling of 'distemper'.</i>
21: </p>
22:
23: <ol>
24:
25: <li>Find a machine to build on</li>
26: <p>
27: In the case of the 3.5 systemperl, we were still support Red Hat 6.2, so
28: we needed two machines. The best situation would be to have a clean install
29: of RedHat and LON-CAPA (fully updated) installed in it as well. This is easy
30: for RedHat 7.3 but less easy for RedHat 6.2.
31: For the latter case, I used data.lite.msu.edu. This caused some problems so
32: you should thoroughly test your rpm by doing a few test installations on
33: little-used machines - preferably access servers that are not used regularly.
34: </p>
35:
36: <li>Set up your work environment</li>
37: <p>
38: You will need to set up directories. I used <tt>/root/systemperl/</tt>
39: as my base directory on data.lite.msu.edu. I had to make the following
40: directories:
41: <pre>
42: mkdir /root/systemperl
43: mkdir /root/systemperl/modules
44: mkdir /root/systemperl/root
45: mkdir /root/systemperl/root/usr
46: mkdir /root/systemperl/oldrpm
47: mkdir /root/systemperl/oldrpm/var
48: mkdir /root/systemperl/oldrpm/var/lib
49: mkdir /root/systemperl/oldrpm/var/lib/rpm
50: </pre>
51: The <tt>rpm</tt> directory is required by rpm but it can't seem to make
52: the directory itself. <i>Fun Fact: rpm --usage causes a segfault on
53: RedHat 7 systems.</i>
54: </p>
55:
56: <li>Get the old systemperl</li>
57: <p>
58: Typically found living somewhere on Zaphod. I suggest, as root, doing
59: </p>
60: <pre>
61: find /home -name "*systemperl*"
62: </pre>
63: <p>
64: The rest of this document assumes you're working with
65: <tt>LON-CAPA-systemperl-3.4-1.i386.rpm</tt> as the previous version.
66: The new version will be <tt>LON-CAPA-systemperl-3.5-1.i386.rpm.</tt>
67: </p>
68:
69: <li>Figure out what was in the old rpm contains</li>
70: <p>
71: Extract the rpm to a test directory. I suggest
72: <tt>/root/systemperl/oldrpm</tt>
73: <pre>
74: rpm --install --force --noscripts --nodeps -r /root/systemperl/oldrpm LON-CAPA-systemperl-3.4-1.i386.rpm
75: </pre>
76: List all the files (ls -lR) and see what perl modules and libraries are in it.
77: You will probably need to get all of these modules and libraries.
78: </p><p>
79: To get a list of new modules you may need to get, grep the loncapa source tree
80: using the following simple command:
81: <pre>
82: find /home/matthew/loncapa -name "*.p[lm]" -exec grep "^use " {} \; \
83: | cut -d ' ' -f 2 | perl -pe 's/([\(\)\;]|\s+$)//g; $_.="\n"' | \
84: grep -v ^Apache | sort -u
85: </pre>
86: </p>
87:
88: <li>Get source code for libraries you need to include</li>
89: <p>
90: You may need to include libgd or some other library in the systemperl.
91: Google for the library and seek out the home page of the project developing it.
92: You'll probably wind up with a tarball instead of an rpm. (If you can find an
93: rpm for all the systems you have to support I suggest just requiring people to
94: install the rpm directly instead of repackaging it (which I won't talk about).)
95: So untar it and, if you're lucky, it will use a configure script to determine
96: how to compile the package. For example:
97: <pre>
98: tar zxf gd-2.0.9.tar.gz
99: cd gd-2.0.9
100: ./configure --prefix /root/systemperl/root/usr/
101: make
102: make install
103: </pre>
104: </p><p>
105: If you find later that some perl modules are being compiled against this
106: library (such as <tt>GD.pm</tt>), you will want to be sure you have this
107: installed properly on the machine you're building on. I suggest:
108: <pre>
109: rm -rf gd-2.0.9
110: tar zxf gd-2.0.9.tar.gz
111: cd gd-2.0.9
112: ./configure
113: make
114: make install
115: </pre>
116: </p>
117:
118: <li>Get new versions of perl modules</li>
119: <p>
120: I used CPAN.
121: <pre>
122: # perl -MCPAN -e shell
123: </pre>
124: By issuing 'get <modulename>' commands you can grab all the files you need.
125: </p><p>
126: However, where the modules end up is another story. The default storage
127: place for modules is <tt>/root/.cpan/sources/...</tt>.
128: I have not found a reliable way to set this supposedly configurable option.
129: Issue a "<tt>o conf</tt>" to see what options are available in the CPAN shell.
130: One method might be issuing the following commands (outside of the CPAN shell):
131: <pre>
132: cd /root/.cpan
133: find . -name "*.tar.gz" -exec rm {} \;
134: perl -MCPAN -e shell
135: # Do your module downloading
136: find . -name "*.tar.gz" -exec mv {} /root/systemperl/modules \;
137: </pre>
138: Do not simply issue the above commands without knowing what they do.
139: </p><p>
140: The method I used was slightly more iterative, where I copied each *.tar.gz out
141: as it came in.
142: </p>
143:
144: <li>Compile the Perl Modules</li>
145: <p>
146: For each module you grabbed, you'll need to issue the following commands
147: to compile it:
148: <pre>
149: tar zxf <modulename>.tar.gz
150: cd <modulename>
151: perl Makefile.PL PREFIX=/root/systemperl/root
152: make
153: make test
154: make install
155: </pre>
156: The <tt>make test</tt> is probably not necessary in some cases. Some packages
157: require information from you during the <tt>perl Makefile.PL</tt> step.
158: Some packages will complain that you don't have prerequisite packages
159: installed.
160: If you have already downloaded these packages you will need to install them on
161: the live system you are building the package on. For example, GDGraph will not
162: compile without GD being installed on the machine. So you must build GD.pm
163: <b>and</b> install it on the current machine by doing
164: <pre>
165: cd GD-<version>
166: perl Makefile.PL
167: make
168: make install
169: </pre>
170: before you attempt to compile GDGraph.pm.
171: <b>Note</b>: There is no <tt>make test</tt> for GD.pm.
172: </p><p>
173: Of course, GD depends on the library libgd.so. Thus, we need to have
174: installed libgd prior to all of this. <i>There is no automatic way of
175: settling these dependencies at this time.</i>
176: </p>
177:
178: <li>Package it together</li>
179: <p>
180: Ahh, building an rpm. Legends tell of days when you had to work long and
181: hard to build an rpm. These days we have Scott Harrison's <tt>make_rpm.pl</tt>
182: script which does the hard work for us. Since you're likely to have to
183: do this a lot, making a shell script might be wise:
184: <pre>
185: [root@data systemperl]# cat make_systemperl.sh
186: find ./root | perl make_rpm.pl LON-CAPA-systemperl 3.5 '' '' ./root
187: </pre>
188: </p><p>
189: <b>NOTE</b>: A modification had to be made to make_rpm.pl in order for it to
190: accept a name of LON-CAPA-systemperl. By default the make_rpm.pl script does
191: not allow for non-alphanumeric characters in the package name. This bites.
192: So you'll want to bypass that test in the make_rpm.pl script.
193: </p><p>
194: The invocation of make_rpm.pl given above omits a lot of options.
195: If you need to do something special with your systemperl rpm I suggest you
196: read the help available on make_rpm.pl.
197: </p>
198:
199: <li>Test installation</li>
200: <p>
201: So, you've made an rpm. You should be proud.
202: You could be even prouder if you knew the thing worked.
203: So find a machine to test on. I suggest either a little-used access server
204: or a new machine you don't intend to keep around.
205: </p><p>
206: Do not simply install it on the machine you built on and decide it works.
207: The process above only gives you the modules LON-CAPA depends on. It does
208: not tell you which modules those modules depend on. Only actual use will
209: tell you if your system is complete.
210: </p><p>
211: Install your rpm on the system
212: <pre>
213: rpm --install --force LON-CAPA-systemperl-3.5.-1.rpm
214: </pre>
215: and install the new loncapa. I suggest testing the following components:
216: <ul>
217: <li>kerberos 4 authentication</li>
218: <li>kerberos 5 authentication</li>
219: <li>spreadsheet, specifically excel output of spreadsheets</li>
220: <li>statistics, specifically the degree of difficulty graphs</li>
221: <li>A randomlabel problem</li>
222: <li>search and search results</li>
223: <li>enrollment upload</li>
224: </ul>
225: If there are any problems you have likely forgotten a library or have a bad
226: version of the library.
227:
228: </ol>
229: </body>
230: </html>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>