import rear-2.6-15.el9
This commit is contained in:
parent
8b888909f4
commit
91bb4bdd07
171
SOURCES/rear-bz2083272.patch
Normal file
171
SOURCES/rear-bz2083272.patch
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
commit 3d1bcf1b50ca8201a3805bc7cab6ca69c14951a1
|
||||||
|
Author: pcahyna <pcahyna@users.noreply.github.com>
|
||||||
|
Date: Thu May 5 12:11:55 2022 +0200
|
||||||
|
|
||||||
|
Merge pull request #2795 from pcahyna/recover-check-sums
|
||||||
|
|
||||||
|
Verify file hashes at the end of recover after file restore from backup
|
||||||
|
|
||||||
|
diff --git a/usr/share/rear/conf/default.conf b/usr/share/rear/conf/default.conf
|
||||||
|
index f231bf3d..881a0af0 100644
|
||||||
|
--- a/usr/share/rear/conf/default.conf
|
||||||
|
+++ b/usr/share/rear/conf/default.conf
|
||||||
|
@@ -313,8 +313,30 @@ CDROM_SIZE=20
|
||||||
|
# which exits with non-zero exit code when the disk layout or those files changed
|
||||||
|
# (cf. https://github.com/rear/rear/issues/1134) but the checklayout workflow
|
||||||
|
# does not automatically recreate the rescue/recovery system.
|
||||||
|
+# Files matching FILES_TO_PATCH_PATTERNS are added to this list automatically.
|
||||||
|
CHECK_CONFIG_FILES=( '/etc/drbd/' '/etc/drbd.conf' '/etc/lvm/lvm.conf' '/etc/multipath.conf' '/etc/rear/' '/etc/udev/udev.conf' )
|
||||||
|
|
||||||
|
+# FILES_TO_PATCH_PATTERNS is a space-separated list of shell glob patterns.
|
||||||
|
+# Files that match are eligible for a final migration of UUIDs and other
|
||||||
|
+# identifiers after recovery (if the layout recreation process has led
|
||||||
|
+# to a change of an UUID or a device name and a corresponding change needs
|
||||||
|
+# to be performed on restored configuration files ).
|
||||||
|
+# See finalize/GNU/Linux/280_migrate_uuid_tags.sh
|
||||||
|
+# The [] around the first letter make sure that shopt -s nullglob removes this file from the list if it does not exist
|
||||||
|
+
|
||||||
|
+FILES_TO_PATCH_PATTERNS="[b]oot/{grub.conf,menu.lst,device.map} [e]tc/grub.* \
|
||||||
|
+ [b]oot/grub/{grub.conf,grub.cfg,menu.lst,device.map} \
|
||||||
|
+ [b]oot/grub2/{grub.conf,grub.cfg,menu.lst,device.map} \
|
||||||
|
+ [e]tc/sysconfig/grub [e]tc/sysconfig/bootloader \
|
||||||
|
+ [e]tc/lilo.conf [e]tc/elilo.conf \
|
||||||
|
+ [e]tc/yaboot.conf \
|
||||||
|
+ [e]tc/mtab [e]tc/fstab \
|
||||||
|
+ [e]tc/mtools.conf \
|
||||||
|
+ [e]tc/smartd.conf [e]tc/sysconfig/smartmontools \
|
||||||
|
+ [e]tc/sysconfig/rawdevices \
|
||||||
|
+ [e]tc/security/pam_mount.conf.xml \
|
||||||
|
+ [b]oot/efi/*/*/grub.cfg"
|
||||||
|
+
|
||||||
|
##
|
||||||
|
# Relax-and-Recover recovery system update during "rear recover"
|
||||||
|
#
|
||||||
|
diff --git a/usr/share/rear/finalize/GNU/Linux/250_migrate_disk_devices_layout.sh b/usr/share/rear/finalize/GNU/Linux/250_migrate_disk_devices_layout.sh
|
||||||
|
index 1a91a0e3..e869e5e9 100644
|
||||||
|
--- a/usr/share/rear/finalize/GNU/Linux/250_migrate_disk_devices_layout.sh
|
||||||
|
+++ b/usr/share/rear/finalize/GNU/Linux/250_migrate_disk_devices_layout.sh
|
||||||
|
@@ -29,19 +29,9 @@ LogPrint "The original restored files get saved in $save_original_file_dir (in $
|
||||||
|
|
||||||
|
local symlink_target=""
|
||||||
|
local restored_file=""
|
||||||
|
-# the funny [] around the first letter make sure that shopt -s nullglob removes this file from the list if it does not exist
|
||||||
|
-# the files without a [] are mandatory, like fstab FIXME: but below there is [e]tc/fstab not etc/fstab - why?
|
||||||
|
-
|
||||||
|
-for restored_file in [b]oot/{grub.conf,menu.lst,device.map} [e]tc/grub.* [b]oot/grub/{grub.conf,menu.lst,device.map} \
|
||||||
|
- [b]oot/grub2/{grub.conf,grub.cfg,menu.lst,device.map} \
|
||||||
|
- [e]tc/sysconfig/grub [e]tc/sysconfig/bootloader \
|
||||||
|
- [e]tc/lilo.conf \
|
||||||
|
- [e]tc/yaboot.conf \
|
||||||
|
- [e]tc/mtab [e]tc/fstab \
|
||||||
|
- [e]tc/mtools.conf \
|
||||||
|
- [e]tc/smartd.conf [e]tc/sysconfig/smartmontools \
|
||||||
|
- [e]tc/sysconfig/rawdevices \
|
||||||
|
- [e]tc/security/pam_mount.conf.xml [b]oot/efi/*/*/grub.cfg
|
||||||
|
+# The variable expansion is deliberately not quoted in order to perform
|
||||||
|
+# pathname expansion on the variable value.
|
||||||
|
+for restored_file in $FILES_TO_PATCH_PATTERNS
|
||||||
|
do
|
||||||
|
# Silently skip directories and file not found:
|
||||||
|
test -f "$restored_file" || continue
|
||||||
|
diff --git a/usr/share/rear/finalize/GNU/Linux/280_migrate_uuid_tags.sh b/usr/share/rear/finalize/GNU/Linux/280_migrate_uuid_tags.sh
|
||||||
|
index 074689a1..d994ce8e 100644
|
||||||
|
--- a/usr/share/rear/finalize/GNU/Linux/280_migrate_uuid_tags.sh
|
||||||
|
+++ b/usr/share/rear/finalize/GNU/Linux/280_migrate_uuid_tags.sh
|
||||||
|
@@ -23,18 +23,9 @@ LogPrint "Migrating filesystem UUIDs in certain restored files in $TARGET_FS_ROO
|
||||||
|
|
||||||
|
local symlink_target=""
|
||||||
|
local restored_file=""
|
||||||
|
-# the funny [] around the first letter make sure that shopt -s nullglob removes this file from the list if it does not exist
|
||||||
|
-# the files without a [] are mandatory, like fstab FIXME: but below there is [e]tc/fstab not etc/fstab - why?
|
||||||
|
-for restored_file in [b]oot/{grub.conf,menu.lst,device.map} [e]tc/grub.* \
|
||||||
|
- [b]oot/grub/{grub.conf,grub.cfg,menu.lst,device.map} \
|
||||||
|
- [b]oot/grub2/{grub.conf,grub.cfg,menu.lst,device.map} \
|
||||||
|
- [e]tc/sysconfig/grub [e]tc/sysconfig/bootloader \
|
||||||
|
- [e]tc/lilo.conf [e]tc/elilo.conf \
|
||||||
|
- [e]tc/mtab [e]tc/fstab \
|
||||||
|
- [e]tc/mtools.conf \
|
||||||
|
- [e]tc/smartd.conf [e]tc/sysconfig/smartmontools \
|
||||||
|
- [e]tc/sysconfig/rawdevices \
|
||||||
|
- [e]tc/security/pam_mount.conf.xml [b]oot/efi/*/*/grub.cfg
|
||||||
|
+# The variable expansion is deliberately not quoted in order to perform
|
||||||
|
+# pathname expansion on the variable value.
|
||||||
|
+for restored_file in $FILES_TO_PATCH_PATTERNS
|
||||||
|
do
|
||||||
|
# Silently skip directories and file not found:
|
||||||
|
test -f "$restored_file" || continue
|
||||||
|
diff --git a/usr/share/rear/finalize/default/060_compare_files.sh b/usr/share/rear/finalize/default/060_compare_files.sh
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..6947fda9
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/usr/share/rear/finalize/default/060_compare_files.sh
|
||||||
|
@@ -0,0 +1,6 @@
|
||||||
|
+if [ -e $VAR_DIR/layout/config/files.md5sum ] ; then
|
||||||
|
+ if ! chroot $TARGET_FS_ROOT md5sum -c --quiet < $VAR_DIR/layout/config/files.md5sum 1>> >( tee -a "$RUNTIME_LOGFILE" 1>&7 ) 2>> >( tee -a "$RUNTIME_LOGFILE" 1>&8 ) ; then
|
||||||
|
+ LogPrintError "Error: Restored files do not match the recreated system in $TARGET_FS_ROOT"
|
||||||
|
+ return 1
|
||||||
|
+ fi
|
||||||
|
+fi
|
||||||
|
diff --git a/usr/share/rear/layout/save/default/490_check_files_to_patch.sh b/usr/share/rear/layout/save/default/490_check_files_to_patch.sh
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..ee717063
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/usr/share/rear/layout/save/default/490_check_files_to_patch.sh
|
||||||
|
@@ -0,0 +1,43 @@
|
||||||
|
+# FILES_TO_PATCH_PATTERNS is a space-separated list of shell glob patterns.
|
||||||
|
+# Files that match are eligible for a final migration of UUIDs and other
|
||||||
|
+# identifiers after recovery (if the layout recreation process has led
|
||||||
|
+# to a change of an UUID or a device name and a corresponding change needs
|
||||||
|
+# to be performed on restored configuration files ).
|
||||||
|
+# See finalize/GNU/Linux/280_migrate_uuid_tags.sh
|
||||||
|
+# We should add all such files to CHECK_CONFIG_FILES - if they change,
|
||||||
|
+# we risk inconsistencies between the restored files and recreated layout,
|
||||||
|
+# or failures of UUID migration.
|
||||||
|
+
|
||||||
|
+local file final_file symlink_target
|
||||||
|
+
|
||||||
|
+# The patterns are relative to /, change directory there
|
||||||
|
+# so that the shell finds the files during pathname expansion
|
||||||
|
+pushd / >/dev/null
|
||||||
|
+# The variable expansion is deliberately not quoted in order to perform
|
||||||
|
+# pathname expansion on the variable value.
|
||||||
|
+for file in $FILES_TO_PATCH_PATTERNS ; do
|
||||||
|
+ final_file="/$file"
|
||||||
|
+ IsInArray "$final_file" "${CHECK_CONFIG_FILES[@]}" && continue
|
||||||
|
+ # Symlink handling (partially from 280_migrate_uuid_tags.sh):
|
||||||
|
+ # avoid dead symlinks, and symlinks to files on dynamic filesystems
|
||||||
|
+ # ( /proc etc.) - they are expected to change and validating
|
||||||
|
+ # their checksums has no sense
|
||||||
|
+ if test -L "$final_file" ; then
|
||||||
|
+ if symlink_target="$( readlink -e "$final_file" )" ; then
|
||||||
|
+ # If the symlink target contains /proc/ /sys/ /dev/ or /run/ we skip it because then
|
||||||
|
+ # the symlink target is considered to not be a restored file that needs to be patched
|
||||||
|
+ # and thus we don't need to generate and check its hash, either
|
||||||
|
+ # cf. https://github.com/rear/rear/pull/2047#issuecomment-464846777
|
||||||
|
+ if echo $symlink_target | egrep -q '/proc/|/sys/|/dev/|/run/' ; then
|
||||||
|
+ Log "Skip adding symlink $final_file target $symlink_target on /proc/ /sys/ /dev/ or /run/ to CHECK_CONFIG_FILES"
|
||||||
|
+ continue
|
||||||
|
+ fi
|
||||||
|
+ Debug "Adding symlink $final_file with target $symlink_target to CHECK_CONFIG_FILES"
|
||||||
|
+ else
|
||||||
|
+ LogPrint "Skip adding dead symlink $final_file to CHECK_CONFIG_FILES"
|
||||||
|
+ continue
|
||||||
|
+ fi
|
||||||
|
+ fi
|
||||||
|
+ CHECK_CONFIG_FILES+=( "$final_file" )
|
||||||
|
+done
|
||||||
|
+popd >/dev/null
|
||||||
|
diff --git a/usr/share/rear/layout/save/default/600_snapshot_files.sh b/usr/share/rear/layout/save/default/600_snapshot_files.sh
|
||||||
|
index 0ebf197c..3ac6b07e 100644
|
||||||
|
--- a/usr/share/rear/layout/save/default/600_snapshot_files.sh
|
||||||
|
+++ b/usr/share/rear/layout/save/default/600_snapshot_files.sh
|
||||||
|
@@ -3,7 +3,8 @@ if [ "$WORKFLOW" = "checklayout" ] ; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
-config_files=()
|
||||||
|
+local obj
|
||||||
|
+local config_files=()
|
||||||
|
for obj in "${CHECK_CONFIG_FILES[@]}" ; do
|
||||||
|
if [ -d "$obj" ] ; then
|
||||||
|
config_files+=( $( find "$obj" -type f ) )
|
58
SOURCES/rear-bz2096900.patch
Normal file
58
SOURCES/rear-bz2096900.patch
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
commit 389e5026df575ad98695191044257cf2b33d565b
|
||||||
|
Author: pcahyna <pcahyna@users.noreply.github.com>
|
||||||
|
Date: Mon Jul 4 15:48:43 2022 +0200
|
||||||
|
|
||||||
|
Merge pull request #2825 from lzaoral/replace-mkinitrd-with-dracut
|
||||||
|
|
||||||
|
Replace `mkinitrd` with `dracut` on Fedora and RHEL
|
||||||
|
|
||||||
|
diff --git a/usr/share/rear/finalize/Fedora/i386/550_rebuild_initramfs.sh b/usr/share/rear/finalize/Fedora/i386/550_rebuild_initramfs.sh
|
||||||
|
index 3476b77f..f296e624 100644
|
||||||
|
--- a/usr/share/rear/finalize/Fedora/i386/550_rebuild_initramfs.sh
|
||||||
|
+++ b/usr/share/rear/finalize/Fedora/i386/550_rebuild_initramfs.sh
|
||||||
|
@@ -61,7 +61,7 @@ NEW_INITRD_MODULES=( $(tr " " "\n" <<< "${NEW_INITRD_MODULES[*]}" | sort | uniq
|
||||||
|
Log "New INITRD_MODULES='${OLD_INITRD_MODULES[@]} ${NEW_INITRD_MODULES[@]}'"
|
||||||
|
INITRD_MODULES="${OLD_INITRD_MODULES[@]} ${NEW_INITRD_MODULES[@]}"
|
||||||
|
|
||||||
|
-WITH_INITRD_MODULES=$( printf '%s\n' ${INITRD_MODULES[@]} | awk '{printf "--with=%s ", $1}' )
|
||||||
|
+WITH_INITRD_MODULES=$( printf '%s\n' ${INITRD_MODULES[@]} | awk '{printf "--add-drivers=%s ", $1}' )
|
||||||
|
|
||||||
|
# Recreate any initrd or initramfs image under $TARGET_FS_ROOT/boot/ with new drivers
|
||||||
|
# Images ignored:
|
||||||
|
@@ -76,19 +76,19 @@ for INITRD_IMG in $( ls $TARGET_FS_ROOT/boot/initramfs-*.img $TARGET_FS_ROOT/boo
|
||||||
|
# Do not use KERNEL_VERSION here because that is readonly in the rear main script:
|
||||||
|
kernel_version=$( basename $( echo $INITRD_IMG ) | cut -f2- -d"-" | sed s/"\.img"// )
|
||||||
|
INITRD=$( echo $INITRD_IMG | egrep -o "/boot/.*" )
|
||||||
|
- LogPrint "Running mkinitrd..."
|
||||||
|
- # Run mkinitrd directly in chroot without a login shell in between (see https://github.com/rear/rear/issues/862).
|
||||||
|
- # We need the mkinitrd binary in the chroot environment i.e. the mkinitrd binary in the recreated system.
|
||||||
|
- # Normally we would use a login shell like: chroot $TARGET_FS_ROOT /bin/bash --login -c 'type -P mkinitrd'
|
||||||
|
+ LogPrint "Running dracut..."
|
||||||
|
+ # Run dracut directly in chroot without a login shell in between (see https://github.com/rear/rear/issues/862).
|
||||||
|
+ # We need the dracut binary in the chroot environment i.e. the dracut binary in the recreated system.
|
||||||
|
+ # Normally we would use a login shell like: chroot $TARGET_FS_ROOT /bin/bash --login -c 'type -P dracut'
|
||||||
|
# because otherwise there is no useful PATH (PATH is only /bin) so that 'type -P' won't find it
|
||||||
|
# but we cannot use a login shell because that contradicts https://github.com/rear/rear/issues/862
|
||||||
|
# so that we use a plain (non-login) shell and set a (hopefully) reasonable PATH:
|
||||||
|
- local mkinitrd_binary=$( chroot $TARGET_FS_ROOT /bin/bash -c 'PATH=/sbin:/usr/sbin:/usr/bin:/bin type -P mkinitrd' )
|
||||||
|
- # If there is no mkinitrd in the chroot environment plain 'chroot $TARGET_FS_ROOT' will hang up endlessly
|
||||||
|
+ local dracut_binary=$( chroot $TARGET_FS_ROOT /bin/bash -c 'PATH=/sbin:/usr/sbin:/usr/bin:/bin type -P dracut' )
|
||||||
|
+ # If there is no dracut in the chroot environment plain 'chroot $TARGET_FS_ROOT' will hang up endlessly
|
||||||
|
# and then "rear recover" cannot be aborted with the usual [Ctrl]+[C] keys.
|
||||||
|
# Use plain $var because when var contains only blanks test "$var" results true because test " " results true:
|
||||||
|
- if test $mkinitrd_binary ; then
|
||||||
|
- if chroot $TARGET_FS_ROOT $mkinitrd_binary -v -f ${WITH_INITRD_MODULES[@]} $INITRD $kernel_version >&2 ; then
|
||||||
|
+ if test $dracut_binary ; then
|
||||||
|
+ if chroot $TARGET_FS_ROOT $dracut_binary -v -f ${WITH_INITRD_MODULES[@]} $INITRD $kernel_version >&2 ; then
|
||||||
|
LogPrint "Updated initrd with new drivers for kernel $kernel_version."
|
||||||
|
else
|
||||||
|
LogPrint "WARNING:
|
||||||
|
@@ -99,7 +99,7 @@ and decide yourself, whether the system will boot or not.
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
LogPrint "WARNING:
|
||||||
|
-Cannot create initrd (found no mkinitrd in the recreated system).
|
||||||
|
+Cannot create initrd (found no dracut in the recreated system).
|
||||||
|
Check the recreated system (mounted at $TARGET_FS_ROOT)
|
||||||
|
and decide yourself, whether the system will boot or not.
|
||||||
|
"
|
130
SOURCES/rear-bz2096916.patch
Normal file
130
SOURCES/rear-bz2096916.patch
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
commit b06d059108db9b0c46cba29cc174f60e129164f1
|
||||||
|
Author: Johannes Meixner <jsmeix@suse.com>
|
||||||
|
Date: Tue Mar 9 14:40:59 2021 +0100
|
||||||
|
|
||||||
|
Merge pull request #2580 from rear/jsmeix-load-nvram-module
|
||||||
|
|
||||||
|
In etc/scripts/system-setup.d/41-load-special-modules.sh
|
||||||
|
load the nvram kernel module if possible to make /dev/nvram appear
|
||||||
|
because /dev/nvram should be there when installing GRUB,
|
||||||
|
see https://github.com/rear/rear/issues/2554
|
||||||
|
and include the nvram kernel module in the recovery system
|
||||||
|
because nvram could be a module in particular on POWER architecture
|
||||||
|
see https://github.com/rear/rear/issues/2554#issuecomment-764720180
|
||||||
|
|
||||||
|
diff --git a/usr/share/rear/build/GNU/Linux/400_copy_modules.sh b/usr/share/rear/build/GNU/Linux/400_copy_modules.sh
|
||||||
|
index d8d733d2..a0ca9084 100644
|
||||||
|
--- a/usr/share/rear/build/GNU/Linux/400_copy_modules.sh
|
||||||
|
+++ b/usr/share/rear/build/GNU/Linux/400_copy_modules.sh
|
||||||
|
@@ -116,8 +116,12 @@ for dummy in "once" ; do
|
||||||
|
# As a way out of this dilemma we add the below listed modules no longer via conf/GNU/Linux.conf
|
||||||
|
# but here after the user config files were sourced so that now the user can specify
|
||||||
|
# MODULES=( 'moduleX' 'moduleY' ) in etc/rear/local.conf to get additional kernel modules
|
||||||
|
- # included in the recovery system in addition to the ones via an empty MODULES=() setting:
|
||||||
|
- MODULES+=( vfat
|
||||||
|
+ # included in the recovery system in addition to the ones via an empty MODULES=() setting.
|
||||||
|
+ # nvram could be a module in particular on POWER architecture,
|
||||||
|
+ # cf. https://github.com/rear/rear/issues/2554#issuecomment-764720180
|
||||||
|
+ # and https://github.com/rear/rear/pull/2580#issuecomment-791344794
|
||||||
|
+ MODULES+=( nvram
|
||||||
|
+ vfat
|
||||||
|
nls_iso8859_1 nls_utf8 nls_cp437
|
||||||
|
af_packet
|
||||||
|
unix
|
||||||
|
diff --git a/usr/share/rear/finalize/Linux-ppc64le/660_install_grub2.sh b/usr/share/rear/finalize/Linux-ppc64le/660_install_grub2.sh
|
||||||
|
index 4c2698f3..0cb3ee41 100644
|
||||||
|
--- a/usr/share/rear/finalize/Linux-ppc64le/660_install_grub2.sh
|
||||||
|
+++ b/usr/share/rear/finalize/Linux-ppc64le/660_install_grub2.sh
|
||||||
|
@@ -104,9 +104,39 @@ fi
|
||||||
|
# Do not update nvram when system is running in PowerNV mode (BareMetal).
|
||||||
|
# grub2-install will fail if not run with the --no-nvram option on a PowerNV system,
|
||||||
|
# see https://github.com/rear/rear/pull/1742
|
||||||
|
-grub2_install_option=""
|
||||||
|
+grub2_no_nvram_option=""
|
||||||
|
if [[ $(awk '/platform/ {print $NF}' < /proc/cpuinfo) == PowerNV ]] ; then
|
||||||
|
- grub2_install_option="--no-nvram"
|
||||||
|
+ grub2_no_nvram_option="--no-nvram"
|
||||||
|
+fi
|
||||||
|
+# Also do not update nvram when no character device node /dev/nvram exists.
|
||||||
|
+# On POWER architecture the nvram kernel driver could be also built as a kernel module
|
||||||
|
+# that gets loaded via etc/scripts/system-setup.d/41-load-special-modules.sh
|
||||||
|
+# but whether or not the nvram kernel driver will then create /dev/nvram
|
||||||
|
+# depends on whether or not the hardware platform supports nvram.
|
||||||
|
+# I <jsmeix@suse.de> asked on a SUSE internal mailing list
|
||||||
|
+# and got the following reply (excerpts):
|
||||||
|
+# ----------------------------------------------------------------
|
||||||
|
+# > I would like to know when /dev/nvram exists and when not.
|
||||||
|
+# > I assume /dev/nvram gets created as other device nodes
|
||||||
|
+# > by the kernel (probably together with udev).
|
||||||
|
+# > I would like to know under what conditions /dev/nvram
|
||||||
|
+# > gets created and when it is not created.
|
||||||
|
+# > It seems on PPC /dev/nvram usually exist but sometimes not.
|
||||||
|
+# In case of powerpc, it gets created by nvram driver
|
||||||
|
+# (nvram_module_init) whenever the powerpc platform driver
|
||||||
|
+# has ppc_md.nvram_size greater than zero in it's machine
|
||||||
|
+# description structure.
|
||||||
|
+# How exactly ppc_md.nvram_size gets gets populated by platform
|
||||||
|
+# code depends on the platform, e.g. on most modern systems
|
||||||
|
+# it gets populated from 'nvram' device tree node
|
||||||
|
+# (and only if such node has #bytes > 0).
|
||||||
|
+# ----------------------------------------------------------------
|
||||||
|
+# So /dev/nvram may not exist regardless that the nvram kernel driver is there
|
||||||
|
+# and then grub2-install must be called with the '--no-nvram' option
|
||||||
|
+# because otherwise installing the bootloader fails
|
||||||
|
+# cf. https://github.com/rear/rear/issues/2554
|
||||||
|
+if ! test -c /dev/nvram ; then
|
||||||
|
+ grub2_no_nvram_option="--no-nvram"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# When GRUB2_INSTALL_DEVICES is specified by the user
|
||||||
|
@@ -134,7 +164,7 @@ if test "$GRUB2_INSTALL_DEVICES" ; then
|
||||||
|
else
|
||||||
|
LogPrint "Installing GRUB2 on $grub2_install_device (specified in GRUB2_INSTALL_DEVICES)"
|
||||||
|
fi
|
||||||
|
- if ! chroot $TARGET_FS_ROOT /bin/bash --login -c "$grub_name-install $grub2_install_option $grub2_install_device" ; then
|
||||||
|
+ if ! chroot $TARGET_FS_ROOT /bin/bash --login -c "$grub_name-install $grub2_no_nvram_option $grub2_install_device" ; then
|
||||||
|
LogPrintError "Failed to install GRUB2 on $grub2_install_device"
|
||||||
|
grub2_install_failed="yes"
|
||||||
|
fi
|
||||||
|
@@ -170,7 +200,7 @@ for part in $part_list ; do
|
||||||
|
LogPrint "Found PPC PReP boot partition $part - installing GRUB2 there"
|
||||||
|
# Erase the first 512 bytes of the PPC PReP boot partition:
|
||||||
|
dd if=/dev/zero of=$part
|
||||||
|
- if chroot $TARGET_FS_ROOT /bin/bash --login -c "$grub_name-install $grub2_install_option $part" ; then
|
||||||
|
+ if chroot $TARGET_FS_ROOT /bin/bash --login -c "$grub_name-install $grub2_no_nvram_option $part" ; then
|
||||||
|
# In contrast to the above behaviour when GRUB2_INSTALL_DEVICES is specified
|
||||||
|
# consider it here as a successful bootloader installation when GRUB2
|
||||||
|
# got installed on at least one PPC PReP boot partition:
|
||||||
|
diff --git a/usr/share/rear/skel/default/etc/scripts/system-setup.d/41-load-special-modules.sh b/usr/share/rear/skel/default/etc/scripts/system-setup.d/41-load-special-modules.sh
|
||||||
|
index 9b0b3b8a..2e1d1912 100644
|
||||||
|
--- a/usr/share/rear/skel/default/etc/scripts/system-setup.d/41-load-special-modules.sh
|
||||||
|
+++ b/usr/share/rear/skel/default/etc/scripts/system-setup.d/41-load-special-modules.sh
|
||||||
|
@@ -1,6 +1,24 @@
|
||||||
|
-# some things are special
|
||||||
|
+# Special cases of kernel module loading.
|
||||||
|
|
||||||
|
-# XEN PV does not autoload some modules
|
||||||
|
-if [ -d /proc/xen ] ; then
|
||||||
|
- modprobe xenblk
|
||||||
|
+# XEN PV does not autoload some modules:
|
||||||
|
+test -d /proc/xen && modprobe xenblk
|
||||||
|
+
|
||||||
|
+# On POWER architecture the nvram kernel driver may be no longer built into the kernel
|
||||||
|
+# but nowadays it could be also built as a kernel module that needs to be loaded
|
||||||
|
+# cf. https://github.com/rear/rear/issues/2554#issuecomment-764720180
|
||||||
|
+# because normally grub2-install gets called without the '--no-nvram' option
|
||||||
|
+# e.g. see finalize/Linux-ppc64le/620_install_grub2.sh
|
||||||
|
+# which is how grub2-install should be called when the hardware supports nvram.
|
||||||
|
+# Nothing to do when the character device node /dev/nvram exists
|
||||||
|
+# because then the nvram kernel driver is already there:
|
||||||
|
+if ! test -c /dev/nvram ; then
|
||||||
|
+ # Nothing can be done when there is no nvram kernel module.
|
||||||
|
+ # Suppress the possible 'modprobe -n nvram' error message like
|
||||||
|
+ # "modprobe: FATAL: Module nvram not found in directory /lib/modules/..."
|
||||||
|
+ # to avoid a possible "FATAL" false alarm message that would appear
|
||||||
|
+ # on the user's terminal during recovery system startup
|
||||||
|
+ # cf. https://github.com/rear/rear/pull/2537#issuecomment-741825046
|
||||||
|
+ # but when there is a nvram kernel module show possible 'modprobe nvram'
|
||||||
|
+ # (error) messages on the user's terminal during recovery system startup:
|
||||||
|
+ modprobe -n nvram 2>/dev/null && modprobe nvram
|
||||||
|
fi
|
37
SOURCES/rear-bz2097437.patch
Normal file
37
SOURCES/rear-bz2097437.patch
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
commit 2922b77e950537799fdadf5b3ebf6a05d97f6f2f
|
||||||
|
Author: pcahyna <pcahyna@users.noreply.github.com>
|
||||||
|
Date: Mon Jun 20 17:42:58 2022 +0200
|
||||||
|
|
||||||
|
Merge pull request #2822 from pcahyna/fix-vim-symlink
|
||||||
|
|
||||||
|
Fix vi in the rescue system on Fedora and RHEL 9
|
||||||
|
|
||||||
|
diff --git a/usr/share/rear/build/GNU/Linux/005_create_symlinks.sh b/usr/share/rear/build/GNU/Linux/005_create_symlinks.sh
|
||||||
|
index df75e07d..55f25bef 100644
|
||||||
|
--- a/usr/share/rear/build/GNU/Linux/005_create_symlinks.sh
|
||||||
|
+++ b/usr/share/rear/build/GNU/Linux/005_create_symlinks.sh
|
||||||
|
@@ -8,7 +8,6 @@
|
||||||
|
ln -sf $v bin/init $ROOTFS_DIR/init >&2
|
||||||
|
ln -sf $v bin $ROOTFS_DIR/sbin >&2
|
||||||
|
ln -sf $v bash $ROOTFS_DIR/bin/sh >&2
|
||||||
|
-ln -sf $v vi $ROOTFS_DIR/bin/vim >&2
|
||||||
|
ln -sf $v true $ROOTFS_DIR/bin/pam_console_apply >&2 # RH/Fedora with udev needs this
|
||||||
|
ln -sf $v ../bin $ROOTFS_DIR/usr/bin >&2
|
||||||
|
ln -sf $v ../bin $ROOTFS_DIR/usr/sbin >&2
|
||||||
|
diff --git a/usr/share/rear/conf/GNU/Linux.conf b/usr/share/rear/conf/GNU/Linux.conf
|
||||||
|
index 89aedd4c..0c97594a 100644
|
||||||
|
--- a/usr/share/rear/conf/GNU/Linux.conf
|
||||||
|
+++ b/usr/share/rear/conf/GNU/Linux.conf
|
||||||
|
@@ -206,6 +206,12 @@ LIBS+=(
|
||||||
|
)
|
||||||
|
|
||||||
|
COPY_AS_IS+=( /dev /etc/inputr[c] /etc/protocols /etc/services /etc/rpc /etc/termcap /etc/terminfo /lib*/terminfo /usr/share/terminfo /etc/netconfig /etc/mke2fs.conf /etc/*-release /etc/localtime /etc/magic /usr/share/misc/magic /etc/dracut.conf /etc/dracut.conf.d /usr/lib/dracut /sbin/modprobe.ksplice-orig /etc/sysctl.conf /etc/sysctl.d /etc/e2fsck.conf )
|
||||||
|
+
|
||||||
|
+# Needed by vi on Fedora and derived distributions
|
||||||
|
+# where vi is a shell script that executes /usr/libexec/vi
|
||||||
|
+# see https://github.com/rear/rear/pull/2822
|
||||||
|
+COPY_AS_IS+=( /usr/libexec/vi )
|
||||||
|
+
|
||||||
|
# Required by curl with https:
|
||||||
|
# There are stored the distribution provided certificates
|
||||||
|
# installed from packages, nothing confidential.
|
21
SOURCES/rear-bz2104005.patch
Normal file
21
SOURCES/rear-bz2104005.patch
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
commit 40ec3bf072a51229e81bfbfa7cedb8a7c7902dbd
|
||||||
|
Author: Johannes Meixner <jsmeix@suse.com>
|
||||||
|
Date: Fri Jun 24 15:11:27 2022 +0200
|
||||||
|
|
||||||
|
Merge pull request #2827 from rear/jsmeix-fail-safe-yes-pipe-lvcreate
|
||||||
|
|
||||||
|
and commit b3fd58fc871e00bd713a0cb081de54d746ffffb3 from pull request #2839
|
||||||
|
|
||||||
|
diff --git a/usr/share/rear/layout/prepare/GNU/Linux/110_include_lvm_code.sh b/usr/share/rear/layout/prepare/GNU/Linux/110_include_lvm_code.sh
|
||||||
|
index 1be17ba8..d34ab335 100644
|
||||||
|
--- a/usr/share/rear/layout/prepare/GNU/Linux/110_include_lvm_code.sh
|
||||||
|
+++ b/usr/share/rear/layout/prepare/GNU/Linux/110_include_lvm_code.sh
|
||||||
|
@@ -263,7 +263,7 @@ $ifline
|
||||||
|
|
||||||
|
LogPrint "Creating LVM volume '$vg/$lvname'; Warning: some properties may not be preserved..."
|
||||||
|
$warnraidline
|
||||||
|
- lvm lvcreate $lvopts $vg <<<y
|
||||||
|
+ lvm lvcreate -y $lvopts $vg
|
||||||
|
|
||||||
|
fi
|
||||||
|
EOF
|
37
SOURCES/rear-bz2111049.patch
Normal file
37
SOURCES/rear-bz2111049.patch
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
commit 1447530f502305ed08149d9b2a56a51fb91af875
|
||||||
|
Author: Johannes Meixner <jsmeix@suse.com>
|
||||||
|
Date: Wed May 25 13:51:14 2022 +0200
|
||||||
|
|
||||||
|
Merge pull request #2808 from rear/jsmeix-exclude-watchdog
|
||||||
|
|
||||||
|
Exclude dev/watchdog* from the ReaR recovery system:
|
||||||
|
In default.conf add dev/watchdog* to COPY_AS_IS_EXCLUDE
|
||||||
|
because watchdog functionality is not wanted in the recovery system
|
||||||
|
because we do not want any automated reboot functionality
|
||||||
|
while disaster recovery happens via "rear recover",
|
||||||
|
see https://github.com/rear/rear/pull/2808
|
||||||
|
Furthermore having a copy of dev/watchdog*
|
||||||
|
during "rear mkrescue" in ReaR's build area
|
||||||
|
may even trigger a system crash that is caused by a
|
||||||
|
buggy TrendMicro ds_am module touching dev/watchdog
|
||||||
|
in ReaR's build area (/var/tmp/rear.XXX/rootfs),
|
||||||
|
see https://github.com/rear/rear/issues/2798
|
||||||
|
|
||||||
|
diff --git a/usr/share/rear/conf/default.conf b/usr/share/rear/conf/default.conf
|
||||||
|
index 881a0af0..cb14da8b 100644
|
||||||
|
--- a/usr/share/rear/conf/default.conf
|
||||||
|
+++ b/usr/share/rear/conf/default.conf
|
||||||
|
@@ -1414,7 +1414,12 @@ COPY_AS_IS=( $SHARE_DIR $VAR_DIR )
|
||||||
|
# We let them being recreated by device mapper in the recovery system during the recovery process.
|
||||||
|
# Copying them into the recovery system would let "rear recover" avoid the migration process.
|
||||||
|
# See https://github.com/rear/rear/pull/1393 for details.
|
||||||
|
-COPY_AS_IS_EXCLUDE=( $VAR_DIR/output/\* dev/.udev dev/shm dev/shm/\* dev/oracleasm dev/mapper )
|
||||||
|
+# /dev/watchdog /dev/watchdog\* functionality is not wanted in the ReaR rescue/recovery system
|
||||||
|
+# because we do not want any automated reboot while disaster recovery happens via "rear recover".
|
||||||
|
+# Furthermore having dev/watchdog* during "rear mkrescue" may even trigger a system "crash" that is
|
||||||
|
+# caused by TrendMicro ds_am module touching dev/watchdog in ReaR's build area (/var/tmp/rear.XXX/rootfs).
|
||||||
|
+# See https://github.com/rear/rear/issues/2798
|
||||||
|
+COPY_AS_IS_EXCLUDE=( $VAR_DIR/output/\* dev/.udev dev/shm dev/shm/\* dev/oracleasm dev/mapper dev/watchdog\* )
|
||||||
|
# Array of user names that are trusted owners of files where RequiredSharedObjects calls ldd (cf. COPY_AS_IS)
|
||||||
|
# and where a ldd test is run inside the recovery system that tests all binaries for 'not found' libraries.
|
||||||
|
# The default is 'root' plus those standard system users that have a 'bin' or 'sbin' or 'root' home directory
|
105
SOURCES/rear-bz2111059.patch
Normal file
105
SOURCES/rear-bz2111059.patch
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
commit 552dd6bfb20fdb3dc712b5243656d147392c27c3
|
||||||
|
Author: Johannes Meixner <jsmeix@suse.com>
|
||||||
|
Date: Thu Jun 2 15:25:52 2022 +0200
|
||||||
|
|
||||||
|
Merge pull request #2811 from rear/jsmeix-RECOVERY_COMMANDS
|
||||||
|
|
||||||
|
Add PRE_RECOVERY_COMMANDS and POST_RECOVERY_COMMANDS
|
||||||
|
as alternative to PRE_RECOVERY_SCRIPT and POST_RECOVERY_SCRIPT
|
||||||
|
see the description in default.conf how to use them and how they work.
|
||||||
|
See https://github.com/rear/rear/pull/2811 and see also
|
||||||
|
https://github.com/rear/rear/pull/2735 therein in particular
|
||||||
|
https://github.com/rear/rear/pull/2735#issuecomment-1134686196
|
||||||
|
Additionally use LogPrint to show the user the executed commands,
|
||||||
|
see https://github.com/rear/rear/pull/2789
|
||||||
|
|
||||||
|
diff --git a/usr/share/rear/conf/default.conf b/usr/share/rear/conf/default.conf
|
||||||
|
index cb14da8b..b14525da 100644
|
||||||
|
--- a/usr/share/rear/conf/default.conf
|
||||||
|
+++ b/usr/share/rear/conf/default.conf
|
||||||
|
@@ -3117,14 +3117,37 @@ ELILO_BIN=
|
||||||
|
################ ---- custom scripts
|
||||||
|
#
|
||||||
|
# NOTE: The scripts can be defined as an array to better handly spaces in parameters.
|
||||||
|
-# The scripts are called like this: eval "${PRE_RECOVERY_SCRIPT[@]}"
|
||||||
|
+# The scripts are called like this:
|
||||||
|
+# eval "${PRE_RECOVERY_SCRIPT[@]}"
|
||||||
|
+#
|
||||||
|
+# Alternatively, commands can be executed by using the corresponding
|
||||||
|
+# PRE_RECOVERY_COMMANDS and POST_RECOVERY_COMMANDS array variables
|
||||||
|
+# which evaluate like this:
|
||||||
|
+# for command in "${PRE_RECOVERY_COMMANDS[@]}" ; do
|
||||||
|
+# eval "$command"
|
||||||
|
+# done
|
||||||
|
+#
|
||||||
|
+# Using PRE_RECOVERY_COMMANDS and POST_RECOVERY_COMMANDS
|
||||||
|
+# is simpler when multiple commands should be executed.
|
||||||
|
+# For example,
|
||||||
|
+# PRE_RECOVERY_SCRIPT=( 'echo Hello' ';' 'sleep 3' )
|
||||||
|
+# can be rewritten as
|
||||||
|
+# PRE_RECOVERY_COMMANDS=( 'echo Hello' 'sleep 3' )
|
||||||
|
+# or
|
||||||
|
+# PRE_RECOVERY_COMMANDS=( 'echo Hello' )
|
||||||
|
+# PRE_RECOVERY_COMMANDS+=( 'sleep 3' )
|
||||||
|
+
|
||||||
|
+# Those get called at the very beginning of "rear recover".
|
||||||
|
+# The PRE_RECOVERY_COMMANDS are called directly before the PRE_RECOVERY_SCRIPT.
|
||||||
|
+# Nothing was recreated and you have only the plain ReaR rescue/recovery system:
|
||||||
|
+PRE_RECOVERY_COMMANDS=()
|
||||||
|
+PRE_RECOVERY_SCRIPT=
|
||||||
|
|
||||||
|
-# Call this after Relax-and-Recover did everything in the recover workflow.
|
||||||
|
-# Use $TARGET_FS_ROOT (by default '/mnt/local') to refer to the recovered system.
|
||||||
|
+# Those get called at the very end of "rear recover".
|
||||||
|
+# The POST_RECOVERY_COMMANDS are called directly after the POST_RECOVERY_SCRIPT.
|
||||||
|
+# Use $TARGET_FS_ROOT (by default '/mnt/local') to access the recreated target system.
|
||||||
|
POST_RECOVERY_SCRIPT=
|
||||||
|
-
|
||||||
|
-# Call this before Relax-and-Recover starts to do anything in the recover workflow. You have the rescue system but nothing else
|
||||||
|
-PRE_RECOVERY_SCRIPT=
|
||||||
|
+POST_RECOVERY_COMMANDS=()
|
||||||
|
|
||||||
|
# PRE/POST Backup scripts will provide the ability to run certain tasks before and after a ReaR backup.
|
||||||
|
# for example:
|
||||||
|
diff --git a/usr/share/rear/setup/default/010_pre_recovery_script.sh b/usr/share/rear/setup/default/010_pre_recovery_script.sh
|
||||||
|
index 005107cc..8b4e4a36 100644
|
||||||
|
--- a/usr/share/rear/setup/default/010_pre_recovery_script.sh
|
||||||
|
+++ b/usr/share/rear/setup/default/010_pre_recovery_script.sh
|
||||||
|
@@ -1,4 +1,14 @@
|
||||||
|
+
|
||||||
|
+# The PRE_RECOVERY_COMMANDS are called directly before the PRE_RECOVERY_SCRIPT
|
||||||
|
+# so PRE_RECOVERY_COMMANDS can also be used to prepare things for the PRE_RECOVERY_SCRIPT:
|
||||||
|
+
|
||||||
|
+local command
|
||||||
|
+for command in "${PRE_RECOVERY_COMMANDS[@]}" ; do
|
||||||
|
+ LogPrint "Running PRE_RECOVERY_COMMANDS '$command'"
|
||||||
|
+ eval "$command"
|
||||||
|
+done
|
||||||
|
+
|
||||||
|
if test "$PRE_RECOVERY_SCRIPT" ; then
|
||||||
|
- Log "Running PRE_RECOVERY_SCRIPT '${PRE_RECOVERY_SCRIPT[@]}'"
|
||||||
|
- eval "${PRE_RECOVERY_SCRIPT[@]}"
|
||||||
|
+ LogPrint "Running PRE_RECOVERY_SCRIPT '${PRE_RECOVERY_SCRIPT[@]}'"
|
||||||
|
+ eval "${PRE_RECOVERY_SCRIPT[@]}"
|
||||||
|
fi
|
||||||
|
diff --git a/usr/share/rear/wrapup/default/500_post_recovery_script.sh b/usr/share/rear/wrapup/default/500_post_recovery_script.sh
|
||||||
|
index 77751800..866c9368 100644
|
||||||
|
--- a/usr/share/rear/wrapup/default/500_post_recovery_script.sh
|
||||||
|
+++ b/usr/share/rear/wrapup/default/500_post_recovery_script.sh
|
||||||
|
@@ -1,4 +1,14 @@
|
||||||
|
+
|
||||||
|
+# The POST_RECOVERY_COMMANDS are called directly after the POST_RECOVERY_SCRIPT
|
||||||
|
+# so POST_RECOVERY_COMMANDS can also be used to clean up things after the POST_RECOVERY_SCRIPT:
|
||||||
|
+
|
||||||
|
if test "$POST_RECOVERY_SCRIPT" ; then
|
||||||
|
- Log "Running POST_RECOVERY_SCRIPT '${POST_RECOVERY_SCRIPT[@]}'"
|
||||||
|
- eval "${POST_RECOVERY_SCRIPT[@]}"
|
||||||
|
+ LogPrint "Running POST_RECOVERY_SCRIPT '${POST_RECOVERY_SCRIPT[@]}'"
|
||||||
|
+ eval "${POST_RECOVERY_SCRIPT[@]}"
|
||||||
|
fi
|
||||||
|
+
|
||||||
|
+local command
|
||||||
|
+for command in "${POST_RECOVERY_COMMANDS[@]}" ; do
|
||||||
|
+ LogPrint "Running POST_RECOVERY_COMMANDS '$command'"
|
||||||
|
+ eval "$command"
|
||||||
|
+done
|
18
SOURCES/rear-bz2117937.patch
Normal file
18
SOURCES/rear-bz2117937.patch
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
diff --git a/usr/share/rear/prep/GNU/Linux/220_include_lvm_tools.sh b/usr/share/rear/prep/GNU/Linux/220_include_lvm_tools.sh
|
||||||
|
index 4b73fb05..c7704032 100644
|
||||||
|
--- a/usr/share/rear/prep/GNU/Linux/220_include_lvm_tools.sh
|
||||||
|
+++ b/usr/share/rear/prep/GNU/Linux/220_include_lvm_tools.sh
|
||||||
|
@@ -8,6 +8,13 @@ PROGS+=( lvm dmsetup dmeventd fsadm )
|
||||||
|
|
||||||
|
COPY_AS_IS+=( /etc/lvm )
|
||||||
|
|
||||||
|
+# Workaround for a LVM segfault when creating a PV with an UUID already present
|
||||||
|
+# in the device file: omit the device file from the rescue system
|
||||||
|
+# https://bugzilla.redhat.com/show_bug.cgi?id=2117937
|
||||||
|
+# proper fix:
|
||||||
|
+# https://sourceware.org/git/?p=lvm2.git;a=commit;h=8c3cfc75c72696ae8b620555fcc4f815b0c1d6b6
|
||||||
|
+COPY_AS_IS_EXCLUDE+=( /etc/lvm/devices )
|
||||||
|
+
|
||||||
|
if lvs --noheadings -o thin_count | grep -q -v "^\s*$" ; then
|
||||||
|
# There are Thin Pools on the system, include required binaries
|
||||||
|
PROGS+=( thin_check )
|
39
SOURCES/rear-bz2119501.patch
Normal file
39
SOURCES/rear-bz2119501.patch
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
diff --git a/usr/share/rear/build/default/490_fix_broken_links.sh b/usr/share/rear/build/default/490_fix_broken_links.sh
|
||||||
|
index 5bace664..cf960be8 100644
|
||||||
|
--- a/usr/share/rear/build/default/490_fix_broken_links.sh
|
||||||
|
+++ b/usr/share/rear/build/default/490_fix_broken_links.sh
|
||||||
|
@@ -7,6 +7,23 @@
|
||||||
|
# see https://github.com/rear/rear/issues/1638
|
||||||
|
# and https://github.com/rear/rear/pull/1734
|
||||||
|
|
||||||
|
+# Some broken symlinks are expected. The 'build' and 'source' symlinks in kernel modules point to kernel sources
|
||||||
|
+# and are broken untol one installs the kernel-debug-devel or kernel-devel packages (on Fedora) and even then
|
||||||
|
+# the targets are jot included in the rescue system by default.
|
||||||
|
+# Do not warn about those, it is just noise.
|
||||||
|
+local irrelevant_symlinks=( '*/lib/modules/*/build' '*/lib/modules/*/source' )
|
||||||
|
+function symlink_is_irrelevant () {
|
||||||
|
+ for i in "${irrelevant_symlinks[@]}"; do
|
||||||
|
+ # do not quote $i, it is a glob pattern, matching will be performed by [[ ... == ... ]]
|
||||||
|
+ # quoting inside [[ ]] prevents pattern matching
|
||||||
|
+ if [[ "$1" == $i ]]; then
|
||||||
|
+ return 0
|
||||||
|
+ fi
|
||||||
|
+ done
|
||||||
|
+ return 1
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
# FIXME: The following code fails if symlinks or their targets contain characters from IFS (e.g. blanks),
|
||||||
|
# cf. the same kind of comments in build/default/990_verify_rootfs.sh
|
||||||
|
# and layout/prepare/GNU/Linux/130_include_mount_subvolumes_code.sh
|
||||||
|
@@ -38,6 +55,10 @@ pushd $ROOTFS_DIR
|
||||||
|
local broken_symlink=''
|
||||||
|
local link_target=''
|
||||||
|
for broken_symlink in $broken_symlinks ; do
|
||||||
|
+ if symlink_is_irrelevant "$broken_symlink" ; then
|
||||||
|
+ DebugPrint "Ignoring irrelevant broken symlink $broken_symlink"
|
||||||
|
+ continue
|
||||||
|
+ fi
|
||||||
|
# For each broken symlink absolute path inside ROOTFS_DIR
|
||||||
|
# we call "readlink -e" in the original system to get its link target there.
|
||||||
|
# If in the original system there was a chain of symbolic links like
|
18
SOURCES/rear-bz2120736.patch
Normal file
18
SOURCES/rear-bz2120736.patch
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
diff --git a/usr/share/rear/conf/default.conf b/usr/share/rear/conf/default.conf
|
||||||
|
index b14525da..23a83b71 100644
|
||||||
|
--- a/usr/share/rear/conf/default.conf
|
||||||
|
+++ b/usr/share/rear/conf/default.conf
|
||||||
|
@@ -1841,10 +1841,10 @@ OBDR_BLOCKSIZE=2048
|
||||||
|
# BACKUP=NBU stuff (Symantec/Veritas NetBackup)
|
||||||
|
##
|
||||||
|
#
|
||||||
|
-COPY_AS_IS_NBU=( /usr/openv/bin/vnetd /usr/openv/bin/vopied /usr/openv/lib /usr/openv/netbackup /usr/openv/var/auth/[mn]*.txt /opt/VRTSpbx /etc/vx/VxICS /etc/vx/vrtslog.conf )
|
||||||
|
-COPY_AS_IS_EXCLUDE_NBU=( /usr/openv/netbackup/logs "/usr/openv/netbackup/bin/bpjava*" /usr/openv/netbackup/bin/xbp /usr/openv/netbackup/bin/private /usr/openv/lib/java /usr/openv/lib/shared/vddk /usr/openv/netbackup/baremetal )
|
||||||
|
+COPY_AS_IS_NBU=( /usr/openv/bin/vnetd /usr/openv/bin/vopied /usr/openv/lib /usr/openv/netbackup /usr/openv/var/auth/[mn]*.txt /usr/openv/var/vxss /usr/openv/var/webtruststore /usr/openv/resources/nbpxyhelper /opt/VRTSpbx /etc/vx/VxICS /etc/vx/vrtslog.conf /var/log/VRTSpbx )
|
||||||
|
+COPY_AS_IS_EXCLUDE_NBU=( "/usr/openv/netbackup/logs/*" "/usr/openv/netbackup/bin/bpjava*" /usr/openv/netbackup/bin/xbp /usr/openv/netbackup/bin/private /usr/openv/lib/java "/usr/openv/lib/*-plugins" /usr/openv/lib/shared/vddk /usr/openv/netbackup/baremetal "/var/log/VRTSpbx/*" )
|
||||||
|
# See https://github.com/rear/rear/issues/2105 why /usr/openv/netbackup/sec/at/lib/ is needed:
|
||||||
|
-NBU_LD_LIBRARY_PATH="/usr/openv/lib:/usr/openv/netbackup/sec/at/lib/"
|
||||||
|
+NBU_LD_LIBRARY_PATH="/usr/openv/lib:/usr/openv/netbackup/sec/at/lib/:/usr/openv/lib/boost"
|
||||||
|
PROGS_NBU=( )
|
||||||
|
|
||||||
|
##
|
864
SOURCES/rsync-output.patch
Normal file
864
SOURCES/rsync-output.patch
Normal file
@ -0,0 +1,864 @@
|
|||||||
|
commit e6a9c973dbb7be6e46ed9a7fe34df0635635fed6
|
||||||
|
Author: Johannes Meixner <jsmeix@suse.com>
|
||||||
|
Date: Tue Jul 12 13:59:28 2022 +0200
|
||||||
|
|
||||||
|
Merge pull request #2831 from pcahyna/rsync-url-fix-refactor
|
||||||
|
|
||||||
|
Refactor rsync URL support, fixes rsync OUTPUT_URL:
|
||||||
|
The code to parse rsync:// URLs was BACKUP_URL specific.
|
||||||
|
If one specified BACKUP=RSYNC and an OUTPUT_URL different from BACKUP_URL,
|
||||||
|
the OUTPUT_URL was ignored and the output files went to BACKUP_URL.
|
||||||
|
Fix by introducing generic functions for rsync URL parsing and
|
||||||
|
use them for both BACKUP_URL and OUTPUT_URL, as appropriate.
|
||||||
|
Replace all uses of global RSYNC_* variables derived
|
||||||
|
from BACKUP_URL by those functions.
|
||||||
|
There also was inconsistent special handling for OUTPUT=PXE which is now removed:
|
||||||
|
An rsync OUTPUT_URL with OUTPUT=PXE now creates the RSYNC_PREFIX directory
|
||||||
|
at the destination and the URL is interpreted as in all other cases.
|
||||||
|
See https://github.com/rear/rear/pull/2831
|
||||||
|
and https://github.com/rear/rear/issues/2781
|
||||||
|
|
||||||
|
diff --git a/usr/share/rear/backup/NETFS/default/200_check_rsync_relative_option.sh b/usr/share/rear/backup/NETFS/default/200_check_rsync_relative_option.sh
|
||||||
|
deleted file mode 120000
|
||||||
|
index 336b83f5..00000000
|
||||||
|
--- a/usr/share/rear/backup/NETFS/default/200_check_rsync_relative_option.sh
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1 +0,0 @@
|
||||||
|
-../../RSYNC/default/200_check_rsync_relative_option.sh
|
||||||
|
\ No newline at end of file
|
||||||
|
diff --git a/usr/share/rear/backup/NETFS/default/210_check_rsync_relative_option.sh b/usr/share/rear/backup/NETFS/default/210_check_rsync_relative_option.sh
|
||||||
|
new file mode 120000
|
||||||
|
index 00000000..0570eb44
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/usr/share/rear/backup/NETFS/default/210_check_rsync_relative_option.sh
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+../../RSYNC/default/210_check_rsync_relative_option.sh
|
||||||
|
\ No newline at end of file
|
||||||
|
diff --git a/usr/share/rear/backup/RSYNC/GNU/Linux/610_start_selinux.sh b/usr/share/rear/backup/RSYNC/GNU/Linux/610_start_selinux.sh
|
||||||
|
index 1692ba4c..dd198ede 100644
|
||||||
|
--- a/usr/share/rear/backup/RSYNC/GNU/Linux/610_start_selinux.sh
|
||||||
|
+++ b/usr/share/rear/backup/RSYNC/GNU/Linux/610_start_selinux.sh
|
||||||
|
@@ -6,29 +6,29 @@ local backup_prog_rc
|
||||||
|
touch "${TMP_DIR}/selinux.autorelabel"
|
||||||
|
cat $TMP_DIR/selinux.mode > $SELINUX_ENFORCE
|
||||||
|
Log "Restored original SELinux mode"
|
||||||
|
- case $RSYNC_PROTO in
|
||||||
|
+ case $(rsync_proto "$BACKUP_URL") in
|
||||||
|
|
||||||
|
(ssh)
|
||||||
|
# for some reason rsync changes the mode of backup after each run to 666
|
||||||
|
# FIXME: Add an explanatory comment why "2>/dev/null" is useful here
|
||||||
|
# or remove it according to https://github.com/rear/rear/issues/1395
|
||||||
|
- ssh $RSYNC_USER@$RSYNC_HOST "chmod $v 755 ${RSYNC_PATH}/${RSYNC_PREFIX}/backup" 2>/dev/null
|
||||||
|
+ ssh $(rsync_remote_ssh "$BACKUP_URL") "chmod $v 755 $(rsync_path_full "$BACKUP_URL")/backup" 2>/dev/null
|
||||||
|
$BACKUP_PROG -a "${TMP_DIR}/selinux.autorelabel" \
|
||||||
|
- "$RSYNC_USER@$RSYNC_HOST:${RSYNC_PATH}/${RSYNC_PREFIX}/backup/.autorelabel" 2>/dev/null
|
||||||
|
+ "$(rsync_remote_full "$BACKUP_URL")/backup/.autorelabel" 2>/dev/null
|
||||||
|
backup_prog_rc=$?
|
||||||
|
if [ $backup_prog_rc -ne 0 ]; then
|
||||||
|
- LogPrint "Failed to create .autorelabel on ${RSYNC_PATH}/${RSYNC_PREFIX}/backup [${rsync_err_msg[$backup_prog_rc]}]"
|
||||||
|
- #StopIfError "Failed to create .autorelabel on ${RSYNC_PATH}/${RSYNC_PREFIX}/backup"
|
||||||
|
+ LogPrint "Failed to create .autorelabel on $(rsync_path_full "$BACKUP_URL")/backup [${rsync_err_msg[$backup_prog_rc]}]"
|
||||||
|
+ #StopIfError "Failed to create .autorelabel on $(rsync_path_full "$BACKUP_URL")/backup"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
(rsync)
|
||||||
|
$BACKUP_PROG -a "${TMP_DIR}/selinux.autorelabel" "${BACKUP_RSYNC_OPTIONS[@]}" \
|
||||||
|
- "${RSYNC_PROTO}://${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PORT}/${RSYNC_PATH}/${RSYNC_PREFIX}/backup/.autorelabel"
|
||||||
|
+ "$(rsync_remote_full "$BACKUP_URL")/backup/.autorelabel"
|
||||||
|
backup_prog_rc=$?
|
||||||
|
if [ $backup_prog_rc -ne 0 ]; then
|
||||||
|
- LogPrint "Failed to create .autorelabel on ${RSYNC_PATH}/${RSYNC_PREFIX}/backup [${rsync_err_msg[$backup_prog_rc]}]"
|
||||||
|
- #StopIfError "Failed to create .autorelabel on ${RSYNC_PATH}/${RSYNC_PREFIX}/backup"
|
||||||
|
+ LogPrint "Failed to create .autorelabel on $(rsync_path_full "$BACKUP_URL")/backup [${rsync_err_msg[$backup_prog_rc]}]"
|
||||||
|
+ #StopIfError "Failed to create .autorelabel on $(rsync_path_full "$BACKUP_URL")/backup"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
diff --git a/usr/share/rear/backup/RSYNC/GNU/Linux/620_force_autorelabel.sh b/usr/share/rear/backup/RSYNC/GNU/Linux/620_force_autorelabel.sh
|
||||||
|
index 9a17d6bb..de57d571 100644
|
||||||
|
--- a/usr/share/rear/backup/RSYNC/GNU/Linux/620_force_autorelabel.sh
|
||||||
|
+++ b/usr/share/rear/backup/RSYNC/GNU/Linux/620_force_autorelabel.sh
|
||||||
|
@@ -4,29 +4,29 @@ local backup_prog_rc
|
||||||
|
|
||||||
|
> "${TMP_DIR}/selinux.autorelabel"
|
||||||
|
|
||||||
|
- case $RSYNC_PROTO in
|
||||||
|
+ case $(rsync_proto "$BACKUP_URL") in
|
||||||
|
|
||||||
|
(ssh)
|
||||||
|
# for some reason rsync changes the mode of backup after each run to 666
|
||||||
|
# FIXME: Add an explanatory comment why "2>/dev/null" is useful here
|
||||||
|
# or remove it according to https://github.com/rear/rear/issues/1395
|
||||||
|
- ssh $RSYNC_USER@$RSYNC_HOST "chmod $v 755 ${RSYNC_PATH}/${RSYNC_PREFIX}/backup" 2>/dev/null
|
||||||
|
+ ssh $(rsync_remote_ssh "$BACKUP_URL") "chmod $v 755 $(rsync_path_full "$BACKUP_URL")/backup" 2>/dev/null
|
||||||
|
$BACKUP_PROG -a "${TMP_DIR}/selinux.autorelabel" \
|
||||||
|
- "$RSYNC_USER@$RSYNC_HOST:${RSYNC_PATH}/${RSYNC_PREFIX}/backup/.autorelabel" 2>/dev/null
|
||||||
|
+ "$(rsync_remote_full "$BACKUP_URL")/backup/.autorelabel" 2>/dev/null
|
||||||
|
backup_prog_rc=$?
|
||||||
|
if [ $backup_prog_rc -ne 0 ]; then
|
||||||
|
- LogPrint "Failed to create .autorelabel on ${RSYNC_PATH}/${RSYNC_PREFIX}/backup [${rsync_err_msg[$backup_prog_rc]}]"
|
||||||
|
- #StopIfError "Failed to create .autorelabel on ${RSYNC_PATH}/${RSYNC_PREFIX}/backup"
|
||||||
|
+ LogPrint "Failed to create .autorelabel on $(rsync_path_full "$BACKUP_URL")/backup [${rsync_err_msg[$backup_prog_rc]}]"
|
||||||
|
+ #StopIfError "Failed to create .autorelabel on $(rsync_path_full "$BACKUP_URL")/backup"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
(rsync)
|
||||||
|
$BACKUP_PROG -a "${TMP_DIR}/selinux.autorelabel" "${BACKUP_RSYNC_OPTIONS[@]}" \
|
||||||
|
- "${RSYNC_PROTO}://${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PORT}/${RSYNC_PATH}/${RSYNC_PREFIX}/backup/.autorelabel"
|
||||||
|
+ "$(rsync_remote_full "$BACKUP_URL")/backup/.autorelabel"
|
||||||
|
backup_prog_rc=$?
|
||||||
|
if [ $backup_prog_rc -ne 0 ]; then
|
||||||
|
- LogPrint "Failed to create .autorelabel on ${RSYNC_PATH}/${RSYNC_PREFIX}/backup [${rsync_err_msg[$backup_prog_rc]}]"
|
||||||
|
- #StopIfError "Failed to create .autorelabel on ${RSYNC_PATH}/${RSYNC_PREFIX}/backup"
|
||||||
|
+ LogPrint "Failed to create .autorelabel on $(rsync_path_full "$BACKUP_URL")/backup [${rsync_err_msg[$backup_prog_rc]}]"
|
||||||
|
+ #StopIfError "Failed to create .autorelabel on $(rsync_path_full "$BACKUP_URL")/backup"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
diff --git a/usr/share/rear/backup/RSYNC/default/200_make_prefix_dir.sh b/usr/share/rear/backup/RSYNC/default/200_make_prefix_dir.sh
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..81aa6879
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/usr/share/rear/backup/RSYNC/default/200_make_prefix_dir.sh
|
||||||
|
@@ -0,0 +1,28 @@
|
||||||
|
+# Create RSYNC_PREFIX/backup on remote rsync server
|
||||||
|
+# RSYNC_PREFIX=$HOSTNAME as set in default.conf
|
||||||
|
+
|
||||||
|
+local proto host
|
||||||
|
+
|
||||||
|
+proto="$(rsync_proto "$BACKUP_URL")"
|
||||||
|
+host="$(rsync_host "$BACKUP_URL")"
|
||||||
|
+
|
||||||
|
+mkdir -p $v -m0750 "${TMP_DIR}/rsync/${RSYNC_PREFIX}" >&2 || Error "Could not mkdir '${TMP_DIR}/rsync/${RSYNC_PREFIX}'"
|
||||||
|
+mkdir -p $v -m0755 "${TMP_DIR}/rsync/${RSYNC_PREFIX}/backup" >&2 || Error "Could not mkdir '${TMP_DIR}/rsync/${RSYNC_PREFIX}/backup'"
|
||||||
|
+
|
||||||
|
+case $proto in
|
||||||
|
+
|
||||||
|
+ (ssh)
|
||||||
|
+ $BACKUP_PROG -a $v -r "${TMP_DIR}/rsync/${RSYNC_PREFIX}" "$(rsync_remote "$BACKUP_URL")" >/dev/null 2>&1 \
|
||||||
|
+ || Error "Could not create '$(rsync_path_full "$BACKUP_URL")' on remote ${host}"
|
||||||
|
+ ;;
|
||||||
|
+
|
||||||
|
+ (rsync)
|
||||||
|
+ $BACKUP_PROG -a $v -r "${TMP_DIR}/rsync/${RSYNC_PREFIX}" "${BACKUP_RSYNC_OPTIONS[@]}" "$(rsync_remote "$BACKUP_URL")/" >/dev/null \
|
||||||
|
+ || Error "Could not create '$(rsync_path_full "$BACKUP_URL")' on remote ${host}"
|
||||||
|
+ ;;
|
||||||
|
+
|
||||||
|
+esac
|
||||||
|
+
|
||||||
|
+# We don't need it anymore, from now we operate on the remote copy
|
||||||
|
+rmdir $v "${TMP_DIR}/rsync/${RSYNC_PREFIX}/backup"
|
||||||
|
+rmdir $v "${TMP_DIR}/rsync/${RSYNC_PREFIX}"
|
||||||
|
diff --git a/usr/share/rear/backup/RSYNC/default/200_check_rsync_relative_option.sh b/usr/share/rear/backup/RSYNC/default/210_check_rsync_relative_option.sh
|
||||||
|
similarity index 91%
|
||||||
|
rename from usr/share/rear/backup/RSYNC/default/200_check_rsync_relative_option.sh
|
||||||
|
rename to usr/share/rear/backup/RSYNC/default/210_check_rsync_relative_option.sh
|
||||||
|
index cedee9ce..692616b7 100644
|
||||||
|
--- a/usr/share/rear/backup/RSYNC/default/200_check_rsync_relative_option.sh
|
||||||
|
+++ b/usr/share/rear/backup/RSYNC/default/210_check_rsync_relative_option.sh
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-# 200_check_rsync_relative_option.sh
|
||||||
|
+# 210_check_rsync_relative_option.sh
|
||||||
|
# See issue #871 for details
|
||||||
|
|
||||||
|
# check for the --relative option in BACKUP_RSYNC_OPTIONS array
|
||||||
|
diff --git a/usr/share/rear/backup/RSYNC/default/450_calculate_req_space.sh b/usr/share/rear/backup/RSYNC/default/450_calculate_req_space.sh
|
||||||
|
index eb99dbf6..037e49c0 100644
|
||||||
|
--- a/usr/share/rear/backup/RSYNC/default/450_calculate_req_space.sh
|
||||||
|
+++ b/usr/share/rear/backup/RSYNC/default/450_calculate_req_space.sh
|
||||||
|
@@ -1,6 +1,12 @@
|
||||||
|
# here we will calculate the space required to hold the backup archive on the remote rsync system
|
||||||
|
# This file is part of Relax-and-Recover, licensed under the GNU General
|
||||||
|
# Public License. Refer to the included COPYING for full text of license.
|
||||||
|
+local proto host path
|
||||||
|
+
|
||||||
|
+proto="$(rsync_proto "$BACKUP_URL")"
|
||||||
|
+host="$(rsync_host "$BACKUP_URL")"
|
||||||
|
+path="$(rsync_path "$BACKUP_URL")"
|
||||||
|
+
|
||||||
|
_local_size=0
|
||||||
|
_remote_size=0
|
||||||
|
while read -r ; do
|
||||||
|
@@ -13,17 +19,17 @@ while read -r ; do
|
||||||
|
done < $TMP_DIR/backup-include.txt
|
||||||
|
LogPrint "Estimated size of local file systems is $(( _local_size / 1024 )) MB"
|
||||||
|
|
||||||
|
-case $RSYNC_PROTO in
|
||||||
|
+case $proto in
|
||||||
|
(ssh)
|
||||||
|
- LogPrint "Calculating size of $RSYNC_HOST:$RSYNC_PATH"
|
||||||
|
- ssh -l $RSYNC_USER $RSYNC_HOST "df -P $RSYNC_PATH" >$TMP_DIR/rs_size
|
||||||
|
- StopIfError "Failed to determine size of $RSYNC_PATH"
|
||||||
|
+ LogPrint "Calculating size of ${host}:${path}"
|
||||||
|
+ ssh $(rsync_remote_ssh "$BACKUP_URL") "df -P ${path}" >$TMP_DIR/rs_size
|
||||||
|
+ StopIfError "Failed to determine size of ${path}"
|
||||||
|
_div=1 # 1024-blocks
|
||||||
|
grep -q "512-blocks" $TMP_DIR/rs_size && _div=2 # HPUX: divide with 2 to get kB size
|
||||||
|
_remote_size=$( tail -n 1 $TMP_DIR/rs_size | awk '{print $2}' )
|
||||||
|
_remote_size=$(( _remote_size / _div ))
|
||||||
|
[[ $_remote_size -gt $_local_size ]]
|
||||||
|
- StopIfError "Not enough disk space available on $RSYNC_HOST:$RSYNC_PATH ($_remote_size < $_local_size)"
|
||||||
|
+ StopIfError "Not enough disk space available on ${host}:${path} ($_remote_size < $_local_size)"
|
||||||
|
;;
|
||||||
|
(rsync)
|
||||||
|
# TODO: how can we calculate the free size on remote system via rsync protocol??
|
||||||
|
diff --git a/usr/share/rear/backup/RSYNC/default/500_make_rsync_backup.sh b/usr/share/rear/backup/RSYNC/default/500_make_rsync_backup.sh
|
||||||
|
index 750a04ca..aa8192c0 100644
|
||||||
|
--- a/usr/share/rear/backup/RSYNC/default/500_make_rsync_backup.sh
|
||||||
|
+++ b/usr/share/rear/backup/RSYNC/default/500_make_rsync_backup.sh
|
||||||
|
@@ -5,6 +5,11 @@
|
||||||
|
local backup_prog_rc
|
||||||
|
local backup_log_message
|
||||||
|
|
||||||
|
+local host path
|
||||||
|
+
|
||||||
|
+host="$(rsync_host "$BACKUP_URL")"
|
||||||
|
+path="$(rsync_path "$BACKUP_URL")"
|
||||||
|
+
|
||||||
|
Log "Include list:"
|
||||||
|
while read -r ; do
|
||||||
|
Log " $REPLY"
|
||||||
|
@@ -14,26 +19,27 @@ while read -r ; do
|
||||||
|
Log " $REPLY"
|
||||||
|
done < $TMP_DIR/backup-exclude.txt
|
||||||
|
|
||||||
|
-LogPrint "Creating $BACKUP_PROG backup on '${RSYNC_HOST}:${RSYNC_PATH}'"
|
||||||
|
+LogPrint "Creating $BACKUP_PROG backup on '${host}:${path}'"
|
||||||
|
|
||||||
|
ProgressStart "Running backup operation"
|
||||||
|
(
|
||||||
|
case "$(basename $BACKUP_PROG)" in
|
||||||
|
|
||||||
|
(rsync)
|
||||||
|
+ # We are in a subshell, so this change will not propagate to later scripts
|
||||||
|
BACKUP_RSYNC_OPTIONS+=( --one-file-system --delete --exclude-from=$TMP_DIR/backup-exclude.txt --delete-excluded )
|
||||||
|
|
||||||
|
- case $RSYNC_PROTO in
|
||||||
|
+ case $(rsync_proto "$BACKUP_URL") in
|
||||||
|
|
||||||
|
(ssh)
|
||||||
|
- Log $BACKUP_PROG "${BACKUP_RSYNC_OPTIONS[@]}" $(cat $TMP_DIR/backup-include.txt) "${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PATH}/${RSYNC_PREFIX}/backup"
|
||||||
|
+ Log $BACKUP_PROG "${BACKUP_RSYNC_OPTIONS[@]}" $(cat $TMP_DIR/backup-include.txt) "$(rsync_remote_full "$BACKUP_URL")/backup"
|
||||||
|
$BACKUP_PROG "${BACKUP_RSYNC_OPTIONS[@]}" $(cat $TMP_DIR/backup-include.txt) \
|
||||||
|
- "${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PATH}/${RSYNC_PREFIX}/backup"
|
||||||
|
+ "$(rsync_remote_full "$BACKUP_URL")/backup"
|
||||||
|
;;
|
||||||
|
|
||||||
|
(rsync)
|
||||||
|
$BACKUP_PROG "${BACKUP_RSYNC_OPTIONS[@]}" $(cat $TMP_DIR/backup-include.txt) \
|
||||||
|
- "${RSYNC_PROTO}://${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PORT}/${RSYNC_PATH}/${RSYNC_PREFIX}/backup"
|
||||||
|
+ "$(rsync_remote_full "$BACKUP_URL")/backup"
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
@@ -57,11 +63,11 @@ get_size() {
|
||||||
|
}
|
||||||
|
|
||||||
|
check_remote_df() {
|
||||||
|
- echo $(ssh ${RSYNC_USER}@${RSYNC_HOST} df -P ${RSYNC_PATH} 2>/dev/null | tail -1 | awk '{print $5}' | sed -e 's/%//')
|
||||||
|
+ echo $(ssh $(rsync_remote_ssh "$BACKUP_URL") df -P ${path} 2>/dev/null | tail -1 | awk '{print $5}' | sed -e 's/%//')
|
||||||
|
}
|
||||||
|
|
||||||
|
check_remote_du() {
|
||||||
|
- x=$(ssh ${RSYNC_USER}@${RSYNC_HOST} du -sb ${RSYNC_PATH}/${RSYNC_PREFIX}/backup 2>/dev/null | awk '{print $1}')
|
||||||
|
+ x=$(ssh $(rsync_remote_ssh "$BACKUP_URL") du -sb $(rsync_path_full "$BACKUP_URL")/backup 2>/dev/null | awk '{print $1}')
|
||||||
|
[[ -z "${x}" ]] && x=0
|
||||||
|
echo $x
|
||||||
|
}
|
||||||
|
@@ -81,7 +87,7 @@ case "$(basename $BACKUP_PROG)" in
|
||||||
|
case $i in
|
||||||
|
|
||||||
|
300)
|
||||||
|
- [[ $(check_remote_df) -eq 100 ]] && Error "Disk is full on system ${RSYNC_HOST}"
|
||||||
|
+ [[ $(check_remote_df) -eq 100 ]] && Error "Disk is full on system ${host}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
15|30|45|60|75|90|105|120|135|150|165|180|195|210|225|240|255|270|285)
|
||||||
|
diff --git a/usr/share/rear/backup/RSYNC/default/700_copy_backup_log.sh b/usr/share/rear/backup/RSYNC/default/700_copy_backup_log.sh
|
||||||
|
index b90d459b..76b9f971 100644
|
||||||
|
--- a/usr/share/rear/backup/RSYNC/default/700_copy_backup_log.sh
|
||||||
|
+++ b/usr/share/rear/backup/RSYNC/default/700_copy_backup_log.sh
|
||||||
|
@@ -1,26 +1,27 @@
|
||||||
|
|
||||||
|
# copy the backup.log & rear.log file to remote destination with timestamp added
|
||||||
|
-local timestamp
|
||||||
|
+local timestamp proto
|
||||||
|
|
||||||
|
timestamp=$( date +%Y%m%d.%H%M )
|
||||||
|
+proto="$(rsync_proto "$BACKUP_URL")"
|
||||||
|
|
||||||
|
# compress the log file first
|
||||||
|
gzip "$TMP_DIR/$BACKUP_PROG_ARCHIVE.log" || Error "Failed to 'gzip $TMP_DIR/$BACKUP_PROG_ARCHIVE.log'"
|
||||||
|
|
||||||
|
-case $RSYNC_PROTO in
|
||||||
|
+case $proto in
|
||||||
|
(ssh)
|
||||||
|
# FIXME: Add an explanatory comment why "2>/dev/null" is useful here
|
||||||
|
# or remove it according to https://github.com/rear/rear/issues/1395
|
||||||
|
$BACKUP_PROG -a "${TMP_DIR}/${BACKUP_PROG_ARCHIVE}.log.gz" \
|
||||||
|
- "${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PATH}/${RSYNC_PREFIX}/${BACKUP_PROG_ARCHIVE}-${timestamp}.log.gz" 2>/dev/null
|
||||||
|
+ "$(rsync_remote_full "$BACKUP_URL")/${BACKUP_PROG_ARCHIVE}-${timestamp}.log.gz" 2>/dev/null
|
||||||
|
|
||||||
|
- $BACKUP_PROG -a "$RUNTIME_LOGFILE" "${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PATH}/${RSYNC_PREFIX}/rear-${timestamp}.log" 2>/dev/null
|
||||||
|
+ $BACKUP_PROG -a "$RUNTIME_LOGFILE" "$(rsync_remote_full "$BACKUP_URL")/rear-${timestamp}.log" 2>/dev/null
|
||||||
|
;;
|
||||||
|
(rsync)
|
||||||
|
$BACKUP_PROG -a "${TMP_DIR}/${BACKUP_PROG_ARCHIVE}.log.gz" "${BACKUP_RSYNC_OPTIONS[@]}" \
|
||||||
|
- "${RSYNC_PROTO}://${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PORT}/${RSYNC_PATH}/${RSYNC_PREFIX}/${BACKUP_PROG_ARCHIVE}-${timestamp}.log.gz"
|
||||||
|
+ "$(rsync_remote_full "$BACKUP_URL")/${BACKUP_PROG_ARCHIVE}-${timestamp}.log.gz"
|
||||||
|
|
||||||
|
- $BACKUP_PROG -a "$RUNTIME_LOGFILE" "${BACKUP_RSYNC_OPTIONS[@]}" "${RSYNC_PROTO}://${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PORT}/${RSYNC_PATH}/${RSYNC_PREFIX}//rear-${timestamp}.log"
|
||||||
|
+ $BACKUP_PROG -a "$RUNTIME_LOGFILE" "${BACKUP_RSYNC_OPTIONS[@]}" "$(rsync_remote_full "$BACKUP_URL")//rear-${timestamp}.log"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
diff --git a/usr/share/rear/lib/global-functions.sh b/usr/share/rear/lib/global-functions.sh
|
||||||
|
index 32aeb8ca..2edb64a6 100644
|
||||||
|
--- a/usr/share/rear/lib/global-functions.sh
|
||||||
|
+++ b/usr/share/rear/lib/global-functions.sh
|
||||||
|
@@ -259,7 +259,7 @@ function url_scheme() {
|
||||||
|
# the scheme is the leading part up to '://'
|
||||||
|
local scheme=${url%%://*}
|
||||||
|
# rsync scheme does not have to start with rsync:// it can also be scp style
|
||||||
|
- # see the comments in usr/share/rear/prep/RSYNC/default/100_check_rsync.sh
|
||||||
|
+ # see the comments in usr/share/rear/lib/rsync-functions.sh
|
||||||
|
echo $scheme | grep -q ":" && echo rsync || echo $scheme
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/usr/share/rear/lib/rsync-functions.sh b/usr/share/rear/lib/rsync-functions.sh
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..443a9625
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/usr/share/rear/lib/rsync-functions.sh
|
||||||
|
@@ -0,0 +1,178 @@
|
||||||
|
+# Functions for manipulation of rsync URLs (both OUTPUT_URL and BACKUP_URL)
|
||||||
|
+
|
||||||
|
+#### OLD STYLE:
|
||||||
|
+# BACKUP_URL=[USER@]HOST:PATH # using ssh (no rsh)
|
||||||
|
+#
|
||||||
|
+# with rsync protocol PATH is a MODULE name defined in remote /etc/rsyncd.conf file
|
||||||
|
+# BACKUP_URL=[USER@]HOST::PATH # using rsync
|
||||||
|
+# BACKUP_URL=rsync://[USER@]HOST[:PORT]/PATH # using rsync (is not compatible with new style!!!)
|
||||||
|
+
|
||||||
|
+#### NEW STYLE:
|
||||||
|
+# BACKUP_URL=rsync://[USER@]HOST[:PORT]/PATH # using ssh
|
||||||
|
+# BACKUP_URL=rsync://[USER@]HOST[:PORT]::/PATH # using rsync
|
||||||
|
+
|
||||||
|
+function rsync_validate () {
|
||||||
|
+ local url="$1"
|
||||||
|
+
|
||||||
|
+ if [[ "$(url_scheme "$url")" != "rsync" ]]; then # url_scheme still recognizes old style
|
||||||
|
+ BugError "Non-rsync URL $url !"
|
||||||
|
+ fi
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+# Determine whether the URL specifies the use of the rsync protocol (rsyncd) or ssh
|
||||||
|
+# Do not call on non-rsync URLs (use url_scheme first)
|
||||||
|
+function rsync_proto () {
|
||||||
|
+ local url="$1"
|
||||||
|
+
|
||||||
|
+ rsync_validate "$url"
|
||||||
|
+ if egrep -q '(::)' <<< $url ; then # new style '::' means rsync protocol
|
||||||
|
+ echo rsync
|
||||||
|
+ else
|
||||||
|
+ echo ssh
|
||||||
|
+ fi
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+# Functions to parse the URL into its components:
|
||||||
|
+# USER, HOST, PORT, PATH
|
||||||
|
+
|
||||||
|
+function rsync_user () {
|
||||||
|
+ local url="$1"
|
||||||
|
+ local host
|
||||||
|
+
|
||||||
|
+ host=$(url_host "$url")
|
||||||
|
+
|
||||||
|
+ if grep -q '@' <<< $host ; then
|
||||||
|
+ echo "${host%%@*}" # grab user name
|
||||||
|
+ else
|
||||||
|
+ echo root
|
||||||
|
+ fi
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+function rsync_host () {
|
||||||
|
+ local url="$1"
|
||||||
|
+ local host
|
||||||
|
+ local path
|
||||||
|
+
|
||||||
|
+ host=$(url_host "$url")
|
||||||
|
+ path=$(url_path "$url")
|
||||||
|
+ # remove USER@ if present
|
||||||
|
+ local tmp2="${host#*@}"
|
||||||
|
+
|
||||||
|
+ case "$(rsync_proto "$url")" in
|
||||||
|
+ (rsync)
|
||||||
|
+ # tmp2=witsbebelnx02::backup or tmp2=witsbebelnx02::
|
||||||
|
+ echo "${tmp2%%::*}"
|
||||||
|
+ ;;
|
||||||
|
+ (ssh)
|
||||||
|
+ # tmp2=host or tmp2=host:
|
||||||
|
+ echo "${tmp2%%:*}"
|
||||||
|
+ ;;
|
||||||
|
+ esac
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+function rsync_path () {
|
||||||
|
+ local url="$1"
|
||||||
|
+ local host
|
||||||
|
+ local path
|
||||||
|
+ local url_without_scheme
|
||||||
|
+ local url_without_scheme_user
|
||||||
|
+
|
||||||
|
+ host=$(url_host "$url")
|
||||||
|
+ path=$(url_path "$url")
|
||||||
|
+ local tmp2="${host#*@}"
|
||||||
|
+
|
||||||
|
+ url_without_scheme="${url#*//}"
|
||||||
|
+ url_without_scheme_user="${url_without_scheme#$(rsync_user "$url")@}"
|
||||||
|
+
|
||||||
|
+ case "$(rsync_proto "$url")" in
|
||||||
|
+
|
||||||
|
+ (rsync)
|
||||||
|
+ if grep -q '::' <<< $url_without_scheme_user ; then
|
||||||
|
+ # we can not use url_path here, it uses / as separator, not ::
|
||||||
|
+ local url_after_separator="${url_without_scheme_user##*::}"
|
||||||
|
+ # remove leading / - this is a module name
|
||||||
|
+ echo "${url_after_separator#/}"
|
||||||
|
+ else
|
||||||
|
+ echo "${path#*/}"
|
||||||
|
+ fi
|
||||||
|
+ ;;
|
||||||
|
+ (ssh)
|
||||||
|
+ if [ "$url_without_scheme" == "$url" ]; then
|
||||||
|
+ # no scheme - old-style URL
|
||||||
|
+ if grep -q ':' <<< $url_without_scheme_user ; then
|
||||||
|
+ echo "${url_without_scheme_user##*:}"
|
||||||
|
+ else
|
||||||
|
+ BugError "Old-style rsync URL $url without : !"
|
||||||
|
+ fi
|
||||||
|
+ else
|
||||||
|
+ echo "$path"
|
||||||
|
+ fi
|
||||||
|
+ ;;
|
||||||
|
+
|
||||||
|
+ esac
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+function rsync_port () {
|
||||||
|
+ # XXX changing port not implemented yet
|
||||||
|
+ echo 873
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+# Full path to the destination directory on the remote server,
|
||||||
|
+# includes RSYNC_PREFIX. RSYNC_PREFIX is not given by the URL,
|
||||||
|
+# it is a global parameter (by default derived from hostname).
|
||||||
|
+function rsync_path_full () {
|
||||||
|
+ local url="$1"
|
||||||
|
+
|
||||||
|
+ echo "$(rsync_path "$url")/${RSYNC_PREFIX}"
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+# Argument for the ssh command to log in to the remote host ("user@host")
|
||||||
|
+function rsync_remote_ssh () {
|
||||||
|
+ local url="$1"
|
||||||
|
+
|
||||||
|
+ local user host
|
||||||
|
+
|
||||||
|
+ user="$(rsync_user "$url")"
|
||||||
|
+ host="$(rsync_host "$url")"
|
||||||
|
+
|
||||||
|
+ echo "${user}@${host}"
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+# Argument for the rsync command to reach the remote host, without path.
|
||||||
|
+function rsync_remote_base () {
|
||||||
|
+ local url="$1"
|
||||||
|
+
|
||||||
|
+ local user host port
|
||||||
|
+
|
||||||
|
+ user="$(rsync_user "$url")"
|
||||||
|
+ host="$(rsync_host "$url")"
|
||||||
|
+ port="$(rsync_port "$url")"
|
||||||
|
+
|
||||||
|
+ case "$(rsync_proto "$url")" in
|
||||||
|
+
|
||||||
|
+ (rsync)
|
||||||
|
+ echo "rsync://${user}@${host}:${port}/"
|
||||||
|
+ ;;
|
||||||
|
+ (ssh)
|
||||||
|
+ echo "$(rsync_remote_ssh "$url"):"
|
||||||
|
+ ;;
|
||||||
|
+
|
||||||
|
+ esac
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+# Complete argument to rsync to reach the remote location identified by URL,
|
||||||
|
+# but without the added RSYNC_PREFIX.
|
||||||
|
+# This essentially converts our rsync:// URLs into a form accepted by the rsync command.
|
||||||
|
+function rsync_remote () {
|
||||||
|
+ local url="$1"
|
||||||
|
+
|
||||||
|
+ echo "$(rsync_remote_base "$url")$(rsync_path "$url")"
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+# Complete argument to rsync including even RSYNC_PREFIX.
|
||||||
|
+# Determined from the URL and RSYNC_PREFIX.
|
||||||
|
+function rsync_remote_full () {
|
||||||
|
+ local url="$1"
|
||||||
|
+
|
||||||
|
+ echo "$(rsync_remote_base "$url")$(rsync_path_full "$url")"
|
||||||
|
+}
|
||||||
|
diff --git a/usr/share/rear/output/RSYNC/default/200_make_prefix_dir.sh b/usr/share/rear/output/RSYNC/default/200_make_prefix_dir.sh
|
||||||
|
index 519febf5..d00d15e4 100644
|
||||||
|
--- a/usr/share/rear/output/RSYNC/default/200_make_prefix_dir.sh
|
||||||
|
+++ b/usr/share/rear/output/RSYNC/default/200_make_prefix_dir.sh
|
||||||
|
@@ -1,20 +1,32 @@
|
||||||
|
# Create RSYNC_PREFIX under the local TMP_DIR and also on remote rsync server
|
||||||
|
# RSYNC_PREFIX=$HOSTNAME as set in default.conf
|
||||||
|
|
||||||
|
-# create temporary local work-spaces to collect files (we already make the remote backup dir with the correct mode!!)
|
||||||
|
+local proto host scheme
|
||||||
|
+
|
||||||
|
+scheme="$(url_scheme "$OUTPUT_URL")"
|
||||||
|
+
|
||||||
|
+# we handle only rsync:// output schemes.
|
||||||
|
+# ToDo: why does handling of the output URL scheme belong under RSYNC (which is a backup method)?
|
||||||
|
+# OUTPUT_URL is independent on the chosen backup method, so this code should be moved to be backup-independent.
|
||||||
|
+test "rsync" = "$scheme" || return 0
|
||||||
|
+
|
||||||
|
+proto="$(rsync_proto "$OUTPUT_URL")"
|
||||||
|
+host="$(rsync_host "$OUTPUT_URL")"
|
||||||
|
+
|
||||||
|
+# create temporary local work-spaces to collect files
|
||||||
|
mkdir -p $v -m0750 "${TMP_DIR}/rsync/${RSYNC_PREFIX}" >&2 || Error "Could not mkdir '${TMP_DIR}/rsync/${RSYNC_PREFIX}'"
|
||||||
|
-mkdir -p $v -m0755 "${TMP_DIR}/rsync/${RSYNC_PREFIX}/backup" >&2 || Error "Could not mkdir '${TMP_DIR}/rsync/${RSYNC_PREFIX}/backup'"
|
||||||
|
|
||||||
|
-case $RSYNC_PROTO in
|
||||||
|
+case $proto in
|
||||||
|
|
||||||
|
(ssh)
|
||||||
|
- $BACKUP_PROG -a $v -r "${TMP_DIR}/rsync/${RSYNC_PREFIX}" "${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PATH}" >/dev/null 2>&1 \
|
||||||
|
- || Error "Could not create '${RSYNC_PATH}/${RSYNC_PREFIX}' on remote ${RSYNC_HOST}"
|
||||||
|
+ $BACKUP_PROG -a $v -r "${TMP_DIR}/rsync/${RSYNC_PREFIX}" "$(rsync_remote "$OUTPUT_URL")" >/dev/null 2>&1 \
|
||||||
|
+ || Error "Could not create '$(rsync_path_full "$OUTPUT_URL")' on remote ${host}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
(rsync)
|
||||||
|
- $BACKUP_PROG -a $v -r "${TMP_DIR}/rsync/${RSYNC_PREFIX}" "${BACKUP_RSYNC_OPTIONS[@]}" "${RSYNC_PROTO}://${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PORT}/${RSYNC_PATH}/" >/dev/null \
|
||||||
|
- || Error "Could not create '${RSYNC_PATH}/${RSYNC_PREFIX}' on remote ${RSYNC_HOST}"
|
||||||
|
+ # This must run before the backup stage. Otherwise --relative gets added to BACKUP_RSYNC_OPTIONS
|
||||||
|
+ $BACKUP_PROG -a $v -r "${TMP_DIR}/rsync/${RSYNC_PREFIX}" "${BACKUP_RSYNC_OPTIONS[@]}" "$(rsync_remote "$OUTPUT_URL")/" >/dev/null \
|
||||||
|
+ || Error "Could not create '$(rsync_path_full "$OUTPUT_URL")' on remote ${host}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
diff --git a/usr/share/rear/output/RSYNC/default/900_copy_result_files.sh b/usr/share/rear/output/RSYNC/default/900_copy_result_files.sh
|
||||||
|
index 96b62da1..4ddf3cb4 100644
|
||||||
|
--- a/usr/share/rear/output/RSYNC/default/900_copy_result_files.sh
|
||||||
|
+++ b/usr/share/rear/output/RSYNC/default/900_copy_result_files.sh
|
||||||
|
@@ -1,6 +1,17 @@
|
||||||
|
#
|
||||||
|
# copy resulting files to remote network (backup) location
|
||||||
|
|
||||||
|
+local proto scheme
|
||||||
|
+
|
||||||
|
+scheme="$(url_scheme "$OUTPUT_URL")"
|
||||||
|
+
|
||||||
|
+# we handle only rsync:// output schemes.
|
||||||
|
+# ToDo: why does handling of the output URL scheme belong under RSYNC (which is a backup method)?
|
||||||
|
+# OUTPUT_URL is independent on the chosen backup method, so this code should be moved to be backup-independent.
|
||||||
|
+test "rsync" = "$scheme" || return 0
|
||||||
|
+
|
||||||
|
+proto="$(rsync_proto "$OUTPUT_URL")"
|
||||||
|
+
|
||||||
|
LogPrint "Copying resulting files to $OUTPUT_URL location"
|
||||||
|
|
||||||
|
# if called as mkbackuponly then we just don't have any result files.
|
||||||
|
@@ -19,21 +30,21 @@ cp $v $(get_template "RESULT_usage_$OUTPUT.txt") "${TMP_DIR}/rsync/${RSYNC_PREFI
|
||||||
|
cat "$RUNTIME_LOGFILE" >"${TMP_DIR}/rsync/${RSYNC_PREFIX}/rear.log" \
|
||||||
|
|| Error "Could not copy $RUNTIME_LOGFILE to local rsync location"
|
||||||
|
|
||||||
|
-case $RSYNC_PROTO in
|
||||||
|
+case $proto in
|
||||||
|
|
||||||
|
(ssh)
|
||||||
|
- Log "$BACKUP_PROG -a ${TMP_DIR}/rsync/${RSYNC_PREFIX}/ ${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PATH}/${RSYNC_PREFIX}/"
|
||||||
|
+ Log "$BACKUP_PROG -a ${TMP_DIR}/rsync/${RSYNC_PREFIX}/ $(rsync_remote_full "$OUTPUT_URL")/"
|
||||||
|
# FIXME: Add an explanatory comment why "2>/dev/null" is useful here
|
||||||
|
# or remove it according to https://github.com/rear/rear/issues/1395
|
||||||
|
- $BACKUP_PROG -a "${TMP_DIR}/rsync/${RSYNC_PREFIX}/" "${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PATH}/${RSYNC_PREFIX}/" 2>/dev/null \
|
||||||
|
+ $BACKUP_PROG -a "${TMP_DIR}/rsync/${RSYNC_PREFIX}/" "$(rsync_remote_full "$OUTPUT_URL")/" 2>/dev/null \
|
||||||
|
|| Error "Could not copy '${RESULT_FILES[*]}' to $OUTPUT_URL location"
|
||||||
|
;;
|
||||||
|
|
||||||
|
(rsync)
|
||||||
|
- Log "$BACKUP_PROG -a ${TMP_DIR}/rsync/${RSYNC_PREFIX}/ ${BACKUP_RSYNC_OPTIONS[*]} ${RSYNC_PROTO}://${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PORT}/${RSYNC_PATH}/${RSYNC_PREFIX}/"
|
||||||
|
+ Log "$BACKUP_PROG -a ${TMP_DIR}/rsync/${RSYNC_PREFIX}/ ${BACKUP_RSYNC_OPTIONS[*]} $(rsync_remote_full "$OUTPUT_URL")/"
|
||||||
|
# FIXME: Add an explanatory comment why "2>/dev/null" is useful here
|
||||||
|
# or remove it according to https://github.com/rear/rear/issues/1395
|
||||||
|
- $BACKUP_PROG -a "${TMP_DIR}/rsync/${RSYNC_PREFIX}/" "${BACKUP_RSYNC_OPTIONS[@]}" "${RSYNC_PROTO}://${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PORT}/${RSYNC_PATH}/${RSYNC_PREFIX}/" 2>/dev/null \
|
||||||
|
+ $BACKUP_PROG -a "${TMP_DIR}/rsync/${RSYNC_PREFIX}/" "${BACKUP_RSYNC_OPTIONS[@]}" "$(rsync_remote_full "$OUTPUT_URL")/" 2>/dev/null \
|
||||||
|
|| Error "Could not copy '${RESULT_FILES[*]}' to $OUTPUT_URL location"
|
||||||
|
;;
|
||||||
|
|
||||||
|
diff --git a/usr/share/rear/prep/RSYNC/GNU/Linux/200_selinux_in_use.sh b/usr/share/rear/prep/RSYNC/GNU/Linux/200_selinux_in_use.sh
|
||||||
|
index eb7df29e..84500039 100644
|
||||||
|
--- a/usr/share/rear/prep/RSYNC/GNU/Linux/200_selinux_in_use.sh
|
||||||
|
+++ b/usr/share/rear/prep/RSYNC/GNU/Linux/200_selinux_in_use.sh
|
||||||
|
@@ -25,8 +25,10 @@ case $(basename $BACKUP_PROG) in
|
||||||
|
|
||||||
|
(rsync)
|
||||||
|
if grep -q "no xattrs" "$TMP_DIR/rsync_protocol"; then
|
||||||
|
+ local host
|
||||||
|
+ host="$(rsync_host "$BACKUP_URL")"
|
||||||
|
# no xattrs compiled in remote rsync, so saving SELinux attributes are not possible
|
||||||
|
- Log "WARNING: --xattrs not possible on system ($RSYNC_HOST) (no xattrs compiled in rsync)"
|
||||||
|
+ Log "WARNING: --xattrs not possible on system ($host) (no xattrs compiled in rsync)"
|
||||||
|
# $TMP_DIR/selinux.mode is a trigger during backup to disable SELinux
|
||||||
|
cat $SELINUX_ENFORCE > $TMP_DIR/selinux.mode
|
||||||
|
RSYNC_SELINUX= # internal variable used in recover mode (empty means disable SELinux)
|
||||||
|
diff --git a/usr/share/rear/prep/RSYNC/default/100_check_rsync.sh b/usr/share/rear/prep/RSYNC/default/100_check_rsync.sh
|
||||||
|
index c964a148..448a1b1a 100644
|
||||||
|
--- a/usr/share/rear/prep/RSYNC/default/100_check_rsync.sh
|
||||||
|
+++ b/usr/share/rear/prep/RSYNC/default/100_check_rsync.sh
|
||||||
|
@@ -3,97 +3,40 @@
|
||||||
|
# This file is part of Relax-and-Recover, licensed under the GNU General
|
||||||
|
# Public License. Refer to the included COPYING for full text of license.
|
||||||
|
|
||||||
|
-#### OLD STYLE:
|
||||||
|
-# BACKUP_URL=[USER@]HOST:PATH # using ssh (no rsh)
|
||||||
|
-#
|
||||||
|
-# with rsync protocol PATH is a MODULE name defined in remote /etc/rsyncd.conf file
|
||||||
|
-# BACKUP_URL=[USER@]HOST::PATH # using rsync
|
||||||
|
-# BACKUP_URL=rsync://[USER@]HOST[:PORT]/PATH # using rsync (is not compatible with new style!!!)
|
||||||
|
-
|
||||||
|
-#### NEW STYLE:
|
||||||
|
-# BACKUP_URL=rsync://[USER@]HOST[:PORT]/PATH # using ssh
|
||||||
|
-# BACKUP_URL=rsync://[USER@]HOST[:PORT]::/PATH # using rsync
|
||||||
|
-
|
||||||
|
if test -z "$BACKUP_URL" ; then
|
||||||
|
Error "Missing BACKUP_URL=rsync://[USER@]HOST[:PORT][::]/PATH !"
|
||||||
|
fi
|
||||||
|
|
||||||
|
-local host=$(url_host $BACKUP_URL)
|
||||||
|
local scheme=$(url_scheme $BACKUP_URL) # url_scheme still recognizes old style
|
||||||
|
-local path=$(url_path $BACKUP_URL)
|
||||||
|
|
||||||
|
if [[ "$scheme" != "rsync" ]]; then
|
||||||
|
Error "Missing BACKUP_URL=rsync://[USER@]HOST[:PORT][::]/PATH !"
|
||||||
|
fi
|
||||||
|
|
||||||
|
-RSYNC_PROTO= # ssh or rsync
|
||||||
|
-RSYNC_USER=
|
||||||
|
-RSYNC_HOST=
|
||||||
|
-RSYNC_PORT=873 # default port (of rsync server)
|
||||||
|
-RSYNC_PATH=
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-if egrep -q '(::)' <<< $BACKUP_URL ; then # new style '::' means rsync protocol
|
||||||
|
- RSYNC_PROTO=rsync
|
||||||
|
-else
|
||||||
|
- RSYNC_PROTO=ssh
|
||||||
|
-fi
|
||||||
|
-
|
||||||
|
-if grep -q '@' <<< $host ; then
|
||||||
|
- RSYNC_USER="${host%%@*}" # grab user name
|
||||||
|
-else
|
||||||
|
- RSYNC_USER=root
|
||||||
|
-fi
|
||||||
|
-
|
||||||
|
-# remove USER@ if present (we don't need it anymore)
|
||||||
|
-local tmp2="${host#*@}"
|
||||||
|
-
|
||||||
|
-case "$RSYNC_PROTO" in
|
||||||
|
-
|
||||||
|
- (rsync)
|
||||||
|
- # tmp2=witsbebelnx02::backup or tmp2=witsbebelnx02::
|
||||||
|
- RSYNC_HOST="${tmp2%%::*}"
|
||||||
|
- # path=/gdhaese1@witsbebelnx02::backup or path=/backup
|
||||||
|
- if grep -q '::' <<< $path ; then
|
||||||
|
- RSYNC_PATH="${path##*::}"
|
||||||
|
- else
|
||||||
|
- RSYNC_PATH="${path##*/}"
|
||||||
|
- fi
|
||||||
|
- ;;
|
||||||
|
- (ssh)
|
||||||
|
- # tmp2=host or tmp2=host:
|
||||||
|
- RSYNC_HOST="${tmp2%%:*}"
|
||||||
|
- RSYNC_PATH=$path
|
||||||
|
- ;;
|
||||||
|
-
|
||||||
|
-esac
|
||||||
|
-
|
||||||
|
-#echo RSYNC_PROTO=$RSYNC_PROTO
|
||||||
|
-#echo RSYNC_USER=$RSYNC_USER
|
||||||
|
-#echo RSYNC_HOST=$RSYNC_HOST
|
||||||
|
-#echo RSYNC_PORT=$RSYNC_PORT
|
||||||
|
-#echo RSYNC_PATH=$RSYNC_PATH
|
||||||
|
+local host proto
|
||||||
|
+host="$(rsync_host "$BACKUP_URL")"
|
||||||
|
+proto="$(rsync_proto "$BACKUP_URL")"
|
||||||
|
|
||||||
|
# check if host is reachable
|
||||||
|
if test "$PING" ; then
|
||||||
|
- ping -c 2 "$RSYNC_HOST" >/dev/null || Error "Backup host [$RSYNC_HOST] not reachable."
|
||||||
|
+ ping -c 2 "$host" >/dev/null || Error "Backup host [$host] not reachable."
|
||||||
|
else
|
||||||
|
Log "Skipping ping test"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# check protocol connectivity
|
||||||
|
-case "$RSYNC_PROTO" in
|
||||||
|
+case "$proto" in
|
||||||
|
|
||||||
|
(rsync)
|
||||||
|
- Log "Test: $BACKUP_PROG ${BACKUP_RSYNC_OPTIONS[*]} ${RSYNC_PROTO}://${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PORT}/"
|
||||||
|
- $BACKUP_PROG "${BACKUP_RSYNC_OPTIONS[@]}" ${RSYNC_PROTO}://${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PORT}/ >/dev/null \
|
||||||
|
- || Error "Rsync daemon not running on $RSYNC_HOST"
|
||||||
|
+ Log "Test: $BACKUP_PROG ${BACKUP_RSYNC_OPTIONS[*]} $(rsync_remote_base "$BACKUP_URL")"
|
||||||
|
+ $BACKUP_PROG "${BACKUP_RSYNC_OPTIONS[@]}" $(rsync_remote_base "$BACKUP_URL") >/dev/null \
|
||||||
|
+ || Error "Rsync daemon not running on $host"
|
||||||
|
;;
|
||||||
|
|
||||||
|
(ssh)
|
||||||
|
- Log "Test: ssh ${RSYNC_USER}@${RSYNC_HOST} /bin/true"
|
||||||
|
- ssh ${RSYNC_USER}@${RSYNC_HOST} /bin/true >/dev/null 2>&1 \
|
||||||
|
- || Error "Secure shell connection not setup properly [$RSYNC_USER@$RSYNC_HOST]"
|
||||||
|
+ Log "Test: ssh $(rsync_remote_ssh "$BACKUP_URL") /bin/true"
|
||||||
|
+ ssh $(rsync_remote_ssh "$BACKUP_URL") /bin/true >/dev/null 2>&1 \
|
||||||
|
+ || Error "Secure shell connection not setup properly [$(rsync_remote_ssh "$BACKUP_URL")]"
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
diff --git a/usr/share/rear/prep/RSYNC/default/150_check_rsync_protocol_version.sh b/usr/share/rear/prep/RSYNC/default/150_check_rsync_protocol_version.sh
|
||||||
|
index e9103531..becf35a0 100644
|
||||||
|
--- a/usr/share/rear/prep/RSYNC/default/150_check_rsync_protocol_version.sh
|
||||||
|
+++ b/usr/share/rear/prep/RSYNC/default/150_check_rsync_protocol_version.sh
|
||||||
|
@@ -3,15 +3,18 @@
|
||||||
|
# Public License. Refer to the included COPYING for full text of license.
|
||||||
|
# try to grab the rsync protocol version of rsync on the remote server
|
||||||
|
|
||||||
|
-local remote_mountpoint
|
||||||
|
+local remote_mountpoint host path proto
|
||||||
|
+host="$(rsync_host "$BACKUP_URL")"
|
||||||
|
+path="$(rsync_path "$BACKUP_URL")"
|
||||||
|
+proto="$(rsync_proto "$BACKUP_URL")"
|
||||||
|
|
||||||
|
if [ -z "$RSYNC_PROTOCOL_VERSION" ]; then
|
||||||
|
|
||||||
|
- case $RSYNC_PROTO in
|
||||||
|
+ case $proto in
|
||||||
|
|
||||||
|
(ssh)
|
||||||
|
- ssh ${RSYNC_USER}@${RSYNC_HOST} rsync --version >"$TMP_DIR/rsync_protocol" 2>&1 \
|
||||||
|
- || Error "Secure shell connection not setup properly [$RSYNC_USER@$RSYNC_HOST]"
|
||||||
|
+ ssh $(rsync_remote_ssh "$BACKUP_URL") rsync --version >"$TMP_DIR/rsync_protocol" 2>&1 \
|
||||||
|
+ || Error "Secure shell connection not setup properly [$(rsync_remote_ssh "$BACKUP_URL")]"
|
||||||
|
if grep -q "protocol version" "$TMP_DIR/rsync_protocol" ; then
|
||||||
|
RSYNC_PROTOCOL_VERSION=$(grep 'protocol version' "$TMP_DIR/rsync_protocol" | awk '{print $6}')
|
||||||
|
else
|
||||||
|
@@ -24,29 +27,29 @@ if [ -z "$RSYNC_PROTOCOL_VERSION" ]; then
|
||||||
|
RSYNC_PROTOCOL_VERSION=29 # being conservative (old rsync)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
- Log "Remote rsync system ($RSYNC_HOST) uses rsync protocol version $RSYNC_PROTOCOL_VERSION"
|
||||||
|
+ Log "Remote rsync system ($host) uses rsync protocol version $RSYNC_PROTOCOL_VERSION"
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
- Log "Remote rsync system ($RSYNC_HOST) uses rsync protocol version $RSYNC_PROTOCOL_VERSION (overruled by user)"
|
||||||
|
+ Log "Remote rsync system ($host) uses rsync protocol version $RSYNC_PROTOCOL_VERSION (overruled by user)"
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
-if [ "${RSYNC_USER}" != "root" -a $RSYNC_PROTO = "ssh" ]; then
|
||||||
|
+if [ "$(rsync_user "$BACKUP_URL")" != "root" -a $proto = "ssh" ]; then
|
||||||
|
if [ $RSYNC_PROTOCOL_VERSION -gt 29 ]; then
|
||||||
|
if grep -q "no xattrs" "$TMP_DIR/rsync_protocol"; then
|
||||||
|
# no xattrs available in remote rsync, so --fake-super is not possible
|
||||||
|
- Error "rsync --fake-super not possible on system ($RSYNC_HOST) (no xattrs compiled in rsync)"
|
||||||
|
+ Error "rsync --fake-super not possible on system ($host) (no xattrs compiled in rsync)"
|
||||||
|
else
|
||||||
|
# when using --fake-super we must have user_xattr mount options on the remote mntpt
|
||||||
|
- remote_mountpoint=$(ssh ${RSYNC_USER}@${RSYNC_HOST} 'cd ${RSYNC_PATH}; df -P .' 2>/dev/null | tail -1 | awk '{print $6}')
|
||||||
|
- ssh ${RSYNC_USER}@${RSYNC_HOST} "cd ${RSYNC_PATH} && touch .is_xattr_supported && setfattr -n user.comment -v 'File created by ReaR to test if this filesystems supports extended attributes.' .is_xattr_supported && getfattr -n user.comment .is_xattr_supported 1>/dev/null; find .is_xattr_supported -empty -delete" \
|
||||||
|
+ remote_mountpoint=$(ssh $(rsync_remote_ssh "$BACKUP_URL") 'cd ${path}; df -P .' 2>/dev/null | tail -1 | awk '{print $6}')
|
||||||
|
+ ssh $(rsync_remote_ssh "$BACKUP_URL") "cd ${path} && touch .is_xattr_supported && setfattr -n user.comment -v 'File created by ReaR to test if this filesystems supports extended attributes.' .is_xattr_supported && getfattr -n user.comment .is_xattr_supported 1>/dev/null; find .is_xattr_supported -empty -delete" \
|
||||||
|
|| Error "Remote file system $remote_mountpoint does not have user_xattr mount option set!"
|
||||||
|
#BACKUP_RSYNC_OPTIONS+=( --xattrs --rsync-path="rsync --fake-super" )
|
||||||
|
# see issue #366 for explanation of removing --xattrs
|
||||||
|
BACKUP_RSYNC_OPTIONS+=( --rsync-path="rsync --fake-super" )
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
- Error "rsync --fake-super not possible on system ($RSYNC_HOST) (please upgrade rsync to 3.x)"
|
||||||
|
+ Error "rsync --fake-super not possible on system ($host) (please upgrade rsync to 3.x)"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
diff --git a/usr/share/rear/restore/RSYNC/default/400_restore_rsync_backup.sh b/usr/share/rear/restore/RSYNC/default/400_restore_rsync_backup.sh
|
||||||
|
index 993088be..0fa08587 100644
|
||||||
|
--- a/usr/share/rear/restore/RSYNC/default/400_restore_rsync_backup.sh
|
||||||
|
+++ b/usr/share/rear/restore/RSYNC/default/400_restore_rsync_backup.sh
|
||||||
|
@@ -7,7 +7,11 @@ get_size() {
|
||||||
|
local backup_prog_rc
|
||||||
|
local restore_log_message
|
||||||
|
|
||||||
|
-LogPrint "Restoring $BACKUP_PROG backup from '${RSYNC_HOST}:${RSYNC_PATH}'"
|
||||||
|
+local host path
|
||||||
|
+host="$(rsync_host "$BACKUP_URL")"
|
||||||
|
+path="$(rsync_path "$BACKUP_URL")"
|
||||||
|
+
|
||||||
|
+LogPrint "Restoring $BACKUP_PROG backup from '${host}:${path}'"
|
||||||
|
|
||||||
|
ProgressStart "Restore operation"
|
||||||
|
(
|
||||||
|
@@ -15,18 +19,18 @@ ProgressStart "Restore operation"
|
||||||
|
|
||||||
|
(rsync)
|
||||||
|
|
||||||
|
- case $RSYNC_PROTO in
|
||||||
|
+ case $(rsync_proto "$BACKUP_URL") in
|
||||||
|
|
||||||
|
(ssh)
|
||||||
|
- Log $BACKUP_PROG "${BACKUP_RSYNC_OPTIONS[@]}" "${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PATH}/${RSYNC_PREFIX}/backup"/ $TARGET_FS_ROOT/
|
||||||
|
+ Log $BACKUP_PROG "${BACKUP_RSYNC_OPTIONS[@]}" "$(rsync_remote_full "$BACKUP_URL")/backup"/ $TARGET_FS_ROOT/
|
||||||
|
$BACKUP_PROG "${BACKUP_RSYNC_OPTIONS[@]}" \
|
||||||
|
- "${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PATH}/${RSYNC_PREFIX}/backup"/ \
|
||||||
|
+ "$(rsync_remote_full "$BACKUP_URL")/backup"/ \
|
||||||
|
$TARGET_FS_ROOT/
|
||||||
|
;;
|
||||||
|
|
||||||
|
(rsync)
|
||||||
|
$BACKUP_PROG "${BACKUP_RSYNC_OPTIONS[@]}" \
|
||||||
|
- "${RSYNC_PROTO}://${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PORT}/${RSYNC_PATH}/${RSYNC_PREFIX}/backup"/ $TARGET_FS_ROOT/
|
||||||
|
+ "$(rsync_remote_full "$BACKUP_URL")/backup"/ $TARGET_FS_ROOT/
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
diff --git a/usr/share/rear/verify/RSYNC/default/550_check_remote_backup_archive.sh b/usr/share/rear/verify/RSYNC/default/550_check_remote_backup_archive.sh
|
||||||
|
index b2fb72f5..76132794 100644
|
||||||
|
--- a/usr/share/rear/verify/RSYNC/default/550_check_remote_backup_archive.sh
|
||||||
|
+++ b/usr/share/rear/verify/RSYNC/default/550_check_remote_backup_archive.sh
|
||||||
|
@@ -1,14 +1,14 @@
|
||||||
|
# check the backup archive on remote rsync server
|
||||||
|
|
||||||
|
-case $RSYNC_PROTO in
|
||||||
|
+case $(rsync_proto "$BACKUP_URL") in
|
||||||
|
|
||||||
|
(ssh)
|
||||||
|
- ssh ${RSYNC_USER}@${RSYNC_HOST} "ls -ld ${RSYNC_PATH}/${RSYNC_PREFIX}/backup" >/dev/null 2>&1 \
|
||||||
|
- || Error "Archive not found on [$RSYNC_USER@$RSYNC_HOST:${RSYNC_PATH}/${RSYNC_PREFIX}]"
|
||||||
|
+ ssh $(rsync_remote_ssh "$BACKUP_URL") "ls -ld $(rsync_path_full "$BACKUP_URL")/backup" >/dev/null 2>&1 \
|
||||||
|
+ || Error "Archive not found on [$(rsync_remote_full "$BACKUP_URL")]"
|
||||||
|
;;
|
||||||
|
|
||||||
|
(rsync)
|
||||||
|
- $BACKUP_PROG "${RSYNC_PROTO}://${RSYNC_USER}@${RSYNC_HOST}:${RSYNC_PORT}/${RSYNC_PATH}/${RSYNC_PREFIX}/backup" >/dev/null 2>&1 \
|
||||||
|
- || Error "Archive not found on [$RSYNC_USER@$RSYNC_HOST:${RSYNC_PATH}/${RSYNC_PREFIX}]"
|
||||||
|
+ $BACKUP_PROG "$(rsync_remote_full "$BACKUP_URL")/backup" >/dev/null 2>&1 \
|
||||||
|
+ || Error "Archive not found on [$(rsync_remote_full "$BACKUP_URL")]"
|
||||||
|
;;
|
||||||
|
esac
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
Name: rear
|
Name: rear
|
||||||
Version: 2.6
|
Version: 2.6
|
||||||
Release: 11%{?dist}
|
Release: 15%{?dist}
|
||||||
Summary: Relax-and-Recover is a Linux disaster recovery and system migration tool
|
Summary: Relax-and-Recover is a Linux disaster recovery and system migration tool
|
||||||
URL: http://relax-and-recover.org/
|
URL: http://relax-and-recover.org/
|
||||||
License: GPLv3
|
License: GPLv3
|
||||||
@ -29,6 +29,17 @@ Patch38: rear-bz2049091.patch
|
|||||||
Patch39: rear-pr2675.patch
|
Patch39: rear-pr2675.patch
|
||||||
Patch40: rear-bz2048454.patch
|
Patch40: rear-bz2048454.patch
|
||||||
Patch41: rear-bz2035939.patch
|
Patch41: rear-bz2035939.patch
|
||||||
|
Patch42: rear-bz2083272.patch
|
||||||
|
Patch43: rear-bz2111049.patch
|
||||||
|
Patch44: rear-bz2104005.patch
|
||||||
|
Patch45: rear-bz2097437.patch
|
||||||
|
Patch46: rear-bz2096916.patch
|
||||||
|
Patch47: rear-bz2096900.patch
|
||||||
|
Patch48: rear-bz2111059.patch
|
||||||
|
Patch49: rsync-output.patch
|
||||||
|
Patch50: rear-bz2119501.patch
|
||||||
|
Patch51: rear-bz2120736.patch
|
||||||
|
Patch52: rear-bz2117937.patch
|
||||||
|
|
||||||
# rear contains only bash scripts plus documentation so that on first glance it could be "BuildArch: noarch"
|
# rear contains only bash scripts plus documentation so that on first glance it could be "BuildArch: noarch"
|
||||||
# but actually it is not "noarch" because it only works on those architectures that are explicitly supported.
|
# but actually it is not "noarch" because it only works on those architectures that are explicitly supported.
|
||||||
@ -42,6 +53,8 @@ ExclusiveArch: %ix86 x86_64 ppc ppc64 ppc64le ia64 s390x
|
|||||||
# see the GitHub issue https://github.com/rear/rear/issues/629
|
# see the GitHub issue https://github.com/rear/rear/issues/629
|
||||||
%ifarch %ix86 x86_64
|
%ifarch %ix86 x86_64
|
||||||
Requires: syslinux
|
Requires: syslinux
|
||||||
|
# We need mkfs.vfat for recreating EFI System Partition
|
||||||
|
Recommends: dosfstools
|
||||||
%endif
|
%endif
|
||||||
%ifarch ppc ppc64 ppc64le
|
%ifarch ppc ppc64 ppc64le
|
||||||
# Called by grub2-install (except on PowerNV)
|
# Called by grub2-install (except on PowerNV)
|
||||||
@ -147,6 +160,31 @@ install -m 0644 %{SOURCE3} %{buildroot}%{_docdir}/%{name}/
|
|||||||
|
|
||||||
#-- CHANGELOG -----------------------------------------------------------------#
|
#-- CHANGELOG -----------------------------------------------------------------#
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Aug 25 2022 Pavel Cahyna <pcahyna@redhat.com> - 2.6-15
|
||||||
|
- Exclude /etc/lvm/devices from the rescue system to work around a segfault
|
||||||
|
in lvm pvcreate
|
||||||
|
|
||||||
|
* Wed Aug 24 2022 Pavel Cahyna <pcahyna@redhat.com> - 2.6-14
|
||||||
|
- Avoid stderr message about irrelevant broken links
|
||||||
|
- Changes for NetBackup (NBU) 9.x support
|
||||||
|
|
||||||
|
* Tue Aug 9 2022 Pavel Cahyna <pcahyna@redhat.com> - 2.6-13
|
||||||
|
- Backport PR2831 - rsync URL refactoring
|
||||||
|
fixes rsync OUTPUT_URL when different from BACKUP_URL
|
||||||
|
|
||||||
|
* Mon Aug 8 2022 Pavel Cahyna <pcahyna@redhat.com> - 2.6-12
|
||||||
|
- Apply PR2795 to detect changes in system files between backup
|
||||||
|
and rescue image
|
||||||
|
- Apply PR2808 to exclude dev/watchdog* from recovery system
|
||||||
|
- Backport upstream PRs 2827 and 2839 to pass -y to lvcreate instead of one "y"
|
||||||
|
on stdin
|
||||||
|
- Apply PR2811 to add the PRE/POST_RECOVERY_COMMANDS directives
|
||||||
|
- Recommend dosfstools on x86_64, needed for EFI System Partition
|
||||||
|
- Backport PR2825 to replace defunct mkinitrd with dracut
|
||||||
|
- Apply PR2580 to load the nvram module in the rescue environment in order
|
||||||
|
to be able to set the boot order on ppc64le LPARs
|
||||||
|
- Backport PR2822 to include the true vi executable in rescue ramdisk
|
||||||
|
|
||||||
* Sun Feb 27 2022 Pavel Cahyna <pcahyna@redhat.com> - 2.6-11
|
* Sun Feb 27 2022 Pavel Cahyna <pcahyna@redhat.com> - 2.6-11
|
||||||
- Apply PR2675 to fix leftover temp dir bug (introduced in backported PR2625)
|
- Apply PR2675 to fix leftover temp dir bug (introduced in backported PR2625)
|
||||||
- Apply PR2603 to ignore unused PV devices
|
- Apply PR2603 to ignore unused PV devices
|
||||||
|
Loading…
Reference in New Issue
Block a user