summaryrefslogtreecommitdiff
path: root/make-boot-image-d9.sh
diff options
context:
space:
mode:
Diffstat (limited to 'make-boot-image-d9.sh')
-rwxr-xr-xmake-boot-image-d9.sh584
1 files changed, 0 insertions, 584 deletions
diff --git a/make-boot-image-d9.sh b/make-boot-image-d9.sh
deleted file mode 100755
index 0db3ff5..0000000
--- a/make-boot-image-d9.sh
+++ /dev/null
@@ -1,584 +0,0 @@
-#!/bin/bash -xe
-PS4='+ ($LINENO) ' # To ease debugging
-VERSION="1.0"
-
-# Config #
-##########
-WORKDIR=./work # Must not be with "nodev" mount option
-DLDIR=./downloads
-OUTDIR=./out
-OUTUSB=/dev/sdb # Will wreck everything here !
-LEGACY=y # make USB bootable key compatible with non UEFI-BIOS
-DEVEL_MODE=n # Adds debugging tools in the generated image
-ROOTCMD=sudo
-WGET="wget" # "wget --no-check-certificate" could help but is a security concern
-KERNEL_TARBALL_URL=https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.6.tar.xz
-KCONFIGLIB_MAIN_URL=https://raw.githubusercontent.com/ulfalizer/Kconfiglib/7eace27993ad3aa1d6911866d9c60a11f32d36d9/kconfiglib.py
-KCONFIGLIB_PATCH_URL=https://raw.githubusercontent.com/ulfalizer/Kconfiglib/7eace27993ad3aa1d6911866d9c60a11f32d36d9/makefile.patch
-NIC_FIRMWARE_URL=http://fr.archive.ubuntu.com/ubuntu/pool/main/l/linux-firmware/nic-firmware_1.165_all.udeb
-BUSYBOX_BIN_URL=https://busybox.net/downloads/binaries/1.26.2-defconfig-multiarch/busybox-x86_64
-PCI_IDS_URL=https://pci-ids.ucw.cz/v2.2/pci.ids
-USB_IDS_URL=https://usb-ids.gowdy.us/usb.ids
-
-# Utilities #
-#############
-# From https://landley.net/writing/rootfs-programming.html
-# Its first argument is the new directory, and the rest of its arguments are executables to copy.
-function mkchroot
-{
- [ $# -lt 2 ] && return 0
- dest=$1
- shift
- for i in "$@"
- do
- # Get an absolute path for the file
- p=$i
- [ "${p:0:1}" == "/" ] || p=$(which $i) || true
- if [ ! -e "$p" ]
- then echo "mkchoot not found: $i"
- return 1
- fi
- # Skip files that already exist at target.
- [ -f "$dest/$p" ] && continue
- # Create destination path
- d=$(echo "$p" | grep -o '.*/') &&
- mkdir -p "$dest/$d" &&
- # Copy file
- echo + cp --dereference --preserve=all "$p" "$dest/$p" &&
- cp --dereference --preserve=all "$p" "$dest/$p" &&
- # Recursively copy shared libraries' shared libraries.
- mkchroot "$dest" $(ldd "$p" | egrep -o '/.* ') || return $?
- done
-}
-
-# Environement and dependencies #
-#################################
-codename=$(lsb_release -sc || true)
-if [ "x$codename" != "xjessie" -a "x$codename" != "xstretch" ]
-then cat >&2 <<EOT
-This script is tested only on Debian 8 (aka jessie).
-The fastest way to have the right environment is :
- * download debian live http://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-8.5.0-amd64-standard.iso
- * burn it or copy it on a USB stick (as raw, with "cp XX.iso /dev/sdX"), alternatively launch a VM with it
- * download and run this script from there
- * grab the generated out/BOOTX64.EFI
-EOT
- exit 1
-fi
-
-[ -d "$WORKDIR" ] || mkdir "$WORKDIR"
-[ -d "$DLDIR" ] || mkdir "$DLDIR"
-[ -d "$OUTDIR" ] || mkdir "$OUTDIR"
-
-if [ ! -e "$WORKDIR/apt-done" ]
-then $ROOTCMD apt-get update
- # Dependencies of this script (assuming default debian install or live)
- $ROOTCMD apt-get install wget libncurses5-dev coreutils
- [ "x$LEGACY" == "xy" ] && $ROOTCMD apt-get install mbr syslinux
- # Dependencies for kernel building
- #$ROOTCMD apt-get build-dep linux-source
- # Dependencies for kernel tools
- [ "x$DEVEL_MODE" == "xy" ] && $ROOTCMD apt-get install libelf-dev libunwind-dev \
- libdw-dev libaudit-dev libssl-dev libslang2-dev libiberty-dev flex bison
- # Optionnally qemu to run the result for santity checking
- [ "x$DEVEL_MODE" = "xy" ] && $ROOTCMD apt-get install qemu-system-x86
- # Dependencies to put into the initrd
- $ROOTCMD apt-get install dmidecode pciutils usbutils lshw sysstat iftop strace \
- ntfs-3g e2fsprogs partclone util-linux udpcast gdisk efibootmgr tcpdump pigz
- # util-linux : fdisk, sfdisk, lsblk, setterm
- > "$WORKDIR/apt-done"
-fi
-
-# Kernel build setup #
-######################
-kernel_tarball=$DLDIR/$(basename $KERNEL_TARBALL_URL)
-[ -f "$kernel_tarball" ] || $WGET -O "$kernel_tarball" "$KERNEL_TARBALL_URL"
-if [ ! -d "$WORKDIR/kernel" ]
-then mkdir "$WORKDIR/kernel"
- tar xf "$kernel_tarball" --strip-components=1 -C "$WORKDIR/kernel"
- # Patch for no-pie gcc flags, enabled by default on Debian 9, debian bug #835148
- patch -t -p1 -d "$WORKDIR/kernel" <<"EOT"
-diff --git a/Makefile b/Makefile
-index 5c18baa..e342473 100644
---- a/Makefile
-+++ b/Makefile
-@@ -612,6 +612,12 @@ endif # $(dot-config)
- # Defaults to vmlinux, but the arch makefile usually adds further targets
- all: vmlinux
-
-+# force no-pie for distro compilers that enable pie by default
-+KBUILD_CFLAGS += $(call cc-option, -fno-pie)
-+KBUILD_CFLAGS += $(call cc-option, -no-pie)
-+KBUILD_AFLAGS += $(call cc-option, -fno-pie)
-+KBUILD_CPPFLAGS += $(call cc-option, -fno-pie)
-+
- # The arch Makefile can set ARCH_{CPP,A,C}FLAGS to override the default
- # values of the respective KBUILD_* variables
- ARCH_CPPFLAGS :=
---
-EOT
-fi
-
-if [ ! -d "$WORKDIR/kernel/scripts/Kconfiglib" ]
-then
- [ -f "$DLDIR/kconfiglib.py" ] || $WGET -O "$DLDIR/kconfiglib.py" "$KCONFIGLIB_MAIN_URL"
- [ -f "$DLDIR/makefile.patch" ] || $WGET -O "$DLDIR/makefile.patch" "$KCONFIGLIB_PATCH_URL"
- mkdir "$WORKDIR/kernel/scripts/Kconfiglib"
- cp "$DLDIR/kconfiglib.py" "$WORKDIR/kernel/scripts/Kconfiglib/kconfiglib.py"
- patch -t -p1 -d "$WORKDIR/kernel" < "$DLDIR/makefile.patch"
-fi
-
-cat >"$WORKDIR/kernel/scripts/Kconfiglib/customize.py" <<"EOT"
-#!/usr/bin/env python
-import kconfiglib
-import sys
-
-def sset(sym, value=None):
- if not sym.is_modifiable():
- print("%s is not modifiable at all"%(sym.get_name()))
- return True
- if value is None and sym.get_type() in [ kconfiglib.BOOL, kconfiglib.TRISTATE ]:
- value = sym.get_upper_bound()
- old_value = sym.get_value()
- if old_value == value:
- return False
- print("CONFIG_%s=%s [was: %s]"%(sym.get_name(),value,old_value))
- sym.set_user_value(value)
- return True
-
-debug = '--debug' in sys.argv;
-conf = kconfiglib.Config(sys.argv[1])
-conf.load_config('.config')
-support_xz = conf['KERNEL_XZ'] is not None
-menu_netfs = conf['NETWORK_FILESYSTEMS']
-i = 0
-more_work = True
-while more_work and i < 10:
- more_work = False
- i += 1
- print("Kconfiglib/customize.py pass %i"%i)
-
- for sym in conf.get_symbols():
- name = sym.get_name()
-
- # Default hostname is (none) and could make FreeBSD's dhcpd complain because unallowed '()'
- if name in ['DEFAULT_HOSTNAME']:
- more_work = sset(sym, 'eficast') or more_work
-
- # Embed initrd in the EFI bootable kernel
- if name in ['INITRAMFS_SOURCE']:
- more_work = sset(sym, '../initrd/') or more_work
-
- # Make kernel directly loadable by EFI, add USB3, Dell flash
- if name in ['EFI_STUB', 'EFI_VARS', 'DELL_RBU', 'USB_XHCI_HCD', 'IKCONFIG']:
- more_work = sset(sym) or more_work
-
- # Support FUSE for ntfs-3g
- if name in ['FUSE_FS']:
- more_work = sset(sym) or more_work
-
- # Support soft RAID (linux) and hard RAID (some cards)
- if name in ['DM_RAID', 'SCSI_LOWLEVEL', 'MEGARAID_SAS', 'MEGARAID_NEWGEN']:
- more_work = sset(sym) or more_work
-
- # If --debug passed as arg, make kernel aware of virtual drivers (used for testing eficast on qemu/kvm)
- if debug and name in ['VIRTIO_PCI', 'VIRTIO_MMIO', 'VIRTIO_NET', 'VIRTIO_BLK', 'SCSI_LOWLEVEL', 'SCSI_VIRTIO']:
- more_work = sset(sym) or more_work
-
- # Disable all Network Filesystems support except after-boot NFSv3 client
- if name not in ['NET_FS', 'NFS_V3'] and menu_netfs in sym.get_referenced_symbols():
- more_work = sset(sym, 'n') or more_work
-
- # Disable thing that are unneeded or annoying for the purpose of disk cloning
- if name in ['LOGO', 'SUSPEND', 'HIBERNATION', 'CPU_FREQ', 'PCCARD', 'HAMRADIO', 'WIRELESS', 'RFKILL', 'WLAN', 'SOUND', 'NFS_V2', 'NFS_V4', 'ROOT_NFS', 'SECURITY', 'VIRTUALIZATION']:
- more_work = sset(sym, 'n') or more_work
-
- # Compress everything with XZ if available (slower, smaller)
- if support_xz:
- if name in ['KERNEL_XZ']:
- more_work = sset(sym, 'y') or more_work
- if name in ['RD_GZIP', 'RD_BZIP2', 'RD_LZMA', 'RD_LZO', 'RD_LZ4']:
- more_work = sset(sym, 'n') or more_work
-
- # Following generic actions are meant for features, not choices
- if not sym.is_choice_symbol():
-
- # Build all available net/ethernet drivers
- if sym.is_modifiable() and sym.get_type() in [ kconfiglib.BOOL, kconfiglib.TRISTATE ] \
- and True in [ ('drivers/net/ethernet' in filename) for (filename,_) in sym.get_def_locations() ]:
- more_work = sset(sym) or more_work
-
- # Try to get everything in kernel, not as a module
- if sym.get_value() == 'm' and sym.get_upper_bound() == 'y':
- more_work = sset(sym, 'y') or more_work
-
-if i == 10:
- print("ERROR : can't set some of kernel config symbols after 10 passes")
- sys.exit(1)
-else:
- sys.exit( conf.write_config(".config") )
-EOT
-chmod +x "$WORKDIR/kernel/scripts/Kconfiglib/customize.py"
-
-# Kernel prepare + make tools #
-###############################
-(
- cd "$WORKDIR/kernel"
- if [ ! -f .config ]
- then make defconfig
- if [ "x$DEVEL_MODE" == "xy" ]
- then extra="SCRIPT_ARG=--debug"
- else extra=""
- fi
- make scriptconfig SCRIPT=scripts/Kconfiglib/customize.py $extra
- fi
-)
-
-p="$WORKDIR/kernel/tools/perf/perf"
-if [ "x$DEVEL_MODE" == "xy" -a ! -f "$p" ]
-then (
- cd "$WORKDIR/kernel"
- make tools/perf
- )
-fi
-
-# Initial Ram Disk building (embed in kernel) #
-###############################################
-if [ ! -d "$WORKDIR/initrd" ]
-then mkdir -p "$WORKDIR/initrd/"{bin,dev,etc/init.d,mnt/nfs,root,proc,root,sbin,sys,run/lock,run,tmp,usr/share/udhcpc,var/log}
- $ROOTCMD cp -a /dev/{null,console,tty1} "$WORKDIR/initrd/dev/"
- $ROOTCMD chmod 1777 "$WORKDIR/initrd/run/lock"
- ln -s "/proc/mounts" "$WORKDIR/initrd/etc/mtab"
- ln -s "../run" "$WORKDIR/initrd/var/run"
- ln -s "../run/lock" "$WORKDIR/initrd/var/lock"
-fi
-
-# XXX workaround, kernel makefile's cpio preseves everything and it is not so cool for us
-$ROOTCMD chown -R $USER: "$WORKDIR/initrd"
-
-if [ ! -f "$WORKDIR/initrd/bin/busybox" ]
-then [ -f "$DLDIR/busybox" ] || $WGET -O "$DLDIR/busybox" "$BUSYBOX_BIN_URL"
- cp -a "$DLDIR/busybox" "$WORKDIR/initrd/bin/busybox"
- chmod +x "$WORKDIR/initrd/bin/busybox"
- ln -s /bin/busybox "$WORKDIR/initrd/init"
-fi
-
-if [ ! -f "$WORKDIR/initrd/etc/keys.bmap" ]
-then # When using sudo with password auth, ask and cache pass first
- $ROOTCMD true
- # The following compound command will suck at asking pass
- $ROOTCMD dumpkeys | $ROOTCMD loadkeys -b > "$WORKDIR/initrd/etc/keys.bmap"
-fi
-
-if [ ! -f "$WORKDIR/initrd/usr/sbin/partclone.restore" ]
-then (
- set +x
- PATH="$WORKDIR/kernel/tools/perf:/usr/sbin:/usr/bin:/sbin:/bin"
- # Diagnostic tools
- mkchroot "$WORKDIR/initrd" dmidecode iftop iostat lshw lspci lsblk lsusb mpstat tcpdump
- # Console tools and manpages display
- mkchroot "$WORKDIR/initrd" setterm strace groff nroff troff grotty gtbl
- # Filesystem tools
- mkchroot "$WORKDIR/initrd" mkfs mke2fs /sbin/mkfs.ext* mkntfs mkfs.ntfs mkfs.fat mkexfatfs mkfs.exfat mkfs
- mkchroot "$WORKDIR/initrd" ntfs-3g mount.ntfs mount.fuse mount.exfat-fuse mount.exfat
- mkchroot "$WORKDIR/initrd" /sbin/ntfs* /bin/ntfs*
- # Disk tools
- mkchroot "$WORKDIR/initrd" fdisk gdisk sfdisk sgdisk
- # Cloning tools
- mkchroot "$WORKDIR/initrd" /usr/sbin/partclone* efibootmgr pigz udp-receiver
- # Some dyn-loaded libraries (ldd will not display them)
- mkchroot "$WORKDIR/initrd" /lib/x86_64-linux-gnu/libusb-1.0.so.0
- # Some needed data files
- cp -ar /lib/terminfo "$WORKDIR/initrd/lib/"
- )
-fi
-
-if [ "x$DEVEL_MODE" == "xy" ]
-then (
- p="$WORKDIR/kernel/tools/perf/perf"
- cp -a "$p" "$WORKDIR/initrd/sbin/"
- set +x
- mkchroot "$WORKDIR/initrd" $(ldd "$p" | egrep -o '/.* ')
- )
-fi
-
-if [ ! -d "$WORKDIR/initrd/usr/man" ]
-then mkdir -p "$WORKDIR"/initrd/usr/man/man{1,8} "$WORKDIR"/initrd/usr/share/groff/current/font "$WORKDIR/initrd/etc/groff/"
- cp -a /usr/share/man/man1/{iostat,mpstat,strace,udp-receiver}* "$WORKDIR/initrd/usr/man/man1/"
- cp -a /usr/share/man/man8/{dmidecode,partclone,efibootmgr,ntfs,mkntfs,gdisk,iftop,tcpdump}* "$WORKDIR/initrd/usr/man/man8/"
- cp -a /usr/share/man/man8/{dmidecode,partclone,efibootmgr,gdisk,iftop,tcpdump}* "$WORKDIR/initrd/usr/man/man8/"
- cp -ra /usr/share/groff/current/font/devascii "$WORKDIR/initrd/usr/share/groff/current/font/"
- cp -ra /usr/share/groff/current/tmac "$WORKDIR/initrd/usr/share/groff/current/"
- cp -a /etc/groff/man.local "$WORKDIR/initrd/usr/share/groff/current/"
-fi
-
-p="$WORKDIR/kernel/tools/perf/perf"
-if [ "x$KERNEL_TOOLS" == "xy" -a ! -f "$p" ]
-then (
- cp -a "$p" "$WORKDIR/initrd/sbin/"
- set +x
- mkchroot "$WORKDIR/initrd" $(ldd "$p" | egrep -o '/.* ')
- )
-fi
-
-if [ ! -d "$WORKDIR/initrd/var/lib" ]
-then [ -f "$DLDIR/pci.ids" ] || $WGET -O "$DLDIR/pci.ids" "$PCI_IDS_URL"
- [ -f "$DLDIR/usb.ids" ] || $WGET -O "$DLDIR/usb.ids" "$USB_IDS_URL"
- mkdir -p "$WORKDIR/initrd/var/lib/usbutils" "$WORKDIR/initrd/usr/share/misc"
- cp "$DLDIR/usb.ids" "$WORKDIR/initrd/var/lib/usbutils/"
- cp "$DLDIR/pci.ids" "$WORKDIR/initrd/usr/share/misc/"
-fi
-
-if [ ! -d "$WORKDIR/initrd/lib/firmware" ]
-then [ -f "$DLDIR/nic-firmware.deb" ] || $WGET -O "$DLDIR/nic-firmware.deb" "$NIC_FIRMWARE_URL"
- dpkg -x "$DLDIR/nic-firmware.deb" "$WORKDIR/initrd/"
- find "$WORKDIR/initrd/lib/firmware/" \( -name 'ipw*' -o -name 'brcmfmac*' -o -name '*wifi*' \) -print0 | xargs -r0 rm -v
-fi
-
-echo $VERSION > "$WORKDIR/initrd/etc/eficast_version"
-
-cat > "$WORKDIR/initrd/etc/init.d/funcs" <<"EOF"
-# echo_color <foreground_color> <background_color> [prefix_string] <message>
-echo_color() {
- [ $# -eq 4 ] && echo -n "$3"
- setterm --foreground "$1" --background "$2"
- [ $# -eq 4 ] && echo -n "$4" || echo -n "$3"
- setterm --foreground white --background black
- echo " (eficast v"$(cat /etc/eficast_version)")"
-}
-
-# if no args, print colored message, wait 1 minute and reboot
-# if first arg is 'silent', just reboot
-eficast_end() {
- if [ "$1" -ne 'silent']
- then echo_color white green "----- EFICAST end of execution ------"
- sleep 60
- fi
- sync
- umount /dev /sys /proc
- #umount /dev/pts /dev /sys /proc
- reboot -f
-}
-
-rescue_shell() {
- echo_color white red "Something went wrong. Dropping to a shell."
- PS1='\h:\w# ' /bin/busybox sh
- eficast_end silent
-}
-
-machine_info() {
- setterm -bold on
- grep -F MemTotal: /proc/meminfo
- for k in system-manufacturer system-product-name \
- baseboard-manufacturer baseboard-product-name \
- bios-version bios-release-date
- do
- echo $k: $(dmidecode -s $k)
- done
- lspci -nn | cut -d' ' -f2- | sed -ne 's/^Ethernet[^:]*/network-card/p'
- ip -o l | sed -ne 's/[0-9]*: \([^:]*\):[^\\]*\\\s*link\/ether\s/network-mac-\1: /p'
- lsblk -dnl | sed 's/^/disk: /'
- lsusb 2>/dev/null | grep -vE hub$ | cut -d: -f2- | sed 's/^ ID/usb-device:/'
- setterm -bold off
-}
-
-network_conf() {
- ip -oneline link | grep LOWER_UP | cut -d: -f2 | grep -v sit | grep -v lo | while read iface
- do
- udhcpc -b $iface -t 15
- done
-}
-
-network_show() {
- setterm -bold on
- ip -o addr show | sed -ne 's/[0-9]*:\s*\(\S*\)\s*inet6*\s\(\S*\)\s.*$/\1: \2/p'
- setterm -bold off
-}
-
-nfs_autorun() {
- if [ -x /mnt/nfs/autorun.sh ]
- then echo_color white green "----- NFS server ready ------"
- echo_color green black "autorun.sh script will run on tty1 now"
- cd /mnt/nfs && ./autorun.sh
- else
- echo_color white red "----- NFS server NOT ready ------"
- fi
-}
-EOF
-
-cat > "$WORKDIR/initrd/etc/inittab" <<"EOF"
-# Custom init scripts
-::sysinit:/etc/init.d/rcS
-# Standard things follow
-::ctrlaltdel:/sbin/reboot -f
-::shutdown:/sbin/swapoff -a
-::shutdown:/bin/umount -a -r
-::restart:/sbin/init
-tty1::respawn:/bin/rc2_once.sh
-tty2::askfirst:/bin/sh
-tty3::askfirst:/bin/sh
-tty4::askfirst:/bin/sh
-EOF
-
-cat > "$WORKDIR/initrd/etc/init.d/rcS" <<"EOF"
-#!/bin/busybox sh
-echo -e '\033[37;43m'----- rcS script started -----'\033[0m' # Hint for user about boot steps if its hangs
-
-# Declare some funcs to have a tidy output with trace mode
-rescue_shell() {
- echo_color white red "Something went wrong. Dropping to a shell."
- PS1='\h:\w# ' setsid cttyhack /bin/busybox sh
- sync
- umount /dev /sys /proc
- #umount /dev/pts /dev /sys /proc
- reboot -f
-}
-
-mount_pseudofilesystems() {
- # Mount pseudo-filesystems
- mount -t proc none /proc || return $?
- mount -t sysfs none /sys || return $?
- mount -t devtmpfs -o size=1m none /dev || return $?
- ln -s /proc/self/fd/2 /dev/stderr
- #mkdir /dev/pts
- #mount -t devpts none /dev/pts
- return 0
-}
-
-
-network_up() {
- ip -oneline link | grep DOWN | cut -d: -f2 | grep -v sit | while read iface
- do
- echo ip link set dev $iface up
- ip link set dev $iface up
- done
-}
-
-# Trace execution
-set -v
-
-/bin/busybox --install -s||rescue_shell # Setup busybox symlinks for all applets
-mount_pseudofilesystems || rescue_shell # Setup /dev, /proc, /sys and so
-
-loadkmap < /etc/keys.bmap # Load keyboard layout
-setterm -blank 60 # screen sleep mode after 60 minutes
-
-mount -o remount -o size=80% / # Allow using most of RAM for rootfs
-
-network_up # Bring net interfaces up (no config)
-
-sleep 5 # Wait for physical link detection + STP + IPv6 DAD & Autoconf
-
-set +v
-echo -e '\033[32m/etc/init.d/rc2 script will run on tty1 now\033[0m'
-echo -e '\033[37;43m----- rcS script ended -----\033[0m' # Hint for user about boot steps if its hangs
-EOF
-chmod +x "$WORKDIR/initrd/etc/init.d/rcS"
-
-cat > "$WORKDIR/initrd/etc/init.d/rc2" <<"EOF"
-#!/bin/busybox sh
-echo -e '\033[37;43m'----- rc2 script started -----'\033[0m' # Hint for user about boot steps if its hangs
-. /etc/init.d/funcs # Load helper functions
-set -v # Trace execution
-
-network_conf
-network_show
-machine_info
-
-mount -v -t nfs -o nolock 172.16.2.28:/masters /mnt/nfs || rescue_shell
-nfs_autorun || rescue_shell
-eficast_end
-
-set +v
-echo -e '\033[37;43m'----- rc2 script ended -----'\033[0m' # Hint for user about boot steps if its hangs
-EOF
-chmod +x "$WORKDIR/initrd/etc/init.d/rc2"
-
-cat > "$WORKDIR/initrd/usr/share/udhcpc/default.script" <<"EOF"
-#!/bin/sh
-case $1 in
- bound)
- # Configure interface and default gateway
- busybox ifconfig $interface ${mtu:+mtu $mtu} $ip netmask $subnet ${broadcast:+broadcast $broadcast}
- busybox ip -4 route add default via $router dev $interface
-
- # Update resolver configuration file
- [ -n "$domain" ] && R="domain $domain" || R=""
- for i in $dns; do
- R="$R
- nameserver $i"
- done
- echo $R > /etc/resolv.conf
-
- # Update in-kernel-memory hostname
- [ -n "$hostname" ] && hostname $hostname
- ;;
- renew | deconf) echo "no action taken: $1: $interface" >&2 ;;
- leasefail | nak) echo "configuration failed: $1: $message" >&2 ;;
-esac
-EOF
-chmod +x "$WORKDIR/initrd/usr/share/udhcpc/default.script"
-
-cat > "$WORKDIR/initrd/bin/rc2_once.sh" <<"EOF"
-#!/bin/busybox sh
-if [ -f /run/rc2_once ]
-then source /etc/init.d/funcs
- rescue_shell
-else touch /run/rc2_once
- /etc/init.d/rc2
-fi
-EOF
-chmod +x "$WORKDIR/initrd/bin/rc2_once.sh"
-
-# XXX workaround, kernel makefile's cpio preseves everything and it is not so cool for us
-$ROOTCMD chown -R root: "$WORKDIR/initrd"
-
-# Kernel build (with embed initramfs) #
-#######################################
-(
- cd "$WORKDIR/kernel"
- # Workaround : some kernel version forget to update embed initramfs in certain cases
- [ -f usr/initramfs_data.cpio.gz ] && rm usr/initramfs_data.cpio.gz
- nproc=$(nproc --all)
- nproc=${nproc:-4}
- make -j $((nproc+1))
-)
-
-# Copy / run result EFI file #
-##############################
-# Workaround : direct kernel boot with libvirt/virt-manager do a chown on BOOTX64.EFI and cp won't overwrite
-[ -f "$OUTDIR/BOOTX64.EFI" ] && rm -f "$OUTDIR/BOOTX64.EFI"
-cp "$WORKDIR/kernel/arch/x86/boot/bzImage" "$OUTDIR/BOOTX64.EFI"
-
-# Prepare an USB bootable disk if $OUTUSB is set and is has at least 1 primary partition
-if [ -n "$OUTUSB" -a -b "${OUTUSB}1" ]
-then [ -d "$WORKDIR/mountpoint" ] || mkdir "$WORKDIR/mountpoint"
- mount | grep -E "^${OUTUSB}1" -q && $ROOTCMD umount "${OUTUSB}1"
- if [ "x$LEGACY" == "xy" ]
- then $ROOTCMD install-mbr "${OUTUSB}"
- $ROOTCMD sfdisk --activate=1 "$OUTUSB"
- sleep 1 # XXX do a proper udev wait
- $ROOTCMD mount "${OUTUSB}1" "$WORKDIR/mountpoint"
- $ROOTCMD tee "$WORKDIR/mountpoint/syslinux.cfg" > /dev/null <<"EOT"
-default eficast
-label eficast
- kernel /EFI/BOOT/BOOTX64.EFI
- append from=syslinux
-label debug
- kernel /EFI/BOOT/BOOTX64.EFI
- append debug ignore_loglevel bootmem_debug apic=debug show_lapic=all acpi.debug_layer=0xffffffff acpi.debug_level=0xffffffff debugpat initcall_debug pnp.debug=1 sched_debug
-label noacpi
- kernel /EFI/BOOT/BOOTX64.EFI
- append noacpi
-timeout 10
-prompt 1
-EOT
- else $ROOTCMD mount "${OUTUSB}1" "$WORKDIR/mountpoint"
- fi
- [ -d "$WORKDIR/mountpoint/BOOT/EFI" ] || $ROOTCMD mkdir -p "$WORKDIR/mountpoint/EFI/BOOT"
- $ROOTCMD cp "$OUTDIR/BOOTX64.EFI" "$WORKDIR/mountpoint/EFI/BOOT"
- $ROOTCMD umount "$WORKDIR/mountpoint"
-fi
-
-[ "x$DEVEL_MODE" == "xy" ] && qemu-system-x86_64 -M q35 -m 256 -kernel "$OUTDIR/BOOTX64.EFI" -enable-kvm -serial stdio -append "console=ttyAMA0 console=ttyS0"
-