You are not logged in.
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
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