#!/bin/sh set -u main() { local boot= local root= local rootdev= local rootpart= local b4= local b3= local b2= local b1= [ "x$(id -u)" = 'x0' ] || error 'Must be run as the superuser' if [ ${#} -eq 0 ]; then if is_chroot; then error 'Running under chroot; %s' \ 'please specify the boot and root devices' fi boot="$(mountpoint -n /boot | cut -d ' ' -f 1)" boot="$(printf '%s\n' "${boot}" | \ sed 's|^\([/a-zA-Z]*\)\([0-9]*\)|\1|')" root="$(mountpoint -n / | cut -d ' ' -f 1)" rootdev="$(printf '%s\n' "${root}" | \ sed 's|^\([/a-zA-Z]*\)\([0-9]*\)|\1|')" rootpart="$(printf '%s\n' "${root}" | \ sed 's|^\([/a-zA-Z]*\)\([0-9]*\)|\2|')" read b4 b3 b2 b1 <<-EOF $(od -An -tx1 -v -j 440 -N 4 "${rootdev}") EOF root="$(printf 'PARTUUID=%s-%02d\n' \ "${b1}${b2}${b3}${b4}" ${rootpart})" elif [ ${#} -eq 2 ]; then boot="${1}" root="${2}" else usage >&2 exit 1 fi [ -e "${boot}" ] || error 'Boot device not found' [ -e /etc/lilo.conf.in ] || \ error '/etc/lilo.conf: No such file or directory' [ -e /etc/lilo.conf ] && error '/etc/lilo.conf exists' sed "s|@BOOT@|${boot}|g; s|@ROOT@|${root}|g;" /etc/lilo.conf.in \ >/etc/lilo.conf /sbin/lilo rm /etc/lilo.conf } usage() { printf 'Usage: install-lilo [ ]\n' } error() { local fmt="${1}" shift 1 printf "install-lilo: Error: ${fmt}\n" "${@}" >&2 exit 2 } is_chroot() { awk '$5 == "/" { exit(1); };' "/proc/${$}/mountinfo" } main "${@}"