diff --git a/rear-nbu-RHEL-17390-RHEL-17393.patch b/rear-nbu-RHEL-17390-RHEL-17393.patch new file mode 100644 index 0000000..f482a3b --- /dev/null +++ b/rear-nbu-RHEL-17390-RHEL-17393.patch @@ -0,0 +1,117 @@ +diff --git a/usr/share/rear/conf/default.conf b/usr/share/rear/conf/default.conf +index 17a764cba..a944114b3 100644 +--- a/usr/share/rear/conf/default.conf ++++ b/usr/share/rear/conf/default.conf +@@ -1866,7 +1866,7 @@ 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 /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_NBU=( /usr/openv/bin/vnetd /usr/openv/bin/vopied /usr/openv/lib /usr/openv/netbackup /usr/openv/var /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/:/usr/openv/lib/boost" +diff --git a/usr/share/rear/finalize/NBU/default/990_copy_bplogrestorelog.sh b/usr/share/rear/finalize/NBU/default/990_copy_bplogrestorelog.sh +index 60d9a222c..e326db612 100644 +--- a/usr/share/rear/finalize/NBU/default/990_copy_bplogrestorelog.sh ++++ b/usr/share/rear/finalize/NBU/default/990_copy_bplogrestorelog.sh +@@ -1,5 +1,51 @@ + # 990_copy_bprestorelog.sh +-# copy the logfile to the recovered system, at least the part that has been written till now. ++# copy the logfiles to the recovered system, at least the part that has been written till now. + +-mkdir -p $TARGET_FS_ROOT/$ROOT_HOME_DIR +-cp -f $TMP_DIR/bplog.restore* $TARGET_FS_ROOT/$ROOT_HOME_DIR/ ++# $VAR_DIR/restore will be copied to $recovery_system_recover_log_dir in wrapup/default/990_copy_logfile.sh ++mkdir -p "$VAR_DIR/restore/netbackup" ++cp -pr /usr/openv/netbackup/logs/* "$VAR_DIR/restore/netbackup" ++ ++# take care of $VAR_DIR/restore/bplog.restore* files (that used to be in /root before) ++function symlink_bprestore_logs () ++{ ++ # adapted from wrapup/default/990_copy_logfile.sh ++ local final_logfile_name_full ++ local final_logfile_name ++ local log_file_symlink_target ++ local log_file_symlink ++ local recover_log_dir=$LOG_DIR/recover ++ local recovery_system_recover_log_dir=$TARGET_FS_ROOT/$recover_log_dir ++ # Create the directories with mode 0700 (rwx------) so that only root can access files and subdirectories therein ++ # because in particular logfiles could contain security relevant information. ++ ++ # To be backward compatible with where to the logfile was copied before ++ # have it as a symbolic link that points to where the logfile actually is: ++ # ( "roots" in recovery_system_roots_home_dir means root's but ' in a variable name is not so good ;-) ++ local recovery_system_roots_home_dir=$TARGET_FS_ROOT/$ROOT_HOME_DIR ++ test -d $recovery_system_roots_home_dir || mkdir $verbose -m 0700 $recovery_system_roots_home_dir ++ ++ # Remove existing and now outdated symlinks that would falsely point to the same target ++ # The symlink name bplog.restore-$( date -Iseconds ).log is for example bplog.restore-2019-12-17T09:40:36+01:00.log or rear-2006-08-14T02:34:56-06:00.log ++ # so a matching globbing pattern is bplog.restore-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]*.log ('*' for the UTC offset): ++ for log_file_symlink in $recovery_system_roots_home_dir/bplog.restore*-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]*.log ; do ++ # Skip if a file that matches the globbing pattern is not a symlink (it could be even a directory full of user's sacrocanct files): ++ test -L $log_file_symlink || continue ++ # Remove also outdated dangling symlinks where their target does not exist by using 'readlink -m': ++ test "$log_file_symlink_target" = "$( readlink -m $log_file_symlink )" || continue ++ rm $verbose $log_file_symlink ++ done ++ ++ # At the moment this function runs, $VAR_DIR/restore will have been already copied ++ # to $recovery_system_recover_log_dir in wrapup/default/990_copy_logfile.sh ++ # (exit tasks run in reverse order, so this task will run after the tasks defined in ++ # wrapup/default/990_copy_logfile.sh ) ++ for final_logfile_name_full in $recovery_system_recover_log_dir/restore/bplog.restore* ; do ++ final_logfile_name="$( basename "$final_logfile_name_full" )" ++ log_file_symlink_target="$recover_log_dir/restore/$final_logfile_name" ++ # Create symlink with current timestamp that points to where the logfile actually is: ++ log_file_symlink=$recovery_system_roots_home_dir/$( basename "$final_logfile_name" .log )-$( date -Iseconds ).log ++ ln $verbose -s $log_file_symlink_target $log_file_symlink || true ++ done ++} ++ ++AddExitTask "symlink_bprestore_logs" +diff --git a/usr/share/rear/restore/NBU/default/400_restore_with_nbu.sh b/usr/share/rear/restore/NBU/default/400_restore_with_nbu.sh +index 71f7359a1..4280cb021 100644 +--- a/usr/share/rear/restore/NBU/default/400_restore_with_nbu.sh ++++ b/usr/share/rear/restore/NBU/default/400_restore_with_nbu.sh +@@ -2,6 +2,23 @@ + # 400_restore_with_nbu.sh + # restore files with NBU + ++# Unique log file name: adapted from restore/NETFS/default/400_restore_backup.sh ++# and restore/TSM/default/400_restore_with_tsm.sh ++local backup_restore_log_dir="$VAR_DIR/restore" ++mkdir -p $backup_restore_log_dir ++local backup_restore_log_file="" ++local backup_restore_log_prefix="bplog.restore" ++local backup_restore_log_suffix="log" ++# E.g. when "rear -C 'general.conf /path/to/special.conf' recover" was called CONFIG_APPEND_FILES is "general.conf /path/to/special.conf" ++# so that in particular '/' characters must be replaced in the backup restore log file (by a colon) and then ++# the backup restore log file name will be like .../restore/bplog.restore.generalconf_:path:to:specialconf.1234.log ++# It does not work with $( tr -d -c '[:alnum:]/[:space:]' <<<"$CONFIG_APPEND_FILES" | tr -s '/[:space:]' ':_' ) ++# because the <<<"$CONFIG_APPEND_FILES" results a trailing newline that becomes a trailing '_' character so that ++# echo -n $CONFIG_APPEND_FILES (without double quotes) is used to avoid leading and trailing spaces and newlines: ++test "$CONFIG_APPEND_FILES" && backup_restore_log_prefix=$backup_restore_log_prefix.$( echo -n $CONFIG_APPEND_FILES | tr -d -c '[:alnum:]/[:space:]' | tr -s '/[:space:]' ':_' ) ++ ++backup_restore_log_file=$backup_restore_log_dir/$backup_restore_log_prefix.$MASTER_PID.$backup_restore_log_suffix ++ + LogPrint "NetBackup: restoring / into $TARGET_FS_ROOT" + + echo "change / to $TARGET_FS_ROOT" > $TMP_DIR/nbu_change_file +@@ -10,13 +27,13 @@ echo "change / to $TARGET_FS_ROOT" > $TMP_DIR/nbu_change_file + # $TMP_DIR/restore_fs_list was made by 300_create_nbu_restore_fs_list.sh + if [ ${#NBU_ENDTIME[@]} -gt 0 ] ; then + edate="${NBU_ENDTIME[@]}" +- bprestore_args="-B -H -L $TMP_DIR/bplog.restore -8 -R $TMP_DIR/nbu_change_file -t 0 -w 0 -e ${edate} -C ${NBU_CLIENT_SOURCE} -D ${NBU_CLIENT_NAME} -f $TMP_DIR/restore_fs_list" ++ bprestore_args="-B -H -L $backup_restore_log_file -8 -R $TMP_DIR/nbu_change_file -t 0 -w 0 -e ${edate} -C ${NBU_CLIENT_SOURCE} -D ${NBU_CLIENT_NAME} -f $TMP_DIR/restore_fs_list" + else +- bprestore_args="-B -H -L $TMP_DIR/bplog.restore -8 -R $TMP_DIR/nbu_change_file -t 0 -w 0 -C ${NBU_CLIENT_SOURCE} -D ${NBU_CLIENT_NAME} -f $TMP_DIR/restore_fs_list" ++ bprestore_args="-B -H -L $backup_restore_log_file -8 -R $TMP_DIR/nbu_change_file -t 0 -w 0 -C ${NBU_CLIENT_SOURCE} -D ${NBU_CLIENT_NAME} -f $TMP_DIR/restore_fs_list" + fi + + LogPrint "RUN: /usr/openv/netbackup/bin/bprestore $bprestore_args" +-LogPrint "Restore progress: see $TMP_DIR/bplog.restore" ++LogPrint "Restore progress: see $backup_restore_log_file" + LANG=C /usr/openv/netbackup/bin/bprestore $bprestore_args + rc=$? + if (( $rc > 1 )) ; then diff --git a/rear.spec b/rear.spec index bc0aec5..d3febe4 100644 --- a/rear.spec +++ b/rear.spec @@ -62,6 +62,13 @@ Patch111: rear-CVE-2024-23301.patch # https://github.com/rear/rear/pull/3145 Patch113: rear-restore-hybrid-bootloader-RHEL-16864.patch +###################### +# downstream patches # +###################### + +# additional fixes for NBU support +Patch206: rear-nbu-RHEL-17390-RHEL-17393.patch + # 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. # Of course the rear bash scripts can be installed on any architecture just as any binaries can be installed on any architecture.