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/
#!/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
#!/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
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel