PennMUSH Community

root/1.8.3/tags/p6/UPGRADING

Revision 1117, 10.8 kB (checked in by shawnw, 1 year ago)

Merge with devel

Line 
1 ============================================================================
2                          Upgrading to PennMUSH 1.8.x
3 ============================================================================
4
5 This file explains how to upgrade to a new version of PennMUSH.
6
7 There are three basic upgrade situations:
8   A. You're running a stock ("vanilla") PennMUSH server of some
9      version and you want to upgrade to a later version
10   B. You've hacked your server source code a little bit here and there
11      (adding a flag, for example). Hacks to the *local.c files don't
12      count as hacks, as they're easy to handle.
13   C. You've hacked your server source code a lot.
14
15 There is also a list of upgrade "GOTCHAS" at the end of this file.
16 Please read them.
17
18 The PennMUSH developers actually only support situation A, but we'll
19 give some useful tips for B and C here, too.
20
21 DISCLAIMER: It is very wise to always back up your current working
22 MUSH directories before you try an upgrade. You were warned.
23
24 ============================================================================
25
26 A. Vanilla upgrade
27
28 You have basically two choices here: upgrade with patch files, or
29 build a whole new distribution.
30
31 A.1. Upgrading with patch files
32
33 This is the easiest way to upgrade your source code if you're keeping
34 up with patches as they come out, or if you're upgrading patchlevels
35 within a release (e.g., within 1.8.0).
36
37 To upgrade with patch files, get all the patch files for higher
38 patchlevels than your current version. For example, if you're running
39 1.8.0p0 and the latest version is 1.8.0p4, you need patches 1-4.
40
41 These files are stored at http://ftp.pennmush.org/Source and usually
42 named things like 1.8.0-patch02 (the patch from 1.8.0p1 to 1.8.0p2)
43 or, in some cases, 1.7.6p16-1.8.0p0.patch (the patch from 1.7.6p16 to
44 1.8.0p0).
45
46 Each patch file contains instructions at the top explaining how to
47 apply it. FOLLOW THESE! Don't assume they're all the same. The options
48 to use with the patch program change, and sometimes further steps are
49 required.
50
51 After you've applied all the patches and followed all the
52 instructions, you should be good to go. In most cases, you can simply
53 @shutdown/reboot after the final successful compile. If
54 @shutdown/reboot crashes, you'll have to restart again.
55
56 A.2. Building a new distribution
57
58 When you're upgrading across release and no patchlevel is provided to
59 make the upgrade (e.g. from 1.7.4p3 to 1.8.0p0), it's often easier to
60 simply build a new distribution following the INSTALL instructions,
61 but with your old configuration stuff.
62
63 Move your older version of PennMUSH in a directory called oldpenn/,
64 unpack the new one (it will unpack into pennmush/).
65
66 All of the steps below should be taken before running Configure for
67 the new version:
68
69 A.2.a. options.h and game/*.cnf
70
71 You can copy the options.h file and game/mush.cnf file from your old
72 version to the new version. The 'make update' command (run after
73 Configure) will compare your files with the newly distributed ones and
74 tell you about options that have been added or removed. If you have
75 any options defined that the new version doesn't recognize, you'll be
76 asked if you want to retain them (which is safe).
77
78 If your mush.cnf file is called something else, copy it to mush.cnf in
79 pennmush/game anyway, since that's the file that gets updated. Then
80 make a link to that file called whatever.cnf if you want to use that.
81
82 If you've modified the restart script, you'll have to decide if your
83 modified script is still appropriate, or modify a copy of the
84 distributed game/restart script as you like it. it is highly
85 recommended that you copy restart to a second file, called something
86 like restart.local, and modify and use it instead of the stock restart
87 script to reduce conflicts when patching.
88
89 You can also copy your old game/access.cnf, game/sitelock.cnf, and
90 game/txt/*.txt files into the appropriate locations. You may wish to
91 do the same thing for game/restrict.cnf, but you should compare it to
92 the new version, as restrictions that may formerly have been compiled
93 into the server may now be specified in restrict.cnf instead.
94
95 A.2.b. src/*local.c
96
97 You should copy local.c, cmdlocal.c, and funlocal.c from oldpenn/src
98 to pennmush/src if you want to retain this local code. Of course, it
99 may not still work, but it's quite likely that it will. If you don't
100 have any such code, you can skip this step.
101
102 A.2.c. Databases
103
104 This MUSH version should read databases along the main branch of MUSH
105 evolution -- TinyMUD, vanilla TinyMUSH up to 2.0, MicroMUSH, and all
106 Pern/PennMUSH versions. If you need to convert a TinyMUSH 2.0
107 database, please contact Amberyl, and she'll mail you an extension to
108 2.0 that will dump a 1.50-readable flatfile. You're probably out of
109 luck with databases for TinyMUSH 2.2 and later.
110
111 Be sure that your options.h settings correctly reflect the type of
112 password encryption that was used on your database. The default has
113 changed to SHS, so if your db used crypt(3) encryption, be sure you
114 set the appropriate definition in options.h.
115
116 *** If you are upgrading from 1.7.4 (or earlier) to 1.7.7 (or later),
117 *** you must first load your old database under PennMUSH 1.7.6 and
118 *** then dump it, and load this converted database under your
119 *** target version of PennMUSH. PennMUSH 1.7.7+ can no longer read
120 *** 1.7.4 databases.
121
122 *** If you are upgrading from 1.7.6 or certain 1.7.7 versions,
123 *** you may also first need to load your database under PennMUSH
124 *** 1.8.0p13 and then dump it, and load this converted database
125 *** under your target version of PennMUSH.
126
127 ============================================================================
128
129 B. PennMUSH with a few hacks
130
131 When you have only a few local hacks outside of the src/*local.c
132 files, you can often patch up using the patch file method discussed
133 above. Alternatively, you can build a new version and reapply your
134 changes.
135
136 One small exception is upgrading from a version that used the old flag
137 system to one that uses the new flag system (post-1.7.7p5), if you've
138 added flags or toggles.  You probably had an #define in hdrs/flags.h
139 for your flag's bit value.  This now should be moved to
140 hdrs/oldflags.h; you should leave in the table entry in
141 src/flags.c. If you set up a macro for testing your flag in
142 hdrs/mushdb.h, you'll need to change it to use the has_flag_by_name()
143 function - see the many examples in that file.
144
145 If this isn't suitable (you're crossing releases or your hacks are too
146 many for this to work cleanly), see below.
147
148 ============================================================================
149
150 C. PennMUSH with a lot of hacks
151
152 If you've seriously hacked your server source code, you're on your own
153 in terms of keeping up with new patchlevels. Some people apply
154 patchfiles and fix the rejected hunks.
155
156 A better approach is probably that described in the Guide for Gods,
157 and involves creating a set of patches from the distributed old
158 version of pennmush (e.g. 1.7.4p16) to your hacked version of pennmush
159 (e.g. 1.7.4p16 with hacks), and then applying those patches to the new
160 version of PennMUSH (e.g. 1.8.0p0) to create a hacked version
161 thereof. If some patch hunks fail, you'll have to apply them manually.
162
163 Probably the best approach is to keep all multiple versions of the
164 code (old distributed, old hacked, new distributed, new hacked) under
165 a source code control system like prcs that can merge changes between
166 versions. See the Guide for Gods.
167
168 ============================================================================
169
170 IMPORTANT NOTES FOR THOSE UPGRADING TO 1.8.0 FROM 1.7.6:
171
172 * Softcode gotchas:
173
174   * Wizards (other than God) and royalty are no longer treated as No_Pay
175     unless the No_Pay power is explicitly set on them, although they
176     can still give (themselves or others) as many pennies as they wish.
177     This helps stop runaway wizards in the queue (they'll run out of cash
178     like anyone else). To get the old behavior back, @power your admin
179     No_Pay. You probably want to @power any globals that use search(),
180     children(), mail*stats(), etc, No_Pay as well.
181   * @desc can no longer be gotten remotely without privileges.
182     @desc on privileged objects can now be evaluated by mortals.
183   * @adisconnect is triggered on every disconnection, partial or full.
184     This mirrors the behavior of @aconnect. Use %1 (the number of
185     remaining connections) to distinguish between partial and full
186     disconnects in @adisconnect code.
187   * Players can no longer be set CHOWN_OK.  If you have existing CHOWN_OK
188     players, you probably want to unset this from them, or the results
189     will be confusing (they'll continue to appear to have the flag,
190     even though it won't be testable or settable or clearable; this is
191     desired behavior).
192   * New HEAVY admin flag, prevents an object from being teleported
193     by a mortal between two containers they own. Admin without this
194     flag CAN be teleported.
195
196 * Hardcode/db/startup gotchas:
197   * After each @startup is enqueued (during startup or @restart/all),
198     we immediately run up to 5 queue cycles. This allows, e.g., God's
199     @startup to up to five levels of @dol/@tr/@switch/etc and still have
200     the queued code run ahead of other startups. This requires that you
201     keep God's dbref as #1.
202   * netmush is now started with only a single argument - the path to
203     the configuration file. The error log file (typically game/netmush.log
204     is now configured in mush.cnf.
205   * CHAT_SYSTEM option removed. If you don't want to use the chat system,
206     use restrict.cnf to disable @channel, @chat, etc.
207   * USE_MAILER and MAIL_ALIAS options removed. If you don't want to
208     use the @mail or @malias systems, use restrict.cnf to disable
209     the associated commands.
210   * QUOTA, EMPTY_ATTRS, and FUNCTION_SIDE_EFFECTS options are now
211     runtime options, instead of compile-time.
212   * SINGLE_LOGFILE option removed, and log filenames are now
213     runtime options. You may now give the same name to multiple log
214     files and get a more fine-grained version of the same effect.
215   * src/Makefile is now autobuilt from src/Makefile.SH. IF you use
216     local hacks that require src/Makefile, this is likely to be a problem
217     for you. You'll want to start patching Makefile.SH instead.
218   * The new code can no longer read databases created by versions of Penn
219     before 1.7.5p0. If you need to do this, load it in 1.7.6, shutdown,
220     and use that database.
221   * PROFILING #define for use when profiling the code (surprise). This
222     just disables the CPU timer.
223   * help-like commands without arguments now use the command name
224     as the argument. E.g. 'news' now looks for topic 'news', instead of
225     'help'. If not found, we fall back on help.
226   * Mail messages now track not only the dbref of the sender but the
227     sender's creation time, so messages from dbrefs that have been
228     nuked and recreated can be distinguished from messages from the
229     original sender. This modifies the maildb and make it not usable
230     with older versions. All existing @mail is grandfathered in, and
231     can't be tracked this way.
232
Note: See TracBrowser for help on using the browser.