You are not logged in.

#1 2010-08-30 14:56:04

skodabenz
Banned
From: Tamilnadu, India
Registered: 2010-04-11
Posts: 382

[SOLVED] Splitting grub2 package as grub2-bios and grub2-efi

Hi all,
         I currently maintain the grub2-efi-bzr http://aur.archlinux.org/packages.php?ID=40290 and grub2-bios-bzr http://aur.archlinux.org/packages.php?ID=41055 AUR packages. I proposed a split PKGBUILD to tpowa and pressh for grub2 package based on requests at https://bugs.archlinux.org/task/19838 and https://bugs.archlinux.org/task/20419 . The PKGBUILD creates 4 packages grub2-common, grub2-bios, grub2-efi-x86_64, grub2-efi-i386.

I need your impressions and suggestions on improving the PKGBUILD, especially in avoiding the use of multilib toolchain. Thanks in advance.

grub2-bios for Archlinux i686 and x86_64 (multilib needed in x86_64) - compiled as any in Arch64

grub2-bios for Archlinux i686 and x86_64 (multilib needed in x86_64) - compiled as any in Arch64

grub2-efi-x86_64 for Archlinux i686 and x86_64 (no need for multilib in x86_64, not possible to compile in i686) - compiled as any in Arch64

I currently use x86_64 Archlinux with gcc-multilib from the official repo. I do not have i686 linux (either Arch or any other distro) installed. My system compiles both grub2-efi-x86_64 and grub2-efi-i386 using the below PKGBUILD. I use only grub2-efi-x86_64 (or x86_64-EFI) in my system.

_grub2_rev=3040

_grub2_lua_ver=19
_grub2_gpxe_ver=12
_grub2_ntldr_ver=13
_grub2_915_ver=6

_USE_MULTILIB=1

pkgname=('grub2-common' 'grub2-bios' 'grub2-efi-i386')
pkgbase="grub2"
pkgver="1.99beta0_r${_grub2_rev}"
pkgrel=1
url="http://www.gnu.org/software/grub/"
arch=('i686' 'x86_64')
license=('GPL3')
optdepends=()
makedepends=('bdf-unifont' 'python2' 'xz' 'autogen' 'texinfo' 'help2man' 'gettext')
options=(strip docs zipman !emptydirs)
groups=('grub2')
conflicts=()
provides=()

# source=("ftp://alpha.gnu.org/gnu/grub/grub-${pkgver}.tar.gz"
source=("http://dl.dropbox.com/u/9710721/grub2_sources/grub2_r${_grub2_rev}.tar.xz" 
        "http://dl.dropbox.com/u/9710721/grub2_sources/grub2_extras_lua_r${_grub2_lua_ver}.tar.xz"
        "http://dl.dropbox.com/u/9710721/grub2_sources/grub2_extras_gpxe_r${_grub2_gpxe_ver}.tar.xz"
        "http://dl.dropbox.com/u/9710721/grub2_sources/grub2_extras_ntldr-img_r${_grub2_ntldr_ver}.tar.xz"
        "http://dl.dropbox.com/u/9710721/grub2_sources/grub2_extras_915resolution_r${_grub2_915_ver}.tar.xz"
        'grub2.default'
        'grub.cfg.example'
        '20_memtest86+'
        '05_archtheme')

noextract=("grub2_extras_lua_r${_grub2_lua_ver}.tar.xz"
           "grub2_extras_gpxe_r${_grub2_gpxe_ver}.tar.xz"
           "grub2_extras_ntldr-img_r${_grub2_ntldr_ver}.tar.xz"
           "grub2_extras_915resolution_r${_grub2_915_ver}.tar.xz")

sha256sums=('50e17683b972c0f5aab9b252af6c800bdc6068aab3654059046a435a3c5eccb6'
            '4d092a8780342a0f7fb5f5f92dc3b123fb5dd583ba137357630c56d416ed3114'
            '8ce1b6b89ef0e3545736477d4c4418524e32c7fb9ba40c67dcebfb84b98cde66'
            '554e9d65805ac61ca9a8c7cecdf6e7d28375dc28b3984140faef0e929e1ebd5b'
            'f0bd90bbbad4b07ec2053d4056f7c5252e95e97477af4206df59ec2d72d88ce0'
            '9dc7834514deabba3eb3ed19d0c7d73e3ab0114b7cd8a2eb6b17e8b7a6328143'
            '8128da77d8e8c86077fde561ba107756ece744ad54a16161c637ce73f836a84a'
            'ba0f871ee93760d14d7f19709bb875af4a863a758776a23519ca7100a63da295'
            '6628b70b857c024297af38cf519bfe7d518a122030ab5d0958677a60ddff6cdd')


# DESTARCH="i686"
DESTARCH="x86_64"


if [ "${CARCH}" = 'x86_64' ] && [ "${_USE_MULTILIB}" = '1' ]
then
    makedepends=(${makedepends[@]} 'gcc-multilib' 'gcc-libs-multilib' 'lib32-glibc' 'binutils-multilib' 'libtool-multilib')
    
    _EFIEMU="--enable-efiemu"
    
    _CFLAGS=""
    _HOST="x86_64"
    
    if [ "${DESTARCH}" = 'i686' ]
    then
        _CFLAGS="-m32"
        _HOST="i686"
    fi
    
elif [ "${CARCH}" = 'x86_64' ] && [ "${_USE_MULTILIB}" = '0' ]
then
    echo "This package can be built only in a i686 system or in a x86_64 system using gcc-multilib. Exiting."
    exit 1
fi


if [ "${CARCH}" = 'i686' ]
then
    _EFIEMU="--disable-efiemu"
    
    if [ "${DESTARCH}" = 'x86_64' ]
    then
        _CFLAGS="-m32 -static"
        _HOST="i686"
    fi
fi


build_grub2-common_and_bios() {

  rm -rf ${srcdir}/grub2_bios_${DESTARCH} || true
  cp -r ${srcdir}/grub2 ${srcdir}/grub2_bios_${DESTARCH}
  
  cd ${srcdir}/grub2_bios_${DESTARCH}

  mkdir ${srcdir}/grub2_bios_${DESTARCH}/grub2-extras/  
  cd ${srcdir}/grub2_bios_${DESTARCH}/grub2-extras/
    
  bsdtar xf ${srcdir}/grub2_extras_lua_r${_grub2_lua_ver}.tar.xz
  bsdtar xf ${srcdir}/grub2_extras_gpxe_r${_grub2_gpxe_ver}.tar.xz
  bsdtar xf ${srcdir}/grub2_extras_ntldr-img_r${_grub2_ntldr_ver}.tar.xz
  bsdtar xf ${srcdir}/grub2_extras_915resolution_r${_grub2_915_ver}.tar.xz
  
  cd ${srcdir}/grub2_bios_${DESTARCH}
  export GRUB_CONTRIB=${srcdir}/grub2_bios_${DESTARCH}/grub2-extras/  
  
  ## Archlinux changed default /usr/bin/python3, need to use /usr/bin/python2 instead
  cp ${srcdir}/grub2_bios_${DESTARCH}/autogen.sh ${srcdir}/grub2_bios_${DESTARCH}/autogen_unmodified.sh
  sed -i 's|python|python2|' ${srcdir}/grub2_bios_${DESTARCH}/autogen.sh
  
  ${srcdir}/grub2_bios_${DESTARCH}/autogen.sh
  echo
  
  mkdir ${srcdir}/grub2_bios_${DESTARCH}/BUILD_BIOS
  cd ${srcdir}/grub2_bios_${DESTARCH}/BUILD_BIOS

  CFLAGS="${_CFLAGS}" ${srcdir}/grub2_bios_${DESTARCH}/configure --with-platform=pc \
                                                                 --host=${_HOST} \
                                                                 --program-transform-name=s,grub,grub2, \
                                                                 --enable-mm-debug \
                                                                 ${_EFIEMU} \
                                                                 --enable-grub-mkfont \
                                                                 --prefix=/usr \
                                                                 --bindir=/bin \
                                                                 --sbindir=/sbin \
                                                                 --mandir=/usr/share/man \
                                                                 --infodir=/usr/share/info \
                                                                 --sysconfdir=/etc
  echo
  
  CFLAGS="${_CFLAGS}" make 
  echo
  
  ${srcdir}/grub2_bios_${DESTARCH}/BUILD_BIOS/grub-mkfont --output=${srcdir}/unifont.pf2 /usr/share/fonts/misc/unifont.bdf || true
  ${srcdir}/grub2_bios_${DESTARCH}/BUILD_BIOS/grub-mkfont --ascii-bitmaps --output=${srcdir}/ascii.pf2 /usr/share/fonts/misc/unifont.bdf || true
  
}


build_grub2-efi-i386() {

  mkdir ${srcdir}/grub2_efi/BUILD_EFI_i386
  cd ${srcdir}/grub2_efi/BUILD_EFI_i386

  CFLAGS="${_CFLAGS}" ${srcdir}/grub2_efi/configure --with-platform=efi \
                                                    --target=i386 \
                                                    --host=${_HOST} \
                                                    --program-transform-name=s,grub,grub2, \
                                                    --enable-mm-debug \
                                                    --disable-efiemu \
                                                    --prefix=/usr \
                                                    --bindir=/bin \
                                                    --sbindir=/sbin \
                                                    --mandir=/usr/share/man \
                                                    --infodir=/usr/share/info \
                                                    --sysconfdir=/etc
  echo
  
  CFLAGS="${_CFLAGS}" make 
  echo
  
}


build_grub2-efi() {

  rm -rf ${srcdir}/grub2_efi || true
  cp -r ${srcdir}/grub2 ${srcdir}/grub2_efi
  
  rm -rf ${srcdir}/grub2

  cd ${srcdir}/grub2_efi

  mkdir ${srcdir}/grub2_efi/grub2-extras/  
  cd ${srcdir}/grub2_efi/grub2-extras/
    
  bsdtar xf ${srcdir}/grub2_extras_lua_r${_grub2_lua_ver}.tar.xz
  bsdtar xf ${srcdir}/grub2_extras_gpxe_r${_grub2_gpxe_ver}.tar.xz
  
  cd ${srcdir}/grub2_efi
  export GRUB_CONTRIB=${srcdir}/grub2_efi/grub2-extras/  
  
  ## Archlinux changed default /usr/bin/python3, need to use /usr/bin/python2 instead
  cp ${srcdir}/grub2_efi/autogen.sh ${srcdir}/grub2_efi/autogen_unmodified.sh
  sed -i 's|python|python2|' ${srcdir}/grub2_efi/autogen.sh
  
  ${srcdir}/grub2_efi/autogen.sh
  echo
  
  build_grub2-efi-i386 
  echo
  
}

build() {

  echo
  
  build_grub2-common_and_bios #
  
  echo
  
  build_grub2-efi #
  
  echo
  
}


package_grub2-common() {

  pkgdesc="The GNU GRand Unified Bootloader version 2 - Files common for all platforms"
  install="grub2-common.install"
  depends=('sh' 'xz' 'freetype2' 'mtools' 'dosfstools')
  conflicts=('grub2')
  backup=('etc/default/grub' 'etc/grub.d/40_custom')
  
  cd ${srcdir}/grub2_bios_${DESTARCH}/BUILD_BIOS
  make DESTDIR=${pkgdir} install 

  ## install grub2-extras ntldr-img's grubinst as grub2-grubinst
  install ${srcdir}/grub2_bios_${DESTARCH}/BUILD_BIOS/grub-core/grubinst ${pkgdir}/sbin/grub2-grubinst || true
  
  ## remove platform specific files
  rm -rf ${pkgdir}/usr/lib/grub2/
  rm -rf ${pkgdir}/usr/share/grub2/
  
  ## remove some problamatic files - may work properly in future
  rm -rf ${pkgdir}/etc/bash_completion.d/
  
  cp ${pkgdir}/sbin/grub2-install ${pkgdir}/sbin/grub2_bios-install
  cp ${pkgdir}/sbin/grub2-install ${pkgdir}/sbin/grub2_efi_x86_64-install
  cp ${pkgdir}/sbin/grub2-install ${pkgdir}/sbin/grub2_efi_i386-install
    
  sed -i "s|^\(target_cpu\)=.*|\1=i386|; \
        s|^\(platform\)=.*|\1=pc|" \
        ${pkgdir}/sbin/grub2_bios-install

  sed -i "s|^\(target_cpu\)=.*|\1=x86_64|; \
        s|^\(platform\)=.*|\1=efi|" \
        ${pkgdir}/sbin/grub2_efi_x86_64-install

  sed -i "s|^\(target_cpu\)=.*|\1=i386|; \
        s|^\(platform\)=.*|\1=efi|" \
        ${pkgdir}/sbin/grub2_efi_i386-install

  
  ## install the /etc/grub.d/ files
  install ${startdir}/05_archtheme ${pkgdir}/etc/grub.d/05_archtheme
  install ${startdir}/20_memtest86+ ${pkgdir}/etc/grub.d/20_memtest86+
    
  ## install the unifont files
  install ${srcdir}/unifont.pf2 ${pkgdir}/etc/grub.d/unifont.pf2 || true
  install ${srcdir}/ascii.pf2 ${pkgdir}/etc/grub.d/ascii.pf2 || true
 
  ## install /etc/default/grub
  install -Dm644 ${srcdir}/grub2.default ${pkgdir}/etc/default/grub

  ## install example grub2 config file
  install -Dm755 ${srcdir}/grub.cfg.example ${pkgdir}/etc/grub.d/grub.cfg.example
  
  ## rename grub.info to grub2.info
  mv ${pkgdir}/usr/share/info/grub.info ${pkgdir}/usr/share/info/grub2.info || true
  
  export CARCH="${DESTARCH}"
  
}

package_grub2-bios() {

  pkgdesc="The GNU GRand Unified Bootloader version 2 - Built for PC BIOS"
  arch=('any')
  depends=(grub2-common=${pkgver})
  replaces=('grub2')
  install="grub2-bios.install"
  
  cd ${srcdir}/grub2_bios_${DESTARCH}/BUILD_BIOS
  make DESTDIR=${pkgdir} install 

  ## remove non platform-specific files
  rm -rf ${pkgdir}/bin/
  rm -rf ${pkgdir}/sbin/
  rm -rf ${pkgdir}/etc/
  rm -rf ${pkgdir}/usr/share/info/
  rm -rf ${pkgdir}/usr/share/man/
  rm -rf ${pkgdir}/usr/lib/grub/
  
}

package_grub2-efi-i386() {

  pkgdesc="The GNU GRand Unified Bootloader version 2 - i386 UEFI version"
  arch=('any')
  depends=("grub2-common=${pkgver}" 'efibootmgr-git')
  replaces=('grub2-efi-x86')
  install="grub2-efi.install"
  
  cd ${srcdir}/grub2_efi/BUILD_EFI_i386
  make DESTDIR=${pkgdir} install 

  ## remove non platform-specific files
  rm -rf ${pkgdir}/bin/
  rm -rf ${pkgdir}/sbin/
  rm -rf ${pkgdir}/etc/
  rm -rf ${pkgdir}/usr/share/info/
  rm -rf ${pkgdir}/usr/share/man/
  rm -rf ${pkgdir}/usr/lib/grub/
  
  sed -i "s|^\(_EFI_ARCH\)=.*|\1=i386|" ${startdir}/grub2-efi.install
  
}

Last edited by skodabenz (2011-01-30 19:36:25)


My new forum user/nick name is "the.ridikulus.rat" .

Offline

#2 2011-01-30 19:34:58

skodabenz
Banned
From: Tamilnadu, India
Registered: 2010-04-11
Posts: 382

Re: [SOLVED] Splitting grub2 package as grub2-bios and grub2-efi

The package is now in testing repo and will soon be moved to extra repo. Solved by splitting the PKGBUILDs and through direct interaction with grub2 maintainer using irc.


My new forum user/nick name is "the.ridikulus.rat" .

Offline

Board footer

Powered by FluxBB