From 2e6df0d2403786d119028b5fe28fffdd5f99c3df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20=C5=A0abata?= Date: Mon, 15 May 2017 15:13:36 +0200 Subject: [PATCH] Convert extlinux to bash script to eliminate need for Python MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a function for function equivalent implementation of the previously shipped Python script, simplifying the package dependency chain. Signed-off-by: Merlin Mathesius Signed-off-by: Petr Ĺ abata --- extlinux | 88 ---------------------------------------- extlinux-bootloader.spec | 13 +++--- extlinux.sh | 68 +++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 93 deletions(-) delete mode 100755 extlinux create mode 100755 extlinux.sh diff --git a/extlinux b/extlinux deleted file mode 100755 index b1284ae..0000000 --- a/extlinux +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/python3 - -# Copyright (C) 2015 Red Hat Inc. -# Author(s): Dennis Gilmore -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. See http://www.gnu.org/copyleft/gpl.html for -# the full text of the license. - -import os - -def is_calxeda(): - #is the system a calxeda one - fd = open('/proc/cpuinfo','r') - cpuinfo = fd.readlines() - fd.close() - for line in cpuinfo: - if line.startswith('Hardware'): - if line.split(' ')[1].startswith('Highbank'): - return True - if line.split(' ')[1].startswith('Midway'): - return True - return False - -def update_sysconfig(): - ''' - update /etc/sysconfig/uboot to reflect if the platform provides its own dtb and - we do not need to pass anything. - ''' - configfile = '/etc/sysconfig/uboot' - fd = open(configfile, 'r') - uboot = fd.read() - fd.close() - newuboot = uboot.replace('#SHIPSDTB=no','SHIPSDTB=yes') - fd = open(configfile, 'w') - fd.write(newuboot) - fd.close() - -def insert_fdtdir(): - ''' - insert into /boot/extlinux/extlinux.conf a fdtdir line - ''' - configfile = '/boot/extlinux/extlinux.conf' - fd = open(configfile, 'r') - extlinux = fd.readlines() - fd.close() - newextlinux = [] - fdtdirline = '' - for line in extlinux: - newextlinux.append(line) - if line.startswith('\tkernel'): - fdtdirline = line.replace('kernel','fdtdir').replace('vmlinuz', 'dtb') - if line.startswith('\tappend'): - newextlinux.append(fdtdirline) - fd = open(configfile, 'w') - fd.writelines(newextlinux) - fd.close() - -def copy_rescue_dtbs(): - ''' - check if there is a rescue image and copy the dtb files if there is - ''' - boot = os.listdir('/boot') - dtbsource = '' - dtbdest = '' - has_rescue = False - for target in boot: - if target.startswith('vmlinuz-0-rescue'): - has_rescue = True - dtbdest = '/boot/%s' % target.replace('vmlinuz', 'dtb') - if target.startswith('dtb'): - dtbsource = '/boot/%s' % target - if has_rescue: - if not os.path.isdir(dtbdest): - os.mkdir(dtbdest) - for dtb in os.listdir(dtbsource): - os.link(os.path.join(dtbsource, dtb), os.path.join(dtbdest, dtb)) - -if __name__ == "__main__": - # platform ships its own dtb - if is_calxeda(): - update_sysconfig() - else: - # need to add fdtdir to extlinux.conf - insert_fdtdir() - copy_rescue_dtbs() diff --git a/extlinux-bootloader.spec b/extlinux-bootloader.spec index dcd4aa7..e88c388 100644 --- a/extlinux-bootloader.spec +++ b/extlinux-bootloader.spec @@ -1,12 +1,12 @@ Name: extlinux-bootloader -Version: 1.1 -Release: 7%{?dist} +Version: 1.2 +Release: 1%{?dist} Summary: The EXTLINUX bootloader framework, for booting the local system License: GPLv2+ URL: http://fedoraproject.org/wiki/extlinux-bootloader -Source1: extlinux - +Source1: extlinux.sh +BuildRequires: coreutils Provides: syslinux-extlinux ExclusiveArch: %{arm} aarch64 @@ -27,7 +27,7 @@ mkdir -p %{buildroot}/boot/extlinux/ mkdir -p %{buildroot}/etc ( cd %{buildroot}/etc && ln -s ../boot/extlinux/extlinux.conf . ) -install -p %{SOURCE1} %{buildroot}%{_sbindir} +install -p %{SOURCE1} %{buildroot}%{_sbindir}/extlinux %files %doc @@ -38,6 +38,9 @@ install -p %{SOURCE1} %{buildroot}%{_sbindir} %changelog +* Wed May 10 2017 Merlin Mathesius - 1.2-1 +- Convert extlinux to bash script to eliminate need for Python. + * Fri Feb 10 2017 Fedora Release Engineering - 1.1-7 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild diff --git a/extlinux.sh b/extlinux.sh new file mode 100755 index 0000000..c3dc3b7 --- /dev/null +++ b/extlinux.sh @@ -0,0 +1,68 @@ +#!/bin/sh + +# Copyright (C) 2015, 2017 Red Hat Inc. +# Author(s): Dennis Gilmore +# Merlin Mathesius +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. See http://www.gnu.org/copyleft/gpl.html for +# the full text of the license. + +# is the system a calxeda one +is_calxeda() { + grep -Eq '^Hardware[^ ]* (Highbank|Midway)' /proc/cpuinfo +} + +# update /etc/sysconfig/uboot to reflect if the platform provides its own dtb and +# we do not need to pass anything. +update_sysconfig() { + sed -i -e 's/#SHIPSDTB=no/SHIPSDTB=yes/g' /etc/sysconfig/uboot +} + +# insert into /boot/extlinux/extlinux.conf a fdtdir line +insert_fdtdir() { + # for every 'kernel' directive found, map it to an 'fdtdir' directive + # referencing the dtb directory and add it after the 'append' directive + sed -i \ + -e '/ kernel/{h;s/kernel/fdtdir/g;s/vmlinuz/dtb/g;x}' \ + -e '/ append/{p;x}' \ + /boot/extlinux/extlinux.conf +} + +# check if there is a rescue image and copy the dtb files if there is +copy_rescue_dtbs() { + has_rescue=0 + for target in /boot/vmlinuz-0-rescue* ; do + # if target exists, the glob matched a file + if [ -e "$target" ] ; then + has_rescue=1 + dtbdest=$(echo "$target" | sed -e 's/vmlinuz/dtb/g') + fi + break + done + for target in /boot/dtb* ; do + # if target exists, the glob matched a file + if [ -e "$target" ] ; then + dtbsource="$target" + fi + break + done + if [ $has_rescue = 1 ] && [ ! -d "$dtbdest" ] ; then + mkdir "$dtbdest" + for dtb in $(ls "$dtbsource") ; do + ln "$dtbsource/$dtb" "$dtbdest/$dtb" + done + fi +} + +# platform ships its own dtb +if is_calxeda +then + update_sysconfig +else + # need to add fdtdir to extlinux.conf + insert_fdtdir + copy_rescue_dtbs +fi