Merge pull request #1563 from ertugerata/master

syslinux new in main repo
This commit is contained in:
Ertuğrul Erata
2016-04-05 14:49:33 +03:00
11 changed files with 1483 additions and 23 deletions
+4 -5
View File
@@ -1,4 +1,3 @@
<?xml version="1.0" ?>
<!DOCTYPE PISI SYSTEM "http://www.pisilinux.org/projeler/pisi/pisi-spec.dtd">
<PISI>
@@ -14,7 +13,7 @@
<IsA>app:console</IsA>
<Summary>Tools to create graphical boot logos</Summary>
<Description>Set of tools to create graphical boot logos, for grub, lilo and syslinux. It supports arch-specific boot menus, advanced help menus, multiple keymaps, animated images, and more graphical pretty things.</Description>
<Archive sha1sum="5a087821613adc605fce8be55fb0366642d1bc48" type="targz">https://github.com/openSUSE/gfxboot/archive/4.5.7.tar.gz</Archive>
<Archive sha1sum="fe0174f38b5001b6173c9cbea0108a332ea1628b" type="targz">https://github.com/openSUSE/gfxboot/archive/4.5.12.tar.gz</Archive>
<BuildDependencies>
<Dependency>xmlto</Dependency>
<Dependency>freetype-devel</Dependency>
@@ -43,9 +42,9 @@
</Package>
<History>
<Update release="1">
<Date>2015-08-05</Date>
<Version>4.5.7</Version>
<Update release="1">
<Date>2016-04-04</Date>
<Version>4.5.12</Version>
<Comment>First release</Comment>
<Name>Ertuğrul Erata</Name>
<Email>ertugrulerata@gmail.com</Email>
+21 -12
View File
@@ -9,29 +9,38 @@ from pisi.actionsapi import autotools
from pisi.actionsapi import pisitools
from pisi.actionsapi import shelltools
tools = ["sha1pass", "md5pass", "mkdiskimage", "keytab-lilo", "syslinux2ansi", "lss16toppm","pxelinux-options"]
tools = ["sha1pass", "md5pass", "mkdiskimage*", "keytab-lilo", "syslinux2ansi", "lss16toppm","pxelinux-options"]
datadir = "/usr/lib/syslinux"
NoStrip = ["/sbin", "/usr/lib"]
pisitools.flags.remove("-fPIC")
def build():
# shelltools.export("CFLAGS", "-Werror -Wno-unused -finline-limit=2000")
shelltools.export("CFLAGS", get.CFLAGS())
shelltools.export("LDFLAGS", "")
# do not swallow efi compilation output to make debugging easier
shelltools.system("sed 's|> /dev/null 2>&1||' -i efi/check-gnu-efi.sh")
# disable debug and development flags to reduce bootloader size
shelltools.system("truncate --size 0 mk/devel.mk")
autotools.make('DATE="PisiLinux" spotless')
autotools.make('DATE="PisiLinux"')
# autotools.make('DATE="PARDUS" installer')
# autotools.make('DATE="PARDUS" -C sample tidy')
autotools.make("-j1 PYTHON=python bios efi64 efi32")
def install():
autotools.rawInstall('INSTALLROOT=%s MANDIR="/usr/share/man" AUXDIR="/usr/lib/syslinux"' % get.installDIR())
for f in tools:
pisitools.insinto(datadir, "utils/"+f)
#pisitools.domove("/usr/lib/syslinux/libutil_com.c32","/usr/lib/syslinux/com32/libutil")
#pisitools.domove("/usr/lib/syslinux/libcom32.c32","/usr/lib/syslinux/com32/lib")
#pisitools.removeDir("/usr/lib/syslinux/com32")
#pisitools.removeDir("/usr/lib/syslinux/dosutil")
#pisitools.remove("/usr/lib/syslinux/syslinux.com")
# pisitools.dodir("/usr/lib/syslinux/bios")
# pisitools.domove("/usr/lib/syslinux/*.c32", "/usr/lib/syslinux/bios")
# pisitools.domove("/usr/lib/syslinux/*.bin", "/usr/lib/syslinux/bios")
# pisitools.domove("/usr/lib/syslinux/*.0", "/usr/lib/syslinux/bios")
# pisitools.domove("/usr/lib/syslinux/memdisk", "/usr/lib/syslinux/bios")
for f in tools:
pisitools.insinto(datadir, "utils/"+f)
pisitools.dodoc("README", "NEWS", "doc/*.txt", "doc/logo/LICENSE")
pisitools.remove("/usr/bin/gethostip")
@@ -0,0 +1,33 @@
From ca745cdfc27b83b6bcef9f856d858a68c64429de Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Tue, 8 Apr 2014 15:28:12 -0400
Subject: [PATCH] Add "install-all target" to top side of HAVE_FIRMWARE.
---
Makefile | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/Makefile b/Makefile
index fb387c5..3429058 100644
--- a/Makefile
+++ b/Makefile
@@ -273,6 +273,16 @@ efi64:
FIRMWARE=EFI64 \
$(MAKECMDGOALS)
+install-all:
+
+install:
+
+netinstall:
+
+clean:
+
+all:
+
else # ifeq($(HAVE_FIRMWARE),)
all: all-local subdirs
--
1.9.3
@@ -0,0 +1,58 @@
From 3106dcd19061b4443c5beba4f0e09412e8d37fbe Mon Sep 17 00:00:00 2001
From: Dany St-Amant <dany.ephemeral.2014@icloud.com>
Date: Fri, 28 Nov 2014 13:48:32 -0500
Subject: [PATCH 35/74] SYSAPPEND: Fix space stripping
The description of SYSAPPEND for the DMI information states that the spaces
are replaced by underscores, but this replacement does not occur in 6.03.
Signed-off-by: Dany St-Amant <dany.ephemeral.2014@icloud.com>
Signed-off-by: Gene Cumm <gene.cumm@gmail.com>
---
com32/elflink/ldlinux/readconfig.c | 2 +-
com32/menu/readconfig.c | 2 +-
core/sysappend.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/com32/elflink/ldlinux/readconfig.c b/com32/elflink/ldlinux/readconfig.c
index 347f826..24f1cc9 100644
--- a/com32/elflink/ldlinux/readconfig.c
+++ b/com32/elflink/ldlinux/readconfig.c
@@ -330,7 +330,7 @@ static char *copy_sysappend_string(char *dst, const char *src)
char c;
while ((c = *src++)) {
- if (c <= ' ' && c == '\x7f') {
+ if (c <= ' ' || c == '\x7f') {
if (!was_space)
*dst++ = '_';
was_space = true;
diff --git a/com32/menu/readconfig.c b/com32/menu/readconfig.c
index b7814be..257b042 100644
--- a/com32/menu/readconfig.c
+++ b/com32/menu/readconfig.c
@@ -299,7 +299,7 @@ static char *copy_sysappend_string(char *dst, const char *src)
char c;
while ((c = *src++)) {
- if (c <= ' ' && c == '\x7f') {
+ if (c <= ' ' || c == '\x7f') {
if (!was_space)
*dst++ = '_';
was_space = true;
diff --git a/core/sysappend.c b/core/sysappend.c
index 5c3f650..758703e 100644
--- a/core/sysappend.c
+++ b/core/sysappend.c
@@ -35,7 +35,7 @@ static char *copy_and_mangle(char *dst, const char *src)
char c;
while ((c = *src++)) {
- if (c <= ' ' && c == '\x7f') {
+ if (c <= ' ' || c == '\x7f') {
if (!was_space)
*dst++ = '_';
was_space = true;
--
2.4.5
+150
View File
@@ -0,0 +1,150 @@
From 548386049cd41e887079cdb904d3954365eb28f3 Mon Sep 17 00:00:00 2001
From: Paulo Alcantara <pcacjr@zytor.com>
Date: Thu, 24 Dec 2015 01:48:13 -0200
Subject: [PATCH 1/1] btrfs: Fix logical to physical block address mapping
The current btrfs support did not handled multiple stripes stored in
chunk items, hence skipping the physical addresses that were needed to
do the mapping.
Besides, the chunk tree may contain DEV_ITEM keys which store
information on all of the underlying block devices, so we must skip them
instead of finishing lookup.
The bug was reproduced with btrfs-progs v4.2.2.
Cc: Gene Cumm <gene.cumm@gmail.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
---
v1 -> v2:
* Do not set ignore_key multiple times. Set it before parsing chunk
tree.
v2 -> v3:
* Replace an unnecessary goto with a continue statement.
---
core/fs/btrfs/btrfs.c | 49 +++++++++++++++++++++++++++++++++----------------
core/fs/btrfs/btrfs.h | 2 ++
2 files changed, 35 insertions(+), 16 deletions(-)
diff --git a/core/fs/btrfs/btrfs.c b/core/fs/btrfs/btrfs.c
index 53e1105..58e1fe6 100644
--- a/core/fs/btrfs/btrfs.c
+++ b/core/fs/btrfs/btrfs.c
@@ -81,7 +81,8 @@ static int btrfs_comp_chunk_map(struct btrfs_chunk_map_item *m1,
}
/* insert a new chunk mapping item */
-static void insert_map(struct fs_info *fs, struct btrfs_chunk_map_item *item)
+static void insert_chunk_item(struct fs_info *fs,
+ struct btrfs_chunk_map_item *item)
{
struct btrfs_info * const bfs = fs->fs_info;
struct btrfs_chunk_map *chunk_map = &bfs->chunk_map;
@@ -113,6 +114,22 @@ static void insert_map(struct fs_info *fs, struct btrfs_chunk_map_item *item)
chunk_map->cur_length++;
}
+static inline void insert_map(struct fs_info *fs, struct btrfs_disk_key *key,
+ struct btrfs_chunk *chunk)
+{
+ struct btrfs_stripe *stripe = &chunk->stripe;
+ struct btrfs_stripe *stripe_end = stripe + chunk->num_stripes;
+ struct btrfs_chunk_map_item item;
+
+ item.logical = key->offset;
+ item.length = chunk->length;
+ for ( ; stripe < stripe_end; stripe++) {
+ item.devid = stripe->devid;
+ item.physical = stripe->offset;
+ insert_chunk_item(fs, &item);
+ }
+}
+
/*
* from sys_chunk_array or chunk_tree, we can convert a logical address to
* a physical address we can not support multi device case yet
@@ -330,7 +347,6 @@ static int next_slot(struct fs_info *fs, struct btrfs_disk_key *key,
static void btrfs_read_sys_chunk_array(struct fs_info *fs)
{
struct btrfs_info * const bfs = fs->fs_info;
- struct btrfs_chunk_map_item item;
struct btrfs_disk_key *key;
struct btrfs_chunk *chunk;
int cur;
@@ -342,12 +358,7 @@ static void btrfs_read_sys_chunk_array(struct fs_info *fs)
cur += sizeof(*key);
chunk = (struct btrfs_chunk *)(bfs->sb.sys_chunk_array + cur);
cur += btrfs_chunk_item_size(chunk->num_stripes);
- /* insert to mapping table, ignore multi stripes */
- item.logical = key->offset;
- item.length = chunk->length;
- item.devid = chunk->stripe.devid;
- item.physical = chunk->stripe.offset;/*ignore other stripes */
- insert_map(fs, &item);
+ insert_map(fs, key, chunk);
}
}
@@ -355,14 +366,18 @@ static void btrfs_read_sys_chunk_array(struct fs_info *fs)
static void btrfs_read_chunk_tree(struct fs_info *fs)
{
struct btrfs_info * const bfs = fs->fs_info;
+ struct btrfs_disk_key ignore_key;
struct btrfs_disk_key search_key;
struct btrfs_chunk *chunk;
- struct btrfs_chunk_map_item item;
struct btrfs_path path;
if (!(bfs->sb.flags & BTRFS_SUPER_FLAG_METADUMP)) {
if (bfs->sb.num_devices > 1)
printf("warning: only support single device btrfs\n");
+
+ ignore_key.objectid = BTRFS_DEV_ITEMS_OBJECTID;
+ ignore_key.type = BTRFS_DEV_ITEM_KEY;
+
/* read chunk from chunk_tree */
search_key.objectid = BTRFS_FIRST_CHUNK_TREE_OBJECTID;
search_key.type = BTRFS_CHUNK_ITEM_KEY;
@@ -371,16 +386,18 @@ static void btrfs_read_chunk_tree(struct fs_info *fs)
search_tree(fs, bfs->sb.chunk_root, &search_key, &path);
do {
do {
+ /* skip information about underlying block
+ * devices.
+ */
+ if (!btrfs_comp_keys_type(&ignore_key,
+ &path.item.key))
+ continue;
if (btrfs_comp_keys_type(&search_key,
- &path.item.key))
+ &path.item.key))
break;
+
chunk = (struct btrfs_chunk *)(path.data);
- /* insert to mapping table, ignore stripes */
- item.logical = path.item.key.offset;
- item.length = chunk->length;
- item.devid = chunk->stripe.devid;
- item.physical = chunk->stripe.offset;
- insert_map(fs, &item);
+ insert_map(fs, &path.item.key, chunk);
} while (!next_slot(fs, &search_key, &path));
if (btrfs_comp_keys_type(&search_key, &path.item.key))
break;
diff --git a/core/fs/btrfs/btrfs.h b/core/fs/btrfs/btrfs.h
index 8f519a9..32e7c70 100644
--- a/core/fs/btrfs/btrfs.h
+++ b/core/fs/btrfs/btrfs.h
@@ -56,6 +56,8 @@ typedef u64 __le64;
#define BTRFS_MAX_LEVEL 8
#define BTRFS_MAX_CHUNK_ENTRIES 256
+#define BTRFS_DEV_ITEMS_OBJECTID 1ULL
+
#define BTRFS_FT_REG_FILE 1
#define BTRFS_FT_DIR 2
#define BTRFS_FT_SYMLINK 7
--
2.5.5.GIT
@@ -0,0 +1,292 @@
From 0cc9a99e560a2f52bcf052fd85b1efae35ee812f Mon Sep 17 00:00:00 2001
From: Sylvain Gault <sylvain.gault@gmail.com>
Date: Tue, 29 Sep 2015 04:45:09 +0200
Subject: [PATCH 1/1] bios: Don't try to guess the sections alignment
For the compression / decompression to succeed, the sections layout must
be the same between the virtual memory and load memory. The section
alignment was kept in sync by introducing aligment that should be
greater or equal to the actual section alignment.
This patch compute the load memory addresses of the sections so that
the layout is the same as the virtual memory addresses.
Signed-off-by: Sylvain Gault <sylvain.gault@gmail.com>
Tested-by: poma <pomidorabelisima@gmail.com>
Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
---
core/i386/syslinux.ld | 63 ++++++++++---------------------------------------
core/x86_64/syslinux.ld | 63 ++++++++++---------------------------------------
2 files changed, 24 insertions(+), 102 deletions(-)
diff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld
index 7390451..92b75b1 100644
--- a/core/i386/syslinux.ld
+++ b/core/i386/syslinux.ld
@@ -255,10 +255,9 @@ SECTIONS
. = 0x100000;
__pm_code_start = .;
+ __vma_to_lma = __pm_code_lma - __pm_code_start;
- __text_vma = .;
- __text_lma = __pm_code_lma;
- .text : AT(__text_lma) {
+ .text : AT(ADDR(.text) + __vma_to_lma) {
FILL(0x90909090)
__text_start = .;
*(.text)
@@ -266,106 +265,68 @@ SECTIONS
__text_end = .;
}
- . = ALIGN(32);
-
- __rodata_vma = .;
- __rodata_lma = __rodata_vma + __text_lma - __text_vma;
- .rodata : AT(__rodata_lma) {
+ .rodata : AT(ADDR(.rodata) + __vma_to_lma) {
__rodata_start = .;
*(.rodata)
*(.rodata.*)
__rodata_end = .;
}
- . = ALIGN(4);
-
- __ctors_vma = .;
- __ctors_lma = __ctors_vma + __text_lma - __text_vma;
- .ctors : AT(__ctors_lma) {
+ .ctors : AT(ADDR(.ctors) + __vma_to_lma) {
__ctors_start = .;
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
__ctors_end = .;
}
- __dtors_vma = .;
- __dtors_lma = __dtors_vma + __text_lma - __text_vma;
- .dtors : AT(__dtors_lma) {
+ .dtors : AT(ADDR(.dtors) + __vma_to_lma) {
__dtors_start = .;
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
__dtors_end = .;
}
- . = ALIGN(4);
-
- __dynsym_vma = .;
- __dynsym_lma = __dynsym_vma + __text_lma - __text_vma;
- .dynsym : AT(__dynsym_lma) {
+ .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) {
__dynsym_start = .;
*(.dynsym)
__dynsym_end = .;
}
__dynsym_len = __dynsym_end - __dynsym_start;
- . = ALIGN(4);
-
- __dynstr_vma = .;
- __dynstr_lma = __dynstr_vma + __text_lma - __text_vma;
- .dynstr : AT(__dynstr_lma) {
+ .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) {
__dynstr_start = .;
*(.dynstr)
__dynstr_end = .;
}
__dynstr_len = __dynstr_end - __dynstr_start;
- . = ALIGN(4);
-
- __gnu_hash_vma = .;
- __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma;
- .gnu.hash : AT(__gnu_hash_lma) {
+ .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) {
__gnu_hash_start = .;
*(.gnu.hash)
__gnu_hash_end = .;
}
- . = ALIGN(4);
-
- __dynlink_vma = .;
- __dynlink_lma = __dynlink_vma + __text_lma - __text_vma;
- .dynlink : AT(__dynlink_lma) {
+ .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) {
__dynlink_start = .;
*(.dynlink)
__dynlink_end = .;
}
- . = ALIGN(4);
-
- __got_vma = .;
- __got_lma = __got_vma + __text_lma - __text_vma;
- .got : AT(__got_lma) {
+ .got : AT(ADDR(.got) + __vma_to_lma) {
__got_start = .;
KEEP (*(.got.plt))
KEEP (*(.got))
__got_end = .;
}
- . = ALIGN(4);
-
- __dynamic_vma = .;
- __dynamic_lma = __dynamic_vma + __text_lma - __text_vma;
- .dynamic : AT(__dynamic_lma) {
+ .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) {
__dynamic_start = .;
*(.dynamic)
__dynamic_end = .;
}
- . = ALIGN(32);
-
- __data_vma = .;
- __data_lma = __data_vma + __text_lma - __text_vma;
- .data : AT(__data_lma) {
+ .data : AT(ADDR(.data) + __vma_to_lma) {
__data_start = .;
*(.data)
*(.data.*)
diff --git a/core/x86_64/syslinux.ld b/core/x86_64/syslinux.ld
index bf815c4..70c6e00 100644
--- a/core/x86_64/syslinux.ld
+++ b/core/x86_64/syslinux.ld
@@ -255,10 +255,9 @@ SECTIONS
. = 0x100000;
__pm_code_start = .;
+ __vma_to_lma = __pm_code_lma - __pm_code_start;
- __text_vma = .;
- __text_lma = __pm_code_lma;
- .text : AT(__text_lma) {
+ .text : AT(ADDR(.text) + __vma_to_lma) {
FILL(0x90909090)
__text_start = .;
*(.text)
@@ -266,106 +265,68 @@ SECTIONS
__text_end = .;
}
- . = ALIGN(32);
-
- __rodata_vma = .;
- __rodata_lma = __rodata_vma + __text_lma - __text_vma;
- .rodata : AT(__rodata_lma) {
+ .rodata : AT(ADDR(.rodata) + __vma_to_lma) {
__rodata_start = .;
*(.rodata)
*(.rodata.*)
__rodata_end = .;
}
- . = ALIGN(4);
-
- __ctors_vma = .;
- __ctors_lma = __ctors_vma + __text_lma - __text_vma;
- .ctors : AT(__ctors_lma) {
+ .ctors : AT(ADDR(.ctors) + __vma_to_lma) {
__ctors_start = .;
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
__ctors_end = .;
}
- __dtors_vma = .;
- __dtors_lma = __dtors_vma + __text_lma - __text_vma;
- .dtors : AT(__dtors_lma) {
+ .dtors : AT(ADDR(.dtors) + __vma_to_lma) {
__dtors_start = .;
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
__dtors_end = .;
}
- . = ALIGN(4);
-
- __dynsym_vma = .;
- __dynsym_lma = __dynsym_vma + __text_lma - __text_vma;
- .dynsym : AT(__dynsym_lma) {
+ .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) {
__dynsym_start = .;
*(.dynsym)
__dynsym_end = .;
}
__dynsym_len = __dynsym_end - __dynsym_start;
- . = ALIGN(4);
-
- __dynstr_vma = .;
- __dynstr_lma = __dynstr_vma + __text_lma - __text_vma;
- .dynstr : AT(__dynstr_lma) {
+ .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) {
__dynstr_start = .;
*(.dynstr)
__dynstr_end = .;
}
__dynstr_len = __dynstr_end - __dynstr_start;
- . = ALIGN(4);
-
- __gnu_hash_vma = .;
- __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma;
- .gnu.hash : AT(__gnu_hash_lma) {
+ .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) {
__gnu_hash_start = .;
*(.gnu.hash)
__gnu_hash_end = .;
}
- . = ALIGN(4);
-
- __dynlink_vma = .;
- __dynlink_lma = __dynlink_vma + __text_lma - __text_vma;
- .dynlink : AT(__dynlink_lma) {
+ .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) {
__dynlink_start = .;
*(.dynlink)
__dynlink_end = .;
}
- . = ALIGN(4);
-
- __got_vma = .;
- __got_lma = __got_vma + __text_lma - __text_vma;
- .got : AT(__got_lma) {
+ .got : AT(ADDR(.got) + __vma_to_lma) {
__got_start = .;
KEEP (*(.got.plt))
KEEP (*(.got))
__got_end = .;
}
- . = ALIGN(4);
-
- __dynamic_vma = .;
- __dynamic_lma = __dynamic_vma + __text_lma - __text_vma;
- .dynamic : AT(__dynamic_lma) {
+ .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) {
__dynamic_start = .;
*(.dynamic)
__dynamic_end = .;
}
- . = ALIGN(32);
-
- __data_vma = .;
- __data_lma = __data_vma + __text_lma - __text_vma;
- .data : AT(__data_lma) {
+ .data : AT(ADDR(.data) + __vma_to_lma) {
__data_start = .;
*(.data)
*(.data.*)
--
2.5.5.GIT
@@ -0,0 +1,286 @@
From: Sylvain Gault <sylvain.gault at gmail.com>
For the compression / decompression to succeed, the sections layout must
be the same between the virtual memory and load memory. The section
alignment was kept in sync by introducing aligment that should be
greater or equal to the actual section alignment.
This patch compute the load memory addresses of the sections so that
the layout is the same as the virtual memory addresses.
Signed-off-by: Sylvain Gault <sylvain.gault at gmail.com>
---
core/i386/syslinux.ld | 63 ++++++++++---------------------------------------
core/x86_64/syslinux.ld | 63 ++++++++++---------------------------------------
2 files changed, 24 insertions(+), 102 deletions(-)
diff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld
index 7390451..92b75b1 100644
--- a/core/i386/syslinux.ld
+++ b/core/i386/syslinux.ld
@@ -255,10 +255,9 @@ SECTIONS
. = 0x100000;
__pm_code_start = .;
+ __vma_to_lma = __pm_code_lma - __pm_code_start;
- __text_vma = .;
- __text_lma = __pm_code_lma;
- .text : AT(__text_lma) {
+ .text : AT(ADDR(.text) + __vma_to_lma) {
FILL(0x90909090)
__text_start = .;
*(.text)
@@ -266,106 +265,68 @@ SECTIONS
__text_end = .;
}
- . = ALIGN(32);
-
- __rodata_vma = .;
- __rodata_lma = __rodata_vma + __text_lma - __text_vma;
- .rodata : AT(__rodata_lma) {
+ .rodata : AT(ADDR(.rodata) + __vma_to_lma) {
__rodata_start = .;
*(.rodata)
*(.rodata.*)
__rodata_end = .;
}
- . = ALIGN(4);
-
- __ctors_vma = .;
- __ctors_lma = __ctors_vma + __text_lma - __text_vma;
- .ctors : AT(__ctors_lma) {
+ .ctors : AT(ADDR(.ctors) + __vma_to_lma) {
__ctors_start = .;
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
__ctors_end = .;
}
- __dtors_vma = .;
- __dtors_lma = __dtors_vma + __text_lma - __text_vma;
- .dtors : AT(__dtors_lma) {
+ .dtors : AT(ADDR(.dtors) + __vma_to_lma) {
__dtors_start = .;
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
__dtors_end = .;
}
- . = ALIGN(4);
-
- __dynsym_vma = .;
- __dynsym_lma = __dynsym_vma + __text_lma - __text_vma;
- .dynsym : AT(__dynsym_lma) {
+ .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) {
__dynsym_start = .;
*(.dynsym)
__dynsym_end = .;
}
__dynsym_len = __dynsym_end - __dynsym_start;
- . = ALIGN(4);
-
- __dynstr_vma = .;
- __dynstr_lma = __dynstr_vma + __text_lma - __text_vma;
- .dynstr : AT(__dynstr_lma) {
+ .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) {
__dynstr_start = .;
*(.dynstr)
__dynstr_end = .;
}
__dynstr_len = __dynstr_end - __dynstr_start;
- . = ALIGN(4);
-
- __gnu_hash_vma = .;
- __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma;
- .gnu.hash : AT(__gnu_hash_lma) {
+ .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) {
__gnu_hash_start = .;
*(.gnu.hash)
__gnu_hash_end = .;
}
- . = ALIGN(4);
-
- __dynlink_vma = .;
- __dynlink_lma = __dynlink_vma + __text_lma - __text_vma;
- .dynlink : AT(__dynlink_lma) {
+ .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) {
__dynlink_start = .;
*(.dynlink)
__dynlink_end = .;
}
- . = ALIGN(4);
-
- __got_vma = .;
- __got_lma = __got_vma + __text_lma - __text_vma;
- .got : AT(__got_lma) {
+ .got : AT(ADDR(.got) + __vma_to_lma) {
__got_start = .;
KEEP (*(.got.plt))
KEEP (*(.got))
__got_end = .;
}
- . = ALIGN(4);
-
- __dynamic_vma = .;
- __dynamic_lma = __dynamic_vma + __text_lma - __text_vma;
- .dynamic : AT(__dynamic_lma) {
+ .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) {
__dynamic_start = .;
*(.dynamic)
__dynamic_end = .;
}
- . = ALIGN(32);
-
- __data_vma = .;
- __data_lma = __data_vma + __text_lma - __text_vma;
- .data : AT(__data_lma) {
+ .data : AT(ADDR(.data) + __vma_to_lma) {
__data_start = .;
*(.data)
*(.data.*)
diff --git a/core/x86_64/syslinux.ld b/core/x86_64/syslinux.ld
index bf815c4..70c6e00 100644
--- a/core/x86_64/syslinux.ld
+++ b/core/x86_64/syslinux.ld
@@ -255,10 +255,9 @@ SECTIONS
. = 0x100000;
__pm_code_start = .;
+ __vma_to_lma = __pm_code_lma - __pm_code_start;
- __text_vma = .;
- __text_lma = __pm_code_lma;
- .text : AT(__text_lma) {
+ .text : AT(ADDR(.text) + __vma_to_lma) {
FILL(0x90909090)
__text_start = .;
*(.text)
@@ -266,106 +265,68 @@ SECTIONS
__text_end = .;
}
- . = ALIGN(32);
-
- __rodata_vma = .;
- __rodata_lma = __rodata_vma + __text_lma - __text_vma;
- .rodata : AT(__rodata_lma) {
+ .rodata : AT(ADDR(.rodata) + __vma_to_lma) {
__rodata_start = .;
*(.rodata)
*(.rodata.*)
__rodata_end = .;
}
- . = ALIGN(4);
-
- __ctors_vma = .;
- __ctors_lma = __ctors_vma + __text_lma - __text_vma;
- .ctors : AT(__ctors_lma) {
+ .ctors : AT(ADDR(.ctors) + __vma_to_lma) {
__ctors_start = .;
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
__ctors_end = .;
}
- __dtors_vma = .;
- __dtors_lma = __dtors_vma + __text_lma - __text_vma;
- .dtors : AT(__dtors_lma) {
+ .dtors : AT(ADDR(.dtors) + __vma_to_lma) {
__dtors_start = .;
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
__dtors_end = .;
}
- . = ALIGN(4);
-
- __dynsym_vma = .;
- __dynsym_lma = __dynsym_vma + __text_lma - __text_vma;
- .dynsym : AT(__dynsym_lma) {
+ .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) {
__dynsym_start = .;
*(.dynsym)
__dynsym_end = .;
}
__dynsym_len = __dynsym_end - __dynsym_start;
- . = ALIGN(4);
-
- __dynstr_vma = .;
- __dynstr_lma = __dynstr_vma + __text_lma - __text_vma;
- .dynstr : AT(__dynstr_lma) {
+ .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) {
__dynstr_start = .;
*(.dynstr)
__dynstr_end = .;
}
__dynstr_len = __dynstr_end - __dynstr_start;
- . = ALIGN(4);
-
- __gnu_hash_vma = .;
- __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma;
- .gnu.hash : AT(__gnu_hash_lma) {
+ .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) {
__gnu_hash_start = .;
*(.gnu.hash)
__gnu_hash_end = .;
}
- . = ALIGN(4);
-
- __dynlink_vma = .;
- __dynlink_lma = __dynlink_vma + __text_lma - __text_vma;
- .dynlink : AT(__dynlink_lma) {
+ .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) {
__dynlink_start = .;
*(.dynlink)
__dynlink_end = .;
}
- . = ALIGN(4);
-
- __got_vma = .;
- __got_lma = __got_vma + __text_lma - __text_vma;
- .got : AT(__got_lma) {
+ .got : AT(ADDR(.got) + __vma_to_lma) {
__got_start = .;
KEEP (*(.got.plt))
KEEP (*(.got))
__got_end = .;
}
- . = ALIGN(4);
-
- __dynamic_vma = .;
- __dynamic_lma = __dynamic_vma + __text_lma - __text_vma;
- .dynamic : AT(__dynamic_lma) {
+ .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) {
__dynamic_start = .;
*(.dynamic)
__dynamic_end = .;
}
- . = ALIGN(32);
-
- __data_vma = .;
- __data_lma = __data_vma + __text_lma - __text_vma;
- .data : AT(__data_lma) {
+ .data : AT(ADDR(.data) + __vma_to_lma) {
__data_start = .;
*(.data)
*(.data.*)
--
2.5.3
@@ -0,0 +1,75 @@
From: Sylvain Gault <sylvain.gault at gmail.com>
The section aligment specified in the ld scripts have to be greater or
equal to those in the .o files generated by gcc.
Signed-off-by: Sylvain Gault <sylvain.gault at gmail.com>
---
core/i386/syslinux.ld | 6 +++---
core/x86_64/syslinux.ld | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld
index 7b4e012..7390451 100644
--- a/core/i386/syslinux.ld
+++ b/core/i386/syslinux.ld
@@ -266,7 +266,7 @@ SECTIONS
__text_end = .;
}
- . = ALIGN(16);
+ . = ALIGN(32);
__rodata_vma = .;
__rodata_lma = __rodata_vma + __text_lma - __text_vma;
@@ -361,7 +361,7 @@ SECTIONS
__dynamic_end = .;
}
- . = ALIGN(16);
+ . = ALIGN(32);
__data_vma = .;
__data_lma = __data_vma + __text_lma - __text_vma;
@@ -377,7 +377,7 @@ SECTIONS
__pm_code_dwords = (__pm_code_len + 3) >> 2;
. = ALIGN(128);
-
+
__bss_vma = .;
__bss_lma = .; /* Dummy */
.bss (NOLOAD) : AT (__bss_lma) {
diff --git a/core/x86_64/syslinux.ld b/core/x86_64/syslinux.ld
index 1057112..bf815c4 100644
--- a/core/x86_64/syslinux.ld
+++ b/core/x86_64/syslinux.ld
@@ -266,7 +266,7 @@ SECTIONS
__text_end = .;
}
- . = ALIGN(16);
+ . = ALIGN(32);
__rodata_vma = .;
__rodata_lma = __rodata_vma + __text_lma - __text_vma;
@@ -361,7 +361,7 @@ SECTIONS
__dynamic_end = .;
}
- . = ALIGN(16);
+ . = ALIGN(32);
__data_vma = .;
__data_lma = __data_vma + __text_lma - __text_vma;
@@ -377,7 +377,7 @@ SECTIONS
__pm_code_dwords = (__pm_code_len + 3) >> 2;
. = ALIGN(128);
-
+
__bss_vma = .;
__bss_lma = .; /* Dummy */
.bss (NOLOAD) : AT (__bss_lma) {
--
2.5.3
@@ -0,0 +1,81 @@
From e5f2b577ded109291c9632dacb6eaa621d8a59fe Mon Sep 17 00:00:00 2001
From: Sylvain Gault <sylvain.gault@gmail.com>
Date: Tue, 29 Sep 2015 02:38:25 +0200
Subject: [PATCH 1/1] bios: Fix alignment change with gcc 5
The section aligment specified in the ld scripts have to be greater or
equal to those in the .o files generated by gcc.
Signed-off-by: Sylvain Gault <sylvain.gault@gmail.com>
Tested-by: poma <pomidorabelisima@gmail.com>
Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
---
core/i386/syslinux.ld | 6 +++---
core/x86_64/syslinux.ld | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld
index 7b4e012..7390451 100644
--- a/core/i386/syslinux.ld
+++ b/core/i386/syslinux.ld
@@ -266,7 +266,7 @@ SECTIONS
__text_end = .;
}
- . = ALIGN(16);
+ . = ALIGN(32);
__rodata_vma = .;
__rodata_lma = __rodata_vma + __text_lma - __text_vma;
@@ -361,7 +361,7 @@ SECTIONS
__dynamic_end = .;
}
- . = ALIGN(16);
+ . = ALIGN(32);
__data_vma = .;
__data_lma = __data_vma + __text_lma - __text_vma;
@@ -377,7 +377,7 @@ SECTIONS
__pm_code_dwords = (__pm_code_len + 3) >> 2;
. = ALIGN(128);
-
+
__bss_vma = .;
__bss_lma = .; /* Dummy */
.bss (NOLOAD) : AT (__bss_lma) {
diff --git a/core/x86_64/syslinux.ld b/core/x86_64/syslinux.ld
index 1057112..bf815c4 100644
--- a/core/x86_64/syslinux.ld
+++ b/core/x86_64/syslinux.ld
@@ -266,7 +266,7 @@ SECTIONS
__text_end = .;
}
- . = ALIGN(16);
+ . = ALIGN(32);
__rodata_vma = .;
__rodata_lma = __rodata_vma + __text_lma - __text_vma;
@@ -361,7 +361,7 @@ SECTIONS
__dynamic_end = .;
}
- . = ALIGN(16);
+ . = ALIGN(32);
__data_vma = .;
__data_lma = __data_vma + __text_lma - __text_vma;
@@ -377,7 +377,7 @@ SECTIONS
__pm_code_dwords = (__pm_code_len + 3) >> 2;
. = ALIGN(128);
-
+
__bss_vma = .;
__bss_lma = .; /* Dummy */
.bss (NOLOAD) : AT (__bss_lma) {
--
2.5.5.GIT
@@ -0,0 +1,464 @@
#!/usr/bin/bash
#
# Syslinux Installer / Updater Script (for BIOS only)
# Copyright (C) 2011-2013 Matthew Gyurgyik <pyther@pyther.net>
# Copyright (C) 2013 Keshav Padram Amburay <(the) (ddoott) (ridikulus) (ddoott) (rat) (aatt) (gemmaeiil) (ddoott) (ccoomm)>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
#-----------------
# ChangeLog:
# 2013-10-23 : Keshav Padram Amburay : Updated script to work with Syslinux 6.02 Arch Linux pkg
#-----------------
# Exit Codes:
# 1 - get_boot_device or other function failed
# 2 - install/update failed
# 3 - set_active failed
# 4 - install_mbr failed
#-----------------
shopt -s nullglob
bios_libpath="/usr/lib/syslinux/bios"
bios_bootpath="/boot/syslinux"
EXTLINUX="/usr/bin/extlinux"
bios_autoupdate_file="/boot/syslinux/SYSLINUX_AUTOUPDATE"
pciids_file="/usr/share/hwdata/pci.ids"
## Helper functions ##
# Taken from libui-sh
# $1 needle
# $2 set (array) haystack
check_is_in() {
local needle="$1" element
shift
for element; do
[[ $element = $needle ]] && return 0
done
return 1
}
get_disk() {
local part=$1
if [[ ! -b "${part}" ]]; then
echo >&2 "error: '$part' is not a valid block device!"
exit 1
fi
case "$part" in
*[[:digit:]]p[[:digit:]]*)
local disk="${part%%p$partnum}" # get everything before p1
;;
*)
local disk="${part%%[[:digit:]]*}"
;;
esac
if [[ ! -b "${disk}" ]]; then
echo >&2 "error: '$disk' is not a valid block device!"
exit 1
fi
echo $disk
}
# return true when blockdevice is an md raid, otherwise return a unset value
# get all devices that are part of raid device $1
device_is_raid() {
[[ $1 && -f /proc/mdstat ]] || return 1
local devmajor=$(stat -c %t "$1")
(( devmajor == 9 ))
}
mdraid_all_slaves() {
local slave slaves
for slave in /sys/class/block/${1##*/}/slaves/*; do
source "$slave/uevent"
slaves="$slaves/dev/$DEVNAME "
unset DEVNAME
done
echo $slaves
}
# Check /sys/block to see if device is partitioned
# If we have a partitioned block device (sda1) /sys/block/sda1/dev will not exist
# However, if we have an unpartitioned block device (sda) /sys/block/sda/dev will exist
dev_is_part() {
# $1 - blockdevice
local dev=$1
# If block device uevent file should be found
# If a partition is passed in path shouldn't exist
if [[ $dev = *cciss* ]]; then
[[ -f /sys/block/cciss\!${dev##*/}/dev ]] && return 1
elif [[ $dev = *ida* ]]; then
[[ -f /sys/block/ida\!${dev##*/}/dev ]] && return 1
else
[[ -f /sys/block/${dev##*/}/dev ]] && return 1
fi
return 0
}
# If EFI PART is present in the first 8 bytes then it must be a GPT disk
device_is_gpt() {
local partsig=$(dd if="$1" skip=64 bs=8 count=1 2>/dev/null)
[[ $partsig = "EFI PART" ]]
}
clear_gpt_attr2() {
# $1 - Block Device, no partitions
local disk=$1
# Special Exception for cciss controllers
if [[ $disk = *cciss* ]]; then
for part in /dev/cciss/${disk##*/}*p*; do
local partnum="${part##*[[:alpha:]]}"
sgdisk "$disk" --attributes="$partnum":clear:2 &>/dev/null
done
# Smart 2 Controllers
elif [[ $disk = *ida* ]]; then
for part in /dev/ida/${disk##*/}*p*; do
local partnum="${part##*[[:alpha:]]}"
sgdisk "$disk" --attributes="$partnum":clear:2 &>/dev/null
done
else
for part in /sys/block/${disk##*/}/${disk##*/}*; do
local partnum="${part##*[[:alpha:]]}"
sgdisk "$disk" --attributes="$partnum":clear:2 &>/dev/null
done
fi
return 0
}
usage() {
cat << EOF
usage: $0 options
This script will install or upgrade Syslinux (for BIOS only)
OPTIONS:
-h Show this message
-i Install Syslinux
-u Update Syslinux
-a Set Boot flag on boot partiton
-m Install Syslinux MBR
-s Updates Syslinux if /boot/syslinux/SYSLINUX_AUTOUPDATE exists
Arguments Required:
-c Chroot install (ex: -c /mnt)
Example Usage: $0 -i -a -m # (install, set boot flag, install mbr)
$0 -u # (update)
EOF
}
# Trys to find the partition that /boot resides on
# This will either be on /boot or / (root)
getBoot() {
if [[ ! -d "$bios_bootpath" ]]; then
echo "Could not find $bios_bootpath"
echo "Is boot mounted? Is Syslinux installed?"
exit 1
fi
syslinux_fs=(ext2 ext3 ext4 btrfs vfat)
# Use DATA from findmnt see rc.sysint for more info
if [[ -f /proc/self/mountinfo ]]; then
read rootdev rootfs < <(findmnt -run -t noautofs -o SOURCE,FSTYPE "$CHROOT/")
read bootdev bootfs < <(findmnt -run -t noautofs -o SOURCE,FSTYPE "$CHROOT/boot")
else
echo "Could not find /proc/self/mountinfo"
echo "Are you running a kernel greater than 2.6.24?"
exit 1
fi
if [[ $bootfs ]]; then
if ! check_is_in "$bootfs" "${syslinux_fs[@]}"; then
echo "/boot file system is not supported by Syslinux"
exit 1
fi
boot="boot"
bootpart="$(readlink -f "$bootdev")"
elif [[ $rootfs ]]; then
if ! check_is_in "$rootfs" "${syslinux_fs[@]}"; then
echo "/ (root) file system is not supported by Syslinux"
exit 1
fi
boot="root"
bootpart="$(readlink -f "$rootdev")"
else
echo "Could not find filesystem on / (root) or /boot."
exit 1
fi
}
# We store the partition table type either gpt or mbr in var ptb
# In rare cases a user could have one raid disk using mbr and another using gpt
# In such cases we accept that the output may be incomplete
# Calls get_ptb() for $bootpart or for all device in RAID
declare -A bootdevs
get_boot_devices() {
if device_is_raid "$bootpart"; then
slaves=$(mdraid_all_slaves "$bootpart")
for slave in ${slaves[@]}; do
local disk=$(get_disk "$slave")
device_is_gpt "$disk" && local ptb="GPT" || local ptb="MBR"
bootdevs[$slave]="$ptb"
done
else
local disk=$(get_disk "$bootpart")
device_is_gpt "$disk" && local ptb="GPT" || local ptb="MBR"
bootdevs[$bootpart]="$ptb"
fi
}
# Function Assumes the boot partition should be marked as active
# All other partitions should not have the boot flag set
set_active() {
# If any bootdev is a block device without partitions bail
# we want to set the boot flag on partitioned disk
for dev in "${!bootdevs[@]}"; do
dev_is_part $dev || { echo "$dev - is a block device. Aborting set_active!"; return 1; }
done
# Clear BIOS Bootable Legacy Attribute for GPT drives
# In rare cases where a RAID device has slaves on the same block device
# Attribute 2 will be cleared for each partition multiple times
for dev in "${!bootdevs[@]}"; do
local ptb="${bootdevs[$dev]}"
if [[ "$ptb" = GPT ]]; then
local disk=$(get_disk "$dev")
clear_gpt_attr2 "$disk"
fi
done
# Set the boot flag on bootdevs (generated from get_boot_devices)
for part in "${!bootdevs[@]}"; do
local ptb="${bootdevs[$part]}"
local partnum="${part##*[[:alpha:]]}"
local disk=$(get_disk "$part")
if [[ "$ptb" = MBR ]]; then
if sfdisk "$disk" --activate "$partnum" &>/dev/null; then
echo "Boot Flag Set - $part"
else
echo "FAILED to Set the boot flag on $part"
exit 3
fi
elif [[ "$ptb" = GPT ]]; then
if [[ ! -e /usr/bin/sgdisk ]]; then
echo "FAILED to set attribute Legacy BIOS Bootable. sgdisk is not found - please install 'gptfdisk' package."
exit 3
fi
if sgdisk "$disk" --attributes="$partnum":set:2 &>/dev/null; then
echo "Attribute Legacy Bios Bootable Set - $part"
else
echo "FAILED to set attribute Legacy BIOS Bootable on $part"
exit 3
fi
fi
done
return 0
}
install_mbr() {
# If any bootdev is a block device without partitions bail
# we want to install the mbr to a partitioned disk
for dev in "${!bootdevs[@]}"; do
dev_is_part "$dev" || { echo "$dev - is a block device. Aborting MBR install"; return 1; }
done
for part in "${!bootdevs[@]}"; do
local partnum="${part##*[[:alpha:]]}"
local disk=$(get_disk "$part")
local ptb="${bootdevs[$part]}"
# We want to install to the root of the block device
# If the device is a partition - ABORT!
dev_is_part "$disk" && \
{ echo "ABORT! MBR installation to partition ($disk)!"; exit 4;}
if [[ "$ptb" = MBR ]]; then
mbrfile="$bios_libpath/mbr.bin"
elif [[ "$ptb" = GPT ]]; then
mbrfile="$bios_libpath/gptmbr.bin"
fi
if dd bs=440 count=1 conv=notrunc if="$mbrfile" of="$disk" &> /dev/null; then
echo "Installed MBR ($mbrfile) to $disk"
else
echo "Error Installing MBR ($mbrfile) to $disk"
exit 4
fi
done
return 0
}
install_modules() {
# Copy all syslinux *.c32 modules to /boot
rm "$bios_bootpath"/*.c32 &> /dev/null
cp "$bios_libpath"/*.c32 "$bios_bootpath"/ &> /dev/null
# Copy / Symlink pci.ids if pci.ids exists on the FS
if [[ -f "$pciids_file" ]]; then
rm "$bios_bootpath/pci.ids" &> /dev/null
cp "$pciids_file" "$bios_bootpath/pci.ids" &> /dev/null
fi
}
_install() {
install_modules
if device_is_raid "$bootpart" ; then
echo "Detected RAID on /boot - installing Syslinux with --raid"
"$EXTLINUX" --install "$bios_bootpath" --raid &> /dev/null
else
"$EXTLINUX" --install "$bios_bootpath" &> /dev/null
fi
if (( $? )); then
echo "Syslinux BIOS install failed"
exit 2
else
echo "Syslinux BIOS install successful"
fi
touch "$CHROOT/$bios_autoupdate_file"
}
update() {
install_modules
if device_is_raid "$bootpart" ; then
echo "Detected RAID on /boot - updating Syslinux with --raid"
"$EXTLINUX" --update "$bios_bootpath" --raid &> /dev/null
else
"$EXTLINUX" --update "$bios_bootpath" &> /dev/null
fi
if (($?)); then
echo "Syslinux BIOS update failed"
exit 2
else
echo "Syslinux BIOS update successful"
fi
}
if (( $# == 0 )); then
usage
exit 1
fi
while getopts "c:uihmas" opt; do
case $opt in
c)
CHROOT=$(readlink -e "$OPTARG")
if [[ -z $CHROOT ]]; then
echo "error: chroot path ``$OPTARG does not exist";
exit 1
fi
;;
h)
USAGE="True"
;;
i)
INSTALL="True"
;;
u)
UPDATE="True"
;;
m)
MBR="True"
;;
a)
SET_ACTIVE="True"
;;
s)
# If AUTOUPDATE_FILE does not exist exit the script
if [[ -f $bios_autoupdate_file ]]; then
UPDATE="True"
else
exit 0
fi
;;
*)
usage
exit 1
;;
esac
done
if [[ $USAGE ]]; then
usage
exit 0
fi
# Display Usage Information if both Install and Update are passed
if [[ $INSTALL && $UPDATE ]]; then
usage
exit 1
fi
# Make sure only root can run our script
if (( $(id -u) != 0 )); then
echo "This script must be run as root" 1>&2
exit 1
fi
# If a chroot dir is path set variables to reflect chroot
if [[ "$CHROOT" ]]; then
bios_libpath="$CHROOT$bios_libpath"
bios_bootpath="$CHROOT$bios_bootpath"
EXTLINUX="$CHROOT$EXTLINUX"
fi
# Exit if no /boot path exists
if ( f=("$bios_bootpath"/*); (( ! ${#f[@]} )) ); then
echo "Error: $bios_bootpath is empty!"
echo "Is /boot mounted?"
exit 1
fi
# Get the boot device if any of these options are passed
if [[ $INSTALL || $UPDATE || $SET_ACTIVE || $MBR ]]; then
getBoot
fi
# Install or Update
if [[ $INSTALL ]]; then
_install || exit
elif [[ $UPDATE ]]; then
update || exit
fi
# SET_ACTIVE and MBR
if [[ $SET_ACTIVE ]] || [[ $MBR ]]; then
get_boot_devices
if [[ $SET_ACTIVE ]]; then
set_active || exit
fi
if [[ $MBR ]]; then
install_mbr || exit
fi
fi
exit 0
+19 -6
View File
@@ -13,14 +13,21 @@
<IsA>app:console</IsA>
<Summary>SysLinux, IsoLinux and PXELinux bootloader</Summary>
<Description>Lightweight bootloaders for floppy media (SYSLINUX), network booting (PXELINUX), and bootable "El Torito" CD-ROMs (ISOLINUX). The project also includes MEMDISK, a tool to boot legacy operating systems (such as DOS) from nontraditional media; it is usually used in conjunction with PXELINUX and ISOLINUX.</Description>
<Archive sha1sum="ceda70713fd575bd46fc497b503ed90f121ab3b1" type="tarxz">https://www.kernel.org/pub/linux/utils/boot/syslinux/4.xx/syslinux-4.07.tar.xz</Archive>
<Archive sha1sum="1bea76b97b4e32a017dd4168e819934b7c6592cc" type="tarxz">https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.xz</Archive>
<BuildDependencies>
<Dependency>nasm</Dependency>
<Dependency>glibc-32bit</Dependency>
<Dependency>asciidoc</Dependency>
<Dependency>efibootmgr-devel</Dependency>
<Dependency>upx</Dependency><!--1-->
<Dependency>libutil-linux-devel</Dependency>
</BuildDependencies>
<Patches>
<Patch level="1">nopie.patch</Patch>
<Patch level="1">fixisohybrid.patch</Patch>
<Patch level="1">0001-Add-install-all-target-to-top-side-of-HAVE_FIRMWARE.patch</Patch>
<Patch level="1">0035-SYSAPPEND-Fix-space-stripping.patch</Patch>
<Patch level="1">gcc-fix-alignment.patch</Patch>
<Patch level="1">dont-guess-alignment.patch</Patch>
<Patch level="1">btrfs-fix.patch</Patch>
</Patches>
</Source>
@@ -28,7 +35,12 @@
<Name>syslinux</Name>
<RuntimeDependencies>
<Dependency>mtools</Dependency>
<Dependency>libutil-linux</Dependency>
<Dependency>libutil-linux</Dependency>
<Dependency>mtools</Dependency>
<Dependency>efibootmgr</Dependency>
<Dependency>util-linux</Dependency>
<Dependency>dosfstools</Dependency>
<Dependency>gptfdisk</Dependency>
<Dependency>perl-Crypt-PasswdMD5</Dependency>
<Dependency>perl-Digest-SHA1</Dependency>
</RuntimeDependencies>
@@ -42,13 +54,14 @@
<AdditionalFiles>
<AdditionalFile target="/usr/lib/syslinux/isolinux.cfg" permission="0644" owner="root">pisi-iso/isolinux.cfg</AdditionalFile>
<AdditionalFile target="/usr/lib/syslinux/background.png" permission="0644" owner="root">pisi-iso/background.png</AdditionalFile>
<!--AdditionalFile target="/usr/bin/syslinux-install_update" permission="0755" owner="root">syslinux-install_update</AdditionalFile-->
</AdditionalFiles>
</Package>
<History>
<Update release="1">
<Date>2014-06-14</Date>
<Version>4.07</Version>
<Date>2016-04-02</Date>
<Version>6.03</Version>
<Comment>First release</Comment>
<Name>Alihan Öztürk</Name>
<Email>alihan@pisilinux.org</Email>