Hello community,
here is the log from the commit of package grub2 for openSUSE:Factory checked in at 2014-08-30 16:03:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/grub2 (Old)
and /work/SRC/openSUSE:Factory/.grub2.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "grub2"
Changes:
--------
--- /work/SRC/openSUSE:Factory/grub2/grub2.changes 2014-08-15 09:55:43.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.grub2.new/grub2.changes 2014-08-30 16:04:12.000000000 +0200
@@ -1,0 +2,41 @@
+Wed Aug 27 07:53:35 UTC 2014 - schwab@suse.de
+
+- aarch64-reloc.patch: replace with upstream solution
+
+-------------------------------------------------------------------
+Mon Aug 25 03:10:18 UTC 2014 - mchang@suse.com
+
+- remove unused patch, which's supersceded by new snapper rollback
+ support patches
+ * 0001-script-provide-overridable-root-by-subvol.patch
+ * 0002-script-create-menus-for-btrfs-snapshot.patch
+
+-------------------------------------------------------------------
+Fri Aug 22 10:05:13 UTC 2014 - mchang@suse.com
+
+- fix openqa boot error on separate boot partition
+ * refresh grub2-btrfs-05-grub2-mkconfig.patch
+
+-------------------------------------------------------------------
+Thu Aug 21 06:10:07 UTC 2014 - mchang@suse.com
+
+- update snapper plugin for rollback support
+ * refresh grub2-snapper-plugin.sh
+
+-------------------------------------------------------------------
+Fri Aug 15 07:55:54 UTC 2014 - mchang@suse.com
+
+- snapper rollback support patches.
+- rename patch
+ * 0002-btrfs-add-ability-to-boot-from-subvolumes.patch to
+ grub2-btrfs-01-add-ability-to-boot-from-subvolumes.patch
+ * 0004-btrfs-export-subvolume-envvars.patch to
+ grub2-btrfs-02-export-subvolume-envvars.patch
+- added patches
+ * grub2-btrfs-03-follow_default.patch
+ * grub2-btrfs-04-grub2-install.patch
+ * grub2-btrfs-05-grub2-mkconfig.patch
+- remove patch
+ * 0003-cmdline-add-envvar-loader_cmdline_append.patch
+
+-------------------------------------------------------------------
Old:
----
0001-script-provide-overridable-root-by-subvol.patch
0002-btrfs-add-ability-to-boot-from-subvolumes.patch
0002-script-create-menus-for-btrfs-snapshot.patch
0003-cmdline-add-envvar-loader_cmdline_append.patch
0004-btrfs-export-subvolume-envvars.patch
New:
----
grub2-btrfs-01-add-ability-to-boot-from-subvolumes.patch
grub2-btrfs-02-export-subvolume-envvars.patch
grub2-btrfs-03-follow_default.patch
grub2-btrfs-04-grub2-install.patch
grub2-btrfs-05-grub2-mkconfig.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ grub2.spec ++++++
--- /var/tmp/diff_new_pack.jibj9k/_old 2014-08-30 16:04:14.000000000 +0200
+++ /var/tmp/diff_new_pack.jibj9k/_new 2014-08-30 16:04:14.000000000 +0200
@@ -151,11 +151,11 @@
Patch41: grub2-vbe-blacklist-preferred-1440x900x32.patch
Patch42: grub2-btrfs-fix-incorrect-address-reference.patch
# Btrfs snapshot booting related patches
-Patch101: 0002-btrfs-add-ability-to-boot-from-subvolumes.patch
-Patch102: 0003-cmdline-add-envvar-loader_cmdline_append.patch
-Patch103: 0004-btrfs-export-subvolume-envvars.patch
-Patch110: 0001-script-provide-overridable-root-by-subvol.patch
-Patch111: 0002-script-create-menus-for-btrfs-snapshot.patch
+Patch101: grub2-btrfs-01-add-ability-to-boot-from-subvolumes.patch
+Patch102: grub2-btrfs-02-export-subvolume-envvars.patch
+Patch103: grub2-btrfs-03-follow_default.patch
+Patch104: grub2-btrfs-04-grub2-install.patch
+Patch105: grub2-btrfs-05-grub2-mkconfig.patch
# PowerPC LE support
Patch201: grub2-ppc64le-01-Add-Little-Endian-support-for-Power64-to-the-build.patch
Patch202: grub2-ppc64le-02-Build-grub-as-O1-until-we-add-savegpr-and-restgpr-ro.patch
@@ -354,8 +354,8 @@
%patch101 -p1
%patch102 -p1
%patch103 -p1
-%patch110 -p1
-%patch111 -p1
+%patch104 -p1
+%patch105 -p1
%patch201 -p1
%patch202 -p1
%patch203 -p1
++++++ aarch64-reloc.patch ++++++
--- /var/tmp/diff_new_pack.jibj9k/_old 2014-08-30 16:04:14.000000000 +0200
+++ /var/tmp/diff_new_pack.jibj9k/_new 2014-08-30 16:04:14.000000000 +0200
@@ -1,56 +1,27 @@
-From f472bc5ac54e72eb09b0606f588085af504d754b Mon Sep 17 00:00:00 2001
-From: Andreas Schwab
-Date: Tue, 12 Aug 2014 10:42:43 +0200
-Subject: [PATCH] Support R_AARCH64_PREL32 relocation
+From 668add258ff7ffcfdc2c501fe5eb32e53c69b6f4 Mon Sep 17 00:00:00 2001
+From: Andrey Borzenkov
+Date: Mon, 30 Dec 2013 12:56:19 +0000
+Subject: [PATCH] strip .eh_frame section from arm64-efi kernel
- * include/grub/elf.h (R_AARCH64_PREL32): Define.
- * util/grub-mkimagexx.c (make_reloc_section): Handle it.
- (relocate_addresses): Likewise.
+Fixes grub-mkimage error "relocation 0x105 is not implemented yet."
---
- include/grub/elf.h | 1 +
- util/grub-mkimagexx.c | 10 ++++++++++
- 2 files changed, 11 insertions(+)
+ ChangeLog | 4 ++++
+ grub-core/Makefile.core.def | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
-diff --git a/include/grub/elf.h b/include/grub/elf.h
-index caa7963..836b304 100644
---- a/include/grub/elf.h
-+++ b/include/grub/elf.h
-@@ -2070,6 +2070,7 @@ typedef Elf32_Addr Elf32_Conflict;
- #define R_AARCH64_ABS32 258 /* Direct 32 bit. */
- #define R_AARCH64_JUMP26 282 /* 26-bit relative. */
- #define R_AARCH64_CALL26 283 /* 26-bit relative. */
-+#define R_AARCH64_PREL32 261 /* 32-bit pc-relative. */
- #define R_AARCH64_COPY 1024 /* Copy symbol at runtime. */
- #define R_AARCH64_GLOB_DAT 1025 /* Create GOT entry. */
- #define R_AARCH64_JUMP_SLOT 1026 /* Create PLT entry. */
-diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c
-index 0a1ac9e..376dc2d 100644
---- a/util/grub-mkimagexx.c
-+++ b/util/grub-mkimagexx.c
-@@ -836,6 +836,15 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections,
- *target = grub_host_to_target64 (grub_target_to_host64 (*target) + sym_addr);
- }
- break;
-+ case R_AARCH64_PREL32:
-+ {
-+ grub_uint32_t *t32 = (grub_uint32_t *) target;
-+ *t32 = grub_host_to_target64 (grub_target_to_host32 (*t32)
-+ + sym_addr
-+ - target_section_addr - offset
-+ - image_target->vaddr_offset);
-+ break;
-+ }
- case R_AARCH64_JUMP26:
- case R_AARCH64_CALL26:
- {
-@@ -1197,6 +1206,7 @@ SUFFIX (make_reloc_section) (Elf_Ehdr *e, void **out,
- }
- break;
- /* Relative relocations do not require fixup entries. */
-+ case R_AARCH64_PREL32:
- case R_AARCH64_CALL26:
- case R_AARCH64_JUMP26:
- break;
+diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
+index c916246..42443bc 100644
+--- a/grub-core/Makefile.core.def
++++ b/grub-core/Makefile.core.def
+@@ -66,7 +66,7 @@ kernel = {
+ arm_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
+
+ arm64_efi_ldflags = '-Wl,-r,-d';
+- arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
++ arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame';
+
+ i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
+ i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
--
-2.0.4
+2.1.0
++++++ grub2-btrfs-01-add-ability-to-boot-from-subvolumes.patch ++++++
++++ 696 lines (skipped)
++++++ grub2-btrfs-02-export-subvolume-envvars.patch ++++++
From: Michael Chang
Subject: export btrfs_subvol and btrfs_subvolid
We should export btrfs_subvol and btrfs_subvolid to have both visible
to subsidiary configuration files loaded using configfile.
Signed-off-by: Michael Chang
Index: grub-2.00/grub-core/fs/btrfs.c
===================================================================
--- grub-2.00.orig/grub-core/fs/btrfs.c
+++ grub-2.00/grub-core/fs/btrfs.c
@@ -2252,6 +2252,8 @@ GRUB_MOD_INIT (btrfs)
subvol_set_env);
grub_register_variable_hook ("btrfs_subvolid", subvolid_get_env,
subvolid_set_env);
+ grub_env_export ("btrfs_subvol");
+ grub_env_export ("btrfs_subvolid");
}
GRUB_MOD_FINI (btrfs)
++++++ grub2-btrfs-03-follow_default.patch ++++++
Index: grub-2.02~beta2/grub-core/fs/btrfs.c
===================================================================
--- grub-2.02~beta2.orig/grub-core/fs/btrfs.c
+++ grub-2.02~beta2/grub-core/fs/btrfs.c
@@ -913,6 +913,7 @@ grub_btrfs_mount (grub_device_t dev)
{
struct grub_btrfs_data *data;
grub_err_t err;
+ const char *relpath = grub_env_get ("btrfs_relative_path");
if (!dev->disk)
{
@@ -943,11 +944,14 @@ grub_btrfs_mount (grub_device_t dev)
data->devices_attached[0].dev = dev;
data->devices_attached[0].id = data->sblock.this_device.device_id;
- err = btrfs_handle_subvol (data);
- if (err)
+ if (relpath && (relpath[0] == '1' || relpath[0] == 'y'))
{
- grub_free (data);
- return NULL;
+ err = btrfs_handle_subvol (data);
+ if (err)
+ {
+ grub_free (data);
+ return NULL;
+ }
}
return data;
@@ -1407,24 +1411,39 @@ find_path (struct grub_btrfs_data *data,
grub_size_t allocated = 0;
struct grub_btrfs_dir_item *direl = NULL;
struct grub_btrfs_key key_out;
+ int follow_default;
const char *ctoken;
grub_size_t ctokenlen;
char *path_alloc = NULL;
char *origpath = NULL;
unsigned symlinks_max = 32;
+ const char *relpath = grub_env_get ("btrfs_relative_path");
+ follow_default = 0;
origpath = grub_strdup (path);
if (!origpath)
return grub_errno;
- if (data->fs_tree)
+ if (relpath && (relpath[0] == '1' || relpath[0] == 'y'))
{
- *type = GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY;
- *tree = data->fs_tree;
- /* This is a tree root, so everything starts at objectid 256 */
- key->object_id = grub_cpu_to_le64_compile_time (GRUB_BTRFS_OBJECT_ID_CHUNK);
- key->type = GRUB_BTRFS_ITEM_TYPE_DIR_ITEM;
- key->offset = 0;
+ if (data->fs_tree)
+ {
+ *type = GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY;
+ *tree = data->fs_tree;
+ /* This is a tree root, so everything starts at objectid 256 */
+ key->object_id = grub_cpu_to_le64_compile_time (GRUB_BTRFS_OBJECT_ID_CHUNK);
+ key->type = GRUB_BTRFS_ITEM_TYPE_DIR_ITEM;
+ key->offset = 0;
+ }
+ else
+ {
+ *type = GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY;
+ *tree = data->sblock.root_tree;
+ key->object_id = data->sblock.root_dir_objectid;
+ key->type = GRUB_BTRFS_ITEM_TYPE_DIR_ITEM;
+ key->offset = 0;
+ follow_default = 1;
+ }
}
else
{
@@ -1435,15 +1454,23 @@ find_path (struct grub_btrfs_data *data,
while (1)
{
- while (path[0] == '/')
- path++;
- if (!path[0])
- break;
- slash = grub_strchr (path, '/');
- if (!slash)
- slash = path + grub_strlen (path);
- ctoken = path;
- ctokenlen = slash - path;
+ if (!follow_default)
+ {
+ while (path[0] == '/')
+ path++;
+ if (!path[0])
+ break;
+ slash = grub_strchr (path, '/');
+ if (!slash)
+ slash = path + grub_strlen (path);
+ ctoken = path;
+ ctokenlen = slash - path;
+ }
+ else
+ {
+ ctoken = "default";
+ ctokenlen = sizeof ("default") - 1;
+ }
if (*type != GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY)
{
@@ -1454,7 +1481,9 @@ find_path (struct grub_btrfs_data *data,
if (ctokenlen == 1 && ctoken[0] == '.')
{
- path = slash;
+ if (!follow_default)
+ path = slash;
+ follow_default = 0;
continue;
}
if (ctokenlen == 2 && ctoken[0] == '.' && ctoken[1] == '.')
@@ -1485,8 +1514,9 @@ find_path (struct grub_btrfs_data *data,
*type = GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY;
key->object_id = key_out.offset;
- path = slash;
-
+ if (!follow_default)
+ path = slash;
+ follow_default = 0;
continue;
}
@@ -1555,7 +1585,9 @@ find_path (struct grub_btrfs_data *data,
return err;
}
- path = slash;
+ if (!follow_default)
+ path = slash;
+ follow_default = 0;
if (cdirel->type == GRUB_BTRFS_DIR_ITEM_TYPE_SYMLINK)
{
struct grub_btrfs_inode inode;
@@ -1605,14 +1637,26 @@ find_path (struct grub_btrfs_data *data,
path = path_alloc = tmp;
if (path[0] == '/')
{
- if (data->fs_tree)
+ if (relpath && (relpath[0] == '1' || relpath[0] == 'y'))
{
- *type = GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY;
- *tree = data->fs_tree;
- /* This is a tree root, so everything starts at objectid 256 */
- key->object_id = grub_cpu_to_le64_compile_time (GRUB_BTRFS_OBJECT_ID_CHUNK);
- key->type = GRUB_BTRFS_ITEM_TYPE_DIR_ITEM;
- key->offset = 0;
+ if (data->fs_tree)
+ {
+ *type = GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY;
+ *tree = data->fs_tree;
+ /* This is a tree root, so everything starts at objectid 256 */
+ key->object_id = grub_cpu_to_le64_compile_time (GRUB_BTRFS_OBJECT_ID_CHUNK);
+ key->type = GRUB_BTRFS_ITEM_TYPE_DIR_ITEM;
+ key->offset = 0;
+ }
+ else
+ {
+ *type = GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY;
+ *tree = data->sblock.root_tree;
+ key->object_id = data->sblock.root_dir_objectid;
+ key->type = GRUB_BTRFS_ITEM_TYPE_DIR_ITEM;
+ key->offset = 0;
+ follow_default = 1;
+ }
}
else
{
@@ -2268,6 +2312,7 @@ GRUB_MOD_INIT (btrfs)
subvolid_set_env);
grub_env_export ("btrfs_subvol");
grub_env_export ("btrfs_subvolid");
+ grub_env_export ("btrfs_relative_path");
}
GRUB_MOD_FINI (btrfs)
++++++ grub2-btrfs-04-grub2-install.patch ++++++
Index: grub-2.02~beta2/grub-core/osdep/unix/config.c
===================================================================
--- grub-2.02~beta2.orig/grub-core/osdep/unix/config.c
+++ grub-2.02~beta2/grub-core/osdep/unix/config.c
@@ -82,6 +82,19 @@ grub_util_load_config (struct grub_util_
if (v)
cfg->grub_distributor = xstrdup (v);
+ v = getenv ("SUSE_BTRFS_SNAPSHOT_BOOTING");
+ if (v)
+ {
+ if (grub_strncmp(v, "true", sizeof ("true") - 1) == 0)
+ {
+ cfg->is_suse_btrfs_snapshot_enabled = 1;
+ }
+ else
+ {
+ cfg->is_suse_btrfs_snapshot_enabled = 0;
+ }
+ }
+
cfgfile = grub_util_get_config_filename ();
if (!grub_util_is_regular (cfgfile))
return;
@@ -105,8 +118,8 @@ grub_util_load_config (struct grub_util_
*ptr++ = *iptr;
}
- strcpy (ptr, "'; printf \"GRUB_ENABLE_CRYPTODISK=%s\\nGRUB_DISTRIBUTOR=%s\\n\", "
- "\"$GRUB_ENABLE_CRYPTODISK\", \"$GRUB_DISTRIBUTOR\"");
+ strcpy (ptr, "'; printf \"GRUB_ENABLE_CRYPTODISK=%s\\nGRUB_DISTRIBUTOR=%s\\nSUSE_BTRFS_SNAPSHOT_BOOTING=%s\\n\", "
+ "\"$GRUB_ENABLE_CRYPTODISK\", \"$GRUB_DISTRIBUTOR\", \"$SUSE_BTRFS_SNAPSHOT_BOOTING\"");
argv[2] = script;
argv[3] = '\0';
Index: grub-2.02~beta2/include/grub/emu/config.h
===================================================================
--- grub-2.02~beta2.orig/include/grub/emu/config.h
+++ grub-2.02~beta2/include/grub/emu/config.h
@@ -37,6 +37,7 @@ struct grub_util_config
{
int is_cryptodisk_enabled;
char *grub_distributor;
+ int is_suse_btrfs_snapshot_enabled;
};
void
Index: grub-2.02~beta2/util/config.c
===================================================================
--- grub-2.02~beta2.orig/util/config.c
+++ grub-2.02~beta2/util/config.c
@@ -42,6 +42,16 @@ grub_util_parse_config (FILE *f, struct
cfg->is_cryptodisk_enabled = 1;
continue;
}
+ if (grub_strncmp (ptr, "SUSE_BTRFS_SNAPSHOT_BOOTING=",
+ sizeof ("SUSE_BTRFS_SNAPSHOT_BOOTING=") - 1) == 0)
+ {
+ ptr += sizeof ("SUSE_BTRFS_SNAPSHOT_BOOTING=") - 1;
+ if (*ptr == '"' || *ptr == '\'')
+ ptr++;
+ if (grub_strncmp(ptr, "true", sizeof ("true") - 1) == 0)
+ cfg->is_suse_btrfs_snapshot_enabled = 1;
+ continue;
+ }
if (grub_strncmp (ptr, "GRUB_DISTRIBUTOR=",
sizeof ("GRUB_DISTRIBUTOR=") - 1) == 0)
{
Index: grub-2.02~beta2/util/grub-install.c
===================================================================
--- grub-2.02~beta2.orig/util/grub-install.c
+++ grub-2.02~beta2/util/grub-install.c
@@ -816,6 +816,8 @@ fill_core_services (const char *core_ser
free (sysv_plist);
}
+extern int use_relative_path_on_btrfs;
+
int
main (int argc, char *argv[])
{
@@ -849,6 +851,9 @@ main (int argc, char *argv[])
grub_util_load_config (&config);
+ if (config.is_suse_btrfs_snapshot_enabled)
+ use_relative_path_on_btrfs = 1;
+
if (!bootloader_id && config.grub_distributor)
{
char *ptr;
@@ -1334,6 +1339,16 @@ main (int argc, char *argv[])
fprintf (load_cfg_f, "set debug='%s'\n",
debug_image);
}
+
+ if (config.is_suse_btrfs_snapshot_enabled
+ && grub_strncmp(grub_fs->name, "btrfs", sizeof ("btrfs") - 1) == 0)
+ {
+ if (!load_cfg_f)
+ load_cfg_f = grub_util_fopen (load_cfg, "wb");
+ have_load_cfg = 1;
+ fprintf (load_cfg_f, "set btrfs_relative_path='y'\n");
+ }
+
char *prefix_drive = NULL;
char *install_drive = NULL;
Index: grub-2.02~beta2/grub-core/osdep/linux/getroot.c
===================================================================
--- grub-2.02~beta2.orig/grub-core/osdep/linux/getroot.c
+++ grub-2.02~beta2/grub-core/osdep/linux/getroot.c
@@ -364,6 +364,7 @@ get_btrfs_fs_prefix (const char *mount_p
return ret;
}
+int use_relative_path_on_btrfs = 0;
char **
grub_find_root_devices_from_mountinfo (const char *dir, char **relroot)
@@ -502,6 +503,12 @@ grub_find_root_devices_from_mountinfo (c
{
ret = grub_find_root_devices_from_btrfs (dir);
fs_prefix = get_btrfs_fs_prefix (entries[i].enc_path);
+ if (use_relative_path_on_btrfs)
+ {
+ if (fs_prefix)
+ free (fs_prefix);
+ fs_prefix = xstrdup ("/");
+ }
}
if (!ret)
{
Index: grub-2.02~beta2/util/grub-mkrelpath.c
===================================================================
--- grub-2.02~beta2.orig/util/grub-mkrelpath.c
+++ grub-2.02~beta2/util/grub-mkrelpath.c
@@ -40,9 +40,12 @@ struct arguments
};
static struct argp_option options[] = {
+ {"relative", 'r', 0, 0, "use relative path on btrfs", 0},
{ 0, 0, 0, 0, 0, 0 }
};
+extern int use_relative_path_on_btrfs;
+
static error_t
argp_parser (int key, char *arg, struct argp_state *state)
{
@@ -52,6 +55,9 @@ argp_parser (int key, char *arg, struct
switch (key)
{
+ case 'r':
+ use_relative_path_on_btrfs = 1;
+ break;
case ARGP_KEY_ARG:
if (state->arg_num == 0)
arguments->pathname = xstrdup (arg);
++++++ grub2-btrfs-05-grub2-mkconfig.patch ++++++
---
util/grub-mkconfig.in | 3 ++-
util/grub-mkconfig_lib.in | 4 ++++
util/grub.d/00_header.in | 23 ++++++++++++++++++++++-
util/grub.d/10_linux.in | 11 ++++++++++-
util/grub.d/20_linux_xen.in | 4 ++++
5 files changed, 42 insertions(+), 3 deletions(-)
Index: grub-2.02~beta2/util/grub-mkconfig_lib.in
===================================================================
--- grub-2.02~beta2.orig/util/grub-mkconfig_lib.in
+++ grub-2.02~beta2/util/grub-mkconfig_lib.in
@@ -49,7 +49,11 @@ grub_warn ()
make_system_path_relative_to_its_root ()
{
+ if [ "x${SUSE_BTRFS_SNAPSHOT_BOOTING}" = "xtrue" ] ; then
+ "${grub_mkrelpath}" -r "$1"
+ else
"${grub_mkrelpath}" "$1"
+ fi
}
is_path_readable_by_grub ()
Index: grub-2.02~beta2/util/grub.d/00_header.in
===================================================================
--- grub-2.02~beta2.orig/util/grub.d/00_header.in
+++ grub-2.02~beta2/util/grub.d/00_header.in
@@ -27,6 +27,14 @@ export TEXTDOMAINDIR="@localedir@"
. "@datadir@/@PACKAGE@/grub-mkconfig_lib"
+if [ "x${SUSE_BTRFS_SNAPSHOT_BOOTING}" = "xtrue" ] &&
+ [ "x${GRUB_FS}" = "xbtrfs" ] ; then
+ cat </dev/null || true`
Index: grub-2.02~beta2/util/grub.d/20_linux_xen.in
===================================================================
--- grub-2.02~beta2.orig/util/grub.d/20_linux_xen.in
+++ grub-2.02~beta2/util/grub.d/20_linux_xen.in
@@ -67,10 +67,14 @@ fi
case x"$GRUB_FS" in
xbtrfs)
+ if [ "x${SUSE_BTRFS_SNAPSHOT_BOOTING}" = "xtrue" ]; then
+ GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX} \${extra_cmdline}"
+ else
rootsubvol="`make_system_path_relative_to_its_root /`"
rootsubvol="${rootsubvol#/}"
if [ "x${rootsubvol}" != x ]; then
GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
+ fi
fi;;
xzfs)
rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
++++++ grub2-snapper-plugin.sh ++++++
--- /var/tmp/diff_new_pack.jibj9k/_old 2014-08-30 16:04:15.000000000 +0200
+++ /var/tmp/diff_new_pack.jibj9k/_new 2014-08-30 16:04:15.000000000 +0200
@@ -18,117 +18,148 @@
grub_mkconfig="/usr/sbin/grub2-mkconfig"
grub_mkrelpath="/usr/bin/grub2-mkrelpath"
+grub_script_check="/usr/bin/grub2-script-check"
grub_setting="/etc/default/grub"
grub_cfg="/boot/grub2/grub.cfg"
grub_snapshot_cfg="/boot/grub2/snapshot_submenu.cfg"
-snapshot_submenu_name="snapshot_submenu.cfg"
-snapshot_menuentry_name="snapshot_menuentry.cfg"
-snapshot_menuentry_cfg="boot/grub2/${snapshot_menuentry_name}"
+snapper_snapshot_path="/.snapshots"
+snapshot_submenu_name="grub-snapshot.cfg"
+snapper_snapshots_cfg="${snapper_snapshot_path}/${snapshot_submenu_name}"
+
+# add hotkeys for s390. (bnc#885668)
+hotkey=
+incr_hotkey()
+{
+ [ -n "$hotkey" ] || return
+ expr $hotkey + 1
+}
+print_hotkey()
+{
+ keys="123456789abdfgijklmnoprstuvwyz"
+ if [ -z "$hotkey" ]||[ $hotkey -eq 0 ]||[ $hotkey -gt 30 ]; then
+ return
+ fi
+ echo "--hotkey=$(expr substr $keys $hotkey 1)"
+}
-rel_root=`"$grub_mkrelpath" /`
-snapshot_submenu_refresh () {
+snapshot_submenu () {
-for s_dir in /.snapshots/*; do
+ s_dir="$1"
snapshot="${s_dir}/snapshot"
- snapper_cfg="${s_dir}/${snapshot_submenu_name}"
+ num="`basename $s_dir`"
- if [ ! -d "$snapshot" ]; then
- rm -f "${snapper_cfg}"
- rm -f "${s_dir}/${snapshot_menuentry_name}"
- continue
- fi
-
# bnc#864842 Important snapshots are not marked as such in grub2 menu
# the format is "important distribution version (kernel_version, timestamp, pre/post)"
- cfgs="${s_dir}/${snapshot_menuentry_name} ${snapshot}/${snapshot_menuentry_cfg}"
date=`xmllint --xpath '/snapshot/date/text()' "${s_dir}/info.xml" || echo ""`
- date=`echo $date | sed 's/\(.*\) \(.*\):.*/\1,\2/'`
- important=`xmllint --xpath "/snapshot/userdata[key='important']/value/text()" "${s_dir}/info.xml" || echo ""`
+ date=`echo $date | sed 's/\(.*\) \(.*\):.*/\1T\2/'`
+ important=`xmllint --xpath "/snapshot/userdata[key='important']/value/text()" "${s_dir}/info.xml" 2>/dev/null || echo ""`
stype=`xmllint --xpath '/snapshot/type/text()' "${s_dir}/info.xml" || echo ""`
- kernel_ver=`readlink /boot/vmlinuz | sed 's/vmlinuz-\([^-]*\).*/\1/'`
+ kernel_ver=`readlink ${snapshot}/boot/vmlinuz | sed -e 's/^vmlinuz-//' -e 's/-default$//'`
+ if [ -z "$kernel_ver" -a -L ${snapshot}/boot/image ]; then
+ kernel_ver=`readlink ${snapshot}/boot/image | sed -e 's/^image-//' -e 's/-default$//'`
+ fi
eval `cat ${snapshot}/etc/os-release`
- test "$important" = "yes" && important="*" || important=""
+ test "$important" = "yes" && important="*" || important=" "
test "$stype" = "single" && stype=""
- if test -n "$stype"; then
- title="${important}${NAME} $VERSION ($kernel_ver,$date,$stype)"
- else
- title="${important}${NAME} $VERSION ($kernel_ver,$date)"
+ test -z "$stype" || stype=",$stype"
+ desc=`xmllint --xpath '/snapshot/description/text()' "${s_dir}/info.xml" 2>/dev/null || echo ""`
+ #test "$desc" = "timeline" && return 1
+ test -z "$desc" || desc=",$desc"
+ title="${important}${NAME} $VERSION ($kernel_ver,$date$stype$desc)"
+
+ cat < "${grub_snapshot_cfg}.tmp"
-for s_dir in /.snapshots/*; do
+ snapshot="${s_dir}/snapshot"
- snapshot="${s_dir}/snapshot"
- snapper_cfg="${s_dir}/${snapshot_submenu_name}"
+ # list only read-only snapshot (bnc#878528)
+ if [ -w "$snapshot" ]; then
+ continue
+ fi
+ if [ -r "${s_dir}/info.xml" -a -r "${s_dir}/snapshot/boot/grub2/grub.cfg" ]; then
+ cs="${s_dir}\n${cs}"
+ fi
- if [ -f "${snapper_cfg}" ]; then
- echo "source ${rel_root}${snapper_cfg}" >>"${grub_snapshot_cfg}.tmp"
- continue
- fi
+ done
-done
+ hk=""
+ [ -z "$hotkey" ] || hk="--hotkey=s"
-cat <<EOF >"${grub_snapshot_cfg}.new"
-submenu "Bootable snapshots" {
-`sort -V "${grub_snapshot_cfg}.tmp"`
- if [ x\$snapshot_found != xtrue ]; then
- submenu "Not Found" {true}
- fi
-}
-EOF
+ for c in `echo -e "${cs}" | sort -Vr`; do
+ if ! snapshot_submenu "$c" > "${c}/${snapshot_submenu_name}"; then
+ rm -f "${c}/${snapshot_submenu_name}"
+ continue
+ fi
+ snapshot_cfg="${snapshot_cfg}
+ if [ -f "$c/${snapshot_submenu_name}"; then
+ source "$c/${snapshot_submenu_name}"
+ fi"
+ done
-if grub2-script-check "${grub_snapshot_cfg}.new"; then
- mv -f "${grub_snapshot_cfg}.new" "${grub_snapshot_cfg}"
+ cat <<EOF >"${snapper_snapshots_cfg}.new"
+if [ -z "\$extra_cmdline" ]; then
+ submenu $hk "Start bootloader from a read-only snapshot" {${snapshot_cfg}
+ if [ x\$snapshot_found != xtrue ]; then
+ submenu "Not Found" { true; }
+ fi
+ }
fi
+EOF
+
+ if ${grub_script_check} "${snapper_snapshots_cfg}.new"; then
+ mv -f "${snapper_snapshots_cfg}.new" "${snapper_snapshots_cfg}"
+ fi
}
snapshot_submenu_clean () {
- for s_dir in /.snapshots/*; do
+ for s_dir in ${snapper_snapshot_path}/*; do
- snapshot="${s_dir}/snapshot"
snapper_cfg="${s_dir}/${snapshot_submenu_name}"
if [ -f "$snapper_cfg" ]; then
rm -f "$snapper_cfg"
+ rmdir "$s_dir" 2>/dev/null || true
fi
done
+
+ if [ -f "${snapper_snapshot_path}/${snapshot_submenu_name}" ]; then
+ rm -f "${snapper_snapshot_path}/${snapshot_submenu_name}"
+ fi
+
}
set_grub_setting () {
@@ -137,17 +168,32 @@
val=$2
if grep -q "$name" "$grub_setting"; then
- sed -i -e "s/.*\($name\)=.*/\1=$val/" "$grub_setting"
+ sed -i -e "s!.*\($name\)=.*!\1=\"$val\"!" "$grub_setting"
else
- echo "$name=$val" >> "$grub_setting"
+ echo "$name=\"$val\"" >> "$grub_setting"
fi
}
-update_grub_cfg () {
+enable_grub_settings () {
+ set_grub_setting SUSE_BTRFS_SNAPSHOT_BOOTING "true"
+}
- "$grub_mkconfig" -o "$grub_cfg"
+disable_grub_settings () {
+ set_grub_setting SUSE_BTRFS_SNAPSHOT_BOOTING "false"
}
+update_grub () {
+ "${grub_mkconfig}" -o "${grub_cfg}"
+}
+
+machine=`uname -m`
+case "$machine" in
+(s390|s390x)
+ hotkey=1
+ ;;
+esac
+cmdline="$0 $* hotkey='$hotkey'"
+
# Check the arguments.
while test $# -gt 0
do
@@ -173,32 +219,20 @@
done
if [ "x${opt_enable}" = "xtrue" ]; then
-
- set_grub_setting SUSE_DISABLE_BOOTING_SNAPSHOT false
- set_grub_setting SUSE_ENABLE_CUSTOM_SNAPSHOT_SUBMENU true
- update_grub_cfg
- snapshot_submenu_refresh
- grub_snapshot_cfg_refresh
-
+ #enable_grub_settings
+ #update_grub
+ snapper_snapshots_cfg_refresh
elif [ "x${opt_enable}" = "xfalse" ]; then
-
+ #disable_grub_settings
+ update_grub
snapshot_submenu_clean
- set_grub_setting SUSE_DISABLE_BOOTING_SNAPSHOT true
- set_grub_setting SUSE_ENABLE_CUSTOM_SNAPSHOT_SUBMENU false
- update_grub_cfg
-
fi
if [ x${opt_refresh} = "xtrue" ]; then
-
- snapshot_submenu_refresh
- grub_snapshot_cfg_refresh
-
+ snapper_snapshots_cfg_refresh
fi
if [ x${opt_clean} = "xtrue" ]; then
-
snapshot_submenu_clean
- grub_snapshot_cfg_refresh
-
fi
+
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org