mirror of
https://gitdl.cn/https://github.com/chakralinux/core.git
synced 2025-01-24 18:42:14 +08:00
Merge branch 'testing' of gitorious.org:chakra-packages/core into testing
This commit is contained in:
commit
8627d5f04c
53
efibootmgr/PKGBUILD
Executable file
53
efibootmgr/PKGBUILD
Executable file
@ -0,0 +1,53 @@
|
||||
#
|
||||
# Core Packages for Chakra, part of chakra-project.org
|
||||
#
|
||||
# maintainer (i686): Phil Miller <philm[at]chakra-project[dog]org>
|
||||
# maintainer (x86_64): Manuel Tortosa <manutortosa[at]chakra-project[dot]org>
|
||||
|
||||
pkgname=efibootmgr
|
||||
pkgver=0.5.4
|
||||
pkgrel=1
|
||||
pkgdesc="Tool to modify UEFI Firmware Boot Manager Variables."
|
||||
arch=('i686' 'x86_64')
|
||||
url="http://linux.dell.com/efibootmgr/"
|
||||
license=('GPL2')
|
||||
depends=('zlib')
|
||||
makedepends=()
|
||||
provides=()
|
||||
options=(strip purge docs zipman !emptydirs)
|
||||
|
||||
source=("http://linux.dell.com/efibootmgr/permalink/${pkgname}-${pkgver}.tar.gz"
|
||||
'efibootmgr_after_0.5.4_git.patch'
|
||||
'efibootmgr_default_to_grub2.patch')
|
||||
|
||||
build () {
|
||||
rm -rf ${srcdir}/efibootmgr-${pkgver}_build/ || true
|
||||
|
||||
cp -r ${srcdir}/efibootmgr-${pkgver} ${srcdir}/efibootmgr-${pkgver}_build
|
||||
|
||||
cd ${srcdir}/efibootmgr-${pkgver}_build/
|
||||
|
||||
patch -Np1 -i ${srcdir}/efibootmgr_after_0.5.4_git.patch
|
||||
patch -Np1 -i ${srcdir}/efibootmgr_default_to_grub2.patch
|
||||
echo
|
||||
|
||||
CFLAGS= make
|
||||
echo
|
||||
|
||||
}
|
||||
|
||||
|
||||
package() {
|
||||
|
||||
mkdir -p ${pkgdir}/usr/sbin/
|
||||
mkdir -p ${pkgdir}/usr/share/man/man8/
|
||||
|
||||
cd ${srcdir}/efibootmgr-${pkgver}_build/
|
||||
|
||||
install -D -m755 ${srcdir}/efibootmgr-${pkgver}_build/src/efibootmgr/efibootmgr ${pkgdir}/usr/sbin/efibootmgr
|
||||
install -D -m644 ${srcdir}/efibootmgr-${pkgver}_build/src/man/man8/efibootmgr.8 ${pkgdir}/usr/share/man/man8/efibootmgr.8
|
||||
|
||||
}
|
||||
md5sums=('cfcf24752d6461b73f7ba964bbf73169'
|
||||
'29730052de0d6911457a26011f8ddb6e'
|
||||
'd31f3c378cf8aac57b71620340c68b24')
|
159
efibootmgr/efibootmgr_after_0.5.4_git.patch
Executable file
159
efibootmgr/efibootmgr_after_0.5.4_git.patch
Executable file
@ -0,0 +1,159 @@
|
||||
diff --git a/src/efibootmgr/efibootmgr.c b/src/efibootmgr/efibootmgr.c
|
||||
index 5db0d9e..199af39 100644
|
||||
--- a/src/efibootmgr/efibootmgr.c
|
||||
+++ b/src/efibootmgr/efibootmgr.c
|
||||
@@ -328,6 +328,7 @@ add_to_boot_order(uint16_t num)
|
||||
/* Now new_data has what we need */
|
||||
memcpy(&(boot_order.Data), new_data, new_data_size);
|
||||
boot_order.DataSize = new_data_size;
|
||||
+ free(new_data);
|
||||
return create_or_edit_variable(&boot_order);
|
||||
}
|
||||
|
||||
diff --git a/src/include/disk.h b/src/include/disk.h
|
||||
index eb93d10..8aa37d7 100644
|
||||
--- a/src/include/disk.h
|
||||
+++ b/src/include/disk.h
|
||||
@@ -65,6 +65,9 @@ enum _interface_type {interface_type_unknown,
|
||||
ata, atapi, scsi, usb,
|
||||
i1394, fibre, i2o, md};
|
||||
|
||||
+
|
||||
+unsigned int lcm(unsigned int x, unsigned int y);
|
||||
+
|
||||
int disk_get_pci(int fd,
|
||||
unsigned char *bus,
|
||||
unsigned char *device,
|
||||
diff --git a/src/lib/disk.c b/src/lib/disk.c
|
||||
index 883864f..8ad590b 100644
|
||||
--- a/src/lib/disk.c
|
||||
+++ b/src/lib/disk.c
|
||||
@@ -55,7 +55,7 @@ disk_info_from_fd(int fd,
|
||||
return 1;
|
||||
}
|
||||
major = buf.st_dev >> 8;
|
||||
- minor = buf.st_dev && 0xFF;
|
||||
+ minor = buf.st_dev & 0xFF;
|
||||
|
||||
/* IDE disks can have up to 64 partitions, or 6 bits worth,
|
||||
* and have one bit for the disk number.
|
||||
@@ -420,6 +420,27 @@ get_sector_size(int filedes)
|
||||
return sector_size;
|
||||
}
|
||||
|
||||
+/************************************************************
|
||||
+ * lcm
|
||||
+ * Requires:
|
||||
+ * - numbers of which to find the lowest common multiple
|
||||
+ * Modifies: nothing
|
||||
+ * Returns:
|
||||
+ * lowest common multiple of x and y
|
||||
+ ************************************************************/
|
||||
+unsigned int
|
||||
+lcm(unsigned int x, unsigned int y)
|
||||
+{
|
||||
+ unsigned int m = x, n = y, o;
|
||||
+
|
||||
+ while ((o = m % n)) {
|
||||
+ m = n;
|
||||
+ n = o;
|
||||
+ }
|
||||
+
|
||||
+ return (x / n) * y;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* disk_get_partition_info()
|
||||
* @fd - open file descriptor to disk
|
||||
@@ -442,26 +463,27 @@ disk_get_partition_info (int fd,
|
||||
uint8_t *mbr_type, uint8_t *signature_type)
|
||||
{
|
||||
legacy_mbr *mbr;
|
||||
- void *mbr_unaligned;
|
||||
+ void *mbr_sector;
|
||||
+ size_t mbr_size;
|
||||
off_t offset;
|
||||
int this_bytes_read = 0;
|
||||
int gpt_invalid=0, mbr_invalid=0;
|
||||
int rc=0;
|
||||
int sector_size = get_sector_size(fd);
|
||||
|
||||
- if (sizeof(*mbr) != sector_size)
|
||||
- return 1;
|
||||
- mbr_unaligned = malloc(sizeof(*mbr)+sector_size-1);
|
||||
- mbr = (legacy_mbr *)
|
||||
- (((unsigned long)mbr_unaligned + sector_size - 1) &
|
||||
- ~(unsigned long)(sector_size-1));
|
||||
- memset(mbr, 0, sizeof(*mbr));
|
||||
+
|
||||
+ mbr_size = lcm(sizeof(*mbr), sector_size);
|
||||
+ if ((rc = posix_memalign(&mbr_sector, sector_size, mbr_size)) != 0)
|
||||
+ goto error;
|
||||
+ memset(mbr_sector, '\0', mbr_size);
|
||||
+
|
||||
offset = lseek(fd, 0, SEEK_SET);
|
||||
- this_bytes_read = read(fd, mbr, sizeof(*mbr));
|
||||
+ this_bytes_read = read(fd, mbr_sector, mbr_size);
|
||||
if (this_bytes_read < sizeof(*mbr)) {
|
||||
rc=1;
|
||||
goto error_free_mbr;
|
||||
}
|
||||
+ mbr = (legacy_mbr *)mbr_sector;
|
||||
gpt_invalid = gpt_disk_get_partition_info(fd, num,
|
||||
start, size,
|
||||
signature,
|
||||
@@ -479,7 +501,8 @@ disk_get_partition_info (int fd,
|
||||
}
|
||||
}
|
||||
error_free_mbr:
|
||||
- free(mbr_unaligned);
|
||||
+ free(mbr_sector);
|
||||
+ error:
|
||||
return rc;
|
||||
}
|
||||
|
||||
diff --git a/src/lib/gpt.c b/src/lib/gpt.c
|
||||
index d90ddaf..83e7a94 100644
|
||||
--- a/src/lib/gpt.c
|
||||
+++ b/src/lib/gpt.c
|
||||
@@ -215,26 +215,24 @@ read_lastoddsector(int fd, uint64_t lba, void *buffer, size_t count)
|
||||
static ssize_t
|
||||
read_lba(int fd, uint64_t lba, void *buffer, size_t bytes)
|
||||
{
|
||||
- int sector_size = get_sector_size(fd);
|
||||
- off_t offset = lba * sector_size;
|
||||
+ int sector_size = get_sector_size(fd);
|
||||
+ off_t offset = lba * sector_size;
|
||||
ssize_t bytesread;
|
||||
- void *aligned;
|
||||
- void *unaligned;
|
||||
-
|
||||
- if (bytes % sector_size)
|
||||
- return EINVAL;
|
||||
+ void *iobuf;
|
||||
+ size_t iobuf_size;
|
||||
+ int rc;
|
||||
|
||||
- unaligned = malloc(bytes+sector_size-1);
|
||||
- aligned = (void *)
|
||||
- (((unsigned long)unaligned + sector_size - 1) &
|
||||
- ~(unsigned long)(sector_size-1));
|
||||
- memset(aligned, 0, bytes);
|
||||
+ iobuf_size = lcm(bytes, sector_size);
|
||||
+ rc = posix_memalign(&iobuf, sector_size, iobuf_size);
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+ memset(iobuf, 0, bytes);
|
||||
|
||||
|
||||
- lseek(fd, offset, SEEK_SET);
|
||||
- bytesread = read(fd, aligned, bytes);
|
||||
- memcpy(buffer, aligned, bytesread);
|
||||
- free(unaligned);
|
||||
+ lseek(fd, offset, SEEK_SET);
|
||||
+ bytesread = read(fd, iobuf, iobuf_size);
|
||||
+ memcpy(buffer, iobuf, bytes);
|
||||
+ free(iobuf);
|
||||
|
||||
/* Kludge. This is necessary to read/write the last
|
||||
block of an odd-sized disk, until Linux 2.5.x kernel fixes.
|
44
efibootmgr/efibootmgr_default_to_grub2.patch
Executable file
44
efibootmgr/efibootmgr_default_to_grub2.patch
Executable file
@ -0,0 +1,44 @@
|
||||
diff --git a/src/efibootmgr/efibootmgr.c b/src/efibootmgr/efibootmgr.c
|
||||
index 199af39..3826e03 100644
|
||||
--- a/src/efibootmgr/efibootmgr.c
|
||||
+++ b/src/efibootmgr/efibootmgr.c
|
||||
@@ -18,7 +18,7 @@
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
- This must tie the EFI_DEVICE_PATH to /boot/efi/elilo.efi
|
||||
+ This must tie the EFI_DEVICE_PATH to /boot/efi/EFI/grub/grub.efi
|
||||
The EFI_DEVICE_PATH will look something like:
|
||||
ACPI device path, length 12 bytes
|
||||
Hardware Device Path, PCI, length 6 bytes
|
||||
@@ -26,7 +26,7 @@
|
||||
Media Device Path, Hard Drive, partition XX, length 30 bytes
|
||||
Media Device Path, File Path, length ??
|
||||
End of Hardware Device Path, length 4
|
||||
- Arguments passed to elilo, as UCS-2 characters, length ??
|
||||
+ Arguments passed to grub2, as UCS-2 characters, length ??
|
||||
|
||||
*/
|
||||
|
||||
@@ -780,8 +780,8 @@ usage()
|
||||
printf("\t-g | --gpt force disk with invalid PMBR to be treated as GPT\n");
|
||||
printf("\t-H | --acpi_hid XXXX set the ACPI HID (used with -i)\n");
|
||||
printf("\t-i | --iface name create a netboot entry for the named interface\n");
|
||||
- printf("\t-l | --loader name (defaults to \\elilo.efi)\n");
|
||||
- printf("\t-L | --label label Boot manager display label (defaults to \"Linux\")\n");
|
||||
+ printf("\t-l | --loader name (defaults to \\EFI\\grub\\grub.efi)\n");
|
||||
+ printf("\t-L | --label label Boot manager display label (defaults to \"GRUB2\")\n");
|
||||
printf("\t-n | --bootnext XXXX set BootNext to XXXX (hex)\n");
|
||||
printf("\t-N | --delete-bootnext delete BootNext\n");
|
||||
printf("\t-o | --bootorder XXXX,YYYY,ZZZZ,... explicitly set BootOrder (hex)\n");
|
||||
@@ -808,8 +808,8 @@ set_default_opts()
|
||||
opts.active = -1; /* Don't set it */
|
||||
opts.timeout = -1; /* Don't set it */
|
||||
opts.edd10_devicenum = 0x80;
|
||||
- opts.loader = "\\elilo.efi";
|
||||
- opts.label = "Linux";
|
||||
+ opts.loader = "\\EFI\\grub\\grub.efi";
|
||||
+ opts.label = "GRUB2";
|
||||
opts.disk = "/dev/sda";
|
||||
opts.iface = NULL;
|
||||
opts.part = 1;
|
Loading…
Reference in New Issue
Block a user