Bug #7345

Tails 1.1~beta1 created by upgrade from ISO from a 1.0 USB does not boot

Added by mercedes508 2014-05-30 08:25:37 . Updated 2014-07-22 22:55:43 .

Status:
Resolved
Priority:
Elevated
Assignee:
Category:
Target version:
Start date:
2014-06-24
Due date:
% Done:

100%

Feature Branch:
bugfix/7345-upgrade-from-iso-from-1.0-to-1.1
Type of work:
Code
Blueprint:

Starter:
0
Affected tool:
Deliverable for:

Description

When doing “upgrade from ISO” from a Tails 1.0 USB stick onto another Tails 1.0 USB stick using a Tails-1.1-beta1.iso, the resulting upgraded USB stick doesn’t boot at all.

A manually installed USB with thhe same iso file boots fine
A cloned & installed USB from the previous manually installed one boots fine.


Subtasks

Feature #7456: Ship syslinux binary in the ISO filesystem Resolved

100

Feature #7457: Decide what upgrade from ISO path we offer to 1.0.1 users Resolved

100

Feature #7596: Document upgrade from ISO for 1.0.1 users Resolved

100


Related issues

Related to Tails - Bug #7378: Universal USB Installer creates unbootable devices Resolved 2014-06-21
Related to Tails - Bug #7410: Don't allow the desktop user to pass arguments to tails-upgrade-frontend Resolved 2014-06-13
Related to Tails - Feature #7422: Do not duplicate syslinux on the ISO root filesystem Rejected 2014-06-19

History

#1 Updated by intrigeri 2014-05-30 08:26:58

  • Assignee set to intrigeri

I’ll have a look in the next few days, but no guarantee I’ll have time to fix it.

#2 Updated by mercedes508 2014-05-30 08:30:05

When trying to boot I get this message, just after the boot scren from the computer:

ifcpu64.c32: not a COM32R image

So when saying it doesn’t boot at all, it means that I don’t see the Tails boot menu, it directly gets to tat error message.

#3 Updated by intrigeri 2014-05-31 02:24:12

  • Status changed from New to In Progress

Reproduced. It’s caused either by the syslinux 4 / syslinux 6 mixed MBR/modules mismatch, or by the workaround brought by https://bugzilla.redhat.com/show_bug.cgi?id=492370.

#4 Updated by intrigeri 2014-05-31 05:10:45

Basically all ISO-to-USB installers have had this problem in the past. In a nutshell, the version of the syslinux MBR must match the version of ldlinux.sys, and the version of the *.c32 modules. What makes things hard is that the syslinux installation command embeds into ldlinux.sys some data that depends on the underlying filesystem (block numbers), which makes it impossible to mix newer COM32R modules shipped in the ISO, with a ldlinux.sys and/or MBR installed with an older syslinux provided by the system that runs the isntaller.

Other installers “solve” this by replacing the version of syslinux shipped in the ISO with their own one. It’s probably good enough for one-shot usecases such as getting a distro installer to boot from USB, but I’m not sure it’s a viable approach for Tails in the long run.

So, the only ways out I can think of are:

  1. document the fact that “Upgrade from ISO” is not supported for the 1.0->1.1 path; thing is, we’re going to upgrade syslinux again soonish (to a newer snapshot of 6.03-preN, probably), and I don’t know if its new COM32R modules will be compatible with the MBR and ldlinux.sys installed by our current 6.03-pre1 snapshot; so, maybe “Upgrade from ISO” will be broken again;
  2. after copying the files from the ISO to the destination drive, do not run syslinux from the running system. Instead, mount the squashfs filesystem from the destination drive, chroot in there, and install the (new version of) syslinux from there;
  3. on 1.0.1->1.1 “Upgrade from ISO”, fully (MBR + *.c32 + ldlinux.sys) replace the syslinux 6 installation (from the 1.1 ISO) with a syslinux 4 installation (from the 1.0.1 ISO); this could be done in the MBR syslinux installation path only, so EFI boot is unaffected; at this point, there will be users of 1.1 who use syslinux 4, and others who use syslinux 6. The good news is that the next “Upgrade from ISO”, presumably run from 1.1, and fed with a 1.1.1 or 1.2 ISO, and meant to upgrade another 1.1 stick, will this time upgrade their installation to syslinux 6 (unfortunately, to the 1.1’s version, with the same problem described for solution 1 above).

The 2nd solution might be a bit complicated in practice, but it’s probably worth giving it a try: if it works, it could be generalized into a mechanism to run post-upgrade scripts shipped in the ISO at upgrade time, in an environment close to the new version’s, before rebooting. This can possibly be useful in the future, to solve other problems that cannot be retroactively fixed in an already released Tails that will be used to upgrade from ISO.

The 2nd solution is also the only one that guarantees that we don’t create different sticks with “Upgrade from ISO” (that try to start Tails vN with the syslinux shipped by Tails vN-1), to those created with “Clone and upgrade” (that have the new syslinux).

#5 Updated by mercedes508 2014-06-04 09:28:18

A user had the same error (ifcpu64.c32: not a COM32R image) when Tails 1.1 was installed using the Universal USB Installer.

#6 Updated by intrigeri 2014-06-07 15:20:55

  • related to Bug #7378: Universal USB Installer creates unbootable devices added

#7 Updated by intrigeri 2014-06-09 11:45:25

  • Subject changed from Tails 1.1-beta1 created by upgrade from ISO from a 1.0 USB does not boot to Tails 1.1~beta1 created by upgrade from ISO from a 1.0 USB does not boot

It’s likely that devices that go through a 1.0->1.1 automated upgrade would have exactly the same issue, BTW… but the good news is that we won’t propose such an incremental upgrade.

#8 Updated by anonym 2014-06-12 19:00:25

Any update on this?

#9 Updated by intrigeri 2014-06-13 03:36:42

> Any update on this?

That would be my top-priority for today, after reviewing your stuff.
FTR, I’ve started a discussion about it on the syslinux list two days ago.

#10 Updated by intrigeri 2014-06-13 12:22:38

  • % Done changed from 0 to 10
  • Feature Branch set to bugfix/7345-upgrade-from-iso-from-1.0-to-1.1

Found a quite elegant and feature-proof solution. Testing it.

#11 Updated by intrigeri 2014-06-16 09:31:56

  • % Done changed from 10 to 20
  • Type of work changed from Research to Code

#12 Updated by intrigeri 2014-06-20 09:16:15

  • related to Bug #7410: Don't allow the desktop user to pass arguments to tails-upgrade-frontend added

#13 Updated by intrigeri 2014-06-21 20:12:12

  • related to Feature #7422: Do not duplicate syslinux on the ISO root filesystem added

#14 Updated by intrigeri 2014-06-21 23:31:37

  • Category deleted (Installation)
  • % Done changed from 20 to 30

Dropping category, as the fix actually touches 4 different Git repos: iuk, perl5lib, installer and the main Git repo.

#15 Updated by intrigeri 2014-06-22 00:10:58

Left to do: a few tests, documented in https://mailman.boum.org/pipermail/tails-dev/2014-June/006177.html.

#16 Updated by intrigeri 2014-06-24 10:53:22

  • % Done changed from 30 to 50

Merged, hence fixed such issues for future upgrade paths. Next thing to do: decide how to handle 1.0.1—>1.1 upgrade from ISO. See discussion on tails-dev@.

#17 Updated by intrigeri 2014-07-17 18:35:35

  • Status changed from In Progress to Fix committed
  • Assignee deleted (intrigeri)

#18 Updated by BitingBird 2014-07-22 22:55:43

  • Status changed from Fix committed to Resolved