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