import rear-2.4-12.el8
This commit is contained in:
		
						commit
						1fb3af268f
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | SOURCES/rear-2.4.tar.gz | ||||||
							
								
								
									
										1
									
								
								.rear.metadata
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.rear.metadata
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | 9f6037ea582635ed78f1dffaa8a7cc5cdc7db37a SOURCES/rear-2.4.tar.gz | ||||||
							
								
								
									
										15
									
								
								SOURCES/rear-bz1492177-warning.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								SOURCES/rear-bz1492177-warning.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | diff --git a/usr/share/rear/output/ISO/Linux-i386/249_check_rhel_grub2_efi_package.sh b/usr/share/rear/output/ISO/Linux-i386/249_check_rhel_grub2_efi_package.sh
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 00000000..4c4ded08
 | ||||||
|  | --- /dev/null
 | ||||||
|  | +++ b/usr/share/rear/output/ISO/Linux-i386/249_check_rhel_grub2_efi_package.sh
 | ||||||
|  | @@ -0,0 +1,9 @@
 | ||||||
|  | +# 249_check_rhel_grub2_efi_package.sh
 | ||||||
|  | +
 | ||||||
|  | +is_true $USING_UEFI_BOOTLOADER || return    # empty or 0 means NO UEFI
 | ||||||
|  | +
 | ||||||
|  | +(
 | ||||||
|  | +    VERBOSE=1
 | ||||||
|  | +    test -r /usr/lib/grub/x86_64-efi/moddep.lst
 | ||||||
|  | +    PrintIfError "WARNING: /usr/lib/grub/x86_64-efi/moddep.lst not found, grub2-mkimage will likely fail. Please install the grub2-efi-x64-modules package to fix this."
 | ||||||
|  | +)
 | ||||||
							
								
								
									
										275
									
								
								SOURCES/rear-bz1631183.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										275
									
								
								SOURCES/rear-bz1631183.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,275 @@ | |||||||
|  | diff --git a/usr/share/rear/backup/NETFS/default/500_make_backup.sh b/usr/share/rear/backup/NETFS/default/500_make_backup.sh
 | ||||||
|  | index 47266910..7170cda6 100644
 | ||||||
|  | --- a/usr/share/rear/backup/NETFS/default/500_make_backup.sh
 | ||||||
|  | +++ b/usr/share/rear/backup/NETFS/default/500_make_backup.sh
 | ||||||
|  | @@ -67,49 +67,99 @@ else
 | ||||||
|  |      SPLIT_COMMAND="dd of=$backuparchive" | ||||||
|  |  fi | ||||||
|  |   | ||||||
|  | +# Used by "tar" method to record which pipe command failed
 | ||||||
|  | +FAILING_BACKUP_PROG_FILE="$TMP_DIR/failing_backup_prog"
 | ||||||
|  | +FAILING_BACKUP_PROG_RC_FILE="$TMP_DIR/failing_backup_prog_rc"
 | ||||||
|  | +
 | ||||||
|  |  LogPrint "Creating $BACKUP_PROG archive '$backuparchive'" | ||||||
|  |  ProgressStart "Preparing archive operation" | ||||||
|  |  ( | ||||||
|  |  case "$(basename ${BACKUP_PROG})" in | ||||||
|  | -	# tar compatible programs here
 | ||||||
|  | -	(tar)
 | ||||||
|  | -		set_tar_features
 | ||||||
|  | -		Log $BACKUP_PROG $TAR_OPTIONS --sparse --block-number --totals --verbose \
 | ||||||
|  | -			--no-wildcards-match-slash --one-file-system \
 | ||||||
|  | -			--ignore-failed-read "${BACKUP_PROG_OPTIONS[@]}" \
 | ||||||
|  | -			$BACKUP_PROG_CREATE_NEWER_OPTIONS \
 | ||||||
|  | -			${BACKUP_PROG_BLOCKS:+-b $BACKUP_PROG_BLOCKS} "${BACKUP_PROG_COMPRESS_OPTIONS[@]}" \
 | ||||||
|  | -			-X $TMP_DIR/backup-exclude.txt -C / -c -f - \
 | ||||||
|  | -			$(cat $TMP_DIR/backup-include.txt) $RUNTIME_LOGFILE \| $BACKUP_PROG_CRYPT_OPTIONS BACKUP_PROG_CRYPT_KEY \| $SPLIT_COMMAND
 | ||||||
|  | -		$BACKUP_PROG $TAR_OPTIONS --sparse --block-number --totals --verbose \
 | ||||||
|  | -			--no-wildcards-match-slash --one-file-system \
 | ||||||
|  | -			--ignore-failed-read "${BACKUP_PROG_OPTIONS[@]}" \
 | ||||||
|  | -			$BACKUP_PROG_CREATE_NEWER_OPTIONS \
 | ||||||
|  | -			${BACKUP_PROG_BLOCKS:+-b $BACKUP_PROG_BLOCKS} "${BACKUP_PROG_COMPRESS_OPTIONS[@]}" \
 | ||||||
|  | -			-X $TMP_DIR/backup-exclude.txt -C / -c -f - \
 | ||||||
|  | -			$(cat $TMP_DIR/backup-include.txt) $RUNTIME_LOGFILE | $BACKUP_PROG_CRYPT_OPTIONS $BACKUP_PROG_CRYPT_KEY | $SPLIT_COMMAND
 | ||||||
|  | -	;;
 | ||||||
|  | -	(rsync)
 | ||||||
|  | -		# make sure that the target is a directory
 | ||||||
|  | -		mkdir -p $v "$backuparchive" >&2
 | ||||||
|  | -		Log $BACKUP_PROG --verbose "${BACKUP_RSYNC_OPTIONS[@]}" --one-file-system --delete \
 | ||||||
|  | -			--exclude-from=$TMP_DIR/backup-exclude.txt --delete-excluded \
 | ||||||
|  | -			$(cat $TMP_DIR/backup-include.txt) "$backuparchive"
 | ||||||
|  | -		$BACKUP_PROG --verbose "${BACKUP_RSYNC_OPTIONS[@]}" --one-file-system --delete \
 | ||||||
|  | -			--exclude-from=$TMP_DIR/backup-exclude.txt --delete-excluded \
 | ||||||
|  | -			$(cat $TMP_DIR/backup-include.txt) "$backuparchive" >&2
 | ||||||
|  | -	;;
 | ||||||
|  | -	(*)
 | ||||||
|  | -		Log "Using unsupported backup program '$BACKUP_PROG'"
 | ||||||
|  | -		Log $BACKUP_PROG "${BACKUP_PROG_COMPRESS_OPTIONS[@]}" \
 | ||||||
|  | -			$BACKUP_PROG_OPTIONS_CREATE_ARCHIVE $TMP_DIR/backup-exclude.txt \
 | ||||||
|  | -			"${BACKUP_PROG_OPTIONS[@]}" $backuparchive \
 | ||||||
|  | -			$(cat $TMP_DIR/backup-include.txt) $RUNTIME_LOGFILE > $backuparchive
 | ||||||
|  | -		$BACKUP_PROG "${BACKUP_PROG_COMPRESS_OPTIONS[@]}" \
 | ||||||
|  | -			$BACKUP_PROG_OPTIONS_CREATE_ARCHIVE $TMP_DIR/backup-exclude.txt \
 | ||||||
|  | -			"${BACKUP_PROG_OPTIONS[@]}" $backuparchive \
 | ||||||
|  | -			$(cat $TMP_DIR/backup-include.txt) $RUNTIME_LOGFILE > $backuparchive
 | ||||||
|  | -	;;
 | ||||||
|  | +    # tar compatible programs here
 | ||||||
|  | +    (tar)
 | ||||||
|  | +        set_tar_features
 | ||||||
|  | +        Log $BACKUP_PROG $TAR_OPTIONS --sparse --block-number --totals --verbose \
 | ||||||
|  | +            --no-wildcards-match-slash --one-file-system \
 | ||||||
|  | +            --ignore-failed-read "${BACKUP_PROG_OPTIONS[@]}" \
 | ||||||
|  | +            $BACKUP_PROG_CREATE_NEWER_OPTIONS \
 | ||||||
|  | +            ${BACKUP_PROG_BLOCKS:+-b $BACKUP_PROG_BLOCKS} "${BACKUP_PROG_COMPRESS_OPTIONS[@]}" \
 | ||||||
|  | +            -X $TMP_DIR/backup-exclude.txt -C / -c -f - \
 | ||||||
|  | +            $(cat $TMP_DIR/backup-include.txt) $RUNTIME_LOGFILE \| $BACKUP_PROG_CRYPT_OPTIONS BACKUP_PROG_CRYPT_KEY \| $SPLIT_COMMAND
 | ||||||
|  | +
 | ||||||
|  | +        # Variable used to record the short name of piped commands in case of
 | ||||||
|  | +        # error, e.g. ( "tar" "cat" "dd" ) in case of unencrypted and unsplit backup.
 | ||||||
|  | +        backup_prog_shortnames=(
 | ||||||
|  | +            "$(basename $(echo "$BACKUP_PROG" | awk '{ print $1 }'))"
 | ||||||
|  | +            "$(basename $(echo "$BACKUP_PROG_CRYPT_OPTIONS" | awk '{ print $1 }'))"
 | ||||||
|  | +            "$(basename $(echo "$SPLIT_COMMAND" | awk '{ print $1 }'))"
 | ||||||
|  | +        )
 | ||||||
|  | +        for index in ${!backup_prog_shortnames[@]} ; do
 | ||||||
|  | +            [ -n "${backup_prog_shortnames[$index]}" ] || BugError "No computed shortname for pipe component $index"
 | ||||||
|  | +        done
 | ||||||
|  | +
 | ||||||
|  | +        $BACKUP_PROG $TAR_OPTIONS --sparse --block-number --totals --verbose    \
 | ||||||
|  | +            --no-wildcards-match-slash --one-file-system                        \
 | ||||||
|  | +            --ignore-failed-read "${BACKUP_PROG_OPTIONS[@]}"                    \
 | ||||||
|  | +            $BACKUP_PROG_CREATE_NEWER_OPTIONS                                   \
 | ||||||
|  | +            ${BACKUP_PROG_BLOCKS:+-b $BACKUP_PROG_BLOCKS}                       \
 | ||||||
|  | +            "${BACKUP_PROG_COMPRESS_OPTIONS[@]}"                                \
 | ||||||
|  | +            -X $TMP_DIR/backup-exclude.txt -C / -c -f -                         \
 | ||||||
|  | +            $(cat $TMP_DIR/backup-include.txt) $RUNTIME_LOGFILE |   \
 | ||||||
|  | +                                                                    \
 | ||||||
|  | +        $BACKUP_PROG_CRYPT_OPTIONS $BACKUP_PROG_CRYPT_KEY |         \
 | ||||||
|  | +                                                                    \
 | ||||||
|  | +        $SPLIT_COMMAND
 | ||||||
|  | +        pipes_rc=( ${PIPESTATUS[@]} )
 | ||||||
|  | +
 | ||||||
|  | +        # Exit code logic:
 | ||||||
|  | +        # - never return rc=1 (this is reserved for "tar" warning about modified files)
 | ||||||
|  | +        # - process exit code in pipe's reverse order
 | ||||||
|  | +        #   - if last command failed (e.g. "dd"), return an error
 | ||||||
|  | +        #   - otherwise if previous command failed (e.g. "encrypt"), return an error
 | ||||||
|  | +        #   ...
 | ||||||
|  | +        #   - otherwise return "tar" exit code
 | ||||||
|  | +        #
 | ||||||
|  | +        # When an error occurs, record the program name in $FAILING_BACKUP_PROG_FILE
 | ||||||
|  | +        # and real exit code in $FAILING_BACKUP_PROG_RC_FILE.
 | ||||||
|  | +
 | ||||||
|  | +        let index=${#pipes_rc[@]}-1
 | ||||||
|  | +        while [ $index -ge 0 ] ; do
 | ||||||
|  | +            rc=${pipes_rc[$index]}
 | ||||||
|  | +            if [ $rc -ne 0 ] ; then
 | ||||||
|  | +                echo "${backup_prog_shortnames[$index]}" > $FAILING_BACKUP_PROG_FILE
 | ||||||
|  | +                echo "$rc" > $FAILING_BACKUP_PROG_RC_FILE
 | ||||||
|  | +                if [ $rc -eq 1 ] && [ "${backup_prog_shortnames[$index]}" != "tar" ] ; then
 | ||||||
|  | +                    rc=2
 | ||||||
|  | +                fi
 | ||||||
|  | +                exit $rc
 | ||||||
|  | +            fi
 | ||||||
|  | +            # This pipe command succeeded, check the previous one
 | ||||||
|  | +            let index--
 | ||||||
|  | +        done
 | ||||||
|  | +        # This was a success
 | ||||||
|  | +        exit 0
 | ||||||
|  | +    ;;
 | ||||||
|  | +    (rsync)
 | ||||||
|  | +        # make sure that the target is a directory
 | ||||||
|  | +        mkdir -p $v "$backuparchive" >&2
 | ||||||
|  | +        Log $BACKUP_PROG --verbose "${BACKUP_RSYNC_OPTIONS[@]}" --one-file-system --delete \
 | ||||||
|  | +            --exclude-from=$TMP_DIR/backup-exclude.txt --delete-excluded \
 | ||||||
|  | +            $(cat $TMP_DIR/backup-include.txt) "$backuparchive"
 | ||||||
|  | +        $BACKUP_PROG --verbose "${BACKUP_RSYNC_OPTIONS[@]}" --one-file-system --delete \
 | ||||||
|  | +            --exclude-from=$TMP_DIR/backup-exclude.txt --delete-excluded \
 | ||||||
|  | +            $(cat $TMP_DIR/backup-include.txt) "$backuparchive" >&2
 | ||||||
|  | +    ;;
 | ||||||
|  | +    (*)
 | ||||||
|  | +        Log "Using unsupported backup program '$BACKUP_PROG'"
 | ||||||
|  | +        Log $BACKUP_PROG "${BACKUP_PROG_COMPRESS_OPTIONS[@]}" \
 | ||||||
|  | +            $BACKUP_PROG_OPTIONS_CREATE_ARCHIVE $TMP_DIR/backup-exclude.txt \
 | ||||||
|  | +            "${BACKUP_PROG_OPTIONS[@]}" $backuparchive \
 | ||||||
|  | +            $(cat $TMP_DIR/backup-include.txt) $RUNTIME_LOGFILE > $backuparchive
 | ||||||
|  | +        $BACKUP_PROG "${BACKUP_PROG_COMPRESS_OPTIONS[@]}" \
 | ||||||
|  | +            $BACKUP_PROG_OPTIONS_CREATE_ARCHIVE $TMP_DIR/backup-exclude.txt \
 | ||||||
|  | +            "${BACKUP_PROG_OPTIONS[@]}" $backuparchive \
 | ||||||
|  | +            $(cat $TMP_DIR/backup-include.txt) $RUNTIME_LOGFILE > $backuparchive
 | ||||||
|  | +    ;;
 | ||||||
|  |  esac 2> "${TMP_DIR}/${BACKUP_PROG_ARCHIVE}.log" | ||||||
|  |  # important trick: the backup prog is the last in each case entry and the case .. esac is the last command | ||||||
|  |  # in the (..) subshell. As a result the return code of the subshell is the return code of the backup prog! | ||||||
|  | @@ -121,44 +171,44 @@ sleep 1 # Give the backup software a good chance to start working
 | ||||||
|  |   | ||||||
|  |  # return disk usage in bytes | ||||||
|  |  function get_disk_used() { | ||||||
|  | -	let "$(stat -f -c 'used=(%b-%f)*%S' $1)"
 | ||||||
|  | -	echo $used
 | ||||||
|  | +    let "$(stat -f -c 'used=(%b-%f)*%S' $1)"
 | ||||||
|  | +    echo $used
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  # While the backup runs in a sub-process, display some progress information to the user. | ||||||
|  |  # ProgressInfo texts have a space at the end to get the 'OK' from ProgressStop shown separated. | ||||||
|  |  test "$PROGRESS_WAIT_SECONDS" || PROGRESS_WAIT_SECONDS=1 | ||||||
|  |  case "$( basename $BACKUP_PROG )" in | ||||||
|  | -	(tar)
 | ||||||
|  | -		while sleep $PROGRESS_WAIT_SECONDS ; kill -0 $BackupPID 2>/dev/null; do
 | ||||||
|  | -			#blocks="$(stat -c %b ${backuparchive})"
 | ||||||
|  | -			#size="$((blocks*512))"
 | ||||||
|  | -			size="$(stat -c %s ${backuparchive}* | awk '{s+=$1} END {print s}')"
 | ||||||
|  | -			ProgressInfo "Archived $((size/1024/1024)) MiB [avg $((size/1024/(SECONDS-starttime))) KiB/sec] "
 | ||||||
|  | -		done
 | ||||||
|  | -		;;
 | ||||||
|  | -	(rsync)
 | ||||||
|  | -		# since we do not want to do a $(du -s) run every second we count disk usage instead
 | ||||||
|  | -		# this obviously leads to wrong results in case something else is writing to the same
 | ||||||
|  | -		# disk at the same time as is very likely with a networked file system. For local disks
 | ||||||
|  | -		# this should be good enough and in any case this is only some eye candy.
 | ||||||
|  | -		# TODO: Find a fast way to count the actual transfer data, preferrable getting the info from rsync.
 | ||||||
|  | -		let old_disk_used="$(get_disk_used "$backuparchive")"
 | ||||||
|  | -		while sleep $PROGRESS_WAIT_SECONDS ; kill -0 $BackupPID 2>/dev/null; do
 | ||||||
|  | -			let disk_used="$(get_disk_used "$backuparchive")" size=disk_used-old_disk_used
 | ||||||
|  | -			ProgressInfo "Archived $((size/1024/1024)) MiB [avg $((size/1024/(SECONDS-starttime))) KiB/sec] "
 | ||||||
|  | -		done
 | ||||||
|  | -		;;
 | ||||||
|  | -	(*)
 | ||||||
|  | -		while sleep $PROGRESS_WAIT_SECONDS ; kill -0 $BackupPID 2>/dev/null; do
 | ||||||
|  | -			size="$(stat -c "%s" "$backuparchive")" || {
 | ||||||
|  | -				kill -9 $BackupPID
 | ||||||
|  | -				ProgressError
 | ||||||
|  | -				Error "$(basename $BACKUP_PROG) failed to create the archive file"
 | ||||||
|  | -			}
 | ||||||
|  | -			ProgressInfo "Archived $((size/1024/1024)) MiB [avg $((size/1024/(SECONDS-starttime))) KiB/sec] "
 | ||||||
|  | -		done
 | ||||||
|  | -		;;
 | ||||||
|  | +    (tar)
 | ||||||
|  | +        while sleep $PROGRESS_WAIT_SECONDS ; kill -0 $BackupPID 2>/dev/null; do
 | ||||||
|  | +            #blocks="$(stat -c %b ${backuparchive})"
 | ||||||
|  | +            #size="$((blocks*512))"
 | ||||||
|  | +            size="$(stat -c %s ${backuparchive}* | awk '{s+=$1} END {print s}')"
 | ||||||
|  | +            ProgressInfo "Archived $((size/1024/1024)) MiB [avg $((size/1024/(SECONDS-starttime))) KiB/sec] "
 | ||||||
|  | +        done
 | ||||||
|  | +        ;;
 | ||||||
|  | +    (rsync)
 | ||||||
|  | +        # since we do not want to do a $(du -s) run every second we count disk usage instead
 | ||||||
|  | +        # this obviously leads to wrong results in case something else is writing to the same
 | ||||||
|  | +        # disk at the same time as is very likely with a networked file system. For local disks
 | ||||||
|  | +        # this should be good enough and in any case this is only some eye candy.
 | ||||||
|  | +        # TODO: Find a fast way to count the actual transfer data, preferrable getting the info from rsync.
 | ||||||
|  | +        let old_disk_used="$(get_disk_used "$backuparchive")"
 | ||||||
|  | +        while sleep $PROGRESS_WAIT_SECONDS ; kill -0 $BackupPID 2>/dev/null; do
 | ||||||
|  | +            let disk_used="$(get_disk_used "$backuparchive")" size=disk_used-old_disk_used
 | ||||||
|  | +            ProgressInfo "Archived $((size/1024/1024)) MiB [avg $((size/1024/(SECONDS-starttime))) KiB/sec] "
 | ||||||
|  | +        done
 | ||||||
|  | +        ;;
 | ||||||
|  | +    (*)
 | ||||||
|  | +        while sleep $PROGRESS_WAIT_SECONDS ; kill -0 $BackupPID 2>/dev/null; do
 | ||||||
|  | +            size="$(stat -c "%s" "$backuparchive")" || {
 | ||||||
|  | +                kill -9 $BackupPID
 | ||||||
|  | +                ProgressError
 | ||||||
|  | +                Error "$(basename $BACKUP_PROG) failed to create the archive file"
 | ||||||
|  | +            }
 | ||||||
|  | +            ProgressInfo "Archived $((size/1024/1024)) MiB [avg $((size/1024/(SECONDS-starttime))) KiB/sec] "
 | ||||||
|  | +        done
 | ||||||
|  | +        ;;
 | ||||||
|  |  esac | ||||||
|  |  ProgressStop | ||||||
|  |  transfertime="$((SECONDS-starttime))" | ||||||
|  | @@ -177,10 +227,12 @@ sleep 1
 | ||||||
|  |  # everyone should see this warning, even if not verbose | ||||||
|  |  case "$(basename $BACKUP_PROG)" in | ||||||
|  |      (tar) | ||||||
|  | -        if (( $backup_prog_rc == 1 )); then
 | ||||||
|  | -            LogPrint "WARNING: $(basename $BACKUP_PROG) ended with return code $backup_prog_rc and below output:
 | ||||||
|  | +        if (( $backup_prog_rc != 0 )); then
 | ||||||
|  | +            prog="$(cat $FAILING_BACKUP_PROG_FILE)"
 | ||||||
|  | +            if (( $backup_prog_rc == 1 )); then
 | ||||||
|  | +                LogUserOutput "WARNING: $prog ended with return code 1 and below output:
 | ||||||
|  |    ---snip--- | ||||||
|  | -$(grep '^tar: ' $RUNTIME_LOGFILE | sed -e 's/^/  /' | tail -n3)
 | ||||||
|  | +$(grep '^tar: ' "${TMP_DIR}/${BACKUP_PROG_ARCHIVE}.log" | sed -e 's/^/  /' | tail -n3)
 | ||||||
|  |    ---------- | ||||||
|  |  This means that files have been modified during the archiving | ||||||
|  |  process. As a result the backup may not be completely consistent | ||||||
|  | @@ -188,16 +240,19 @@ or may not be a perfect copy of the system. Relax-and-Recover
 | ||||||
|  |  will continue, however it is highly advisable to verify the | ||||||
|  |  backup in order to be sure to safely recover this system. | ||||||
|  |  " | ||||||
|  | -        elif (( $backup_prog_rc > 1 )); then
 | ||||||
|  | -            Error "$(basename $BACKUP_PROG) failed with return code $backup_prog_rc and below output:
 | ||||||
|  | +            else
 | ||||||
|  | +                rc=$(cat $FAILING_BACKUP_PROG_RC_FILE)
 | ||||||
|  | +                Error "$prog failed with return code $rc and below output:
 | ||||||
|  |    ---snip--- | ||||||
|  | -$(grep '^tar: ' $RUNTIME_LOGFILE | sed -e 's/^/  /' | tail -n3)
 | ||||||
|  | +$(grep "^$prog: " "${TMP_DIR}/${BACKUP_PROG_ARCHIVE}.log" | sed -e 's/^/  /' | tail -n3)
 | ||||||
|  |    ---------- | ||||||
|  |  This means that the archiving process ended prematurely, or did | ||||||
|  |  not even start. As a result it is unlikely you can recover this | ||||||
|  |  system properly. Relax-and-Recover is therefore aborting execution. | ||||||
|  |  " | ||||||
|  | -        fi;;
 | ||||||
|  | +            fi
 | ||||||
|  | +        fi
 | ||||||
|  | +        ;;
 | ||||||
|  |      (*) | ||||||
|  |          if (( $backup_prog_rc > 0 )) ; then | ||||||
|  |              Error "$(basename $BACKUP_PROG) failed with return code $backup_prog_rc | ||||||
|  | @@ -212,10 +267,12 @@ esac
 | ||||||
|  |   | ||||||
|  |  tar_message="$(tac $RUNTIME_LOGFILE | grep -m1 '^Total bytes written: ')" | ||||||
|  |  if [ $backup_prog_rc -eq 0 -a "$tar_message" ] ; then | ||||||
|  | -	LogPrint "$tar_message in $transfertime seconds."
 | ||||||
|  | +    LogPrint "$tar_message in $transfertime seconds."
 | ||||||
|  |  elif [ "$size" ]; then | ||||||
|  | -	LogPrint "Archived $((size/1024/1024)) MiB in $((transfertime)) seconds [avg $((size/1024/transfertime)) KiB/sec]"
 | ||||||
|  | +    LogPrint "Archived $((size/1024/1024)) MiB in $((transfertime)) seconds [avg $((size/1024/transfertime)) KiB/sec]"
 | ||||||
|  |  fi | ||||||
|  |   | ||||||
|  |  ### Copy progress log to backup media | ||||||
|  |  cp $v "${TMP_DIR}/${BACKUP_PROG_ARCHIVE}.log" "${opath}/${BACKUP_PROG_ARCHIVE}.log" >&2 | ||||||
|  | +
 | ||||||
|  | +# vim: set et ts=4 sw=4:
 | ||||||
							
								
								
									
										1487
									
								
								SOURCES/rear-bz1639705.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1487
									
								
								SOURCES/rear-bz1639705.patch
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										156
									
								
								SOURCES/rear-bz1652828-bz1652853.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								SOURCES/rear-bz1652828-bz1652853.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,156 @@ | |||||||
|  | diff --git a/usr/share/rear/build/GNU/Linux/100_copy_as_is.sh b/usr/share/rear/build/GNU/Linux/100_copy_as_is.sh
 | ||||||
|  | index 9c4212ae..873e244e 100644
 | ||||||
|  | --- a/usr/share/rear/build/GNU/Linux/100_copy_as_is.sh
 | ||||||
|  | +++ b/usr/share/rear/build/GNU/Linux/100_copy_as_is.sh
 | ||||||
|  | @@ -54,9 +54,13 @@ Log "copy_as_is_executables = ${copy_as_is_executables[@]}"
 | ||||||
|  |  # add them to the LIBS list if they are not yet included in the copied files: | ||||||
|  |  Log "Adding required libraries of executables in all the copied files to LIBS" | ||||||
|  |  local required_library="" | ||||||
|  | -for required_library in $( RequiredSharedOjects "${copy_as_is_executables[@]}" ) ; do
 | ||||||
|  | -    # Skip when the required library was already actually copied by 'tar' above:
 | ||||||
|  | -    grep -q "$required_library" $copy_as_is_filelist_file && continue
 | ||||||
|  | +for required_library in $( RequiredSharedObjects "${copy_as_is_executables[@]}" ) ; do
 | ||||||
|  | +    # Skip when the required library was already actually copied by 'tar' above.
 | ||||||
|  | +    # grep for a full line (copy_as_is_filelist_file contains 1 file name per line)
 | ||||||
|  | +    # to avoid that libraries get skipped when their library path is a substring
 | ||||||
|  | +    # of another already copied library, e.g. do not skip /path/to/lib when
 | ||||||
|  | +    # /other/path/to/lib was already copied, cf. https://github.com/rear/rear/pull/1976
 | ||||||
|  | +    grep -q "^${required_library}\$" $copy_as_is_filelist_file && continue
 | ||||||
|  |      # Skip when the required library is already in LIBS: | ||||||
|  |      IsInArray "$required_library" "${LIBS[@]}" && continue | ||||||
|  |      Log "Adding required library '$required_library' to LIBS" | ||||||
|  | diff --git a/usr/share/rear/build/GNU/Linux/390_copy_binaries_libraries.sh b/usr/share/rear/build/GNU/Linux/390_copy_binaries_libraries.sh
 | ||||||
|  | index f7809bc7..ed02dea9 100644
 | ||||||
|  | --- a/usr/share/rear/build/GNU/Linux/390_copy_binaries_libraries.sh
 | ||||||
|  | +++ b/usr/share/rear/build/GNU/Linux/390_copy_binaries_libraries.sh
 | ||||||
|  | @@ -62,16 +62,16 @@ Log "Binaries being copied: ${all_binaries[@]}"
 | ||||||
|  |  copy_binaries "$ROOTFS_DIR/bin" "${all_binaries[@]}" | ||||||
|  |   | ||||||
|  |  # Copy libraries: | ||||||
|  | -# It is crucial to also have all LIBS itself in all_libs because RequiredSharedOjects()
 | ||||||
|  | +# It is crucial to also have all LIBS itself in all_libs because RequiredSharedObjects()
 | ||||||
|  |  # outputs only those libraries that are required by a library but not the library itself | ||||||
|  |  # so that without all LIBS itself in all_libs those libraries in LIBS are missing that | ||||||
|  |  # are not needed by a binary in all_binaries (all_binaries were already copied above). | ||||||
|  | -# RequiredSharedOjects outputs the required shared objects on STDOUT.
 | ||||||
|  | +# RequiredSharedObjects outputs the required shared objects on STDOUT.
 | ||||||
|  |  # The output are absolute paths to the required shared objects. | ||||||
|  |  # The output can also be symbolic links (also as absolute paths). | ||||||
|  |  # In case of symbolic links only the link but not the link target is output. | ||||||
|  |  # Therefore for symbolic links also the link target gets copied below. | ||||||
|  | -local all_libs=( "${LIBS[@]}" $( RequiredSharedOjects "${all_binaries[@]}" "${LIBS[@]}" ) )
 | ||||||
|  | +local all_libs=( "${LIBS[@]}" $( RequiredSharedObjects "${all_binaries[@]}" "${LIBS[@]}" ) )
 | ||||||
|  |   | ||||||
|  |  Log "Libraries being copied: ${all_libs[@]}" | ||||||
|  |  local lib="" | ||||||
|  | diff --git a/usr/share/rear/build/OPALPBA/Linux-i386/391_list_executable_dependencies.sh b/usr/share/rear/build/OPALPBA/Linux-i386/391_list_executable_dependencies.sh
 | ||||||
|  | index 9803200d..8cb27d78 100644
 | ||||||
|  | --- a/usr/share/rear/build/OPALPBA/Linux-i386/391_list_executable_dependencies.sh
 | ||||||
|  | +++ b/usr/share/rear/build/OPALPBA/Linux-i386/391_list_executable_dependencies.sh
 | ||||||
|  | @@ -8,7 +8,7 @@ if is_true $KEEP_BUILD_DIR; then
 | ||||||
|  |      executable_dependencies_list="$TMP_DIR/executable-dependencies" | ||||||
|  |   | ||||||
|  |      for executable in "${executables[@]}"; do | ||||||
|  | -        dependents=( $(RequiredSharedOjects "$ROOTFS_DIR/$executable") )
 | ||||||
|  | +        dependents=( $(RequiredSharedObjects "$ROOTFS_DIR/$executable") )
 | ||||||
|  |          echo "$executable: ${dependents[*]}" | ||||||
|  |      done > "$executable_dependencies_list" | ||||||
|  |   | ||||||
|  | diff --git a/usr/share/rear/build/default/980_verify_rootfs.sh b/usr/share/rear/build/default/980_verify_rootfs.sh
 | ||||||
|  | index f8b3e8e9..d03e5f34 100644
 | ||||||
|  | --- a/usr/share/rear/build/default/980_verify_rootfs.sh
 | ||||||
|  | +++ b/usr/share/rear/build/default/980_verify_rootfs.sh
 | ||||||
|  | @@ -51,6 +51,11 @@ if test "$BACKUP" = "SESAM" ; then
 | ||||||
|  |      # related libraries | ||||||
|  |      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SESAM_LD_LIBRARY_PATH | ||||||
|  |  fi | ||||||
|  | +if test "$BACKUP" = "NBU" ; then
 | ||||||
|  | +    # Use a NBU-specific LD_LIBRARY_PATH to find NBU libraries
 | ||||||
|  | +    # see https://github.com/rear/rear/issues/1974
 | ||||||
|  | +    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NBU_LD_LIBRARY_PATH
 | ||||||
|  | +fi
 | ||||||
|  |  # Actually test all binaries for 'not found' libraries. | ||||||
|  |  # Find all binaries and libraries also e.g. those that are copied via COPY_AS_IS into other paths: | ||||||
|  |  for binary in $( find $ROOTFS_DIR -type f -executable -printf '/%P\n' ); do | ||||||
|  | diff --git a/usr/share/rear/conf/default.conf b/usr/share/rear/conf/default.conf
 | ||||||
|  | index 0f0d0675..796f228a 100644
 | ||||||
|  | --- a/usr/share/rear/conf/default.conf
 | ||||||
|  | +++ b/usr/share/rear/conf/default.conf
 | ||||||
|  | @@ -1467,7 +1467,8 @@ OBDR_BLOCKSIZE=2048
 | ||||||
|  |  ## | ||||||
|  |  # | ||||||
|  |  COPY_AS_IS_NBU=( /usr/openv/bin/vnetd /usr/openv/bin/vopied /usr/openv/lib /usr/openv/netbackup /usr/openv/var/auth/[mn]*.txt ) | ||||||
|  | -COPY_AS_IS_EXCLUDE_NBU=( "/usr/openv/netbackup/logs/*" "/usr/openv/netbackup/bin/bpjava*" "/usr/openv/netbackup/bin/xbp" )
 | ||||||
|  | +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 )
 | ||||||
|  | +NBU_LD_LIBRARY_PATH="/usr/openv/lib"
 | ||||||
|  |  PROGS_NBU=( ) | ||||||
|  |   | ||||||
|  |  ## | ||||||
|  | diff --git a/usr/share/rear/lib/_input-output-functions.sh b/usr/share/rear/lib/_input-output-functions.sh
 | ||||||
|  | index d5eed43e..bdbf593d 100644
 | ||||||
|  | --- a/usr/share/rear/lib/_input-output-functions.sh
 | ||||||
|  | +++ b/usr/share/rear/lib/_input-output-functions.sh
 | ||||||
|  | @@ -324,10 +324,11 @@ function LogToSyslog () {
 | ||||||
|  |  # see https://github.com/rear/rear/issues/729 | ||||||
|  |  function has_binary () { | ||||||
|  |      for bin in $@ ; do | ||||||
|  | -        # Suppress success output via stdout (but keep failure output via stderr):
 | ||||||
|  | -        if type $bin 1>/dev/null ; then
 | ||||||
|  | -            return 0
 | ||||||
|  | -        fi
 | ||||||
|  | +        # Suppress success output via stdout which is crucial when has_binary is called
 | ||||||
|  | +        # in other functions that provide their intended function results via stdout
 | ||||||
|  | +        # to not pollute intended function results with intermixed has_binary stdout
 | ||||||
|  | +        # (e.g. the RequiredSharedObjects function) but keep failure output via stderr:
 | ||||||
|  | +        type $bin 1>/dev/null && return 0
 | ||||||
|  |      done | ||||||
|  |      return 1 | ||||||
|  |  } | ||||||
|  | diff --git a/usr/share/rear/lib/linux-functions.sh b/usr/share/rear/lib/linux-functions.sh
 | ||||||
|  | index 6a767367..3fb44e6d 100644
 | ||||||
|  | --- a/usr/share/rear/lib/linux-functions.sh
 | ||||||
|  | +++ b/usr/share/rear/lib/linux-functions.sh
 | ||||||
|  | @@ -100,13 +100,13 @@ function FindStorageDrivers () {
 | ||||||
|  |   | ||||||
|  |  # Determine all required shared objects (shared/dynamic libraries) | ||||||
|  |  # for programs and/or shared objects (binaries) specified in $@. | ||||||
|  | -# RequiredSharedOjects outputs the required shared objects on STDOUT.
 | ||||||
|  | +# RequiredSharedObjects outputs the required shared objects on STDOUT.
 | ||||||
|  |  # The output are absolute paths to the required shared objects. | ||||||
|  |  # The output can also be symbolic links (also as absolute paths). | ||||||
|  |  # In case of symbolic links only the link but not the link target is output. | ||||||
|  | -function RequiredSharedOjects () {
 | ||||||
|  | -    has_binary ldd || Error "Cannot run RequiredSharedOjects() because there is no ldd binary"
 | ||||||
|  | -    Log "RequiredSharedOjects: Determining required shared objects"
 | ||||||
|  | +function RequiredSharedObjects () {
 | ||||||
|  | +    has_binary ldd || Error "Cannot run RequiredSharedObjects() because there is no ldd binary"
 | ||||||
|  | +    Log "RequiredSharedObjects: Determining required shared objects"
 | ||||||
|  |      # It uses 'ldd' to determine all required shared objects because 'ldd' outputs | ||||||
|  |      # also transitively required shared objects i.e. libraries needed by libraries, | ||||||
|  |      # e.g. for /usr/sbin/parted also the libraries needed by the libparted library: | ||||||
|  | @@ -164,10 +164,11 @@ function RequiredSharedOjects () {
 | ||||||
|  |      #  2. Line: "        lib (mem-addr)"                 -> virtual library | ||||||
|  |      #  3. Line: "        lib => not found"               -> print error to stderr | ||||||
|  |      #  4. Line: "        lib => /path/to/lib (mem-addr)" -> print $3 '/path/to/lib' | ||||||
|  | -    #  5. Line: "        /path/to/lib (mem-addr)"        -> print $1 '/path/to/lib'
 | ||||||
|  | +    #  5. Line: "        /path/to/lib => /path/to/lib2 (mem-addr)" -> print $3 '/path/to/lib2'
 | ||||||
|  | +    #  6. Line: "        /path/to/lib (mem-addr)"        -> print $1 '/path/to/lib'
 | ||||||
|  |      ldd "$@" | awk ' /^\t.+ => not found/ { print "Shared object " $1 " not found" > "/dev/stderr" } | ||||||
|  |                       /^\t.+ => \// { print $3 } | ||||||
|  | -                     /^\t\// { print $1 } ' | sort -u
 | ||||||
|  | +                     /^\t\// && !/ => / { print $1 } ' | sort -u
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  # Provide a shell, with custom exit-prompt and history | ||||||
|  | diff --git a/usr/share/rear/prep/NBU/default/450_check_nbu_client_configured.sh b/usr/share/rear/prep/NBU/default/450_check_nbu_client_configured.sh
 | ||||||
|  | index e01dcdbd..3cc29777 100644
 | ||||||
|  | --- a/usr/share/rear/prep/NBU/default/450_check_nbu_client_configured.sh
 | ||||||
|  | +++ b/usr/share/rear/prep/NBU/default/450_check_nbu_client_configured.sh
 | ||||||
|  | @@ -5,5 +5,6 @@
 | ||||||
|  |  Log "Running: /usr/openv/netbackup/bin/bplist command" | ||||||
|  |  LANG=C /usr/openv/netbackup/bin/bplist -l -s `date -d "-5 days" \ | ||||||
|  |  	"+%m/%d/%Y"` / >/dev/null | ||||||
|  | -[ $? -gt 0 ] && LogPrint "WARNING: Netbackup bplist check failed with error code $?.
 | ||||||
|  | +rc=$?
 | ||||||
|  | +[ $rc -gt 0 ] && LogPrint "WARNING: Netbackup bplist check failed with error code ${rc}.
 | ||||||
|  |  See $RUNTIME_LOGFILE for more details." | ||||||
							
								
								
									
										17
									
								
								SOURCES/rear-bz1653214.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								SOURCES/rear-bz1653214.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | diff --git a/usr/share/rear/rescue/GNU/Linux/310_network_devices.sh b/usr/share/rear/rescue/GNU/Linux/310_network_devices.sh
 | ||||||
|  | index 4698618c..6b3194bd 100644
 | ||||||
|  | --- a/usr/share/rear/rescue/GNU/Linux/310_network_devices.sh
 | ||||||
|  | +++ b/usr/share/rear/rescue/GNU/Linux/310_network_devices.sh
 | ||||||
|  | @@ -854,7 +854,11 @@ function handle_physdev () {
 | ||||||
|  |   | ||||||
|  |      DebugPrint "$network_interface is a physical device" | ||||||
|  |   | ||||||
|  | -    mac="$( cat $sysfspath/address )" || BugError "Could not read a MAC address for '$network_interface'."
 | ||||||
|  | +    if [ -e $sysfspath/bonding_slave/perm_hwaddr ] ; then
 | ||||||
|  | +        mac="$( cat $sysfspath/bonding_slave/perm_hwaddr )"
 | ||||||
|  | +    else
 | ||||||
|  | +        mac="$( cat $sysfspath/address )" || BugError "Could not read a MAC address for '$network_interface'."
 | ||||||
|  | +    fi
 | ||||||
|  |      # Skip fake interfaces without MAC address | ||||||
|  |      [ "$mac" != "00:00:00:00:00:00" ] || return $rc_error | ||||||
|  |   | ||||||
							
								
								
									
										35
									
								
								SOURCES/rear-bz1655956.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								SOURCES/rear-bz1655956.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | |||||||
|  | diff --git a/usr/sbin/rear b/usr/sbin/rear
 | ||||||
|  | index a51f820c..e21156bf 100755
 | ||||||
|  | --- a/usr/sbin/rear
 | ||||||
|  | +++ b/usr/sbin/rear
 | ||||||
|  | @@ -527,6 +527,10 @@ Build date: $( date -R )
 | ||||||
|  |  if test "$WORKFLOW" != "help" ; then | ||||||
|  |      # Create temporary work area and register removal exit task: | ||||||
|  |      BUILD_DIR="$( mktemp -d -t rear.XXXXXXXXXXXXXXX || Error "Could not create build area '$BUILD_DIR'" )" | ||||||
|  | +    # Since 'mktemp' doesn't always return a path under /tmp, the build
 | ||||||
|  | +    # directory has always to be excluded for safety
 | ||||||
|  | +    BACKUP_PROG_EXCLUDE+=( "$BUILD_DIR" )
 | ||||||
|  | +
 | ||||||
|  |      QuietAddExitTask cleanup_build_area_and_end_program | ||||||
|  |      Log "Using build area '$BUILD_DIR'" | ||||||
|  |      ROOTFS_DIR=$BUILD_DIR/rootfs | ||||||
|  | @@ -582,3 +586,5 @@ if test "$WORKFLOW" != "help" ; then
 | ||||||
|  |  fi | ||||||
|  |   | ||||||
|  |  exit $EXIT_CODE | ||||||
|  | +
 | ||||||
|  | +# vim: set et ts=4 sw=4:
 | ||||||
|  | diff --git a/usr/share/rear/conf/default.conf b/usr/share/rear/conf/default.conf
 | ||||||
|  | index ef118998..52b05eea 100644
 | ||||||
|  | --- a/usr/share/rear/conf/default.conf
 | ||||||
|  | +++ b/usr/share/rear/conf/default.conf
 | ||||||
|  | @@ -47,7 +47,9 @@
 | ||||||
|  |  # is set in the environment where /usr/sbin/rear is called. | ||||||
|  |  # To have a specific working area directory prefix for Relax-and-Recover | ||||||
|  |  # specify in /etc/rear/local.conf something like | ||||||
|  | +#
 | ||||||
|  |  #   export TMPDIR="/prefix/for/rear/working/directory" | ||||||
|  | +#
 | ||||||
|  |  # where /prefix/for/rear/working/directory must already exist. | ||||||
|  |  # This is useful for example when there is not sufficient free space | ||||||
|  |  # in /tmp or $TMPDIR for the ISO image or even the backup archive. | ||||||
							
								
								
									
										91
									
								
								SOURCES/rear-bz1659137.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								SOURCES/rear-bz1659137.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,91 @@ | |||||||
|  | diff --git a/usr/share/rear/skel/default/etc/scripts/system-setup.d/55-migrate-network-devices.sh b/usr/share/rear/skel/default/etc/scripts/system-setup.d/55-migrate-network-devices.sh
 | ||||||
|  | index e3ebacce..17cd1dd6 100644
 | ||||||
|  | --- a/usr/share/rear/skel/default/etc/scripts/system-setup.d/55-migrate-network-devices.sh
 | ||||||
|  | +++ b/usr/share/rear/skel/default/etc/scripts/system-setup.d/55-migrate-network-devices.sh
 | ||||||
|  | @@ -26,18 +26,47 @@ ORIGINAL_MACS=()
 | ||||||
|  |  # The ORIGINAL_DEVICES collects the original device names: | ||||||
|  |  ORIGINAL_DEVICES=() | ||||||
|  |  # The ORIG_MACS_FILE contains lines of the form: network_interface mac_address | ||||||
|  | +
 | ||||||
|  | +# Temporary rear_mappings_mac used when interfaces have been renamed
 | ||||||
|  | +tmp_mac_mapping_file=$(mktemp)
 | ||||||
|  | +
 | ||||||
|  |  # TODO: What should happen if there is no ORIG_MACS_FILE or when it is empty? | ||||||
|  |  while read orig_dev orig_mac junk ; do | ||||||
|  |      ORIGINAL_DEVICES=( "${ORIGINAL_DEVICES[@]}" "$orig_dev") | ||||||
|  |      ORIGINAL_MACS=( "${ORIGINAL_MACS[@]}" "$orig_mac" ) | ||||||
|  | -    # Continue with the next original MAC address if it is found on the current system:
 | ||||||
|  | -    ip link show | grep -q "$orig_mac" && continue
 | ||||||
|  | -    MIGRATE_DEVNAMES=( "${MIGRATE_DEVNAMES[@]}" "$orig_dev" )
 | ||||||
|  | -    MIGRATE_MACS=( "${MIGRATE_MACS[@]}" "$orig_mac" )
 | ||||||
|  | +    # Continue with the next original MAC address if it is found on the current
 | ||||||
|  | +    # system, otherwise we consider it needs migration:
 | ||||||
|  | +    new_dev=$( get_device_by_hwaddr "$orig_mac" )
 | ||||||
|  | +    if [ -n "$new_dev" ] ; then
 | ||||||
|  | +        [ "$new_dev" = "$orig_dev" ] && continue
 | ||||||
|  | +        # The device was found but has been renamed (it was customized in
 | ||||||
|  | +        # source system).
 | ||||||
|  | +        # Create a temporary mac mapping, we don't want finalize() to update
 | ||||||
|  | +        # the ifcfg-* files!
 | ||||||
|  | +        echo "$orig_mac $orig_mac $orig_dev" >> $tmp_mac_mapping_file
 | ||||||
|  | +    else
 | ||||||
|  | +        MIGRATE_MACS+=( "$orig_mac" )
 | ||||||
|  | +    fi
 | ||||||
|  |  done < $ORIG_MACS_FILE | ||||||
|  |   | ||||||
|  | -# Skip this process if all MACs and network interfacs (devices) are accounted for:
 | ||||||
|  | -test ${#MIGRATE_MACS[@]} -eq 0 && test ${#MIGRATE_DEVNAMES[@]} -eq 0 && return 0
 | ||||||
|  | +
 | ||||||
|  | +if [ ${#MIGRATE_MACS[@]} -ne 0 ] ; then
 | ||||||
|  | +    # If some MACs were not found (MIGRATE_MACS not empty) then, we need a migration
 | ||||||
|  | +    :
 | ||||||
|  | +elif [ -s $tmp_mac_mapping_file ] ; then
 | ||||||
|  | +    # Else, if some devices were renamed, we also need a migration, but it will
 | ||||||
|  | +    # be automatic thanks to the $tmp_mac_mapping_file mapping file
 | ||||||
|  | +
 | ||||||
|  | +    # We do not need the $MAC_MAPPING_FILE file from the user, just overwrite it
 | ||||||
|  | +    # Later, we will remove that file to not have finalize() modify the ifcfg-*
 | ||||||
|  | +    # files.
 | ||||||
|  | +    mkdir -p $(dirname $MAC_MAPPING_FILE)
 | ||||||
|  | +    cp $tmp_mac_mapping_file $MAC_MAPPING_FILE
 | ||||||
|  | +else
 | ||||||
|  | +    # Skip this process if all MACs and network interfaces (devices) are accounted for
 | ||||||
|  | +    unset tmp_mac_mapping_file
 | ||||||
|  | +    return 0
 | ||||||
|  | +fi
 | ||||||
|  |   | ||||||
|  |  # Find the MAC addresses that are now available. | ||||||
|  |  # This is an array with values of the form "$dev $mac $driver" | ||||||
|  | @@ -74,7 +103,7 @@ done
 | ||||||
|  |  # so that it is shown to the user what MAC address mappings will be done: | ||||||
|  |  if read_and_strip_file $MAC_MAPPING_FILE ; then | ||||||
|  |      while read orig_dev orig_mac junk ; do | ||||||
|  | -        read_and_strip_file $MAC_MAPPING_FILE | grep -q "$orig_mac" && MANUAL_MAC_MAPPING=true
 | ||||||
|  | +        read_and_strip_file $MAC_MAPPING_FILE | grep -qw "^$orig_mac" && MANUAL_MAC_MAPPING=true
 | ||||||
|  |      done < $ORIG_MACS_FILE | ||||||
|  |  fi | ||||||
|  |   | ||||||
|  | @@ -237,7 +266,7 @@ if is_true $reload_udev ; then
 | ||||||
|  |      echo -n "Reloading udev ... " | ||||||
|  |      # Force udev to reload rules (as they were just changed) | ||||||
|  |      # Failback to "udevadm control --reload" in case of problem (as specify in udevadm manpage in SLES12) | ||||||
|  | -    # If nothing work, then wait 1 seconf delay. It should let the time for udev to detect changes in the rules files.
 | ||||||
|  | +    # If nothing work, then wait 1 second delay. It should let the time for udev to detect changes in the rules files.
 | ||||||
|  |      udevadm control --reload-rules || udevadm control --reload || sleep 1 | ||||||
|  |      my_udevtrigger | ||||||
|  |      sleep 1 | ||||||
|  | @@ -252,5 +281,13 @@ if is_true $reload_udev ; then
 | ||||||
|  |  fi | ||||||
|  |   | ||||||
|  |  # A later script in finalize/* will also go over the MAC mappings file and | ||||||
|  | -# apply them to the files in the recovered system.
 | ||||||
|  | +# apply them to the files in the recovered system, unless we did the mapping
 | ||||||
|  | +# automatically, which means some device has been renamed and will probably
 | ||||||
|  | +# gets its name back upon reboot.
 | ||||||
|  | +if [ -s $tmp_mac_mapping_file ] ; then
 | ||||||
|  | +    rm $MAC_MAPPING_FILE $tmp_mac_mapping_file
 | ||||||
|  | +fi
 | ||||||
|  | +
 | ||||||
|  | +unset tmp_mac_mapping_file
 | ||||||
|  |   | ||||||
|  | +# vim: set et ts=4 sw=4:
 | ||||||
							
								
								
									
										17
									
								
								SOURCES/rear-bz1663515.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								SOURCES/rear-bz1663515.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | diff --git a/usr/share/rear/lib/uefi-functions.sh b/usr/share/rear/lib/uefi-functions.sh
 | ||||||
|  | index e40f2ab0..95e6292d 100644
 | ||||||
|  | --- a/usr/share/rear/lib/uefi-functions.sh
 | ||||||
|  | +++ b/usr/share/rear/lib/uefi-functions.sh
 | ||||||
|  | @@ -46,6 +46,11 @@ function build_bootx86_efi {
 | ||||||
|  |          Log "Did not find grub-mkimage (cannot build bootx86.efi)" | ||||||
|  |          return | ||||||
|  |      fi | ||||||
|  | -    $gmkimage $v -O x86_64-efi -c $TMP_DIR/mnt/EFI/BOOT/embedded_grub.cfg -o $TMP_DIR/mnt/EFI/BOOT/BOOTX64.efi -p "/EFI/BOOT" part_gpt part_msdos fat ext2 normal chain boot configfile linux linuxefi multiboot jfs iso9660 usb usbms usb_keyboard video udf ntfs all_video gzio efi_gop reboot search test echo btrfs
 | ||||||
|  | +    # as not all Linux distro's have the same grub modules present we verify what we have (see also https://github.com/rear/rear/pull/2001)
 | ||||||
|  | +    grub_modules=""
 | ||||||
|  | +    for grub_module in part_gpt part_msdos fat ext2 normal chain boot configfile linux linuxefi multiboot jfs iso9660 usb usbms usb_keyboard video udf ntfs all_video gzio efi_gop reboot search test echo btrfs ; do
 | ||||||
|  | +        test "$( find /boot -type f -name "$grub_module.mod" 2>/dev/null )" && grub_modules="$grub_modules $grub_module"
 | ||||||
|  | +    done
 | ||||||
|  | +    $gmkimage $v -O x86_64-efi -c $TMP_DIR/mnt/EFI/BOOT/embedded_grub.cfg -o $TMP_DIR/mnt/EFI/BOOT/BOOTX64.efi -p "/EFI/BOOT" $grub_modules
 | ||||||
|  |      StopIfError "Error occurred during $gmkimage of BOOTX64.efi" | ||||||
|  |  } | ||||||
							
								
								
									
										94
									
								
								SOURCES/rear-bz1672938.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								SOURCES/rear-bz1672938.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,94 @@ | |||||||
|  | diff --git a/usr/share/rear/lib/layout-functions.sh b/usr/share/rear/lib/layout-functions.sh
 | ||||||
|  | index aa6fc938..4bc59131 100644
 | ||||||
|  | --- a/usr/share/rear/lib/layout-functions.sh
 | ||||||
|  | +++ b/usr/share/rear/lib/layout-functions.sh
 | ||||||
|  | @@ -478,6 +478,9 @@ get_sysfs_name() {
 | ||||||
|  |  ###     /dev/dm-3 -> /dev/mapper/system-tmp | ||||||
|  |  ###     /dev/dm-4 -> /dev/mapper/oralun | ||||||
|  |  ###     /dev/dm-5 -> /dev/mapper/oralunp1 | ||||||
|  | +###     /dev/sda -> /dev/sda
 | ||||||
|  | +###
 | ||||||
|  | +### Returns 0 on success, 1 if device is not existing
 | ||||||
|  |  get_device_name() { | ||||||
|  |      ### strip common prefixes | ||||||
|  |      local name=${1#/dev/} | ||||||
|  | @@ -485,47 +488,39 @@ get_device_name() {
 | ||||||
|  |   | ||||||
|  |      contains_visible_char "$name" || BugError "Empty string passed to get_device_name" | ||||||
|  |   | ||||||
|  | -    ### Translate dm-8 -> mapper/test
 | ||||||
|  | -    local device dev_number mapper_number
 | ||||||
|  | -    if [[ -d /sys/block/$name ]] ; then
 | ||||||
|  | +    if [[ "$name" =~ ^mapper/ ]]; then
 | ||||||
|  | +        echo "/dev/$name"
 | ||||||
|  | +        return 0
 | ||||||
|  | +    fi
 | ||||||
|  | +
 | ||||||
|  | +    if [[ -L "/dev/$name" ]] ; then
 | ||||||
|  | +        # Map vg/lv into dm-X, which will then be resolved later
 | ||||||
|  | +        name="$( basename $(readlink -f /dev/$name) )"
 | ||||||
|  | +    fi
 | ||||||
|  | +
 | ||||||
|  | +    if [[ "$name" =~ ^dm- ]] ; then
 | ||||||
|  | +        local device
 | ||||||
|  |          if [[ -r /sys/block/$name/dm/name ]] ; then | ||||||
|  |              ### recent kernels have a dm subfolder | ||||||
|  | -            echo "/dev/mapper/$( < /sys/block/$name/dm/name)";
 | ||||||
|  | -            return 0
 | ||||||
|  | +            device="$( < /sys/block/$name/dm/name )"
 | ||||||
|  |          else | ||||||
|  | -            ### loop over all block devices
 | ||||||
|  | -            dev_number=$( < /sys/block/$name/dev)
 | ||||||
|  | -            for device in /dev/mapper/* ; do
 | ||||||
|  | -                mapper_number=$(dmsetup info -c --noheadings -o major,minor ${device#/dev/mapper/} 2>/dev/null )
 | ||||||
|  | -                if [ "$dev_number" = "$mapper_number" ] ; then
 | ||||||
|  | -                    echo "$device"
 | ||||||
|  | -                    return 0
 | ||||||
|  | -                fi
 | ||||||
|  | -            done
 | ||||||
|  | +            local dev_number=$( < /sys/block/$name/dev)
 | ||||||
|  | +            if [[ ! -r "$TMP_DIR/dmsetup_info.txt" ]] ; then
 | ||||||
|  | +                dmsetup info --noheadings -c -o name,major,minor > "$TMP_DIR/dmsetup_info.txt"
 | ||||||
|  | +            fi
 | ||||||
|  | +            device="$( awk -F ':' "/$dev_number\$/ { print \$1 }" < "$TMP_DIR/dmsetup_info.txt" )"
 | ||||||
|  | +            [[ -n "$device" ]] || BugError "No device returned for major/minor $dev_number"
 | ||||||
|  |          fi | ||||||
|  | -    fi
 | ||||||
|  | -
 | ||||||
|  | -    ### Translate device name to mapper name. ex: vg/lv -> mapper/vg-lv
 | ||||||
|  | -    if [[ "$name" =~ ^mapper/ ]]; then
 | ||||||
|  | -        echo "/dev/$name"
 | ||||||
|  | +        echo "/dev/mapper/$device"
 | ||||||
|  |          return 0 | ||||||
|  |      fi | ||||||
|  | -    if my_dm=`readlink /dev/$name`; then
 | ||||||
|  | -       for mapper_dev in /dev/mapper/*; do
 | ||||||
|  | -           if mapper_dm=`readlink $mapper_dev`; then
 | ||||||
|  | -              if [ "$my_dm" = "$mapper_dm" ]; then
 | ||||||
|  | -                 echo $mapper_dev
 | ||||||
|  | -                 return 0
 | ||||||
|  | -              fi
 | ||||||
|  | -           fi
 | ||||||
|  | -       done
 | ||||||
|  | -    fi
 | ||||||
|  |   | ||||||
|  |      ### handle cciss sysfs naming | ||||||
|  |      name=${name//!//} | ||||||
|  |   | ||||||
|  |      ### just return the possibly nonexisting name | ||||||
|  |      echo "/dev/$name" | ||||||
|  | +    [[ -r "/dev/$name" ]] && return 0
 | ||||||
|  |      return 1 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | diff --git a/usr/share/rear/rescue/GNU/Linux/270_fc_transport_info.sh b/usr/share/rear/rescue/GNU/Linux/270_fc_transport_info.sh
 | ||||||
|  | index 0de4f60b..64276dfe 100644
 | ||||||
|  | --- a/usr/share/rear/rescue/GNU/Linux/270_fc_transport_info.sh
 | ||||||
|  | +++ b/usr/share/rear/rescue/GNU/Linux/270_fc_transport_info.sh
 | ||||||
|  | @@ -1,3 +1,6 @@
 | ||||||
|  | +# don't collect this anymore, this can be very slow
 | ||||||
|  | +return 0
 | ||||||
|  | +
 | ||||||
|  |  # collect output from production SAN disks | ||||||
|  |   | ||||||
|  |  find /sys/class/fc_transport -follow -maxdepth 6 \( -name model -o -name vendor -o -name rev -name state -o -name model_name -o -name size -o -name node_name \) 2>/dev/null| egrep -v 'driver|rport|power|drivers|devices' | xargs grep '.' > $VAR_DIR/recovery/fc_transport.info  >&2 | ||||||
							
								
								
									
										40
									
								
								SOURCES/rear-bz1685166.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								SOURCES/rear-bz1685166.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | |||||||
|  | diff --git a/usr/share/rear/rescue/GNU/Linux/310_network_devices.sh b/usr/share/rear/rescue/GNU/Linux/310_network_devices.sh
 | ||||||
|  | index 6b3194bd..57e8777a 100644
 | ||||||
|  | --- a/usr/share/rear/rescue/GNU/Linux/310_network_devices.sh
 | ||||||
|  | +++ b/usr/share/rear/rescue/GNU/Linux/310_network_devices.sh
 | ||||||
|  | @@ -562,7 +562,12 @@ function handle_team () {
 | ||||||
|  |      local network_interface=$1 | ||||||
|  |      local sysfspath=/sys/class/net/$network_interface | ||||||
|  |   | ||||||
|  | -    if [ "$( ethtool -i $network_interface | awk '$1 == "driver:" { print $2 }' )" != "team" ] ; then
 | ||||||
|  | +    if has_binary ethtool ; then
 | ||||||
|  | +        if [ "$( ethtool -i $network_interface | awk '$1 == "driver:" { print $2 }' )" != "team" ] ; then
 | ||||||
|  | +            return $rc_error
 | ||||||
|  | +        fi
 | ||||||
|  | +    else
 | ||||||
|  | +        LogPrintError "Couldn't determine if network interface '$network_interface' is a Team, skipping."
 | ||||||
|  |          return $rc_error | ||||||
|  |      fi | ||||||
|  |   | ||||||
|  | @@ -854,10 +859,17 @@ function handle_physdev () {
 | ||||||
|  |   | ||||||
|  |      DebugPrint "$network_interface is a physical device" | ||||||
|  |   | ||||||
|  | -    if [ -e $sysfspath/bonding_slave/perm_hwaddr ] ; then
 | ||||||
|  | -        mac="$( cat $sysfspath/bonding_slave/perm_hwaddr )"
 | ||||||
|  | -    else
 | ||||||
|  | -        mac="$( cat $sysfspath/address )" || BugError "Could not read a MAC address for '$network_interface'."
 | ||||||
|  | +    local mac=""
 | ||||||
|  | +
 | ||||||
|  | +    if has_binary ethtool ; then
 | ||||||
|  | +        mac="$( ethtool -P $network_interface 2>/dev/null | awk '{ print $NF }' )"
 | ||||||
|  | +    fi
 | ||||||
|  | +    if [ -z "$mac" ] ; then
 | ||||||
|  | +        if [ -e $sysfspath/bonding_slave/perm_hwaddr ] ; then
 | ||||||
|  | +            mac="$( cat $sysfspath/bonding_slave/perm_hwaddr )"
 | ||||||
|  | +        else
 | ||||||
|  | +            mac="$( cat $sysfspath/address )" || BugError "Could not read a MAC address for '$network_interface'."
 | ||||||
|  | +        fi
 | ||||||
|  |      fi | ||||||
|  |      # Skip fake interfaces without MAC address | ||||||
|  |      [ "$mac" != "00:00:00:00:00:00" ] || return $rc_error | ||||||
							
								
								
									
										33
									
								
								SOURCES/rear-bz1692575.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								SOURCES/rear-bz1692575.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | |||||||
|  | diff -up rear-2.4/usr/share/rear/conf/GNU/Linux.conf.empty rear-2.4/usr/share/rear/conf/GNU/Linux.conf
 | ||||||
|  | --- rear-2.4/usr/share/rear/conf/GNU/Linux.conf.empty	2019-09-10 09:45:50.381285069 +0200
 | ||||||
|  | +++ rear-2.4/usr/share/rear/conf/GNU/Linux.conf	2019-09-10 09:45:50.421284309 +0200
 | ||||||
|  | @@ -276,6 +276,6 @@ COPY_AS_IS_EXCLUDE=( "${COPY_AS_IS_EXCLU
 | ||||||
|  |  # some stuff for the Linux command line | ||||||
|  |  KERNEL_CMDLINE="$KERNEL_CMDLINE selinux=0" | ||||||
|  |  # common users and groups | ||||||
|  | -CLONE_USERS=( "${CLONE_USERS[@]:-}" daemon rpc usbmuxd usbmux vcsa nobody dbus )
 | ||||||
|  | -CLONE_GROUPS=( "${CLONE_GROUPS[@]:-}" tty usbmuxd usbmux fuse kvm oinstall dbus )
 | ||||||
|  | +CLONE_USERS+=( daemon rpc usbmuxd usbmux vcsa nobody dbus )
 | ||||||
|  | +CLONE_GROUPS+=( tty usbmuxd usbmux fuse kvm oinstall dbus )
 | ||||||
|  |   | ||||||
|  | diff -up rear-2.4/usr/share/rear/rescue/default/900_clone_users_and_groups.sh.empty rear-2.4/usr/share/rear/rescue/default/900_clone_users_and_groups.sh
 | ||||||
|  | --- rear-2.4/usr/share/rear/rescue/default/900_clone_users_and_groups.sh.empty	2018-06-21 10:40:53.000000000 +0200
 | ||||||
|  | +++ rear-2.4/usr/share/rear/rescue/default/900_clone_users_and_groups.sh	2019-09-10 09:45:50.421284309 +0200
 | ||||||
|  | @@ -40,6 +40,8 @@ local group=""
 | ||||||
|  |  # because it should succeed when there is any non-empty array member, not necessarily the first one: | ||||||
|  |  test "${CLONE_USERS[*]}" && Log "Cloning users: ${CLONE_USERS[@]}" | ||||||
|  |  for user in "${CLONE_USERS[@]}" ; do | ||||||
|  | +    # Skip empty user values, cf. https://github.com/rear/rear/issues/2220
 | ||||||
|  | +    test $user || continue
 | ||||||
|  |      # Skip if the user exists already in the ReaR recovery system: | ||||||
|  |      grep -q "^$user:" $ROOTFS_DIR/etc/passwd && continue | ||||||
|  |      # Skip if the user does not exist in the current system: | ||||||
|  | @@ -78,6 +80,8 @@ done
 | ||||||
|  |  # because it should succeed when there is any non-empty array member, not necessarily the first one: | ||||||
|  |  test "${CLONE_GROUPS[*]}" && Log "Cloning groups: ${CLONE_GROUPS[@]}" | ||||||
|  |  for group in "${CLONE_GROUPS[@]}" ; do | ||||||
|  | +    # Skip empty group values, cf. https://github.com/rear/rear/issues/2220
 | ||||||
|  | +    test $group || continue
 | ||||||
|  |      # Skip if the group exists already in the ReaR recovery system: | ||||||
|  |      grep -q "^$group:" $ROOTFS_DIR/etc/group && continue | ||||||
|  |      # Skip if the group does not exist in the current system: | ||||||
							
								
								
									
										113
									
								
								SOURCES/rear-bz1693608.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								SOURCES/rear-bz1693608.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,113 @@ | |||||||
|  | diff -up rear-2.4/usr/share/rear/build/default/980_verify_rootfs.sh.build rear-2.4/usr/share/rear/build/default/980_verify_rootfs.sh
 | ||||||
|  | --- rear-2.4/usr/share/rear/build/default/980_verify_rootfs.sh.build	2019-09-10 09:31:05.971102125 +0200
 | ||||||
|  | +++ rear-2.4/usr/share/rear/build/default/980_verify_rootfs.sh	2019-09-10 09:31:06.002101535 +0200
 | ||||||
|  | @@ -3,6 +3,33 @@
 | ||||||
|  |  # i.e. test that the ReaR recovery system will be usable | ||||||
|  |  # to avoid issues like https://github.com/rear/rear/issues/1494 | ||||||
|  |   | ||||||
|  | +if test "$KEEP_BUILD_DIR" = "errors"; then
 | ||||||
|  | +    local keep_build_dir_on_errors=1
 | ||||||
|  | +else
 | ||||||
|  | +    # KEEP_BUILD_DIR does not say to keep it on errors
 | ||||||
|  | +    # - effective value depends on whether we are running interactively
 | ||||||
|  | +    if tty -s ; then
 | ||||||
|  | +        local keep_build_dir_on_errors=1
 | ||||||
|  | +    else
 | ||||||
|  | +        local keep_build_dir_on_errors=0
 | ||||||
|  | +    fi
 | ||||||
|  | +fi
 | ||||||
|  | +
 | ||||||
|  | +function keep_build_dir() {
 | ||||||
|  | +    if ! is_true "$KEEP_BUILD_DIR" && ! is_false "$KEEP_BUILD_DIR"; then
 | ||||||
|  | +        # is either empty or equal to "errors" ... or some garbage value
 | ||||||
|  | +        local orig_keep_build_dir="$KEEP_BUILD_DIR"
 | ||||||
|  | +        KEEP_BUILD_DIR="${keep_build_dir_on_errors}"
 | ||||||
|  | +    fi
 | ||||||
|  | +    if is_true "$KEEP_BUILD_DIR" ; then
 | ||||||
|  | +        LogPrintError "Build area kept for investigation in $BUILD_DIR, remove it when not needed"
 | ||||||
|  | +    elif ! is_false "$orig_keep_build_dir" ; then
 | ||||||
|  | +        # if users disabled preserving the build dir explicitly, let's not bother them with messages
 | ||||||
|  | +        LogPrintError "Build area $BUILD_DIR will be removed"
 | ||||||
|  | +        LogPrintError "To preserve it for investigation set KEEP_BUILD_DIR=errors or run ReaR with -d"
 | ||||||
|  | +    fi
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  |  # In case the filesystem that contains the ROOTFS_DIR is mounted 'noexec' we cannot do the 'chroot' tests. | ||||||
|  |  # The filesystem_name function in linux-functions.sh returns the mountpoint (not a filesystem name like 'ext4'): | ||||||
|  |  local rootfs_dir_fs_mountpoint=$( filesystem_name $ROOTFS_DIR ) | ||||||
|  | @@ -16,7 +43,7 @@ Log "Testing that $ROOTFS_DIR contains a
 | ||||||
|  |   | ||||||
|  |  # The bash test ensures that we have a working bash in the ReaR recovery system: | ||||||
|  |  if ! chroot $ROOTFS_DIR /bin/bash -c true ; then | ||||||
|  | -    KEEP_BUILD_DIR=1
 | ||||||
|  | +    keep_build_dir
 | ||||||
|  |      BugError "ReaR recovery system in '$ROOTFS_DIR' is broken: 'bash -c true' failed" | ||||||
|  |  fi | ||||||
|  |   | ||||||
|  | @@ -25,7 +52,7 @@ fi
 | ||||||
|  |  # First test is 'ldd /bin/bash' to ensure 'ldd' works: | ||||||
|  |  Log "Testing 'ldd /bin/bash' to ensure 'ldd' works for the subsequent 'ldd' tests" | ||||||
|  |  if ! chroot $ROOTFS_DIR /bin/ldd /bin/bash 1>&2 ; then | ||||||
|  | -    KEEP_BUILD_DIR=1
 | ||||||
|  | +    keep_build_dir
 | ||||||
|  |      BugError "ReaR recovery system in '$ROOTFS_DIR' is broken: 'ldd /bin/bash' failed" | ||||||
|  |  fi | ||||||
|  |  # Now test each binary (except links) with ldd and look for 'not found' libraries. | ||||||
|  | @@ -83,7 +110,7 @@ test $old_LD_LIBRARY_PATH && export LD_L
 | ||||||
|  |  # Report binaries with 'not found' shared object dependencies: | ||||||
|  |  if contains_visible_char "$broken_binaries" ; then | ||||||
|  |      LogPrintError "There are binaries or libraries in the ReaR recovery system that need additional libraries" | ||||||
|  | -    KEEP_BUILD_DIR=1
 | ||||||
|  | +    keep_build_dir
 | ||||||
|  |      local fatal_missing_library="" | ||||||
|  |      local ldd_output="" | ||||||
|  |      for binary in $broken_binaries ; do | ||||||
|  | @@ -113,9 +140,10 @@ if contains_visible_char "$broken_binari
 | ||||||
|  |          # Show only the missing libraries to the user to not flood his screen with tons of other ldd output lines: | ||||||
|  |          PrintError "$( grep 'not found' <<<"$ldd_output" )" | ||||||
|  |      done | ||||||
|  | +    LogPrintError "ReaR recovery system in '$ROOTFS_DIR' needs additional libraries, check $RUNTIME_LOGFILE for details"
 | ||||||
|  | +    is_true "$fatal_missing_library" && keep_build_dir
 | ||||||
|  |      # Usually it should be no BugError when there are libraries missing for particular binaries because probably | ||||||
|  |      # the reason is that the user added only the plain binaries with COPY_AS_IS (instead of using REQUIRED_PROGS): | ||||||
|  |      is_true "$fatal_missing_library" && Error "ReaR recovery system in '$ROOTFS_DIR' not usable" | ||||||
|  | -    LogPrintError "ReaR recovery system in '$ROOTFS_DIR' needs additional libraries, check $RUNTIME_LOGFILE for details"
 | ||||||
|  |  fi | ||||||
|  |   | ||||||
|  | diff -up rear-2.4/usr/share/rear/conf/default.conf.build rear-2.4/usr/share/rear/conf/default.conf
 | ||||||
|  | --- rear-2.4/usr/share/rear/conf/default.conf.build	2019-09-10 09:31:05.996101649 +0200
 | ||||||
|  | +++ rear-2.4/usr/share/rear/conf/default.conf	2019-09-10 09:31:06.002101535 +0200
 | ||||||
|  | @@ -125,9 +125,19 @@ OS_VERSION=none
 | ||||||
|  |  # supported values that could make it work even for your system. | ||||||
|  |  # See the SetOSVendorAndVersion function in the config-functions.sh script. | ||||||
|  |   | ||||||
|  | -# Keep the build area after we are done (BOOL).
 | ||||||
|  | +# Keep the build area after we are done (ternary).
 | ||||||
|  |  # Useful to inspect the ReaR recovery system content in $TMPDIR/rear.XXXXXXXXXXXXXXX/rootfs/ | ||||||
|  | -# directly without the need to extract it from the initramfs/initrd in the ISO image:
 | ||||||
|  | +# directly without the need to extract it from the initramfs/initrd in the ISO image.
 | ||||||
|  | +# Set to "y", "Yes", etc. to always keep the build area, to "n", "No", etc. to never keep it.
 | ||||||
|  | +# KEEP_BUILD_DIR is automatically set to true in debug mode (-d) and in debugscript mode (-D).
 | ||||||
|  | +# In addition to true (any value that is recognized as 'yes' by the is_true function)
 | ||||||
|  | +# and false (any value that is recognized as 'no' by the is_false function) it can be set
 | ||||||
|  | +# to several special values:
 | ||||||
|  | +# - "errors" to obtain the old behaviour where KEEP_BUILD_DIR was always set
 | ||||||
|  | +# to true to keep the build area when errors in the ReaR recovery system were detected.
 | ||||||
|  | +# - empty (KEEP_BUILD_DIR="") which means that the build area will be kept on errors
 | ||||||
|  | +# if running interactively (in a terminal) and not otherwise (to avoid cluttering
 | ||||||
|  | +# /tmp by cron or other automated jobs in case of errors).
 | ||||||
|  |  KEEP_BUILD_DIR="" | ||||||
|  |   | ||||||
|  |  # No default workflows. This variable is filled in where the workflows are defined | ||||||
|  | diff -up rear-2.4/usr/share/rear/lib/framework-functions.sh.build rear-2.4/usr/share/rear/lib/framework-functions.sh
 | ||||||
|  | --- rear-2.4/usr/share/rear/lib/framework-functions.sh.build	2018-06-21 10:40:53.000000000 +0200
 | ||||||
|  | +++ rear-2.4/usr/share/rear/lib/framework-functions.sh	2019-09-10 09:31:06.002101535 +0200
 | ||||||
|  | @@ -106,7 +106,7 @@ function SourceStage () {
 | ||||||
|  |  function cleanup_build_area_and_end_program () { | ||||||
|  |      # Cleanup build area | ||||||
|  |      Log "Finished in $((SECONDS-STARTTIME)) seconds" | ||||||
|  | -    if test "$KEEP_BUILD_DIR" ; then
 | ||||||
|  | +    if is_true "$KEEP_BUILD_DIR" ; then
 | ||||||
|  |          LogPrint "You should also rm -Rf $BUILD_DIR" | ||||||
|  |      else | ||||||
|  |          Log "Removing build area $BUILD_DIR" | ||||||
							
								
								
									
										12
									
								
								SOURCES/rear-bz1700807.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								SOURCES/rear-bz1700807.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | diff -up rear-2.4/usr/share/rear/conf/default.conf.nbu rear-2.4/usr/share/rear/conf/default.conf
 | ||||||
|  | --- rear-2.4/usr/share/rear/conf/default.conf.nbu	2019-09-10 09:37:56.619290929 +0200
 | ||||||
|  | +++ rear-2.4/usr/share/rear/conf/default.conf	2019-09-10 09:37:56.621290891 +0200
 | ||||||
|  | @@ -1480,7 +1480,7 @@ OBDR_BLOCKSIZE=2048
 | ||||||
|  |  # | ||||||
|  |  COPY_AS_IS_NBU=( /usr/openv/bin/vnetd /usr/openv/bin/vopied /usr/openv/lib /usr/openv/netbackup /usr/openv/var/auth/[mn]*.txt ) | ||||||
|  |  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 ) | ||||||
|  | -NBU_LD_LIBRARY_PATH="/usr/openv/lib"
 | ||||||
|  | +NBU_LD_LIBRARY_PATH="/usr/openv/lib:/usr/openv/netbackup/sec/at/lib/"
 | ||||||
|  |  PROGS_NBU=( ) | ||||||
|  |   | ||||||
|  |  ## | ||||||
							
								
								
									
										87
									
								
								SOURCES/rear-bz1711123.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								SOURCES/rear-bz1711123.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,87 @@ | |||||||
|  | diff --git a/usr/share/rear/layout/save/GNU/Linux/230_filesystem_layout.sh b/usr/share/rear/layout/save/GNU/Linux/230_filesystem_layout.sh
 | ||||||
|  | index 2fc8ccd3..60306718 100644
 | ||||||
|  | --- a/usr/share/rear/layout/save/GNU/Linux/230_filesystem_layout.sh
 | ||||||
|  | +++ b/usr/share/rear/layout/save/GNU/Linux/230_filesystem_layout.sh
 | ||||||
|  | @@ -50,13 +50,28 @@ fi
 | ||||||
|  |  # so that in particular what is mounted at '/' is output before other stuff. | ||||||
|  |  read_filesystems_command="$read_filesystems_command | sort -t ' ' -k 1,1 -u" | ||||||
|  |   | ||||||
|  | -# docker daemon mounts file systems for its docker containers
 | ||||||
|  | -# see also https://docs.docker.com/storage/storagedriver/device-mapper-driver/#configure-direct-lvm-mode-for-production
 | ||||||
|  | -# As it is for container usage only we do not to backup these up or recreate as this disk device is completely under
 | ||||||
|  | -# control by docker itself (even the recreation of it incl, the creation of the volume group). Usually this is
 | ||||||
|  | -# done via a kind of cookbook (Chef, puppet or ansible)
 | ||||||
|  | +# The Docker daemon mounts file systems for its Docker containers, see also
 | ||||||
|  | +# https://docs.docker.com/storage/storagedriver/device-mapper-driver/#configure-direct-lvm-mode-for-production
 | ||||||
|  | +# As it is for container usage only we do not to backup these up or recreate as this disk device is completely
 | ||||||
|  | +# under control by Docker itself (even the recreation of it incl, the creation of the volume group).
 | ||||||
|  | +# Usually this is done via a kind of cookbook (Chef, puppet or ansible).
 | ||||||
|  |  docker_is_running="" | ||||||
|  | -service docker status >/dev/null 2>&1 && docker_is_running="yes"
 | ||||||
|  | +docker_root_dir=""
 | ||||||
|  | +if service docker status &>/dev/null ; then
 | ||||||
|  | +    docker_is_running="yes"
 | ||||||
|  | +    # When the Docker daemon/service is running, try to get its 'Docker Root Dir':
 | ||||||
|  | +    # Kill 'docker info' with SIGTERM after 5 seconds and with SIGKILL after additional 2 seconds
 | ||||||
|  | +    # because there are too many crippled Docker installations, cf. https://github.com/rear/rear/pull/2021
 | ||||||
|  | +    docker_root_dir=$( timeout -k 2s 5s docker info | grep 'Docker Root Dir' | awk '{print $4}' )
 | ||||||
|  | +    # Things may go wrong in the 'Docker specific exclude part' below
 | ||||||
|  | +    # when Docker is used but its 'Docker Root Dir' cannot be determined
 | ||||||
|  | +    # cf. https://github.com/rear/rear/issues/1989
 | ||||||
|  | +    if test "$docker_root_dir" ; then
 | ||||||
|  | +        LogPrint "Docker is running, skipping filesystems mounted below Docker Root Dir $docker_root_dir"
 | ||||||
|  | +    else
 | ||||||
|  | +        LogPrintError "Cannot determine Docker Root Dir - things may go wrong - check $DISKLAYOUT_FILE"
 | ||||||
|  | +    fi
 | ||||||
|  | +fi
 | ||||||
|  |   | ||||||
|  |  # Begin writing output to DISKLAYOUT_FILE: | ||||||
|  |  ( | ||||||
|  | @@ -64,9 +79,10 @@ service docker status >/dev/null 2>&1 && docker_is_running="yes"
 | ||||||
|  |      echo "# Format: fs <device> <mountpoint> <fstype> [uuid=<uuid>] [label=<label>] [<attributes>]" | ||||||
|  |      # Read the output of the read_filesystems_command: | ||||||
|  |      while read device mountpoint fstype options junk ; do | ||||||
|  | +        Log "Processing filesystem '$fstype' on '$device' mounted at '$mountpoint'"
 | ||||||
|  |          # Empty device or mountpoint or fstype may may indicate an error. In this case be verbose and inform the user: | ||||||
|  |          if test -z "$device" -o -z "$mountpoint" -o -z "$fstype" ; then | ||||||
|  | -            LogPrint "Empty device='$device' or mountpoint='$mountpoint' or fstype='$fstype', skipping saving filesystem layout for it."
 | ||||||
|  | +            LogPrintError "Empty device='$device' or mountpoint='$mountpoint' or fstype='$fstype', skipping saving filesystem layout for it."
 | ||||||
|  |              continue | ||||||
|  |          fi | ||||||
|  |          # FIXME: I (jsmeix@suse.de) have no idea what the reason for the following is. | ||||||
|  | @@ -88,15 +104,18 @@ service docker status >/dev/null 2>&1 && docker_is_running="yes"
 | ||||||
|  |              Log "$device is CD/DVD type device [fstype=$fstype], skipping." | ||||||
|  |              continue | ||||||
|  |          fi | ||||||
|  | -        # docker specific exclude part
 | ||||||
|  | +        # Docker specific exclude part:
 | ||||||
|  |          if is_true $docker_is_running ; then | ||||||
|  | -            # docker daemon/service is running
 | ||||||
|  | -            docker_root_dir=$( docker info 2>/dev/null | grep 'Docker Root Dir' | awk '{print $4}' )
 | ||||||
|  | -            # If $docker_root_dir is in the beginning of the $mountpoint string then FS is under docker control
 | ||||||
|  | -            # and we better exclude from saving the layout,
 | ||||||
|  | -            # see https://github.com/rear/rear/issues/1749
 | ||||||
|  | -            Log "$device is mounted below $docker_root_dir (mount point $mountpoint is under docker control), skipping."
 | ||||||
|  | -            echo "$mountpoint" | grep -q "^$docker_root_dir" && continue
 | ||||||
|  | +            # If docker_root_dir is the beginning of the mountpoint string then the filesystem is under Docker control
 | ||||||
|  | +            # and we better exclude it from saving the layout, see https://github.com/rear/rear/issues/1749
 | ||||||
|  | +            # but ensure docker_root_dir is not empty (otherwise any mountpoint string matches "^" which
 | ||||||
|  | +            # would skip all mountpoints), see https://github.com/rear/rear/issues/1989#issuecomment-456054278
 | ||||||
|  | +            if test "$docker_root_dir" ; then
 | ||||||
|  | +                if echo "$mountpoint" | grep -q "^$docker_root_dir" ; then
 | ||||||
|  | +                    Log "Filesystem $fstype on $device mounted at $mountpoint is below Docker Root Dir $docker_root_dir, skipping."
 | ||||||
|  | +                    continue
 | ||||||
|  | +                fi
 | ||||||
|  | +            fi
 | ||||||
|  |          fi | ||||||
|  |          # Replace a symbolic link /dev/disk/by-uuid/a1b2c3 -> ../../sdXn | ||||||
|  |          # by the fully canonicalized target of the link e.g. /dev/sdXn | ||||||
|  | @@ -232,7 +251,7 @@ service docker status >/dev/null 2>&1 && docker_is_running="yes"
 | ||||||
|  |              test -z "$btrfs_default_subvolume_path" && btrfs_default_subvolume_path="/" | ||||||
|  |              # Empty btrfs_default_subvolume_ID may may indicate an error. In this case be verbose and inform the user: | ||||||
|  |              if test -z "$btrfs_default_subvolume_ID" ; then | ||||||
|  | -                LogPrint "Empty btrfs_default_subvolume_ID, no btrfs default subvolume stored for $btrfs_device at $btrfs_mountpoint"
 | ||||||
|  | +                LogPrintError "Empty btrfs_default_subvolume_ID, no btrfs default subvolume stored for $btrfs_device at $btrfs_mountpoint"
 | ||||||
|  |              else | ||||||
|  |                  echo "btrfsdefaultsubvol $btrfs_device $btrfs_mountpoint $btrfs_default_subvolume_ID $btrfs_default_subvolume_path" | ||||||
|  |              fi | ||||||
							
								
								
									
										17
									
								
								SOURCES/rear-bz1726982.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								SOURCES/rear-bz1726982.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | diff --git a/usr/share/rear/restore/BACULA/default/400_restore_backup.sh b/usr/share/rear/restore/BACULA/default/400_restore_backup.sh
 | ||||||
|  | index eac4d275..d21af71c 100644
 | ||||||
|  | --- a/usr/share/rear/restore/BACULA/default/400_restore_backup.sh
 | ||||||
|  | +++ b/usr/share/rear/restore/BACULA/default/400_restore_backup.sh
 | ||||||
|  | @@ -110,7 +110,11 @@ WARNING: The new root is mounted under '$TARGET_FS_ROOT'.
 | ||||||
|  |  Press ENTER to start bconsole" | ||||||
|  |      read | ||||||
|  |   | ||||||
|  | -    bconsole
 | ||||||
|  | +    if bconsole 0<&6 1>&7 2>&8 ; then
 | ||||||
|  | +        Log "bconsole finished with zero exit code"
 | ||||||
|  | +    else
 | ||||||
|  | +        Log "bconsole finished with non-zero exit code $?"
 | ||||||
|  | +    fi
 | ||||||
|  |   | ||||||
|  |      LogPrint " | ||||||
|  |  Please verify that the backup has been restored correctly to '$TARGET_FS_ROOT' | ||||||
							
								
								
									
										119
									
								
								SOURCES/rear-bz1732328.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								SOURCES/rear-bz1732328.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,119 @@ | |||||||
|  | diff --git a/usr/share/rear/layout/save/GNU/Linux/220_lvm_layout.sh b/usr/share/rear/layout/save/GNU/Linux/220_lvm_layout.sh
 | ||||||
|  | index e43ff896..a9730435 100644
 | ||||||
|  | --- a/usr/share/rear/layout/save/GNU/Linux/220_lvm_layout.sh
 | ||||||
|  | +++ b/usr/share/rear/layout/save/GNU/Linux/220_lvm_layout.sh
 | ||||||
|  | @@ -53,6 +53,7 @@ Log "Saving LVM layout."
 | ||||||
|  |      done | ||||||
|  |   | ||||||
|  |      header_printed=0 | ||||||
|  | +    already_processed_lvs=""
 | ||||||
|  |   | ||||||
|  |      ## Get all logical volumes | ||||||
|  |      # format: lvmvol <volume_group> <name> <size(bytes)> <layout> [key:value ...] | ||||||
|  | @@ -61,7 +62,7 @@ Log "Saving LVM layout."
 | ||||||
|  |   | ||||||
|  |      if lvm lvs -o lv_layout >/dev/null 2>&1; then | ||||||
|  |   | ||||||
|  | -        lvm 8>&- 7>&- lvs --separator=":" --noheadings --units b --nosuffix -o origin,lv_name,vg_name,lv_size,lv_layout,pool_lv,chunk_size,stripes,stripe_size | while read line ; do
 | ||||||
|  | +        lvm 8>&- 7>&- lvs --separator=":" --noheadings --units b --nosuffix -o origin,lv_name,vg_name,lv_size,lv_layout,pool_lv,chunk_size,stripes,stripe_size,seg_size | while read line ; do
 | ||||||
|  |   | ||||||
|  |              if [ $header_printed -eq 0 ] ; then | ||||||
|  |                  echo "# Format for LVM LVs" | ||||||
|  | @@ -72,7 +73,7 @@ Log "Saving LVM layout."
 | ||||||
|  |              origin="$(echo "$line" | awk -F ':' '{ print $1 }')" | ||||||
|  |              # Skip snapshots (useless) or caches (dont know how to handle that) | ||||||
|  |              if [ -n "$origin" ] ; then | ||||||
|  | -                echo "# Skipped snapshot of cache information '$line'"
 | ||||||
|  | +                echo "# Skipped snapshot or cache information '$line'"
 | ||||||
|  |                  continue | ||||||
|  |              fi | ||||||
|  |   | ||||||
|  | @@ -84,25 +85,45 @@ Log "Saving LVM layout."
 | ||||||
|  |              chunksize="$(echo "$line" | awk -F ':' '{ print $7 }')" | ||||||
|  |              stripes="$(echo "$line" | awk -F ':' '{ print $8 }')" | ||||||
|  |              stripesize="$(echo "$line" | awk -F ':' '{ print $9 }')" | ||||||
|  | +            segmentsize="$(echo "$line" | awk -F ':' '{ print $10 }')"
 | ||||||
|  |   | ||||||
|  |              kval="" | ||||||
|  | +            infokval=""
 | ||||||
|  |              [ -z "$thinpool" ] || kval="${kval:+$kval }thinpool:$thinpool" | ||||||
|  |              [ $chunksize -eq 0 ] || kval="${kval:+$kval }chunksize:${chunksize}b" | ||||||
|  |              [ $stripesize -eq 0 ] || kval="${kval:+$kval }stripesize:${stripesize}b" | ||||||
|  | +            [ $segmentsize -eq $size ] || infokval="${infokval:+$infokval }segmentsize:${segmentsize}b"
 | ||||||
|  |              if [[ ,$layout, == *,mirror,* ]] ; then | ||||||
|  |                  kval="${kval:+$kval }mirrors:$(($stripes - 1))" | ||||||
|  |              elif [[ ,$layout, == *,striped,* ]] ; then | ||||||
|  |                  kval="${kval:+$kval }stripes:$stripes" | ||||||
|  |              fi | ||||||
|  |   | ||||||
|  | -            echo "lvmvol /dev/$vg $lv ${size}b $layout $kval"
 | ||||||
|  | +            if [[ " $already_processed_lvs " == *\ $vg/$lv\ * ]] ; then
 | ||||||
|  | +                # The LV has multiple segments; the create_lvmvol() function in
 | ||||||
|  | +                # 110_include_lvm_code.sh is not able to recreate this, but
 | ||||||
|  | +                # keep the information for the administrator anyway.
 | ||||||
|  | +                echo "#lvmvol /dev/$vg $lv ${size}b $layout $kval"
 | ||||||
|  | +                if [ -n "$infokval" ] ; then
 | ||||||
|  | +                    echo "# extra parameters for the line above not taken into account when restoring using 'lvcreate': $infokval"
 | ||||||
|  | +                fi
 | ||||||
|  | +            else
 | ||||||
|  | +                if [ $segmentsize -ne $size ] ; then
 | ||||||
|  | +                    echo "# WARNING: Volume $vg/$lv has multiple segments. Restoring it in Migration Mode using 'lvcreate' won't preserve segments and properties of the other segments as well!"
 | ||||||
|  | +                fi
 | ||||||
|  | +                echo "lvmvol /dev/$vg $lv ${size}b $layout $kval"
 | ||||||
|  | +                if [ -n "$infokval" ] ; then
 | ||||||
|  | +                    echo "# extra parameters for the line above not taken into account when restoring using 'lvcreate': $infokval"
 | ||||||
|  | +                fi
 | ||||||
|  | +                already_processed_lvs="${already_processed_lvs:+$already_processed_lvs }$vg/$lv"
 | ||||||
|  | +            fi
 | ||||||
|  |          done | ||||||
|  |   | ||||||
|  |      else | ||||||
|  |          # Compatibility with older LVM versions (e.g. <= 2.02.98) | ||||||
|  |          # No support for 'lv_layout', too bad, do our best! | ||||||
|  |   | ||||||
|  | -        lvm 8>&- 7>&- lvs --separator=":" --noheadings --units b --nosuffix -o origin,lv_name,vg_name,lv_size,modules,pool_lv,chunk_size,stripes,stripe_size | while read line ; do
 | ||||||
|  | +        lvm 8>&- 7>&- lvs --separator=":" --noheadings --units b --nosuffix -o origin,lv_name,vg_name,lv_size,modules,pool_lv,chunk_size,stripes,stripe_size,seg_size | while read line ; do
 | ||||||
|  |   | ||||||
|  |              if [ $header_printed -eq 0 ] ; then | ||||||
|  |                  echo "# Format for LVM LVs" | ||||||
|  | @@ -125,11 +146,14 @@ Log "Saving LVM layout."
 | ||||||
|  |              chunksize="$(echo "$line" | awk -F ':' '{ print $7 }')" | ||||||
|  |              stripes="$(echo "$line" | awk -F ':' '{ print $8 }')" | ||||||
|  |              stripesize="$(echo "$line" | awk -F ':' '{ print $9 }')" | ||||||
|  | +            segmentsize="$(echo "$line" | awk -F ':' '{ print $10 }')"
 | ||||||
|  |   | ||||||
|  |              kval="" | ||||||
|  | +            infokval=""
 | ||||||
|  |              [ -z "$thinpool" ] || kval="${kval:+$kval }thinpool:$thinpool" | ||||||
|  |              [ $chunksize -eq 0 ] || kval="${kval:+$kval }chunksize:${chunksize}b" | ||||||
|  |              [ $stripesize -eq 0 ] || kval="${kval:+$kval }stripesize:${stripesize}b" | ||||||
|  | +            [ $segmentsize -eq $size ] || infokval="${infokval:+$infokval }segmentsize:${segmentsize}b"
 | ||||||
|  |              if [[ "$modules" == "" ]] ; then | ||||||
|  |                  layout="linear" | ||||||
|  |                  [ $stripes -eq 0 ] || kval="${kval:+$kval }stripes:$stripes" | ||||||
|  | @@ -148,7 +172,24 @@ Log "Saving LVM layout."
 | ||||||
|  |                  kval="${kval:+$kval }stripes:$stripes" | ||||||
|  |              fi | ||||||
|  |   | ||||||
|  | -            echo "lvmvol /dev/$vg $lv ${size}b $layout $kval"
 | ||||||
|  | +            if [[ " $already_processed_lvs " == *\ $vg/$lv\ * ]]; then
 | ||||||
|  | +                # The LV has multiple segments; the create_lvmvol() function in
 | ||||||
|  | +                # 110_include_lvm_code.sh is not able to recreate this, but
 | ||||||
|  | +                # keep the information for the administrator anyway.
 | ||||||
|  | +                echo "#lvmvol /dev/$vg $lv ${size}b $layout $kval"
 | ||||||
|  | +                if [ -n "$infokval" ] ; then
 | ||||||
|  | +                    echo "# extra parameters for the line above not taken into account when restoring using 'lvcreate': $infokval"
 | ||||||
|  | +                fi
 | ||||||
|  | +            else
 | ||||||
|  | +                if [ $segmentsize -ne $size ] ; then
 | ||||||
|  | +                    echo "# WARNING: Volume $vg/$lv has multiple segments. Restoring it in Migration Mode using 'lvcreate' won't preserve segments and properties of the other segments as well!"
 | ||||||
|  | +                fi
 | ||||||
|  | +                echo "lvmvol /dev/$vg $lv ${size}b $layout $kval"
 | ||||||
|  | +                if [ -n "$infokval" ] ; then
 | ||||||
|  | +                    echo "# extra parameters for the line above not taken into account when restoring using 'lvcreate': $infokval"
 | ||||||
|  | +                fi
 | ||||||
|  | +                already_processed_lvs="${already_processed_lvs:+$already_processed_lvs }$vg/$lv"
 | ||||||
|  | +            fi
 | ||||||
|  |          done | ||||||
|  |   | ||||||
|  |      fi | ||||||
							
								
								
									
										194
									
								
								SOURCES/rear-bz1737042.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										194
									
								
								SOURCES/rear-bz1737042.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,194 @@ | |||||||
|  | diff --git a/usr/share/rear/lib/uefi-functions.sh b/usr/share/rear/lib/uefi-functions.sh
 | ||||||
|  | index 95e6292d..c583e044 100644
 | ||||||
|  | --- a/usr/share/rear/lib/uefi-functions.sh
 | ||||||
|  | +++ b/usr/share/rear/lib/uefi-functions.sh
 | ||||||
|  | @@ -37,20 +37,76 @@ function trim {
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  function build_bootx86_efi { | ||||||
|  | -    local gmkimage
 | ||||||
|  | -    if has_binary grub-mkimage; then
 | ||||||
|  | -        gmkimage=grub-mkimage
 | ||||||
|  | -    elif has_binary grub2-mkimage; then
 | ||||||
|  | -        gmkimage=grub2-mkimage
 | ||||||
|  | +    local outfile="$1"
 | ||||||
|  | +    local embedded_config=""
 | ||||||
|  | +    local gmkstandalone=""
 | ||||||
|  | +    local gprobe=""
 | ||||||
|  | +    local dirs=()
 | ||||||
|  | +    # modules is the list of modules to load
 | ||||||
|  | +    local modules=()
 | ||||||
|  | +
 | ||||||
|  | +    # Configuration file is optional for image creation.
 | ||||||
|  | +    shift
 | ||||||
|  | +    if [[ -n "$1" ]] ; then
 | ||||||
|  | +        # graft point syntax. $1 will appear as /boot/grub/grub.cfg in the image
 | ||||||
|  | +        embedded_config="/boot/grub/grub.cfg=$1"
 | ||||||
|  | +        shift
 | ||||||
|  | +        # directories that should be accessible by GRUB2 (e.g. because they contain the kernel)
 | ||||||
|  | +        dirs=( ${@:+"$@"} )
 | ||||||
|  | +    fi
 | ||||||
|  | +
 | ||||||
|  | +    if has_binary grub-mkstandalone ; then
 | ||||||
|  | +        gmkstandalone=grub-mkstandalone
 | ||||||
|  | +    elif has_binary grub2-mkstandalone ; then
 | ||||||
|  | +        # At least SUSE systems use 'grub2' prefixed names for GRUB2 programs:
 | ||||||
|  | +        gmkstandalone=grub2-mkstandalone
 | ||||||
|  |      else | ||||||
|  | -        Log "Did not find grub-mkimage (cannot build bootx86.efi)"
 | ||||||
|  | -        return
 | ||||||
|  | +        # This build_bootx86_efi function is only called in output/ISO/Linux-i386/250_populate_efibootimg.sh
 | ||||||
|  | +        # which runs only if UEFI is used so that we simply error out here if we cannot make a bootable EFI image of GRUB2
 | ||||||
|  | +        # (normally a function should not exit out but return to its caller with a non-zero return code):
 | ||||||
|  | +        Error "Cannot make bootable EFI image of GRUB2 (neither grub-mkstandalone nor grub2-mkstandalone found)"
 | ||||||
|  | +    fi
 | ||||||
|  | +
 | ||||||
|  | +    # Determine what modules need to be loaded in order to access given directories
 | ||||||
|  | +    # (if the list of modules is not overriden by GRUB2_MODULES_LOAD)
 | ||||||
|  | +    if (( ${#dirs[@]} )) && ! (( ${#modules[@]} )) ; then
 | ||||||
|  | +        if has_binary grub-probe ; then
 | ||||||
|  | +            gprobe=grub-probe
 | ||||||
|  | +        elif has_binary grub2-probe ; then
 | ||||||
|  | +            # At least SUSE systems use 'grub2' prefixed names for GRUB2 programs:
 | ||||||
|  | +            gprobe=grub2-probe
 | ||||||
|  | +        else
 | ||||||
|  | +            LogWarn "Neither grub-probe nor grub2-probe found"
 | ||||||
|  | +            if test /usr/lib/grub*/x86_64-efi/partmap.lst ; then
 | ||||||
|  | +                LogWarn "including all partition modules"
 | ||||||
|  | +                modules=( $(cat /usr/lib/grub*/x86_64-efi/partmap.lst) )
 | ||||||
|  | +            else
 | ||||||
|  | +                Error "Can not determine partition modules, ${dirs[*]} would be likely inaccessible in GRUB2"
 | ||||||
|  | +            fi
 | ||||||
|  | +        fi
 | ||||||
|  | +
 | ||||||
|  | +        if [ -n "$gprobe" ]; then
 | ||||||
|  | +            # this is unfortunately only a crude approximation of the Grub internal probe_mods() function
 | ||||||
|  | +            modules=( $( for p in "${dirs[@]}" ; do
 | ||||||
|  | +                             $gprobe --target=fs "$p"
 | ||||||
|  | +                             $gprobe --target=partmap "$p" | sed -e 's/^/part_/'
 | ||||||
|  | +                             $gprobe --target=abstraction "$p"
 | ||||||
|  | +                         done | sort -u ) )
 | ||||||
|  | +        fi
 | ||||||
|  | +    fi
 | ||||||
|  | +
 | ||||||
|  | +    # grub-mkimage needs /usr/lib/grub/x86_64-efi/moddep.lst (cf. https://github.com/rear/rear/issues/1193)
 | ||||||
|  | +    # and at least on SUSE systems grub2-mkimage needs /usr/lib/grub2/x86_64-efi/moddep.lst (in 'grub2' directory)
 | ||||||
|  | +    # so that we error out if grub-mkimage or grub2-mkimage would fail when its moddep.lst is missing.
 | ||||||
|  | +    # Careful: usr/sbin/rear sets nullglob so that /usr/lib/grub*/x86_64-efi/moddep.lst gets empty if nothing matches
 | ||||||
|  | +    # and 'test -f' succeeds with empty argument so that we cannot use 'test -f /usr/lib/grub*/x86_64-efi/moddep.lst'
 | ||||||
|  | +    # also 'test -n' succeeds with empty argument but (fortunately/intentionally?) plain 'test' fails with empty argument:
 | ||||||
|  | +    test /usr/lib/grub*/x86_64-efi/moddep.lst || Error "$gmkstandalone would not make bootable EFI image of GRUB2 (no /usr/lib/grub*/x86_64-efi/moddep.lst file)"
 | ||||||
|  | +
 | ||||||
|  | +    (( ${#modules[@]} )) && LogPrint "GRUB2 modules to load: ${modules[*]}"
 | ||||||
|  | +
 | ||||||
|  | +    if ! $gmkstandalone $v ${modules:+"--modules=${modules[*]}"} -O x86_64-efi -o $outfile $embedded_config ; then
 | ||||||
|  | +        Error "Failed to make bootable EFI image of GRUB2 (error during $gmkstandalone of $outfile)"
 | ||||||
|  |      fi | ||||||
|  | -    # as not all Linux distro's have the same grub modules present we verify what we have (see also https://github.com/rear/rear/pull/2001)
 | ||||||
|  | -    grub_modules=""
 | ||||||
|  | -    for grub_module in part_gpt part_msdos fat ext2 normal chain boot configfile linux linuxefi multiboot jfs iso9660 usb usbms usb_keyboard video udf ntfs all_video gzio efi_gop reboot search test echo btrfs ; do
 | ||||||
|  | -        test "$( find /boot -type f -name "$grub_module.mod" 2>/dev/null )" && grub_modules="$grub_modules $grub_module"
 | ||||||
|  | -    done
 | ||||||
|  | -    $gmkimage $v -O x86_64-efi -c $TMP_DIR/mnt/EFI/BOOT/embedded_grub.cfg -o $TMP_DIR/mnt/EFI/BOOT/BOOTX64.efi -p "/EFI/BOOT" $grub_modules
 | ||||||
|  | -    StopIfError "Error occurred during $gmkimage of BOOTX64.efi"
 | ||||||
|  |  } | ||||||
|  | +
 | ||||||
|  | diff --git a/usr/share/rear/output/ISO/Linux-i386/250_populate_efibootimg.sh b/usr/share/rear/output/ISO/Linux-i386/250_populate_efibootimg.sh
 | ||||||
|  | index fdf66039..e9325012 100644
 | ||||||
|  | --- a/usr/share/rear/output/ISO/Linux-i386/250_populate_efibootimg.sh
 | ||||||
|  | +++ b/usr/share/rear/output/ISO/Linux-i386/250_populate_efibootimg.sh
 | ||||||
|  | @@ -2,6 +2,9 @@
 | ||||||
|  |   | ||||||
|  |  is_true $USING_UEFI_BOOTLOADER || return 0 # empty or 0 means NO UEFI | ||||||
|  |   | ||||||
|  | +local boot_dir="/boot"
 | ||||||
|  | +local efi_boot_tmp_dir="$TMP_DIR/mnt/EFI/BOOT"
 | ||||||
|  | +
 | ||||||
|  |  mkdir $v -p $TMP_DIR/mnt/EFI/BOOT >&2 | ||||||
|  |  StopIfError "Could not create $TMP_DIR/mnt/EFI/BOOT" | ||||||
|  |   | ||||||
|  | @@ -56,14 +59,8 @@ title Relax-and-Recover (no Secure Boot)
 | ||||||
|  |   | ||||||
|  |  EOF | ||||||
|  |  else | ||||||
|  | -# create small embedded grub.cfg file for grub-mkimage
 | ||||||
|  | -cat > $TMP_DIR/mnt/EFI/BOOT/embedded_grub.cfg <<EOF
 | ||||||
|  | -set prefix=(cd0)/EFI/BOOT
 | ||||||
|  | -configfile /EFI/BOOT/grub.cfg
 | ||||||
|  | -EOF
 | ||||||
|  | -
 | ||||||
|  | -# create a grub.cfg
 | ||||||
|  | -    create_grub2_cfg > $TMP_DIR/mnt/EFI/BOOT/grub.cfg
 | ||||||
|  | +    # create a grub.cfg
 | ||||||
|  | +    create_grub2_cfg > $efi_boot_tmp_dir/grub.cfg
 | ||||||
|  |  fi | ||||||
|  |   | ||||||
|  |  # Create BOOTX86.efi but only if we are NOT secure booting. | ||||||
|  | @@ -72,15 +69,15 @@ fi
 | ||||||
|  |  # See issue #1374 | ||||||
|  |  # build_bootx86_efi () can be safely used for other scenarios. | ||||||
|  |  if ! test -f "$SECURE_BOOT_BOOTLOADER" ; then | ||||||
|  | -    build_bootx86_efi
 | ||||||
|  | +    build_bootx86_efi $TMP_DIR/mnt/EFI/BOOT/BOOTX64.efi $efi_boot_tmp_dir/grub.cfg "$boot_dir" "$UEFI_BOOTLOADER"
 | ||||||
|  |  fi | ||||||
|  |   | ||||||
|  |  # We will be using grub-efi or grub2 (with efi capabilities) to boot from ISO. | ||||||
|  |  # Because usr/sbin/rear sets 'shopt -s nullglob' the 'echo -n' command | ||||||
|  |  # outputs nothing if nothing matches the bash globbing pattern '/boot/grub*' | ||||||
|  | -local grubdir="$( echo -n /boot/grub* )"
 | ||||||
|  | +local grubdir="$( echo -n ${boot_dir}/grub* )"
 | ||||||
|  |  # Use '/boot/grub' as fallback if nothing matches '/boot/grub*' | ||||||
|  | -test -d "$grubdir" || grubdir='/boot/grub'
 | ||||||
|  | +test -d "$grubdir" || grubdir="${boot_dir}/grub"
 | ||||||
|  |   | ||||||
|  |  if [ -d $(dirname ${UEFI_BOOTLOADER})/fonts ]; then | ||||||
|  |      cp $v $(dirname ${UEFI_BOOTLOADER})/fonts/* $TMP_DIR/mnt/EFI/BOOT/fonts/ >&2 | ||||||
|  | diff --git a/usr/share/rear/output/default/940_grub2_rescue.sh b/usr/share/rear/output/default/940_grub2_rescue.sh
 | ||||||
|  | index a94957de..fbbd7074 100644
 | ||||||
|  | --- a/usr/share/rear/output/default/940_grub2_rescue.sh
 | ||||||
|  | +++ b/usr/share/rear/output/default/940_grub2_rescue.sh
 | ||||||
|  | @@ -144,13 +144,18 @@ if is_true $USING_UEFI_BOOTLOADER ; then
 | ||||||
|  |      # probably a bug, as I was able to boot with value set to root=anything | ||||||
|  |      root_uuid=$(mount | grep -w 'on /' | awk '{print $1}' | xargs blkid -s UUID -o value) | ||||||
|  |   | ||||||
|  | -    # Grub2 modules that will be used for booting "Relax-and-Recover"
 | ||||||
|  | -    # It might be useful to make this variable global in the future
 | ||||||
|  | -    grub2_modules="linux echo all_video part_gpt ext2 btrfs search configfile"
 | ||||||
|  | -
 | ||||||
|  |      # Create configuration file for "Relax-and-Recover" UEFI boot entry. | ||||||
|  |      # This file will not interact with existing Grub2 configuration in any way. | ||||||
|  | -    (   echo "menuentry '$grub_rear_menu_entry_name' --class os {"
 | ||||||
|  | +    (   echo "set btrfs_relative_path=y"
 | ||||||
|  | +        echo "insmod efi_gop"
 | ||||||
|  | +        echo "insmod efi_uga"
 | ||||||
|  | +        echo "insmod video_bochs"
 | ||||||
|  | +        echo "insmod video_cirrus"
 | ||||||
|  | +        echo "insmod all_video"
 | ||||||
|  | +        echo ""
 | ||||||
|  | +        echo "set gfxpayload=keep"
 | ||||||
|  | +        echo ""
 | ||||||
|  | +        echo "menuentry '$grub_rear_menu_entry_name' --class os {"
 | ||||||
|  |          echo "          search --no-floppy --fs-uuid --set=root $grub_boot_uuid" | ||||||
|  |          echo "          echo 'Loading kernel $boot_kernel_file ...'" | ||||||
|  |          echo "          linux $grub_boot_dir/$boot_kernel_name root=UUID=$root_uuid $KERNEL_CMDLINE" | ||||||
|  | @@ -159,19 +164,8 @@ if is_true $USING_UEFI_BOOTLOADER ; then
 | ||||||
|  |          echo "}" | ||||||
|  |      ) > $grub_config_dir/rear.cfg | ||||||
|  |   | ||||||
|  | -    # Tell rear.efi which configuration file to load
 | ||||||
|  | -    (   echo "search --no-floppy --fs-uuid --set=root $grub_boot_uuid"
 | ||||||
|  | -        echo ""
 | ||||||
|  | -        echo "set btrfs_relative_path=y"
 | ||||||
|  | -        echo "set prefix=(\$root)${grub_boot_dir}/grub${grub_num}"
 | ||||||
|  | -        echo ""
 | ||||||
|  | -        echo "configfile (\$root)${grub_boot_dir}/grub${grub_num}/rear.cfg"
 | ||||||
|  | -    ) > $grub_config_dir/rear_embed.cfg
 | ||||||
|  | -
 | ||||||
|  |      # Create rear.efi at UEFI default boot directory location. | ||||||
|  | -    if ! grub${grub_num}-mkimage -o $boot_dir/efi/EFI/BOOT/rear.efi -O x86_64-efi -c $grub_config_dir/rear_embed.cfg -p /EFI/BOOT $grub2_modules ; then
 | ||||||
|  | -        Error "Could not create UEFI boot image"
 | ||||||
|  | -    fi
 | ||||||
|  | +    build_bootx86_efi $boot_dir/efi/EFI/BOOT/rear.efi $grub_config_dir/rear.cfg "$boot_dir" "$UEFI_BOOTLOADER"
 | ||||||
|  |   | ||||||
|  |      # If UEFI boot entry for "Relax-and-Recover" does not exist, create it. | ||||||
|  |      # This will also add "Relax-and-Recover" to boot order because if UEFI entry is not listed in BootOrder, | ||||||
							
								
								
									
										85
									
								
								SOURCES/rear-rhbz1610638.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								SOURCES/rear-rhbz1610638.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,85 @@ | |||||||
|  | diff --git a/usr/share/rear/conf/GNU/Linux.conf b/usr/share/rear/conf/GNU/Linux.conf
 | ||||||
|  | index 5b9343b9..f0c44381 100644
 | ||||||
|  | --- a/usr/share/rear/conf/GNU/Linux.conf
 | ||||||
|  | +++ b/usr/share/rear/conf/GNU/Linux.conf
 | ||||||
|  | @@ -184,6 +184,8 @@ env
 | ||||||
|  |  w | ||||||
|  |  dosfslabel | ||||||
|  |  sysctl | ||||||
|  | +blockdev
 | ||||||
|  | +lsblk
 | ||||||
|  |  ) | ||||||
|  |   | ||||||
|  |  # the lib* serves to cover both 32bit and 64bit libraries! | ||||||
|  | diff --git a/usr/share/rear/lib/layout-functions.sh b/usr/share/rear/lib/layout-functions.sh
 | ||||||
|  | index eb45115b..af1069ea 100644
 | ||||||
|  | --- a/usr/share/rear/lib/layout-functions.sh
 | ||||||
|  | +++ b/usr/share/rear/lib/layout-functions.sh
 | ||||||
|  | @@ -365,7 +365,9 @@ get_partition_start() {
 | ||||||
|  |      local disk_name=$1 | ||||||
|  |      local start_block start | ||||||
|  |   | ||||||
|  | -    local block_size=$(get_block_size ${disk_name%/*})
 | ||||||
|  | +    # When reading /sys/block/.../start or "dmsetup table", output is always in
 | ||||||
|  | +    # 512 bytes blocks
 | ||||||
|  | +    local block_size=512
 | ||||||
|  |   | ||||||
|  |      if [[ -r /sys/block/$disk_name/start ]] ; then | ||||||
|  |          start_block=$(< $path/start) | ||||||
|  | @@ -548,11 +550,32 @@ get_device_mapping() {
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  # Get the size in bytes of a disk/partition. | ||||||
|  | +# For disks, use "sda" as argument.
 | ||||||
|  |  # For partitions, use "sda/sda1" as argument. | ||||||
|  |  get_disk_size() { | ||||||
|  |      local disk_name=$1 | ||||||
|  | +    # When a partition is specified (e.g. sda/sda1)
 | ||||||
|  | +    # then it has to read /sys/block/sda/sda1/size in the old code below.
 | ||||||
|  | +    # In contrast the get_block_size() function below is different
 | ||||||
|  | +    # because it is non-sense asking for block size of a partition,
 | ||||||
|  | +    # so that the get_block_size() function below is stripping everything
 | ||||||
|  | +    # in front of the blockdev basename (e.g. /some/path/sda -> sda)
 | ||||||
|  | +    # cf. https://github.com/rear/rear/pull/1885#discussion_r207900308
 | ||||||
|  | +
 | ||||||
|  | +    # Preferably use blockdev, see https://github.com/rear/rear/issues/1884
 | ||||||
|  | +    if has_binary blockdev; then
 | ||||||
|  | +        # ${disk_name##*/} translates 'sda/sda1' into 'sda1' and 'sda' into 'sda'
 | ||||||
|  | +        blockdev --getsize64 /dev/${disk_name##*/} && return
 | ||||||
|  | +        # If blockdev fails do not error out but fall through to the old code below
 | ||||||
|  | +        # because blockdev fails e.g. for a CDROM device when no DVD or ISO is attached to
 | ||||||
|  | +        # cf. https://github.com/rear/rear/pull/1885#issuecomment-410676283
 | ||||||
|  | +        # and https://github.com/rear/rear/pull/1885#issuecomment-410697398
 | ||||||
|  | +    fi
 | ||||||
|  |   | ||||||
|  | -    local block_size=$(get_block_size ${disk_name%/*})
 | ||||||
|  | +    # Linux always considers sectors to be 512 bytes long. See the note in the
 | ||||||
|  | +    # kernel source, specifically, include/linux/types.h regarding the sector_t
 | ||||||
|  | +    # type for details.
 | ||||||
|  | +    local block_size=512
 | ||||||
|  |   | ||||||
|  |      retry_command test -r /sys/block/$disk_name/size || Error "Could not determine size of disk $disk_name" | ||||||
|  |   | ||||||
|  | @@ -565,9 +588,20 @@ get_disk_size() {
 | ||||||
|  |   | ||||||
|  |  # Get the block size of a disk. | ||||||
|  |  get_block_size() { | ||||||
|  | +    local disk_name="${1##*/}" # /some/path/sda -> sda
 | ||||||
|  | +
 | ||||||
|  | +    # Preferably use blockdev, see https://github.com/rear/rear/issues/1884
 | ||||||
|  | +    if has_binary blockdev; then
 | ||||||
|  | +        blockdev --getss /dev/$disk_name && return
 | ||||||
|  | +        # If blockdev fails do not error out but fall through to the old code below
 | ||||||
|  | +        # because blockdev fails e.g. for a CDROM device when no DVD or ISO is attached to
 | ||||||
|  | +        # cf. https://github.com/rear/rear/pull/1885#issuecomment-410676283
 | ||||||
|  | +        # and https://github.com/rear/rear/pull/1885#issuecomment-410697398
 | ||||||
|  | +    fi
 | ||||||
|  | +
 | ||||||
|  |      # Only newer kernels have an interface to get the block size | ||||||
|  | -    if [ -r /sys/block/$1/queue/logical_block_size ] ; then
 | ||||||
|  | -        echo $( < /sys/block/$1/queue/logical_block_size)
 | ||||||
|  | +    if [ -r /sys/block/$disk_name/queue/logical_block_size ] ; then
 | ||||||
|  | +        echo $( < /sys/block/$disk_name/queue/logical_block_size)
 | ||||||
|  |      else | ||||||
|  |          echo "512" | ||||||
|  |      fi | ||||||
							
								
								
									
										50
									
								
								SOURCES/rear-rhbz1610647.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								SOURCES/rear-rhbz1610647.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | |||||||
|  | diff --git a/usr/share/rear/finalize/Linux-ppc64le/680_install_PPC_bootlist.sh b/usr/share/rear/finalize/Linux-ppc64le/680_install_PPC_bootlist.sh
 | ||||||
|  | index bf1db404..3a07580a 100644
 | ||||||
|  | --- a/usr/share/rear/finalize/Linux-ppc64le/680_install_PPC_bootlist.sh
 | ||||||
|  | +++ b/usr/share/rear/finalize/Linux-ppc64le/680_install_PPC_bootlist.sh
 | ||||||
|  | @@ -9,9 +9,12 @@ if grep -q "PowerNV" /proc/cpuinfo || grep -q "emulated by qemu" /proc/cpuinfo ;
 | ||||||
|  |  fi | ||||||
|  |   | ||||||
|  |  # Look for the PPC PReP Boot Partition. | ||||||
|  | -part=$( awk -F ' ' '/^part / {if ($6 ~ /prep/) {print $7}}' $LAYOUT_FILE )
 | ||||||
|  | +part_list=$( awk -F ' ' '/^part / {if ($6 ~ /prep/) {print $7}}' $LAYOUT_FILE )
 | ||||||
|  |   | ||||||
|  | -if [ -n "$part" ]; then
 | ||||||
|  | +# All the possible boot devices
 | ||||||
|  | +boot_list=()
 | ||||||
|  | +
 | ||||||
|  | +for part in $part_list ; do
 | ||||||
|  |      LogPrint "PPC PReP Boot partition found: $part" | ||||||
|  |   | ||||||
|  |      # Using $LAYOUT_DEPS file to find the disk device containing the partition. | ||||||
|  | @@ -29,14 +32,23 @@ if [ -n "$part" ]; then
 | ||||||
|  |      # If yes, get the list of path which are part of the multipath device. | ||||||
|  |      # Limit to the first 5 PATH (see #876) | ||||||
|  |      if dmsetup ls --target multipath | grep -w ${bootdev#/dev/mapper/} >/dev/null 2>&1; then | ||||||
|  | -        LogPrint "Limiting bootlist to 5 entries..."
 | ||||||
|  | -        bootlist_path=$(dmsetup deps $bootdev -o devname | awk -F: '{gsub (" ",""); gsub("\\(","/dev/",$2) ; gsub("\\)"," ",$2) ; print $2}' | cut -d" " -f-5)
 | ||||||
|  | -        LogPrint "Set LPAR bootlist to $bootlist_path"
 | ||||||
|  | -        bootlist -m normal $bootlist_path
 | ||||||
|  | +        LogPrint "Limiting bootlist to 5 entries as a maximum..."
 | ||||||
|  | +        boot_list+=( $(dmsetup deps $bootdev -o devname | awk -F: '{gsub (" ",""); gsub("\\(","/dev/",$2) ; gsub("\\)"," ",$2) ; print $2}' | cut -d" " -f-5) )
 | ||||||
|  |      else | ||||||
|  |          # Single Path device found | ||||||
|  | -        LogPrint "Set LPAR bootlist to $bootdev"
 | ||||||
|  | -        bootlist -m normal $bootdev
 | ||||||
|  | +        boot_list+=( $bootdev )
 | ||||||
|  |      fi | ||||||
|  | -    LogIfError "Unable to set bootlist. You will have to start in SMS to set it up manually."
 | ||||||
|  | +done
 | ||||||
|  | +
 | ||||||
|  | +if [[ ${#boot_list[@]} -gt 5 ]]; then
 | ||||||
|  | +    LogPrint "Too many entries for bootlist command, limiting to first 5 entries..."
 | ||||||
|  | +    boot_list=( ${boot_list[@]:0:5} )
 | ||||||
|  |  fi | ||||||
|  | +
 | ||||||
|  | +if [[ ${#boot_list[@]} -gt 0 ]]; then
 | ||||||
|  | +    LogPrint "Set LPAR bootlist to '${boot_list[*]}'"
 | ||||||
|  | +    bootlist -m normal "${boot_list[@]}"
 | ||||||
|  | +    LogPrintIfError "Unable to set bootlist. You will have to start in SMS to set it up manually."
 | ||||||
|  | +fi
 | ||||||
|  | +
 | ||||||
|  | +# vim: set et ts=4 sw=4:
 | ||||||
							
								
								
									
										17
									
								
								SOURCES/rear-sfdc02343208.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								SOURCES/rear-sfdc02343208.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | diff -up rear-2.4/usr/share/rear/finalize/Fedora/i386/550_rebuild_initramfs.sh.sfdc02343208 rear-2.4/usr/share/rear/finalize/Fedora/i386/550_rebuild_initramfs.sh
 | ||||||
|  | --- rear-2.4/usr/share/rear/finalize/Fedora/i386/550_rebuild_initramfs.sh.sfdc02343208	2019-04-09 09:14:05.000000000 +0200
 | ||||||
|  | +++ rear-2.4/usr/share/rear/finalize/Fedora/i386/550_rebuild_initramfs.sh	2019-04-09 09:14:53.000000000 +0200
 | ||||||
|  | @@ -65,6 +65,7 @@ WITH_INITRD_MODULES=$( printf '%s\n' ${I
 | ||||||
|  |   | ||||||
|  |  mount -t proc none $TARGET_FS_ROOT/proc | ||||||
|  |  mount -t sysfs none $TARGET_FS_ROOT/sys | ||||||
|  | +mount -o bind /run $TARGET_FS_ROOT/run
 | ||||||
|  |   | ||||||
|  |  # Recreate any initrd or initramfs image under $TARGET_FS_ROOT/boot/ with new drivers | ||||||
|  |  # Images ignored: | ||||||
|  | @@ -109,4 +110,4 @@ and decide yourself, whether the system
 | ||||||
|  |      fi | ||||||
|  |  done | ||||||
|  |   | ||||||
|  | -umount $TARGET_FS_ROOT/proc $TARGET_FS_ROOT/sys
 | ||||||
|  | +umount $TARGET_FS_ROOT/proc $TARGET_FS_ROOT/sys $TARGET_FS_ROOT/run
 | ||||||
							
								
								
									
										318
									
								
								SPECS/rear.spec
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										318
									
								
								SPECS/rear.spec
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,318 @@ | |||||||
|  | %define debug_package %{nil} | ||||||
|  | 
 | ||||||
|  | Summary:    Relax-and-Recover is a Linux disaster recovery and system migration tool | ||||||
|  | Name:       rear | ||||||
|  | Version:    2.4 | ||||||
|  | Release:    12%{?dist} | ||||||
|  | License:    GPLv3 | ||||||
|  | Group:      Applications/File | ||||||
|  | URL:        http://relax-and-recover.org/ | ||||||
|  | 
 | ||||||
|  | Source0:    https://github.com/rear/rear/archive/%{version}.tar.gz#/rear-%{version}.tar.gz | ||||||
|  | Patch4:  rear-bz1492177-warning.patch | ||||||
|  | Patch6:  rear-rhbz1610638.patch | ||||||
|  | Patch7:  rear-rhbz1610647.patch | ||||||
|  | Patch8:  rear-bz1652828-bz1652853.patch | ||||||
|  | Patch9:  rear-bz1631183.patch | ||||||
|  | Patch10: rear-bz1639705.patch | ||||||
|  | Patch11: rear-bz1653214.patch | ||||||
|  | Patch12: rear-bz1659137.patch | ||||||
|  | patch13: rear-bz1663515.patch | ||||||
|  | Patch14: rear-bz1672938.patch | ||||||
|  | Patch15: rear-bz1685166.patch | ||||||
|  | Patch16: rear-bz1655956.patch | ||||||
|  | Patch17: rear-bz1732328.patch | ||||||
|  | Patch18: rear-bz1726982.patch | ||||||
|  | Patch19: rear-bz1693608.patch | ||||||
|  | Patch20: rear-bz1700807.patch | ||||||
|  | Patch21: rear-bz1711123.patch | ||||||
|  | Patch22: rear-bz1692575.patch | ||||||
|  | Patch23: rear-sfdc02343208.patch | ||||||
|  | Patch24: rear-bz1737042.patch | ||||||
|  | 
 | ||||||
|  | ExcludeArch: s390x | ||||||
|  | ExcludeArch: s390 | ||||||
|  | 
 | ||||||
|  | ### Dependencies on all distributions | ||||||
|  | BuildRequires:   asciidoc | ||||||
|  | Requires:   binutils | ||||||
|  | Requires:   ethtool | ||||||
|  | Requires:   gzip | ||||||
|  | Requires:   iputils | ||||||
|  | Requires:   parted | ||||||
|  | Requires:   tar | ||||||
|  | Requires:   openssl | ||||||
|  | Requires:   gawk | ||||||
|  | Requires:   attr | ||||||
|  | Requires:   bc | ||||||
|  | 
 | ||||||
|  | ### If you require NFS, you may need the below packages | ||||||
|  | #Requires:  nfsclient portmap rpcbind | ||||||
|  | 
 | ||||||
|  | ### We drop LSB requirements because it pulls in too many dependencies | ||||||
|  | ### The OS is hardcoded in /etc/rear/os.conf instead | ||||||
|  | #Requires:  redhat-lsb | ||||||
|  | 
 | ||||||
|  | ### Required for Bacula/MySQL support | ||||||
|  | #Requires:  bacula-mysql | ||||||
|  | 
 | ||||||
|  | ### Required for OBDR | ||||||
|  | #Requires:  lsscsi sg3_utils | ||||||
|  | 
 | ||||||
|  | ### Optional requirement | ||||||
|  | #Requires:  cfg2html | ||||||
|  | 
 | ||||||
|  | %ifarch x86_64 i686 | ||||||
|  | Requires:   syslinux | ||||||
|  | %endif | ||||||
|  | %ifarch ppc ppc64 | ||||||
|  | Requires:   yaboot | ||||||
|  | %endif | ||||||
|  | 
 | ||||||
|  | Requires:   crontabs | ||||||
|  | Requires:   iproute | ||||||
|  | #Requires:   mkisofs | ||||||
|  | Requires:   xorriso | ||||||
|  | 
 | ||||||
|  | # mingetty is not available anymore with RHEL 7 (use agetty instead via systemd) | ||||||
|  | # Note that CentOS also has rhel defined so there is no need to use centos | ||||||
|  | %if 0%{?rhel} && 0%{?rhel} > 6 | ||||||
|  | Requires:   util-linux | ||||||
|  | %else | ||||||
|  | Requires:   mingetty | ||||||
|  | Requires:   util-linux | ||||||
|  | %endif | ||||||
|  | 
 | ||||||
|  | ### The rear-snapshot package is no more | ||||||
|  | #Obsoletes: rear-snapshot | ||||||
|  | 
 | ||||||
|  | %description | ||||||
|  | Relax-and-Recover is the leading Open Source disaster recovery and system | ||||||
|  | migration solution. It comprises of a modular | ||||||
|  | frame-work and ready-to-go workflows for many common situations to produce | ||||||
|  | a bootable image and restore from backup using this image. As a benefit, | ||||||
|  | it allows to restore to different hardware and can therefore be used as | ||||||
|  | a migration tool as well. | ||||||
|  | 
 | ||||||
|  | Currently Relax-and-Recover supports various boot media (incl. ISO, PXE, | ||||||
|  | OBDR tape, USB or eSATA storage), a variety of network protocols (incl. | ||||||
|  | sftp, ftp, http, nfs, cifs) as well as a multitude of backup strategies | ||||||
|  | (incl.  IBM TSM, HP DataProtector, Symantec NetBackup, EMC NetWorker, | ||||||
|  | Bacula, Bareos, BORG, Duplicity, rsync). | ||||||
|  | 
 | ||||||
|  | Relax-and-Recover was designed to be easy to set up, requires no maintenance | ||||||
|  | and is there to assist when disaster strikes. Its setup-and-forget nature | ||||||
|  | removes any excuse for not having a disaster recovery solution implemented. | ||||||
|  | 
 | ||||||
|  | Professional services and support are available. | ||||||
|  | 
 | ||||||
|  | %pre | ||||||
|  | if [ $1 -gt 1 ] ; then | ||||||
|  | # during upgrade remove obsolete directories | ||||||
|  | %{__rm} -rf %{_datadir}/rear/output/NETFS | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | %prep | ||||||
|  | %setup  | ||||||
|  | %patch4 -p1 | ||||||
|  | %patch6 -p1 | ||||||
|  | %patch7 -p1 | ||||||
|  | %patch8 -p1 | ||||||
|  | %patch9 -p1 | ||||||
|  | %patch10 -p1 | ||||||
|  | %patch11 -p1 | ||||||
|  | %patch12 -p1 | ||||||
|  | %patch13 -p1 | ||||||
|  | %patch14 -p1 | ||||||
|  | %patch15 -p1 | ||||||
|  | %patch16 -p1 | ||||||
|  | %patch17 -p1 | ||||||
|  | %patch18 -p1 | ||||||
|  | %patch19 -p1 | ||||||
|  | %patch20 -p1 | ||||||
|  | %patch21 -p1 | ||||||
|  | %patch22 -p1 | ||||||
|  | %patch23 -p1 | ||||||
|  | %patch24 -p1 | ||||||
|  | 
 | ||||||
|  | echo "30 1 * * * root /usr/sbin/rear checklayout || /usr/sbin/rear mkrescue" >rear.cron | ||||||
|  | 
 | ||||||
|  | ### Add a specific os.conf so we do not depend on LSB dependencies | ||||||
|  | %{?fedora:echo -e "OS_VENDOR=Fedora\nOS_VERSION=%{?fedora}" >etc/rear/os.conf} | ||||||
|  | %{?rhel:echo -e "OS_VENDOR=RedHatEnterpriseServer\nOS_VERSION=%{?rhel}" >etc/rear/os.conf} | ||||||
|  | 
 | ||||||
|  | %build | ||||||
|  | # asciidoc writes a timestamp to files it produces, based on the last | ||||||
|  | # modified date of the source file, but is sensible to the timezone. | ||||||
|  | # This makes the results differ according to the timezone of the build machine | ||||||
|  | # and spurious changes will be seen. | ||||||
|  | # Set the timezone to UTC as a workaround. | ||||||
|  | # https://wiki.debian.org/ReproducibleBuilds/TimestampsInDocumentationGeneratedByAsciidoc | ||||||
|  | TZ=UTC %{__make} -C doc | ||||||
|  | 
 | ||||||
|  | %install | ||||||
|  | %{__rm} -rf %{buildroot} | ||||||
|  | %{__make} install DESTDIR="%{buildroot}" | ||||||
|  | %{__install} -Dp -m0644 rear.cron %{buildroot}%{_sysconfdir}/cron.d/rear | ||||||
|  | 
 | ||||||
|  | %files | ||||||
|  | %defattr(-, root, root, 0755) | ||||||
|  | %doc MAINTAINERS COPYING README.adoc doc/*.txt doc/user-guide/relax-and-recover-user-guide.html | ||||||
|  | %doc %{_mandir}/man8/rear.8* | ||||||
|  | %config(noreplace) %{_sysconfdir}/cron.d/rear | ||||||
|  | %config(noreplace) %{_sysconfdir}/rear/ | ||||||
|  | %config(noreplace) %{_sysconfdir}/rear/cert/ | ||||||
|  | %{_datadir}/rear/ | ||||||
|  | %{_localstatedir}/lib/rear/ | ||||||
|  | %{_sbindir}/rear | ||||||
|  | 
 | ||||||
|  | %changelog | ||||||
|  | * Mon Dec 16 2019 Pavel Cahyna <pcahyna@redhat.com> - 2.4-12 | ||||||
|  | - Backport upstream PR #2293 to use grub-mkstandalone instead of | ||||||
|  |   grub-mkimage for UEFI (ISO image and GRUB_RESCUE image generation). | ||||||
|  |   Avoids hardcoded module lists or paths and so is more robust. | ||||||
|  |   Fixes an issue where the generated ISO image had no GRUB2 modules and | ||||||
|  |   was therefore unbootable. The backport does not add new config settings. | ||||||
|  |   Resolves: rhbz1737042 | ||||||
|  | 
 | ||||||
|  | * Mon Nov 18 2019 Pavel Cahyna <pcahyna@redhat.com> - 2.4-11 | ||||||
|  | - Apply upstream PR2122: add additional NBU library path to fix support for | ||||||
|  |   NetBackup 8. | ||||||
|  |   Resolves: rhbz1747393 | ||||||
|  | - Apply upstream PR2021: Be safe against empty docker_root_dir (issue 1989) | ||||||
|  |   Resolves: rhbz1729493, where ReaR can not create a backup in rescue mode, | ||||||
|  |   because it thinks that the Docker daemon is running and hits the problem | ||||||
|  |   with empty docker_root_dir. | ||||||
|  | - Apply upstream PR2223 and commit 36cf20e to avoid an empty string in the | ||||||
|  |   list of users to clone, which can lead to bash overflow with lots of users | ||||||
|  |   and groups per user and to wrong passwd/group files in the rescue system. | ||||||
|  |   Resolves: rhbz1729495 | ||||||
|  | - Backport of Upstream fix for issue 2035: /run is not mounted in the rescue | ||||||
|  |   chroot, which causes LVM to hang, especially if rebuilding initramfs. | ||||||
|  |   Resolves: rhbz1757488 | ||||||
|  | - Backport upstream PR 2218: avoid keeping build dir on errors | ||||||
|  |   by default when used noninteractively | ||||||
|  |   Resolves: rhbz1729501 | ||||||
|  | - Apply upstream PR2173 - Cannot restore using Bacula method | ||||||
|  |   due to "bconsole" not showing its prompt | ||||||
|  |   Resolves: rhbz1726992 | ||||||
|  | - Backport fix for upstream issue 2187 (disklayout.conf file contains | ||||||
|  |   duplicate lines, breaking recovery in migration mode or when | ||||||
|  |   thin pools are used). PR2194, 2196. | ||||||
|  |   Resolves: rhbz1732308 | ||||||
|  | 
 | ||||||
|  | * Tue Jun  4 2019 Pavel Cahyna <pcahyna@redhat.com> - 2.4-10 | ||||||
|  | - Apply upstream patch PR1993 | ||||||
|  |   Automatically exclude $BUILD_DIR from the backup | ||||||
|  |   Resolves: rhbz1677733 | ||||||
|  | 
 | ||||||
|  | * Mon Jun  3 2019 Pavel Cahyna <pcahyna@redhat.com> - 2.4-9 | ||||||
|  | - Update fix for bz#1657725. Previous fix was not correct, bootlist was still | ||||||
|  |   invoked only with one partition argument due to incorrect array expansion. | ||||||
|  |   See upstream PR2096, 2097, 2098. | ||||||
|  | 
 | ||||||
|  | * Tue May 28 2019 Pavel Cahyna <pcahyna@redhat.com> - 2.4-8 | ||||||
|  | - Apply upstream PR2065 (record permanent MAC address for team members) | ||||||
|  |   Resolves: rhbz1685178 | ||||||
|  | 
 | ||||||
|  | * Tue May 28 2019 Pavel Cahyna <pcahyna@redhat.com> - 2.4-7 | ||||||
|  | - Apply upstream PR2034 (multipath optimizations for lots of devices) | ||||||
|  | 
 | ||||||
|  | * Mon Jan 14 2019 Pavel Cahyna <pcahyna@redhat.com> - 2.4-6 | ||||||
|  | - Require xorriso instead of genisoimage, it is now the preferred method | ||||||
|  |   and supports files over 4GB in size. | ||||||
|  | - Apply upstream PR2004 (support for custom network interface naming) | ||||||
|  | - Backport upstream PR2001 (UEFI support broken on Fedora 29 and RHEL 8) | ||||||
|  | 
 | ||||||
|  | * Thu Dec 13 2018 Pavel Cahyna <pcahyna@redhat.com> - 2.4-4 | ||||||
|  | - Backport fixes for upstream bugs 1974 and 1975 | ||||||
|  | - Backport fix for upstream bug 1913 (backup succeeds in case of tar error) | ||||||
|  | - Backport fix for upstream bug 1926 (support for LACP bonding and teaming) | ||||||
|  | - Apply upstream PR1954 (record permanent MAC address for bond members) | ||||||
|  | 
 | ||||||
|  | * Thu Aug 09 2018 Pavel Cahyna <pcahyna@redhat.com> - 2.4-3 | ||||||
|  | - Merge some spec changes from Fedora. | ||||||
|  | - Apply upstream patch PR1887 | ||||||
|  |   LPAR/PPC64 bootlist is incorrectly set when having multiple 'prep' partitions | ||||||
|  | - Apply upstream patch PR1885 | ||||||
|  |   Partition information recorded is unexpected when disk has 4K block size | ||||||
|  | 
 | ||||||
|  | * Wed Jul 18 2018 Pavel Cahyna <pcahyna@redhat.com> - 2.4-2 | ||||||
|  | - Build and install the HTML user guide. #1418459 | ||||||
|  | 
 | ||||||
|  | * Wed Jun 27 2018 Pavel Cahyna <pcahyna@redhat.com> - 2.4-1 | ||||||
|  | - Rebase to version 2.4, drop patches integrated upstream | ||||||
|  |   Resolves #1534646 #1484051 #1498828 #1571266 #1496518 | ||||||
|  | 
 | ||||||
|  | * Wed Feb 14 2018 Pavel Cahyna <pcahyna@redhat.com> - 2.00-6 | ||||||
|  | - Ensure that NetBackup is started automatically upon recovery (PR#1544) | ||||||
|  |   Also do not kill daemons spawned by sysinit.service at the service's end | ||||||
|  |   (PR#1610, applies to NetBackup and also to dhclient) | ||||||
|  |   Resolves #1506231 | ||||||
|  | - Print a warning if grub2-mkimage is about to fail and suggest what to do. | ||||||
|  |   bz#1492177 | ||||||
|  | - Update the patch for #1388653 to the one actually merged upstream (PR1418) | ||||||
|  | 
 | ||||||
|  | * Fri Jan 12 2018 Pavel Cahyna <pcahyna@redhat.com> - 2.00-5 | ||||||
|  | - cd to the correct directory before md5sum to fix BACKUP_INTEGRITY_CHECK. | ||||||
|  |   Upstream PR#1685, bz1532676 | ||||||
|  | 
 | ||||||
|  | * Mon Oct 23 2017 Pavel Cahyna <pcahyna@redhat.com> - 2.00-4 | ||||||
|  | - Retry get_disk_size to fix upstream #1370, bz1388653 | ||||||
|  | 
 | ||||||
|  | * Wed Sep 13 2017 Pavel Cahyna <pcahyna@redhat.com> - 2.00-3 | ||||||
|  | - Fix rear mkrescue on systems w/o UEFI. Upstream PR#1481 issue#1478 | ||||||
|  | - Resolves: #1479002 | ||||||
|  | 
 | ||||||
|  | * Wed May 17 2017 Jakub Mazanek <jmazanek@redhat.com> - 2.00-2 | ||||||
|  | - Excluding Archs s390 and s390x | ||||||
|  | - Related #1355667 | ||||||
|  | 
 | ||||||
|  | * Mon Feb 20 2017 Jakub Mazanek <jmazanek@redhat.com> - 2.00-1 | ||||||
|  | - Rebase to version 2.00  | ||||||
|  | - Resolves #1355667 | ||||||
|  | 
 | ||||||
|  | * Tue Jul 19 2016 Petr Hracek <phracek@redhat.com> - 1.17.2-6 | ||||||
|  | - Replace experimental grep -P with grep -E | ||||||
|  | Resolves: #1290205 | ||||||
|  | 
 | ||||||
|  | * Wed Mar 23 2016 Petr Hracek <phracek@redhat.com> - 1.17.2-5 | ||||||
|  | - Remove backuped patched files | ||||||
|  | Related: #1283930 | ||||||
|  | 
 | ||||||
|  | * Wed Mar 23 2016 Petr Hracek <phracek@redhat.com> - 1.17.2-4 | ||||||
|  | - Rear recovery over teaming interface will not work | ||||||
|  | Resolves: #1283930 | ||||||
|  | 
 | ||||||
|  | * Tue Mar 08 2016 Petr Hracek <phracek@redhat.com> - 1.17.2-3 | ||||||
|  | - Replace experimental grep -P with grep -E | ||||||
|  | Resolves: #1290205 | ||||||
|  | 
 | ||||||
|  | * Tue Feb 23 2016 Petr Hracek <phracek@redhat.com> - 1.17.2-2 | ||||||
|  | - rear does not require syslinux | ||||||
|  | - changing to arch package so that syslinux is installed | ||||||
|  | - Resolves: #1283927 | ||||||
|  | 
 | ||||||
|  | * Mon Sep 14 2015 Petr Hracek <phracek@redhat.com> - 1.17.2-1 | ||||||
|  | - New upstream release 1.17.2 | ||||||
|  | Related: #1059196 | ||||||
|  | 
 | ||||||
|  | * Wed May 13 2015 Petr Hracek <phracek@redhat.com> 1.17.0-2 | ||||||
|  | - Fix Source tag | ||||||
|  | Related: #1059196 | ||||||
|  | 
 | ||||||
|  | * Mon May 04 2015 Petr Hracek <phracek@redhat.com> 1.17.0-1 | ||||||
|  | - Initial package for RHEL 7 | ||||||
|  | Resolves: #1059196 | ||||||
|  | 
 | ||||||
|  | * Fri Oct 17 2014 Gratien D'haese <gratien.dhaese@gmail.com> | ||||||
|  | - added the suse_version lines to identify the corresponding OS_VERSION | ||||||
|  | 
 | ||||||
|  | * Fri Jun 20 2014 Gratien D'haese <gratien.dhaese@gmail.com> | ||||||
|  | - add %%pre section | ||||||
|  | 
 | ||||||
|  | * Thu Apr 11 2013 Gratien D'haese <gratien.dhaese@gmail.com> | ||||||
|  | - changes Source | ||||||
|  | 
 | ||||||
|  | * Thu Jun 03 2010 Dag Wieers <dag@wieers.com> | ||||||
|  | - Initial package. (using DAR) | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user