Implementation of ship-live within a squashfs

Preface

Several weeks ago, I took the time to begin iterating on a solution which would move the generation of the ship-live apt pool from debian-cd into livecd-rootfs. This would simplify the functionality of debian-cd, moving more to Launchpad builders.

I have been told this is a good idea (and I agree after looking into it,) but I lack the proper documentation or rationale to back that up. If anyone more intimately familiar with the logistics could comment and add those specific details, it would be much appreciated.

For end-users, this should mostly be a no-op. It will slightly affect the size of the final ISO artifacts, but this should be negligible, from what I can tell. For installers, it should be as minor as a configuration change (or worst case scenario, updating a hard-coded value and wrapping it in a conditional statement.)

Laying the foundation

I first began by performing a general packaging cleanup. Using well-tested, self-contained commits, I pushed a few commits which ended up in 25.04.18, including:

  • Moving to the new endpoint URL for defining $EXTRA_PPAS
  • debhelper compat 13
  • Updated Standards-Version
  • Lintian cleanliness
  • Add support for multiple pools (/var/lib/{livefs,preinstalled}-pool/) - essentially a no-op

I was surprised to see 25.04.18 uploaded, but I also factored that in as a possibility, and that was quite alright.

Following this, using the Launchpad API, I use a process which I have since documented in an SRU verification to fully build and test the squashfs.

Technical Details

I have proposed a merge proposal here. It will still take some time to get this to properly build, but since I have put this on the backburner in favor of Plucky release work, I figured it was about time to publicize my work in progress, to open it up for general comment.

Anyone with access and deep familiarity may merge my commit and iterate on it, or comment on the merge proposal, whatever seems like the best path forward here. I’m happy to accept any suggestions on how to make it better, or someone to help drive it to the finish line, if they’re motivated.

Specific notes on the code:

  • Adds an architecture argument to expand-task, for use in finding seed items limited to specific architectures.
  • Adds a add_task_pool Bash function which is basically a duplication of code from elsewhere. It centralizes much of the functionality of adding a pool like ship-live to a specific location.
  • The expand-task iterations have taken quite a few tries to get right. This being said, it’s still not fully there.

Here are my most recent livefs build logs. Note, if you’re reading this more than a month from now, the link is most likely either obsolete or inaccurate (I’ve moved onto a different project.) Please keep that in mind.

Next Steps

As a recap:

  • My code is far from perfect, and still causes an FTBFS.
  • It seems to read fairly well from my perspective, but is missing a few bits.
  • It needs to be tested once it’s done.
  • It needs a +2, I’m not pushing this one on my own.

Let me know what you think!

2 Likes

Hi, thanks so much for working on this, I’ve been having thoughts in the same direction.

Here are some thoughts in no particular order:

  • once this, or something like this, is done, there is no reason we can’t go ahead and just make the ISO in the livefs build which I think would make everyone’s life a lot simpler
  • there is some work remaining on how this will work for an installer, specifically:
    • the code that makes the pool is currently only in a “no layer” path, so isn’t even executed for an installer build yet
    • I think it probably makes sense to keep the pool outside of any squashfs – we don’t, in general, want the pool to be copied to the target system, and server ISOs (past .2 for LTS releases, at least) have two live layers and we don’t want to duplicate the pool between them
      • having /etc/apt/sources.list.d/livefs-pool.sources already there in the base layer referencing the pool at file:/cdrom/ would be handy though
    • as a stop gap until we make the ISO in the livefs build, we could just have a tarball containing the pool be one of the artifacts and have debian-cd untar it into the right place
  • we should probably modernize the gpg settings used to generate the key the pool is signed with!
  • there are some hacks in debian-cd around making sure that some :i386 packages end up in the amd64 desktop ISO pool see e.g. ubuntu-pool-amd64.packages « plucky « data - ~ubuntu-cdimage/debian-cd/+git/ubuntu - [no description] – we’ll need to replicate this somehow (I wish I understood the details of what is going on here better)
2 Likes