| 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 |
|
|---|