From 2e3f5b926d45c6c3aa2d4f7920bac1936e0ca7a9 Mon Sep 17 00:00:00 2001 From: MSVSphere Packaging Team Date: Tue, 26 Nov 2024 16:17:15 +0300 Subject: [PATCH] import grubby-8.40-76.el10 --- .gitignore | 0 .grubby.metadata | 0 SOURCES/10-devicetree.install | 73 +++ SOURCES/95-kernel-hooks.install | 33 ++ SOURCES/COPYING | 340 +++++++++++++ SOURCES/grubby-bls | 857 ++++++++++++++++++++++++++++++++ SOURCES/grubby.8 | 177 +++++++ SPECS/grubby.spec | 730 +++++++++++++++++++++++++++ 8 files changed, 2210 insertions(+) create mode 100644 .gitignore create mode 100644 .grubby.metadata create mode 100755 SOURCES/10-devicetree.install create mode 100755 SOURCES/95-kernel-hooks.install create mode 100644 SOURCES/COPYING create mode 100755 SOURCES/grubby-bls create mode 100644 SOURCES/grubby.8 create mode 100644 SPECS/grubby.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/.grubby.metadata b/.grubby.metadata new file mode 100644 index 0000000..e69de29 diff --git a/SOURCES/10-devicetree.install b/SOURCES/10-devicetree.install new file mode 100755 index 0000000..3345391 --- /dev/null +++ b/SOURCES/10-devicetree.install @@ -0,0 +1,73 @@ +#!/bin/bash + +# set -x + +if [[ "$(uname -m)" == arm* || "$(uname -m)" == aarch64 ]] +then +COMMAND="$1" +KERNEL_VERSION="$2" +#BOOT_DIR_ABS="$3" +#KERNEL_IMAGE="$4" + +[ -f /etc/u-boot.conf ] && source /etc/u-boot.conf || true +[ -z "$FIRMWAREDT" ] || FirmwareDT=$FIRMWAREDT + +if [[ $FirmwareDT == "True" ]] +then + # if we want to use firmware DT we remove symlink to current kernel DT + if [ -h /boot/dtb ]; then + rm -f /boot/dtb + fi + exit 0 +fi + +# Setup a /boot/dtb -> /boot/dtb-$newest_kernel_version symlink so that +# u-boot can find the correct dtb to load. +# +# If invoked to 'add' a new kernel, find the newest based on `sort`ing +# the kernel versions dtb. If 'remove', then follow basically the same +# procedure but exclude the version currently being removed. +# +# The theory of operation here is that, while newer kernels may add new +# dtb nodes and fields, as upstreaming hw support for some particular +# device progresses, it should never make backward incompatible changes. +# So it should always be safe to use a newer dtb with an older kernel. + + list_dtb_versions() { + excluded_version="$1" + for dtbdir in /boot/dtb-*; do + dtbver=${dtbdir#*-} + if [ "$dtbver" != "$excluded_version" ]; then + echo $dtbver + fi + done + } + + setup_dtb_link() { + ver=`list_dtb_versions $1 | sort -r --sort=version | head -1` + if [ -h /boot/dtb ]; then + rm -f /boot/dtb + fi + ln -s dtb-$ver /boot/dtb + } + + ret=0 + case "$COMMAND" in + add) + # If we're adding a kernel we want that version + if [ -h /boot/dtb ]; then + rm -f /boot/dtb + fi + ln -s dtb-$KERNEL_VERSION /boot/dtb + ret=$? + ;; + remove) + setup_dtb_link $KERNEL_VERSION + ret=$? + ;; + esac + exit $ret +else + # Just exit on non ARM + exit 0 +fi diff --git a/SOURCES/95-kernel-hooks.install b/SOURCES/95-kernel-hooks.install new file mode 100755 index 0000000..1313556 --- /dev/null +++ b/SOURCES/95-kernel-hooks.install @@ -0,0 +1,33 @@ +#!/usr/bin/bash + +if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then + exit 0 +fi + +COMMAND="$1" +KERNEL_VERSION="$2" +BOOT_DIR_ABS="$3" + +# If $BOOT_DIR_ABS exists, some other boot loader is active. +[[ -d "$BOOT_DIR_ABS" ]] && exit 0 + +run_hooks() +{ + local f + local files="$1" + for f in $files ; do + [ -x "$f" ] || continue + "$f" "$KERNEL_VERSION" "/boot/vmlinuz-$KERNEL_VERSION" + done +} + +case "$COMMAND" in + add) + run_hooks "/etc/kernel/postinst.d/*[^~] /etc/kernel/postinst.d/$KERNEL_VERSION/*[^~]" + ;; + remove) + run_hooks "/etc/kernel/prerm.d/*[^~] /etc/kernel/prerm.d/$KERNEL_VERSION/*[^~]" + ;; + *) + exit 0 +esac diff --git a/SOURCES/COPYING b/SOURCES/COPYING new file mode 100644 index 0000000..f90922e --- /dev/null +++ b/SOURCES/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/SOURCES/grubby-bls b/SOURCES/grubby-bls new file mode 100755 index 0000000..ac82950 --- /dev/null +++ b/SOURCES/grubby-bls @@ -0,0 +1,857 @@ +#!/bin/bash +# +# grubby wrapper to manage BootLoaderSpec files +# +# +# Copyright 2018 Red Hat, Inc. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +readonly SCRIPTNAME="${0##*/}" + +CMDLINE_LINUX_DEBUG=" systemd.log_level=debug systemd.log_target=kmsg" +LINUX_DEBUG_VERSION_POSTFIX="_with_debugging" +LINUX_DEBUG_TITLE_POSTFIX=" with debugging" + +declare -a bls_file +declare -a bls_title +declare -a bls_version +declare -a bls_linux +declare -a bls_initrd +declare -a bls_options +declare -a bls_id + +[[ -f /etc/sysconfig/kernel ]] && . /etc/sysconfig/kernel +[[ -f /etc/os-release ]] && . /etc/os-release +read MACHINE_ID < /etc/machine-id +arch=$(uname -m) + +if [[ $arch = 's390' || $arch = 's390x' ]]; then + bootloader="zipl" +else + bootloader="grub2" +fi + +print_error() { + echo "$1" >&2 + exit 1 +} + +print_info() { + echo "$1" >&2 +} + +if [[ ${#} = 0 ]]; then + print_error "no action specified" +fi + +get_bls_value() { + local bls="$1" && shift + local key="$1" && shift + + echo "$(grep "^${key}[ \t]" "${bls}" | sed -e "s!^${key}[ \t]*!!")" +} + +set_bls_value() { + local bls="$1" && shift + local key="$1" && shift + local value="$1" && shift + + value=$(echo $value | sed -e 's/\//\\\//g') + sed -i -e "s/^${key}.*/${key} ${value}/" "${bls}" +} + +append_bls_value() { + local bls="$1" && shift + local key="$1" && shift + local value="$1" && shift + + old_value="$(get_bls_value "${bls}" ${key})" + set_bls_value "${bls}" "${key}" "${old_value}${value}" +} + +get_bls_values() { + count=0 + local -a files + local IFS=$'\n' + files=($(for bls in ${blsdir}/*.conf ; do + if ! [[ -e "${bls}" ]] ; then + continue + fi + bls="${bls%.conf}" + bls="${bls##*/}" + echo "${bls}" + done | sort -Vr 2>/dev/null)) || : + + for bls in "${files[@]}" ; do + blspath="${blsdir}/${bls}.conf" + bls_file[$count]="${blspath}" + bls_title[$count]="$(get_bls_value ${blspath} title)" + bls_version[$count]="$(get_bls_value ${blspath} version)" + bls_linux[$count]="$(get_bls_value ${blspath} linux)" + bls_initrd[$count]="$(get_bls_value ${blspath} initrd)" + bls_options[$count]="$(get_bls_value ${blspath} options)" + bls_id[$count]="${bls}" + + count=$((count+1)) + done +} + +get_default_index() { + local default="" + local index="-1" + local title="" + local version="" + if [[ $bootloader = "grub2" ]]; then + default="$(grep '^saved_entry=' ${env} | sed -e 's/^saved_entry=//')" + else + default="$(grep '^default=' ${zipl_config} | sed -e 's/^default=//')" + fi + + if [[ -z $default ]]; then + index=0 + elif [[ $default =~ ^[0-9]+$ ]]; then + index="$default" + fi + + for i in ${!bls_file[@]}; do + if [[ $i -eq $index ]]; then + echo $i + return + fi + + if [[ $default = ${bls_id[$i]} || $default = ${bls_title[$i]} ]]; then + echo $i + return + fi + done +} + +display_default_value() { + local prefix=$(get_prefix) + + case "$display_default" in + kernel) + echo "${prefix}${bls_linux[$default_index]}" + exit 0 + ;; + index) + echo "$default_index" + exit 0 + ;; + title) + echo "${bls_title[$default_index]}" + exit 0 + ;; + esac +} + +param_to_indexes() { + local param="$1" + local indexes="" + + if [[ $param = "ALL" ]]; then + for i in ${!bls_file[@]}; do + indexes="$indexes $i" + done + echo -n $indexes + return + fi + + if [[ $param = "DEFAULT" ]]; then + echo -n $default_index + return + fi + + for i in ${!bls_file[@]}; do + if [[ $param = "${bls_linux[$i]}" || "/${param##*/}" = "${bls_linux[$i]}" ]]; then + indexes="$indexes $i" + fi + + if [[ $param = "TITLE=${bls_title[$i]}" ]]; then + indexes="$indexes $i" + fi + + if [[ $param = $i ]]; then + indexes="$indexes $i" + fi + done + + if [[ -n $indexes ]]; then + echo -n $indexes + return + fi + + echo -n "-1" +} + +get_prefix() { + if [[ $bootloader = grub2 ]] && mountpoint -q /boot; then + echo "/boot" + else + echo "" + fi +} + +expand_var() { + local var=$1 + + if [[ $bootloader == "grub2" ]]; then + local value="$(grub2-editenv "${env}" list | grep ${var##$} | sed -e "s/${var##$}=//")" + value="$(echo ${value} | sed -e 's/\//\\\//g')" + if [[ -n $value ]]; then + var="$value" + fi + fi + + echo $var +} + +has_kernelopts() +{ + local args=${bls_options[$1]} + local opts=(${args}) + + for opt in ${opts[*]}; do + [[ $opt = "\$kernelopts" ]] && echo "true" + done + + echo "false" +} + +get_bls_args() { + local args=${bls_options[$1]} + local opts=(${args}) + + for opt in ${opts[*]}; do + if [[ $opt = "\$kernelopts" ]]; then + value="$(expand_var $opt)" + args="$(echo ${args} | sed -e "s/${opt}/${value}/")" + fi + done + + echo ${args} +} + +display_info_values() { + local indexes=($(param_to_indexes "$1")) + local prefix=$(get_prefix) + + if [[ $indexes = "-1" ]]; then + print_error "The param $1 is incorrect" + fi + + for i in ${indexes[*]}; do + local root="" + local value="" + local args="$(get_bls_args "$i")" + + local opts=(${args}) + + for opt in ${opts[*]}; do + if echo $opt | grep -q "^root="; then + root="$(echo $opt | sed -e 's/root=//')" + value="$(echo ${opt} | sed -e 's/\//\\\//g')" + args="$(echo ${args} | sed -e "s/${value}[ \t]*//")" + break + fi + done + + echo "index=$i" + echo "kernel=\"${prefix}${bls_linux[$i]}\"" + echo "args=\"${args}\"" + + if [[ -n $root ]]; then + echo "root=\"${root}\"" + fi + + echo "initrd=\"${prefix}${bls_initrd[$i]}\"" + echo "title=\"${bls_title[$i]}\"" + echo "id=\"${bls_id[$i]}\"" + done + exit 0 +} + +mkbls() { + local kernel=$1 && shift + local kernelver=$1 && shift + local datetime=$1 && shift + + local debugname="" + local flavor="" + local prefix="" + + if [[ $(get_prefix) = "" ]]; then + prefix="/boot" + fi + + if [[ $kernelver == *\+* ]] ; then + local flavor=-"${kernelver##*+}" + if [[ $flavor == "-debug" ]]; then + local debugname="with debugging" + local debugid="-debug" + fi + fi + + cat < "${bls_target}" + + if [[ -n $title ]]; then + set_bls_value "${bls_target}" "title" "${title}" + fi + + if [[ -n $options ]]; then + set_bls_value "${bls_target}" "options" "${options}" + fi + + if [[ -n $initrd ]]; then + set_bls_value "${bls_target}" "initrd" "${initrd}" + fi + + if [[ -n $extra_initrd ]]; then + append_bls_value "${bls_target}" "initrd" " ${extra_initrd}" + fi + + if [[ $MAKEDEBUG = "yes" ]]; then + bls_debug="$(echo ${bls_target} | sed -e "s/${kernelver}/${kernelver}~debug/")" + cp -aT "${bls_target}" "${bls_debug}" + append_bls_value "${bls_debug}" "title" "${LINUX_DEBUG_TITLE_POSTFIX}" + append_bls_value "${bls_debug}" "version" "${LINUX_DEBUG_VERSION_POSTFIX}" + append_bls_value "${bls_debug}" "options" "${CMDLINE_LINUX_DEBUG}" + blsid="$(get_bls_value ${bls_debug} "id" | sed -e "s/${kernelver}/${kernelver}~debug/")" + set_bls_value "${bls_debug}" "id" "${blsid}" + fi + + get_bls_values + + if [[ $make_default = "true" ]]; then + set_default_bls "TITLE=${title}" + fi + + update_grubcfg + + exit 0 +} + +update_args() { + local args=$1 && shift + local remove_args=($1) && shift + local add_args=($1) && shift + + for arg in ${remove_args[*]}; do + arg="$(echo $arg | sed -e 's/\//\\\//g')" + if [[ $arg = *"="* ]]; then + args="$(echo $args | sed -E "s/(^|[[:space:]])$arg([[:space:]]|$)/ /")" + else + args="$(echo $args | sed -E "s/(^|[[:space:]])$arg(([[:space:]]|$)|([=][^ ]*([$]*)))/ /g")" + fi + done + + for arg in ${add_args[*]}; do + arg="${arg%%=*}" + arg="$(echo $arg | sed -e 's/\//\\\//g')" + args="$(echo $args | sed -E "s/(^|[[:space:]])$arg(([[:space:]]|$)|([=][^ ]*([$]*)))/ /g")" + done + + for arg in ${add_args[*]}; do + args="$args $arg" + done + + echo ${args} +} + +update_bls_fragment() { + local param="$1" + local indexes=($(param_to_indexes "$1")) && shift + local remove_args=$1 && shift + local add_args=$1 && shift + local initrd=$1 && shift + local opts + + if [[ $indexes = "-1" ]]; then + print_error "The param $(get_prefix)${param} is incorrect" + fi + + if [[ $param = "ALL" && $bootloader = grub2 ]] && [[ -n $remove_args || -n $add_args ]]; then + local old_args="" + + if [[ -z $no_etc_update ]] && [[ -e ${grub_etc_default} ]]; then + old_args="$(source ${grub_etc_default}; echo ${GRUB_CMDLINE_LINUX})" + if [[ -n $old_args ]]; then + opts="$(update_args "${old_args}" "${remove_args}" "${add_args}")" + opts="$(echo "$opts" | sed -e 's/\//\\\//g')" + sed -i -e "s/^GRUB_CMDLINE_LINUX=.*/GRUB_CMDLINE_LINUX=\\\"${opts}\\\"/" "${grub_etc_default}" + fi + fi + + old_args="$(grub2-editenv "${env}" list | grep kernelopts | sed -e "s/kernelopts=//")" + if [[ -n $old_args ]]; then + opts="$(update_args "${old_args}" "${remove_args}" "${add_args}")" + grub2-editenv "${env}" set kernelopts="${opts}" + fi + elif [[ $bootloader = grub2 ]]; then + opts="$(grub2-editenv "${env}" list | grep kernelopts | sed -e "s/kernelopts=//")" + fi + + for i in ${indexes[*]}; do + if [[ -n $remove_args || -n $add_args ]]; then + local old_args="$(get_bls_args "$i")" + local new_args="$(update_args "${old_args}" "${remove_args}" "${add_args}")" + + if [[ $param != "ALL" || "$(has_kernelopts "$i")" = "false" ]]; then + set_bls_value "${bls_file[$i]}" "options" "${new_args}" + fi + fi + + if [[ -n $initrd ]]; then + set_bls_value "${bls_file[$i]}" "initrd" "${initrd}" + fi + done + + if [[ $param = "ALL" ]] && [[ -n $remove_args || -n $add_args ]]; then + if [[ ! -f /etc/kernel/cmdline ]]; then + # anaconda could pre-populate this file, but until then, most of + # the time we'll just want the most recent one. This is pretty + # close to the current almost-correct behavior of falling back to + # /proc/cmdline anyhow. + echo "$(get_bls_args -1)" > /etc/kernel/cmdline + fi + + read old_args < /etc/kernel/cmdline + local new_args="$(update_args "${old_args}" "${remove_args}" "${add_args}")" + echo "$new_args" > /etc/kernel/cmdline + fi + + update_grubcfg +} + +set_default_bls() { + local index=($(param_to_indexes "$1")) + + if [[ $index = "-1" ]]; then + print_error "The param $1 is incorrect" + fi + + if [[ $bootloader = grub2 ]]; then + grub2-editenv "${env}" set saved_entry="${bls_id[$index]}" + else + local default="${bls_title[$index]}" + local current="$(grep '^default=' ${zipl_config} | sed -e 's/^default=//')" + if [[ -n $current ]]; then + sed -i -e "s,^default=.*,default=${default}," "${zipl_config}" + else + echo "default=${default}" >> "${zipl_config}" + fi + fi + + print_info "The default is ${bls_file[$index]} with index $index and kernel $(get_prefix)${bls_linux[$index]}" +} + +remove_var_prefix() { + local prefix="$1" + + [ -z "${prefix}" ] && return + + if [[ -n $remove_kernel && $remove_kernel =~ ^/ ]]; then + remove_kernel="/${remove_kernel##${prefix}/}" + fi + + if [[ -n $initrd ]]; then + initrd="/${initrd##${prefix}/}" + fi + + if [[ -n $extra_initrd ]]; then + extra_initrd="/${extra_initrd##${prefix}/}" + fi + + if [[ -n $kernel ]]; then + kernel="/${kernel##${prefix}/}" + fi + + if [[ -n $update_kernel && $update_kernel =~ ^/ ]]; then + update_kernel="/${update_kernel##${prefix}/}" + fi +} + +update_grubcfg() +{ + # Older ppc64le OPAL firmware (petitboot version < 1.8.0) don't have BLS support + # so grub2-mkconfig has to be run to generate a config with menuentry commands. + if [ "${arch}" = "ppc64le" ] && [ -d /sys/firmware/opal ]; then + RUN_MKCONFIG="true" + petitboot_path="/sys/firmware/devicetree/base/ibm,firmware-versions/petitboot" + + if test -e ${petitboot_path}; then + read -r -d '' petitboot_version < ${petitboot_path} + petitboot_version="$(echo ${petitboot_version//v})" + + if test -n ${petitboot_version}; then + major_version="$(echo ${petitboot_version} | cut -d . -f1)" + minor_version="$(echo ${petitboot_version} | cut -d . -f2)" + + re='^[0-9]+$' + if [[ $major_version =~ $re ]] && [[ $minor_version =~ $re ]] && + ([[ ${major_version} -gt 1 ]] || + [[ ${major_version} -eq 1 && + ${minor_version} -ge 8 ]]); then + RUN_MKCONFIG="false" + fi + fi + fi + fi + + if [[ $RUN_MKCONFIG = "true" ]]; then + grub2-mkconfig --no-grubenv-update -o "${grub_config}" >& /dev/null + fi +} + +print_usage() +{ + cat <&2 + echo "Try '${SCRIPTNAME} --help' to list supported options" >&2 + echo + exit 1 + ;; + --) + shift + break + ;; + *) + echo + echo "${SCRIPTNAME}: invalid option \"${1}\"" >&2 + echo "Try '${SCRIPTNAME} --help' for more information" >&2 + echo + exit 1 + ;; + esac + shift +done + +if [[ -z $update_kernel && -z $kernel ]] && [[ -n $args || -n $remove_args ]]; then + print_error "no action specified" +fi + +if [[ -z $blsdir ]]; then + blsdir="/boot/loader/entries" +fi + +if [[ -z $env ]]; then + env="/boot/grub2/grubenv" +fi + +if [[ -z $zipl_config ]]; then + zipl_config="/etc/zipl.conf" +fi + +if [[ -z $grub_config ]]; then + grub_config="/boot/grub2/grub.cfg" +fi + +if [[ -z $grub_etc_default ]]; then + grub_etc_default="/etc/default/grub" +fi + +get_bls_values + +default_index="$(get_default_index)" + +if [[ -n $display_default ]]; then + display_default_value +fi + +if [[ -n $display_info ]]; then + display_info_values "${display_info}" +fi + +remove_var_prefix "$(get_prefix)" + +if [[ -n $kernel ]]; then + if [[ $copy_default = "true" ]]; then + opts="${bls_options[$default_index]}" + if [[ -n $args ]]; then + opts="${opts} ${args}" + fi + else + opts="${opts} ${args}" + remove_args="$kernelopts" + update_args "${opts}" "${remove_args}" "" + fi + + add_bls_fragment "${kernel}" "${title}" "${opts}" "${initrd}" \ + "${extra_initrd}" +fi + +if [[ -n $remove_kernel ]]; then + remove_bls_fragment "${remove_kernel}" +fi + +if [[ -n $update_kernel ]]; then + update_bls_fragment "${update_kernel}" "${remove_args}" "${args}" "${initrd}" +fi + +if [[ -n $set_default ]]; then + set_default_bls "${set_default}" +fi + +exit 0 diff --git a/SOURCES/grubby.8 b/SOURCES/grubby.8 new file mode 100644 index 0000000..e9a8e7b --- /dev/null +++ b/SOURCES/grubby.8 @@ -0,0 +1,177 @@ +.TH GRUBBY 8 "Wed Apr 29 2020" +.SH NAME +grubby \- command line tool for configuring grub and zipl + +.SH SYNOPSIS +\fBgrubby\fR [--add-kernel=\fIkernel-path\fR] [--args=\fIargs\fR] + [--bad-image-okay] [--config-file=\fIpath\fR] [--copy-default] + [--default-kernel] [--default-index] [--default-title] + [--env=\fIpath\fR] [--grub2] [--info=\fIkernel-path\fR] + [--initrd=\fIinitrd-path\fR] [--extra-initrd=\fIinitrd-path\fR] + [--make-default] [--remove-args=\fIargs\fR] + [--remove-kernel=\fIkernel-path\fR] [--set-default=\fIkernel-path\fR] + [--set-default-index=\fientry-index\fR] [--title=\fentry-title\fR] + [--update-kernel=\fIkernel-path\fR] [--zipl] [--bls-directory=\fIpath\fR] + +.SH DESCRIPTION +\fBgrubby\fR is a command line tool for updating and displaying information +about the configuration files for the \fBgrub2\fR and \fBzipl\fR boot loaders. +It is primarily designed to be used from scripts which install new kernels and +need to find information about the current boot environment. + +On BIOS-based Intel x86, PowerPC and UEFI-based platforms, \fBgrub2\fR is the +default bootloader and the configuration file is in \fB/boot/grub2/grub.cfg\fR. +On s390x platforms, the \fBzipl\fR bootloader use a default configuration in +\fB/etc/zipl.conf\fR. + +All bootloaders define the boot entries as individual configuration fragments +that are stored by default in \fB/boot/loader/entries\fR. The format for the +config files is specified at \fBhttps://systemd.io/BOOT_LOADER_SPECIFICATION\fR. +The \fBgrubby\fR tool is used to update and display the configuration defined +in the BootLoaderSpec fragment files. + +There are a number of ways to specify the kernel used for \fB-\-info\fR, +\fB-\-remove-kernel\fR, and \fB-\-update-kernel\fR. Specificying \fBDEFAULT\fR +or \fBALL\fR selects the default entry and all of the entries, respectively. +Also, the title of a boot entry may be specified by using \fBTITLE=\fItitle\fR +as the argument; all entries with that title are used. + +.SH OPTIONS +.TP +\fB-\-add-kernel\fR=\fIkernel-path\fR +Add a new boot entry for the kernel located at \fIkernel-path\fR. + +.TP +\fB-\-args\fR=\fIkernel-args\fR +When a new kernel is added, this specifies the command line arguments +which should be passed to the kernel by default (note they are merged +with the arguments of the default entry if \fB-\-copy-default\fR is used). +When \fB-\-update-kernel\fR is used, this specifies new arguments to add +to the argument list. Multiple, space separated arguments may be used. If +an argument already exists the new value replaces the old values. The +\fBroot=\fR kernel argument gets special handling if the configuration +file has special handling for specifying the root filesystem. + +.TP +\fB-\-bad-image-okay\fR +When \fBgrubby\fR is looking for an entry to use for something (such +as a default boot entry) it uses sanity checks, such as ensuring that +the kernel exists in the filesystem, to make sure entries that obviously +won't work aren't selected. This option overrides that behavior, and is +designed primarily for testing. + +.TP +\fB-\-config-file\fR=\fIpath\fR +Use \fIpath\fR as the configuration file rather then the default. + +.TP +\fB-\-copy-default\fR +\fBgrubby\fR will copy as much information (such as kernel arguments and +root device) as possible from the current default kernel. The kernel path +and initrd path will never be copied. + +.TP +\fB-\-default-kernel\fR +Display the full path to the current default kernel and exit. + +.TP +\fB-\-default-index\fR +Display the numeric index of the current default boot entry and exit. + +.TP +\fB-\-default-title\fR +Display the title of the current default boot entry and exit. + +.TP +\fB-\-env\fR=\fIpath\fR +Use \fIpath\fR as the grub2 environment block file rather then the default path. + +.TP +\fB-\-grub2\fR +Configure \fBgrub2\fR bootloader. + +.TP +\fB-\-info\fR=\fIkernel-path\fR +Display information on all boot entries which match \fIkernel-path\fR. If +\fIkernel-path\fR is \fBDEFAULT\fR, then information on the default kernel +is displayed. If \fIkernel-path\fR is \fBALL\fR, then information on all boot +entries are displayed. + +.TP +\fB-\-initrd\fR=\fIinitrd-path\fR +Use \fIinitrd-path\fR as the path to an initial ram disk for a new kernel +being added. + +.TP +\fB-\-extrainitrd\fR=\fIinitrd-path\fR +Use \fIinitrd-path\fR as the path to an auxiliary init ram disk image to be +added to the boot entry. + +.TP +\fB-\-make-default\fR +Make the new kernel entry being added the default entry. + +.TP +\fB-\-remove-args\fR=\fIkernel-args\fR +The arguments specified by \fIkernel-args\fR are removed from the kernels +specified by \fB-\-update-kernel\fR. The \fBroot\fR argument gets special +handling for configuration files that support separate root filesystem +configuration. + +.TP +\fB-\-remove-kernel\fR=\fIkernel-path\fR +Removes all boot entries which match \fIkernel-path\fR. This may be used +along with -\-add-kernel, in which case the new kernel being added will +never be removed. + +.TP +\fB-\-set-default\fR=\fIkernel-path\fR +The first entry which boots the specified kernel is made the default +boot entry. + +.TP +\fB-\-set-default-index\fR=\fIentry-index\fR +Makes the given entry number the default boot entry. + +.TP +\fB-\-title\fR=\fIentry-title\fR +When a new kernel entry is added \fIentry-title\fR is used as the title +for the entry. + +.TP +\fB-\-update-kernel\fR=\fIkernel-path\fR +The entries for kernels matching \fRkernel-path\fR are updated. Currently +the only items that can be updated is the kernel argument list, which is +modified via the \fB-\-args\fR and \fB-\-remove-args\fR options. If the +\fBALL\fR argument is used the variable \fB GRUB_CMDLINE_LINUX\fR in +\fB/etc/default/grub\fR is updated with the latest kernel argument list, +unless the \fB-\-no-etc-grub-update\fR option is used or the file does not +exist (e.g., on s390x). + +.TP +\fB-\-zipl\fR +Configure \fBzipl\fR bootloader. + +.TP +\fB-\-bls-directory\fR=\fIpath\fR +Use \fIpath\fR as the directory for the BootLoaderSpec config files rather +than the default \fB/boot/loader/entries\fR. + +.TP +\fB-\-no-etc-grub-update\fR +Makes grubby to not update the \fBGRUB_CMDLINE_LINUX\fR variable in +\fB/etc/default/grub\fR when the \fB-\-update-kernel\fR option is +used with the \fBALL\fR argument. + +.SH "SEE ALSO" +.BR zipl (8), +.BR mkinitrd (8), +.BR kernel-install (8) + +.SH AUTHORS +.nf +Erik Troan +Jeremy Katz +Peter Jones +Javier Martinez +.fi diff --git a/SPECS/grubby.spec b/SPECS/grubby.spec new file mode 100644 index 0000000..130a86f --- /dev/null +++ b/SPECS/grubby.spec @@ -0,0 +1,730 @@ +# What? No. +%define __brp_mangle_shebangs %{nil} + +Name: grubby +Version: 8.40 +Release: 76%{?dist} +Summary: Command line tool for updating bootloader configs +License: GPL-2.0-or-later +Source1: grubby-bls +# Source2: rpm-sort.c +Source3: COPYING +Source5: 95-kernel-hooks.install +Source6: 10-devicetree.install +Source7: grubby.8 + +BuildRequires: gcc +BuildRequires: glib2-devel +BuildRequires: libblkid-devel +BuildRequires: make +BuildRequires: pkgconfig +BuildRequires: popt-devel +BuildRequires: rpm-devel +BuildRequires: sed +%ifarch aarch64 x86_64 %{power64} +BuildRequires: grub2-tools-minimal +Requires: grub2-tools-minimal +Requires: grub2-tools +%endif +%ifarch s390 s390x +Requires: s390utils-core +%endif +Requires: findutils +Requires: util-linux + +ExcludeArch: %{ix86} +Conflicts: uboot-tools < 2021.01-0.1.rc2 +Obsoletes: %{name}-bls < %{version}-%{release} +Obsoletes: %{name}-deprecated < %{version}-%{release} + +%description +This package provides a grubby compatibility script that manages +BootLoaderSpec files and is meant to be backward compatible with +the previous grubby tool. + +%prep +# Make sure the license can be found in mock +cp %{SOURCE3} . || true + +%build +%set_build_flags + +%install +mkdir -p %{buildroot}%{_sbindir}/ +install -T -m 0755 %{SOURCE1} %{buildroot}%{_sbindir}/grubby + +install -D -m 0755 -t %{buildroot}%{_prefix}/lib/kernel/install.d/ %{SOURCE5} +install -D -m 0755 -t %{buildroot}%{_prefix}/lib/kernel/install.d/ %{SOURCE6} + +mkdir -p %{buildroot}%{_mandir}/man8 +install -m 0644 %{SOURCE7} %{buildroot}%{_mandir}/man8/ + +%post +if [ "$1" = 2 ]; then + arch=$(uname -m) + [[ $arch == "s390x" ]] && \ + zipl-switch-to-blscfg --backup-suffix=.rpmsave &>/dev/null || : +fi + +%files +%license COPYING +%attr(0755,root,root) %{_sbindir}/grubby +%attr(0755,root,root) %{_prefix}/lib/kernel/install.d/10-devicetree.install +%attr(0755,root,root) %{_prefix}/lib/kernel/install.d/95-kernel-hooks.install +%{_mandir}/man8/grubby.8* + +%changelog +* Mon Jun 24 2024 Troy Dawson - 8.40-76 +- Bump release for June 2024 mass rebuild + +* Wed Jan 24 2024 Fedora Release Engineering - 8.40-75 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sat Jan 20 2024 Fedora Release Engineering - 8.40-74 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Wed Jan 10 2024 Marta Lewandowska - 8.40-73 +- Do not overwrite all vars that start with GRUB_CMDLINE_LINUX + +* Mon Sep 11 2023 Zbigniew Jedrzejewski-Szmek - 8.40-72 +- Drop installkernel so that it can be provided by systemd + +* Thu Jul 20 2023 Fedora Release Engineering - 8.40-71 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Feb 21 2023 Marta Lewandowska - 8.40-70 +- remove root= when not copying default + +* Thu Jan 19 2023 Fedora Release Engineering - 8.40-69 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Tue Nov 01 2022 Robbie Harwood - 8.40-68 +- Drop custom rpm-sort +- See-also: https://github.com/rpm-software-management/rpm/pull/2249 + +* Tue Oct 04 2022 Robbie Harwood - 8.40-67 +- Apply Marta's copy-default args fix + +* Mon Aug 22 2022 Robbie Harwood - 8.40-66 +- Give up and just pull the config from BLS +- Suggested-by: Bojan Smojver + +* Wed Aug 17 2022 Robbie Harwood - 8.40-65 +- Mark package as obsoleting -deprecated +- Resolves: #2117817 + +* Tue Aug 02 2022 Robbie Harwood - 8.40-64 +- Handle updating /etc/kernel/cmdline + +* Thu Jul 21 2022 Fedora Release Engineering - 8.40-63 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Tue Jul 19 2022 Robbie Harwood - 8.40-62 +- Clarify that grub files aren't used on s390x in man page + +* Wed Jun 22 2022 Robbie Harwood - 8.40-61 +- Revert previous change + +* Tue May 31 2022 Robbie Harwood - 8.40-60 +- Additionally write to /etc/kernel/cmdline + +* Wed Apr 27 2022 Robbie Harwood - 8.40-59 +- Remove upstream and layers of indirection around -bls + +* Thu Mar 10 2022 Robbie Harwood - 8.40-58 +- Remove grubby-deprecated + +* Mon Feb 07 2022 Robbie Harwood - 8.40-57 +- grubby-bls: wire up -h (help) + +* Thu Jan 20 2022 Fedora Release Engineering - 8.40-56 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Thu Jul 22 2021 Fedora Release Engineering - 8.40-55 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Wed Jun 23 2021 Javier Martinez Canillas - 8.40-54 +- Clarify package description + Resolves: rhbz#1913299 +- Update man page to not mention the GRUB config in the ESP anymore + Resolves: rhbz#1958458 + +* Wed Jun 09 2021 Javier Martinez Canillas - 8.40-53 +- grubby-bls: expand only the kernelopts variable + +* Mon Apr 26 2021 Javier Martinez Canillas - 8.40-52 +- grubby-bs: Fix changing kernel cmdline params not working on ppc64le + +* Tue Jan 26 2021 Fedora Release Engineering - 8.40-51 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Wed Dec 30 2020 Tom Stellard - 8.40-50 +- Use make_build macro instead of plain make +- https://docs.fedoraproject.org/en-US/packaging-guidelines/#_parallel_make + +* Fri Nov 20 2020 Peter Robinson - 8.40-49 +- Add device tree kernel install option + +* Mon Oct 26 2020 Josh Boyer - 8.40-48 +- Only require s390utils-core, not s390utils-base + +* Tue Jul 28 2020 Fedora Release Engineering - 8.40-47 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Fri Jun 26 2020 Javier Martinez Canillas - 8.40-46 +- fix build with rpm-4.16 +- grubby-bls: fix --extra-initrd option not adding the correct path + +* Wed May 13 2020 Javier Martinez Canillas - 8.40-45 +- grubby-bls: don't replace options with kernelopts if values are the same + +* Wed May 06 2020 Javier Martinez Canillas - 8.40-44 +- Fix installed man page file mode bits + +* Tue May 05 2020 Javier Martinez Canillas - 8.40-43 +- grubby-bls: always escape the delimiter character used in sed commands +- grubby-bls: add a --no-etc-grub-update option + +* Wed Apr 29 2020 Javier Martinez Canillas - 8.40-42 +- grubby-bls: fix corner case when a kernel param value contains a '=' +- grubby-bls: update man page to match options in current wrapper script + +* Mon Mar 30 2020 Javier Martinez Canillas - 8.40-41 +- Make grubby to also update GRUB_CMDLINE_LINUX in /etc/default/grub + Related: rhbz#1287854 + +* Mon Feb 10 2020 Javier Martinez Canillas - 8.40-40 +- Fix FTBFS + Resolves: rhbz#1799496 +- Fix wrong S-o-B tag in patch +- Fix warning about using unversioned Obsoletes + +* Wed Jan 29 2020 Fedora Release Engineering - 8.40-39 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Nov 29 2019 Javier Martinez Canillas - 8.40-38 +- grubby-bls: don't update grubenv when generating grub.cfg for ppc64le + Related: rhbz#1726514 + +* Thu Nov 28 2019 Javier Martinez Canillas - 8.40-37 +- grubby-bls: don't print rpm-sort error messages + Resolves: rhbz#1731924 +- grubby-bls: remove -o option and support -c for ppc64le grub config + Resolves: rhbz#1758598 +- grubby-bls: fix logic to check if the kernelopts var is defined in a BLS + Resolves: rhbz#1726514 + +* Tue Aug 06 2019 Yuval Turgeman - 8.40-36 +- grubby-bls: strip only /boot from paths + +* Thu Jul 25 2019 Fedora Release Engineering - 8.40-35 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Mon Jun 17 2019 Javier Martinez Canillas - 8.40-34 +- Add a kernel-install plugin to execute hook scripts in /etc/kernel/ + Resolves: rhbz#1696202 + +* Mon Jun 10 22:13:19 CET 2019 Igor Gnatenko - 8.40-33 +- Rebuild for RPM 4.15 + +* Mon Jun 10 15:42:02 CET 2019 Igor Gnatenko - 8.40-32 +- Rebuild for RPM 4.15 + +* Fri May 03 2019 Javier Martinez Canillas - 8.40-31 +- Use mountpoint command to check whether /boot is a mount point + Resolves: rhbz#1706091 + +* Thu Mar 21 2019 Javier Martinez Canillas - 8.40-30 +- grubby-bls: fix --add-kernel not working when using the --args option + Resolves: rhbz#1691004 + +* Mon Mar 11 2019 Javier Martinez Canillas - 8.40-29 +- Only switch to BLS config for s390x / zipl + Related: rhbz#1652806 + +* Fri Mar 01 2019 Javier Martinez Canillas - 8.40-28 +- grubby-bls: make --update-kernel ALL to update kernelopts var in grubenv + +* Thu Feb 14 2019 Javier Martinez Canillas - 8.40-27 +- grubby-bls: error if args or remove-args is used without update-kernel + +* Tue Feb 05 2019 Javier Martinez Canillas - 8.40-26 +- Fix GCC warnings about possible string truncations and buffer overflows +- grubby-bls: unset default entry if is the one being removed +- grubby-bls: show absolute path when printing error about incorrect param + +* Fri Feb 01 2019 Fedora Release Engineering - 8.40-25 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Mon Jan 14 2019 Javier Martinez Canillas - 8.40-24 +- Correctly set LDFLAGS to include hardened flags (pjones) + Related: rhbz#1654936 +- grubby-bls: expand all variables in options field when updating it + Resolves: rhbz#1660700 + +* Tue Dec 11 2018 Javier Martinez Canillas - 8.40-23 +- grubby-bls: lookup default entry by either id or title on grub2 + Related: rhbz#1654936 + +* Fri Nov 30 2018 Javier Martinez Canillas - 8.40-22 +- grubby-bls: also print the absolute path in the --default-kernel option + Resolves: rhbz#1649778 +- grubby-bls: allow to specify the same kernel param multiple times + Resolves: rhbz#1652486 +- grubby-bls: expand kernel options if these are environment variables + Resolves: rhbz#1649785 +- grubby-bls: always generate the BLS snippets when adding new entries + Resolves: rhbz#1653365 +- Improve man page for --info option (jstodola) + Resolves: rhbz#1651672 +- Make the old grubby take precedence over grubby-bls if is installed + Related: rhbz#165484 + +* Wed Nov 21 2018 Javier Martinez Canillas - 8.40-21 +- installkernel-bls: remove unnecessary check for GRUB_ENABLE_BLSCFG=true + Resolves: rhbz#1647721 +- grubby-bls: use title field instead of version for zipl default entry + Related: rhbz#1645200 +- grubby-bls: print the absolute kernel and initramfs images paths + Resolves: rhbz#1649778 +- grubby-bls: make info print the root parameter if is present in cmdline + Resolves: rhbz#1649791 + +* Tue Nov 13 2018 Javier Martinez Canillas - 8.40-20 +- Switch to a BLS configuration on %%post + +* Tue Nov 06 2018 Javier Martinez Canillas - 8.40-19 +- Make the temporary config wrapper be what "grubby" contains, and put + traditional grubby in grubby-deprecated (pjones) +- Re-enable debuginfo generation (pjones) + Related: rhbz#1619344 +- Install installkernel-bls here as well, not just in the grub2 package, + since s390x doesn't have grubby packages (pjones) + Related: rhbz#1619344 +- Make grubby-bls execute grub2-mkconfig on ppc64 + Resolves: rhbz#1636039 +- grubby-bls should only check if kernel exists and not if was installed + Resolves: rhbz#1634740 +- Use ! instead of , as sed delimiter in grubby-bls script + Resolves: rhbz#1634744 +- Print information about the entry set as default + Resolves: rhbz#1636180 +- grubby-bls: make "id" be the filename, and include it in --info=ALL (pjones) + Related: rhbz#1638103 +- grubby-bls: Make grubby-bls sort everything the same way grub2 does (pjones) + Resolves: rhbz#1638103 +- grubby-bls: Consistently use the filename as the bls id + Related: rhbz#1638103 +- grubby-bls: check if entry exists before attempting to print its info + Resolves: rhbz#1634712 +- grubby-bls: make a copy of the cmdline if is modified for an entry + Resolves: rhbz#1629054 +- grubby-bls: escape delimiter character before replacing the options field + Resolves: rhbz#1640017 +- grubby-bls: grubby-bls: use id instead of title to get the default entry + Resolves: rhbz#1638103 +- grubby-bls: use ~debug instead of -debug as suffix to sort correctly + Related: rhbz#1638103 +- grubby-bls: allow to add many BLS entries for the same kernel image + Resolves: rhbz#1634752 +- grubby-bls: fix --default-* options for s390x + Resolves: rhbz#1644608 +- grubby-bls: only compare using relative paths if /boot is a mount point + Resolves: rhbz#1642078 + +* Fri Aug 10 2018 Javier Martinez Canillas - 8.40-18 +- Make installkernel to use kernel-install scripts on BLS configuration + +* Tue Jul 24 2018 Javier Martinez Canillas - 8.40-17 +- Fix grubby wrapper paths + Resolves: rhbz#1607981 + +* Tue Jul 24 2018 Peter Jones - 8.40-16 +- Fix permissions on /usr/sbin/grubby + +* Fri Jul 13 2018 Javier Martinez Canillas - 8.40-15 +- Add a grubby-bls package that conflicts with grubby + +* Fri Jul 13 2018 Fedora Release Engineering - 8.40-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Thu Jun 14 2018 Peter Jones - 8.40-13 +- Use standard Fedora linker flags (rhbz#1543502) (rdossant) +- Switch zipl config to BLS configuration on %%postun for s390x (javierm) + +* Tue Apr 10 2018 Javier Martinez Canillas - 8.40-12 +- Use .rpmsave as backup suffix when switching to BLS configuration + +* Fri Apr 06 2018 Javier Martinez Canillas - 8.40-11 +- Switch grub2 config to BLS configuration on %%postun + +* Sat Mar 03 2018 Nathaniel McCallum - 8.40-10 +- Add support for /boot on btrfs subvolumes + +* Wed Feb 07 2018 Fedora Release Engineering - 8.40-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Wed Jan 24 2018 Peter Robinson 8.40-8 +- Drop u-boot uImage generation on ARMv7 +- Minor cleanups + +* Tue Sep 12 2017 Peter Jones - 8.40-7 +- Explicitly require grub2-tools on platforms that need grub2-editenv +- Minor packaging cleanups + +* Wed Aug 02 2017 Fedora Release Engineering - 8.40-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 8.40-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 8.40-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Wed Feb 03 2016 Fedora Release Engineering - 8.40-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Wed Jun 17 2015 Fedora Release Engineering - 8.40-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed Apr 15 2015 Peter Jones - 8.40-1 +- Update to 8.40 +- More work on the thing that went to testing in 8.39 + Resolves: rhbz#1211887 + +* Tue Apr 14 2015 Peter Jones - 8.39-1 +- Update to 8.39 +- Fix title extraction with some config file types + Resolves: rhbz#1204353 + Resolves: rhbz#1204888 + Resolves: rhbz#1206943 + +* Tue Apr 14 2015 Peter Jones - 8.38-1 +- Update to 8.38 +- Fix title extraction with some config file types + Resolves: rhbz#1204353 + Resolves: rhbz#1204888 + Resolves: rhbz#1206943 + +* Tue Mar 17 2015 Peter Jones - 8.37-1 +- Update to 8.37 +- Fix test case from 8.35 on ppc64 + Resolves: rhbz#1202876 + +* Thu Nov 13 2014 Peter Jones - 8.35-9 +- Disable "make check" on arm builds; right now the test suite is broken + there and raises false positives constantly. + +* Mon Oct 27 2014 Peter Jones - 8.35-8 +- Treat kernel and kernel-core as identical in terms of --make-default + Resolves: rhbz#1141414 + +* Thu Oct 16 2014 Peter Jones - 8.35-7 +- Revert "debug" image creation for now + Resolves: rhbz#1153410 +- Fix minor quoting errors in dtbdir code + Resolves: rhbz#1088933 + +* Wed Oct 15 2014 Peter Jones - 8.35-6 +- Update grubby to support device tree options for arm. Again. + Resolves: rhbz#1088933 + +* Fri Sep 26 2014 Peter Jones - 8.35-5 +- See if what people are seeing in 1141414 is actually 957681 + Related: rhbz#957681 + Related: rhbz#1141414 + +* Sat Aug 16 2014 Fedora Release Engineering - 8.35-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jul 12 2014 Tom Callaway - 8.35-3 +- fix license handling + +* Sat Jun 07 2014 Fedora Release Engineering - 8.35-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Wed May 21 2014 Peter Jones - 8.35-1 +- Fix a minor test case error that causes koji builds to fail. + Related: rhbz#1096358 + +* Wed May 21 2014 Peter Jones - 8.34-1 +- Make grub2 "--copy-default --add-kernel=foo --initrd=bar" work when default + has no initrd line. + Resolves: rhbz#1099627 + Related: rhbz#1096358 + +* Tue Apr 01 2014 Peter Jones - 8.33-1 +- Fix --devtree test in new-kernel-pkg even harder (#1082318) + +* Mon Mar 31 2014 Peter Jones - 8.32-1 +- Fix --devtree test in new-kernel-pkg (#1082318) +- Fix aarch64 #define test. + +* Fri Mar 28 2014 Peter Jones - 8.31-1 +- Update to 8.31 +- Fold in patches from Fedora and RHEL 7 trees + +* Mon Jan 20 2014 Lubomir Rintel - 8.28-2 +- Fix extlinux default + +* Fri Aug 02 2013 Peter Jones - 8.28-1 +- More work on grub's "saved_entry" system. + Resolves: rhbz#768106 + Resolves: rhbz#736188 + +* Tue Jul 30 2013 Peter Jones - 8.27-1 +- Make grubby understand grub's "saved_entry" system + Resolves: rhbz#768106 + Resolves: rhbz#736188 +- BuildRequire grub2 on appropriate platforms, for the test suite. + +* Fri Jun 07 2013 Dennis Gilmore - 8.26-2 +- add patch to update extlinux.conf file on arm if it exists + +* Fri May 10 2013 Peter Jones - 8.26-1 +- Conditionally call arm-boot-config's boot.scr generator if available + Resolves: rhbz#952428 + +* Tue Apr 09 2013 Peter Jones - 8.25-1 +- Error instead of segfaulting if we can't find any working config + Resolves: rhbz#912873 + Resolves: rhbz#751608 + +* Tue Mar 19 2013 Peter Jones - 8.24-1 +- Fix module remove code from Harald (#923441) + +* Mon Mar 11 2013 Peter Jones - 8.23-1 +- Update to 8.23 +- Fix empty root device in case of an empty /etc/fstab (lemenkov) +- General refactoring and cleanup (harald) +- Don't clean up modules.* so aggressively (harald) + +* Wed Feb 20 2013 Peter Jones - 8.22-3 +- Add --debug style logging (for both success and failures) to /var/log/grubby + +* Thu Feb 14 2013 Fedora Release Engineering - 8.22-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Fri Jan 04 2013 Peter Jones - 8.22-1 +- Revert test case for rhbz#742885 - it's a work in progress that isn't + ready yet. + +* Fri Jan 04 2013 Peter Jones - 8.21-1 +- Use systemd vconsole.conf and locale.conf if present + Resolves rhbz#881908 +- Avoid unnecessary stat calls (from Ville Skyttä) + Resolves rhbz#741135 +- Spelling fixes (Ville Skyttä) +- Add a test case for rhbz#742885 +- Handle case-insensitive extlinux config files properly (from Johannes Weiner) + +* Tue Oct 02 2012 Peter Jones - 8.20-1 +- Handle linuxefi initrd and removal correctly. + Resolves: rhbz#859285 + +* Wed Sep 26 2012 Peter Jones - 8.19-1 +- Don't accidentally migrate from linuxefi back to linux + Related: rhbz#859285 + +* Fri Sep 21 2012 Peter Jones - 8.18-1 +- Change the way the kernel load address is determined for ARM U-Boot. + +* Wed Aug 08 2012 Peter Jones - 8.17-1 +- Update to 8.17 +- Fixes a "make test" failure. + +* Wed Aug 08 2012 Peter Jones - 8.16-1 +- Update to 8.16 +- Handle "linuxefi" directive on grub2/uefi machines. + +* Thu Jul 19 2012 Fedora Release Engineering - 8.15-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Mon Jun 25 2012 Peter Jones - 8.15-1 +- Update to 8.15 +- Revert dirname change from 8.13; it was wrong. + +* Thu Jun 14 2012 Peter Jones - 8.14-1 +- Update to 8.14 to fix a build problem. + +* Thu Jun 14 2012 Peter Jones - 8.13-1 +- Update to 8.13 +- Add some more ARM tweaks (dmartin) +- Better support for other distros (crosa) + +* Tue Jun 12 2012 Peter Jones - 8.12-2 +- Support UBOOT_IMGADDR override on ARM (blc) + +* Thu May 31 2012 Peter Jones - 8.12-1 +- Update to 8.12 +- Preserve trailing indentation when splitting line elements (mads) + Resolves: rhbz#742720 +- Pick last device mounted on / (pjones,bcl) + Related: rhbz#820340 + Related: rhbz#820351 + +* Wed Mar 21 2012 Peter Jones - 8.11-1 +- Update to 8.11 + Resolves: rhbz#805310 + +* Thu Mar 15 2012 Peter Jones - 8.10-1 +- Update to 8.10 +- Use "isquote" where appropriate +- Make --remove-kenrel support titles in grub2 (jianzhong.huang) +- Use grub2 if it's there on ppc. + +* Fri Mar 02 2012 Peter Jones - 8.9-1 +- Refactor grub2 title extraction, making it a function (Cleber Rosa) +- Include prefix when printing kernel information (Cleber Rosa) +- Implement support for "default saved" for grub2 (Cleber Rosa) +- Try to display title when printing information with '--info' (Cleber Rosa) +- new-kernel-pkg fails to find U-Boot. (D. Marlin) +- Add support to new-kernel-pkg to recognize ARCH == armv5tel needed for Kir + (D.Marlin) +- Include a / when one is missing in paths (#769641) +- Fix hard coded paths so kernel's "make install" will DTRT. +- Fix endswith() to correctly test its input for validity. + +* Tue Feb 07 2012 Dennis Gilmore - 8.8-3 +- add uboot-tools requires on arm arches +- add uboot config file on arm arches + +* Fri Jan 13 2012 Fedora Release Engineering - 8.8-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Dec 20 2011 Peter Jones - 8.8-1 +- Fix test cases from 8.7 to work on a system without /boot mounted. + +* Tue Dec 20 2011 Peter Jones - 8.7-1 +- Add a --debug to try to help diagnose "No suitable template". (sandeen,pjones) + +* Mon Dec 19 2011 Peter Jones - 8.6-1 +- Fix a "make test" errors introduced in 8.4-1 + +* Sat Dec 17 2011 Peter Jones - 8.5-1 +- Don't hardcode dracut path + Resolves: #768645 + +* Thu Dec 08 2011 Adam Williamson - 8.4-1 +- Update to 8.4: + + fix Loading... line for updated kernels + + Add new '--default-title' feature + + Add new '--default-index' feature + + add feature for testing the output of a grubby command + + Fix detection when comparing stage1 to MBR + + do not link against glib-2.0 + + Don't crash if grubConfig not found + + Adding extlinux support for new-kernel-pkg + + Look for Debian / Ubuntu grub config files (#703260) + + Make grubby recognize Ubuntu's spin of Grub2 (#703260) + +* Thu Sep 29 2011 Peter Jones - 8.3-1 +- Fix new-kernel-pkg invocation of grubby for grub (patch from Mads Kiilerich) + Resolves: rhbz#725185 + +* Wed Sep 14 2011 Peter Jones - 8.2-1 +- Fixes for xen (from Michael Petullo) + Resolves: rhbz#658387 + +* Fri Jul 22 2011 Peter Jones - 8.1-1 +- Update to 8.1 +- Fix miss-spelled variable name in new-kernel-pkg + +* Thu Jul 21 2011 Peter Jones - 8.0-1 +- Add support for grub2. + +* Tue Jun 07 2011 Brian C. Lane - 7.0.18-1 +- Bump version to 7.0.18 (bcl) +- Fixup new-kernel-pkg errors (#711493) (bcl) + +* Mon Jun 06 2011 Peter Jones - 7.0.17-1 +- Fix references to wrong program name in new-kernel-pkg.8 + Resolves: rhbz#663981 + +* Wed Feb 09 2011 Fedora Release Engineering - 7.0.16-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Mon Jan 24 2011 Karsten Hopp 7.0.16-2 +- add BR utils-linux-ng for getopt + +* Tue Jul 13 2010 Brian C. Lane - 7.0.16-1 +- Update to 7.0.16 +- Add patch to check the return value of getuuidbydev +- Resolves: rhbz#592294 + +* Wed Apr 14 2010 Peter Jones - 7.0.15-1 +- Update to 7.0.15 +- Add man pages for installkernel and new-kernel-pkg + Resolves: rhbz#529333 + +* Wed Apr 14 2010 Peter Jones - 7.0.14-1 +- Update to 7.0.14 + +* Thu Feb 11 2010 Peter Jones - 7.0.13-1 +- Strip boot partition prefix from initrd path if present during --update. + Related: rhbz#557922 +- add host only support for local kernel compiles (airlied) + +* Mon Feb 08 2010 Peter Jones - 7.0.12-1 +- compare rootdev using uuid instead of stat, for better btrfs support (josef) + Resolves: rhbz#530108 + +* Mon Feb 08 2010 Peter Jones - 7.0.11-1 +- Make it possible to update the initrd without any other change. + Related: rhbz#557922 + +* Fri Feb 05 2010 Peter Jones - 7.0.10-1 +- Make --update able to add an initramfs. + Related: rhbz#557922 + +* Mon Nov 30 2009 Peter Jones - 7.0.9-3 +- Use s390utils-base as the s390 dep, not s390utils + Related: rhbz#540565 + +* Tue Nov 24 2009 Peter Jones - 7.0.9-2 +- Add s390utils dep when on s390, since new-kernel-package needs it. + Resolves: rhbz#540565 + +* Fri Oct 30 2009 Peter Jones - 7.0.9-1 +- Add support for dracut to installkernel (notting) + +* Thu Oct 1 2009 Hans de Goede - 7.0.8-1 +- Stop using nash + +* Fri Sep 11 2009 Hans de Goede - 7.0.7-1 +- Remove writing rd_plytheme=$theme to kernel args in dracut mode (hansg) +- Add a couple of test cases for extra initrds (rstrode) +- Allow tmplLine to be NULL in getInitrdVal (rstrode) + +* Fri Sep 11 2009 Peter Jones - 7.0.6-1 +- Fix test case breakage from 7.0.5 (rstrode) + +* Fri Sep 11 2009 Peter Jones - 7.0.5-1 +- Add support for plymouth as a second initrd. (rstrode) + Resolves: rhbz#520515 + +* Wed Sep 09 2009 Hans de Goede - 7.0.4-1 +- Add --dracut cmdline argument for %%post generation of dracut initrd + +* Wed Aug 26 2009 Hans de Goede - 7.0.3-1 +- Silence error when no /etc/sysconfig/keyboard (#517187) + +* Fri Aug 7 2009 Hans de Goede - 7.0.2-1 +- Add --add-dracut-args new-kernel-pkg cmdline option + +* Fri Jul 24 2009 Fedora Release Engineering - 7.0.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Fri Jul 17 2009 Jeremy Katz - 7.0.1-1 +- Fix blkid usage (#124246) + +* Wed Jun 24 2009 Jeremy Katz - 7.0-1 +- BR libblkid-devel now instead of e2fsprogs-devel +- Add bits to switch to using dracut for new-kernel-pkg + +* Wed Jun 3 2009 Jeremy Katz - 6.0.86-2 +- add instructions for checking out from git + +* Tue Jun 2 2009 Jeremy Katz - 6.0.86-1 +- initial build after splitting out from mkinitrd +