nonfree-firmware: when creating on-disc firmware links, use the same link creation logic as archive-area links
This changeset switches the creation of firmware file links from
using the Perl symlink
function (that creates symbolic links) to
the more configurable debian-cd
good_link
function that will
create links based on the demands of the environment it is
configured in.
Context:
Debian bug #1031696 describes an issue where firmware files on
alpha-release debian-cd
ISO images cannot easily be copied to
create another installation medium by users of some operating
systems.
Research:
When creating links to firmware files on the installation media in
the /firmware
directory, we want to retain the same content
de-duplication and corresponding space-saving efficiencies as
symlinks currently provide.
We'd also like the entire content of the ISO 9660 filesystem to be copyable to as many filesystems as possible, by as many operating systems as possible.
Write-side considerations:
Filesystem links are not supported everywhere, and where unavailable a reliable substitute for them is to create independent copies of the link target file for each link that is encountered in the input.
The ISO9660 specifications, ECMA-119[1], section 6.5.1, allows[2] a
single file content block ("File Section") to be referenced from
multiple filenames ("records"). The ISO9660 generation tools
genisoimage
and xorriso
can use this to de-duplicate multiple hard
linked files from their input, saving space in the output filesystem
image.
Read-side considerations:
Operating systems that read shared content blocks usually present the files to the user as if no links exist. In the context of Debian bug #1031696, that's exactly what we want: copying of the files from the ISO filesystem produces independent data files without any filesystem-level links.
[1] - https://www.ecma-international.org/publications-and-standards/standards/ecma-119/
[2] - https://archive.org/details/ecma-119-1998/page/n13/mode/1up
Edit: description has been edited to include feedback received on the bug thread