Compare commits

...
23 Commits
Author SHA1 Message Date
Vladimir Serbinenko 21e3cd33b6 Merge branch 'master' into next 2017-05-03 12:00:26 +02:00
Vladimir Serbinenko db77aa5ad6 Merge branch 'next' of git.sv.gnu.org:/srv/git/grub into next 2017-05-03 11:56:59 +02:00
Vladimir Serbinenko 4078fb64c9 Merge branch 'phcoder/termux' of git.sv.gnu.org:/srv/git/grub into next 2017-01-30 14:42:03 +01:00
Vladimir Serbinenko e1f9050f1a Fix -nopie/-nopie check.
We don't use lgcc_s but missing lgcc_s or another library cause test to fail.
So use -nostdlib.
Clang uses -nopie rather than -no-pie. Check both and use whichever one works.
2017-01-30 14:38:50 +01:00
Vladimir Serbinenko 0cb0bdef15 WIP: Disable hardlink test.
It doesn't wotk on termux.
2017-01-27 20:12:03 +00:00
Vladimir Serbinenko ba8f448172 WIP: disable m4_syscmd check in gnulib.
m4_syscmd uses /bin/sh which isn't available on termux.
2017-01-27 20:12:03 +00:00
Vladimir Serbinenko 6eadd976ea Don't retrieve fstime when it's not useful. 2017-01-27 20:12:02 +00:00
Vladimir Serbinenko 36a4c40abf debashify fixup 2017-01-27 20:12:01 +00:00
Vladimir Serbinenko 55d849f1f7 Support lseek64.
Android doesn't have 64-bit off_t, so use off64_t instead.
2017-01-27 20:12:00 +00:00
Vladimir Serbinenko f0cdef6ef5 Discover partial linking arguments dynamically.
clang for android doesn't work with -Wl,-r,-d without -static.
2017-01-27 20:12:00 +00:00
Vladimir Serbinenko 69743d7d1b po: Use @SHELL@ rather than /bin/sh.
/bin/sh might not exist.
2017-01-27 20:11:59 +00:00
Vladimir Serbinenko 39bb4f34be Add termux pathto dict. 2017-01-27 20:11:58 +00:00
Vladimir Serbinenko ea1aab3f2e fs-tester: make sh-compatible 2017-01-27 20:11:57 +00:00
Vladimir Serbinenko 0460bb1e46 support busybox date.
Busybox date doesn't understand weekdays in -d input,
so strip them beforehand.
2017-01-27 20:11:57 +00:00
Vladimir Serbinenko 470511748d Remove bashisms from tests.
Those tests don't actually need bash. Just use common shebang.
2017-01-27 20:11:56 +00:00
Vladimir Serbinenko eadbf47358 Use $(SHELL) rather than /bin/sh.
/bin/sh doesn't exist under termux.
2017-01-27 20:11:55 +00:00
Vladimir Serbinenko 3568b5bf80 Fix shebang for termux.
Termux doesn't have a /bin/sh. So we needto use $SHELL.
Keep /bin/sh as much as possible.
2017-01-27 20:11:54 +00:00
Vladimir Serbinenko 9ac0dca085 strtoull: Fix behaviour on chars between '9' and 'a'.
Reported by: Aaron Miller <aaronmiller@fb.com>
2016-08-10 17:49:42 +02:00
Vladimir Serbinenko b4fc7bc2fd Merge branch 'master' into next 2016-02-28 15:22:52 +01:00
Vladimir Serbinenko c4748ead11 Merge branch 'master' into next
Conflicts:
	ChangeLog-2015
	grub-core/net/drivers/ieee1275/ofnet.c
	include/grub/ieee1275/ieee1275.h
2015-02-27 01:05:08 +01:00
Paulo Flabiano Smorigo af768f8d41 Add Virtual LAN support.
This patch adds support for virtual LAN (VLAN) tagging. VLAN tagging allows
multiple VLANs in a bridged network to share the same physical network link
but maintain isolation:

http://en.wikipedia.org/wiki/IEEE_802.1Q

* grub-core/net/ethernet.c: Add check, get, and set vlan tag id.
* grub-core/net/drivers/ieee1275/ofnet.c: Get vlan tag id from bootargs.
* grub-core/net/arp.c: Add check.
* grub-core/net/ip.c: Likewise.
* include/grub/net/arp.h: Add vlantag attribute.
* include/grub/net/ip.h: Likewise.
2013-12-23 12:32:47 -02:00
Paulo Flabiano Smorigo 8ff3c31f6d Add bootargs parser for open firmware.
It enables net boot even when there is no bootp/dhcp server.

* grub-core/net/drivers/ieee1275/ofnet.c: Add grub_ieee1275_parse_bootargs and
call it at grub_ieee1275_net_config_real.
2013-12-23 12:13:48 -02:00
Paulo Flabiano Smorigo 11454e94ea Add grub_env_set_net_property function.
* grub-core/net/bootp.c: Remove set_env_limn_ro.
* grub-core/net/net.c: Add grub_env_set_net_property.
2013-12-23 12:07:31 -02:00
75 changed files with 394 additions and 234 deletions

No files matched your search

+1 -1
View File
@@ -41,7 +41,7 @@ CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version -R .MIPS.abiflags -R .ARM.exidx STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version -R .MIPS.abiflags -R .ARM.exidx
CFLAGS_MODULE = $(CFLAGS_PLATFORM) -ffreestanding CFLAGS_MODULE = $(CFLAGS_PLATFORM) -ffreestanding
LDFLAGS_MODULE = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-r,-d LDFLAGS_MODULE = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) $(TARGET_INCREMENTAL_LINK)
CPPFLAGS_MODULE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) CPPFLAGS_MODULE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM)
CCASFLAGS_MODULE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) CCASFLAGS_MODULE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
+33 -2
View File
@@ -373,7 +373,10 @@ case "$host_os" in
;; ;;
*) *)
AC_CHECK_SIZEOF(off_t) AC_CHECK_SIZEOF(off_t)
test x"$ac_cv_sizeof_off_t" = x8 || AC_MSG_ERROR([Large file support is required]);; if test x"$ac_cv_sizeof_off_t" != x8 ; then
AC_CHECK_SIZEOF(off64_t)
test x"$ac_cv_sizeof_off64_t" = x8 || AC_MSG_ERROR([Large file support is required])
fi;;
esac esac
if test x$USE_NLS = xno; then if test x$USE_NLS = xno; then
@@ -456,6 +459,16 @@ case "$build_os" in
esac esac
AC_SUBST(BUILD_EXEEXT) AC_SUBST(BUILD_EXEEXT)
# In some build environments like termux /bin/sh is not a valid
# shebang. Use $SHELL instead if it's executable and /bin/sh isn't
BUILD_SHEBANG=/bin/sh
for she in /bin/sh "$SHELL"; do
if test -x "$she" ; then
BUILD_SHEBANG="$she"
fi
done
AC_SUBST(BUILD_SHEBANG)
# For gnulib. # For gnulib.
gl_INIT gl_INIT
@@ -890,6 +903,25 @@ if test x"$target_cpu" = xsparc64 ; then
TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_mno_relax" TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_mno_relax"
fi fi
AC_CACHE_CHECK([for incremental link options], grub_cv_target_cc_incremental_link, [
grub_cv_target_cc_incremental_link=no
for cand in "-Wl,-r,-d" "-static -Wl,-r,-d"; do
#AC_LINK_IFELSE doesn't handle non-executable output correctly
echo > conftest_inclink.c
if $TARGET_CC -o /dev/null $TARGET_CFLAGS $TARGET_CPPFLAGS $TARGET_LDFLAGS -nostdlib -Werror $cand conftest_inclink.c >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
grub_cv_target_cc_incremental_link="$cand"
break
fi
done
])
if test x"$grub_cv_target_cc_incremental_link" = xno ; then
AC_MSG_ERROR([could not find incremental link options])
fi
TARGET_INCREMENTAL_LINK="$grub_cv_target_cc_incremental_link"
AC_SUBST(TARGET_INCREMENTAL_LINK)
# By default, GCC 4.4 generates .eh_frame sections containing unwind # By default, GCC 4.4 generates .eh_frame sections containing unwind
# information in some cases where it previously did not. GRUB doesn't need # information in some cases where it previously did not. GRUB doesn't need
# these and they just use up vital space. Restore the old compiler # these and they just use up vital space. Restore the old compiler
@@ -1203,7 +1235,6 @@ CFLAGS="$TARGET_CFLAGS"
grub_CHECK_PIE grub_CHECK_PIE
grub_CHECK_NO_PIE grub_CHECK_NO_PIE
grub_CHECK_NO_PIE_ONEWORD grub_CHECK_NO_PIE_ONEWORD
grub_CHECK_LINK_PIE
[# Need that, because some distributions ship compilers that include [# Need that, because some distributions ship compilers that include
# `-fPIE' or '-fpie' and '-pie' in the default specs. # `-fPIE' or '-fpie' and '-pie' in the default specs.
if [ x"$pie_possible" = xyes ]; then if [ x"$pie_possible" = xyes ]; then
+1 -1
View File
@@ -278,7 +278,7 @@ BUILT_SOURCES += symlist.h
symlist.c: symlist.h gensymlist.sh symlist.c: symlist.h gensymlist.sh
$(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) -DGRUB_SYMBOL_GENERATOR=1 symlist.h > symlist.p || (rm -f symlist.p; exit 1) $(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) -DGRUB_SYMBOL_GENERATOR=1 symlist.h > symlist.p || (rm -f symlist.p; exit 1)
cat symlist.p | /bin/sh $(srcdir)/gensymlist.sh $(top_builddir)/config.h $(KERNEL_HEADER_FILES) >$@ || (rm -f $@; exit 1) cat symlist.p | $(SHELL) $(srcdir)/gensymlist.sh $(top_builddir)/config.h $(KERNEL_HEADER_FILES) >$@ || (rm -f $@; exit 1)
rm -f symlist.p rm -f symlist.p
CLEANFILES += symlist.c CLEANFILES += symlist.c
BUILT_SOURCES += symlist.c BUILT_SOURCES += symlist.c
+12 -7
View File
@@ -49,20 +49,20 @@ kernel = {
nostrip = emu; nostrip = emu;
emu_ldflags = '-Wl,-r,-d'; emu_ldflags = '$(TARGET_INCREMENTAL_LINK)';
i386_efi_ldflags = '-Wl,-r,-d'; i386_efi_ldflags = '$(TARGET_INCREMENTAL_LINK)';
i386_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; i386_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
x86_64_efi_ldflags = '-Wl,-r,-d'; x86_64_efi_ldflags = '$(TARGET_INCREMENTAL_LINK)';
x86_64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; x86_64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
ia64_efi_cflags = '-fno-builtin -fpic -minline-int-divide-max-throughput'; ia64_efi_cflags = '-fno-builtin -fpic -minline-int-divide-max-throughput';
ia64_efi_ldflags = '-Wl,-r,-d'; ia64_efi_ldflags = '$(TARGET_INCREMENTAL_LINK)';
ia64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; ia64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
arm_efi_ldflags = '-Wl,-r,-d'; arm_efi_ldflags = '$(TARGET_INCREMENTAL_LINK)';
arm_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; arm_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
arm64_efi_ldflags = '-Wl,-r,-d'; arm64_efi_ldflags = '$(TARGET_INCREMENTAL_LINK)';
arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame'; 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_LDFLAGS)';
@@ -90,7 +90,7 @@ kernel = {
i386_qemu_cppflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)'; i386_qemu_cppflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';
emu_cflags = '$(CFLAGS_GNULIB)'; emu_cflags = '$(CFLAGS_GNULIB)';
emu_cppflags = '$(CPPFLAGS_GNULIB)'; emu_cppflags = '$(CPPFLAGS_GNULIB)';
arm_uboot_ldflags = '-Wl,-r,-d'; arm_uboot_ldflags = '$(TARGET_INCREMENTAL_LINK)';
arm_uboot_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; arm_uboot_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
i386_pc_startup = kern/i386/pc/startup.S; i386_pc_startup = kern/i386/pc/startup.S;
@@ -1961,6 +1961,11 @@ module = {
common = tests/example_functional_test.c; common = tests/example_functional_test.c;
}; };
module = {
name = strtoull_test;
common = tests/strtoull_test.c;
};
module = { module = {
name = setjmp_test; name = setjmp_test;
common = tests/setjmp_test.c; common = tests/setjmp_test.c;
+3 -3
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
set -e set -e
# Copyright (C) 2010 Free Software Foundation, Inc. # Copyright (C) 2010 Free Software Foundation, Inc.
@@ -79,9 +79,9 @@ else
for dep in $deps; do echo "char moddep_$dep[] __attribute__ ((section(\"_moddeps, _moddeps\"))) = \"$dep\";" >>$t2; done for dep in $deps; do echo "char moddep_$dep[] __attribute__ ((section(\"_moddeps, _moddeps\"))) = \"$dep\";" >>$t2; done
if test -n "$deps"; then if test -n "$deps"; then
@TARGET_CC@ @TARGET_LDFLAGS@ -ffreestanding -nostdlib -o $tmpfile2 $t1 $t2 $tmpfile -Wl,-r,-d @TARGET_CC@ @TARGET_LDFLAGS@ @TARGET_INCREMENTAL_LINK@ -ffreestanding -nostdlib -o $tmpfile2 $t1 $t2 $tmpfile
else else
@TARGET_CC@ @TARGET_LDFLAGS@ -ffreestanding -nostdlib -o $tmpfile2 $t1 $tmpfile -Wl,-r,-d @TARGET_CC@ @TARGET_LDFLAGS@ @TARGET_INCREMENTAL_LINK@ -ffreestanding -nostdlib -o $tmpfile2 $t1 $tmpfile
fi fi
rm -f $t1 $t2 $tmpfile rm -f $t1 $t2 $tmpfile
mv $tmpfile2 $tmpfile mv $tmpfile2 $tmpfile
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
set -e set -e
# Copyright (C) 2010 Free Software Foundation, Inc. # Copyright (C) 2010 Free Software Foundation, Inc.
+4 -3
View File
@@ -391,12 +391,13 @@ grub_strtoull (const char *str, char **end, int base)
unsigned long digit; unsigned long digit;
digit = grub_tolower (*str) - '0'; digit = grub_tolower (*str) - '0';
if (digit > 9) if (digit >= 'a' - '0')
{
digit += '0' - 'a' + 10; digit += '0' - 'a' + 10;
else if (digit > 9)
break;
if (digit >= (unsigned long) base) if (digit >= (unsigned long) base)
break; break;
}
found = 1; found = 1;
+2 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
# User-controllable options # User-controllable options
grub_modinfo_target_cpu=@target_cpu@ grub_modinfo_target_cpu=@target_cpu@
@@ -19,6 +19,7 @@ grub_target_cflags='@TARGET_CFLAGS@'
grub_target_cppflags='@TARGET_CPPFLAGS@' grub_target_cppflags='@TARGET_CPPFLAGS@'
grub_target_ccasflags='@TARGET_CCASFLAGS@' grub_target_ccasflags='@TARGET_CCASFLAGS@'
grub_target_ldflags='@TARGET_LDFLAGS@' grub_target_ldflags='@TARGET_LDFLAGS@'
grub_target_incremental_ldflags='@TARGET_INCREMENTAL_LINK@'
grub_cflags='@CFLAGS@' grub_cflags='@CFLAGS@'
grub_cppflags='@CPPFLAGS@' grub_cppflags='@CPPFLAGS@'
grub_ccasflags='@CCASFLAGS@' grub_ccasflags='@CCASFLAGS@'
+10 -2
View File
@@ -111,8 +111,8 @@ grub_net_arp_send_request (struct grub_net_network_level_interface *inf,
} }
grub_err_t grub_err_t
grub_net_arp_receive (struct grub_net_buff *nb, grub_net_arp_receive (struct grub_net_buff *nb, struct grub_net_card *card,
struct grub_net_card *card) grub_uint16_t *vlantag)
{ {
struct arppkt *arp_packet = (struct arppkt *) nb->data; struct arppkt *arp_packet = (struct arppkt *) nb->data;
grub_net_network_level_address_t sender_addr, target_addr; grub_net_network_level_address_t sender_addr, target_addr;
@@ -138,6 +138,14 @@ grub_net_arp_receive (struct grub_net_buff *nb,
FOR_NET_NETWORK_LEVEL_INTERFACES (inf) FOR_NET_NETWORK_LEVEL_INTERFACES (inf)
{ {
/* Verify vlantag id */
if (inf->card == card && inf->vlantag != *vlantag)
{
grub_dprintf ("net", "invalid vlantag! %x != %x\n",
inf->vlantag, *vlantag);
break;
}
/* Am I the protocol address target? */ /* Am I the protocol address target? */
if (grub_net_addr_cmp (&inf->address, &target_addr) == 0 if (grub_net_addr_cmp (&inf->address, &target_addr) == 0
&& arp_packet->op == grub_cpu_to_be16_compile_time (ARP_REQUEST)) && arp_packet->op == grub_cpu_to_be16_compile_time (ARP_REQUEST))
+10 -3
View File
@@ -146,18 +146,18 @@ enum
}; };
static int static int
grub_ieee1275_parse_bootpath (const char *devpath, char *bootpath, grub_ieee1275_parse_bootargs (const char *devpath, char *bootpath,
char **device, struct grub_net_card **card) char **device, struct grub_net_card **card)
{ {
char *args; char *args;
char *comma_char = 0; char *comma_char = 0;
char *equal_char = 0; char *equal_char = 0;
grub_size_t field_counter = 0; grub_size_t field_counter = 0;
grub_net_network_level_address_t client_addr, gateway_addr, subnet_mask; grub_net_network_level_address_t client_addr, gateway_addr, subnet_mask;
grub_net_link_level_address_t hw_addr; grub_net_link_level_address_t hw_addr;
grub_net_interface_flags_t flags = 0; grub_net_interface_flags_t flags = 0;
struct grub_net_network_level_interface *inter = NULL; struct grub_net_network_level_interface *inter = NULL;
grub_uint16_t vlantag = 0;
hw_addr.type = GRUB_NET_LINK_LEVEL_PROTOCOL_ETHERNET; hw_addr.type = GRUB_NET_LINK_LEVEL_PROTOCOL_ETHERNET;
@@ -175,6 +175,11 @@ grub_ieee1275_parse_bootpath (const char *devpath, char *bootpath,
*equal_char = 0; *equal_char = 0;
grub_env_set_net_property ((*card)->name, args, equal_char + 1, grub_env_set_net_property ((*card)->name, args, equal_char + 1,
grub_strlen(equal_char + 1)); grub_strlen(equal_char + 1));
if ((grub_strcmp (args, "vtag") == 0) &&
(grub_strlen (equal_char + 1) == 8))
vlantag = grub_strtoul (equal_char + 1 + 4, 0, 16);
*equal_char = '='; *equal_char = '=';
} }
else else
@@ -213,8 +218,10 @@ grub_ieee1275_parse_bootpath (const char *devpath, char *bootpath,
hw_addr.mac, sizeof(hw_addr.mac), 0); hw_addr.mac, sizeof(hw_addr.mac), 0);
inter = grub_net_add_addr ((*card)->name, *card, &client_addr, &hw_addr, inter = grub_net_add_addr ((*card)->name, *card, &client_addr, &hw_addr,
flags); flags);
inter->vlantag = vlantag;
grub_net_add_ipv4_local (inter, grub_net_add_ipv4_local (inter,
__builtin_ctz (~grub_le_to_cpu32 (subnet_mask.ipv4))); __builtin_ctz (~grub_le_to_cpu32 (subnet_mask.ipv4)));
} }
if (gateway_addr.ipv4 != 0) if (gateway_addr.ipv4 != 0)
@@ -267,7 +274,7 @@ grub_ieee1275_net_config_real (const char *devpath, char **device, char **path,
} }
grub_free (canon); grub_free (canon);
grub_ieee1275_parse_bootpath (devpath, bootpath, device, &card); grub_ieee1275_parse_bootargs (devpath, bootpath, device, &card);
for (i = 0; i < ARRAY_SIZE (bootp_response_properties); i++) for (i = 0; i < ARRAY_SIZE (bootp_response_properties); i++)
if (grub_ieee1275_get_property_length (grub_ieee1275_chosen, if (grub_ieee1275_get_property_length (grub_ieee1275_chosen,
+42 -5
View File
@@ -18,6 +18,7 @@
#include <grub/misc.h> #include <grub/misc.h>
#include <grub/mm.h> #include <grub/mm.h>
#include <grub/env.h>
#include <grub/net/ethernet.h> #include <grub/net/ethernet.h>
#include <grub/net/ip.h> #include <grub/net/ip.h>
#include <grub/net/arp.h> #include <grub/net/arp.h>
@@ -56,10 +57,17 @@ send_ethernet_packet (struct grub_net_network_level_interface *inf,
{ {
struct etherhdr *eth; struct etherhdr *eth;
grub_err_t err; grub_err_t err;
grub_uint8_t etherhdr_size;
grub_uint16_t vlantag_id = VLANTAG_IDENTIFIER;
COMPILE_TIME_ASSERT (sizeof (*eth) < GRUB_NET_MAX_LINK_HEADER_SIZE); etherhdr_size = sizeof (*eth);
COMPILE_TIME_ASSERT (sizeof (*eth) + 4 < GRUB_NET_MAX_LINK_HEADER_SIZE);
err = grub_netbuff_push (nb, sizeof (*eth)); /* Increase ethernet header in case of vlantag */
if (inf->vlantag != 0)
etherhdr_size += 4;
err = grub_netbuff_push (nb, etherhdr_size);
if (err) if (err)
return err; return err;
eth = (struct etherhdr *) nb->data; eth = (struct etherhdr *) nb->data;
@@ -76,6 +84,19 @@ send_ethernet_packet (struct grub_net_network_level_interface *inf,
return err; return err;
inf->card->opened = 1; inf->card->opened = 1;
} }
/* Check and add a vlan-tag if needed. */
if (inf->vlantag != 0)
{
/* Move eth type to the right */
grub_memcpy ((char *) nb->data + etherhdr_size - 2,
(char *) nb->data + etherhdr_size - 6, 2);
/* Add the tag in the middle */
grub_memcpy ((char *) nb->data + etherhdr_size - 6, &vlantag_id, 2);
grub_memcpy ((char *) nb->data + etherhdr_size - 4, (char *) &(inf->vlantag), 2);
}
return inf->card->driver->send (inf->card, nb); return inf->card->driver->send (inf->card, nb);
} }
@@ -90,10 +111,25 @@ grub_net_recv_ethernet_packet (struct grub_net_buff *nb,
grub_net_link_level_address_t hwaddress; grub_net_link_level_address_t hwaddress;
grub_net_link_level_address_t src_hwaddress; grub_net_link_level_address_t src_hwaddress;
grub_err_t err; grub_err_t err;
grub_uint8_t etherhdr_size = sizeof (*eth);
grub_uint16_t vlantag = 0;
/* Check if a vlan-tag is present. If so, the ethernet header is 4 bytes */
/* longer than the original one. The vlantag id is extracted and the header */
/* is reseted to the original size. */
if (grub_get_unaligned16 (nb->data + etherhdr_size - 2) == VLANTAG_IDENTIFIER)
{
vlantag = grub_get_unaligned16 (nb->data + etherhdr_size);
etherhdr_size += 4;
/* Move eth type to the original position */
grub_memcpy((char *) nb->data + etherhdr_size - 6,
(char *) nb->data + etherhdr_size - 2, 2);
}
eth = (struct etherhdr *) nb->data; eth = (struct etherhdr *) nb->data;
type = grub_be_to_cpu16 (eth->type); type = grub_be_to_cpu16 (eth->type);
err = grub_netbuff_pull (nb, sizeof (*eth)); err = grub_netbuff_pull (nb, etherhdr_size);
if (err) if (err)
return err; return err;
@@ -121,13 +157,14 @@ grub_net_recv_ethernet_packet (struct grub_net_buff *nb,
{ {
/* ARP packet. */ /* ARP packet. */
case GRUB_NET_ETHERTYPE_ARP: case GRUB_NET_ETHERTYPE_ARP:
grub_net_arp_receive (nb, card); grub_net_arp_receive (nb, card, &vlantag);
grub_netbuff_free (nb); grub_netbuff_free (nb);
return GRUB_ERR_NONE; return GRUB_ERR_NONE;
/* IP packet. */ /* IP packet. */
case GRUB_NET_ETHERTYPE_IP: case GRUB_NET_ETHERTYPE_IP:
case GRUB_NET_ETHERTYPE_IP6: case GRUB_NET_ETHERTYPE_IP6:
return grub_net_recv_ip_packets (nb, card, &hwaddress, &src_hwaddress); return grub_net_recv_ip_packets (nb, card, &hwaddress, &src_hwaddress,
&vlantag);
} }
grub_netbuff_free (nb); grub_netbuff_free (nb);
return GRUB_ERR_NONE; return GRUB_ERR_NONE;
+23 -8
View File
@@ -228,6 +228,7 @@ handle_dgram (struct grub_net_buff *nb,
grub_net_ip_protocol_t proto, grub_net_ip_protocol_t proto,
const grub_net_network_level_address_t *source, const grub_net_network_level_address_t *source,
const grub_net_network_level_address_t *dest, const grub_net_network_level_address_t *dest,
grub_uint16_t *vlantag,
grub_uint8_t ttl) grub_uint8_t ttl)
{ {
struct grub_net_network_level_interface *inf = NULL; struct grub_net_network_level_interface *inf = NULL;
@@ -293,6 +294,15 @@ handle_dgram (struct grub_net_buff *nb,
&& grub_net_addr_cmp (&inf->address, dest) == 0 && grub_net_addr_cmp (&inf->address, dest) == 0
&& grub_net_hwaddr_cmp (&inf->hwaddress, hwaddress) == 0) && grub_net_hwaddr_cmp (&inf->hwaddress, hwaddress) == 0)
break; break;
/* Verify vlantag id */
if (inf->card == card && inf->vlantag != *vlantag)
{
grub_dprintf ("net", "invalid vlantag! %x != %x\n",
inf->vlantag, *vlantag);
break;
}
/* Solicited node multicast. */ /* Solicited node multicast. */
if (inf->card == card if (inf->card == card
&& inf->address.type == GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV6 && inf->address.type == GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV6
@@ -383,7 +393,8 @@ static grub_err_t
grub_net_recv_ip4_packets (struct grub_net_buff *nb, grub_net_recv_ip4_packets (struct grub_net_buff *nb,
struct grub_net_card *card, struct grub_net_card *card,
const grub_net_link_level_address_t *hwaddress, const grub_net_link_level_address_t *hwaddress,
const grub_net_link_level_address_t *src_hwaddress) const grub_net_link_level_address_t *src_hwaddress,
grub_uint16_t *vlantag)
{ {
struct iphdr *iph = (struct iphdr *) nb->data; struct iphdr *iph = (struct iphdr *) nb->data;
grub_err_t err; grub_err_t err;
@@ -458,7 +469,7 @@ grub_net_recv_ip4_packets (struct grub_net_buff *nb,
dest.ipv4 = iph->dest; dest.ipv4 = iph->dest;
return handle_dgram (nb, card, src_hwaddress, hwaddress, iph->protocol, return handle_dgram (nb, card, src_hwaddress, hwaddress, iph->protocol,
&source, &dest, iph->ttl); &source, &dest, vlantag, iph->ttl);
} }
for (prev = &reassembles, rsm = *prev; rsm; prev = &rsm->next, rsm = *prev) for (prev = &reassembles, rsm = *prev; rsm; prev = &rsm->next, rsm = *prev)
@@ -594,7 +605,7 @@ grub_net_recv_ip4_packets (struct grub_net_buff *nb,
dest.ipv4 = dst; dest.ipv4 = dst;
return handle_dgram (ret, card, src_hwaddress, return handle_dgram (ret, card, src_hwaddress,
hwaddress, proto, &source, &dest, hwaddress, proto, &source, &dest, vlantag,
ttl); ttl);
} }
} }
@@ -652,7 +663,8 @@ static grub_err_t
grub_net_recv_ip6_packets (struct grub_net_buff *nb, grub_net_recv_ip6_packets (struct grub_net_buff *nb,
struct grub_net_card *card, struct grub_net_card *card,
const grub_net_link_level_address_t *hwaddress, const grub_net_link_level_address_t *hwaddress,
const grub_net_link_level_address_t *src_hwaddress) const grub_net_link_level_address_t *src_hwaddress,
grub_uint16_t *vlantag)
{ {
struct ip6hdr *iph = (struct ip6hdr *) nb->data; struct ip6hdr *iph = (struct ip6hdr *) nb->data;
grub_err_t err; grub_err_t err;
@@ -703,21 +715,24 @@ grub_net_recv_ip6_packets (struct grub_net_buff *nb,
grub_memcpy (dest.ipv6, &iph->dest, sizeof (dest.ipv6)); grub_memcpy (dest.ipv6, &iph->dest, sizeof (dest.ipv6));
return handle_dgram (nb, card, src_hwaddress, hwaddress, iph->protocol, return handle_dgram (nb, card, src_hwaddress, hwaddress, iph->protocol,
&source, &dest, iph->ttl); &source, &dest, vlantag, iph->ttl);
} }
grub_err_t grub_err_t
grub_net_recv_ip_packets (struct grub_net_buff *nb, grub_net_recv_ip_packets (struct grub_net_buff *nb,
struct grub_net_card *card, struct grub_net_card *card,
const grub_net_link_level_address_t *hwaddress, const grub_net_link_level_address_t *hwaddress,
const grub_net_link_level_address_t *src_hwaddress) const grub_net_link_level_address_t *src_hwaddress,
grub_uint16_t *vlantag)
{ {
struct iphdr *iph = (struct iphdr *) nb->data; struct iphdr *iph = (struct iphdr *) nb->data;
if ((iph->verhdrlen >> 4) == 4) if ((iph->verhdrlen >> 4) == 4)
return grub_net_recv_ip4_packets (nb, card, hwaddress, src_hwaddress); return grub_net_recv_ip4_packets (nb, card, hwaddress, src_hwaddress,
vlantag);
if ((iph->verhdrlen >> 4) == 6) if ((iph->verhdrlen >> 4) == 6)
return grub_net_recv_ip6_packets (nb, card, hwaddress, src_hwaddress); return grub_net_recv_ip6_packets (nb, card, hwaddress, src_hwaddress,
vlantag);
grub_dprintf ("net", "Bad IP version: %d\n", (iph->verhdrlen >> 4)); grub_dprintf ("net", "Bad IP version: %d\n", (iph->verhdrlen >> 4));
grub_netbuff_free (nb); grub_netbuff_free (nb);
return GRUB_ERR_NONE; return GRUB_ERR_NONE;
+8
View File
@@ -77,11 +77,19 @@ grub_util_get_fd_size (grub_util_fd_t fd, const char *name, unsigned *log_secsiz
int int
grub_util_fd_seek (grub_util_fd_t fd, grub_uint64_t off) grub_util_fd_seek (grub_util_fd_t fd, grub_uint64_t off)
{ {
#if SIZEOF_OFF_T == 8
off_t offset = (off_t) off; off_t offset = (off_t) off;
if (lseek (fd, offset, SEEK_SET) != offset) if (lseek (fd, offset, SEEK_SET) != offset)
return -1; return -1;
#elif SIZEOF_OFF64_T == 8
off64_t offset = (off64_t) off;
if (lseek64 (fd, offset, SEEK_SET) != offset)
return -1;
#else
#error "No large file support"
#endif
return 0; return 0;
} }
+11 -2
View File
@@ -26,14 +26,23 @@ GRUB_MOD_LICENSE ("GPLv3+");
static grub_err_t static grub_err_t
grub_functional_test (grub_extcmd_context_t ctxt __attribute__ ((unused)), grub_functional_test (grub_extcmd_context_t ctxt __attribute__ ((unused)),
int argc __attribute__ ((unused)), int argc,
char **args __attribute__ ((unused))) char **args)
{ {
grub_test_t test; grub_test_t test;
int ok = 1; int ok = 1;
int i;
FOR_LIST_ELEMENTS (test, grub_test_list) FOR_LIST_ELEMENTS (test, grub_test_list)
{ {
if (argc != 0)
{
for (i = 0; i < argc; i++)
if (grub_strcmp(args[i], test->name) == 0)
break;
if (i == argc)
continue;
}
grub_errno = 0; grub_errno = 0;
ok = ok && !grub_test_run (test); ok = ok && !grub_test_run (test);
grub_errno = 0; grub_errno = 0;
+3
View File
@@ -291,6 +291,7 @@ struct grub_net_network_level_interface
grub_net_interface_flags_t flags; grub_net_interface_flags_t flags;
struct grub_net_bootp_packet *dhcp_ack; struct grub_net_bootp_packet *dhcp_ack;
grub_size_t dhcp_acklen; grub_size_t dhcp_acklen;
grub_uint16_t vlantag;
void *data; void *data;
}; };
@@ -561,4 +562,6 @@ extern char *grub_net_default_server;
#define GRUB_NET_INTERVAL 400 #define GRUB_NET_INTERVAL 400
#define GRUB_NET_INTERVAL_ADDITION 20 #define GRUB_NET_INTERVAL_ADDITION 20
#define VLANTAG_IDENTIFIER 0x8100
#endif /* ! GRUB_NET_HEADER */ #endif /* ! GRUB_NET_HEADER */
+2 -1
View File
@@ -22,7 +22,8 @@
#include <grub/net.h> #include <grub/net.h>
extern grub_err_t grub_net_arp_receive (struct grub_net_buff *nb, extern grub_err_t grub_net_arp_receive (struct grub_net_buff *nb,
struct grub_net_card *card); struct grub_net_card *card,
grub_uint16_t *vlantag);
grub_err_t grub_err_t
grub_net_arp_send_request (struct grub_net_network_level_interface *inf, grub_net_arp_send_request (struct grub_net_network_level_interface *inf,
+2 -1
View File
@@ -48,7 +48,8 @@ grub_err_t
grub_net_recv_ip_packets (struct grub_net_buff *nb, grub_net_recv_ip_packets (struct grub_net_buff *nb,
struct grub_net_card *card, struct grub_net_card *card,
const grub_net_link_level_address_t *hwaddress, const grub_net_link_level_address_t *hwaddress,
const grub_net_link_level_address_t *src_hwaddress); const grub_net_link_level_address_t *src_hwaddress,
grub_uint16_t *vlantag);
grub_err_t grub_err_t
grub_net_send_ip_packet (struct grub_net_network_level_interface *inf, grub_net_send_ip_packet (struct grub_net_network_level_interface *inf,
+2 -2
View File
@@ -388,7 +388,7 @@ AC_DEFUN([gl_INIT],
exit 1 exit 1
fi fi
done])dnl done])dnl
m4_if(m4_sysval, [0], [], m4_if([0], [0], [],
[AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
]) ])
m4_popdef([gl_LIBSOURCES_DIR]) m4_popdef([gl_LIBSOURCES_DIR])
@@ -434,7 +434,7 @@ changequote([, ])dnl
exit 1 exit 1
fi fi
done])dnl done])dnl
m4_if(m4_sysval, [0], [], m4_if([0], [0], [],
[AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
]) ])
m4_popdef([gltests_LIBSOURCES_DIR]) m4_popdef([gltests_LIBSOURCES_DIR])
+1 -1
View File
@@ -15,7 +15,7 @@ PACKAGE = @PACKAGE@
VERSION = @VERSION@ VERSION = @VERSION@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
SHELL = /bin/sh SHELL = @SHELL@
@SET_MAKE@ @SET_MAKE@
srcdir = @srcdir@ srcdir = @srcdir@
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
# Copyright (C) 2013 Free Software Foundation, Inc. # Copyright (C) 2013 Free Software Foundation, Inc.
# #
# GRUB is free software: you can redistribute it and/or modify # GRUB is free software: you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
# Copyright (C) 2013 Free Software Foundation, Inc. # Copyright (C) 2013 Free Software Foundation, Inc.
# #
# GRUB is free software: you can redistribute it and/or modify # GRUB is free software: you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
# Copyright (C) 2013 Free Software Foundation, Inc. # Copyright (C) 2013 Free Software Foundation, Inc.
# #
# GRUB is free software: you can redistribute it and/or modify # GRUB is free software: you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
# Copyright (C) 2013 Free Software Foundation, Inc. # Copyright (C) 2013 Free Software Foundation, Inc.
# #
# GRUB is free software: you can redistribute it and/or modify # GRUB is free software: you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
true true
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
# Copyright (C) 2013 Free Software Foundation, Inc. # Copyright (C) 2013 Free Software Foundation, Inc.
# #
# GRUB is free software: you can redistribute it and/or modify # GRUB is free software: you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
# Copyright (C) 2014 Free Software Foundation, Inc. # Copyright (C) 2014 Free Software Foundation, Inc.
# #
# GRUB is free software: you can redistribute it and/or modify # GRUB is free software: you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
cd '@srcdir@' cd '@srcdir@'
+2 -2
View File
@@ -1,4 +1,4 @@
#! /bin/bash #! @BUILD_SHEBANG@
set -e set -e
. "@builddir@/grub-core/modinfo.sh" . "@builddir@/grub-core/modinfo.sh"
@@ -9,7 +9,7 @@ if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = sparc64-ieee1275 ];
fi fi
pdt="$(date -u +%s)" pdt="$(date -u +%s)"
dt=`echo date | @builddir@/grub-shell` dt=`echo date | @builddir@/grub-shell | sed 's, [A-Z][a-z]*$,,'`
dtg="$(date -u -d "$dt" +%s)" dtg="$(date -u -d "$dt" +%s)"
ndt="$(date -u +%s)" ndt="$(date -u +%s)"
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/bash #! @BUILD_SHEBANG@
set -e set -e
# Run GRUB script in a Qemu instance # Run GRUB script in a Qemu instance
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/bash #! @BUILD_SHEBANG@
set -e set -e
. "@builddir@/grub-core/modinfo.sh" . "@builddir@/grub-core/modinfo.sh"
+3 -3
View File
@@ -1,4 +1,4 @@
#! /bin/bash #! @BUILD_SHEBANG@
set -e set -e
. "@builddir@/grub-core/modinfo.sh" . "@builddir@/grub-core/modinfo.sh"
@@ -11,8 +11,8 @@ fi
# Compare RTC with interval timer. # Compare RTC with interval timer.
# Not 100% proper but should check that timer is running ok # Not 100% proper but should check that timer is running ok
dt=`echo 'date; sleep 10; date' | @builddir@/grub-shell` dt=`echo 'date; sleep 10; date' | @builddir@/grub-shell`
dt1="$(date -u -d "$(echo "$dt" | head -n 1)" +%s)" dt1="$(date -u -d "$(echo "$dt" | head -n 1 | sed 's, [A-Z][a-z]*$,,')" +%s)"
dt2="$(date -u -d "$(echo "$dt" | tail -n 1)" +%s)" dt2="$(date -u -d "$(echo "$dt" | tail -n 1 | sed 's, [A-Z][a-z]*$,,')" +%s)"
# Ignore QEMU bug # Ignore QEMU bug
if [ "${grub_modinfo_target_cpu}" = arm ] && [ $((dt2 - dt1)) -ge 15 ] && [ $((dt2 - dt1)) -le 17 ]; then if [ "${grub_modinfo_target_cpu}" = arm ] && [ $((dt2 - dt1)) -ge 15 ] && [ $((dt2 - dt1)) -le 17 ]; then
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/bash #! @BUILD_SHEBANG@
# create a randome file # create a randome file
empty="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 empty="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/bash -e #! @BUILD_SHEBANG@ -e
# Run GRUB script in a Qemu instance # Run GRUB script in a Qemu instance
# Copyright (C) 2010 Free Software Foundation, Inc. # Copyright (C) 2010 Free Software Foundation, Inc.
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/bash #! @BUILD_SHEBANG@
set -e set -e
. "@builddir@/grub-core/modinfo.sh" . "@builddir@/grub-core/modinfo.sh"
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
set -e set -e
@builddir@/grub-script-check <<EOF @builddir@/grub-script-check <<EOF
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/bash #! @BUILD_SHEBANG@
# Run GRUB script in a Qemu instance # Run GRUB script in a Qemu instance
# Copyright (C) 2010 Free Software Foundation, Inc. # Copyright (C) 2010 Free Software Foundation, Inc.
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
set -e set -e
@builddir@/grub-script-check << EOF @builddir@/grub-script-check << EOF
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/bash #! @BUILD_SHEBANG@
set -e set -e
# Run GRUB script in a Qemu instance # Run GRUB script in a Qemu instance
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
set -e set -e
@builddir@/grub-script-check <<EOF @builddir@/grub-script-check <<EOF
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
set -e set -e
# grub-script-check refuses to pass a file with no commands; this usually # grub-script-check refuses to pass a file with no commands; this usually
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
# Copyright (C) 2013 Free Software Foundation, Inc. # Copyright (C) 2013 Free Software Foundation, Inc.
# #
# GRUB is free software: you can redistribute it and/or modify # GRUB is free software: you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
# Copyright (C) 2013 Free Software Foundation, Inc. # Copyright (C) 2013 Free Software Foundation, Inc.
# #
# GRUB is free software: you can redistribute it and/or modify # GRUB is free software: you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/bash #! @BUILD_SHEBANG@
set -e set -e
. "@builddir@/grub-core/modinfo.sh" . "@builddir@/grub-core/modinfo.sh"
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
# Copyright (C) 2013 Free Software Foundation, Inc. # Copyright (C) 2013 Free Software Foundation, Inc.
# #
# GRUB is free software: you can redistribute it and/or modify # GRUB is free software: you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
# Copyright (C) 2013 Free Software Foundation, Inc. # Copyright (C) 2013 Free Software Foundation, Inc.
# #
# GRUB is free software: you can redistribute it and/or modify # GRUB is free software: you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
# Copyright (C) 2013 Free Software Foundation, Inc. # Copyright (C) 2013 Free Software Foundation, Inc.
# #
# GRUB is free software: you can redistribute it and/or modify # GRUB is free software: you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
set -e set -e
# Copyright (C) 2010 Free Software Foundation, Inc. # Copyright (C) 2010 Free Software Foundation, Inc.
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
# Copyright (C) 2013 Free Software Foundation, Inc. # Copyright (C) 2013 Free Software Foundation, Inc.
# #
# GRUB is free software: you can redistribute it and/or modify # GRUB is free software: you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
# Copyright (C) 2013 Free Software Foundation, Inc. # Copyright (C) 2013 Free Software Foundation, Inc.
# #
# GRUB is free software: you can redistribute it and/or modify # GRUB is free software: you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/bash #! @BUILD_SHEBANG@
# create a randome file # create a randome file
file="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 file="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
# Copyright (C) 2013 Free Software Foundation, Inc. # Copyright (C) 2013 Free Software Foundation, Inc.
# #
# GRUB is free software: you can redistribute it and/or modify # GRUB is free software: you can redistribute it and/or modify
+165 -132
View File
@@ -1,4 +1,4 @@
#!/bin/bash #!@BUILD_SHEBANG@
set -e set -e
@@ -13,8 +13,29 @@ run_it () {
LC_ALL=C "$GRUBFSTEST" "$@" LC_ALL=C "$GRUBFSTEST" "$@"
} }
range() {
range_counter="$1"
while test "$range_counter" -le "$2"; do
echo "$range_counter"
range_counter="$((range_counter + $3))"
done
}
powrange() {
range_counter="$1"
while test "$range_counter" -le "$2"; do
echo "$range_counter"
range_counter="$((range_counter * 2))"
done
}
run_grubfstest () { run_grubfstest () {
run_it -c $NEED_IMAGES_N "${NEED_IMAGES[@]}" "$@" need_images=
for i in $(range 0 $((NEED_IMAGES_N-1)) 1); do
need_images="$need_images $FSIMAGEP${i}.img";
done
run_it -c $NEED_IMAGES_N $need_images "$@"
} }
# OS LIMITATION: GNU/Linux has no AFS support, so we use a premade image and a reference tar file. I.a. no multiblocksize test # OS LIMITATION: GNU/Linux has no AFS support, so we use a premade image and a reference tar file. I.a. no multiblocksize test
@@ -51,7 +72,7 @@ case x"$fs" in
# OS limitation: zfs-fuse always uses ashift=9 with loop devices # OS limitation: zfs-fuse always uses ashift=9 with loop devices
MAXLOGSECSIZE=9;; MAXLOGSECSIZE=9;;
esac esac
for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE + 1)); do for LOGSECSIZE in $(range "$MINLOGSECSIZE" "$MAXLOGSECSIZE" 1); do
SECSIZE="$((1 << LOGSECSIZE))" SECSIZE="$((1 << LOGSECSIZE))"
MINBLKSIZE=512 MINBLKSIZE=512
MAXBLKSIZE=512 MAXBLKSIZE=512
@@ -169,7 +190,12 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
MINBLKSIZE=1024 MINBLKSIZE=1024
MAXBLKSIZE=4096;; MAXBLKSIZE=4096;;
esac esac
for ((BLKSIZE=MINBLKSIZE;BLKSIZE<=MAXBLKSIZE;BLKSIZE=BLKSTEP?BLKSIZE+BLKSTEP:2*BLKSIZE)); do if test "$BLKSTEP" -eq 0; then
blksizes="$(powrange "$MINBLKSIZE" "$MAXBLKSIZE")"
else
blksizes="$(range "$MINBLKSIZE" "$MAXBLKSIZE" "$BLKSTEP")"
fi
for BLKSIZE in $blksizes; do
MAXDEVICES=1 MAXDEVICES=1
MINDEVICES=1 MINDEVICES=1
export fs export fs
@@ -199,13 +225,11 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
MAXDEVICES=7;; MAXDEVICES=7;;
esac esac
for ((NDEVICES=MINDEVICES; NDEVICES <= MAXDEVICES; NDEVICES++)); do for NDEVICES in $(range "$MINDEVICES" "$MAXDEVICES" 1); do
export NDEVICES export NDEVICES
unset FSIMAGES unset FSIMAGEP
for ((i=0; i < NDEVICES; i++)); do FSIMAGEP="${tempdir}/${fs}_${SECSIZE}_${BLKSIZE}_${NDEVICES}_"
FSIMAGES[i]="${tempdir}/${fs}_${SECSIZE}_${BLKSIZE}_${NDEVICES}_$i.img" export FSIMAGEP
done
export FSIMAGES
unset NEED_IMAGES; unset NEED_IMAGES;
case x$fs in case x$fs in
@@ -226,11 +250,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
*) *)
NEED_IMAGES_N=$NDEVICES;; NEED_IMAGES_N=$NDEVICES;;
esac esac
for ((i=0;i < NEED_IMAGES_N; i++)); do
NEED_IMAGES[i]="${FSIMAGES[i]}";
done
export NEED_IMAGES_N export NEED_IMAGES_N
export NEED_IMAGES
MNTPOINTRO="${tempdir}/${fs}_ro" MNTPOINTRO="${tempdir}/${fs}_ro"
MNTPOINTRW="${tempdir}/${fs}_rw" MNTPOINTRW="${tempdir}/${fs}_rw"
@@ -238,20 +258,25 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
MOUNTFS="$fs" MOUNTFS="$fs"
MASTER="${tempdir}/master" MASTER="${tempdir}/master"
FSLABEL="grub_;/testé莭莽茝😁киритi urewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewrewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfew" FSLABEL="grub_;/testé莭莽茝😁киритi urewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewrewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfew"
CFILESN=1 CFILESRC=
if test -f /usr/share/dict/american-english; then for cand in /usr/share/dict/american-english /usr/share/dict/linux.words /data/data/com.termux/files/usr/share/hunspell/en_US.dic; do
CFILESSRC[0]="/usr/share/dict/american-english" if test -f "$cand" ; then
else CFILESRC="$cand"
CFILESSRC[0]="/usr/share/dict/linux.words" break
fi
done
if test "$CFILESRC" = "" ; then
echo "Couldn't find compressible file" >&2
exit 1
fi fi
case x"$fs" in case x"$fs" in
# FS LIMITATION: 8.3 names # FS LIMITATION: 8.3 names
xmsdos*) xmsdos*)
CFILES[0]="american.eng";; CFILE="american.eng";;
xiso9660) xiso9660)
CFILES[0]="american_english";; CFILE="american_english";;
*) *)
CFILES[0]="american-english";; CFILE="american-english";;
esac esac
# OS LIMITATION: Limited by NAME_MAX (usually 255) in GNU/Linux # OS LIMITATION: Limited by NAME_MAX (usually 255) in GNU/Linux
LONGNAME="qwertzuiopasdfghjklyxcvbnm1234567890qwertzuiopasdfghjklyxcvbnm1234567890oiewqfiewioqoiqoiurqruewqoiuwoieoiiuewqroreqiufieiuwrnureweriuvceoiroiewqoiricdsalkcndsakfirefoiwqeoircorejwoijfreoijojoiewjfwnfcoirenfoirefnreoifenoiwfnoi" LONGNAME="qwertzuiopasdfghjklyxcvbnm1234567890qwertzuiopasdfghjklyxcvbnm1234567890oiewqfiewioqoiqoiurqruewqoiuwoieoiiuewqroreqiufieiuwrnureweriuvceoiroiewqoiricdsalkcndsakfirefoiwqeoircorejwoijfreoijojoiewjfwnfcoirenfoirefnreoifenoiwfnoi"
@@ -388,8 +413,8 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
;; ;;
x"vfat16" | xmsdos16) x"vfat16" | xmsdos16)
BIGBLOCKCNT=$((25000 * BLKSIZE)) BIGBLOCKCNT=$((25000 * BLKSIZE))
if [ $BIGBLOCKCNT -gt $((16#ffffffff)) ]; then if [ $BIGBLOCKCNT -gt 4294967295 ]; then
BIGBLOCKCNT=$((16#ffffffff)) BIGBLOCKCNT=4294967295
fi fi
;; ;;
x"minix") x"minix")
@@ -410,7 +435,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
BIGBLOCKCNT=$((4000 * 1048576));; BIGBLOCKCNT=$((4000 * 1048576));;
# FS LIMITATION: These FS have uint32 as file size field # FS LIMITATION: These FS have uint32 as file size field
x"vfat"* | xmsdos* | x"cpio_crc" | x"cpio_newc" | x"cpio_bin" | x"cpio_hpbin" | xsfs*) x"vfat"* | xmsdos* | x"cpio_crc" | x"cpio_newc" | x"cpio_bin" | x"cpio_hpbin" | xsfs*)
BIGBLOCKCNT=$((16#ffffffff));; BIGBLOCKCNT=4294967295;;
# FS LIMITATION: These FS have int32 as file size field # FS LIMITATION: These FS have int32 as file size field
# FIXME: not so sure about AFFS # FIXME: not so sure about AFFS
# OS LIMITATION: minix2/minix3 could be formatted in a way to permit more. # OS LIMITATION: minix2/minix3 could be formatted in a way to permit more.
@@ -543,18 +568,18 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
PDIR="" PDIR=""
# OS LIMITATION: Limited by PATH_MAX (usually 1024) # OS LIMITATION: Limited by PATH_MAX (usually 1024)
for ((i=0;i<PDIRCOMPNUM;i++)); do for i in $(range 0 $((PDIRCOMPNUM-1)) 1); do
PDIR="$PDIR/$i"; PDIR="$PDIR/$i";
if [ $((i%3)) == 0 ]; then if test $((i%3)) = 0; then
PDIR="$PDIR/" PDIR="$PDIR/"
fi fi
done done
PDIR2="" PDIR2=""
# OS LIMITATION: Limited by PATH_MAX (usually 1024) # OS LIMITATION: Limited by PATH_MAX (usually 1024)
for ((i=0;i<PDIR2COMPNUM;i++)); do for i in $(range 0 $((PDIR2COMPNUM-1)) 1); do
PDIR2="${PDIR2}/$i"; PDIR2="${PDIR2}/$i";
if [ $((i%3)) == 0 ]; then if test $((i%3)) = 0; then
PDIR2="${PDIR2}/" PDIR2="${PDIR2}/"
fi fi
done done
@@ -563,6 +588,8 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
unset LODEVICES unset LODEVICES
GENERATED=n GENERATED=n
LODEVICES=
MOUNTDEVICE=
case x"$fs" in case x"$fs" in
x"tarfs" | x"cpio_"*| x"ziso9660" | x"romfs" | x"squash4_"*\ x"tarfs" | x"cpio_"*| x"ziso9660" | x"romfs" | x"squash4_"*\
@@ -577,62 +604,65 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
*) *)
mkdir -p "$MNTPOINTRW" mkdir -p "$MNTPOINTRW"
mkdir -p "$MNTPOINTRO" mkdir -p "$MNTPOINTRO"
for ((i=0; i < NDEVICES; i++)); do for i in $(range 0 $((NDEVICES-1)) 1); do
dd if=/dev/zero of="${FSIMAGES[i]}" count=1 bs=1 seek=$((DISKSIZE-1)) &> /dev/null dd if=/dev/zero of="$FSIMAGEP${i}.img" count=1 bs=1 seek=$((DISKSIZE-1)) &> /dev/null
LODEVICES[i]=`losetup -f` LODEVICE="$(losetup -f)"
losetup "${LODEVICES[i]}" "${FSIMAGES[i]}" LODEVICES="$LODEVICES $LODEVICE"
losetup "$LODEVICE" "$FSIMAGEP${i}.img"
if test "$i" = 0; then
MOUNTDEVICE="$LODEVICE"
fi
done ;; done ;;
esac esac
MOUNTDEVICE="${LODEVICES[0]}"
case x"$fs" in case x"$fs" in
x"afs") x"afs")
;; ;;
x"btrfs") x"btrfs")
"mkfs.btrfs" -s $SECSIZE -L "$FSLABEL" "${LODEVICES[0]}" ;; "mkfs.btrfs" -s $SECSIZE -L "$FSLABEL" "${MOUNTDEVICE}" ;;
x"btrfs_zlib" | x"btrfs_lzo") x"btrfs_zlib" | x"btrfs_lzo")
"mkfs.btrfs" -s $SECSIZE -L "$FSLABEL" "${LODEVICES[0]}" "mkfs.btrfs" -s $SECSIZE -L "$FSLABEL" "${MOUNTDEVICE}"
MOUNTOPTS="compress=${fs/btrfs_/}," MOUNTOPTS="compress=${fs/btrfs_/},"
MOUNTFS="btrfs" MOUNTFS="btrfs"
;; ;;
x"btrfs_raid0") x"btrfs_raid0")
"mkfs.btrfs" -s $SECSIZE -d raid0 -m raid0 -L "$FSLABEL" "${LODEVICES[@]}" "mkfs.btrfs" -s $SECSIZE -d raid0 -m raid0 -L "$FSLABEL" $LODEVICES
MOUNTFS="btrfs" MOUNTFS="btrfs"
;; ;;
x"btrfs_raid1") x"btrfs_raid1")
"mkfs.btrfs" -s $SECSIZE -d raid1 -m raid1 -L "$FSLABEL" "${LODEVICES[@]}" "mkfs.btrfs" -s $SECSIZE -d raid1 -m raid1 -L "$FSLABEL" $LODEVICES
MOUNTFS="btrfs" MOUNTFS="btrfs"
;; ;;
x"btrfs_raid10") x"btrfs_raid10")
"mkfs.btrfs" -s $SECSIZE -d raid10 -m raid10 -L "$FSLABEL" "${LODEVICES[@]}" "mkfs.btrfs" -s $SECSIZE -d raid10 -m raid10 -L "$FSLABEL" $LODEVICES
MOUNTFS="btrfs" MOUNTFS="btrfs"
;; ;;
x"btrfs_single") x"btrfs_single")
"mkfs.btrfs" -s $SECSIZE -d single -L "$FSLABEL" "${LODEVICES[@]}" "mkfs.btrfs" -s $SECSIZE -d single -L "$FSLABEL" $LODEVICES
MOUNTFS="btrfs" MOUNTFS="btrfs"
;; ;;
x"exfat") x"exfat")
"mkfs.$fs" -s $((BLKSIZE/512)) -n "$FSLABEL" "${LODEVICES[0]}" "mkfs.$fs" -s $((BLKSIZE/512)) -n "$FSLABEL" "${MOUNTDEVICE}"
MOUNTOPTS="iocharset=utf8," MOUNTOPTS="iocharset=utf8,"
MOUNTFS="exfat-fuse";; MOUNTFS="exfat-fuse";;
x"minix") x"minix")
"mkfs.minix" "${LODEVICES[0]}" "mkfs.minix" "${MOUNTDEVICE}"
;; ;;
# mkfs.hfs and mkfs.hfsplus don't fill UUID. # mkfs.hfs and mkfs.hfsplus don't fill UUID.
x"hfsplus") x"hfsplus")
"mkfs.hfsplus" -b $BLKSIZE -v "$FSLABEL" "${LODEVICES[0]}" "mkfs.hfsplus" -b $BLKSIZE -v "$FSLABEL" "${MOUNTDEVICE}"
dd if=/dev/urandom of="${LODEVICES[0]}" bs=1 seek=$((16#468)) conv=notrunc count=8 ;; dd if=/dev/urandom of="${MOUNTDEVICE}" bs=1 seek=$((16#468)) conv=notrunc count=8 ;;
x"hfsplus_wrap") x"hfsplus_wrap")
"mkfs.hfsplus" -w -b $BLKSIZE -v "$FSLABEL" "${LODEVICES[0]}" "mkfs.hfsplus" -w -b $BLKSIZE -v "$FSLABEL" "${MOUNTDEVICE}"
dd if=/dev/urandom of="${LODEVICES[0]}" bs=1 seek=$((16#468)) conv=notrunc count=8 dd if=/dev/urandom of="${MOUNTDEVICE}" bs=1 seek=$((16#468)) conv=notrunc count=8
MOUNTFS="hfsplus";; MOUNTFS="hfsplus";;
x"hfsplus_casesens") x"hfsplus_casesens")
"mkfs.hfsplus" -s -b $BLKSIZE -v "$FSLABEL" "${LODEVICES[0]}" "mkfs.hfsplus" -s -b $BLKSIZE -v "$FSLABEL" "${MOUNTDEVICE}"
dd if=/dev/urandom of="${LODEVICES[0]}" bs=1 seek=$((16#468)) conv=notrunc count=8 dd if=/dev/urandom of="${MOUNTDEVICE}" bs=1 seek=$((16#468)) conv=notrunc count=8
MOUNTFS="hfsplus";; MOUNTFS="hfsplus";;
x"hfs") x"hfs")
"mkfs.hfs" -b $BLKSIZE -v "`echo $FSLABEL |recode utf8..macroman`" -h "${LODEVICES[0]}" "mkfs.hfs" -b $BLKSIZE -v "`echo $FSLABEL |recode utf8..macroman`" -h "${MOUNTDEVICE}"
dd if=/dev/urandom of="${LODEVICES[0]}" bs=1 seek=$((16#474)) conv=notrunc count=8 dd if=/dev/urandom of="${MOUNTDEVICE}" bs=1 seek=$((16#474)) conv=notrunc count=8
MOUNTOPTS="iocharset=utf8,codepage=macroman," MOUNTOPTS="iocharset=utf8,codepage=macroman,"
;; ;;
x"vfat"*|xmsdos*) x"vfat"*|xmsdos*)
@@ -643,98 +673,98 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
else else
A= A=
fi fi
"mkfs.vfat" -a $A -S $SECSIZE -s $((BLKSIZE/SECSIZE)) -F "${BITS:0:2}" -n "$FSLABEL" "${FSIMAGES[0]}" "mkfs.vfat" -a $A -S $SECSIZE -s $((BLKSIZE/SECSIZE)) -F "${BITS:0:2}" -n "$FSLABEL" "${MOUNTDEVICE}"
MOUNTOPTS="iocharset=utf8,codepage=437," MOUNTOPTS="iocharset=utf8,codepage=437,"
MOUNTFS="$(echo "$fs"|sed 's,[0-9]*a\?$,,')";; MOUNTFS="$(echo "$fs"|sed 's,[0-9]*a\?$,,')";;
x"minix2") x"minix2")
"mkfs.minix" -v "${LODEVICES[0]}" "mkfs.minix" -v "${MOUNTDEVICE}"
MOUNTFS="minix";; MOUNTFS="minix";;
x"minix3") x"minix3")
"mkfs.minix" -B $BLKSIZE -3 "${LODEVICES[0]}" "mkfs.minix" -B $BLKSIZE -3 "${MOUNTDEVICE}"
MOUNTFS="minix";; MOUNTFS="minix";;
x"ntfs"*) x"ntfs"*)
"mkfs.ntfs" -s "$SECSIZE" -c "$BLKSIZE" -L "$FSLABEL" -Q -q "${LODEVICES[0]}" "mkfs.ntfs" -s "$SECSIZE" -c "$BLKSIZE" -L "$FSLABEL" -Q -q "${MOUNTDEVICE}"
MOUNTOPTS="iocharset=utf8,compression," MOUNTOPTS="iocharset=utf8,compression,"
MOUNTFS="ntfs-3g";; MOUNTFS="ntfs-3g";;
x"udf") x"udf")
"mkudffs" --utf8 -b $BLKSIZE --lvid="$FSLABEL" "${LODEVICES[0]}" "mkudffs" --utf8 -b $BLKSIZE --lvid="$FSLABEL" "${MOUNTDEVICE}"
MOUNTOPTS="iocharset=utf8,bs=$BLKSIZE,";; MOUNTOPTS="iocharset=utf8,bs=$BLKSIZE,";;
x"ufs2") x"ufs2")
"mkfs.ufs" -b $BLKSIZE -L "$FSLABEL" -O 2 "${LODEVICES[0]}" "mkfs.ufs" -b $BLKSIZE -L "$FSLABEL" -O 2 "${MOUNTDEVICE}"
MOUNTOPTS="ufstype=ufs2," MOUNTOPTS="ufstype=ufs2,"
MOUNTFS="ufs";; MOUNTFS="ufs";;
x"ufs1") x"ufs1")
"mkfs.ufs" -b $BLKSIZE -L "$FSLABEL" -O 1 "${LODEVICES[0]}" "mkfs.ufs" -b $BLKSIZE -L "$FSLABEL" -O 1 "${MOUNTDEVICE}"
MOUNTOPTS="ufstype=44bsd," MOUNTOPTS="ufstype=44bsd,"
MOUNTFS="ufs";; MOUNTFS="ufs";;
x"ufs1_sun") x"ufs1_sun")
"mkfs.ufs" -b $BLKSIZE -L "$FSLABEL" -O 1 "${LODEVICES[0]}" "mkfs.ufs" -b $BLKSIZE -L "$FSLABEL" -O 1 "${MOUNTDEVICE}"
MOUNTOPTS="ufstype=sun," MOUNTOPTS="ufstype=sun,"
MOUNTFS="ufs";; MOUNTFS="ufs";;
x"zfs") x"zfs")
"zpool" create -R "$MNTPOINTRW" "$FSLABEL" "${LODEVICES[0]}" "zpool" create -R "$MNTPOINTRW" "$FSLABEL" "${MOUNTDEVICE}"
sleep 1 sleep 1
"zfs" create "$FSLABEL"/"grub fs" "zfs" create "$FSLABEL"/"grub fs"
sleep 1;; sleep 1;;
x"zfs_caseins") x"zfs_caseins")
"zpool" create -R "$MNTPOINTRW" "$FSLABEL" "${LODEVICES[0]}" "zpool" create -R "$MNTPOINTRW" "$FSLABEL" "${MOUNTDEVICE}"
sleep 1 sleep 1
"zfs" create -o casesensitivity=insensitive "$FSLABEL"/"grub fs" "zfs" create -o casesensitivity=insensitive "$FSLABEL"/"grub fs"
sleep 1;; sleep 1;;
x"zfs_lzjb" | xzfs_gzip | xzfs_zle) x"zfs_lzjb" | xzfs_gzip | xzfs_zle)
"zpool" create -O compression=${fs/zfs_/} -R "$MNTPOINTRW" "$FSLABEL" "${LODEVICES[0]}" "zpool" create -O compression=${fs/zfs_/} -R "$MNTPOINTRW" "$FSLABEL" "${MOUNTDEVICE}"
sleep 1 sleep 1
"zfs" create -o compression=${fs/zfs_/} "$FSLABEL"/"grub fs" "zfs" create -o compression=${fs/zfs_/} "$FSLABEL"/"grub fs"
sleep 1;; sleep 1;;
x"zfs_raidz") x"zfs_raidz")
"zpool" create -R "$MNTPOINTRW" "$FSLABEL" raidz1 "${LODEVICES[@]}" "zpool" create -R "$MNTPOINTRW" "$FSLABEL" raidz1 $LODEVICES
sleep 1 sleep 1
"zfs" create "$FSLABEL"/"grub fs" "zfs" create "$FSLABEL"/"grub fs"
sleep 1;; sleep 1;;
x"zfs_raidz2") x"zfs_raidz2")
"zpool" create -R "$MNTPOINTRW" "$FSLABEL" raidz2 "${LODEVICES[@]}" "zpool" create -R "$MNTPOINTRW" "$FSLABEL" raidz2 $LODEVICES
sleep 1 sleep 1
"zfs" create "$FSLABEL"/"grub fs" "zfs" create "$FSLABEL"/"grub fs"
sleep 1;; sleep 1;;
x"zfs_raidz3") x"zfs_raidz3")
"zpool" create -R "$MNTPOINTRW" "$FSLABEL" raidz3 "${LODEVICES[@]}" "zpool" create -R "$MNTPOINTRW" "$FSLABEL" raidz3 $LODEVICES
sleep 1 sleep 1
"zfs" create "$FSLABEL"/"grub fs" "zfs" create "$FSLABEL"/"grub fs"
sleep 1;; sleep 1;;
x"zfs_mirror") x"zfs_mirror")
"zpool" create -R "$MNTPOINTRW" "$FSLABEL" mirror "${LODEVICES[@]}" "zpool" create -R "$MNTPOINTRW" "$FSLABEL" mirror $LODEVICES
sleep 1 sleep 1
"zfs" create "$FSLABEL"/"grub fs" "zfs" create "$FSLABEL"/"grub fs"
sleep 1;; sleep 1;;
x"zfs_stripe") x"zfs_stripe")
"zpool" create -R "$MNTPOINTRW" "$FSLABEL" "${LODEVICES[@]}" "zpool" create -R "$MNTPOINTRW" "$FSLABEL" $LODEVICES
sleep 1 sleep 1
"zfs" create "$FSLABEL"/"grub fs" "zfs" create "$FSLABEL"/"grub fs"
sleep 1;; sleep 1;;
x"tarfs" | x"cpio_"* | x"iso9660" | xjoliet | xrockridge | xrockridge_joliet | x"iso9660_1999" | xjoliet_1999 | xrockridge_1999 | xrockridge_joliet_1999 | x"ziso9660" | x"romfs" | x"squash4_"*) x"tarfs" | x"cpio_"* | x"iso9660" | xjoliet | xrockridge | xrockridge_joliet | x"iso9660_1999" | xjoliet_1999 | xrockridge_1999 | xrockridge_joliet_1999 | x"ziso9660" | x"romfs" | x"squash4_"*)
INSTDEVICE=/dev/null;; INSTDEVICE=/dev/null;;
x"reiserfs") x"reiserfs")
"mkfs.reiserfs" --format=3.6 -b $BLKSIZE -l "$FSLABEL" -q "${LODEVICES[0]}" ;; "mkfs.reiserfs" --format=3.6 -b $BLKSIZE -l "$FSLABEL" -q "${MOUNTDEVICE}" ;;
x"reiserfs_old") x"reiserfs_old")
"mkfs.reiserfs" --format=3.5 -b $BLKSIZE -l "$FSLABEL" -q "${LODEVICES[0]}" "mkfs.reiserfs" --format=3.5 -b $BLKSIZE -l "$FSLABEL" -q "${MOUNTDEVICE}"
MOUNTFS=reiserfs;; MOUNTFS=reiserfs;;
x"jfs") x"jfs")
"mkfs.jfs" -L "$FSLABEL" -q "${LODEVICES[0]}" "mkfs.jfs" -L "$FSLABEL" -q "${MOUNTDEVICE}"
MOUNTOPTS="iocharset=utf8,";; MOUNTOPTS="iocharset=utf8,";;
x"jfs_caseins") x"jfs_caseins")
"mkfs.jfs" -O -L "$FSLABEL" -q "${LODEVICES[0]}" "mkfs.jfs" -O -L "$FSLABEL" -q "${MOUNTDEVICE}"
MOUNTFS=jfs MOUNTFS=jfs
MOUNTOPTS="iocharset=utf8,";; MOUNTOPTS="iocharset=utf8,";;
x"mdraid"*) x"mdraid"*)
mdadm -C --chunk=$((BLKSIZE/1024)) --force -e "${fs:6:1}.${fs:7:1}" "/dev/md/${fs}_${NDEVICES}" --level="${fs:13}" --raid-devices="$NDEVICES" "${LODEVICES[@]}" mdadm -C --chunk=$((BLKSIZE/1024)) --force -e "${fs:6:1}.${fs:7:1}" "/dev/md/${fs}_${NDEVICES}" --level="${fs:13}" --raid-devices="$NDEVICES" $LODEVICES
MOUNTDEVICE="/dev/md/${fs}_${NDEVICES}" MOUNTDEVICE="/dev/md/${fs}_${NDEVICES}"
MOUNTFS=ext2 MOUNTFS=ext2
"mkfs.ext2" -L "$FSLABEL" -q "${MOUNTDEVICE}" ;; "mkfs.ext2" -L "$FSLABEL" -q "${MOUNTDEVICE}" ;;
x"lvm"*) x"lvm"*)
for ((i=0;i<NDEVICES;i++)); do for lodev in $LODEVICES; do
pvcreate "${LODEVICES[i]}" pvcreate "$lodev"
done done
vgcreate -s $((BLKSIZE/1024))K grub_test "${LODEVICES[@]}" vgcreate -s $((BLKSIZE/1024))K grub_test $LODEVICES
if [ x$fs = xlvm ] ; then if [ x$fs = xlvm ] ; then
lvcreate -l "$((NDEVICES*7*LVMBLKMUL))" -n testvol grub_test lvcreate -l "$((NDEVICES*7*LVMBLKMUL))" -n testvol grub_test
elif [ x$fs = xlvm_stripe ] ; then elif [ x$fs = xlvm_stripe ] ; then
@@ -757,22 +787,22 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
MOUNTFS=ext2 MOUNTFS=ext2
"mkfs.ext2" -L "$FSLABEL" -q "${MOUNTDEVICE}" ;; "mkfs.ext2" -L "$FSLABEL" -q "${MOUNTDEVICE}" ;;
xnilfs2) xnilfs2)
"mkfs.nilfs2" -L "$FSLABEL" -b $BLKSIZE -q "${LODEVICES[0]}" ;; "mkfs.nilfs2" -L "$FSLABEL" -b $BLKSIZE -q "${MOUNTDEVICE}" ;;
xext2_old) xext2_old)
MKE2FS_DEVICE_SECTSIZE=$SECSIZE "mkfs.ext2" -r 0 -b $BLKSIZE -L "$FSLABEL" -q "${LODEVICES[0]}" MKE2FS_DEVICE_SECTSIZE=$SECSIZE "mkfs.ext2" -r 0 -b $BLKSIZE -L "$FSLABEL" -q "${MOUNTDEVICE}"
MOUNTFS=ext2 MOUNTFS=ext2
;; ;;
xext4_metabg) xext4_metabg)
MKE2FS_DEVICE_SECTSIZE=$SECSIZE "mkfs.ext4" -O meta_bg,^resize_inode -b $BLKSIZE -L "$FSLABEL" -q "${LODEVICES[0]}" MKE2FS_DEVICE_SECTSIZE=$SECSIZE "mkfs.ext4" -O meta_bg,^resize_inode -b $BLKSIZE -L "$FSLABEL" -q "${MOUNTDEVICE}"
MOUNTFS=ext4 MOUNTFS=ext4
;; ;;
xext*) xext*)
MKE2FS_DEVICE_SECTSIZE=$SECSIZE "mkfs.$fs" -b $BLKSIZE -L "$FSLABEL" -q "${LODEVICES[0]}" ;; MKE2FS_DEVICE_SECTSIZE=$SECSIZE "mkfs.$fs" -b $BLKSIZE -L "$FSLABEL" -q "${MOUNTDEVICE}" ;;
xxfs) xxfs)
"mkfs.xfs" -m crc=0 -b size=$BLKSIZE -s size=$SECSIZE -L "$FSLABEL" -q "${LODEVICES[0]}" ;; "mkfs.xfs" -m crc=0 -b size=$BLKSIZE -s size=$SECSIZE -L "$FSLABEL" -q "${MOUNTDEVICE}" ;;
xxfs_crc) xxfs_crc)
MOUNTFS="xfs" MOUNTFS="xfs"
"mkfs.xfs" -m crc=1 -b size=$BLKSIZE -s size=$SECSIZE -L "$FSLABEL" -q "${LODEVICES[0]}" ;; "mkfs.xfs" -m crc=1 -b size=$BLKSIZE -s size=$SECSIZE -L "$FSLABEL" -q "${MOUNTDEVICE}" ;;
*) *)
echo "Add appropriate mkfs command here" echo "Add appropriate mkfs command here"
exit 1 exit 1
@@ -873,11 +903,13 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
*) *)
if ! mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRW" -o ${MOUNTOPTS}${SELINUXOPTS}rw ; then if ! mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRW" -o ${MOUNTOPTS}${SELINUXOPTS}rw ; then
echo "MOUNT FAILED." echo "MOUNT FAILED."
for ((i=0; i < NDEVICES; i++)); do for lodev in $LODEVICES; do
while ! losetup -d "${LODEVICES[i]}"; do while ! losetup -d "$lodev"; do
sleep 1 sleep 1
done done
rm "${FSIMAGES[i]}" done
for i in $(range 0 $((NDEVICES-1)) 1); do
rm "$FSIMAGEP${i}.img"
done done
exit 1; exit 1;
fi fi
@@ -939,11 +971,11 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
if (test x$fs = xvfat12a || test x$fs = xmsdos12a) && test x$BLKSIZE = x131072; then if (test x$fs = xvfat12a || test x$fs = xmsdos12a) && test x$BLKSIZE = x131072; then
# With this config there isn't enough space for full copy. # With this config there isn't enough space for full copy.
# Copy as much as we can # Copy as much as we can
cp "${CFILESSRC[0]}" "$MNTPOINTRW/$OSDIR/${CFILES[0]}" &> /dev/null; cp "${CFILESRC}" "$MNTPOINTRW/$OSDIR/${CFILE}" &> /dev/null;
else else
for ((i=0;i<$CFILESN;i++)); do
cp "${CFILESSRC[i]}" "$MNTPOINTRW/$OSDIR/${CFILES[i]}"; cp "${CFILESRC}" "$MNTPOINTRW/$OSDIR/${CFILE}";
done
fi fi
if [ x$NOSYMLINK != xy ]; then if [ x$NOSYMLINK != xy ]; then
@@ -954,6 +986,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
ln -s "${PDIR2}/$PFIL" "$MNTPOINTRW/$OSDIR/$PSYM" ln -s "${PDIR2}/$PFIL" "$MNTPOINTRW/$OSDIR/$PSYM"
ln -s "$IFILE" "$MNTPOINTRW/$OSDIR/$ISYM" ln -s "$IFILE" "$MNTPOINTRW/$OSDIR/$ISYM"
fi fi
NOHARDLINK=y ###
if [ x$NOHARDLINK != xy ]; then if [ x$NOHARDLINK != xy ]; then
ln "$MNTPOINTRW/$OSDIR/$BASEFILE" "$MNTPOINTRW/$OSDIR/$BASEHARD" ln "$MNTPOINTRW/$OSDIR/$BASEFILE" "$MNTPOINTRW/$OSDIR/$BASEHARD"
fi fi
@@ -968,48 +1001,48 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
sleep 2 sleep 2
;; ;;
x"tarfs") x"tarfs")
(cd "$MASTER"; tar cf "${FSIMAGES[0]}" .) ;; (cd "$MASTER"; tar cf "${FSIMAGEP}0.img" .) ;;
x"cpio_"*) x"cpio_"*)
(cd "$MASTER"; find . | cpio -o -H "${fs/cpio_/}" > "${FSIMAGES[0]}" ) ;; (cd "$MASTER"; find . | cpio -o -H "$(echo ${fs} | sed 's@^cpio_@@')" > "${FSIMAGEP}0.img" ) ;;
x"ziso9660") x"ziso9660")
FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
xorriso -compliance rec_mtime -set_filter_r --zisofs -- -zisofs default -as mkisofs -iso-level 3 -graft-points -R -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" -- -set_filter_r --zisofs -- -zisofs default -add /="$MASTER" ;; xorriso -compliance rec_mtime -set_filter_r --zisofs -- -zisofs default -as mkisofs -iso-level 3 -graft-points -R -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" -- -set_filter_r --zisofs -- -zisofs default -add /="$MASTER" ;;
x"iso9660") x"iso9660")
FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
xorriso --rockridge off -compliance rec_mtime -as mkisofs -iso-level 3 -graft-points -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" /="$MASTER" ;; xorriso --rockridge off -compliance rec_mtime -as mkisofs -iso-level 3 -graft-points -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" /="$MASTER" ;;
x"joliet") x"joliet")
FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
xorriso --rockridge off -compliance rec_mtime -as mkisofs -iso-level 3 -graft-points -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" /="$MASTER" ;; xorriso --rockridge off -compliance rec_mtime -as mkisofs -iso-level 3 -graft-points -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" /="$MASTER" ;;
x"rockridge") x"rockridge")
FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
xorriso --rockridge on -compliance rec_mtime -as mkisofs -iso-level 3 -graft-points -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" /="$MASTER" ;; xorriso --rockridge on -compliance rec_mtime -as mkisofs -iso-level 3 -graft-points -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" /="$MASTER" ;;
x"rockridge_joliet") x"rockridge_joliet")
FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
xorriso --rockridge on -compliance rec_mtime -as mkisofs -iso-level 3 -graft-points -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" /="$MASTER" ;; xorriso --rockridge on -compliance rec_mtime -as mkisofs -iso-level 3 -graft-points -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" /="$MASTER" ;;
x"iso9660_1999") x"iso9660_1999")
FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
xorriso --rockridge off -compliance rec_mtime -as mkisofs -iso-level 4 -graft-points -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" /="$MASTER" ;; xorriso --rockridge off -compliance rec_mtime -as mkisofs -iso-level 4 -graft-points -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" /="$MASTER" ;;
x"joliet_1999") x"joliet_1999")
FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
xorriso --rockridge off -compliance rec_mtime -as mkisofs -iso-level 4 -graft-points -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" /="$MASTER" ;; xorriso --rockridge off -compliance rec_mtime -as mkisofs -iso-level 4 -graft-points -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" /="$MASTER" ;;
x"rockridge_1999") x"rockridge_1999")
FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
xorriso --rockridge on -compliance rec_mtime -as mkisofs -iso-level 4 -graft-points -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" /="$MASTER" ;; xorriso --rockridge on -compliance rec_mtime -as mkisofs -iso-level 4 -graft-points -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" /="$MASTER" ;;
x"rockridge_joliet_1999") x"rockridge_joliet_1999")
FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
xorriso --rockridge on -compliance rec_mtime -as mkisofs -iso-level 4 -graft-points -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" /="$MASTER" ;; xorriso --rockridge on -compliance rec_mtime -as mkisofs -iso-level 4 -graft-points -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" /="$MASTER" ;;
x"romfs") x"romfs")
genromfs -V "$FSLABEL" -f "${FSIMAGES[0]}" -d "$MASTER" ;; genromfs -V "$FSLABEL" -f "${FSIMAGEP}0.img" -d "$MASTER" ;;
xsquash4_*) xsquash4_*)
echo mksquashfs "$MASTER" "${FSIMAGES[0]}" -always-use-fragments -comp "${fs/squash4_/}" -b $BLKSIZE echo mksquashfs "$MASTER" "${FSIMAGEP}0.img" -always-use-fragments -comp "${fs/squash4_/}" -b $BLKSIZE
mksquashfs "$MASTER" "${FSIMAGES[0]}" -always-use-fragments -comp "${fs/squash4_/}" -b $BLKSIZE ;; mksquashfs "$MASTER" "${FSIMAGEP}0.img" -always-use-fragments -comp "${fs/squash4_/}" -b $BLKSIZE ;;
x"bfs") x"bfs")
sleep 1 sleep 1
fusermount -u "$MNTPOINTRW" fusermount -u "$MNTPOINTRW"
;; ;;
xlvm*) xlvm*)
sleep 1 sleep 1
for ((try=0;try < 20; try++)); do for try in $(range 0 20 1); do
if umount "$MNTPOINTRW" ; then if umount "$MNTPOINTRW" ; then
break; break;
fi fi
@@ -1021,7 +1054,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
;; ;;
xmdraid*) xmdraid*)
sleep 1 sleep 1
for ((try=0;try < 20; try++)); do for try in $(range 0 20 1); do
if umount "$MNTPOINTRW" ; then if umount "$MNTPOINTRW" ; then
break; break;
fi fi
@@ -1033,7 +1066,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
;; ;;
*) *)
sleep 1 sleep 1
for ((try=0;try < 20; try++)); do for try in $(range 0 20 1); do
if umount "$MNTPOINTRW" ; then if umount "$MNTPOINTRW" ; then
break; break;
fi fi
@@ -1066,7 +1099,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
sleep 1 sleep 1
mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRO" -o ${MOUNTOPTS}${SELINUXOPTS}ro ;; mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRO" -o ${MOUNTOPTS}${SELINUXOPTS}ro ;;
xmdraid*) xmdraid*)
mdadm --assemble /dev/md/"${fs}_$NDEVICES" "${LODEVICES[@]}" mdadm --assemble /dev/md/"${fs}_$NDEVICES" $LODEVICES
sleep 1 sleep 1
mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRO" -o ${MOUNTOPTS}${SELINUXOPTS}ro ;; mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRO" -o ${MOUNTOPTS}${SELINUXOPTS}ro ;;
*) *)
@@ -1085,7 +1118,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
else else
echo LIST FAIL echo LIST FAIL
echo "$LSROUT" echo "$LSROUT"
TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO" TZ=UTC ls -l "$MNTPOINTRO"
exit 1 exit 1
fi fi
@@ -1094,7 +1127,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
else else
echo NLIST FAIL echo NLIST FAIL
echo "$LSROUT" echo "$LSROUT"
TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -lA "$MNTPOINTRO" TZ=UTC ls -lA "$MNTPOINTRO"
exit 1 exit 1
fi fi
@@ -1103,7 +1136,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
else else
echo ILIST FAIL echo ILIST FAIL
echo "$LSROUT" echo "$LSROUT"
TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO" TZ=UTC ls -l "$MNTPOINTRO"
exit 1 exit 1
fi fi
@@ -1112,7 +1145,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
else else
echo LONG LIST FAIL echo LONG LIST FAIL
echo "$LSROUT" echo "$LSROUT"
TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO" TZ=UTC ls -l "$MNTPOINTRO"
exit 1 exit 1
fi fi
@@ -1123,7 +1156,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
else else
echo TIME FAIL echo TIME FAIL
echo "$LSROUT" echo "$LSROUT"
TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO" TZ=UTC ls -l "$MNTPOINTRO"
exit 1 exit 1
fi fi
@@ -1133,7 +1166,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
else else
echo LONG TIME FAIL echo LONG TIME FAIL
echo "$LSROUT" echo "$LSROUT"
TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO" TZ=UTC ls -l "$MNTPOINTRO"
exit 1 exit 1
fi fi
fi fi
@@ -1149,7 +1182,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
else else
echo DOT IN ROOTDIR FAIL echo DOT IN ROOTDIR FAIL
echo "$LSROUT" echo "$LSROUT"
TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO" TZ=UTC ls -l "$MNTPOINTRO"
exit 1 exit 1
fi fi
@@ -1163,7 +1196,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
else else
echo DOTDOT IN ROOTDIR FAIL echo DOTDOT IN ROOTDIR FAIL
echo "$LSROUT" echo "$LSROUT"
TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO" TZ=UTC ls -l "$MNTPOINTRO"
exit 1 exit 1
fi fi
;; ;;
@@ -1180,7 +1213,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
else else
echo SLIST FAIL echo SLIST FAIL
echo "$LSROUT" echo "$LSROUT"
TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO/sdir" TZ=UTC ls -l "$MNTPOINTRO/sdir"
exit 1 exit 1
fi fi
@@ -1195,7 +1228,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
else else
echo PLIST FAIL echo PLIST FAIL
echo "$LSROUT" echo "$LSROUT"
TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO/$PDIR" TZ=UTC ls -l "$MNTPOINTRO/$PDIR"
exit 1 exit 1
fi fi
@@ -1210,7 +1243,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
else else
echo DOT IN SUBDIR FAIL echo DOT IN SUBDIR FAIL
echo "$LSROUT" echo "$LSROUT"
TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO/$OSDIR/sdir" TZ=UTC ls -l "$MNTPOINTRO/$OSDIR/sdir"
exit 1 exit 1
fi fi
@@ -1225,7 +1258,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
else else
echo DOTDOT IN SUBDIR FAIL echo DOTDOT IN SUBDIR FAIL
echo "$LSROUT" echo "$LSROUT"
TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO/$OSDIR/ssdir" TZ=UTC ls -l "$MNTPOINTRO/$OSDIR/ssdir"
exit 1 exit 1
fi fi
@@ -1245,8 +1278,8 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
case x"$fs" in case x"$fs" in
x"iso9660" | x"ziso9660" | xrockridge | xjoliet | xrockridge_joliet | x"iso9660_1999" | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) ;; x"iso9660" | x"ziso9660" | xrockridge | xjoliet | xrockridge_joliet | x"iso9660_1999" | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) ;;
x"zfs"*) x"zfs"*)
for ((i=0;i<NDEVICES;i++)); do for lodev in $LODEVICES; do
FSUUID=$(printf "%016x\n" $(blkid -o export "${LODEVICES[i]}" |grep -F UUID=|sed s,UUID=,,g)) FSUUID=$(printf "%016x\n" $(blkid -o export "$lodev" |grep -F UUID=|sed s,UUID=,,g))
if [ "$FSUUID" != 0000000000000000 ]; then if [ "$FSUUID" != 0000000000000000 ]; then
break; break;
fi fi
@@ -1264,8 +1297,8 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
echo UUID FAIL echo UUID FAIL
echo "$LSOUT" echo "$LSOUT"
echo "$GRUBUUID" echo "$GRUBUUID"
for ((i=0;i<NDEVICES;i++)); do for lodev in $LODEVICES; do
blkid "${LODEVICES[i]}" blkid "$lodev"
done done
exit 1 exit 1
fi fi
@@ -1290,12 +1323,13 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
echo UUID FAIL echo UUID FAIL
echo "$FSUUID" echo "$FSUUID"
echo "$LSOUT" echo "$LSOUT"
blkid "${LODEVICES[0]}" blkid "${MOUNTDEVICE}"
exit 1 exit 1
fi fi
;; ;;
esac esac
if [ x$NOFSTIME != xy ]; then
case x$fs in case x$fs in
xiso9660 | xziso9660 | xrockridge | xjoliet | xrockridge_joliet | xiso9660_1999 | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) xiso9660 | xziso9660 | xrockridge | xjoliet | xrockridge_joliet | xiso9660_1999 | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999)
FSTIME="$(date -d "$(echo ${FSUUID} | awk -F - '{ print $1"-"$2"-"$3" "$4":"$5":"$6 ;}')" '+%Y-%m-%d %H:%M:%S')";; FSTIME="$(date -d "$(echo ${FSUUID} | awk -F - '{ print $1"-"$2"-"$3" "$4":"$5":"$6 ;}')" '+%Y-%m-%d %H:%M:%S')";;
@@ -1304,7 +1338,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
# may be delayed for a long time. # may be delayed for a long time.
FSTIME="$UMOUNT_TIME";; FSTIME="$UMOUNT_TIME";;
*) *)
FSTIME="$(TZ=UTC ls --time-style="+%Y-%m-%d_%H:%M:%S" -l -d "${FSIMAGES[0]}"|awk '{print $6; }'|sed 's,_, ,g')";; FSTIME="$(TZ=UTC ls --time-style="+%Y-%m-%d_%H:%M:%S" -l -d "${FSIMAGEP}0.img"|awk '{print $6; }'|sed 's,_, ,g')";;
esac esac
# With some abstractions like mdraid computing of UMOUNT_TIME # With some abstractions like mdraid computing of UMOUNT_TIME
# is not precise. Account for small difference here. # is not precise. Account for small difference here.
@@ -1312,9 +1346,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
FSTIMEM2="$(date -d "$FSTIME UTC -2 second" -u "+%Y-%m-%d %H:%M:%S")" FSTIMEM2="$(date -d "$FSTIME UTC -2 second" -u "+%Y-%m-%d %H:%M:%S")"
FSTIMEM3="$(date -d "$FSTIME UTC -3 second" -u "+%Y-%m-%d %H:%M:%S")" FSTIMEM3="$(date -d "$FSTIME UTC -3 second" -u "+%Y-%m-%d %H:%M:%S")"
if [ x$NOFSTIME = xy ]; then if echo "$LSOUT" | grep -F 'Last modification time '"$FSTIME" > /dev/null || echo "$LSOUT" | grep -F 'Last modification time '"$FSTIMEM1" > /dev/null || echo "$LSOUT" | grep -F 'Last modification time '"$FSTIMEM2" || echo "$LSOUT" | grep -F 'Last modification time '"$FSTIMEM3" > /dev/null; then
:
elif echo "$LSOUT" | grep -F 'Last modification time '"$FSTIME" > /dev/null || echo "$LSOUT" | grep -F 'Last modification time '"$FSTIMEM1" > /dev/null || echo "$LSOUT" | grep -F 'Last modification time '"$FSTIMEM2" || echo "$LSOUT" | grep -F 'Last modification time '"$FSTIMEM3" > /dev/null; then
: :
else else
echo FSTIME FAIL echo FSTIME FAIL
@@ -1322,6 +1354,7 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
echo "$LSOUT" echo "$LSOUT"
exit 1 exit 1
fi fi
fi
if [ x$NOHARDLINK != xy ]; then if [ x$NOHARDLINK != xy ]; then
if run_grubfstest cmp "$GRUBDIR/$BASEHARD" "$MNTPOINTRO/$OSDIR/$BASEFILE" ; then if run_grubfstest cmp "$GRUBDIR/$BASEHARD" "$MNTPOINTRO/$OSDIR/$BASEFILE" ; then
@@ -1410,11 +1443,9 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
exit 1 exit 1
fi fi
ok=true ok=true
for ((i=0;i<$CFILESN;i++)); do if ! run_grubfstest cmp "$GRUBDIR/${CFILE}" "$MNTPOINTRO/$OSDIR/${CFILE}" ; then
if ! run_grubfstest cmp "$GRUBDIR/${CFILES[i]}" "$MNTPOINTRO/$OSDIR/${CFILES[i]}" ; then
ok=false; ok=false;
fi fi
done
if test x$ok = xtrue; then if test x$ok = xtrue; then
: :
else else
@@ -1503,15 +1534,17 @@ for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE +
sleep 1 sleep 1
;; ;;
esac esac
for ((i=0; i < NDEVICES; i++)); do
case x"$fs" in case x"$fs" in
x"tarfs" | x"cpio_"* | x"iso9660" | xrockridge | xjoliet | xrockridge_joliet | x"ziso9660" | x"romfs" | x"squash4_"* | x"iso9660_1999" | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) ;; x"tarfs" | x"cpio_"* | x"iso9660" | xrockridge | xjoliet | xrockridge_joliet | x"ziso9660" | x"romfs" | x"squash4_"* | x"iso9660_1999" | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) ;;
*) *)
while ! losetup -d "${LODEVICES[i]}"; do for lodev in $LODEVICES; do
while ! losetup -d "$lodev"; do
sleep 1 sleep 1
done
done;; done;;
esac esac
rm "${FSIMAGES[i]}" for i in $(range 0 $((NDEVICES-1)) 1); do
rm "$FSIMAGEP${i}.img"
done done
if [ x"$fs" = x"zfs" ]; then if [ x"$fs" = x"zfs" ]; then
rmdir "$MNTPOINTRW"/"grub fs" || true rmdir "$MNTPOINTRW"/"grub fs" || true
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
set -e set -e
# Compares GRUB script output with BASH output. # Compares GRUB script output with BASH output.
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
set -e set -e
# Run GRUB script in a Qemu instance # Run GRUB script in a Qemu instance
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e
+1 -1
View File
@@ -1,4 +1,4 @@
#! /bin/sh #! @BUILD_SHEBANG@
# Copyright (C) 2013 Free Software Foundation, Inc. # Copyright (C) 2013 Free Software Foundation, Inc.
# #
# GRUB is free software: you can redistribute it and/or modify # GRUB is free software: you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!@BUILD_SHEBANG@
set -e set -e