Lifecycle#canRewriteHudsonWar assumes in-place replacement of the war, while UpdateCenter#download actually writes to a temporary file first to prevent breaking the file if an error occurs. This can lead to the following exception:
hudson.util.IOException2: Failed to download from http: at hudson.model.UpdateCenter$UpdateCenterConfiguration.download(UpdateCenter.java:791)
at hudson.model.UpdateCenter$DownloadJob._run(UpdateCenter.java:1138)
at hudson.model.UpdateCenter$DownloadJob.run(UpdateCenter.java:1116)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at hudson.remoting.AtmostOneThreadExecutor$Worker.run(AtmostOneThreadExecutor.java:104)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.io.FileNotFoundException: /usr/lib/jenkins/jenkins.war.tmp (Permission denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
at java.io.FileOutputStream.<init>(FileOutputStream.java:171)
at hudson.model.UpdateCenter$UpdateCenterConfiguration.download(UpdateCenter.java:762)
... 6 more