From abe6ca9f950427dfd7bb1f2068a1c95383328aea Mon Sep 17 00:00:00 2001 From: Thomas Backlund Date: Sat, 4 Jan 2014 21:51:06 +0100 Subject: add mga4-alpha1 configs --- config/auto_inst.cfg.pl | 17 +- config/live.cfg | 15 +- config/settings-livecd.cfg | 6 +- .../01_gsettings-desktop-schemas.gschema.override | 7 +- files/90mgalive/module-setup.sh | 1 + files/UEFI/loader/entries/01-mga-boot.conf | 4 +- files/UEFI/loader/entries/02-mga-install.conf | 4 +- files/UEFI/loader/entries/03-mga-boot-safe.conf | 4 +- files/bootloader.pm | 10 + files/dracut-functions.sh | 1708 ++++++++++++++++++++ files/draklive-install.d/run.d/gsettings.sh | 1 + files/finish-install.DVD | 7 + files/halt.local.DVD | 23 + files/shorewall-interfaces | 13 + files/shorewall6-interfaces | 13 + 15 files changed, 1814 insertions(+), 19 deletions(-) create mode 100755 files/dracut-functions.sh create mode 100755 files/draklive-install.d/run.d/gsettings.sh create mode 100644 files/finish-install.DVD create mode 100755 files/halt.local.DVD create mode 100644 files/shorewall-interfaces create mode 100644 files/shorewall6-interfaces diff --git a/config/auto_inst.cfg.pl b/config/auto_inst.cfg.pl index 29d4a73..4c5fca7 100644 --- a/config/auto_inst.cfg.pl +++ b/config/auto_inst.cfg.pl @@ -86,7 +86,8 @@ $o = { '/^lib64atlas3-/', ), if_($ENV{DRAKLIVE_ARCH} eq 'i586', - '/^libatlas3-/',), + '/^libatlas3-/', + ), if_($ENV{DRAKLIVE_PRODUCT} !~ /gaming/i, #- non-DVD products #- from task-kde Suggests @@ -198,9 +199,10 @@ $o = { 'mono', # block the kernels we dont want - if_($ENV{DRAKLIVE_ARCH} eq 'i586', '/^kernel-desktop-/', 'fglrx-kernel-3.8.13-desktop-1.mga3', 'nvidia-current-kernel-3.8.13-desktop-1.mga3', 'nvidia304-kernel-3.8.13-desktop-1.mga3', 'nvidia173-kernel-3.8.13-desktop-1.mga3', 'vboxadditions-kernel-3.8.13-desktop-1.mga3'), - '/^kernel-server-/', 'fglrx-kernel-3.8.13-server-1.mga3', 'nvidia-current-kernel-3.8.13-server-1.mga3', 'nvidia304-kernel-3.8.13-server-1.mga3', 'nvidia173-kernel-3.8.13-server-1.mga3', 'vboxadditions-kernel-3.8.13-server-1.mga3', + if_($ENV{DRAKLIVE_ARCH} eq 'i586', '/^kernel-desktop-/', '/^fglrx-kernel-*-desktop-/', '/^nvidia-current-kernel-*-desktop-/', '/^nvidia304-kernel-*-desktop-', '/^nvidia173-kernel-*-desktop-/', '/^vboxadditions-kernel-*-desktop-/'), + '/^kernel-server-/', '/^fglrx-kernel-*-server-/', '/^nvidia-current-kernel-*-server-/', '/^nvidia304-kernel-*-server-/', '/^nvidia173-kernel-*-server-/', '/^vboxadditions-kernel-*-server-/', '/^broadcom-wl-/', + #'libreoffice-core', # not needed anymore (mga #2001) 'nspluginwrapper', @@ -229,11 +231,16 @@ $o = { if_($has_moblin, 'task-moblin'), - if_($ENV{DRAKLIVE_ARCH} eq 'i586', 'libcanberra-gtk0', 'fglrx-kernel-3.8.13-desktop586-1.mga3', 'nvidia-current-kernel-3.8.13-desktop586-1.mga3', 'nvidia304-kernel-3.8.13-desktop586-1.mga3', 'nvidia173-kernel-3.8.13-desktop586-1.mga3', 'vboxadditions-kernel-3.8.13-desktop586-1.mga3'), - if_($ENV{DRAKLIVE_ARCH} eq 'x86_64', 'lib64canberra-gtk0', 'fglrx-kernel-3.8.13-desktop-1.mga3', 'nvidia-current-kernel-3.8.13-desktop-1.mga3', 'nvidia304-kernel-3.8.13-desktop-1.mga3', 'nvidia173-kernel-3.8.13-desktop-1.mga3', 'vboxadditions-kernel-3.8.13-desktop-1.mga3', 'gummiboot'), + # do we still need ? + #if_($ENV{DRAKLIVE_ARCH} eq 'i586', 'libcanberra-gtk0'), + #if_($ENV{DRAKLIVE_ARCH} eq 'x86_64', 'lib64canberra-gtk0'), + + if_($ENV{DRAKLIVE_ARCH} eq 'i586', 'fglrx-kernel-desktop586-latest', 'nvidia-current-kernel-desktop586-latest', 'nvidia304-kernel-desktop586-latest', 'nvidia173-kernel-desktop586-latest', 'vboxadditions-kernel-desktop586-latest'), + if_($ENV{DRAKLIVE_ARCH} eq 'x86_64', 'fglrx-kernel-desktop-latest', 'nvidia-current-kernel-desktop-latest', 'nvidia304-kernel-desktop-latest', 'nvidia173-kernel-desktop-latest', 'vboxadditions-kernel-desktop-latest', 'gummiboot'), 'x11-server-common', 'x11-driver-video-fglrx', 'x11-driver-video-nvidia-current', 'x11-driver-video-nvidia173', 'x11-driver-video-nvidia304', 'x11-driver-video-vboxvideo', + 'basesystem', 'usbutils', # we want lsusb 'shared-mime-info', # needed for .desktop files to work atleast in gnome 'dmraid', 'mdadm', 'mc', 'btrfs-progs', 'shorewall-ipv6', 'parted', 'glxinfo', 'patch', diff --git a/config/live.cfg b/config/live.cfg index b824763..dedf7c8 100644 --- a/config/live.cfg +++ b/config/live.cfg @@ -41,8 +41,8 @@ my $_l = { ), # fix gnome-shell not showing draklive-install and register icons on desktop in live mode if_($live->{settings}{desktop} eq 'GNOME', - [ 'files/draklive-install.desktop', '/home/live/Desktop/draklive-install.desktop', { mode => 0755, no_install => 1 } ], - [ 'files/register.desktop', '/home/live/Desktop/register.desktop', { mode => 0755 } ], + #[ 'files/draklive-install.desktop', '/home/live/Desktop/draklive-install.desktop', { mode => 0755, no_install => 1 } ], + [ 'files/register.desktop', '/usr/share/applications/register.desktop', { mode => 0644 } ], [ 'files/01_gsettings-desktop-schemas.gschema.override', '/usr/share/glib-2.0/schemas/01_gsettings-desktop-schemas.gschema.override', { mode => 0644, no_install => 1 } ], ), # blacklist pata_acpi @@ -50,6 +50,10 @@ my $_l = { # lock bluedevil, radeon-firmware, kernel-firnware-nonfree [ 'files/pkgs.pm', '/usr/lib/libDrakX/pkgs.pm', { mode => 0644 } ], + + # shorewall fixes + [ 'files/shorewall-interfaces', '/etc/shorewall/interfaces', { mode => 0644 } ], + [ 'files/shorewall6-interfaces', '/etc/shorewall6/interfaces', { mode => 0644 } ], # add local repos if_($live->{settings}{arch} eq 'i586', @@ -72,6 +76,8 @@ my $_l = { [ 'files/live.modprobe.CD', '/etc/modprobe.d/live.conf', { mode => 0644, no_install => 1 } ], # livecd specific initrd [ 'files/live-dracut.conf', '/etc/dracut.conf.d/60-live.conf', { mode => 0644, no_install => 1 } ], + # dracut fix + [ 'files/dracut-functions.sh', '/usr/lib/dracut/dracut-functions.sh', { mode => 0755 } ], ), #- disable first boot wizard at live boot [ 'files/firstboot', '/etc/sysconfig/firstboot', { mode => 0644 } ], @@ -82,10 +88,13 @@ my $_l = { # copy mgalive fix for installer progress bar [ 'files/90mgalive/mgalive-root.sh', '/usr/lib/dracut/modules.d/90mgalive/mgalive-root.sh', { mode => 0755 } ], + [ 'files/90mgalive/module-setup.sh', '/usr/lib/dracut/modules.d/90mgalive/module-setup.sh', { mode => 0755 } ], [ 'files/draklive-install', '/usr/sbin/draklive-install', { mode => 0755 } ], if_($live->{settings}{desktop} eq 'KDE4', [ 'files/draklive-install.d/run.d/generate-gtk-icon-cache.sh', '/etc/draklive-install.d/run.d/generate-gtk-icon-cache.sh', { mode => 755 } ]), + #if_($live->{settings}{desktop} eq 'GNOME', + # [ 'files/draklive-install.d/run.d/gsettings.sh', '/etc/draklive-install.d/run.d/gsettings.sh', { mode => 755 } ]), #- sysconfig files for first boot [ $live->{settings}{media} eq 'usb' ? "files/finish-install.$live->{settings}{media}" : @@ -261,7 +270,7 @@ my $_l = { 'Asia-no-India' => [qw(id ja ko th vi zh_CN zh_TW)], }, packs => { - int => [ map { "i18n-$_" } qw(de en es fi fr it nl pt sv) ], + int => [ map { "i18n-$_" } qw(en) ], da => [ map { "i18n-$_" } qw(da en) ], }, if_(member($live->{settings}{media}, 'CD', 'DVD'), diff --git a/config/settings-livecd.cfg b/config/settings-livecd.cfg index 04e1d0b..95fce2a 100644 --- a/config/settings-livecd.cfg +++ b/config/settings-livecd.cfg @@ -5,12 +5,12 @@ repository=/home/bcd/build_bcd/pieces/cauldron additional_repository= arch=i586 desktop=KDE4 -media=CD +media=DVD region=int pack= name=Mageia -product=LiveCD -version=3 +product=LiveDVD +version=4-alpha1 commercial=0 default_user=live builddir=/home/draklive/var-data/build diff --git a/files/01_gsettings-desktop-schemas.gschema.override b/files/01_gsettings-desktop-schemas.gschema.override index 0656c96..5702350 100644 --- a/files/01_gsettings-desktop-schemas.gschema.override +++ b/files/01_gsettings-desktop-schemas.gschema.override @@ -1,2 +1,5 @@ -[org.gnome.desktop.background] -show-desktop-icons=true +[org.gnome.shell] +favorite-apps = [ 'mageia-draklive-install.desktop', 'register.desktop', 'firefox.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'nautilus.desktop', 'gnome-documents.desktop'] + +[org.gnome.desktop.screensaver] +lock-enabled=false diff --git a/files/90mgalive/module-setup.sh b/files/90mgalive/module-setup.sh index f18e81a..baad94a 100755 --- a/files/90mgalive/module-setup.sh +++ b/files/90mgalive/module-setup.sh @@ -29,4 +29,5 @@ install() { inst "$moddir/mgalive-root.sh" "/sbin/mgalive-root" # should probably just be generally included inst_rules 60-cdrom_id.rules + dracut_need_initqueue } diff --git a/files/UEFI/loader/entries/01-mga-boot.conf b/files/UEFI/loader/entries/01-mga-boot.conf index 19d5058..921d663 100644 --- a/files/UEFI/loader/entries/01-mga-boot.conf +++ b/files/UEFI/loader/entries/01-mga-boot.conf @@ -1,4 +1,4 @@ -title Boot Mageia 3 Live +title Boot Mageia 4 Live linux /boot/vmlinuz initrd /boot/cdrom/initrd.gz -options root=mgalive:LABEL=MGA3LIVE UEFI splash quiet rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 vga=788 +options root=mgalive:LABEL=MGA4LIVE UEFI splash quiet rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 vga=788 diff --git a/files/UEFI/loader/entries/02-mga-install.conf b/files/UEFI/loader/entries/02-mga-install.conf index 9341727..eb7fc47 100644 --- a/files/UEFI/loader/entries/02-mga-install.conf +++ b/files/UEFI/loader/entries/02-mga-install.conf @@ -1,4 +1,4 @@ -title Install Mageia 3 Live +title Install Mageia 4 Live linux /boot/vmlinuz initrd /boot/cdrom/initrd.gz -options root=mgalive:LABEL=MGA3LIVE UEFI splash quiet rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 vga=788 install +options root=mgalive:LABEL=MGA4LIVE UEFI splash quiet rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 vga=788 install diff --git a/files/UEFI/loader/entries/03-mga-boot-safe.conf b/files/UEFI/loader/entries/03-mga-boot-safe.conf index ef8030e..70efab5 100644 --- a/files/UEFI/loader/entries/03-mga-boot-safe.conf +++ b/files/UEFI/loader/entries/03-mga-boot-safe.conf @@ -1,4 +1,4 @@ -title Boot Mageia 3 Live (Safe mode) +title Boot Mageia 4 Live (Safe mode) linux /boot/vmlinuz initrd /boot/cdrom/initrd.gz -options root=mgalive:LABEL=MGA3LIVE UEFI rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 xdriver=vesa +options root=mgalive:LABEL=MGA4LIVE UEFI rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 xdriver=vesa diff --git a/files/bootloader.pm b/files/bootloader.pm index 348599e..5a3fa38 100644 --- a/files/bootloader.pm +++ b/files/bootloader.pm @@ -252,6 +252,11 @@ sub read_grub2 { } } + # get default entry: + foreach (run_program::rooted_get_stdout($::prefix, qw(grub2-editenv list))) { + $bootloader{default} = $1 if /saved_entry=(.*)/; + } + $bootloader{method} = 'grub2'; \%bootloader; } @@ -1813,6 +1818,11 @@ sub write_grub2 { my $grub2_cfg = '/boot/grub2/grub.cfg'; run_program::rooted($::prefix, 'grub2-mkconfig', '2>', \$error, '-o', $grub2_cfg) or die "grub2-mkconfig failed: $error"; + + # set default entry: + eval { + run_program::rooted($::prefix, 'grub2-set-default', '2>', \$error, $bootloader->{default}) or die "grub2-mkconfig failed: $error"; + }; } sub write_grub { diff --git a/files/dracut-functions.sh b/files/dracut-functions.sh new file mode 100755 index 0000000..a4807b1 --- /dev/null +++ b/files/dracut-functions.sh @@ -0,0 +1,1708 @@ +#!/bin/bash +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh +# +# functions used by dracut and other tools. +# +# Copyright 2005-2009 Red Hat, Inc. All rights reserved. +# +# This program 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 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +export LC_MESSAGES=C + +if [[ $DRACUT_KERNEL_LAZY ]] && ! [[ $DRACUT_KERNEL_LAZY_HASHDIR ]]; then + if ! [[ -d "$initdir/.kernelmodseen" ]]; then + mkdir -p "$initdir/.kernelmodseen" + fi + DRACUT_KERNEL_LAZY_HASHDIR="$initdir/.kernelmodseen" +fi + +if [[ $initdir ]] && ! [[ -d $initdir ]]; then + mkdir -p "$initdir" +fi + +# Generic substring function. If $2 is in $1, return 0. +strstr() { [[ $1 = *$2* ]]; } + +# find a binary. If we were not passed the full path directly, +# search in the usual places to find the binary. +find_binary() { + if [[ -z ${1##/*} ]]; then + if [[ -x $1 ]] || { [[ "$1" == *.so* ]] && ldd "$1" &>/dev/null; }; then + printf "%s\n" "$1" + return 0 + fi + fi + + type -P "${1##*/}" +} + +if ! [[ $dracutbasedir ]]; then + dracutbasedir=${BASH_SOURCE[0]%/*} + [[ $dracutbasedir = "dracut-functions" ]] && dracutbasedir="." + [[ $dracutbasedir ]] || dracutbasedir="." + dracutbasedir="$(readlink -f $dracutbasedir)" +fi + +if ! [[ $DRACUT_INSTALL ]]; then + DRACUT_INSTALL=$(find_binary dracut-install) +fi + +if ! [[ $DRACUT_INSTALL ]] && [[ -x $dracutbasedir/dracut-install ]]; then + DRACUT_INSTALL=$dracutbasedir/dracut-install +fi + +# Detect lib paths +if ! [[ $libdirs ]] ; then + if [[ "$(ldd /bin/sh)" == */lib64/* ]] &>/dev/null \ + && [[ -d /lib64 ]]; then + libdirs+=" /lib64" + [[ -d /usr/lib64 ]] && libdirs+=" /usr/lib64" + else + libdirs+=" /lib" + [[ -d /usr/lib ]] && libdirs+=" /usr/lib" + fi + export libdirs +fi + +if ! [[ $kernel ]]; then + kernel=$(uname -r) + export kernel +fi + +srcmods="/lib/modules/$kernel/" +[[ $drivers_dir ]] && { + if vercmp "$(modprobe --version | cut -d' ' -f3)" lt 3.7; then + dfatal 'To use --kmoddir option module-init-tools >= 3.7 is required.' + exit 1 + fi + srcmods="$drivers_dir" +} +export srcmods + +if ! type dinfo >/dev/null 2>&1; then + . "$dracutbasedir/dracut-logger.sh" + dlog_init +fi + +if ! [[ $initdir ]]; then + dfatal "initdir not set" + exit 1 +fi + +# export standard hookdirs +[[ $hookdirs ]] || { + hookdirs="cmdline pre-udev pre-trigger netroot " + hookdirs+="initqueue initqueue/settled initqueue/online initqueue/finished initqueue/timeout " + hookdirs+="pre-mount pre-pivot cleanup mount " + hookdirs+="emergency shutdown-emergency pre-shutdown shutdown " + export hookdirs +} + +dracut_need_initqueue() { + >"$initdir/lib/dracut/need-initqueue" +} + +dracut_module_included() { + [[ "$mods_to_load $modules_loaded" == *$@* ]] +} + +# Create all subdirectories for given path without creating the last element. +# $1 = path +mksubdirs() { + [[ -e ${1%/*} ]] || mkdir -m 0755 -p -- "${1%/*}" +} + +# Version comparision function. Assumes Linux style version scheme. +# $1 = version a +# $2 = comparision op (gt, ge, eq, le, lt, ne) +# $3 = version b +vercmp() { + local _n1=${1//./ } _op=$2 _n2=${3//./ } _i _res + + for ((_i=0; ; _i++)) + do + if [[ ! ${_n1[_i]}${_n2[_i]} ]]; then _res=0 + elif ((${_n1[_i]:-0} > ${_n2[_i]:-0})); then _res=1 + elif ((${_n1[_i]:-0} < ${_n2[_i]:-0})); then _res=2 + else continue + fi + break + done + + case $_op in + gt) ((_res == 1));; + ge) ((_res != 2));; + eq) ((_res == 0));; + le) ((_res != 1));; + lt) ((_res == 2));; + ne) ((_res != 0));; + esac +} + +# is_func +# Check whether $1 is a function. +is_func() { + [[ "$(type -t "$1")" = "function" ]] +} + +# Function prints global variables in format name=value line by line. +# $@ = list of global variables' name +print_vars() { + local _var _value + + for _var in "$@" + do + eval printf -v _value "%s" "\$$_var" + [[ ${_value} ]] && printf '%s="%s"\n' "$_var" "$_value" + done +} + +# normalize_path +# Prints the normalized path, where it removes any duplicated +# and trailing slashes. +# Example: +# $ normalize_path ///test/test// +# /test/test +normalize_path() { + shopt -q -s extglob + set -- "${1//+(\/)//}" + shopt -q -u extglob + echo "${1%/}" +} + +# convert_abs_rel +# Prints the relative path, when creating a symlink to from . +# Example: +# $ convert_abs_rel /usr/bin/test /bin/test-2 +# ../../bin/test-2 +# $ ln -s $(convert_abs_rel /usr/bin/test /bin/test-2) /usr/bin/test +convert_abs_rel() { + local __current __absolute __abssize __cursize __newpath + local -i __i __level + + set -- "$(normalize_path "$1")" "$(normalize_path "$2")" + + # corner case #1 - self looping link + [[ "$1" == "$2" ]] && { echo "${1##*/}"; return; } + + # corner case #2 - own dir link + [[ "${1%/*}" == "$2" ]] && { echo "."; return; } + + IFS="/" __current=($1) + IFS="/" __absolute=($2) + + __abssize=${#__absolute[@]} + __cursize=${#__current[@]} + + while [[ "${__absolute[__level]}" == "${__current[__level]}" ]] + do + (( __level++ )) + if (( __level > __abssize || __level > __cursize )) + then + break + fi + done + + for ((__i = __level; __i < __cursize-1; __i++)) + do + if ((__i > __level)) + then + __newpath=$__newpath"/" + fi + __newpath=$__newpath".." + done + + for ((__i = __level; __i < __abssize; __i++)) + do + if [[ -n $__newpath ]] + then + __newpath=$__newpath"/" + fi + __newpath=$__newpath${__absolute[__i]} + done + + echo "$__newpath" +} + +if [[ "$(ln --help)" == *--relative* ]]; then + ln_r() { + ln -sfnr "${initdir}/$1" "${initdir}/$2" + } +else + ln_r() { + local _source=$1 + local _dest=$2 + [[ -d "${_dest%/*}" ]] && _dest=$(readlink -f "${_dest%/*}")/${_dest##*/} + ln -sfn -- "$(convert_abs_rel "${_dest}" "${_source}")" "${initdir}/${_dest}" + } +fi + +get_persistent_dev() { + local i _tmp _dev + + _dev=$(udevadm info --query=name --name="$1" 2>/dev/null) + [ -z "$_dev" ] && return + + for i in /dev/mapper/* /dev/disk/by-uuid/* /dev/disk/by-id/*; do + [[ $i == /dev/mapper/mpath* ]] && continue + _tmp=$(udevadm info --query=name --name="$i" 2>/dev/null) + if [ "$_tmp" = "$_dev" ]; then + printf -- "%s" "$i" + return + fi + done +} + +# get_fs_env +# Get and set the ID_FS_TYPE variable from udev for a device. +# Example: +# $ get_fs_env /dev/sda2; echo $ID_FS_TYPE +# ext4 +get_fs_env() { + local evalstr + local found + + [[ $1 ]] || return + unset ID_FS_TYPE + if ID_FS_TYPE=$(udevadm info --query=env --name="$1" \ + | { while read line; do + [[ "$line" == DEVPATH\=* ]] && found=1; + if [[ "$line" == ID_FS_TYPE\=* ]]; then + printf "%s" "${line#ID_FS_TYPE=}"; + exit 0; + fi + done; [[ $found ]] && exit 0; exit 1; }) ; then + if [[ $ID_FS_TYPE ]]; then + printf "%s" "$ID_FS_TYPE" + return 0 + fi + fi + + # Fallback, if we don't have udev information + if find_binary blkid >/dev/null; then + ID_FS_TYPE=$(blkid -u filesystem -o export -- "$1" \ + | while read line; do + if [[ "$line" == TYPE\=* ]]; then + printf "%s" "${line#TYPE=}"; + exit 0; + fi + done) + if [[ $ID_FS_TYPE ]]; then + printf "%s" "$ID_FS_TYPE" + return 0 + fi + fi + return 1 +} + +# get_maj_min +# Prints the major and minor of a device node. +# Example: +# $ get_maj_min /dev/sda2 +# 8:2 +get_maj_min() { + local _maj _min + read _maj _min < <(stat -L -c '%t %T' "$1" 2>/dev/null) + printf "%s" "$((0x$_maj)):$((0x$_min))" +} + +# find_block_device +# Prints the major and minor number of the block device +# for a given mountpoint. +# Unless $use_fstab is set to "yes" the functions +# uses /proc/self/mountinfo as the primary source of the +# information and only falls back to /etc/fstab, if the mountpoint +# is not found there. +# Example: +# $ find_block_device /usr +# 8:4 +find_block_device() { + local _majmin _dev _majmin _find_mpt + _find_mpt="$1" + if [[ $use_fstab != yes ]]; then + [[ -d $_find_mpt/. ]] + while read _majmin _dev; do + if [[ -b $_dev ]]; then + if ! [[ $_majmin ]] || [[ $_majmin == 0:* ]]; then + read _majmin < <(get_maj_min $_dev) + fi + if [[ $_majmin ]]; then + echo $_majmin + else + echo $_dev + fi + return 0 + fi + if [[ $_dev = *:* ]]; then + echo $_dev + return 0 + fi + done < <(findmnt -e -v -n -o 'MAJ:MIN,SOURCE' --target "$_find_mpt") + fi + # fall back to /etc/fstab + + while read _majmin _dev; do + if ! [[ $_dev ]]; then + _dev="$_majmin" + unset _majmin + fi + if [[ -b $_dev ]]; then + [[ $_majmin ]] || read _majmin < <(get_maj_min $_dev) + if [[ $_majmin ]]; then + echo $_majmin + else + echo $_dev + fi + return 0 + fi + if [[ $_dev = *:* ]]; then + echo $_dev + return 0 + fi + done < <(findmnt -e --fstab -v -n -o 'MAJ:MIN,SOURCE' --target "$_find_mpt") + + return 1 +} + +# find_mp_fstype +# Echo the filesystem type for a given mountpoint. +# /proc/self/mountinfo is taken as the primary source of information +# and /etc/fstab is used as a fallback. +# No newline is appended! +# Example: +# $ find_mp_fstype /;echo +# ext4 +find_mp_fstype() { + local _fs + + if [[ $use_fstab != yes ]]; then + while read _fs; do + [[ $_fs ]] || continue + [[ $_fs = "autofs" ]] && continue + echo -n $_fs + return 0 + done < <(findmnt -e -v -n -o 'FSTYPE' --target "$1") + fi + + while read _fs; do + [[ $_fs ]] || continue + [[ $_fs = "autofs" ]] && continue + echo -n $_fs + return 0 + done < <(findmnt --fstab -e -v -n -o 'FSTYPE' --target "$1") + + return 1 +} + +# find_dev_fstype +# Echo the filesystem type for a given device. +# /proc/self/mountinfo is taken as the primary source of information +# and /etc/fstab is used as a fallback. +# No newline is appended! +# Example: +# $ find_dev_fstype /dev/sda2;echo +# ext4 +find_dev_fstype() { + local _find_dev _fs + _find_dev="$1" + [[ "$_find_dev" = /dev* ]] || _find_dev="/dev/block/$_find_dev" + + if [[ $use_fstab != yes ]]; then + while read _fs; do + [[ $_fs ]] || continue + [[ $_fs = "autofs" ]] && continue + echo -n $_fs + return 0 + done < <(findmnt -e -v -n -o 'FSTYPE' --source "$_find_dev") + fi + + while read _fs; do + [[ $_fs ]] || continue + [[ $_fs = "autofs" ]] && continue + echo -n $_fs + return 0 + done < <(findmnt --fstab -e -v -n -o 'FSTYPE' --source "$_find_dev") + + return 1 + +} + +# finds the major:minor of the block device backing the root filesystem. +find_root_block_device() { find_block_device /; } + +# for_each_host_dev_fs +# Execute " " for every " " pair found +# in ${host_fs_types[@]} +for_each_host_dev_fs() +{ + local _func="$1" + local _dev + local _ret=1 + + [[ "${!host_fs_types[@]}" ]] || return 0 + + for _dev in "${!host_fs_types[@]}"; do + $_func "$_dev" "${host_fs_types[$_dev]}" && _ret=0 + done + return $_ret +} + +host_fs_all() +{ + echo "${host_fs_types[@]}" +} + +# Walk all the slave relationships for a given block device. +# Stop when our helper function returns success +# $1 = function to call on every found block device +# $2 = block device in major:minor format +check_block_and_slaves() { + local _x + [[ -b /dev/block/$2 ]] || return 1 # Not a block device? So sorry. + "$1" $2 && return + check_vol_slaves "$@" && return 0 + if [[ -f /sys/dev/block/$2/../dev ]]; then + check_block_and_slaves $1 $(cat "/sys/dev/block/$2/../dev") && return 0 + fi + [[ -d /sys/dev/block/$2/slaves ]] || return 1 + for _x in /sys/dev/block/$2/slaves/*/dev; do + [[ -f $_x ]] || continue + check_block_and_slaves $1 $(cat "$_x") && return 0 + done + return 1 +} + +check_block_and_slaves_all() { + local _x _ret=1 + [[ -b /dev/block/$2 ]] || return 1 # Not a block device? So sorry. + if "$1" $2; then + _ret=0 + fi + check_vol_slaves "$@" && return 0 + if [[ -f /sys/dev/block/$2/../dev ]]; then + check_block_and_slaves_all $1 $(cat "/sys/dev/block/$2/../dev") && _ret=0 + fi + [[ -d /sys/dev/block/$2/slaves ]] || return 1 + for _x in /sys/dev/block/$2/slaves/*/dev; do + [[ -f $_x ]] || continue + check_block_and_slaves_all $1 $(cat "$_x") && _ret=0 + done + return $_ret +} +# for_each_host_dev_and_slaves +# Execute " " for every "" found +# in ${host_devs[@]} and their slaves +for_each_host_dev_and_slaves_all() +{ + local _func="$1" + local _dev + local _ret=1 + + [[ "${host_devs[@]}" ]] || return 0 + + for _dev in ${host_devs[@]}; do + [[ -b "$_dev" ]] || continue + if check_block_and_slaves_all $_func $(get_maj_min $_dev); then + _ret=0 + fi + done + return $_ret +} + +for_each_host_dev_and_slaves() +{ + local _func="$1" + local _dev + + [[ "${host_devs[@]}" ]] || return 0 + + for _dev in ${host_devs[@]}; do + [[ -b "$_dev" ]] || continue + check_block_and_slaves $_func $(get_maj_min $_dev) && return 0 + done + return 1 +} + +# ugly workaround for the lvm design +# There is no volume group device, +# so, there are no slave devices for volume groups. +# Logical volumes only have the slave devices they really live on, +# but you cannot create the logical volume without the volume group. +# And the volume group might be bigger than the devices the LV needs. +check_vol_slaves() { + local _lv _vg _pv + for i in /dev/mapper/*; do + _lv=$(get_maj_min $i) + if [[ $_lv = $2 ]]; then + _vg=$(lvm lvs --noheadings -o vg_name $i 2>/dev/null) + # strip space + _vg=$(echo $_vg) + if [[ $_vg ]]; then + for _pv in $(lvm vgs --noheadings -o pv_name "$_vg" 2>/dev/null) + do + check_block_and_slaves $1 $(get_maj_min $_pv) && return 0 + done + fi + fi + done + return 1 +} + +# fs_get_option +# search for a specific option in a bunch of filesystem options +# and return the value +fs_get_option() { + local _fsopts=$1 + local _option=$2 + local OLDIFS="$IFS" + IFS=, + set -- $_fsopts + IFS="$OLDIFS" + while [ $# -gt 0 ]; do + case $1 in + $_option=*) + echo ${1#${_option}=} + break + esac + shift + done +} + +if [[ $DRACUT_INSTALL ]]; then + [[ $DRACUT_RESOLVE_LAZY ]] || export DRACUT_RESOLVE_DEPS=1 + inst_dir() { + [[ -e ${initdir}/"$1" ]] && return 0 # already there + $DRACUT_INSTALL ${initdir+-D "$initdir"} -d "$@" + (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} -d "$@" || : + } + + inst() { + [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there + #dinfo "$DRACUT_INSTALL -l $@" + $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" + (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : + } + + inst_simple() { + [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there + [[ -e $1 ]] || return 1 # no source + $DRACUT_INSTALL ${initdir+-D "$initdir"} "$@" + (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} "$@" || : + } + + inst_symlink() { + [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there + [[ -L $1 ]] || return 1 + $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" + (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : + } + + dracut_install() { + local ret + #dinfo "initdir=$initdir $DRACUT_INSTALL -l $@" + $DRACUT_INSTALL ${initdir+-D "$initdir"} -a ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" + ret=$? + (($ret != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} -a ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : + return $ret + } + + inst_library() { + [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there + [[ -e $1 ]] || return 1 # no source + $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" + (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : + } + + inst_binary() { + $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" + (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : + } + + inst_script() { + $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" + (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || : + } + +else + + # Install a directory, keeping symlinks as on the original system. + # Example: if /lib points to /lib64 on the host, "inst_dir /lib/file" + # will create ${initdir}/lib64, ${initdir}/lib64/file, + # and a symlink ${initdir}/lib -> lib64. + inst_dir() { + [[ -e ${initdir}/"$1" ]] && return 0 # already there + + local _dir="$1" _part="${1%/*}" _file + while [[ "$_part" != "${_part%/*}" ]] && ! [[ -e "${initdir}/${_part}" ]]; do + _dir="$_part $_dir" + _part=${_part%/*} + done + + # iterate over parent directories + for _file in $_dir; do + [[ -e "${initdir}/$_file" ]] && continue + if [[ -L $_file ]]; then + inst_symlink "$_file" + else + # create directory + mkdir -m 0755 -p "${initdir}/$_file" || return 1 + [[ -e "$_file" ]] && chmod --reference="$_file" "${initdir}/$_file" + chmod u+w "${initdir}/$_file" + fi + done + } + + # $1 = file to copy to ramdisk + # $2 (optional) Name for the file on the ramdisk + # Location of the image dir is assumed to be $initdir + # We never overwrite the target if it exists. + inst_simple() { + [[ -f "$1" ]] || return 1 + [[ "$1" == */* ]] || return 1 + local _src=$1 _target="${2:-$1}" + + [[ -L $_src ]] && { inst_symlink $_src $_target; return $?; } + + if ! [[ -d ${initdir}/$_target ]]; then + [[ -e ${initdir}/$_target ]] && return 0 + [[ -L ${initdir}/$_target ]] && return 0 + [[ -d "${initdir}/${_target%/*}" ]] || inst_dir "${_target%/*}" + fi + if [[ $DRACUT_FIPS_MODE ]]; then + # install checksum files also + if [[ -e "${_src%/*}/.${_src##*/}.hmac" ]]; then + inst "${_src%/*}/.${_src##*/}.hmac" "${_target%/*}/.${_target##*/}.hmac" + fi + if [[ -e "/lib/fipscheck/${_src##*/}.hmac" ]]; then + inst "/lib/fipscheck/${_src##*/}.hmac" "/lib/fipscheck/${_target##*/}.hmac" + fi + if [[ -e "/lib64/fipscheck/${_src##*/}.hmac" ]]; then + inst "/lib64/fipscheck/${_src##*/}.hmac" "/lib64/fipscheck/${_target##*/}.hmac" + fi + fi + ddebug "Installing $_src" + cp --reflink=auto --sparse=auto -pfL "$_src" "${initdir}/$_target" + } + + # same as above, but specialized for symlinks + inst_symlink() { + local _src=$1 _target=${2:-$1} _realsrc + [[ "$1" == */* ]] || return 1 + [[ -L $1 ]] || return 1 + [[ -L $initdir/$_target ]] && return 0 + _realsrc=$(readlink -f "$_src") + if ! [[ -e $initdir/$_realsrc ]]; then + if [[ -d $_realsrc ]]; then + inst_dir "$_realsrc" + else + inst "$_realsrc" + fi + fi + [[ ! -e $initdir/${_target%/*} ]] && inst_dir "${_target%/*}" + + ln_r "${_realsrc}" "${_target}" + } + + # Same as above, but specialized to handle dynamic libraries. + # It handles making symlinks according to how the original library + # is referenced. + inst_library() { + local _src="$1" _dest=${2:-$1} _lib _reallib _symlink + [[ "$1" == */* ]] || return 1 + [[ -e $initdir/$_dest ]] && return 0 + if [[ -L $_src ]]; then + if [[ $DRACUT_FIPS_MODE ]]; then + # install checksum files also + if [[ -e "${_src%/*}/.${_src##*/}.hmac" ]]; then + inst "${_src%/*}/.${_src##*/}.hmac" "${_dest%/*}/.${_dest##*/}.hmac" + fi + if [[ -e "/lib/fipscheck/${_src##*/}.hmac" ]]; then + inst "/lib/fipscheck/${_src##*/}.hmac" "/lib/fipscheck/${_dest##*/}.hmac" + fi + if [[ -e "/lib64/fipscheck/${_src##*/}.hmac" ]]; then + inst "/lib64/fipscheck/${_src##*/}.hmac" "/lib64/fipscheck/${_dest##*/}.hmac" + fi + fi + _reallib=$(readlink -f "$_src") + inst_simple "$_reallib" "$_reallib" + inst_dir "${_dest%/*}" + ln_r "${_reallib}" "${_dest}" + else + inst_simple "$_src" "$_dest" + fi + + # Create additional symlinks. See rev_symlinks description. + for _symlink in $(rev_lib_symlinks $_src) $(rev_lib_symlinks $_reallib); do + [[ ! -e $initdir/$_symlink ]] && { + ddebug "Creating extra symlink: $_symlink" + inst_symlink $_symlink + } + done + } + + # Same as above, but specialized to install binary executables. + # Install binary executable, and all shared library dependencies, if any. + inst_binary() { + local _bin _target + _bin=$(find_binary "$1") || return 1 + _target=${2:-$_bin} + [[ -e $initdir/$_target ]] && return 0 + local _file _line + local _so_regex='([^ ]*/lib[^/]*/[^ ]*\.so[^ ]*)' + # I love bash! + LC_ALL=C ldd "$_bin" 2>/dev/null | while read _line; do + [[ $_line = 'not a dynamic executable' ]] && break + + if [[ $_line =~ $_so_regex ]]; then + _file=${BASH_REMATCH[1]} + [[ -e ${initdir}/$_file ]] && continue + inst_library "$_file" + continue + fi + + if [[ $_line == *not\ found* ]]; then + dfatal "Missing a shared library required by $_bin." + dfatal "Run \"ldd $_bin\" to find out what it is." + dfatal "$_line" + dfatal "dracut cannot create an initrd." + exit 1 + fi + done + inst_simple "$_bin" "$_target" + } + + # same as above, except for shell scripts. + # If your shell script does not start with shebang, it is not a shell script. + inst_script() { + local _bin + _bin=$(find_binary "$1") || return 1 + shift + local _line _shebang_regex + read -r -n 80 _line <"$_bin" + # If debug is set, clean unprintable chars to prevent messing up the term + [[ $debug ]] && _line=$(echo -n "$_line" | tr -c -d '[:print:][:space:]') + _shebang_regex='(#! *)(/[^ ]+).*' + [[ $_line =~ $_shebang_regex ]] || return 1 + inst "${BASH_REMATCH[2]}" && inst_simple "$_bin" "$@" + } + + # general purpose installation function + # Same args as above. + inst() { + local _x + + case $# in + 1) ;; + 2) [[ ! $initdir && -d $2 ]] && export initdir=$2 + [[ $initdir = $2 ]] && set $1;; + 3) [[ -z $initdir ]] && export initdir=$2 + set $1 $3;; + *) dfatal "inst only takes 1 or 2 or 3 arguments" + exit 1;; + esac + for _x in inst_symlink inst_script inst_binary inst_simple; do + $_x "$@" && return 0 + done + return 1 + } + + # dracut_install [-o ] [ ... ] + # Install to the initramfs image + # -o optionally install the and don't fail, if it is not there + dracut_install() { + local _optional=no + if [[ $1 = '-o' ]]; then + _optional=yes + shift + fi + while (($# > 0)); do + if ! inst "$1" ; then + if [[ $_optional = yes ]]; then + dinfo "Skipping program $1 as it cannot be found and is" \ + "flagged to be optional" + else + dfatal "Failed to install $1" + exit 1 + fi + fi + shift + done + } + +fi + +# find symlinks linked to given library file +# $1 = library file +# Function searches for symlinks by stripping version numbers appended to +# library filename, checks if it points to the same target and finally +# prints the list of symlinks to stdout. +# +# Example: +# rev_lib_symlinks libfoo.so.8.1 +# output: libfoo.so.8 libfoo.so +# (Only if libfoo.so.8 and libfoo.so exists on host system.) +rev_lib_symlinks() { + [[ ! $1 ]] && return 0 + + local fn="$1" orig="$(readlink -f "$1")" links='' + + [[ ${fn} == *.so.* ]] || return 1 + + until [[ ${fn##*.} == so ]]; do + fn="${fn%.*}" + [[ -L ${fn} && $(readlink -f "${fn}") == ${orig} ]] && links+=" ${fn}" + done + + echo "${links}" +} + +# attempt to install any programs specified in a udev rule +inst_rule_programs() { + local _prog _bin + + if grep -qE 'PROGRAM==?"[^ "]+' "$1"; then + for _prog in $(grep -E 'PROGRAM==?"[^ "]+' "$1" | sed -r 's/.*PROGRAM==?"([^ "]+).*/\1/'); do + _bin="" + if [ -x ${udevdir}/$_prog ]; then + _bin=${udevdir}/$_prog + elif [[ "${_prog/\$env\{/}" == "$_prog" ]]; then + _bin=$(find_binary "$_prog") || { + dinfo "Skipping program $_prog using in udev rule ${1##*/} as it cannot be found" + continue; + } + fi + + [[ $_bin ]] && dracut_install "$_bin" + done + fi + if grep -qE 'RUN[+=]=?"[^ "]+' "$1"; then + for _prog in $(grep -E 'RUN[+=]=?"[^ "]+' "$1" | sed -r 's/.*RUN[+=]=?"([^ "]+).*/\1/'); do + _bin="" + if [ "/" = "${_prog::1}" -a -x $_prog ]; then + _bin=$_prog + elif [ -x ${udevdir}/$_prog ]; then + _bin=${udevdir}/$_prog + elif [[ "${_prog/\$env\{/}" == "$_prog" ]] && [[ "${_prog}" != "/sbin/initqueue" ]]; then + _bin=$(find_binary "$_prog") || { + dinfo "Skipping program $_prog using in udev rule ${1##*/} as it cannot be found" + continue; + } + fi + + [[ $_bin ]] && dracut_install "$_bin" + done + fi + if grep -qE 'IMPORT\{program\}==?"[^ "]+' "$1"; then + for _prog in $(grep -E 'IMPORT\{program\}==?"[^ "]+' "$1" | sed -r 's/.*IMPORT\{program\}==?"([^ "]+).*/\1/'); do + _bin="" + if [ "/" = "${_prog::1}" -a -x $_prog ]; then + _bin=$_prog + elif [ -x ${udevdir}/$_prog ]; then + _bin=${udevdir}/$_prog + elif [[ "${_prog/\$env\{/}" == "$_prog" ]]; then + _bin=$(find_binary "$_prog") || { + dinfo "Skipping program $_prog using in udev rule ${1##*/} as it cannot be found" + continue; + } + fi + + [[ $_bin ]] && dracut_install "$_bin" + done + fi +} + +# attempt to install any programs specified in a udev rule +inst_rule_group_owner() { + local i + + if grep -qE 'OWNER=?"[^ "]+' "$1"; then + for i in $(grep -E 'OWNER=?"[^ "]+' "$1" | sed -r 's/.*OWNER=?"([^ "]+).*/\1/'); do + if ! egrep -q "^$i:" "$initdir/etc/passwd" 2>/dev/null; then + egrep "^$i:" /etc/passwd 2>/dev/null >> "$initdir/etc/passwd" + fi + done + fi + if grep -qE 'GROUP=?"[^ "]+' "$1"; then + for i in $(grep -E 'GROUP=?"[^ "]+' "$1" | sed -r 's/.*GROUP=?"([^ "]+).*/\1/'); do + if ! egrep -q "^$i:" "$initdir/etc/group" 2>/dev/null; then + egrep "^$i:" /etc/group 2>/dev/null >> "$initdir/etc/group" + fi + done + fi +} + +inst_rule_initqueue() { + if grep -q -F initqueue "$1"; then + dracut_need_initqueue + fi +} + +# udev rules always get installed in the same place, so +# create a function to install them to make life simpler. +inst_rules() { + local _target=/etc/udev/rules.d _rule _found _extrapath="" + + inst_dir "${udevdir}/rules.d" + inst_dir "$_target" + if [ "${udevdir}" = "/lib/udev" -a -d "/usr/lib/udev/rules.d" ]; then + _extrapath="/usr/lib/udev/rules.d" + fi + for _rule in "$@"; do + if [ "${_rule#/}" = "$_rule" ]; then + for r in ${udevdir}/rules.d ${_extrapath} /etc/udev/rules.d; do + if [[ -f $r/$_rule ]]; then + _found="$r/$_rule" + inst_rule_programs "$_found" + inst_rule_group_owner "$_found" + inst_rule_initqueue "$_found" + inst_simple "$_found" + fi + done + fi + for r in '' ./ $dracutbasedir/rules.d/; do + if [[ -f ${r}$_rule ]]; then + _found="${r}$_rule" + inst_rule_programs "$_found" + inst_rule_group_owner "$_found" + inst_rule_initqueue "$_found" + inst_simple "$_found" "$_target/${_found##*/}" + fi + done + [[ $_found ]] || dinfo "Skipping udev rule: $_rule" + done +} + +prepare_udev_rules() { + [ -z "$UDEVVERSION" ] && export UDEVVERSION=$(udevadm --version) + + for f in "$@"; do + f="${initdir}/etc/udev/rules.d/$f" + [ -e "$f" ] || continue + while read line; do + if [ "${line%%IMPORT PATH_ID}" != "$line" ]; then + if [ $UDEVVERSION -ge 174 ]; then + printf '%sIMPORT{builtin}="path_id"\n' "${line%%IMPORT PATH_ID}" + else + printf '%sIMPORT{program}="path_id %%p"\n' "${line%%IMPORT PATH_ID}" + fi + elif [ "${line%%IMPORT BLKID}" != "$line" ]; then + if [ $UDEVVERSION -ge 176 ]; then + printf '%sIMPORT{builtin}="blkid"\n' "${line%%IMPORT BLKID}" + else + printf '%sIMPORT{program}="/sbin/blkid -o udev -p $tempnode"\n' "${line%%IMPORT BLKID}" + fi + else + echo "$line" + fi + done < "${f}" > "${f}.new" + mv "${f}.new" "$f" + done +} + +# install function specialized for hooks +# $1 = type of hook, $2 = hook priority (lower runs first), $3 = hook +# All hooks should be POSIX/SuS compliant, they will be sourced by init. +inst_hook() { + if ! [[ -f $3 ]]; then + dfatal "Cannot install a hook ($3) that does not exist." + dfatal "Aborting initrd creation." + exit 1 + elif ! [[ "$hookdirs" == *$1* ]]; then + dfatal "No such hook type $1. Aborting initrd creation." + exit 1 + fi + inst_simple "$3" "/lib/dracut/hooks/${1}/${2}-${3##*/}" +} + +# install any of listed files +# +# If first argument is '-d' and second some destination path, first accessible +# source is installed into this path, otherwise it will installed in the same +# path as source. If none of listed files was installed, function return 1. +# On first successful installation it returns with 0 status. +# +# Example: +# +# inst_any -d /bin/foo /bin/bar /bin/baz +# +# Lets assume that /bin/baz exists, so it will be installed as /bin/foo in +# initramfs. +inst_any() { + local to f + + [[ $1 = '-d' ]] && to="$2" && shift 2 + + for f in "$@"; do + if [[ -e $f ]]; then + [[ $to ]] && inst "$f" "$to" && return 0 + inst "$f" && return 0 + fi + done + + return 1 +} + + +# inst_libdir_file [-n ] [...] +# Install a located on a lib directory to the initramfs image +# -n install matching files +inst_libdir_file() { + local _files + if [[ "$1" == "-n" ]]; then + local _pattern=$2 + shift 2 + for _dir in $libdirs; do + for _i in "$@"; do + for _f in "$_dir"/$_i; do + [[ "$_f" =~ $_pattern ]] || continue + [[ -e "$_f" ]] && _files+="$_f " + done + done + done + else + for _dir in $libdirs; do + for _i in "$@"; do + for _f in "$_dir"/$_i; do + [[ -e "$_f" ]] && _files+="$_f " + done + done + done + fi + [[ $_files ]] && dracut_install $_files +} + + +# install function decompressing the target and handling symlinks +# $@ = list of compressed (gz or bz2) files or symlinks pointing to such files +# +# Function install targets in the same paths inside overlay but decompressed +# and without extensions (.gz, .bz2). +inst_decompress() { + local _src _cmd + + for _src in $@ + do + case ${_src} in + *.gz) _cmd='gzip -f -d' ;; + *.bz2) _cmd='bzip2 -d' ;; + *) return 1 ;; + esac + inst_simple ${_src} + # Decompress with chosen tool. We assume that tool changes name e.g. + # from 'name.gz' to 'name'. + ${_cmd} "${initdir}${_src}" + done +} + +# It's similar to above, but if file is not compressed, performs standard +# install. +# $@ = list of files +inst_opt_decompress() { + local _src + + for _src in $@ + do + inst_decompress "${_src}" || inst "${_src}" + done +} + +# module_check +# execute the check() function of module-setup.sh of +# or the "check" script, if module-setup.sh is not found +# "check $hostonly" is called +module_check() { + local _moddir=$(echo ${dracutbasedir}/modules.d/??${1}) + local _ret + local _forced=0 + local _hostonly=$hostonly + [ $# -eq 2 ] && _forced=$2 + [[ -d $_moddir ]] || return 1 + if [[ ! -f $_moddir/module-setup.sh ]]; then + # if we do not have a check script, we are unconditionally included + [[ -x $_moddir/check ]] || return 0 + [ $_forced -ne 0 ] && unset hostonly + $_moddir/check $hostonly + _ret=$? + else + unset check depends install installkernel + check() { true; } + . $_moddir/module-setup.sh + is_func check || return 0 + [ $_forced -ne 0 ] && unset hostonly + check $hostonly + _ret=$? + unset check depends install installkernel + fi + hostonly=$_hostonly + return $_ret +} + +# module_check_mount +# execute the check() function of module-setup.sh of +# or the "check" script, if module-setup.sh is not found +# "mount_needs=1 check 0" is called +module_check_mount() { + local _moddir=$(echo ${dracutbasedir}/modules.d/??${1}) + local _ret + mount_needs=1 + [[ -d $_moddir ]] || return 1 + if [[ ! -f $_moddir/module-setup.sh ]]; then + # if we do not have a check script, we are unconditionally included + [[ -x $_moddir/check ]] || return 0 + mount_needs=1 $_moddir/check 0 + _ret=$? + else + unset check depends install installkernel + check() { false; } + . $_moddir/module-setup.sh + check 0 + _ret=$? + unset check depends install installkernel + fi + unset mount_needs + return $_ret +} + +# module_depends +# execute the depends() function of module-setup.sh of +# or the "depends" script, if module-setup.sh is not found +module_depends() { + local _moddir=$(echo ${dracutbasedir}/modules.d/??${1}) + local _ret + [[ -d $_moddir ]] || return 1 + if [[ ! -f $_moddir/module-setup.sh ]]; then + # if we do not have a check script, we have no deps + [[ -x $_moddir/check ]] || return 0 + $_moddir/check -d + return $? + else + unset check depends install installkernel + depends() { true; } + . $_moddir/module-setup.sh + depends + _ret=$? + unset check depends install installkernel + return $_ret + fi +} + +# module_install +# execute the install() function of module-setup.sh of +# or the "install" script, if module-setup.sh is not found +module_install() { + local _moddir=$(echo ${dracutbasedir}/modules.d/??${1}) + local _ret + [[ -d $_moddir ]] || return 1 + if [[ ! -f $_moddir/module-setup.sh ]]; then + [[ -x $_moddir/install ]] && . "$_moddir/install" + return $? + else + unset check depends install installkernel + install() { true; } + . $_moddir/module-setup.sh + install + _ret=$? + unset check depends install installkernel + return $_ret + fi +} + +# module_installkernel +# execute the installkernel() function of module-setup.sh of +# or the "installkernel" script, if module-setup.sh is not found +module_installkernel() { + local _moddir=$(echo ${dracutbasedir}/modules.d/??${1}) + local _ret + [[ -d $_moddir ]] || return 1 + if [[ ! -f $_moddir/module-setup.sh ]]; then + [[ -x $_moddir/installkernel ]] && . "$_moddir/installkernel" + return $? + else + unset check depends install installkernel + installkernel() { true; } + . $_moddir/module-setup.sh + installkernel + _ret=$? + unset check depends install installkernel + return $_ret + fi +} + +# check_mount +# check_mount checks, if a dracut module is needed for the given +# device and filesystem types in "${host_fs_types[@]}" +check_mount() { + local _mod=$1 + local _moddir=$(echo ${dracutbasedir}/modules.d/??${1}) + local _ret + local _moddep + + [ "${#host_fs_types[*]}" -le 0 ] && return 1 + + # If we are already scheduled to be loaded, no need to check again. + [[ " $mods_to_load " == *\ $_mod\ * ]] && return 0 + [[ " $mods_checked_as_dep " == *\ $_mod\ * ]] && return 1 + + # This should never happen, but... + [[ -d $_moddir ]] || return 1 + + [[ $2 ]] || mods_checked_as_dep+=" $_mod " + + if [[ " $omit_dracutmodules " == *\ $_mod\ * ]]; then + dinfo "dracut module '$_mod' will not be installed, because it's in the list to be omitted!" + return 1 + fi + + if [[ " $dracutmodules $add_dracutmodules $force_add_dracutmodules" == *\ $_mod\ * ]]; then + module_check_mount $_mod; ret=$? + + # explicit module, so also accept ret=255 + [[ $ret = 0 || $ret = 255 ]] || return 1 + else + # module not in our list + if [[ $dracutmodules = all ]]; then + # check, if we can and should install this module + module_check_mount $_mod || return 1 + else + # skip this module + return 1 + fi + fi + + + for _moddep in $(module_depends $_mod); do + # handle deps as if they were manually added + [[ " $add_dracutmodules " == *\ $_moddep\ * ]] || \ + add_dracutmodules+=" $_moddep " + [[ " $force_add_dracutmodules " == *\ $_moddep\ * ]] || \ + force_add_dracutmodules+=" $_moddep " + # if a module we depend on fail, fail also + if ! check_module $_moddep; then + derror "dracut module '$_mod' depends on '$_moddep', which can't be installed" + return 1 + fi + done + + [[ " $mods_to_load " == *\ $_mod\ * ]] || \ + mods_to_load+=" $_mod " + + return 0 +} + +# check_module [] +# check if a dracut module is to be used in the initramfs process +# if is set, then the process also keeps track +# that the modules were checked for the dependency tracking process +check_module() { + local _mod=$1 + local _moddir=$(echo ${dracutbasedir}/modules.d/??${1}) + local _ret + local _moddep + # If we are already scheduled to be loaded, no need to check again. + [[ " $mods_to_load " == *\ $_mod\ * ]] && return 0 + [[ " $mods_checked_as_dep " == *\ $_mod\ * ]] && return 1 + + # This should never happen, but... + [[ -d $_moddir ]] || return 1 + + [[ $2 ]] || mods_checked_as_dep+=" $_mod " + + if [[ " $omit_dracutmodules " == *\ $_mod\ * ]]; then + dinfo "dracut module '$_mod' will not be installed, because it's in the list to be omitted!" + return 1 + fi + + if [[ " $dracutmodules $add_dracutmodules $force_add_dracutmodules" == *\ $_mod\ * ]]; then + if [[ " $force_add_dracutmodules " == *\ $_mod\ * ]]; then + module_check $_mod 1; ret=$? + else + module_check $_mod 0; ret=$? + fi + # explicit module, so also accept ret=255 + [[ $ret = 0 || $ret = 255 ]] || return 1 + else + # module not in our list + if [[ $dracutmodules = all ]]; then + # check, if we can and should install this module + module_check $_mod || return 1 + else + # skip this module + return 1 + fi + fi + + for _moddep in $(module_depends $_mod); do + # handle deps as if they were manually added + [[ " $add_dracutmodules " == *\ $_moddep\ * ]] || \ + add_dracutmodules+=" $_moddep " + [[ " $force_add_dracutmodules " == *\ $_moddep\ * ]] || \ + force_add_dracutmodules+=" $_moddep " + # if a module we depend on fail, fail also + if ! check_module $_moddep; then + derror "dracut module '$_mod' depends on '$_moddep', which can't be installed" + return 1 + fi + done + + [[ " $mods_to_load " == *\ $_mod\ * ]] || \ + mods_to_load+=" $_mod " + + return 0 +} + +# for_each_module_dir +# execute " 1" +for_each_module_dir() { + local _modcheck + local _mod + local _moddir + local _func + _func=$1 + for _moddir in "$dracutbasedir/modules.d"/[0-9][0-9]*; do + _mod=${_moddir##*/}; _mod=${_mod#[0-9][0-9]} + $_func $_mod 1 + done + + # Report any missing dracut modules, the user has specified + _modcheck="$add_dracutmodules $force_add_dracutmodules" + [[ $dracutmodules != all ]] && _modcheck="$m $dracutmodules" + for _mod in $_modcheck; do + [[ " $mods_to_load " == *\ $_mod\ * ]] && continue + [[ " $omit_dracutmodules " == *\ $_mod\ * ]] && continue + derror "dracut module '$_mod' cannot be found or installed." + done +} + +# Install a single kernel module along with any firmware it may require. +# $1 = full path to kernel module to install +install_kmod_with_fw() { + # no need to go further if the module is already installed + + [[ -e "${initdir}/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" ]] \ + && return 0 + + if [[ $DRACUT_KERNEL_LAZY_HASHDIR ]] && [[ -e "$DRACUT_KERNEL_LAZY_HASHDIR/${1##*/}" ]]; then + read ret < "$DRACUT_KERNEL_LAZY_HASHDIR/${1##*/}" + return $ret + fi + + if [[ $omit_drivers ]]; then + local _kmod=${1##*/} + _kmod=${_kmod%.ko} + _kmod=${_kmod/-/_} + if [[ "$_kmod" =~ $omit_drivers ]]; then + dinfo "Omitting driver $_kmod" + return 0 + fi + if [[ "${1##*/lib/modules/$kernel/}" =~ $omit_drivers ]]; then + dinfo "Omitting driver $_kmod" + return 0 + fi + fi + + inst_simple "$1" "/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" + ret=$? + [[ $DRACUT_KERNEL_LAZY_HASHDIR ]] && \ + [[ -d "$DRACUT_KERNEL_LAZY_HASHDIR" ]] && \ + echo $ret > "$DRACUT_KERNEL_LAZY_HASHDIR/${1##*/}" + (($ret != 0)) && return $ret + + local _modname=${1##*/} _fwdir _found _fw + _modname=${_modname%.ko*} + for _fw in $(modinfo -k $kernel -F firmware $1 2>/dev/null); do + _found='' + for _fwdir in $fw_dir; do + if [[ -d $_fwdir && -f $_fwdir/$_fw ]]; then + inst_simple "$_fwdir/$_fw" "/lib/firmware/$_fw" + _found=yes + fi + done + if [[ $_found != yes ]]; then + if ! [[ -d $(echo /sys/module/${_modname//-/_}|{ read a b; echo $a; }) ]]; then + dinfo "Possible missing firmware \"${_fw}\" for kernel module" \ + "\"${_modname}.ko\"" + else + dwarn "Possible missing firmware \"${_fw}\" for kernel module" \ + "\"${_modname}.ko\"" + fi + fi + done + return 0 +} + +# Do something with all the dependencies of a kernel module. +# Note that kernel modules depend on themselves using the technique we use +# $1 = function to call for each dependency we find +# It will be passed the full path to the found kernel module +# $2 = module to get dependencies for +# rest of args = arguments to modprobe +# _fderr specifies FD passed from surrounding scope +for_each_kmod_dep() { + local _func=$1 _kmod=$2 _cmd _modpath _options + shift 2 + modprobe "$@" --ignore-install --show-depends $_kmod 2>&${_fderr} | ( + while read _cmd _modpath _options; do + [[ $_cmd = insmod ]] || continue + $_func ${_modpath} || exit $? + done + ) +} + +dracut_kernel_post() { + local _moddirname=${srcmods%%/lib/modules/*} + + if [[ $DRACUT_KERNEL_LAZY_HASHDIR ]] && [[ -f "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist" ]]; then + xargs -r modprobe -a ${_moddirname+-d ${_moddirname}/} \ + --ignore-install --show-depends --set-version $kernel \ + < "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist" 2>/dev/null \ + | sort -u \ + | while read _cmd _modpath _options; do + [[ $_cmd = insmod ]] || continue + echo "$_modpath" + done > "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist.dep" + + ( + if [[ $DRACUT_INSTALL ]] && [[ -z $_moddirname ]]; then + xargs -r $DRACUT_INSTALL ${initdir+-D "$initdir"} -a < "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist.dep" + else + while read _modpath; do + local _destpath=$_modpath + [[ $_moddirname ]] && _destpath=${_destpath##$_moddirname/} + _destpath=${_destpath##*/lib/modules/$kernel/} + inst_simple "$_modpath" "/lib/modules/$kernel/${_destpath}" || exit $? + done < "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist.dep" + fi + ) & + + if [[ $DRACUT_INSTALL ]]; then + xargs -r modinfo -k $kernel -F firmware < "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist.dep" \ + | while read line; do + for _fwdir in $fw_dir; do + echo $_fwdir/$line; + done; + done | xargs -r $DRACUT_INSTALL ${initdir+-D "$initdir"} -a -o + else + for _fw in $(xargs -r modinfo -k $kernel -F firmware < "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist.dep"); do + for _fwdir in $fw_dir; do + if [[ -d $_fwdir && -f $_fwdir/$_fw ]]; then + inst_simple "$_fwdir/$_fw" "/lib/firmware/$_fw" + break + fi + done + done + fi + + wait + fi + + for _f in modules.builtin.bin modules.builtin; do + [[ $srcmods/$_f ]] && break + done || { + dfatal "No modules.builtin.bin and modules.builtin found!" + return 1 + } + + for _f in modules.builtin.bin modules.builtin modules.order; do + [[ $srcmods/$_f ]] && inst_simple "$srcmods/$_f" "/lib/modules/$kernel/$_f" + done + + # generate module dependencies for the initrd + if [[ -d $initdir/lib/modules/$kernel ]] && \ + ! depmod -a -b "$initdir" $kernel; then + dfatal "\"depmod -a $kernel\" failed." + exit 1 + fi + + [[ $DRACUT_KERNEL_LAZY_HASHDIR ]] && rm -fr -- "$DRACUT_KERNEL_LAZY_HASHDIR" +} + +module_is_host_only() { ( + local _mod=$1 + _mod=${_mod##*/} + _mod=${_mod%.ko} + + [[ " $add_drivers " == *\ ${_mod}\ * ]] && return 0 + + # check if module is loaded + for i in /sys/module/${_mod//-/_}; do + [[ -d $i ]] && return 0 + done + + # check if module is loadable on the current kernel + # this covers the case, where a new module is introduced + # or a module was renamed + # or a module changed from builtin to a module + modinfo -F filename "$_mod" &>/dev/null || return 0 + + return 1 + ) +} + +find_kernel_modules_by_path () { + local _OLDIFS + + [[ -f "$srcmods/modules.dep" ]] || return 0 + + _OLDIFS=$IFS + IFS=: + while read a rest; do + [[ $a = */$1/* ]] || continue + printf "%s\n" "$srcmods/$a" + done < "$srcmods/modules.dep" + IFS=$_OLDIFS + return 0 +} + +find_kernel_modules () { + find_kernel_modules_by_path drivers +} + +# instmods [-c [-s]] [ ... ] +# instmods [-c [-s]] +# install kernel modules along with all their dependencies. +# can be e.g. "=block" or "=drivers/usb/storage" +instmods() { + [[ $no_kernel = yes ]] && return + # called [sub]functions inherit _fderr + local _fderr=9 + local _check=no + local _silent=no + if [[ $1 = '-c' ]]; then + _check=yes + shift + fi + + if [[ $1 = '-s' ]]; then + _silent=yes + shift + fi + + function inst1mod() { + local _ret=0 _mod="$1" + case $_mod in + =*) + ( [[ "$_mpargs" ]] && echo $_mpargs + find_kernel_modules_by_path "${_mod#=}" ) \ + | instmods + ((_ret+=$?)) + ;; + --*) _mpargs+=" $_mod" ;; + *) + _mod=${_mod##*/} + # if we are already installed, skip this module and go on + # to the next one. + if [[ $DRACUT_KERNEL_LAZY_HASHDIR ]] && \ + [[ -f "$DRACUT_KERNEL_LAZY_HASHDIR/${_mod%.ko}.ko" ]]; then + read _ret <"$DRACUT_KERNEL_LAZY_HASHDIR/${_mod%.ko}.ko" + return $_ret + fi + + if [[ $omit_drivers ]] && [[ "$1" =~ $omit_drivers ]]; then + dinfo "Omitting driver ${_mod##$srcmods}" + return 0 + fi + + # If we are building a host-specific initramfs and this + # module is not already loaded, move on to the next one. + [[ $hostonly ]] \ + && ! module_is_host_only "$_mod" \ + && return 0 + + if [[ "$_check" = "yes" ]] || ! [[ $DRACUT_KERNEL_LAZY_HASHDIR ]]; then + # We use '-d' option in modprobe only if modules prefix path + # differs from default '/'. This allows us to use dracut with + # old version of modprobe which doesn't have '-d' option. + local _moddirname=${srcmods%%/lib/modules/*} + [[ -n ${_moddirname} ]] && _moddirname="-d ${_moddirname}/" + + # ok, load the module, all its dependencies, and any firmware + # it may require + for_each_kmod_dep install_kmod_with_fw $_mod \ + --set-version $kernel ${_moddirname} $_mpargs + ((_ret+=$?)) + else + [[ $DRACUT_KERNEL_LAZY_HASHDIR ]] && \ + echo $_mod >> "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist" + fi + ;; + esac + return $_ret + } + + function instmods_1() { + local _mod _mpargs + if (($# == 0)); then # filenames from stdin + while read _mod; do + inst1mod "${_mod%.ko*}" || { + if [[ "$_check" == "yes" ]]; then + [[ "$_silent" == "no" ]] && dfatal "Failed to install module $_mod" + return 1 + fi + } + done + fi + while (($# > 0)); do # filenames as arguments + inst1mod ${1%.ko*} || { + if [[ "$_check" == "yes" ]]; then + [[ "$_silent" == "no" ]] && dfatal "Failed to install module $1" + return 1 + fi + } + shift + done + return 0 + } + + local _ret _filter_not_found='FATAL: Module .* not found.' + # Capture all stderr from modprobe to _fderr. We could use {var}>... + # redirections, but that would make dracut require bash4 at least. + eval "( instmods_1 \"\$@\" ) ${_fderr}>&1" \ + | while read line; do [[ "$line" =~ $_filter_not_found ]] || echo $line;done | derror + _ret=$? + return $_ret +} +# get_cpu_vendor +# Only two values are returned: AMD or Intel +get_cpu_vendor () +{ + if grep -qE AMD /proc/cpuinfo; then + printf "AMD" + fi + if grep -qE Intel /proc/cpuinfo; then + printf "Intel" + fi +} + +# get_host_ucode +# Get the hosts' ucode file based on the /proc/cpuinfo +get_ucode_file () +{ + local family=`grep -E "cpu family" /proc/cpuinfo | head -1 | sed s/.*:\ //` + local model=`grep -E "model" /proc/cpuinfo |grep -v name | head -1 | sed s/.*:\ //` + local stepping=`grep -E "stepping" /proc/cpuinfo | head -1 | sed s/.*:\ //` + + if [[ "$(get_cpu_vendor)" == "AMD" ]]; then + # If family greater or equal than 0x15 + if [[ $family -ge 21 ]]; then + printf "microcode_amd_fam15h.bin" + else + printf "microcode_amd.bin" + fi + fi + if [[ "$(get_cpu_vendor)" == "Intel" ]]; then + # The /proc/cpuinfo are in decimal. + printf "%02x-%02x-%02x" ${family} ${model} ${stepping} + fi +} diff --git a/files/draklive-install.d/run.d/gsettings.sh b/files/draklive-install.d/run.d/gsettings.sh new file mode 100755 index 0000000..daf5802 --- /dev/null +++ b/files/draklive-install.d/run.d/gsettings.sh @@ -0,0 +1 @@ +gsettings set org.gnome.desktop.lockdown disable-lock-screen true diff --git a/files/finish-install.DVD b/files/finish-install.DVD new file mode 100644 index 0000000..fed1dd5 --- /dev/null +++ b/files/finish-install.DVD @@ -0,0 +1,7 @@ +FINISH_INSTALL=yes +NETWORK=no +URPMI=no +AUTHENTICATION=no +USERS=no +TIMEZONE=simplified +COUNTRY=simplified diff --git a/files/halt.local.DVD b/files/halt.local.DVD new file mode 100755 index 0000000..6254c61 --- /dev/null +++ b/files/halt.local.DVD @@ -0,0 +1,23 @@ +#!/usr/bin/perl + +use lib qw(/usr/lib/libDrakX); +use MDK::Common; +use detect_devices; +use c; + +my ($device) = cat_("/proc/mounts") =~ m!(/dev/\S+)\s+/live/media\s+iso9660!; +$device or exit; + +# try to put halt/reboot in cache, if not called directly from them +# mount is also needed by end of /etc/init.d/halt +system("$_ --help &>/dev/null") foreach qw(halt mount reboot); + +my $f = detect_devices::tryOpen($device); +# see openCdromTray() from install::any +ioctl($f, c::CDROM_LOCKDOOR(), 0); # unlock door +ioctl($f, c::CDROMEJECT(), 0); + +print "\n\nPlease press (or ) once the medium is removed.\n"; +system("read < /dev/console"); + +ioctl($f, c::CDROMCLOSETRAY(), 0); diff --git a/files/shorewall-interfaces b/files/shorewall-interfaces new file mode 100644 index 0000000..84b0899 --- /dev/null +++ b/files/shorewall-interfaces @@ -0,0 +1,13 @@ +# +# Shorewall version 4 - Interfaces File +# +# For information about entries in this file, type "man shorewall-interfaces" +# +# The manpage is also online at +# http://www.shorewall.net/manpages/shorewall-interfaces.html +# +############################################################################### +FORMAT 2 +############################################################################### +#ZONE INTERFACE OPTIONS +net + detect diff --git a/files/shorewall6-interfaces b/files/shorewall6-interfaces new file mode 100644 index 0000000..c14d03a --- /dev/null +++ b/files/shorewall6-interfaces @@ -0,0 +1,13 @@ +# +# Shorewall6 version 4 - Interfaces File +# +# For information about entries in this file, type "man shorewall6-interfaces" +# +# The manpage is also online at +# http://www.shorewall.net/manpages6/shorewall6-interfaces.html +# +############################################################################### +FORMAT 2 +############################################################################### +#ZONE INTERFACE OPTIONS +net + detect -- cgit v1.2.1