live-sdk

simple distro kit (livecd edition)
git clone git://parazyd.org/live-sdk.git
Log | Files | Refs | Submodules | README | LICENSE

commit a7805b426b798b05d3cd02fa2b26fcc971dfba49
parent 2c6f7b1910315922c7f60a509144429118fde219
Author: parazyd <parazyd@dyne.org>
Date:   Sun, 23 Apr 2017 15:53:29 +0200

port fsmithred's UEFI patch

Diffstat:
Mblends/devuan-live/config | 75++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
Mblends/devuan-live/devuan-live.blend | 130+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dblends/devuan-live/refractainstaller-base_9.2.1_all.deb | 0
Dblends/devuan-live/refractasnapshot-base_10.0.2_all.deb | 0
Ablends/devuan-live/yad_0.27.0-1_amd64.deb | 0
Ablends/devuan-live/yad_0.27.0-1_i386.deb | 0
6 files changed, 198 insertions(+), 7 deletions(-)

diff --git a/blends/devuan-live/config b/blends/devuan-live/config @@ -1,19 +1,80 @@ #!/usr/bin/env zsh ## configuration file for devuan-live blend -vars+=(username userpass default_shell) +vars+=(username userpass default_shell mkefi grubversion) arrs+=(custom_deb_packages) blend_name="devuan-live" -blend_vers="1.0" username="devuan" userpass="devuan" - default_shell="/bin/bash" -custom_deb_packages=( - #refracta-lang_1.1.deb - refractainstaller-base_9.2.1_all.deb - refractasnapshot-base_10.0.2_all.deb +grubversion="grub-pc" +image_name="${os}_${release}_${version}_${arch}" + +case "$4" in + uefi) + grubversion="grub-efi-${arch}" + image_name="${os}_${release}_${version}_${arch}_uefi" + mkefi="yes" + efi_work="$BLENDPATH/efi-files" + ;; +esac + +extra_packages+=( + lsof + bash-completion + texinfo + acpi-support-base + aptitude + apt-listchanges + discover + dnsutils + doc-debian + docutils-common + docutils-doc + ftp + gettext + gnupg2 + gparted + $grubversion + laptop-detect + mlocate + mutt + ncurses-term + nfs-common + procmail + reportbug + telnet + usbutils + w3m + whois + task-desktop + task-english + task-xfce-desktop + task-print-server +) + +purge_packages=( + btrfs-tools + debian-keyring + elinks + elinks-data + git + git-core + git-man + liberror-perl + libfsplib0 + libtre5 + openntpd + openssh-server + openssh-sftp-server + tmux + zsh + zsh-common +) + +custom_deb_packages+=( + yad_0.27.0-1_${arch}.deb ) diff --git a/blends/devuan-live/devuan-live.blend b/blends/devuan-live/devuan-live.blend @@ -1,9 +1,11 @@ #!/usr/bin/env zsh # Copyright (c) 2017 Dyne.org Foundation # live-sdk is written and maintained by Ivan J. <parazyd@dyne.org> +# devuan-live blend patches maintained by fsmithred # # This file is part of live-sdk # +# # This source code 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 3 of the License, or @@ -41,6 +43,8 @@ blend_postinst() { notice "executing $blend_name postinst" + [[ -n "$mkefi" ]] && iso_make_efi + install-custdebs || zerr pushd "$strapdir" sudo rsync -avx "$BLENDPATH"/rootfs-overlay/* . || zerr @@ -95,6 +99,130 @@ EOF sudo cp -rav "$BLENDPATH"/isolinux-overlay/* "$workdir"/binary/isolinux/ } +## uefi code borrowed and adapted from David Hare, who borrowed and adapted it +## from similar scripts by Colin Watson and Patrick J. Volkerding. +iso_make_efi() { + fn iso_make_efi + req=(workdir efi_work) + ckreq || return 1 + set -x + notice "creating efi boot files" + + _tempdir="$(mktemp -d /tmp/work_temp.XXXX)" + + ## for initial grub.cfg + mkdir -p "$_tempdir"/boot/grub + + + cat >"$_tempdir"/boot/grub/grub.cfg <<EOF +search --file --set=root /isolinux/isolinux.cfg +set prefix=(\$root)/boot/grub +source \$prefix/x86_64-efi/grub.cfg +EOF + + mkdir -p "$efi_work" + pushd "$efi_work" + + rm -rf boot efi + rm -rf efi + mkdir -p boot/grub/x86_64-efi + mkdir -p efi/boot + + ## efi partition mods + find /usr/lib/grub/x86_64-efi -type -f -name "part_*\.mod" \ + -exec sh -c 'for f do echo insmod $(basename -- "$f" .mod); done' sh {} + \ + >> boot/grub/x86_64-efi/grub.cfg + + ## Additional modules so we don't boot in blind mode. + ## I don't know which ones are really needed. + _efimods=(efi_gop efi_uga ieee1275_fb vbe vga video_bochs + video_cirrus jpeg png gfxterm) + + for i in $_efimods; do + print "insmod $i" >> boot/grub/x86_64-efi/grub.cfg + done + print "source /boot/grub/grub.cfg" >> boot/grub/x86_64-efi/grub.cfg + + pushd "$_tempdir" + ## make a tarred "memdisk" to embed in the grub image + tar -cvf memdisk boot + + ## make the grub image + _grubmods=(search iso9660 configfile normal memdisk tar cat part_msdos + part_gpt fat ext2 ntfs ntfscomp hfsplus chain boot linux) + grub-mkimage \ + -O "x86_64-efi" \ + -m "memdisk" \ + -o "bootx64.efi" \ + -p '(memdisk)/boot/grub' \ + $_grubmods + popd + + ## copy the grub image to efi/boot (to go later in the device's root) + cp "$_tempdir"/bootx64.efi efi/boot + + ## Do the boot image "boot/grub/efiboot.img" + dd if=/dev/zero of=boot/grub/efiboot.img bs=1K count=1440 + /sbin/mkdosfs -F 12 boot/grub/efiboot.img + + sudo mkdir -p img-mnt/efi/boot + sudo mount -o loop boot/grub/efiboot.img img-mnt + sudo cp "$_tempdir"/bootx64.efi img-mnt/efi/boot/ + + cp /usr/lib/grub/x86_64-efi/* boot/grub/x86_64-efi/ + + ## if this doesn't work try another font from the same place + ## (grub's default, unicode.pf2, is much larger) + ## Either of these will work, and they look the same to me. + ## Unicode seems to work with qemu. -fsr + + #cp /usr/share/grub/ascii.pf2 boot/grub/font.pf2 + cp /usr/share/grub/unicode.pf2 boot/grub/font.pf2 + + ## doesn't need to be root-owned + #sudo chown -R 1000:1000 $(pwd) 2>/dev/null + + ## Cleanup efi temps + sudo umount img-mnt + sudo rmdir img-mnt + rm -rf "$_tempdir" + + popd # $efi_work + + + ## Copy efi files to iso + pushd $workdir + sudo rsync -avx "$efi_work"/boot binary/ + sudo rsync -avx "$efi_work"/efi binary/ + popd + + ## Do the main grub.cfg (which gets loaded last): + cat <<EOF | sudo tee ${workdir}/binary/boot/grub/grub.cfg +if loadfont $prefix/font.pf2 ; then + set gfxmode=640x480 + insmod efi_gop + insmod efi_uga + insmod video_bochs + insmod video_cirrus + insmod gfxterm + insmod jpeg + insmod png + terminal_output gfxterm +fi + +background_image /boot/grub/splash.png +set menu_color_normal=white/black +set menu_color_highlight=dark-gray/white +set timeout=6 + +menuentry "${os} (defaults)" { + set gfxpayload=keep + linux /live/vmlinuz boot=live username=${username} + initrd /live/initrd +} +EOF +} + blend_finalize() { fn blend_finalize req=(strapdir username default_shell) @@ -110,6 +238,8 @@ done chsh -s "${default_shell}" ${username} chown -R 1000:1000 /home/${username} +cp /home/${username}/Desktop/refractainstaller.desktop /usr/share/applications/ +chmod +x /home/${username}/Desktop/refractainstaller.desktop grep -q GRUB_THEME /etc/default/grub || { printf "\nGRUB_THEME=/usr/share/desktop-base/grub-themes/desktop-grub-theme/theme.txt\n" >> /etc/default/grub diff --git a/blends/devuan-live/refractainstaller-base_9.2.1_all.deb b/blends/devuan-live/refractainstaller-base_9.2.1_all.deb Binary files differ. diff --git a/blends/devuan-live/refractasnapshot-base_10.0.2_all.deb b/blends/devuan-live/refractasnapshot-base_10.0.2_all.deb Binary files differ. diff --git a/blends/devuan-live/yad_0.27.0-1_amd64.deb b/blends/devuan-live/yad_0.27.0-1_amd64.deb Binary files differ. diff --git a/blends/devuan-live/yad_0.27.0-1_i386.deb b/blends/devuan-live/yad_0.27.0-1_i386.deb Binary files differ.