I announced my work on automatically updating builds and the support for Linux daily builds a while ago. The plan has always been to get this feature ready for Windows release builds in time for the 6.0 release. We are by now about halfway through the feature development cycle for the release and I’m finally able to announce the accomplishment of the next milestone: automatically updating daily Windows builds.

You can fetch the daily builds from the @38-updater build directory. The builds are currently produced on my TDF-owned Windows 7 build bot and will normally be updated during the European night. Currently the builds are en-US only but I plan to add additional languages and a few more disabled features over time.

Note that the archives contain one extra level of directories compared to Linux archives with long directory names which can cause problems with the Windows path length limit. If your build does not start, move the installation up in the directory hierarchy and shorten the directory names.

Limitations

After many comments related to my last blog post about the automatic updater were by people not reading the limitations and plans (or missing plans) of our Linux updater builds (we don’t plan to provide updater enabled release builds on Linux!!) I’m going to list them first this time.

The support that has been finished by now is limited to daily builds that are “installed” in user writeable locations. This is not yet a complete updater for our release builds and is mainly for the QA team and power users that want to test the current daily master builds.

We can not yet update builds installed through MSI and can not handle the user account control which will be necessary for correctly installed LibreOffice. However, similar to the automatically updating Linux builds, this is one step on the way to automatically updating Windows release builds.

Implementation

Many parts of the original blog post about the updater are also true for the Windows updater code. The biggest change is the switch from a two step update, first downloading and creating an updated copy and later replacing the installation with the updated copy, to a one step update, first downloading and later applying the update in place. This change was necessary as Windows prevents modifying files that are already open. Additionally, this makes it significantly easier to implement a secure updater for MSI/MSP installations.

One small additional feature managed to creep into the code while I was waiting for builds to finish. I managed to enable the updater executable GUI so that we can now show a dialog with a progress bar while the update is running. The GUI is already working on Windows and I’m close to finishing the work on the Linux version.

Apart from these two larger changes, I was mostly fixing the Windows integration. This includes handling windows paths, integrating the updater with the windows crypto system, and making sure that my tooling handles the special cases of our Windows updates. For anyone interested in the details I try to tag all commits with the updater prefix.

Future

As I mentioned in the beginning the overall goal is still an automatic updater for our 6.0 release builds. On the way to this goal I still have two big milestones:

Generation of MSP updates and infrastructure to apply them through our MAR file based updater. The Mozilla developers were once working on integrating MSI support into their updater code as part of moz#231062 but abandoned that work. Integration of the updater service to allow installing in the normal Program Files directory and integration with the UAC. Most of the code is already there and already built as part of the updater builds but the integration into our (horrible Perl mess of) packaging and installer code is still missing.

If I manage to finish these two milestones by mid of November in time for the feature freeze and the release engineering team and ESC are satisfied we will have automatically updating builds in time for the LibreOffice 6.0 release. By using the current updater builds and reporting any problems to me, you can help making sure that this will become reality.

As always additional help is welcome. Just ping me (moggi) on IRC (#libreoffice-dev channel on Freenode) and talk to me how you can help. We also always have tasks that don’t require any C++ skills and I’m currently looking especially for interested developers with python and django skills (The whole server side of the automatic updater as well as a large part of the crash reporter is written in python with django). If you know another programming language and want to help with LibreOffice please contact us on IRC or on our developer mailing list (libreoffice@lists.freedesktop.org).