diff --git a/merge/README.txt b/merge/README.txt index 70ebc0f..28d8727 100644 --- a/merge/README.txt +++ b/merge/README.txt @@ -49,6 +49,7 @@ merge/sys-apps/portage/syncmodule/calculate содержит код, котор --- Заметки по шаблонам --- Нужно проверить обрабатываются ли format='regex' с пустым содержимым Обрабатывается ли корректно параметр name='' +Проверить сравнение с версией в dracut 048 ---Учесть при внедрении--- Удалены шаблоны для plymouth 0.9.4, учесть возможность того, что останутся устаревшие версии diff --git a/merge/sys-kernel/.calculate_directory b/merge/sys-kernel/.calculate_directory new file mode 100644 index 0000000..fe9987a --- /dev/null +++ b/merge/sys-kernel/.calculate_directory @@ -0,0 +1 @@ +{% calculate append='skip' %} diff --git a/merge/sys-kernel/calculate-sources/.calculate_directory b/merge/sys-kernel/calculate-sources/.calculate_directory new file mode 100644 index 0000000..ad42ff9 --- /dev/null +++ b/merge/sys-kernel/calculate-sources/.calculate_directory @@ -0,0 +1 @@ +{% calculate path='/etc', name='local.d', package='calculate-sources' %} diff --git a/merge/sys-kernel/calculate-sources/Module.symvers b/merge/sys-kernel/calculate-sources/Module.symvers new file mode 100644 index 0000000..035878d --- /dev/null +++ b/merge/sys-kernel/calculate-sources/Module.symvers @@ -0,0 +1,11 @@ +{% calculate exec='/bin/bash', install.os.arch.machine == 'i686', action='!disk' %} + +for fn in /usr/src/*/Module.symvers +do + if [[ -f $fn ]] + then + sed -ri 's/(alternatives_patched.*SYMBOL)_GPL/\1/' $fn + fi +done + +true diff --git a/merge/sys-kernel/calculate-sources/amdgpu.conf b/merge/sys-kernel/calculate-sources/amdgpu.conf new file mode 100644 index 0000000..35c49d3 --- /dev/null +++ b/merge/sys-kernel/calculate-sources/amdgpu.conf @@ -0,0 +1,3 @@ +{% calculate path='/etc/modprobe.d' %} + +options amdgpu cik_support=1 si_support=1 diff --git a/merge/sys-kernel/calculate-sources/vboxvideo.conf b/merge/sys-kernel/calculate-sources/vboxvideo.conf new file mode 100644 index 0000000..a17357e --- /dev/null +++ b/merge/sys-kernel/calculate-sources/vboxvideo.conf @@ -0,0 +1,3 @@ +{% calculate path='/etc/modprobe.d' %} + +options vboxvideo modeset=0 diff --git a/merge/sys-kernel/dracut/.calculate_directory b/merge/sys-kernel/dracut/.calculate_directory new file mode 100644 index 0000000..9ba3846 --- /dev/null +++ b/merge/sys-kernel/dracut/.calculate_directory @@ -0,0 +1 @@ +{% calculate path='/usr/lib/dracut', name='modules.d', package='sys-kernel/dracut' %} diff --git a/merge/sys-kernel/dracut/10i18n/module-setup.sh b/merge/sys-kernel/dracut/10i18n/module-setup.sh new file mode 100644 index 0000000..1629226 --- /dev/null +++ b/merge/sys-kernel/dracut/10i18n/module-setup.sh @@ -0,0 +1,3 @@ +{% calculate format='regex' %} +if \[\[ \$\{hostonly\} \]\] \&\& (! \[\[ \$\{i18n_install_all\}) +if \1 diff --git a/merge/sys-kernel/dracut/10video/module-setup.sh b/merge/sys-kernel/dracut/10video/module-setup.sh new file mode 100644 index 0000000..b5b4de2 --- /dev/null +++ b/merge/sys-kernel/dracut/10video/module-setup.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh +# +# Licensed under the GPLv2 +# +# Copyright 2013 Red Hat, Inc. +# Peter Jones + +check() { + return 255 +} + +depends() { + return 0 +} + +installkernel() { + instmods radeon uvesafb nouveau i915 amdgpu +} + +install() { + inst_binary /usr/bin/cut + inst_binary /bin/grep + inst_script "$moddir/select-video.sh" "/sbin/select-video.sh" + inst_hook pre-pivot 50 "$moddir/system-video-blacklist.sh" + inst_hook cmdline 50 "$moddir/parse-cmdline.sh" + mkdir -p ${initdir}/etc/modprobe.d + if [ -f /etc/modprobe.d/amdgpu.conf ]; then + inst_multiple /etc/modprobe.d/amdgpu.conf + fi + if [ -f /etc/modprobe.d/vboxvideo.conf ]; then + inst_multiple /etc/modprobe.d/vboxvideo.conf + fi +} diff --git a/merge/sys-kernel/dracut/10video/parse-cmdline.sh b/merge/sys-kernel/dracut/10video/parse-cmdline.sh new file mode 100755 index 0000000..d1ef273 --- /dev/null +++ b/merge/sys-kernel/dracut/10video/parse-cmdline.sh @@ -0,0 +1,46 @@ +#!/bin/sh +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh + +[ -z "$calculate" ] && calculate=$(getarg calculate=) +[ -z "$video" ] && video=$(getarg video=) +[ -z "$bootimage" ] && bootimage=$(getarg BOOT_IMAGE=) + +[ -z "$calculate" ] && [ -z "$video" ] && return + +if [[ $bootimage != ${bootimage/SafeMode/} ]] +then + echo "rd.plymouth=0" >>/etc/cmdline.d/90-noplymouth.conf +fi + +if [ -n "$video" ] +then + for i in ${video//,/ } + do + if [ -z "${i//[0-9-x@]}" ] + then + videoresolution=${i} + fi + done +fi + +if [[ "${calculate//:/}" != "${calculate}" ]] +then + for i in ${calculate//,/ } + do + case "${i}" in + video:*) + videodrv=`echo "${i}" | cut -s -d: -f2-` + ;; + resolution:*) + resolution=`echo "${i}" | cut -s -d: -f2-` + if [ -n "${resolution}" -a "${resolution}" != "auto" ] + then + videoresolution=${resolution}-32 + fi + ;; + esac + done +fi + +/sbin/select-video.sh /etc/modprobe.d/video-blacklist.conf $videodrv diff --git a/merge/sys-kernel/dracut/10video/select-video.sh b/merge/sys-kernel/dracut/10video/select-video.sh new file mode 100644 index 0000000..8cb171c --- /dev/null +++ b/merge/sys-kernel/dracut/10video/select-video.sh @@ -0,0 +1,31 @@ +{% calculate chmod='755' %} +#!/bin/bash + +blacklistfile=$1 +videomodule=$2 + +if [[ -n $videomodule ]] +then + cat >$blacklistfile <>$blacklistfile + ;; + radeon) + echo "blacklist amdgpu" >>$blacklistfile + ;; + nvidia) + echo "blacklist nouveau" >>$blacklistfile + ;; + amdgpu) + echo "blacklist radeon" >>$blacklistfile + ;; + esac +else + rm -f $blacklistfile +fi diff --git a/merge/sys-kernel/dracut/10video/system-video-blacklist.sh b/merge/sys-kernel/dracut/10video/system-video-blacklist.sh new file mode 100755 index 0000000..2fe6414 --- /dev/null +++ b/merge/sys-kernel/dracut/10video/system-video-blacklist.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if mount | grep " /sysroot " | grep ro, &>/dev/null +then + mount -o rw,remount ${NEWROOT} &>/dev/null + /sbin/select-video.sh ${NEWROOT}/etc/modprobe.d/video-blacklist.conf $videodrv + mount -o ro,remount ${NEWROOT} &>/dev/null +else + /sbin/select-video.sh ${NEWROOT}/etc/modprobe.d/video-blacklist.conf $videodrv +fi diff --git a/merge/sys-kernel/dracut/50plymouth/module-setup.sh b/merge/sys-kernel/dracut/50plymouth/module-setup.sh new file mode 100644 index 0000000..786bbfd --- /dev/null +++ b/merge/sys-kernel/dracut/50plymouth/module-setup.sh @@ -0,0 +1,8 @@ +{% calculate format='regex' %} +(inst_hook emergency 50 "\$moddir"/plymouth-emergency.sh +)\s* +(\s*)(inst_multiple readlink) +\1 +\2inst_rules /lib/udev/rules.d/71-udev-seat.rules + +\2\3 diff --git a/merge/sys-kernel/dracut/50plymouth/plymouth-pretrigger.sh b/merge/sys-kernel/dracut/50plymouth/plymouth-pretrigger.sh new file mode 100644 index 0000000..879cab7 --- /dev/null +++ b/merge/sys-kernel/dracut/50plymouth/plymouth-pretrigger.sh @@ -0,0 +1,10 @@ +{% calculate format='regex' %} +\n(\s+)(plymouthd)(\s*--attach-to-session)(\s*--pid-file\s*\S+) + +\1if getargbool 0 quiet +\1then +\1\1\2\4\3 +\1else +\1\1\2\4 +\1fi + diff --git a/merge/sys-kernel/dracut/80calculate/copy-resolv.sh b/merge/sys-kernel/dracut/80calculate/copy-resolv.sh new file mode 100755 index 0000000..7e95978 --- /dev/null +++ b/merge/sys-kernel/dracut/80calculate/copy-resolv.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +if [[ -n $netroot ]] +then + cp -a /etc/resolv.conf ${NEWROOT}/etc/ +fi diff --git a/merge/sys-kernel/dracut/80calculate/iso-scan-rootok.sh b/merge/sys-kernel/dracut/80calculate/iso-scan-rootok.sh new file mode 100755 index 0000000..40c3e02 --- /dev/null +++ b/merge/sys-kernel/dracut/80calculate/iso-scan-rootok.sh @@ -0,0 +1,15 @@ +{% calculate chmod='0755' %} +#!/bin/sh +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh +# live images are specified with +# root=live:backingdev + +isofile=$(getarg iso-scan/filename) + +if [ -n "$isofile" -a "$root" = "live" ]; then + rootok=1 +{% if pkg() >= '044' %} + wait_for_dev -n /dev/mapper/live-rw +{% endif %} +fi diff --git a/merge/sys-kernel/dracut/80calculate/iso-scan.sh b/merge/sys-kernel/dracut/80calculate/iso-scan.sh new file mode 100755 index 0000000..ea0c122 --- /dev/null +++ b/merge/sys-kernel/dracut/80calculate/iso-scan.sh @@ -0,0 +1,43 @@ +{% calculate chmod='755' %} +#!/bin/sh +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh + +type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh + +PATH=/usr/sbin:/usr/bin:/sbin:/bin + +isofile=$1 + +[ -z "$isofile" ] && exit 1 + +ismounted "/run/initramfs/isoscan" && exit 0 + +mkdir -p "/run/initramfs/isoscan" + +do_iso_scan() { + local _name + local dev + for dev in /dev/disk/by-uuid/*; do + _name=$(dev_unit_name "$dev") + [ -e /tmp/isoscan-${_name} ] && continue + > /tmp/isoscan-${_name} + mount -t auto -o ro "$dev" "/run/initramfs/isoscan" || continue + if [ -f "/run/initramfs/isoscan/$isofile" ]; then + if [ "$root" == "live" ]; then + /sbin/initqueue --settled --onetime --unique /sbin/dmsquash-live-root `losetup -f --show "/run/initramfs/isoscan/$isofile"` + else + losetup -f --show "/run/initramfs/isoscan/$isofile" + fi + rm -f -- "$job" + exit 0 + else + umount "/run/initramfs/isoscan" + fi + done +} + +do_iso_scan + +rmdir "/run/initramfs/isoscan" +exit 1 diff --git a/merge/sys-kernel/dracut/80calculate/live-fallback.sh b/merge/sys-kernel/dracut/80calculate/live-fallback.sh new file mode 100755 index 0000000..91fd097 --- /dev/null +++ b/merge/sys-kernel/dracut/80calculate/live-fallback.sh @@ -0,0 +1,11 @@ +#!/bin/sh +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh + +type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh + +PATH=/usr/sbin:/usr/bin:/sbin:/bin + +[[ $root =~ ^live: ]] && /sbin/live-scan && cancel_wait_for_dev "${root#live:}" + +[ -e "$job" ] && rm -f "$job" diff --git a/merge/sys-kernel/dracut/80calculate/live-scan.sh b/merge/sys-kernel/dracut/80calculate/live-scan.sh new file mode 100755 index 0000000..1deb94a --- /dev/null +++ b/merge/sys-kernel/dracut/80calculate/live-scan.sh @@ -0,0 +1,41 @@ +{% calculate chmod='0755' %} +#!/bin/sh +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh + +type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh + +PATH=/usr/sbin:/usr/bin:/sbin:/bin + +LIVEPATH=/run/initramfs/livescan + +ismounted "$LIVEPATH" && exit 0 + +mkdir -p "$LIVEPATH" + +check_for_live() { + [[ -f $LIVEPATH/livecd ]] && cat "$LIVEPATH/livecd" | grep -q calculate &>/dev/null +} + +do_live_scan() { + local _name + local dev + for dev in /dev/disk/by-uuid/*; do + _name=$(dev_unit_name "$dev") + [ -e /tmp/livescan-${_name} ] && continue + > /tmp/livescan-${_name} + mount -t auto -o ro "$dev" "$LIVEPATH" || continue + if check_for_live; then + umount "$LIVEPATH" + /sbin/initqueue --settled --onetime --unique /sbin/dmsquash-live-root $dev + exit 0 + else + umount "$LIVEPATH" + fi + done +} + +do_live_scan + +rmdir "/run/initramfs/livescan" +exit 1 diff --git a/merge/sys-kernel/dracut/80calculate/module-setup.sh b/merge/sys-kernel/dracut/80calculate/module-setup.sh new file mode 100755 index 0000000..2560090 --- /dev/null +++ b/merge/sys-kernel/dracut/80calculate/module-setup.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh + +check() { + return 255 +} + +depends() { + # if dmsetup is not installed, then we cannot support fedora/red hat + # style live images +{% if pkg() < '049' %} + [[ $hostonly ]] || echo rootfs-block dmsquash-live +{% else %} + [[ $hostonly ]] || echo rootfs-block dmsquash-live network-legacy +{% endif %} + return 0 +} + +installkernel() { + [[ $hostonly ]] || instmods squashfs loop iso9660 + instmods =drivers/usb/host =drivers/usb/phy +} + +install() { + if ! [[ $hostonly ]] + then + inst_multiple umount dmsetup blkid dd losetup grep blockdev cat cut sed rmdir pidof + inst_hook mount 20 "$moddir/scratch-mount-root.sh" + inst_hook cmdline 31 "$moddir/iso-scan-rootok.sh" + inst_hook pre-pivot 50 "$moddir/copy-resolv.sh" + inst_script "$moddir/scratch-live-root.sh" "/sbin/dmsquash-live-root" + inst_script "$moddir/mount-squashfs.sh" "/sbin/mount-squashfs" + inst_script "$moddir/iso-scan.sh" "/sbin/iso-scan" + inst_script "$moddir/live-scan.sh" "/sbin/live-scan" + inst_script "$moddir/nfsroot.sh" "/sbin/nfsroot" + inst_hook initqueue/timeout 95 "$moddir/live-fallback.sh" + fi + echo rd.skipfsck=1 >> "${initdir}/etc/cmdline.d/95-skipfsck.conf" +} diff --git a/merge/sys-kernel/dracut/80calculate/mount-squashfs.sh b/merge/sys-kernel/dracut/80calculate/mount-squashfs.sh new file mode 100755 index 0000000..12e1b5e --- /dev/null +++ b/merge/sys-kernel/dracut/80calculate/mount-squashfs.sh @@ -0,0 +1,93 @@ +{% calculate chmod='755' %} +#!/bin/sh +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh + +type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh + +PATH=/usr/sbin:/usr/bin:/sbin:/bin + +live_dir=$(getarg rd.live.dir -d live_dir ) +squash_image=$(getarg rd.live.squashimg -d loop) +[ -z "$squash_image" ] && squash_image="livecd.squashfs" + +getargbool 0 rd.live.ram -d -y live_ram -d -y docache && live_ram="yes" + +# we might have an embedded fs image on squashfs (compressed live) +if [ -e /run/initramfs/live/${live_dir}/${squash_image} ]; then + SQUASHED="/run/initramfs/live/${live_dir}/${squash_image}" +fi + +do_cache() { + allmemory=0 + for i in $(cat /proc/meminfo | grep -e ^MemFree -e ^Cached | \ + cut -d: -f2 | cut -dk -f1 | sed -e "s/^\s*//") ; + do + allmemory=$((${allmemory} + $i)) + done + + # getting size tmpfs of default + let curtfs=${allmemory}/2 + + # getting size of image + let imagesize=`ls -la ${SQUASHED} | sed -r -n 's/(\S*\s*){4}(\S*).*/\2/p'`/20000*21 + let addon=${imagesize}/7 + if [[ ${curtfs} -gt $(( ${imagesize} + ${addon} )) ]]; + then + newsize=${curtfs} + else + newsize=$(( ${addon} + ${imagesize} )) + fi + + if [[ ${newsize} -lt ${allmemory} ]]; + then + LIVECACHE=/run/initramfs/livecache + mkdir -m 0755 -p $LIVECACHE + mount -o remount,size=${newsize}k -t tmpfs tmpfs /run + echo "Copying live image to RAM..." + echo "(this may take a few minutes)" + dd if=$SQUASHED of=${LIVECACHE}/livecd.squashfs bs=512 2> /dev/null + if [ $? -ne 0 ] + then + bad_msg "Failed to cache the loop file! Lack of space?" + umount ${LIVECACHE} + else + SQUASHED="${LIVECACHE}/livecd.squashfs" + echo "Unmounting media from /var/initramfs/live" + umount -nd /run/initramfs/live + [[ -d /run/initramfs/isoscan ]] && umount -nd /run/initramfs/isoscan + fi + else + echo "Too low memory for cache the loop file." 1>&2 + fi +} + +if [ -e "$SQUASHED" ] ; then + if [ -n "$live_ram" ] ; then + do_cache + fi + + SQUASHED_LOOPDEV=$( losetup -f ) + losetup -r $SQUASHED_LOOPDEV $SQUASHED + mkdir -m 0755 -p /run/initramfs/squashfs + mount -n -t squashfs -o ro $SQUASHED_LOOPDEV /run/initramfs/squashfs +fi + +ROOTFLAGS="$(getarg rootflags)" +if [ -n "$ROOTFLAGS" ]; then + ROOTFLAGS="-o $ROOTFLAGS" +else + ROOTFLAGS="-o udba=reval,br:/overlay=rw,/run/initramfs/squashfs=ro" +fi + +ln -s ${SQUASHED_LOOPDEV} /dev/mapper/live-rw +{% if pkg() >= '045' %} +ln -s ${SQUASHED_LOOPDEV} /run/rootfsbase +{% endif %} +{% if pkg() >= '049' %} +ln -s ${SQUASHED_LOOPDEV} /dev/root +{% endif %} + +need_shutdown + +exit 0 diff --git a/merge/sys-kernel/dracut/80calculate/nfsroot.sh b/merge/sys-kernel/dracut/80calculate/nfsroot.sh new file mode 100755 index 0000000..17735e2 --- /dev/null +++ b/merge/sys-kernel/dracut/80calculate/nfsroot.sh @@ -0,0 +1,27 @@ +{% calculate chmod='0755' %} +#!/bin/sh +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh + +type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh +. /lib/nfs-lib.sh + +[ "$#" = 3 ] || exit 1 + +# root is in the form root=nfs[4]:[server:]path[:options], either from +# cmdline or dhcp root-path +netif="$1" +root="$2" +NEWROOT="$3" + +nfs_to_var $root $netif +[ -z "$server" ] && die "Required parameter 'server' is missing" + +mkdir -m 0755 -p /run/initramfs/live + +mount_nfs $root /run/initramfs/live $netif && { [ -e /dev/root ] || ln -s null /dev/root ; } + +/sbin/mount-squashfs +echo '[ -e /run/initramfs/squashfs/proc ]' > $hookdir/initqueue/finished/nfsroot.sh + +need_shutdown diff --git a/merge/sys-kernel/dracut/80calculate/scratch-live-root.sh b/merge/sys-kernel/dracut/80calculate/scratch-live-root.sh new file mode 100755 index 0000000..fbc6a4f --- /dev/null +++ b/merge/sys-kernel/dracut/80calculate/scratch-live-root.sh @@ -0,0 +1,37 @@ +{% calculate chmod='755' %} +#!/bin/sh +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh + +type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh + +PATH=/usr/sbin:/usr/bin:/sbin:/bin + +if getargbool 0 rd.live.debug -n -y rdlivedebug; then + exec > /tmp/liveroot.$$.out + exec 2>> /tmp/liveroot.$$.out + set -x +fi + +[ -z "$1" ] && exit 1 +livedev="$1" + +# parse various live image specific options that make sense to be +# specified as their own things + +ln -s $livedev /run/initramfs/livedev + +modprobe squashfs +CMDLINE=$(getcmdline) +for arg in $CMDLINE; do case $arg in ro|rw) liverw=$arg ;; esac; done +# mount the backing of the live image first +mkdir -m 0755 -p /run/initramfs/live +mount -n -t $fstype -o ${liverw:-ro} $livedev /run/initramfs/live +if [ "$?" != "0" ]; then + die "Failed to mount block device of live image" + exit 1 +fi + +/sbin/mount-squashfs + +exit 0 diff --git a/merge/sys-kernel/dracut/80calculate/scratch-mount-root.sh b/merge/sys-kernel/dracut/80calculate/scratch-mount-root.sh new file mode 100755 index 0000000..37b9c48 --- /dev/null +++ b/merge/sys-kernel/dracut/80calculate/scratch-mount-root.sh @@ -0,0 +1,58 @@ +{% calculate chmod='755' %} +#!/bin/sh +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh + +type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh + +mount_live_root_aufs() { + mkdir /run/initramfs/workspace + mountoption="-o udba=reval,br:/run/initramfs/workspace=rw:/run/initramfs/squashfs=ro" + if getargbool 0 scratch + then + mkdir /run/initramfs/delta + mountoption="-o udba=reval,br:/run/initramfs/workspace=rw:/run/initramfs/delta=ro+wh:/run/initramfs/squashfs=ro" + fi + mount -t aufs $mountoption none $NEWROOT + if getargbool 0 scratch + then + mkdir /run/builder + mountoption="-o udba=reval,br:/run/initramfs/delta=rw:/run/initramfs/squashfs=ro" + mount -t aufs $mountoption none /run/builder + fi +} + +mount_live_root_overlay() { + lowerdir=/run/initramfs/squashfs + if getargbool 0 scratch + then + upperdir=/run/initramfs/delta + builderdir=/run/builder + mkdir $upperdir + mkdir $builderdir + mkdir ${upperdir}-workdir + mount -t overlay -o lowerdir=${lowerdir},upperdir=${upperdir},workdir=${upperdir}-workdir none $builderdir + lowerdir=$builderdir + fi + upperdir=/run/initramfs/workspace + mkdir ${upperdir} + mkdir ${upperdir}-workdir + mount -t overlay -o lowerdir=${lowerdir},upperdir=${upperdir},workdir=${upperdir}-workdir none $NEWROOT +} + +mount_live_root() { + local module_found= + for typefs in overlay aufs + do + if ! mount -t $typefs -o remount none /init 2>&1 | grep -q "unknown filesystem" + then + mount_live_root_$typefs + module_found=1 + break + fi + done + [[ -z $module_found ]] && + die "Cannot mount layered filesystem! Compile the kernel with CONFIG_OVERLAY_FS!" +} + +[ -n "$root" -a -z "${root%%live*}" -o "$root" = "nfs" ] && mount_live_root diff --git a/merge/sys-kernel/dracut/95nfs/module-setup.sh b/merge/sys-kernel/dracut/95nfs/module-setup.sh new file mode 100644 index 0000000..fbe539e --- /dev/null +++ b/merge/sys-kernel/dracut/95nfs/module-setup.sh @@ -0,0 +1,3 @@ +{% calculate format='regex', multiline, exists('/usr/lib/dracut/modules.d/95nfs/module-setup.sh') %} +instmods.*$ +instmods =net/sunrpc =fs/nfs ipv6 nfs_acl nfs_layout_nfsv41_files =drivers/crypto/ccp diff --git a/merge/sys-kernel/dracut/95tuxonice/module-setup.sh b/merge/sys-kernel/dracut/95tuxonice/module-setup.sh new file mode 100644 index 0000000..a9d995d --- /dev/null +++ b/merge/sys-kernel/dracut/95tuxonice/module-setup.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +install() { + # install userui + [ -e /sbin/tuxoniceui ] && inst tuxoniceui || true + + # install splash graphics if exists + my_inst_dir() { + inst_dir $1 + for i in $1/*; do + if [ -d "$i" ]; then + my_inst_dir "$i" + else + inst "$i" + fi + done + } + [ -e /etc/splash/tuxonice ] && my_inst_dir /etc/splash/tuxonice + [ -e /etc/splash/suspend2 ] && my_inst_dir /etc/splash/suspend2 + + inst_hook pre-udev 30 "$moddir/tuxonice-prepare.sh" + inst_hook pre-mount 30 "$moddir/tuxonice-lvmfix.sh" + inst "$moddir"/tuxonice-resumecheck.sh /sbin/tuxonice-resumecheck.sh +} diff --git a/merge/sys-kernel/dracut/95tuxonice/tuxonice-lvmfix.sh b/merge/sys-kernel/dracut/95tuxonice/tuxonice-lvmfix.sh new file mode 100644 index 0000000..c300158 --- /dev/null +++ b/merge/sys-kernel/dracut/95tuxonice/tuxonice-lvmfix.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# fixes an asynchronous problem with lvm/dracut while resuming +# for details see https://bugzilla.redhat.com/show_bug.cgi?id=830447 + +. /lib/dracut-lib.sh +info "TuxOnIce lvmfix started" + +udevadm settle --timeout=30 + +info "TuxOnIce udev should be now fully settled" + +return 0 + diff --git a/merge/sys-kernel/dracut/95tuxonice/tuxonice-prepare.sh b/merge/sys-kernel/dracut/95tuxonice/tuxonice-prepare.sh new file mode 100644 index 0000000..b96c89d --- /dev/null +++ b/merge/sys-kernel/dracut/95tuxonice/tuxonice-prepare.sh @@ -0,0 +1,98 @@ +#!/bin/sh +# prepare parameters for ToI + +. /lib/dracut-lib.sh +info "TuxOnIce premodule started" + +# first check if ToI support is available +if [ ! -d /sys/power/tuxonice ]; then + info "Kernel has no tuxonice support, aborting" + return 0 +else + info "Kernel has tuxonice support, continuing" +fi + +if getarg noresume2; then + warn "noresume2 was specified, aborting" + return 0 +fi + +# prepare UserUI +info "Setting up UserUI" +UI="/sbin/tuxoniceui" +UIOPTS="" + +if [ -e "/sys/class/graphics/fb0/state" -a -e "/etc/splash/tuxonice/" ]; then + UIOPTS="$UIOPTS -f" +fi + +SYSFS_TUI_UI=/sys/power/tuxonice/user_interface +PROGRAM_PATH=${SYSFS_TUI_UI}/program +ENABLED_PATH=${SYSFS_TUI_UI}/enabled +if [ -e "$UI" ] && [ -e "$PROGRAM_PATH" ] && [ -e "$ENABLED_PATH" ]; then + info "Using $UI with $UIOPTS" + echo "$UI $UIOPTS" >$PROGRAM_PATH + echo 1 >$ENABLED_PATH +else + if [ -e "$ENABLED_PATH" ]; then + echo 0 >$ENABLED_PATH + fi +fi + +# install udev rule for resume parameter +if resume=$(getarg resume=) && ! getarg noresume2; then + resume="${resume#file:}" + resume="${resume#swap:}" + resume="${resume%:*}" +else + unset resume +fi + +info "Installing udev rule for resume parameter" +case "$resume" in + LABEL=*) \ + resume="$(echo $resume | sed 's,/,\\x2f,g')" + { + echo "SUBSYSTEM==\"block\", ACTION==\"add|change\", ENV{ID_FS_LABEL}==\"${resume#LABEL=}\", " \ + " RUN+=\"/sbin/tuxonice-resumecheck.sh '/dev/%k' 'resume'\""; + } >> /etc/udev/rules.d/99-tuxonice.rules + ;; + UUID=*) \ + { + echo "SUBSYSTEM==\"block\", ACTION==\"add|change\", ENV{ID_FS_UUID}==\"${resume#UUID=}\", " \ + " RUN+=\"/sbin/tuxonice-resumecheck.sh '/dev/%k' 'resume'\""; + } >> /etc/udev/rules.d/99-tuxonice.rules + ;; + PARTUUID=*) \ + { + echo "SUBSYSTEM==\"block\", ACTION==\"add|change\", ENV{ID_PART_ENTRY_UUID}==\"${resume#PARTUUID=}\", " \ + " RUN+=\"/sbin/tuxonice-resumecheck.sh '/dev/%k' 'resume'\""; + } >> /etc/udev/rules.d/99-tuxonice.rules + ;; + *) \ + { + echo "SUBSYSTEM==\"block\", ACTION==\"add|change\", SYMLINK==\"${resume#/dev/}\", " \ + " RUN+=\"/sbin/tuxonice-resumecheck.sh '/dev/%k' 'resume'\""; + } >> /etc/udev/rules.d/99-tuxonice.rules + { + echo "SUBSYSTEM==\"block\", ACTION==\"add|change\", KERNEL==\"${resume#/dev/}\", " \ + " RUN+=\"/sbin/tuxonice-resumecheck.sh '/dev/%k' 'resume'\""; + } >> /etc/udev/rules.d/99-tuxonice.rules + ;; +esac + + +# install udev rule for resuming +info "Installing udev rule for ToI resume" +{ +echo "SUBSYSTEM==\"block\", ACTION==\"add|change\", ENV{ID_FS_TYPE}==\"suspend|swsuspend|swsupend\", " \ + " RUN+=\"/sbin/tuxonice-resumecheck.sh '/dev/%k' 'suspend'\""; +} >> /etc/udev/rules.d/99-tuxonice.rules + +# install udev rule to add swapdevice as hibernation target +info "Installing udev rule for ToI swap detection" +{ +echo "SUBSYSTEM==\"block\", ACTION==\"add|change\", ENV{ID_FS_TYPE}==\"swap\", " \ + " RUN+=\"/sbin/tuxonice-resumecheck.sh '/dev/%k' 'swap'\""; +} >> /etc/udev/rules.d/99-tuxonice.rules + diff --git a/merge/sys-kernel/dracut/95tuxonice/tuxonice-resumecheck.sh b/merge/sys-kernel/dracut/95tuxonice/tuxonice-resumecheck.sh new file mode 100644 index 0000000..4bad65c --- /dev/null +++ b/merge/sys-kernel/dracut/95tuxonice/tuxonice-resumecheck.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +if [ "$2" = "suspend" ]; then + echo "<3>Dracut: found ToI/suspend signature in $1, trying to resume" > /dev/kmsg + OLDDEV=$(cat /sys/power/tuxonice/resume) + echo "swap:$1" >/sys/power/tuxonice/resume + echo 1 >/sys/power/tuxonice/do_resume + echo "<3>Dracut: no resume operation occured, restoring old value ($OLDDEV)" >/dev/kmsg + echo "$OLDDEV" >/sys/power/tuxonice/resume +elif [ "$2" = "swap" ]; then + echo "<3>Dracut: found swap signature in $1, using for ToI" > /dev/kmsg + CURDEV=$(cat /sys/power/tuxonice/resume) + [ -z "$CURDEV" ] && echo "swap:$1" >/sys/power/tuxonice/resume +elif [ "$2" = "resume" ]; then + echo "<3>Dracut: found resume parameter device in $1, trying to resume" > /dev/kmsg + echo 1 >/sys/power/tuxonice/do_resume + echo "<3>Dracut: no resume operation occured" >/dev/kmsg +fi diff --git a/merge/sys-kernel/dracut/dracut-lib.sh b/merge/sys-kernel/dracut/dracut-lib.sh new file mode 100644 index 0000000..bc5d880 --- /dev/null +++ b/merge/sys-kernel/dracut/dracut-lib.sh @@ -0,0 +1,3 @@ +{% calculate format='regex', dotall, path='/usr/lib/dracut/modules.d/99base', pkg() < '039' %} +(\nwait_for_dev.*?_name.*?str_replace.*)'\\x2f' +\1'\\\\x2f' diff --git a/merge/sys-kernel/dracut/dracut.conf.d/.calculate_directory b/merge/sys-kernel/dracut/dracut.conf.d/.calculate_directory new file mode 100644 index 0000000..4b0af38 --- /dev/null +++ b/merge/sys-kernel/dracut/dracut.conf.d/.calculate_directory @@ -0,0 +1 @@ +{% calculate path='/usr/lib/dracut' %} diff --git a/merge/sys-kernel/dracut/dracut.conf.d/20-gentoo.conf b/merge/sys-kernel/dracut/dracut.conf.d/20-gentoo.conf new file mode 100644 index 0000000..481042a --- /dev/null +++ b/merge/sys-kernel/dracut/dracut.conf.d/20-gentoo.conf @@ -0,0 +1 @@ +{% calculate source='/usr/lib/dracut/dracut.conf.d/gentoo.conf', exists('/usr/lib/dracut/dracut.conf.d/gentoo.conf'), mirror %} diff --git a/merge/sys-kernel/dracut/dracut.conf.d/50-calculate.conf b/merge/sys-kernel/dracut/dracut.conf.d/50-calculate.conf new file mode 100644 index 0000000..fa61e2a --- /dev/null +++ b/merge/sys-kernel/dracut/dracut.conf.d/50-calculate.conf @@ -0,0 +1,14 @@ + +omit_dracutmodules+=" multipath" +add_dracutmodules+=" video calculate" +{% if pkg('net-nds/rpcbind') and pkg('net-misc/iputils[arping]') %} +add_dracutmodules+=" nfs" +{% endif %} +{% if pkg('sys-boot/plymouth') %} +add_dracutmodules+=" plymouth" +omit_dracutmodules+=" gensplash" +{% endif %} +omit_dracutmodules+=" biosdevname" + +i18n_default_font="ter-v18n" +add_drivers+=" sunrpc crc32c_generic " diff --git a/merge/sys-kernel/dracut/dracut.conf.d/gentoo.conf b/merge/sys-kernel/dracut/dracut.conf.d/gentoo.conf new file mode 100644 index 0000000..e45386b --- /dev/null +++ b/merge/sys-kernel/dracut/dracut.conf.d/gentoo.conf @@ -0,0 +1 @@ +{% calculate append='remove' %}