acctfuncs.inc.php: Document all functions using PHPDoc format
[aur.git] / UPGRADING
blobf1d43f1a717a5af2de52f2d53c8efee5b4fe8a6d
1 Upgrading
2 =========
4 From 1.9.1 to 2.0.0
5 -------------------
7 1. Add new "Users" table login date and PGP key columns:
9 ----
10 ALTER TABLE Users ADD COLUMN LastLogin BIGINT NOT NULL DEFAULT 0;
11 ALTER TABLE Users ADD COLUMN PGPKey VARCHAR(40) NULL DEFAULT NULL;
12 ----
14 2. Merge "web/lib/config.inc.php.proto" with "web/lib/config.inc.php".
16 3. Update Archive_Tar to version greater than 1.3.7.
18 4. Enable the PDO MySQL extension (pdo_mysql.so) in "php.ini".
20 From 1.9.0 to 1.9.1
21 -------------------
23 1. Merge "web/lib/config.inc.php.proto" with "web/lib/config.inc.php".
25 2. Install translations by running `make install` in "po/".
27 From 1.8.2 to 1.9.0
28 -------------------
30 1. Translation files are now gettext compatible and need to be compiled after
31 each AUR upgrade by running `make install` in the "po/" directory.
33 2. Remove the "NewPkgNotify" column from the "Users" table:
35 ALTER TABLE Users DROP COLUMN NewPkgNotify;
37 3. Fix up issues with depends performance on large dataset.
39 ALTER TABLE PackageDepends ADD INDEX (DepName);
41 4. Rename "web/lib/config.inc" to "web/lib/config.inc.php".
43 5. Merge "web/lib/config.inc.php.proto" with "web/lib/config.inc.php".
45 6. Run the upload directory transform script ("scripts/uploadbuckets.sh") and
46 rotate the converted directory structure into place.
48 7. In order to to provide backward compatible package URLs, enable mod_rewrite
49 and add the following to your Apache configuration (inside the "VirtualHost"
50 container or optionally create a ".htaccess" file in the upload directory):
52 ----
53 RewriteEngine on
54 RewriteRule ^/packages/([^/]{1,2})([^/]*/(PKGBUILD|[^/]*\.tar\.gz|))$ /packages/$1/$1$2
55 ----
57 The following equivalent rule can be used for lighttpd setups:
59 ----
60 url.rewrite-once = ( "^/packages/([^/]{1,2})([^/]*/(PKGBUILD|[^/]*\.tar\.gz|))$" => "/packages/$1/$1$2" )
61 ----
63 If you use a non-standard URL_DIR, slight modifications might be necessary.
65 8. Merge "scripts/aurblup/config.h.proto" with "scripts/aurblup/config.h".
67 From 1.8.1 to 1.8.2
68 -------------------
70 1. Update the modified package timestamp for new packages.
72 UPDATE Packages SET ModifiedTS = SubmittedTS WHERE ModifiedTS = 0;
74 2. Move to new method of storing package depends.
76 ----
77 ALTER TABLE PackageDepends ADD COLUMN DepName VARCHAR(64) NOT NULL DEFAULT '' AFTER PackageID;
78 UPDATE PackageDepends SET DepName = (SELECT Name FROM Packages WHERE ID = DepPkgID);
79 ALTER TABLE PackageDepends MODIFY DepName VARCHAR(64) NOT NULL;
80 ALTER TABLE PackageDepends DROP FOREIGN KEY `PackageDepends_ibfk_2`;
81 ALTER TABLE PackageDepends DROP COLUMN DepPkgID;
82 DELETE FROM Packages WHERE DummyPkg = 1;
83 ALTER TABLE Packages DROP COLUMN DummyPkg;
84 ----
86 3. The File_Find PEAR module is no longer required. You can safely uninstall it
87 if nothing else depends on it.
89 From 1.8.0 to 1.8.1
90 -------------------
92 1. Drop foreign keys from the "Sessions" table:
94 `ALTER TABLE Sessions DROP FOREIGN KEY Sessions_ibfk_1;` should work in most
95 cases. Otherwise, check the output of `SHOW CREATE TABLE Sessions;` and use the
96 foreign key name shown there.
98 2. Run the following MySQL statements:
100 ----
101 ALTER TABLE Sessions
102         ADD FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE CASCADE;
103 ALTER TABLE PackageDepends
104         ADD FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE,
105         ADD FOREIGN KEY (DepPkgID) REFERENCES Packages(ID) ON DELETE CASCADE;
106 ALTER TABLE PackageSources
107         ADD FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE;
108 ALTER TABLE TU_VoteInfo
109         ADD FOREIGN KEY (SubmitterID) REFERENCES Users(ID) ON DELETE CASCADE;
110 ALTER TABLE TU_Votes
111         ADD FOREIGN KEY (VoteID) REFERENCES TU_VoteInfo(ID) ON DELETE CASCADE,
112         ADD FOREIGN KEY (UserID) REFERENCES Users(ID) ON DELETE CASCADE;
113 ALTER TABLE PackageComments
114         MODIFY DelUsersID INTEGER UNSIGNED NULL DEFAULT NULL;
115 UPDATE PackageComments SET DelUsersID = NULL WHERE DelUsersID = 0;
116 ALTER TABLE Packages
117         MODIFY SubmitterUID INTEGER UNSIGNED NULL DEFAULT NULL,
118         MODIFY MaintainerUID INTEGER UNSIGNED NULL DEFAULT NULL;
119 UPDATE Packages SET SubmitterUID = NULL WHERE SubmitterUID = 0;
120 UPDATE Packages SET MaintainerUID = NULL WHERE MaintainerUID = 0;
121 ----
123 3. (optional) If you converted your database from MyISAM to InnoDB during the
124 upgrade process from 1.7.0 to 1.8.0 or from 1.8.0 to 1.8.1 without completely
125 rebuilding the database from the MySQL schema, you should additionally run the
126 following MySQL statements to add missing foreign keys:
128 ----
129 ALTER TABLE Users
130         ADD FOREIGN KEY (AccountTypeID) REFERENCES AccountTypes(ID) ON DELETE NO ACTION;
131 ALTER TABLE Packages
132         ADD FOREIGN KEY (CategoryID) REFERENCES PackageCategories(ID) ON DELETE NO ACTION,
133         ADD FOREIGN KEY (SubmitterUID) REFERENCES Users(ID) ON DELETE NO ACTION,
134         ADD FOREIGN KEY (MaintainerUID) REFERENCES Users(ID) ON DELETE NO ACTION;
135 ALTER TABLE PackageVotes
136         ADD FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE CASCADE,
137         ADD FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE;
138 ALTER TABLE PackageComments
139         ADD FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE CASCADE,
140         ADD FOREIGN KEY (DelUsersID) REFERENCES Users(ID) ON DELETE CASCADE,
141         ADD FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE;
142 ALTER TABLE CommentNotify
143         ADD FOREIGN KEY (PkgID) REFERENCES Packages(ID) ON DELETE CASCADE,
144         ADD FOREIGN KEY (UserID) REFERENCES Users(ID) ON DELETE CASCADE;
145 ----
147 4. Merge "web/lib/config.inc.proto" with "web/lib/config.inc".
149 From 1.7.0 to 1.8.0
150 -------------------
152 1. Run the following MySQL statements:
154 ----
155 ALTER TABLE Packages ADD OutOfDateTS BIGINT UNSIGNED NULL DEFAULT NULL;
156 UPDATE Packages SET OutOfDateTS = UNIX_TIMESTAMP() WHERE OutOfDate = 1;
157 ALTER TABLE Packages DROP OutOfDate, DROP FSPath, DROP URLPath, DROP LocationID;
158 DROP TABLE PackageLocations, PackageContents;
159 ALTER TABLE AccountTypes MODIFY AccountType VARCHAR(32) NOT NULL DEFAULT '';
160 ALTER TABLE Users MODIFY Username VARCHAR(32) NOT NULL,
161         MODIFY Email VARCHAR(64) NOT NULL,
162         MODIFY RealName VARCHAR(64) NOT NULL DEFAULT '',
163         MODIFY LangPreference VARCHAR(5) NOT NULL DEFAULT 'en',
164         MODIFY IRCNick VARCHAR(32) NOT NULL DEFAULT '';
165 ALTER TABLE PackageCategories MODIFY Category VARCHAR(32) NOT NULL;
166 ALTER TABLE Packages MODIFY Name VARCHAR(64) NOT NULL,
167         MODIFY Version VARCHAR(32) NOT NULL DEFAULT '',
168         MODIFY Description VARCHAR(255) NOT NULL DEFAULT "An Arch Package",
169         MODIFY URL VARCHAR(255) NOT NULL DEFAULT "http://www.archlinux.org",
170         MODIFY License VARCHAR(40) NOT NULL DEFAULT '';
171 ALTER TABLE PackageSources
172         MODIFY Source VARCHAR(255) NOT NULL DEFAULT "/dev/null";
173 ALTER TABLE TU_VoteInfo
174         MODIFY User VARCHAR(32) collate latin1_general_ci NOT NULL;
175 CREATE TABLE PackageBlacklist (
176         ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
177         Name VARCHAR(64) NOT NULL,
178         PRIMARY KEY (ID),
179         UNIQUE (Name)
181 ----
183 2. Drop all fulltext indexes from the "Packages" table:
185 Please do this with care. `ALTER TABLE Packages DROP INDEX Name;` will work in
186 most cases but might remove the wrong index if your indexes have been created
187 in a non-standard order (e.g. during some update process). You'd better run
188 `SHOW INDEX FROM Packages;` before to ensure that your setup doesn't use a
189 different naming.
191 3. You will need to update all packages which are stored in the incoming dir as
192 in 1.8.0, source tarballs are no longer extracted automatically and PKGBUILDs
193 are from now on located in the same subdirectories as the tarballs themselves.
194 The following script will do the conversion automatically when being run inside
195 "$INCOMING_DIR":
197 ----
198 #!/bin/bash
200 for pkg in *; do
201         if [ -d "${pkg}" -a ! -f "${pkg}/PKGBUILD" ]; then
202                 pkgbuild_file=$(find -P "${pkg}" -name PKGBUILD)
203                 [ -n "${pkgbuild_file}" ] && \
204                         cp "${pkgbuild_file}" "${pkg}/PKGBUILD"
205         fi
206 done
207 ----
209 4. (optional): 1.8.0 includes a helper utility called "aurblup" that can be
210 used to prevent users from uploading source packages with names identical to
211 packages in predefined binary repos, e.g. the official repositories of your
212 distribution. In order to build and install aurblup, enter the following
213 commands:
215         cd scripts/aurblup/
216         make config.h
217         $EDITOR config.h
218         make install  # as root
220 Add something like "0 * * * * /usr/local/bin/aurblup" to root's crontab to make
221 aurblup update the package blacklist every hour.
223 NOTE: You can run aurblup as non-privileged user as well. Make sure that the
224 user has read-write access to "/var/lib/aurblup/" (or whatever you defined with
225 "ALPM_DBPATH") tho.
227 5. (optional): As of 1.8.0, all MySQL tables should be InnoDB compatible. To
228 convert a table, you can use this statement: `ALTER TABLE $foo ENGINE=InnoDB;`.
229 If you want to stick with MyISAM or another storage engine that doesn't support
230 transactions, you will need to disable the "MYSQL_USE_TRANSACTIONS" setting in
231 "config.h" when setting up aurblup.
233 From 1.6.0 to 1.7.0
234 -------------------
235 ALTER TABLE Users ADD Salt CHAR(32) NOT NULL DEFAULT '';
236 ALTER TABLE Users ADD ResetKey CHAR(32) NOT NULL DEFAULT '';
237 ALTER TABLE Users MODIFY LangPreference CHAR(5) NOT NULL DEFAULT 'en';
240 From 1.5.2 to 1.5.3
241 -------------------
242 1. Ensure this appears in config.inc:
243    define("DEFAULT_LANG", "en");
246 From 1.5.1 to 1.5.2
247 -------------------
248 1. Ensure Pear and File/Find.php are in the path. See web/README.txt.
250 2. Update your running copy of support/scripts/newpackage-notify.
252 3. Run this in web/lib:
253 <?php
255 # Run the script from within lib
256 include('config.inc');
257 include('aur.inc');
259 $query = "UPDATE Packages SET " .
260          "FSPath = CONCAT('" . INCOMING_DIR . "', Name, '/', Name,
261 '.tar.gz'), " .
262          "URLPath = CONCAT('" . URL_DIR . "', Name, '/', Name, '.tar.gz') " .
263          "WHERE DummyPKG = 0 AND LocationID = 2;";
265 $dbh = db_connect();
266 db_query($query, $dbh);
268 $query = "ALTER TABLE Packages DROP COLUMN AURMaintainerUID;";
269 db_query($query, $dbh);
272 1.3.0
273 -----
274 ALTER TABLE PackageDepends ADD COLUMN DepCondition VARCHAR(20) AFTER DepPkgID;
275 ALTER TABLE Packages ADD License CHAR(40) NOT NULL DEFAULT '';
278 1.2.10
279 ------
280 ALTER TABLE Packages MODIFY Description CHAR(255) NOT NULL DEFAULT "An Arch Package";
283 longerpkgname
284 -------------
285 ALTER TABLE Packages MODIFY Name CHAR(64) NOT NULL;