root/1.8.2/trunk/UPGRADING

Revision 1171, 10.7 KB (checked in by shawnw, 12 months ago)

Prep for 1.8.2p8

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