diff options
author | Thiago Perrotta | 2015-06-14 02:39:30 -0300 |
---|---|---|
committer | Thiago Perrotta | 2015-06-14 02:39:30 -0300 |
commit | 14ca9951de5f26ef0cd1e4154590898dbff9a0f0 (patch) | |
tree | edd3be516b426fb377f23ecb5f9fff16e609594d | |
download | aur-openbsd-rescueboot.tar.gz |
initial commit
-rw-r--r-- | .SRCINFO | 21 | ||||
-rwxr-xr-x | 42_openbsd | 130 | ||||
-rw-r--r-- | PKGBUILD | 41 | ||||
-rw-r--r-- | openbsd-rescueboot | 8 |
4 files changed, 200 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..083ea1952eee --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,21 @@ +pkgbase = openbsd-rescueboot + pkgdesc = Script to add OpenBSD iso images to the grub2 boot menu + pkgver = 5.6 + pkgrel = 1 + url = http://www.openbsd.org/ + arch = any + license = GPL + depends = grub + noextract = cd56.iso + source = http://openbsd.c3sl.ufpr.br/openbsd/5.6/amd64/cd56.iso + source = openbsd-rescueboot + source = 42_openbsd + md5sums = 65854da3159e33042fc7b741e9389f07 + md5sums = e2e7fc488506dff30b82ecc75a8f78ee + md5sums = 9d63b37935946bf4074b83cfaf83c41c + sha256sums = 99623a7a8c2fd26d8058a6c5b873b4e271ca97a2e8f0897209c53fea0c741b63 + sha256sums = 318ade6bf826c05142815dc2a22be75d2d37404aaaa465d91dbf11d2d36ae53b + sha256sums = fa57e40f9a1cacc915004b3dc3bb000294934f17a4396a2837ad2d971674a5ec + +pkgname = openbsd-rescueboot + diff --git a/42_openbsd b/42_openbsd new file mode 100755 index 000000000000..7e857ab4800e --- /dev/null +++ b/42_openbsd @@ -0,0 +1,130 @@ +#!/bin/sh +# Filename: 42_openbsd +# Purpose: grub-mkconfig helper script for OpenBSD rescue systems +# Authors: Grml team (grml.org), (c) Andreas Gredler <jimmy@grml.org>, Michael Prokop <mika@grml.org> +# Original creators +# Authors: Thiago Perrotta <perrotta dot thiago at poli dot ufrj dot br> +# Modified to make it work with OpenBSD +# License: This file is licensed under the GPL v2+. +################################################################################ + +set -e + +prefix=/usr +exec_prefix=${prefix} +bindir=${exec_prefix}/bin +libdir=${exec_prefix}/lib + +if [ -r ${libdir}/grub/grub-mkconfig_lib ] ; then + . ${libdir}/grub/grub-mkconfig_lib +elif [ -r /usr/share/grub/grub-mkconfig_lib ] ; then # fallback for e.g. Fedora + . /usr/share/grub/grub-mkconfig_lib +else + echo "Could not locate file grub-mkconfig_lib, please report a bug." >&2 +fi + +# default unless configured otherwise: +ISO_LOCATION="/boot/openbsd" + +if [ -r /etc/default/openbsd-rescueboot ] ; then + . /etc/default/openbsd-rescueboot +fi + +resolve_dm_name() { + retval="$1" + base=${1##*/} + for block in /sys/block /sys/class/block ; do + [ ! -d ${block}/${base}/dm ] && continue + retval="/dev/mapper/$(cat ${block}/${base}/dm/name)" + break + done + case "$retval" in + /dev/dm-*) + minor=${retval##*-} + retval="/dev/mapper/$(dmsetup info -C --noheadings -o name -j 253 -m $minor)" + ;; + esac + + echo "$retval" +} + +get_dependencies() { + device=${1} + if [ -z ${device} ] ; then + return + fi + device=$(readlink -f ${device}) + case "$device" in + /dev/mapper/*) + device="/dev/dm-$(dmsetup info -C --noheadings -o minor "$device")" + ;; + esac + + base=${device##*/} + dependencies="" + additional_dependencies="" + for block in /sys/block /sys/class/block ; do + [ ! -d ${block}/${base}/slaves ] && continue + for file in ${block}/${base}/slaves/* ; do + dep_name="/dev/${file##*/}" + dep_name=$(resolve_dm_name ${dep_name}) + + # resolve recursively all dependencies + additional_dependencies=$(get_dependencies ${dep_name}) + + dependencies="$dependencies $additional_dependencies $dep_name" + done + break + done + echo $dependencies + +} + + + +iso_list="" +for file in "${ISO_LOCATION}"/*.iso ; do + if grub_file_is_not_garbage "$file" ; then + iso_list="$iso_list $file " + fi +done + +for openbsdiso in $iso_list ; do + rel_dirname="$(make_system_path_relative_to_its_root $(dirname $openbsdiso))" + openbsd="$(basename $openbsdiso)" + device="$(${grub_probe} -t device ${openbsdiso})" + + additional_param="" + + case "$device" in + /dev/mapper*|/dev/md*) + dependencies=$(get_dependencies ${device}) + dep_string="" + for dep in $dependencies $device ; do + dep_string="$dep_string,$dep" + done + dep_string=${dep_string#,} + additional_param="live-media=$dep_string" + ;; + esac + + echo "Found OpenBSD ISO image: $openbsdiso" >&2 + title="OpenBSD Rescue System ($openbsd)" + grub_prep=$(prepare_grub_to_access_device "$device" | sed -e "s/^/ /") + + cat << EOF +menuentry "${title}" { +${grub_prep} + iso_path="${rel_dirname}/${openbsd}" + export iso_path + kernelopts=" $CUSTOM_BOOTOPTIONS $additional_param " + export kernelopts + loopback loop "${rel_dirname}/$openbsd" + set root=(loop) + configfile /boot/grub/loopback.cfg + kopenbsd /<version_string>/amd64/bsd.rd +} +EOF +done + +## END OF FILE ################################################################# diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..0aed1b42cede --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Thiago Perrotta <perrotta dot thiago at poli dot ufrj dot br> +# Originally based on the grml-rescueboot PKGBUILD + +pkgname=openbsd-rescueboot +# this should be the wanted OpenBSD version +pkgver=5.6 +pkgrel=1 +pkgdesc="Script to add OpenBSD iso images to the grub2 boot menu" +url="http://www.openbsd.org/" +arch=('any') +license=('GPL') +depends=('grub') +source=("http://openbsd.c3sl.ufpr.br/openbsd/${pkgver}/amd64/cd${pkgver/./}.iso" + "openbsd-rescueboot" + "42_openbsd") +md5sums=('65854da3159e33042fc7b741e9389f07' + 'e2e7fc488506dff30b82ecc75a8f78ee' + '9d63b37935946bf4074b83cfaf83c41c') +sha256sums=('99623a7a8c2fd26d8058a6c5b873b4e271ca97a2e8f0897209c53fea0c741b63' + '318ade6bf826c05142815dc2a22be75d2d37404aaaa465d91dbf11d2d36ae53b' + 'fa57e40f9a1cacc915004b3dc3bb000294934f17a4396a2837ad2d971674a5ec') +noextract=("cd${pkgver/./}.iso") + +prepare() { + cd "${srcdir}/" + + # adjust path of grub-mkconfig_lib + sed -i 's/${libdir}\/grub/${prefix}\/share\/grub/g' 42_openbsd + + # adjust version + sed -i "s/<version_string>/${pkgver}/g" 42_openbsd +} + +package() { + cd "${srcdir}/" + + install -Dm755 42_openbsd ${pkgdir}/etc/grub.d/42_openbsd + install -Dm644 ${pkgname} ${pkgdir}/etc/default/${pkgname} + + install -Dm644 "cd${pkgver/./}.iso" "${pkgdir}/boot/openbsd/cd${pkgver/./}.iso" +} diff --git a/openbsd-rescueboot b/openbsd-rescueboot new file mode 100644 index 000000000000..75640ceb5124 --- /dev/null +++ b/openbsd-rescueboot @@ -0,0 +1,8 @@ +## Configuration file for package openbsd-rescueboot. + +# Location of ISOs: +# ISO_LOCATION="/boot/openbsd/" + +# To set any specific bootoptions for rescue images +# present in /boot/openbsd just set and enable the following option: +# CUSTOM_BOOTOPTIONS="ssh=password lang=de" |