To change all executables to have a mariadb name I had to:
- Do name changes in every CMakeLists.txt that produces executables
- CREATE_MARIADB_SYMLINK was removed and GET_SYMLINK added by Wlad to reuse the function in other places also
- The scripts/CMakeLists.txt could make use of GET_SYMLINK instead of introducing redundant code, but I thought I'll leave that for next release
- A lot of changes to debian/.install and debian/.links files due to swapping of real executable and symlink. I did not however change the name of the manpages, so the real name is still mysql there and mariadb are symlinks.
- The Windows part needed a change now when we made the executables mariadb -named. MSI (and ZIP) do not support symlinks and to not break backward compatibility we had to include mysql named binaries also. Done by Wlad
- It is not enough to have and DeleteSymlinks actions
because within the same installation some exes executables can be both
added and removed, which needs both adding and removing some symlinks.
Instead of CreateSymlinks, there is now FixSymlinks function, which
goes through the list, and adds or removes the symlinks as needed.
- Implemented rollback for symlink custom action.
- Generate list of symlinks in C++ file, using CMake, rather than storing
lists as MSI properties.
Changed the build to use /MD flag so that DDL version of C runtime is used.
To make sure MariaDB is always runnable on target system, include
redistributable CRT libraries into installer.
For MSI package, use Microsoft's merge modules.
For ZIP use "applocal" approach,i.e place redistributable dlls
into the bin directory of the package(via InstallRequiredSystemLibraries
cmake module) The space overhead of libraries in negligible, ~ 3MB unpacked.
There are 2 cases, where we still link C runtime statically
- Upgrade wizard, it uses MFC, and we link statically to avoid
redistribute also whole MFC (for this single application, does not
make much sense).
- MSI installer's custom action dll wixca.dll.Here, we need static link
so that MSI won't fail on a target system that does not have VC++2015
runtime already installed.
- add PAGESIZE property to the MSI installer
- add combobox to the MSI UI to select innodb page size
- add new parameter --innodb_page_size for mysql_install_db.exe.
this is passed down to bootstrap and also stored in my.ini.
MSI will call mysql_install_db.exe with --innodb_page_size set to the
PAGESIZE property
Skip permission for data directory for LogonUser, if installation
runs by one of the service accounts (determined from their well-known SID).
There is no real LogonUser in this case.
- Use lc-messages-dir instead of deprecated --language when running mysqld in bootstrap mode.
- Add some verbosity to mysql_install_db.exe when it runs in course of MSI installation.
The main reason for he error is misplaced ADD_DIRECTORY in top-level CMakeLists.txt.
ADD_DIRECTORY(win/packaging) was places before win/upgrade_wizard, and MSI was not able to detect that upgrade wizard was built, and thus excluded upgrade wizard entirely.
If upgradable instances are found, bring a new dialog to inform user about it. This gives user a
chance to deselect "database instance" feature early, because experience shows nobody really looks at features and their in their description in "customize setup" dialog. This also tells user
that existing instances can be upgraded.
Allow MSI and NSIS side-by-side installation if installed NSIS package
differs in "major.minor" version numbers. Still disallow MSI and NSIS
if major.minor versions of both packages match.
Problem: user without privileges can have an half-complete
installation, if he manages to click on "Ignore" for all errors
in the installer.
As a result, he will miss ARP registry keys, and uninstall
will not be possible using "Add/Remove Programs" applet.
The general technique to generate MSI using CMake is taken from MySQL 5.5
Additional features not present in 5.5 installer :
-optionally creating a new database
(as Windows service), using new mysql_install_db.exe to do the job
- optional upgrade of existing services from old MySQL or Maria installation.
This work is actually done by the upgrade wizard that is launched at the
end of installation.