Upgrading ========= From 1.9.1 to 2.0.0 ------------------- 1. Add new "Users" table login date column: ALTER TABLE Users ADD COLUMN LastLogin BIGINT NOT NULL DEFAULT 0; From 1.9.0 to 1.9.1 ------------------- 1. Merge "web/lib/config.inc.php.proto" with "web/lib/config.inc.php". 2. Install translations by running `make install` in "po/". From 1.8.2 to 1.9.0 ------------------- 1. Translation files are now gettext compatible and need to be compiled after each AUR upgrade by running `make install` in the "po/" directory. 2. Remove the "NewPkgNotify" column from the "Users" table: ALTER TABLE Users DROP COLUMN NewPkgNotify; 3. Fix up issues with depends performance on large dataset. ALTER TABLE PackageDepends ADD INDEX (DepName); 4. Rename "web/lib/config.inc" to "web/lib/config.inc.php". 5. Merge "web/lib/config.inc.php.proto" with "web/lib/config.inc.php". 6. Run the upload directory transform script ("scripts/uploadbuckets.sh") and rotate the converted directory structure into place. 7. In order to to provide backward compatible package URLs, enable mod_rewrite and add the following to your Apache configuration (inside the "VirtualHost" container or optionally create a ".htaccess" file in the upload directory): ---- RewriteEngine on RewriteRule ^/packages/([^/]{1,2})([^/]*/(PKGBUILD|[^/]*\.tar\.gz|))$ /packages/$1/$1$2 ---- The following equivalent rule can be used for lighttpd setups: ---- url.rewrite-once = ( "^/packages/([^/]{1,2})([^/]*/(PKGBUILD|[^/]*\.tar\.gz|))$" => "/packages/$1/$1$2" ) ---- If you use a non-standard URL_DIR, slight modifications might be necessary. 8. Merge "scripts/aurblup/config.h.proto" with "scripts/aurblup/config.h". From 1.8.1 to 1.8.2 ------------------- 1. Update the modified package timestamp for new packages. UPDATE Packages SET ModifiedTS = SubmittedTS WHERE ModifiedTS = 0; 2. Move to new method of storing package depends. ---- ALTER TABLE PackageDepends ADD COLUMN DepName VARCHAR(64) NOT NULL DEFAULT '' AFTER PackageID; UPDATE PackageDepends SET DepName = (SELECT Name FROM Packages WHERE ID = DepPkgID); ALTER TABLE PackageDepends MODIFY DepName VARCHAR(64) NOT NULL; ALTER TABLE PackageDepends DROP FOREIGN KEY `PackageDepends_ibfk_2`; ALTER TABLE PackageDepends DROP COLUMN DepPkgID; DELETE FROM Packages WHERE DummyPkg = 1; ALTER TABLE Packages DROP COLUMN DummyPkg; ---- 3. The File_Find PEAR module is no longer required. You can safely uninstall it if nothing else depends on it. From 1.8.0 to 1.8.1 ------------------- 1. Drop foreign keys from the "Sessions" table: `ALTER TABLE Sessions DROP FOREIGN KEY Sessions_ibfk_1;` should work in most cases. Otherwise, check the output of `SHOW CREATE TABLE Sessions;` and use the foreign key name shown there. 2. Run the following MySQL statements: ---- ALTER TABLE Sessions ADD FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE CASCADE; ALTER TABLE PackageDepends ADD FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE, ADD FOREIGN KEY (DepPkgID) REFERENCES Packages(ID) ON DELETE CASCADE; ALTER TABLE PackageSources ADD FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE; ALTER TABLE TU_VoteInfo ADD FOREIGN KEY (SubmitterID) REFERENCES Users(ID) ON DELETE CASCADE; ALTER TABLE TU_Votes ADD FOREIGN KEY (VoteID) REFERENCES TU_VoteInfo(ID) ON DELETE CASCADE, ADD FOREIGN KEY (UserID) REFERENCES Users(ID) ON DELETE CASCADE; ALTER TABLE PackageComments MODIFY DelUsersID INTEGER UNSIGNED NULL DEFAULT NULL; UPDATE PackageComments SET DelUsersID = NULL WHERE DelUsersID = 0; ALTER TABLE Packages MODIFY SubmitterUID INTEGER UNSIGNED NULL DEFAULT NULL, MODIFY MaintainerUID INTEGER UNSIGNED NULL DEFAULT NULL; UPDATE Packages SET SubmitterUID = NULL WHERE SubmitterUID = 0; UPDATE Packages SET MaintainerUID = NULL WHERE MaintainerUID = 0; ---- 3. (optional) If you converted your database from MyISAM to InnoDB during the upgrade process from 1.7.0 to 1.8.0 or from 1.8.0 to 1.8.1 without completely rebuilding the database from the MySQL schema, you should additionally run the following MySQL statements to add missing foreign keys: ---- ALTER TABLE Users ADD FOREIGN KEY (AccountTypeID) REFERENCES AccountTypes(ID) ON DELETE NO ACTION; ALTER TABLE Packages ADD FOREIGN KEY (CategoryID) REFERENCES PackageCategories(ID) ON DELETE NO ACTION, ADD FOREIGN KEY (SubmitterUID) REFERENCES Users(ID) ON DELETE NO ACTION, ADD FOREIGN KEY (MaintainerUID) REFERENCES Users(ID) ON DELETE NO ACTION; ALTER TABLE PackageVotes ADD FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE CASCADE, ADD FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE; ALTER TABLE PackageComments ADD FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE CASCADE, ADD FOREIGN KEY (DelUsersID) REFERENCES Users(ID) ON DELETE CASCADE, ADD FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE; ALTER TABLE CommentNotify ADD FOREIGN KEY (PkgID) REFERENCES Packages(ID) ON DELETE CASCADE, ADD FOREIGN KEY (UserID) REFERENCES Users(ID) ON DELETE CASCADE; ---- 4. Merge "web/lib/config.inc.proto" with "web/lib/config.inc". From 1.7.0 to 1.8.0 ------------------- 1. Run the following MySQL statements: ---- ALTER TABLE Packages ADD OutOfDateTS BIGINT UNSIGNED NULL DEFAULT NULL; UPDATE Packages SET OutOfDateTS = UNIX_TIMESTAMP() WHERE OutOfDate = 1; ALTER TABLE Packages DROP OutOfDate, DROP FSPath, DROP URLPath, DROP LocationID; DROP TABLE PackageLocations, PackageContents; ALTER TABLE AccountTypes MODIFY AccountType VARCHAR(32) NOT NULL DEFAULT ''; ALTER TABLE Users MODIFY Username VARCHAR(32) NOT NULL, MODIFY Email VARCHAR(64) NOT NULL, MODIFY RealName VARCHAR(64) NOT NULL DEFAULT '', MODIFY LangPreference VARCHAR(5) NOT NULL DEFAULT 'en', MODIFY IRCNick VARCHAR(32) NOT NULL DEFAULT ''; ALTER TABLE PackageCategories MODIFY Category VARCHAR(32) NOT NULL; ALTER TABLE Packages MODIFY Name VARCHAR(64) NOT NULL, MODIFY Version VARCHAR(32) NOT NULL DEFAULT '', MODIFY Description VARCHAR(255) NOT NULL DEFAULT "An Arch Package", MODIFY URL VARCHAR(255) NOT NULL DEFAULT "http://www.archlinux.org", MODIFY License VARCHAR(40) NOT NULL DEFAULT ''; ALTER TABLE PackageSources MODIFY Source VARCHAR(255) NOT NULL DEFAULT "/dev/null"; ALTER TABLE TU_VoteInfo MODIFY User VARCHAR(32) collate latin1_general_ci NOT NULL; CREATE TABLE PackageBlacklist ( ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Name VARCHAR(64) NOT NULL, PRIMARY KEY (ID), UNIQUE (Name) ); ---- 2. Drop all fulltext indexes from the "Packages" table: Please do this with care. `ALTER TABLE Packages DROP INDEX Name;` will work in most cases but might remove the wrong index if your indexes have been created in a non-standard order (e.g. during some update process). You'd better run `SHOW INDEX FROM Packages;` before to ensure that your setup doesn't use a different naming. 3. You will need to update all packages which are stored in the incoming dir as in 1.8.0, source tarballs are no longer extracted automatically and PKGBUILDs are from now on located in the same subdirectories as the tarballs themselves. The following script will do the conversion automatically when being run inside "$INCOMING_DIR": ---- #!/bin/bash for pkg in *; do if [ -d "${pkg}" -a ! -f "${pkg}/PKGBUILD" ]; then pkgbuild_file=$(find -P "${pkg}" -name PKGBUILD) [ -n "${pkgbuild_file}" ] && \ cp "${pkgbuild_file}" "${pkg}/PKGBUILD" fi done ---- 4. (optional): 1.8.0 includes a helper utility called "aurblup" that can be used to prevent users from uploading source packages with names identical to packages in predefined binary repos, e.g. the official repositories of your distribution. In order to build and install aurblup, enter the following commands: cd scripts/aurblup/ make config.h $EDITOR config.h make install # as root Add something like "0 * * * * /usr/local/bin/aurblup" to root's crontab to make aurblup update the package blacklist every hour. NOTE: You can run aurblup as non-privileged user as well. Make sure that the user has read-write access to "/var/lib/aurblup/" (or whatever you defined with "ALPM_DBPATH") tho. 5. (optional): As of 1.8.0, all MySQL tables should be InnoDB compatible. To convert a table, you can use this statement: `ALTER TABLE $foo ENGINE=InnoDB;`. If you want to stick with MyISAM or another storage engine that doesn't support transactions, you will need to disable the "MYSQL_USE_TRANSACTIONS" setting in "config.h" when setting up aurblup. From 1.6.0 to 1.7.0 ------------------- ALTER TABLE Users ADD Salt CHAR(32) NOT NULL DEFAULT ''; ALTER TABLE Users ADD ResetKey CHAR(32) NOT NULL DEFAULT ''; ALTER TABLE Users MODIFY LangPreference CHAR(5) NOT NULL DEFAULT 'en'; From 1.5.2 to 1.5.3 ------------------- 1. Ensure this appears in config.inc: define("DEFAULT_LANG", "en"); From 1.5.1 to 1.5.2 ------------------- 1. Ensure Pear and File/Find.php are in the path. See web/README.txt. 2. Update your running copy of support/scripts/newpackage-notify. 3. Run this in web/lib: