diff options
Diffstat (limited to 'libre/syslinux')
-rw-r--r-- | libre/syslinux/PKGBUILD | 276 | ||||
-rw-r--r-- | libre/syslinux/splash.png | bin | 11947 -> 0 bytes | |||
-rw-r--r-- | libre/syslinux/splash.xcf | bin | 30757 -> 0 bytes | |||
-rw-r--r-- | libre/syslinux/syslinux-6.02-fix-bios-isolinux.patch | 12 | ||||
-rw-r--r-- | libre/syslinux/syslinux-6.02-fix-chainloading.patch | 47 | ||||
-rw-r--r-- | libre/syslinux/syslinux-6.02-fix-efi-ovmf.patch | 621 | ||||
-rw-r--r-- | libre/syslinux/syslinux-install_update | 453 | ||||
-rw-r--r-- | libre/syslinux/syslinux.cfg | 78 | ||||
-rw-r--r-- | libre/syslinux/syslinux.install | 43 |
9 files changed, 0 insertions, 1530 deletions
diff --git a/libre/syslinux/PKGBUILD b/libre/syslinux/PKGBUILD deleted file mode 100644 index 8b3676cca..000000000 --- a/libre/syslinux/PKGBUILD +++ /dev/null @@ -1,276 +0,0 @@ -# Maintainer (Arch): Tobias Powalowski <tpowa@archlinux.org> -# Maintainer (Arch): Thomas Bächler <thomas@archlinux.org> -# Contributor (Arch): Keshav Amburay <(the ddoott ridikulus ddoott rat) (aatt) (gemmaeiil) (ddoott) (ccoomm)> -# Maintainer: André Silva <emulatorman@parabola.nu> - -## "1" to enable IA32-EFI build in Arch x86_64, "0" to disable -_IA32_EFI_IN_ARCH_X64="1" - -_VER="6.03-pre19" -_GIT_TAG="syslinux-${_VER}" - -pkgname="syslinux" -pkgver="${_VER/-/}" -pkgrel="1" -arch=('x86_64' 'i686') -pkgdesc="Collection of boot loaders that boot from FAT, ext2/3/4 and btrfs filesystems, from CDs and via PXE (Parabola rebranded)" -url="http://syslinux.zytor.com/" -license=('GPL2') -options=('!makeflags' '!emptydirs') -backup=('boot/syslinux/syslinux.cfg' - 'boot/syslinux/splash.png') -makedepends=('git' 'python2' 'nasm' 'ncurses') -if [[ "$CARCH" == "x86_64" ]]; then - makedepends+=('lib32-glibc') -fi -depends=('glibc') -optdepends=('perl-passwd-md5: For md5pass' - 'perl-digest-sha1: For sha1pass' - 'mtools: For mkdiskimage and syslinux support' - 'gptfdisk: For GPT support' - 'util-linux: For isohybrid' - 'efibootmgr: For EFI support' - 'dosfstools: For EFI support') -install="${pkgname}.install" -source=("${pkgname}::git+http://git.zytor.com/syslinux/syslinux.git#tag=${_GIT_TAG}" - "gnu-efi::git+http://git.code.sf.net/p/gnu-efi/code#commit=3c62e78556aea01e9798380cd46794c6ca09d4bd" - 'syslinux.cfg' - 'syslinux-install_update' - 'splash.png') -md5sums=('SKIP' - 'SKIP' - 'f048880b57e2c5a7017ff8804bfda327' - '9376f18fa3e42fc36cffa4cff0a84c09' - 'cb46ca47c6b6323127d908440057d98f') - -_pkgver() { - cd "${srcdir}/${pkgname}/" - echo "$(git describe --tags)" | sed -e 's|syslinux-||g' -e 's|-pre|pre|g' -e 's|-|.|g' -} - -prepare() { - - mv "${srcdir}/${pkgname}" "${srcdir}/${pkgname}-${pkgver}/" - cd "${srcdir}/${pkgname}-${pkgver}/" - - msg "Run git clean" - git clean -x -d -f - - msg "Do not try to build the Windows or DOS installers and DIAG files" - sed 's|diag libinstaller dos win32 win64 dosutil txt|libinstaller txt|g' -i "${srcdir}/${pkgname}-${pkgver}/Makefile" || true - sed 's|win32/syslinux.exe win64/syslinux64.exe||g' -i "${srcdir}/${pkgname}-${pkgver}/Makefile" || true - sed 's|dosutil/*.com dosutil/*.sys||g' -i "${srcdir}/${pkgname}-${pkgver}/Makefile" || true - sed 's|dos/syslinux.com||g' -i "${srcdir}/${pkgname}-${pkgver}/Makefile" || true - sed 's|INSTALLSUBDIRS = com32 utils dosutil|INSTALLSUBDIRS = com32 utils|g' -i "${srcdir}/${pkgname}-${pkgver}/Makefile" || true - sed 's|install -m 644 -c $(INSTALL_DIAG) $(INSTALLROOT)$(DIAGDIR)|# install -m 644 -c $(INSTALL_DIAG) $(INSTALLROOT)$(DIAGDIR)|g' -i "${srcdir}/${pkgname}-${pkgver}/Makefile" || true - sed 's|-include $(MAKEDIR)/devel.mk||g' -i "${srcdir}/${pkgname}-${pkgver}/mk/syslinux.mk" || true - - msg "Fix FHS manpage path" - sed 's|/usr/man|/usr/share/man|g' -i "${srcdir}/${pkgname}-${pkgver}/mk/syslinux.mk" || true - - cd "${srcdir}/gnu-efi/" - - msg "Run git clean for gnu-efi" - git clean -x -d -f - - msg "Revert gnu-efi Makefile 'make install' problamatic commit" - git revert --no-commit 06744d69273de4945cf0ffcaa4a6abf7cec707b6 - - msg "Prepare gnu-efi source" - cp -r "${srcdir}/gnu-efi/gnu-efi-3.0" "${srcdir}/${pkgname}-${pkgver}/gnu-efi/gnu-efi-3.0" - - cd "${srcdir}/${pkgname}-${pkgver}/" - -} - -_build_syslinux_bios() { - - rm -rf "${srcdir}/${pkgname}-${pkgver}-bios/" || true - cp -r "${srcdir}/${pkgname}-${pkgver}" "${srcdir}/${pkgname}-${pkgver}-bios" - - mkdir -p "${srcdir}/${pkgname}-${pkgver}-bios/OBJDIR" - cd "${srcdir}/${pkgname}-${pkgver}-bios/" - - msg "Do not try to compile bios build with our default LDFLAGS, it will fail" - unset LDFLAGS - - msg "Run make bios" - make PYTHON="python2" OBJDIR="${srcdir}/${pkgname}-${pkgver}-bios/OBJDIR" bios - - msg "Run make bios installer" - make PYTHON="python2" OBJDIR="${srcdir}/${pkgname}-${pkgver}-bios/OBJDIR" bios installer - -} - -_build_syslinux_efi64() { - - rm -rf "${srcdir}/${pkgname}-${pkgver}-efi64/" || true - cp -r "${srcdir}/${pkgname}-${pkgver}" "${srcdir}/${pkgname}-${pkgver}-efi64" - - mkdir -p "${srcdir}/${pkgname}-${pkgver}-efi64/OBJDIR/efi64/" - cd "${srcdir}/${pkgname}-${pkgver}-efi64/gnu-efi/gnu-efi-3.0/" - - msg "Unset all compiler FLAGS for gnu-efi efi64 build" - unset CFLAGS - unset CPPFLAGS - unset CXXFLAGS - unset LDFLAGS - unset MAKEFLAGS - - msg "Run make gnu-efi for syslinux efi64" - make ARCH="x86_64" -j1 - - msg "Run make install gnu-efi for syslinux efi64" - make ARCH="x86_64" PREFIX="${srcdir}/${pkgname}-${pkgver}-efi64/OBJDIR/efi64/" -j1 install - - cd "${srcdir}/${pkgname}-${pkgver}-efi64/" - - msg "Unset all compiler FLAGS for efi64 build" - unset CFLAGS - unset CPPFLAGS - unset CXXFLAGS - unset LDFLAGS - unset MAKEFLAGS - - msg "Run make efi64" - make PYTHON="python2" OBJDIR="${srcdir}/${pkgname}-${pkgver}-efi64/OBJDIR" efi64 - - msg "Run make efi64 installer" - make PYTHON="python2" OBJDIR="${srcdir}/${pkgname}-${pkgver}-efi64/OBJDIR" efi64 installer - -} - -_build_syslinux_efi32() { - - rm -rf "${srcdir}/${pkgname}-${pkgver}-efi32/" || true - cp -r "${srcdir}/${pkgname}-${pkgver}" "${srcdir}/${pkgname}-${pkgver}-efi32" - - mkdir -p "${srcdir}/${pkgname}-${pkgver}-efi32/OBJDIR/efi32/" - cd "${srcdir}/${pkgname}-${pkgver}-efi32/gnu-efi/gnu-efi-3.0/" - - msg "Unset all compiler FLAGS for gnu-efi efi32 build" - unset CFLAGS - unset CPPFLAGS - unset CXXFLAGS - unset LDFLAGS - unset MAKEFLAGS - - msg "Run make gnu-efi for syslinux efi32" - make ARCH="ia32" -j1 - - msg "Run make install gnu-efi for syslinux efi32" - make ARCH="ia32" PREFIX="${srcdir}/${pkgname}-${pkgver}-efi32/OBJDIR/efi32/" install - - cd "${srcdir}/${pkgname}-${pkgver}-efi32/" - - msg "Unset all compiler FLAGS for efi32 build" - unset CFLAGS - unset CPPFLAGS - unset CXXFLAGS - unset LDFLAGS - unset MAKEFLAGS - - msg "Run make efi32" - make PYTHON="python2" OBJDIR="${srcdir}/${pkgname}-${pkgver}-efi32/OBJDIR" efi32 - - msg "Run make efi32 installer" - make PYTHON="python2" OBJDIR="${srcdir}/${pkgname}-${pkgver}-efi32/OBJDIR" efi32 installer - -} - -build() { - - cd "${srcdir}/${pkgname}-${pkgver}/" - - if [[ "${CARCH}" == "x86_64" ]]; then - msg "Build syslinux efi64" - _build_syslinux_efi64 - - if [[ "${_IA32_EFI_IN_ARCH_X64}" == "1" ]]; then - msg "Build syslinux efi32" - _build_syslinux_efi32 - fi - fi - - if [[ "${CARCH}" == "i686" ]]; then - msg "Build syslinux efi32" - _build_syslinux_efi32 - fi - - msg "Build syslinux bios" - _build_syslinux_bios - -} - -_package_syslinux_bios() { - - cd "${srcdir}/${pkgname}-${pkgver}-bios/" - - msg "Install Syslinux bios" - make INSTALLROOT="${pkgdir}/" AUXDIR="/usr/lib/syslinux/bios/" OBJDIR="${srcdir}/${pkgname}-${pkgver}-bios/OBJDIR" bios install - - msg "Remove syslinux.exe,syslinux64.exe,syslinux.com and dosutil dir" - rm "${pkgdir}/usr/lib/syslinux/bios"/syslinux.{com,exe} || true - rm "${pkgdir}/usr/lib/syslinux/bios/syslinux64.exe" || true - rm -rf "${pkgdir}/usr/lib/syslinux/bios/dosutil/" || true - - msg "Remove com32 and diag dirs" - rm -rf "${pkgdir}/usr/lib/syslinux/bios/diag/" || true - rm -rf "${pkgdir}/usr/lib/syslinux/bios/com32/" || true - - msg "Move extlinux binary to /usr/bin" - install -d "${pkgdir}/usr/bin" - mv "${pkgdir}/sbin/extlinux" "${pkgdir}/usr/bin/extlinux" - rm -rf "${pkgdir}/sbin/" - - msg "Install syslinux docs" - install -d "${pkgdir}/usr/share/doc" - cp -ar "${srcdir}/${pkgname}-${pkgver}/doc" "${pkgdir}/usr/share/doc/syslinux" - - msg "Install syslinux.cfg" - install -D -m0644 "${srcdir}/syslinux.cfg" "${pkgdir}/boot/syslinux/syslinux.cfg" - - msg "Install the syslinux-install_update script" - ## This script is maintained at https://gist.github.com/pyther/772138 - ## Script not yet updated for syslinux-efi - install -D -m0755 "${srcdir}/syslinux-install_update" "${pkgdir}/usr/bin/syslinux-install_update" - - msg "Install Parabola splash" - install -D -m644 "${srcdir}/splash.png" "${pkgdir}/boot/syslinux/splash.png" -} - -_package_syslinux_efi() { - - cd "${srcdir}/${pkgname}-${pkgver}/" - - if [[ "${CARCH}" == "x86_64" ]]; then - cd "${srcdir}/${pkgname}-${pkgver}-efi64/" - msg "Install Syslinux efi64" - make INSTALLROOT="${pkgdir}/" AUXDIR="/usr/lib/syslinux/" OBJDIR="${srcdir}/${pkgname}-${pkgver}-efi64/OBJDIR" efi64 install - - if [[ "${_IA32_EFI_IN_ARCH_X64}" == "1" ]]; then - cd "${srcdir}/${pkgname}-${pkgver}-efi32/" - msg "Install Syslinux efi32" - make INSTALLROOT="${pkgdir}/" AUXDIR="/usr/lib/syslinux/" OBJDIR="${srcdir}/${pkgname}-${pkgver}-efi32/OBJDIR" efi32 install - fi - fi - - if [[ "${CARCH}" == "i686" ]]; then - cd "${srcdir}/${pkgname}-${pkgver}-efi32/" - msg "Install Syslinux efi32" - make INSTALLROOT="${pkgdir}/" AUXDIR="/usr/lib/syslinux/" OBJDIR="${srcdir}/${pkgname}-${pkgver}-efi32/OBJDIR" efi32 install - fi - -} - -package() { - - cd "${srcdir}/${pkgname}-${pkgver}/" - - msg "Package Syslinux efi" - _package_syslinux_efi - - msg "Package Syslinux bios" - _package_syslinux_bios - -} diff --git a/libre/syslinux/splash.png b/libre/syslinux/splash.png Binary files differdeleted file mode 100644 index eac14536b..000000000 --- a/libre/syslinux/splash.png +++ /dev/null diff --git a/libre/syslinux/splash.xcf b/libre/syslinux/splash.xcf Binary files differdeleted file mode 100644 index c27d04445..000000000 --- a/libre/syslinux/splash.xcf +++ /dev/null diff --git a/libre/syslinux/syslinux-6.02-fix-bios-isolinux.patch b/libre/syslinux/syslinux-6.02-fix-bios-isolinux.patch deleted file mode 100644 index 48df46f12..000000000 --- a/libre/syslinux/syslinux-6.02-fix-bios-isolinux.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/core/isolinux.asm b/core/isolinux.asm -index bd4e9556922d..c4db4133e274 100644 ---- a/core/isolinux.asm -+++ b/core/isolinux.asm -@@ -420,7 +420,7 @@ MaxLMA equ 384*1024 ; Reasonable limit (384K) - call getlinsec - pop eax - pop cx -- mov dx,cx -+ movzx edx,cx - pop bp - pop bx diff --git a/libre/syslinux/syslinux-6.02-fix-chainloading.patch b/libre/syslinux/syslinux-6.02-fix-chainloading.patch deleted file mode 100644 index 6fd7ef4a8..000000000 --- a/libre/syslinux/syslinux-6.02-fix-chainloading.patch +++ /dev/null @@ -1,47 +0,0 @@ -Reported-by: Dark Raven <drdarkraven at gmail.com> -Signed-off-by: Raphael S. Carvalho <raphael.scarv at gmail.com> ---- - com32/lib/syslinux/disk.c | 22 ++++++++++++++-------- - 1 files changed, 14 insertions(+), 8 deletions(-) - -diff --git a/com32/lib/syslinux/disk.c b/com32/lib/syslinux/disk.c -index 0b0c737..47ecb52 100644 ---- a/com32/lib/syslinux/disk.c -+++ b/com32/lib/syslinux/disk.c -@@ -171,22 +171,28 @@ out: - static void *ebios_setup(const struct disk_info *const diskinfo, com32sys_t *inreg, - uint64_t lba, uint8_t count, uint8_t op_code) - { -- static __lowmem struct disk_ebios_dapa dapa; -+ static struct disk_ebios_dapa *dapa = NULL; - void *buf; - -+ if (!dapa) { -+ dapa = lmalloc(sizeof *dapa); -+ if (!dapa) -+ return NULL; -+ } -+ - buf = lmalloc(count * diskinfo->bps); - if (!buf) - return NULL; - -- dapa.len = sizeof(dapa); -- dapa.count = count; -- dapa.off = OFFS(buf); -- dapa.seg = SEG(buf); -- dapa.lba = lba; -+ dapa->len = sizeof(*dapa); -+ dapa->count = count; -+ dapa->off = OFFS(buf); -+ dapa->seg = SEG(buf); -+ dapa->lba = lba; - - inreg->eax.b[1] = op_code; -- inreg->esi.w[0] = OFFS(&dapa); -- inreg->ds = SEG(&dapa); -+ inreg->esi.w[0] = OFFS(dapa); -+ inreg->ds = SEG(dapa); - inreg->edx.b[0] = diskinfo->disk; - - return buf; diff --git a/libre/syslinux/syslinux-6.02-fix-efi-ovmf.patch b/libre/syslinux/syslinux-6.02-fix-efi-ovmf.patch deleted file mode 100644 index f33f4c1de..000000000 --- a/libre/syslinux/syslinux-6.02-fix-efi-ovmf.patch +++ /dev/null @@ -1,621 +0,0 @@ -The value of the field rva_and_sizes_nr is used by OVMF to check the -consistency of the PE file with respect to the field optional_hdr_sz. It -now have the right value. - -Signed-off-by: Celelibi <celelibi at gmail.com> ---- - efi/wrapper.c | 6 +++--- - efi/wrapper.h | 28 ++++++++++++++++------------ - 2 files changed, 19 insertions(+), 15 deletions(-) - -diff --git a/efi/wrapper.c b/efi/wrapper.c -index 04c895f..ec77271 100644 ---- a/efi/wrapper.c -+++ b/efi/wrapper.c -@@ -102,7 +102,7 @@ static void write_header(FILE *f, __uint32_t entry, size_t data_size, - e_hdr.image_sz = total_sz; - e_hdr.headers_sz = 512; - e_hdr.subsystem = IMAGE_SUBSYSTEM_EFI_APPLICATION; -- e_hdr.rva_and_sizes_nr = 1; -+ e_hdr.rva_and_sizes_nr = sizeof(e_hdr.data_directory) / sizeof(__uint64_t); - fwrite(&e_hdr, sizeof(e_hdr), 1, f); - } - else if (class == ELFCLASS64) { -@@ -130,7 +130,7 @@ static void write_header(FILE *f, __uint32_t entry, size_t data_size, - e_hdr_pe32p.image_sz = total_sz; - e_hdr_pe32p.headers_sz = 512; - e_hdr_pe32p.subsystem = IMAGE_SUBSYSTEM_EFI_APPLICATION; -- e_hdr_pe32p.rva_and_sizes_nr = 1; -+ e_hdr_pe32p.rva_and_sizes_nr = sizeof(e_hdr_pe32p.data_directory) / sizeof(__uint64_t); - fwrite(&e_hdr_pe32p, sizeof(e_hdr_pe32p), 1, f); - } - -@@ -237,7 +237,7 @@ int main(int argc, char **argv) - fprintf(stderr, "Unsupported architecture\n"); - exit(EXIT_FAILURE); - } -- -+ - if (id[EI_MAG0] != ELFMAG0 || - id[EI_MAG1] != ELFMAG1 || - id[EI_MAG2] != ELFMAG2 || -diff --git a/efi/wrapper.h b/efi/wrapper.h -index 4f76991..0e6b38e 100644 ---- a/efi/wrapper.h -+++ b/efi/wrapper.h -@@ -102,12 +102,14 @@ struct extra_hdr { - __uint32_t heap_commit_sz; - __uint32_t loader_flags; - __uint32_t rva_and_sizes_nr; -- __uint64_t export_table; -- __uint64_t import_table; -- __uint64_t resource_table; -- __uint64_t exception_table; -- __uint64_t certification_table; -- __uint64_t base_relocation_table; -+ struct { -+ __uint64_t export_table; -+ __uint64_t import_table; -+ __uint64_t resource_table; -+ __uint64_t exception_table; -+ __uint64_t certification_table; -+ __uint64_t base_relocation_table; -+ } data_directory; - } __packed; - - /* Extra header for PE32+ format -@@ -136,12 +138,14 @@ struct extra_hdr_pe32p { - __uint64_t heap_commit_sz; - __uint32_t loader_flags; - __uint32_t rva_and_sizes_nr; -- __uint64_t export_table; -- __uint64_t import_table; -- __uint64_t resource_table; -- __uint64_t exception_table; -- __uint64_t certification_table; -- __uint64_t base_relocation_table; -+ struct { -+ __uint64_t export_table; -+ __uint64_t import_table; -+ __uint64_t resource_table; -+ __uint64_t exception_table; -+ __uint64_t certification_table; -+ __uint64_t base_relocation_table; -+ } data_directory; - } __packed; - - struct section { -In the generated PE file, the section header for the .text section used -to address more than the whole file. Starting at offset 0 (before the -end of the headers) is illegal and is rejected by OVMF. Giving a size -greater than the actual file size is also illegal and rejected. - -Moreover, the actual data inside the PE file have to be aligned to at -least 512 bytes. Hence, .text need to be aligned as well. - -Signed-off-by: Celelibi <celelibi at gmail.com> ---- - efi/wrapper.c | 44 +++++++++++++++++++++++++------------------- - 1 file changed, 25 insertions(+), 19 deletions(-) - -diff --git a/efi/wrapper.c b/efi/wrapper.c -index ec77271..bd2c175 100644 ---- a/efi/wrapper.c -+++ b/efi/wrapper.c -@@ -54,11 +54,15 @@ static void write_header(FILE *f, __uint32_t entry, size_t data_size, - struct coff_hdr c_hdr; - struct header hdr; - struct coff_reloc c_rel; -- __uint32_t total_sz = so_size; -+ __uint32_t total_sz = data_size; - __uint32_t dummy = 0; - __uint32_t hdr_sz; - __uint32_t reloc_start, reloc_end; - -+ hdr_sz = 512; -+ total_sz += hdr_sz; -+ entry += hdr_sz; -+ - memset(&hdr, 0, sizeof(hdr)); - hdr.msdos_signature = MSDOS_SIGNATURE; - -@@ -77,11 +81,6 @@ static void write_header(FILE *f, __uint32_t entry, size_t data_size, - c_hdr.nr_sections = 2; - c_hdr.nr_syms = 1; - if (class == ELFCLASS32) { -- hdr_sz = sizeof(o_hdr) + sizeof(t_sec) + sizeof(e_hdr) + -- sizeof(r_sec) + sizeof(c_hdr) + sizeof(hdr) + sizeof(c_rel) -- + sizeof(dummy); -- total_sz += hdr_sz; -- entry += hdr_sz; - c_hdr.arch = IMAGE_FILE_MACHINE_I386; - c_hdr.characteristics = IMAGE_FILE_32BIT_MACHINE | - IMAGE_FILE_DEBUG_STRIPPED | IMAGE_FILE_EXECUTABLE_IMAGE | -@@ -92,25 +91,20 @@ static void write_header(FILE *f, __uint32_t entry, size_t data_size, - o_hdr.format = PE32_FORMAT; - o_hdr.major_linker_version = 0x02; - o_hdr.minor_linker_version = 0x14; -- o_hdr.code_sz = total_sz; -+ o_hdr.code_sz = data_size; - o_hdr.entry_point = entry; - o_hdr.initialized_data_sz = data_size; - fwrite(&o_hdr, sizeof(o_hdr), 1, f); - memset(&e_hdr, 0, sizeof(e_hdr)); - e_hdr.section_align = 4096; - e_hdr.file_align = 512; -- e_hdr.image_sz = total_sz; -- e_hdr.headers_sz = 512; -+ e_hdr.image_sz = hdr_sz + so_size; -+ e_hdr.headers_sz = hdr_sz; - e_hdr.subsystem = IMAGE_SUBSYSTEM_EFI_APPLICATION; - e_hdr.rva_and_sizes_nr = sizeof(e_hdr.data_directory) / sizeof(__uint64_t); - fwrite(&e_hdr, sizeof(e_hdr), 1, f); - } - else if (class == ELFCLASS64) { -- hdr_sz = sizeof(o_hdr_pe32p) + sizeof(t_sec) + sizeof(e_hdr_pe32p) + -- sizeof(r_sec) + sizeof(c_hdr) + sizeof(hdr) + sizeof(c_rel) -- + sizeof(dummy); -- total_sz += hdr_sz; -- entry += hdr_sz; - c_hdr.arch = IMAGE_FILE_MACHINE_X86_64; - c_hdr.characteristics = IMAGE_FILE_DEBUG_STRIPPED | IMAGE_FILE_EXECUTABLE_IMAGE | - IMAGE_FILE_LINE_NUMBERS_STRIPPED; -@@ -120,15 +114,15 @@ static void write_header(FILE *f, __uint32_t entry, size_t data_size, - o_hdr_pe32p.format = PE32P_FORMAT; - o_hdr_pe32p.major_linker_version = 0x02; - o_hdr_pe32p.minor_linker_version = 0x14; -- o_hdr_pe32p.code_sz = total_sz; -+ o_hdr_pe32p.code_sz = data_size; - o_hdr_pe32p.entry_point = entry; - o_hdr.initialized_data_sz = data_size; - fwrite(&o_hdr_pe32p, sizeof(o_hdr_pe32p), 1, f); - memset(&e_hdr_pe32p, 0, sizeof(e_hdr)); - e_hdr_pe32p.section_align = 4096; - e_hdr_pe32p.file_align = 512; -- e_hdr_pe32p.image_sz = total_sz; -- e_hdr_pe32p.headers_sz = 512; -+ e_hdr_pe32p.image_sz = hdr_sz + so_size; -+ e_hdr_pe32p.headers_sz = hdr_sz; - e_hdr_pe32p.subsystem = IMAGE_SUBSYSTEM_EFI_APPLICATION; - e_hdr_pe32p.rva_and_sizes_nr = sizeof(e_hdr_pe32p.data_directory) / sizeof(__uint64_t); - fwrite(&e_hdr_pe32p, sizeof(e_hdr_pe32p), 1, f); -@@ -136,8 +130,10 @@ static void write_header(FILE *f, __uint32_t entry, size_t data_size, - - memset(&t_sec, 0, sizeof(t_sec)); - strcpy((char *)t_sec.name, ".text"); -- t_sec.virtual_sz = total_sz; -- t_sec.raw_data_sz = total_sz; -+ t_sec.virtual_sz = data_size; -+ t_sec.virtual_address = hdr_sz; -+ t_sec.raw_data_sz = t_sec.virtual_sz; -+ t_sec.raw_data = t_sec.virtual_address; - t_sec.characteristics = IMAGE_SCN_CNT_CODE | - IMAGE_SCN_ALIGN_16BYTES | IMAGE_SCN_MEM_EXECUTE | - IMAGE_SCN_MEM_READ; -@@ -163,6 +159,16 @@ static void write_header(FILE *f, __uint32_t entry, size_t data_size, - fwrite(&c_rel, sizeof(c_rel), 1, f); - fwrite(&dummy, sizeof(dummy), 1, f); - -+ /* -+ * Add some padding to align the ELF as needed -+ */ -+ if (ftell(f) > t_sec.virtual_address) { -+ // A fseek that rewind would be a bug hard to track -+ fprintf(stderr, "PE+ headers are too large.\n"); -+ exit(EXIT_FAILURE); -+ } -+ -+ fseek(f, t_sec.virtual_address, SEEK_SET); - } - - static void usage(char *progname) -There is no need to have a relocation section that nothing points at. -The image is still seen as relocatable as long as the Characteristics of -the FileHeader do not say otherwise. - -Moreover, the field base_relocation_table wasn't initialized properly -leading to unpredictable bugs. - -Signed-off-by: Celelibi <celelibi at gmail.com> ---- - -I'm not 100% positive about the uselessness of the relocation section. However: -1) it works on my real hardware; -2) OVMF doesn't check the section headers at all; -3) all the docs I could find say that the section names are arbitrary; -4) the only way to make the relocation actually happen is by setting the -base_relocation_table field of the extra headers to point to this section; -5) The right way to indicate the image is not relocatable would be by setting -the characteristics IMAGE_FILE_RELOCS_STRIPPED in the coff header. - -Moreover, the relocation entry cannot be inserted before the end of the headers -(512 bytes), this mean we would have to push everything a few bytes further. -And I think it's better if it can be avoided. :) - - efi/wrapper.c | 28 +++------------------------- - 1 file changed, 3 insertions(+), 25 deletions(-) - -diff --git a/efi/wrapper.c b/efi/wrapper.c -index bd2c175..9652368 100644 ---- a/efi/wrapper.c -+++ b/efi/wrapper.c -@@ -48,14 +48,12 @@ static void write_header(FILE *f, __uint32_t entry, size_t data_size, - { - struct optional_hdr o_hdr; - struct optional_hdr_pe32p o_hdr_pe32p; -- struct section t_sec, r_sec; -+ struct section t_sec; - struct extra_hdr e_hdr; - struct extra_hdr_pe32p e_hdr_pe32p; - struct coff_hdr c_hdr; - struct header hdr; -- struct coff_reloc c_rel; - __uint32_t total_sz = data_size; -- __uint32_t dummy = 0; - __uint32_t hdr_sz; - __uint32_t reloc_start, reloc_end; - -@@ -78,7 +76,7 @@ static void write_header(FILE *f, __uint32_t entry, size_t data_size, - fwrite(&hdr, sizeof(hdr), 1, f); - - memset(&c_hdr, 0, sizeof(c_hdr)); -- c_hdr.nr_sections = 2; -+ c_hdr.nr_sections = 1; - c_hdr.nr_syms = 1; - if (class == ELFCLASS32) { - c_hdr.arch = IMAGE_FILE_MACHINE_I386; -@@ -118,7 +116,7 @@ static void write_header(FILE *f, __uint32_t entry, size_t data_size, - o_hdr_pe32p.entry_point = entry; - o_hdr.initialized_data_sz = data_size; - fwrite(&o_hdr_pe32p, sizeof(o_hdr_pe32p), 1, f); -- memset(&e_hdr_pe32p, 0, sizeof(e_hdr)); -+ memset(&e_hdr_pe32p, 0, sizeof(e_hdr_pe32p)); - e_hdr_pe32p.section_align = 4096; - e_hdr_pe32p.file_align = 512; - e_hdr_pe32p.image_sz = hdr_sz + so_size; -@@ -140,26 +138,6 @@ static void write_header(FILE *f, __uint32_t entry, size_t data_size, - fwrite(&t_sec, sizeof(t_sec), 1, f); - - /* -- * Write our dummy relocation and reloc section. -- */ -- memset(&r_sec, 0, sizeof(r_sec)); -- strcpy((char *)r_sec.name, ".reloc"); -- r_sec.virtual_sz = sizeof(c_rel); -- r_sec.virtual_address = ftell(f) + sizeof(r_sec); -- r_sec.raw_data_sz = r_sec.virtual_sz; -- r_sec.raw_data = r_sec.virtual_address; -- r_sec.characteristics = IMAGE_SCN_CNT_INITIALIZED_DATA | -- IMAGE_SCN_ALIGN_1BYTES | IMAGE_SCN_MEM_DISCARDABLE | -- IMAGE_SCN_MEM_READ; -- fwrite(&r_sec, sizeof(r_sec), 1, f); -- -- memset(&c_rel, 0, sizeof(c_rel)); -- c_rel.virtual_address = ftell(f) + sizeof(c_rel); -- c_rel.symtab_index = 10; -- fwrite(&c_rel, sizeof(c_rel), 1, f); -- fwrite(&dummy, sizeof(dummy), 1, f); -- -- /* - * Add some padding to align the ELF as needed - */ - if (ftell(f) > t_sec.virtual_address) { -PE headers code_sz and image_sz indicate more or less, the size of the -file and the size of the in-memory image. They are now given the right -value. - -In the ELF format, only the program headers are reliable to determine -the actually needed part of the file and the in-memory size. - -The .bss section should always be marked as NOLOAD for ld since its -content shouldn't be included into the binary file. - -Signed-off-by: Celelibi <celelibi at gmail.com> ---- - -Again, I'm not 100% positive about the semantics of NOLOAD in a linker script. -However I found this make things work better. -Actually the file core/fs/fs.o have a .bss16 section that is not empty. If I -understood correctly, only .bss can be empty in a .o. Thus ld generates the -zeros that belong to that section in the .o. Then, when merging the section -.bss16 into the .bss of syslinux.so, ld is forced to generate ALL the zeros -that belong to the .bss section. Marking this section as NOLOAD make ld to -ignore its content but still produce a PT_LOAD program header with the right -memory size, as needed for the bss. - - efi/i386/syslinux.ld | 4 +- - efi/wrapper.c | 138 +++++++++++++++---------------------------------- - efi/x86_64/syslinux.ld | 4 +- - 3 files changed, 45 insertions(+), 101 deletions(-) - -diff --git a/efi/i386/syslinux.ld b/efi/i386/syslinux.ld -index 523a9b9..bab3fc7 100644 ---- a/efi/i386/syslinux.ld -+++ b/efi/i386/syslinux.ld -@@ -136,7 +136,7 @@ SECTIONS - *(.strtab) - } - -- .bss : { -+ .bss (NOLOAD) : { - /* the EFI loader doesn't seem to like a .bss section, - so we stick it all into .data: */ - __bss_start = .; -@@ -153,7 +153,7 @@ SECTIONS - __bss_dwords = (__bss_len + 3) >> 2; - - . = ALIGN(128); -- -+ - /* Very large objects which don't need to be zeroed */ - - .hugebss : { -diff --git a/efi/wrapper.c b/efi/wrapper.c -index 9652368..a5247ae 100644 ---- a/efi/wrapper.c -+++ b/efi/wrapper.c -@@ -35,7 +35,7 @@ typedef Elf64_Addr Elf_Addr; - #endif - - /* -- * 'so_size' is the file size of the ELF shared object. -+ * 'so_memsz' is the size of the ELF shared object once loaded. - * 'data_size' is the size of initialised data in the shared object. - * 'class' dictates how the header is written - * For 32bit machines (class == ELFCLASS32), the optional -@@ -44,7 +44,7 @@ typedef Elf64_Addr Elf_Addr; - * header includes PE32+header fields - */ - static void write_header(FILE *f, __uint32_t entry, size_t data_size, -- __uint32_t so_size, __uint8_t class) -+ __uint32_t so_memsz, __uint8_t class) - { - struct optional_hdr o_hdr; - struct optional_hdr_pe32p o_hdr_pe32p; -@@ -96,7 +96,7 @@ static void write_header(FILE *f, __uint32_t entry, size_t data_size, - memset(&e_hdr, 0, sizeof(e_hdr)); - e_hdr.section_align = 4096; - e_hdr.file_align = 512; -- e_hdr.image_sz = hdr_sz + so_size; -+ e_hdr.image_sz = hdr_sz + so_memsz; - e_hdr.headers_sz = hdr_sz; - e_hdr.subsystem = IMAGE_SUBSYSTEM_EFI_APPLICATION; - e_hdr.rva_and_sizes_nr = sizeof(e_hdr.data_directory) / sizeof(__uint64_t); -@@ -119,7 +119,7 @@ static void write_header(FILE *f, __uint32_t entry, size_t data_size, - memset(&e_hdr_pe32p, 0, sizeof(e_hdr_pe32p)); - e_hdr_pe32p.section_align = 4096; - e_hdr_pe32p.file_align = 512; -- e_hdr_pe32p.image_sz = hdr_sz + so_size; -+ e_hdr_pe32p.image_sz = hdr_sz + so_memsz; - e_hdr_pe32p.headers_sz = hdr_sz; - e_hdr_pe32p.subsystem = IMAGE_SUBSYSTEM_EFI_APPLICATION; - e_hdr_pe32p.rva_and_sizes_nr = sizeof(e_hdr_pe32p.data_directory) / sizeof(__uint64_t); -@@ -157,17 +157,16 @@ static void usage(char *progname) - - int main(int argc, char **argv) - { -- struct stat st; - Elf32_Ehdr e32_hdr; - Elf64_Ehdr e64_hdr; - __uint32_t entry; - __uint8_t class; -- __uint64_t shoff; -- __uint16_t shnum, shentsize, shstrndx; -+ __uint64_t phoff = 0; -+ __uint16_t phnum = 0, phentsize = 0; - unsigned char *id; - FILE *f_in, *f_out; - void *buf; -- size_t datasz, rv; -+ size_t datasz, memsz, rv; - - if (argc < 3) { - usage(argv[0]); -@@ -180,11 +179,6 @@ int main(int argc, char **argv) - exit(EXIT_FAILURE); - } - -- if (stat(argv[1], &st) != 0) { -- perror("stat"); -- exit(EXIT_FAILURE); -- } -- - f_out = fopen(argv[2], "w"); - if (!f_out) { - perror("fopen"); -@@ -194,15 +188,14 @@ int main(int argc, char **argv) - /* - * Parse the ELF header and find the entry point. - */ -- fread((void *)&e32_hdr, sizeof(e32_hdr), 1, f_in); -+ fread((void *)&e32_hdr, sizeof(e32_hdr), 1, f_in); - if (e32_hdr.e_ident[EI_CLASS] == ELFCLASS32) { - id = e32_hdr.e_ident; - class = ELFCLASS32; - entry = e32_hdr.e_entry; -- shoff = e32_hdr.e_shoff; -- shnum = e32_hdr.e_shnum; -- shstrndx = e32_hdr.e_shstrndx; -- shentsize = e32_hdr.e_shentsize; -+ phoff = e32_hdr.e_phoff; -+ phnum = e32_hdr.e_phnum; -+ phentsize = e32_hdr.e_phentsize; - } - else if (e32_hdr.e_ident[EI_CLASS] == ELFCLASS64) { - /* read the header again for x86_64 -@@ -213,10 +206,9 @@ int main(int argc, char **argv) - fread((void *)&e64_hdr, sizeof(e64_hdr), 1, f_in); - id = e64_hdr.e_ident; - entry = e64_hdr.e_entry; -- shoff = e64_hdr.e_shoff; -- shnum = e64_hdr.e_shnum; -- shstrndx = e64_hdr.e_shstrndx; -- shentsize = e64_hdr.e_shentsize; -+ phoff = e64_hdr.e_phoff; -+ phnum = e64_hdr.e_phnum; -+ phentsize = e64_hdr.e_phentsize; - } else { - fprintf(stderr, "Unsupported architecture\n"); - exit(EXIT_FAILURE); -@@ -230,98 +222,47 @@ int main(int argc, char **argv) - exit(EXIT_FAILURE); - } - -- if (!shoff || !shnum || (shstrndx == SHN_UNDEF)) { -- fprintf(stderr, "Cannot find section table\n"); -+ if (!phoff || !phnum) { -+ fprintf(stderr, "Cannot find segment table\n"); - exit(EXIT_FAILURE); - } - - /* -- * Find the beginning of the .bss section. Everything preceding -- * it is copied verbatim to the output file. -+ * Find the LOAD program header. Everything in this segment -+ * is copied verbatim to the output file. -+ * Although there may be several LOAD program headers, only -+ * one is currently copied. - */ - if (e32_hdr.e_ident[EI_CLASS] == ELFCLASS32) { -- const char *shstrtab, *name; -- Elf32_Shdr shdr; -+ Elf32_Phdr phdr; - int i; -- void *strtab; -- -- fseek(f_in, shoff, SEEK_SET); -- -- /* First find the strtab section */ -- fseek(f_in, shstrndx * shentsize, SEEK_CUR); -- fread(&shdr, sizeof(shdr), 1, f_in); - -- strtab = malloc(shdr.sh_size); -- if (!strtab) { -- fprintf(stderr, "Failed to malloc strtab\n"); -- exit(EXIT_FAILURE); -- } -- -- fseek(f_in, shdr.sh_offset, SEEK_SET); -- fread(strtab, shdr.sh_size, 1, f_in); -- -- /* Now search for the .bss section */ -- fseek(f_in, shoff, SEEK_SET); -- for (i = 0; i < shnum; i++) { -- rv = fread(&shdr, sizeof(shdr), 1, f_in); -- if (!rv) { -- fprintf(stderr, "Failed to read section table\n"); -- exit(EXIT_FAILURE); -- } -+ /* Find the first LOAD program header */ -+ for (i = 0; i < phnum; i++) { -+ fseek(f_in, phoff + i * phentsize, SEEK_SET); -+ fread(&phdr, sizeof(phdr), 1, f_in); - -- name = strtab + shdr.sh_name; -- if (!strcmp(name, ".bss")) -+ if (phdr.p_type == PT_LOAD) - break; - } - -- if (i == shnum) { -- fprintf(stderr, "Failed to find .bss section\n"); -- exit(EXIT_FAILURE); -- } -- -- datasz = shdr.sh_offset; -- } -- else if (e32_hdr.e_ident[EI_CLASS] == ELFCLASS64) { -- const char *shstrtab, *name; -- Elf64_Shdr shdr; -+ datasz = phdr.p_filesz; -+ memsz = phdr.p_memsz; -+ } else if (e32_hdr.e_ident[EI_CLASS] == ELFCLASS64) { -+ Elf64_Phdr phdr; - int i; -- void *strtab; -- -- fseek(f_in, shoff, SEEK_SET); - -- /* First find the strtab section */ -- fseek(f_in, shstrndx * shentsize, SEEK_CUR); -- fread(&shdr, sizeof(shdr), 1, f_in); -- -- strtab = malloc(shdr.sh_size); -- if (!strtab) { -- fprintf(stderr, "Failed to malloc strtab\n"); -- exit(EXIT_FAILURE); -- } -+ /* Find the first LOAD program header */ -+ for (i = 0; i < phnum; i++) { -+ fseek(f_in, phoff + i * phentsize, SEEK_SET); -+ fread(&phdr, sizeof(phdr), 1, f_in); - -- fseek(f_in, shdr.sh_offset, SEEK_SET); -- fread(strtab, shdr.sh_size, 1, f_in); -- -- /* Now search for the .bss section */ -- fseek(f_in, shoff, SEEK_SET); -- for (i = 0; i < shnum; i++) { -- rv = fread(&shdr, sizeof(shdr), 1, f_in); -- if (!rv) { -- fprintf(stderr, "Failed to read section table\n"); -- exit(EXIT_FAILURE); -- } -- -- name = strtab + shdr.sh_name; -- if (!strcmp(name, ".bss")) -+ if (phdr.p_type == PT_LOAD) - break; - } - -- if (i == shnum) { -- fprintf(stderr, "Failed to find .bss section\n"); -- exit(EXIT_FAILURE); -- } -- -- datasz = shdr.sh_offset; -+ datasz = phdr.p_filesz; -+ memsz = phdr.p_memsz; - } - - buf = malloc(datasz); -@@ -330,7 +271,7 @@ int main(int argc, char **argv) - exit(EXIT_FAILURE); - } - -- write_header(f_out, entry, datasz, st.st_size, class); -+ write_header(f_out, entry, datasz, memsz, class); - - /* Write out the entire ELF shared object */ - rewind(f_in); -@@ -341,5 +282,8 @@ int main(int argc, char **argv) - } - - fwrite(buf, datasz, rv, f_out); -+ free(buf); -+ fclose(f_out); -+ fclose(f_in); - return 0; - } -diff --git a/efi/x86_64/syslinux.ld b/efi/x86_64/syslinux.ld -index 95160bd..450641c 100644 ---- a/efi/x86_64/syslinux.ld -+++ b/efi/x86_64/syslinux.ld -@@ -136,7 +136,7 @@ SECTIONS - *(.strtab) - } - -- .bss : { -+ .bss (NOLOAD) : { - /* the EFI loader doesn't seem to like a .bss section, - so we stick it all into .data: */ - __bss_start = .; -@@ -153,7 +153,7 @@ SECTIONS - __bss_dwords = (__bss_len + 3) >> 2; - - . = ALIGN(128); -- -+ - /* Very large objects which don't need to be zeroed */ - - .hugebss : { diff --git a/libre/syslinux/syslinux-install_update b/libre/syslinux/syslinux-install_update deleted file mode 100644 index 3843b5fed..000000000 --- a/libre/syslinux/syslinux-install_update +++ /dev/null @@ -1,453 +0,0 @@ -#!/usr/bin/env 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 -} - -# 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="$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="$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="${slave%%[[:digit:]]*}" - device_is_gpt "$disk" && local ptb="GPT" || local ptb="MBR" - bootdevs[$slave]="$ptb" - done - else - local disk="${bootpart%%[[:digit:]]*}" - 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="${dev%%[[:digit:]]*}" #ex: /dev/sda - 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:]]}" - case "$part" in - *[[:digit:]]p[[:digit:]]*) - local disk="${part%%p$partnum}" # get everything before p1 - ;; - *) - local disk="${part%%[[:digit:]]*}" - ;; - esac - - if [[ "$ptb" = MBR ]]; then - if sfdisk "$disk" -A "$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 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:]]}" - case "$part" in - *[[:digit:]]p[[:digit:]]*) - local disk="${part%%p$partnum}" # get everything before p1 - ;; - *) - local disk="${part%%[[:digit:]]*}" - ;; - esac - 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 - -# vim: set et sw=4: diff --git a/libre/syslinux/syslinux.cfg b/libre/syslinux/syslinux.cfg deleted file mode 100644 index 0c0c6339a..000000000 --- a/libre/syslinux/syslinux.cfg +++ /dev/null @@ -1,78 +0,0 @@ -# Config file for Syslinux - -# /boot/syslinux/syslinux.cfg -# -# Comboot modules: -# * menu.c32 - provides a text menu -# * vesamenu.c32 - provides a graphical menu -# * chain.c32 - chainload MBRs, partition boot sectors, Windows bootloaders -# * hdt.c32 - hardware detection tool -# * reboot.c32 - reboots the system -# -# To Use: Copy the respective files from /usr/lib/syslinux to /boot/syslinux. -# If /usr and /boot are on the same file system, symlink the files instead -# of copying them. -# -# If you do not use a menu, a 'boot:' prompt will be shown and the system -# will boot automatically after 5 seconds. -# -# Please review the wiki: https://wiki.archlinux.org/index.php/Syslinux -# The wiki provides further configuration examples - -DEFAULT parabola -PROMPT 0 # Set to 1 if you always want to display the boot: prompt -TIMEOUT 50 -# You can create syslinux keymaps with the keytab-lilo tool -#KBDMAP de.ktl - -# Menu Configuration -# Either menu.c32 or vesamenu32.c32 must be copied to /boot/syslinux -#UI menu.c32 -UI vesamenu.c32 - -# Refer to http://syslinux.zytor.com/wiki/index.php/Doc/menu -MENU TITLE Parabola GNU/Linux-libre -MENU BACKGROUND splash.png -MENU COLOR border 35;40 #ff777caa #a0000000 std -MENU COLOR title 1;35;40 #ff777caa #a0000000 std -MENU COLOR sel 7;35;47 #e0ffffff #20777caa all -MENU COLOR unsel 35;40 #ff777caa #a0000000 std -MENU COLOR help 35;40 #c0b2b2b2 #a0000000 std -MENU COLOR timeout_msg 35;40 #ff777caa #00000000 std -MENU COLOR timeout 1;35;40 #ff777caa #00000000 std -MENU COLOR msg07 35;40 #ff777caa #a0000000 std -MENU COLOR tabmsg 35;40 #ff777caa #00000000 std - -# boot sections follow -# -# TIP: If you want a 1024x768 framebuffer, add "vga=773" to your kernel line. -# -#-* - -LABEL parabola - MENU LABEL Parabola GNU/Linux-libre - LINUX ../vmlinuz-linux-libre - APPEND root=/dev/sda3 rw - INITRD ../initramfs-linux-libre.img - -LABEL parabolafallback - MENU LABEL Parabola GNU/Linux-libre Fallback - LINUX ../vmlinuz-linux-libre - APPEND root=/dev/sda3 rw - INITRD ../initramfs-linux-libre-fallback.img - -# If you want Memtest on syslinux, use this LABEL section to launch it (install the memtest86+ package) -# LABEL memtest -# MENU LABEL Memtest86+ -# LINUX ../memtest86+/memtest.bin - -LABEL hdt - MENU LABEL HDT (Hardware Detection Tool) - COM32 hdt.c32 - -LABEL reboot - MENU LABEL Reboot - COM32 reboot.c32 - -LABEL poweroff - MENU LABEL Poweroff - COM32 poweroff.c32 diff --git a/libre/syslinux/syslinux.install b/libre/syslinux/syslinux.install deleted file mode 100644 index ed8387773..000000000 --- a/libre/syslinux/syslinux.install +++ /dev/null @@ -1,43 +0,0 @@ -post_install() { - - cat << EOF - -==> For setting up Syslinux BIOS using the syslinux-install_update script follow - https://wiki.parabolagnulinux.org/index.php/Syslinux#Automatic_Install -EOF - - ## Message specific to Syslinux 4.xx (or 5.xx) to 6.xx upgrade - if [ "$(vercmp $2 6.00)" -lt 0 ]; then - - cat << EOF - -==> If you are upgrading from Syslinux 4.xx or 5.xx, please re-install - (not update) Syslinux BIOS manually (not using the install script) once - by following https://wiki.parabolagnulinux.org/index.php/Syslinux#Manual_install - -==> The install script may not properly upgrade Syslinux to 6.xx version -EOF - - fi - - cat << EOF - -==> For setting up Syslinux EFI follow - https://wiki.parabolagnulinux.org/index.php/Syslinux#UEFI_Systems - -==> The syslinux-install_update script does not currently support EFI install - -EOF - -} - -post_upgrade() { - - ## auto-update syslinux if /boot/syslinux/SYSLINUX_AUTOUPDATE exists - /usr/bin/syslinux-install_update -s - - post_install - -} - -# vim:set ts=2 sw=2 et: |