grub-devel.gnu.org archive mirror
 help / color / mirror / Atom feed
From: adrian15 <adrian15sgd@gmail.com>
To: The development of GRUB 2 <grub-devel@gnu.org>
Subject: Trying to build Rescue image for three different target and platform
Date: Sun, 09 Mar 2014 17:14:04 +0100	[thread overview]
Message-ID: <531C934C.5070501@gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 5006 bytes --]

Basically what I want to do is to use grub-mkrescue to generate a grub2 
rescue disk with some custom files (The Super Grub2 Disk stuff).

However I want to build different files depending on target+platform 
combination.

My four combinations are:

     * (Hybrid) x86_64+efi and i386+pc
     * i386 - pc
     * x86_64 - efi
     * i386 - efi

More about this setup.

1) As an initial setup I work with a Debian Unstable Sid Chroot amd64 as 
described in:
http://www.supergrubdisk.org/wiki/Super_Grub2_Disk_Sid_Chroot#Introduction
2) I use Debian's Grub2 source code so that I do not have to deal 
manually with dependencies. That's explained here: 
http://www.supergrubdisk.org/wiki/Super_Grub2_Disk_Sid_Chroot_Grub2_Build_And_Installation 
(just before Hybrid build section).

3) x86_64_efi build is working. Basically what I run in the src dir is:

   sudo rm -rf /usr/local/share/grub
   sudo rm -rf /usr/local/lib/grub
   make clean
   make distclean
   bash linguas.sh
   bash autogen.sh
   ./configure --target=i386 --with-platform=efi && make && sudo make 
uninstall
   make clean
   make distclean
   ./configure --target=i386 --with-platform=pc && make && sudo make 
uninstall
   make clean
   make distclean
   ./configure --target=x86_64 --with-platform=efi && make && sudo make 
uninstall
   make clean
   make distclean
   make clean
   make distclean
   bash linguas.sh
   bash autogen.sh
   ./configure --target=x86_64 --with-platform=efi && make && sudo make 
install

And what I do for generating the file image is:

grub-mkrescue --output=super_grub2_disk_x86_64_efi_2.00s1-beta6.iso 
$(mktemp -d)

4) i386_pc build is not working. Basically what I run in the src dir is:

   sudo rm -rf /usr/local/share/grub
   sudo rm -rf /usr/local/lib/grub
   make clean
   make distclean
   bash linguas.sh
   bash autogen.sh
   ./configure --target=i386 --with-platform=efi && make && sudo make 
uninstall
   make clean
   make distclean
   ./configure --target=i386 --with-platform=pc && make && sudo make 
uninstall
   make clean
   make distclean
   ./configure --target=x86_64 --with-platform=efi && make && sudo make 
uninstall
   make clean
   make distclean
   make clean
   make distclean
   bash linguas.sh
   bash autogen.sh
   ./configure --target=i386 --with-platform=pc && make && sudo make install


And what I do for generating the file image is:

grub-mkrescue --output=super_grub2_disk_i386_pc_2.00s1-beta6.iso 
$(mktemp -d)

5) I attach the current helper scripts that I use.

supergrub-mkrescue : This is a very simple wrapper around: 
grub-mkrescue. You do not need to take care about it.

supergrub-meta-mkrescue : This is what I have explained above. This 
script assumes that you have setup your grub2 source code in:
/home/adrian/gnu/sgd/debian_grub2/grub2-2.00
and that supergrub-mkrescue script is found in the same folder as 
supergrub-meta-mkrescue.

Currently supergrub-meta-mkrescue has been modified so that it ends 
(Check the return 0 ; line) after building:

* x86_64_efi
and
* i386 - pc
.

6) When I build i386 - pc I get this error:

xorriso : FAILURE : Given path does not exist on disk: -boot_image 
system_area='/usr/local/lib/grub/i386-pc/boot_hybrid.img'

Why is it failing to create /usr/local/lib/grub/i386-pc/boot_hybrid.img 
file?

7) Is it useful that I insist on building an i386+efi release? Any 
machine system that uses it? Some old Mac-something hardware perhaps?

8) What's the best way to build and install an hybrid system that 
includes both: x86_64_efi and i386 - pc stuff?

Current code is:

   ./configure --target=i386 --with-platform=pc && make && sudo make install
   make clean
   make distclean
   ./configure --target=x86_64 --with-platform=efi && make && sudo make 
install

9) A) What's the best way to remove grub configuration files installed 
on the system so that I can start from scratch so that already built 
target+platform grub binaries or configurations are ignored?

B) That's what I try to do in clean_every_build function in 
supergrub-meta-mkrescue script but I do not think its an efficient way 
of doing it.

C) You know I would like to remove the rm -rf /usr/local/share/grub and 
rm -rf /usr/local/lib/grub lines (too weird) and just use the:

./configure ; make ; make uninstall part.

D) Which I do not know if could be re-written as:

./configure ; make uninstall

(Notice that there is not a make step).

Does removing the make default target call (make) breaks "make 
uninstall" functionality?

10) As a summary I basically want to build and install from upstream 
source code and then make one rescue disk for each one of these four 
combinations. (And make theses rescue diks in a row)

     * (Hybrid) x86_64+efi and i386+pc
     * i386 - pc
     * x86_64 - efi
     * i386 - efi

So... any help on this build automation process?

Thank you very much!


adrian15
-- 
Support free software. Donate to Super Grub Disk. Apoya el software 
libre. Dona a Super Grub Disk. http://www.supergrubdisk.org/donate/

[-- Attachment #2: supergrub-mkrescue --]
[-- Type: text/plain, Size: 3164 bytes --]

#!/bin/bash -e
usage() {
cat <<EOF

  $0 -o=output.iso
  Copyright Adrian Gibanel Lopez
  Licensed under the GNU PUBLIC LICENSE 3.0

  CREATE CALL
  ===========

  Usage: $0 [-o=FILENAME]
  Example: $0 -o=myrescatux.iso

EOF

}
# Check the arguments.
for option in "$@"; do
  case "$option" in
    -h | --help)
      usage
      exit 0
    ;;
    -o=*)
      CUSTOM_ISO_FILENAME=`echo "$option" | sed 's/-o=//'`
    ;;
  esac
done

# Get the version number for this Super GRUB2 Disk release
source menus/version.cfg


BOOT_ISOS_DIRECTORY="boot-isos"
overlay=$(mktemp -d)
ISO_FILENAME="super_grub2_disk_hybrid_${sgrub_version}.iso"

if [[ "x$CUSTOM_ISO_FILENAME" != x ]] ; then
  ISO_FILENAME="${CUSTOM_ISO_FILENAME}"
fi

default_options="--output=${ISO_FILENAME} $overlay"
mkdir -p "$overlay/boot/grub/"
cp -r menus/* "$overlay/boot/grub/"
if [ -d ${BOOT_ISOS_DIRECTORY} ] ; then
  cp -r ${BOOT_ISOS_DIRECTORY} "$overlay/boot/"
fi

cp AUTHORS COPYING "$overlay/boot/grub/"

# Generate mo files and add them to overlay
for pofile in po/*.po; do
  basename=${pofile##*/}
  lang_code="${basename%.po}"
  info_cfg="menus/sgd_locale/${lang_code}_info.cfg"
  msgfmt "$pofile" --output-file="$overlay/boot/grub/sgd_locale/${lang_code}.mo"
  if ! [[ -f "$info_cfg" ]]; then
    echo "Thank you for providing a new translation for Super GRUB2 Disk!"
    echo "Before this translation can be used in Super GRUB2 Disk we need to know what"
    echo "to call it in our language selection menu."
    echo "We need to know the name of the language you've translated, in that language."
    echo "For example, for Spanish you would enter \"Español\" (without the quotes)."
    echo -n "Please enter the name of the language for $pofile: "
    read language_name
    cp info_cfg_header.cfg "$info_cfg"
    echo "lang_code='${lang_code}'" >> "$info_cfg"

    # This will fail if $language_name contains a single quote character.
    # TODO: Fix aforementioned problem by escaping quotes in $language_name.
    echo "language_name='${language_name}'" >> "$info_cfg"

    echo "A file, ${info_cfg}, was created with this information."
    echo "Thanks again for contributing a new translation!"
    echo; echo
  fi
done

# Find unifont font file to create grub font. This is needed for gfxterm in grub, which
# in turn is needed for displaying non-ASCII characters for non-English translations.
# This unifont finding code was copied from grub's configure.ac.
for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
  for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/unifont; do
    if test -f "$dir/unifont.$ext"; then
      font_source="$dir/unifont.$ext"
      break 2
    fi
  done
done

if [[ -n "$font_source" ]]; then
  grub-mkfont "$font_source" --output="$overlay/boot/grub/unifont.pf2"
else
  echo "Error: Unifont not found. Unifont is needed for Super GRUB2 Disk" >&2
  echo "to properly display non-ASCII characters. Aborting without creating an iso." >&2
  exit 1
fi

grub-mkrescue $default_options
rm -r "$overlay"

md5sum ${ISO_FILENAME} > ${ISO_FILENAME}.md5
sha1sum ${ISO_FILENAME} > ${ISO_FILENAME}.sha1
sha256sum ${ISO_FILENAME} > ${ISO_FILENAME}.sha256


[-- Attachment #3: supergrub-meta-mkrescue --]
[-- Type: text/plain, Size: 2683 bytes --]

#!/bin/bash

SUPER_GRUB2_DISK_FILE_PREFIX="super_grub2_disk"

DEBIAN_GRUB2_SRC_DIR="/home/adrian/gnu/sgd/debian_grub2/grub2-2.00"

SGD2_SOURCE_DIR="$(pwd)"

function grub2_src_prepare () {
  make clean
  make distclean
  bash linguas.sh
  bash autogen.sh
}

function build_sg2d () {

  ./supergrub-mkrescue -o="${SUPER_GRUB2_DISK_FILE_PREFIX}_${TARGET_PLATFORM}_${sgrub_version}.iso"

}

function clean_every_build () {

  sudo rm -rf /usr/local/share/grub
  sudo rm -rf /usr/local/lib/grub
  grub2_src_prepare
  ./configure --target=i386 --with-platform=efi && make && sudo make uninstall
  make clean
  make distclean
  ./configure --target=i386 --with-platform=pc && make && sudo make uninstall
  make clean
  make distclean
  ./configure --target=x86_64 --with-platform=efi && make && sudo make uninstall
  make clean
  make distclean

}


function grub2_sg2d_hybrid_build () {

  # Grub2 - Hybrid build

  cd ${DEBIAN_GRUB2_SRC_DIR}
  clean_every_build
  grub2_src_prepare
  ./configure --target=i386 --with-platform=pc && make && sudo make install
  make clean
  make distclean
  ./configure --target=x86_64 --with-platform=efi && make && sudo make install
  cd ${SGD2_SOURCE_DIR}

  # Super Grub2 Disk - Hybrid build
  TARGET_PLATFORM="hybrid"
  build_sg2d

}

function grub2_sg2d_i386_pc_build () {

  # Grub2 - i386 - pc build
  cd ${DEBIAN_GRUB2_SRC_DIR}
  clean_every_build
  grub2_src_prepare
  bash lingua.sh
  bash autogen.sh
  ./configure --target=i386 --with-platform=pc && make && sudo make install
  cd ${SGD2_SOURCE_DIR}

  # Super Grub2 Disk - i386 - pc build
  TARGET_PLATFORM="i386_pc"
  build_sg2d

}

function grub2_sg2d_x86_64_efi_build () {

  # Grub2 - x86_64 - efi build
  cd ${DEBIAN_GRUB2_SRC_DIR}
  clean_every_build
  grub2_src_prepare
  ./configure --target=x86_64 --with-platform=efi && make && sudo make install
  cd ${SGD2_SOURCE_DIR}

  # Super Grub2 Disk - x86_64 - efi build
  TARGET_PLATFORM="x86_64_efi"
  build_sg2d

}

function grub2_sg2d_i386_efi_build () {

  # Grub2 - i386 - efi build
  cd ${DEBIAN_GRUB2_SRC_DIR}
  clean_every_build
  grub2_src_prepare
  ./configure --target=i386 --with-platform=efi && make && sudo make install
  cd ${SGD2_SOURCE_DIR}

  # Super Grub2 Disk - i386 - efi build
  TARGET_PLATFORM="i386_efi"
  build_sg2d

}


if [ ! -d "${DEBIAN_GRUB2_SRC_DIR}" ] ; then

  echo -e -n "Please set up a valid path for Debian Grub2 source code in this same file: ${0}\n"

fi

# Needed for getting SG2D version
source menus/version.cfg

grub2_sg2d_x86_64_efi_build

grub2_sg2d_i386_pc_build

exit 0 ############################################### QUITAR ESTA LINEA





grub2_sg2d_i386_efi_build

grub2_sg2d_hybrid_build


             reply	other threads:[~2014-03-09 16:14 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-09 16:14 adrian15 [this message]
2014-03-13  5:51 ` Trying to build Rescue image for three different target and platform Andrey Borzenkov
2014-03-16  5:56   ` adrian15
2014-03-16  7:04     ` Andrey Borzenkov
2014-03-16 12:05       ` adrian15

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=531C934C.5070501@gmail.com \
    --to=adrian15sgd@gmail.com \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).