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