forked from Mirror/pmbootstrap
pmb: qemu-user-static from aport, not from Debian
Overview: In order to execute foreign arch binaries on the host system, we are using the Linux kernel's binfmt_misc feature in combination with static builds of QEMU. Before this patch, the statically compiled QEMU binaries were taken from Debian (mostly because I did not realize that Alpine ships them as well). Now we can use the ones from the aport. Benefits: This allows us to easily update and patch the QEMU executables, we don't need to be in sync with Debian's versions anymore. Alpine's package is more modular, so we can save some download, install, zap time, as well as disk space: setting up an armhf chroot with pmbootstrap took ~102 MB before, now it's ~18 MB. Detailed changes: * Remove `cross/qemu-user-static-repack` aport * Add `data/qemu-user-binfmt.txt` with the binfmt_misc flags for ELF binaries of various arches (extracted from Debian's packaging) * When parsing that file, don't write verbose messages to `pmbootstrap log` anymore, only to the verbose log (can be enabled with `pmbootstrap -v`) * Rename `pmb.parse.arch.alpine_to_debian()` to ...`alpine_to_qemu()` * Rename `arch_debian` to `arch_qemu`
This commit is contained in:
parent
8643198a04
commit
68e1feef17
6 changed files with 88 additions and 92 deletions
|
@ -17,16 +17,17 @@ You should have received a copy of the GNU General Public License
|
|||
along with pmbootstrap. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
import logging
|
||||
import pmb.config
|
||||
|
||||
# Get magic and mask from binfmt info file
|
||||
# Return: {magic: ..., mask: ...}
|
||||
|
||||
|
||||
def binfmt_info(args, arch_debian):
|
||||
def binfmt_info(args, arch_qemu):
|
||||
# Parse the info file
|
||||
full = {}
|
||||
info = args.work + "/chroot_native/usr/share/qemu-user-binfmt.txt"
|
||||
logging.debug("parsing: " + info)
|
||||
info = pmb.config.pmb_src + "/data/qemu-user-binfmt.txt"
|
||||
logging.verbose("parsing: " + info)
|
||||
with open(info, "r") as handle:
|
||||
for line in handle:
|
||||
if line.startswith('#') or "=" not in line:
|
||||
|
@ -37,12 +38,12 @@ def binfmt_info(args, arch_debian):
|
|||
full[key] = value[1:-2]
|
||||
|
||||
ret = {}
|
||||
logging.debug("filtering by architecture: " + arch_debian)
|
||||
logging.verbose("filtering by architecture: " + arch_qemu)
|
||||
for type in ["mask", "magic"]:
|
||||
key = arch_debian + "_" + type
|
||||
key = arch_qemu + "_" + type
|
||||
if key not in full:
|
||||
raise RuntimeError("Could not find key " + key + " in binfmt info file: " +
|
||||
info)
|
||||
ret[type] = full[key]
|
||||
logging.debug("=> " + str(ret))
|
||||
logging.verbose("=> " + str(ret))
|
||||
return ret
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue