[PATCH 0/4] kickstart custom partitioning
by Brian C. Lane
From: "Brian C. Lane" <bcl(a)redhat.com>
This adds to my previous patchset. We decided that raid on top of lvm was something that
we won't support so we can setup a static list of commands to execute. This also fixes
a couple small bugs in the 20120718 cf33b37 image.
I have tested with the following kickstarts:
* just partitions
* LVM
* RAID1 on partitions
* LVM on RAID1
* BTRFS
* autopart
As well as making sure a non-kickstart install still works.
Brian C. Lane (4):
setup bootloader and partitioning for kickstart
fix grub2 install on RAID
reraise error if there is no ui
rename Group and Script in kickstart.py
pyanaconda/bootloader.py | 6 +++---
pyanaconda/errors.py | 2 +-
pyanaconda/kickstart.py | 19 ++++++++++++-------
pyanaconda/storage/__init__.py | 4 ++++
pyanaconda/ui/gui/spokes/storage.py | 7 +++++++
5 files changed, 27 insertions(+), 11 deletions(-)
--
1.7.7.6
11 years, 9 months
[PATCH anaconda/master] Add support to determine the ARM processor variety and select the correct kernel to install.
by d.marlin
From: "d.marlin" <dmarlin(a)redhat.com>
Signed-off-by: David A. Marlin <dmarlin(a)redhat.com>
-----
diff --git a/pyanaconda/iutil.py b/pyanaconda/iutil.py
index 8fe818d..1c88d30 100644
--- a/pyanaconda/iutil.py
+++ b/pyanaconda/iutil.py
@@ -621,6 +621,20 @@ def getPPCMacBook():
return 1
return 0
+## Get the ARM processor variety.
+# @return The ARM processor variety type, or 0 if not ARM.
+def getARMMachine():
+ if not isARM():
+ return 0
+
+ armMachine = os.uname()[2].rpartition('.' )[2]
+
+ if armMachine.startswith('arm'):
+ return None
+ else:
+ return armMachine
+
+
cell = None
## Determine if the hardware is the Cell platform.
# @return True if so, False otherwise.
diff --git a/pyanaconda/platform.py b/pyanaconda/platform.py
index 8870374..1611797 100644
--- a/pyanaconda/platform.py
+++ b/pyanaconda/platform.py
@@ -335,6 +335,7 @@ class Sparc(Platform):
return start+1
class ARM(Platform):
+ _armMachine = iutil.getARMMachine()
_bootloaderClass = bootloader.GRUB2
_boot_stage1_device_types = ["disk"]
_boot_mbr_description = N_("Master Boot Record")
@@ -343,6 +344,10 @@ class ARM(Platform):
_disklabel_types = ["msdos"]
+ @property
+ def armMachine(self):
+ return self._armMachine
+
def getPlatform(anaconda):
"""Check the architecture of the system and return an instance of a
Platform subclass to match. If the architecture could not be determined,
diff --git a/pyanaconda/yuminstall.py b/pyanaconda/yuminstall.py
index 0ca534b..63d077d 100644
--- a/pyanaconda/yuminstall.py
+++ b/pyanaconda/yuminstall.py
@@ -1465,6 +1465,11 @@ reposdir=/etc/anaconda.repos.d,/tmp/updates/anaconda.repos.d,/tmp/product/anacon
if selectKernel("kernel-PAE"):
foundkernel = True
+ if not foundkernel and iutil.isARM():
+ if anaconda.platform.armMachine is not None:
+ selectKernel("kernel-" + anaconda.platform.armMachine)
+ foundkernel = True
+
if not foundkernel:
selectKernel("kernel")
11 years, 9 months
[PATCH rhel5-branch] Increase size of diskboot.img (#812719)
by Jesse Keating
Size of other files have grown and so we need to grow the size of the
image we create. Patch is from mmatsuya(a)redhat.com
---
scripts/mk-images.x86 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/mk-images.x86 b/scripts/mk-images.x86
index 38556f6..cf7ec08 100644
--- a/scripts/mk-images.x86
+++ b/scripts/mk-images.x86
@@ -99,7 +99,7 @@ makeBootImages() {
# now make a boot pendrive image
mkdir -p $TOPDESTPATH/images/fobpath
- dd if=/dev/zero of=$TOPDESTPATH/images/diskboot.img bs=1M count=12 2>/dev/null
+ dd if=/dev/zero of=$TOPDESTPATH/images/diskboot.img bs=1M count=15 2>/dev/null
mkdosfs $TOPDESTPATH/images/diskboot.img
$SYSLINUX $TOPDESTPATH/images/diskboot.img
mount -o loop $TOPDESTPATH/images/diskboot.img $TOPDESTPATH/images/fobpath
--
1.7.10.4
11 years, 9 months
[rhel5-branch] Add the Hyper-V drivers (#824880)
by Martin Gracik
---
scripts/mk-images | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/scripts/mk-images b/scripts/mk-images
index 95429f5..61dc004 100755
--- a/scripts/mk-images
+++ b/scripts/mk-images
@@ -50,7 +50,8 @@ BTERMMODS="vga16fb"
CRYPTOMODS="aead aes_generic ansi_cprng anubis arc4 authenc blowfish cast5 cast6 cbc ccm chainiv crypto_algapi crypto_api crypto_blkcipher crypto_hash crypto_null cryptomgr ctr deflate des ecb eseqiv gf128mul hmac khazad krng md4 md5 michael_mic rng seqiv serpent sha256 sha512 tcrypt tea tgr192 twofish wp512 xcbc xts"
PCMCIASOCKMODS="yenta_socket i82365 tcic pcmcia"
INFINIBANDMODS="ib_ipoib"
-INITRDMODS="$USBMODS $FIREWIREMODS $IDEMODS $SCSIMODS $FSMODS $LVMMODS $RAIDMODS $CRYPTOMODS $BTERMMODS $COMMONMODS $PCMCIASOCKMODS $INFINIBANDMODS =scsi =net"
+MSHVMODS="hv_storvsc hv_mouse hv_netvsc hv_vmbus"
+INITRDMODS="$USBMODS $FIREWIREMODS $IDEMODS $SCSIMODS $FSMODS $LVMMODS $RAIDMODS $CRYPTOMODS $BTERMMODS $COMMONMODS $PCMCIASOCKMODS $INFINIBANDMODS $MSHVMODS =scsi =net"
# Set, verify, and create paths
KERNELPATH=$1
--
1.7.9.5
11 years, 9 months
[newui] remove anaconda.network object (to use only ksdata)
by Radek Vykydal
This patchset is removing anaconda.network with the goal to use only ksdata
to store network configuration.
See [15/15] for details and what will follow.
I want to do also some furher cleanup, review of hostname setting,
/etc/sysconfig/network setting etc.
11 years, 9 months
[PATCH] Drop gptsync
by Jesse Keating
We're not supporting the boot mode that requires gptsync so don't ship
the software any more.
---
Makefile.am | 2 +-
anaconda.spec.in | 1 -
configure.ac | 1 -
gptsync/.gitignore | 2 -
gptsync/Makefile.am | 35 ----
gptsync/README | 41 -----
gptsync/gptsync.c | 469 ------------------------------------------------
gptsync/gptsync.h | 219 ----------------------
gptsync/lib.c | 469 ------------------------------------------------
gptsync/os_unix.c | 265 ---------------------------
gptsync/showpart.c | 257 --------------------------
gptsync/syslinux_mbr.h | 90 ----------
scripts/makeupdates | 2 +-
13 files changed, 2 insertions(+), 1851 deletions(-)
delete mode 100644 gptsync/.gitignore
delete mode 100644 gptsync/Makefile.am
delete mode 100644 gptsync/README
delete mode 100644 gptsync/gptsync.c
delete mode 100644 gptsync/gptsync.h
delete mode 100644 gptsync/lib.c
delete mode 100644 gptsync/os_unix.c
delete mode 100644 gptsync/showpart.c
delete mode 100644 gptsync/syslinux_mbr.h
diff --git a/Makefile.am b/Makefile.am
index 5f21138..ee37e5e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -19,7 +19,7 @@
ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = pyanaconda gptsync po data \
+SUBDIRS = pyanaconda po data \
tests utils scripts docs dracut
EXTRA_DIST = config.rpath COPYING \
diff --git a/anaconda.spec.in b/anaconda.spec.in
index f0b50ea..194b2ba 100644
--- a/anaconda.spec.in
+++ b/anaconda.spec.in
@@ -227,7 +227,6 @@ update-desktop-database &> /dev/null || :
%{_sbindir}/logpicker
%{_sbindir}/anaconda-cleanup-initramfs
%ifarch i386 i486 i586 i686 x86_64
-%{_sbindir}/gptsync
%{_sbindir}/showpart
%endif
%{_datadir}/anaconda
diff --git a/configure.ac b/configure.ac
index 4e09d02..7353243 100644
--- a/configure.ac
+++ b/configure.ac
@@ -257,7 +257,6 @@ AC_CONFIG_FILES([Makefile
data/command-stubs/Makefile
docs/Makefile
dracut/Makefile
- gptsync/Makefile
pyanaconda/installclasses/Makefile
pyanaconda/iw/Makefile
data/liveinst/Makefile
diff --git a/gptsync/.gitignore b/gptsync/.gitignore
deleted file mode 100644
index 4971cfa..0000000
--- a/gptsync/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-gptsync
-showpart
diff --git a/gptsync/Makefile.am b/gptsync/Makefile.am
deleted file mode 100644
index 7f66432..0000000
--- a/gptsync/Makefile.am
+++ /dev/null
@@ -1,35 +0,0 @@
-# gptsync/Makefile.am for anaconda
-#
-# Copyright (C) 2009 Red Hat, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Author: David Cantrell <dcantrell(a)redhat.com>
-
-COMMON_SRCS = lib.c os_unix.c
-noinst_HEADERS = gptsync.h syslinux_mbr.h
-
-if IS_GPTSYNC_ARCH
-sbin_PROGRAMS = gptsync showpart
-
-gptsync_CFLAGS = -DPROGNAME=gptsync
-gptsync_SOURCES = gptsync.c $(COMMON_SRCS)
-
-showpart_CFLAGS = -DPROGNAME=showpart
-showpart_SOURCES = showpart.c $(COMMON_SRCS)
-endif
-
-EXTRA_DIST = README
-
-MAINTAINERCLEANFILES = Makefile.in
diff --git a/gptsync/README b/gptsync/README
deleted file mode 100644
index cb306bd..0000000
--- a/gptsync/README
+++ /dev/null
@@ -1,41 +0,0 @@
-gptsync is from refit (refit.sf.net). It has been modified to
-1) Not prompt if you want to copy
-2) Default to Linux native (0x83) instead of fat32 partition id
-
-The original license follows.
-
-
- rEFIt License
-===============
-
-Copyright (c) 2006-2007 Christoph Pfisterer
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the
- distribution.
-
- * Neither the name of Christoph Pfisterer nor the names of the
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
diff --git a/gptsync/gptsync.c b/gptsync/gptsync.c
deleted file mode 100644
index 94c37eb..0000000
--- a/gptsync/gptsync.c
+++ /dev/null
@@ -1,469 +0,0 @@
-/*
- * gptsync/gptsync.c
- * Platform-independent code for syncing GPT and MBR
- *
- * Copyright (c) 2006-2007 Christoph Pfisterer
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the
- * distribution.
- *
- * * Neither the name of Christoph Pfisterer nor the names of the
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "gptsync.h"
-
-#include "syslinux_mbr.h"
-
-//
-// MBR functions
-//
-
-static UINTN check_mbr(VOID)
-{
- UINTN i, k;
-
- // check each entry
- for (i = 0; i < mbr_part_count; i++) {
- // check for overlap
- for (k = 0; k < mbr_part_count; k++) {
- if (k != i && !(mbr_parts[i].start_lba > mbr_parts[k].end_lba || mbr_parts[k].start_lba > mbr_parts[i].end_lba)) {
- Print(L"Status: MBR partition table is invalid, partitions overlap.\n");
- return 1;
- }
- }
-
- // check for extended partitions
- if (mbr_parts[i].mbr_type == 0x05 || mbr_parts[i].mbr_type == 0x0f || mbr_parts[i].mbr_type == 0x85) {
- Print(L"Status: Extended partition found in MBR table, will not touch this disk.\n",
- gpt_parts[i].gpt_parttype->name);
- return 1;
- }
- }
-
- return 0;
-}
-
-static UINTN write_mbr(VOID)
-{
- UINTN status;
- UINTN i, k;
- UINT8 active;
- UINT64 lba;
- MBR_PARTITION_INFO *table;
- BOOLEAN have_bootcode;
-
- Print(L"\nWriting new MBR...\n");
-
- // read MBR data
- status = read_sector(0, sector);
- if (status != 0)
- return status;
-
- // write partition table
- *((UINT16 *)(sector + 510)) = 0xaa55;
-
- table = (MBR_PARTITION_INFO *)(sector + 446);
- active = 0x80;
- for (i = 0; i < 4; i++) {
- for (k = 0; k < new_mbr_part_count; k++) {
- if (new_mbr_parts[k].index == i)
- break;
- }
- if (k >= new_mbr_part_count) {
- // unused entry
- table[i].flags = 0;
- table[i].start_chs[0] = 0;
- table[i].start_chs[1] = 0;
- table[i].start_chs[2] = 0;
- table[i].type = 0;
- table[i].end_chs[0] = 0;
- table[i].end_chs[1] = 0;
- table[i].end_chs[2] = 0;
- table[i].start_lba = 0;
- table[i].size = 0;
- } else {
- if (new_mbr_parts[k].active) {
- table[i].flags = active;
- active = 0x00;
- } else
- table[i].flags = 0x00;
- table[i].start_chs[0] = 0xfe;
- table[i].start_chs[1] = 0xff;
- table[i].start_chs[2] = 0xff;
- table[i].type = new_mbr_parts[k].mbr_type;
- table[i].end_chs[0] = 0xfe;
- table[i].end_chs[1] = 0xff;
- table[i].end_chs[2] = 0xff;
-
- lba = new_mbr_parts[k].start_lba;
- if (lba > 0xffffffffULL) {
- Print(L"Warning: Partition %d starts beyond 2 TiB limit\n", i+1);
- lba = 0xffffffffULL;
- }
- table[i].start_lba = (UINT32)lba;
-
- lba = new_mbr_parts[k].end_lba + 1 - new_mbr_parts[k].start_lba;
- if (lba > 0xffffffffULL) {
- Print(L"Warning: Partition %d extends beyond 2 TiB limit\n", i+1);
- lba = 0xffffffffULL;
- }
- table[i].size = (UINT32)lba;
- }
- }
-
- // add boot code if necessary
- have_bootcode = FALSE;
- for (i = 0; i < MBR_BOOTCODE_SIZE; i++) {
- if (sector[i] != 0) {
- have_bootcode = TRUE;
- break;
- }
- }
- if (!have_bootcode) {
- // no boot code found in the MBR, add the syslinux MBR code
- SetMem(sector, 0, MBR_BOOTCODE_SIZE);
- CopyMem(sector, syslinux_mbr, SYSLINUX_MBR_SIZE);
- }
-
- // write MBR data
- status = write_sector(0, sector);
- if (status != 0)
- return status;
-
- Print(L"MBR updated successfully!\n");
-
- return 0;
-}
-
-//
-// GPT functions
-//
-
-static UINTN check_gpt(VOID)
-{
- UINTN i, k;
- BOOLEAN found_data_parts;
-
- if (gpt_part_count == 0) {
- Print(L"Status: No GPT partition table, no need to sync.\n");
- return 1;
- }
-
- // check each entry
- found_data_parts = FALSE;
- for (i = 0; i < gpt_part_count; i++) {
- // check sanity
- if (gpt_parts[i].end_lba < gpt_parts[i].start_lba) {
- Print(L"Status: GPT partition table is invalid.\n");
- return 1;
- }
- // check for overlap
- for (k = 0; k < gpt_part_count; k++) {
- if (k != i && !(gpt_parts[i].start_lba > gpt_parts[k].end_lba || gpt_parts[k].start_lba > gpt_parts[i].end_lba)) {
- Print(L"Status: GPT partition table is invalid, partitions overlap.\n");
- return 1;
- }
- }
-
- // check for partitions kind
- if (gpt_parts[i].gpt_parttype->kind == GPT_KIND_FATAL) {
- Print(L"Status: GPT partition of type '%s' found, will not touch this disk.\n",
- gpt_parts[i].gpt_parttype->name);
- return 1;
- }
- if (gpt_parts[i].gpt_parttype->kind == GPT_KIND_DATA ||
- gpt_parts[i].gpt_parttype->kind == GPT_KIND_BASIC_DATA)
- found_data_parts = TRUE;
- }
-
- if (!found_data_parts) {
- Print(L"Status: GPT partition table has no data partitions, no need to sync.\n");
- return 1;
- }
-
- return 0;
-}
-
-//
-// compare GPT and MBR tables
-//
-
-#define ACTION_NONE (0)
-#define ACTION_NOP (1)
-#define ACTION_REWRITE (2)
-
-static UINTN analyze(VOID)
-{
- UINTN action;
- UINTN i, k, iter, count_active, detected_parttype;
- CHARN *fsname;
- UINT64 min_start_lba;
- BOOLEAN have_esp;
-
- new_mbr_part_count = 0;
-
- // determine correct MBR types for GPT partitions
- if (gpt_part_count == 0) {
- Print(L"Status: No GPT partitions defined, nothing to sync.\n");
- return 0;
- }
- have_esp = FALSE;
- for (i = 0; i < gpt_part_count; i++) {
- gpt_parts[i].mbr_type = gpt_parts[i].gpt_parttype->mbr_type;
- if (gpt_parts[i].gpt_parttype->kind == GPT_KIND_BASIC_DATA) {
- // Basic Data: need to look at data in the partition
- detect_mbrtype_fs(gpt_parts[i].start_lba, &detected_parttype, &fsname);
- if (detected_parttype)
- gpt_parts[i].mbr_type = detected_parttype;
- else
- gpt_parts[i].mbr_type = 0x0b; // fallback: FAT32
- } else if (gpt_parts[i].mbr_type == 0xef) {
- // EFI System Partition: GNU parted can put this on any partition,
- // need to detect file systems
- detect_mbrtype_fs(gpt_parts[i].start_lba, &detected_parttype, &fsname);
- if (!have_esp && (detected_parttype == 0x01 || detected_parttype == 0x0e || detected_parttype == 0x0c))
- ; // seems to be a legitimate ESP, don't change
- else if (detected_parttype)
- gpt_parts[i].mbr_type = detected_parttype;
- else if (have_esp) // make sure there's no more than one ESP per disk
- gpt_parts[i].mbr_type = 0x83; // fallback: Linux
- }
- // NOTE: mbr_type may still be 0 if content detection fails for exotic GPT types or file systems
-
- if (gpt_parts[i].mbr_type == 0xef)
- have_esp = TRUE;
- }
-
- // check for common scenarios
- action = ACTION_NONE;
- if (mbr_part_count == 0) {
- // current MBR is empty
- action = ACTION_REWRITE;
- } else if (mbr_part_count == 1 && mbr_parts[0].mbr_type == 0xee) {
- // MBR has just the EFI Protective partition (i.e. untouched)
- action = ACTION_REWRITE;
- }
- if (action == ACTION_NONE && mbr_part_count > 0) {
- if (mbr_parts[0].mbr_type == 0xee &&
- gpt_parts[0].mbr_type == 0xef &&
- mbr_parts[0].start_lba == 1 &&
- mbr_parts[0].end_lba == gpt_parts[0].end_lba) {
- // The Apple Way, "EFI Protective" covering the tables and the ESP
- action = ACTION_NOP;
- if ((mbr_part_count != gpt_part_count && gpt_part_count <= 4) ||
- (mbr_part_count != 4 && gpt_part_count > 4)) {
- // number of partitions has changed
- action = ACTION_REWRITE;
- } else {
- // check partition ranges and types
- for (i = 1; i < mbr_part_count; i++) {
- if (mbr_parts[i].start_lba != gpt_parts[i].start_lba ||
- mbr_parts[i].end_lba != gpt_parts[i].end_lba ||
- (gpt_parts[i].mbr_type && mbr_parts[i].mbr_type != gpt_parts[i].mbr_type))
- // position or type has changed
- action = ACTION_REWRITE;
- }
- }
- // check number of active partitions
- count_active = 0;
- for (i = 0; i < mbr_part_count; i++)
- if (mbr_parts[i].active)
- count_active++;
- if (count_active!= 1)
- action = ACTION_REWRITE;
- }
- }
- if (action == ACTION_NONE && mbr_part_count > 0 && mbr_parts[0].mbr_type == 0xef) {
- // The XOM Way, all partitions mirrored 1:1
- action = ACTION_REWRITE;
- // check partition ranges and types
- for (i = 0; i < mbr_part_count; i++) {
- if (mbr_parts[i].start_lba != gpt_parts[i].start_lba ||
- mbr_parts[i].end_lba != gpt_parts[i].end_lba ||
- (gpt_parts[i].mbr_type && mbr_parts[i].mbr_type != gpt_parts[i].mbr_type))
- // position or type has changed -> better don't touch
- action = ACTION_NONE;
- }
- }
-
- if (action == ACTION_NOP) {
- Print(L"Status: Tables are synchronized, no need to sync.\n");
- return 0;
- } else if (action == ACTION_REWRITE) {
- Print(L"Status: MBR table must be updated.\n");
- } else {
- Print(L"Status: Analysis inconclusive, will not touch this disk.\n");
- return 1;
- }
-
- // generate the new table
-
- // first entry: EFI Protective
- new_mbr_parts[0].index = 0;
- new_mbr_parts[0].start_lba = 1;
- new_mbr_parts[0].mbr_type = 0xee;
- new_mbr_part_count = 1;
-
- if (gpt_parts[0].mbr_type == 0xef) {
- new_mbr_parts[0].end_lba = gpt_parts[0].end_lba;
- i = 1;
- } else {
- min_start_lba = gpt_parts[0].start_lba;
- for (k = 0; k < gpt_part_count; k++) {
- if (min_start_lba > gpt_parts[k].start_lba)
- min_start_lba = gpt_parts[k].start_lba;
- }
- new_mbr_parts[0].end_lba = min_start_lba - 1;
- i = 0;
- }
-
- // add other GPT partitions until the table is full
- // TODO: in the future, prioritize partitions by kind
- for (; i < gpt_part_count && new_mbr_part_count < 4; i++) {
- new_mbr_parts[new_mbr_part_count].index = new_mbr_part_count;
- new_mbr_parts[new_mbr_part_count].start_lba = gpt_parts[i].start_lba;
- new_mbr_parts[new_mbr_part_count].end_lba = gpt_parts[i].end_lba;
- new_mbr_parts[new_mbr_part_count].mbr_type = gpt_parts[i].mbr_type;
- new_mbr_parts[new_mbr_part_count].active = FALSE;
-
- // find matching partition in the old MBR table
- for (k = 0; k < mbr_part_count; k++) {
- if (mbr_parts[k].start_lba == gpt_parts[i].start_lba) {
- // keep type if not detected
- if (new_mbr_parts[new_mbr_part_count].mbr_type == 0)
- new_mbr_parts[new_mbr_part_count].mbr_type = mbr_parts[k].mbr_type;
- // keep active flag
- new_mbr_parts[new_mbr_part_count].active = mbr_parts[k].active;
- break;
- }
- }
-
- if (new_mbr_parts[new_mbr_part_count].mbr_type == 0)
- // final fallback: set to a (hopefully) unused type
- new_mbr_parts[new_mbr_part_count].mbr_type = 0xc0;
-
- new_mbr_part_count++;
- }
-
- // make sure there's exactly one active partition
- for (iter = 0; iter < 3; iter++) {
- // check
- count_active = 0;
- for (i = 0; i < new_mbr_part_count; i++)
- if (new_mbr_parts[i].active)
- count_active++;
- if (count_active == 1)
- break;
-
- // set active on the first matching partition
- if (count_active == 0) {
- for (i = 0; i < new_mbr_part_count; i++) {
- if ((iter >= 0 && (new_mbr_parts[i].mbr_type == 0x07 || // NTFS
- new_mbr_parts[i].mbr_type == 0x0b || // FAT32
- new_mbr_parts[i].mbr_type == 0x0c)) || // FAT32 (LBA)
- (iter >= 1 && (new_mbr_parts[i].mbr_type == 0x83)) || // Linux
- (iter >= 2 && i > 0)) {
- new_mbr_parts[i].active = TRUE;
- break;
- }
- }
- } else if (count_active > 1 && iter == 0) {
- // too many active partitions, try deactivating the ESP / EFI Protective entry
- if ((new_mbr_parts[0].mbr_type == 0xee || new_mbr_parts[0].mbr_type == 0xef) &&
- new_mbr_parts[0].active) {
- new_mbr_parts[0].active = FALSE;
- }
- } else if (count_active > 1 && iter > 0) {
- // too many active partitions, deactivate all but the first one
- count_active = 0;
- for (i = 0; i < new_mbr_part_count; i++)
- if (new_mbr_parts[i].active) {
- if (count_active > 0)
- new_mbr_parts[i].active = FALSE;
- count_active++;
- }
- }
- }
-
- // dump table
- Print(L"\nProposed new MBR partition table:\n");
- Print(L" # A Start LBA End LBA Type\n");
- for (i = 0; i < new_mbr_part_count; i++) {
- Print(L" %d %s %12lld %12lld %02x %s\n",
- new_mbr_parts[i].index + 1,
- new_mbr_parts[i].active ? STR("*") : STR(" "),
- new_mbr_parts[i].start_lba,
- new_mbr_parts[i].end_lba,
- new_mbr_parts[i].mbr_type,
- mbr_parttype_name(new_mbr_parts[i].mbr_type));
- }
-
- return 0;
-}
-
-//
-// sync algorithm entry point
-//
-
-UINTN gptsync(VOID)
-{
- UINTN status = 0;
- UINTN status_gpt, status_mbr;
- // BOOLEAN proceed = FALSE;
-
- // get full information from disk
- status_gpt = read_gpt();
- status_mbr = read_mbr();
- if (status_gpt != 0 || status_mbr != 0)
- return (status_gpt || status_mbr);
-
- // cross-check current situation
- Print(L"\n");
- status = check_gpt(); // check GPT for consistency
- if (status != 0)
- return status;
- status = check_mbr(); // check MBR for consistency
- if (status != 0)
- return status;
- status = analyze(); // analyze the situation & compose new MBR table
- if (status != 0)
- return status;
- if (new_mbr_part_count == 0)
- return status;
-
- // offer user the choice what to do
- // status = input_boolean(STR("\nMay I update the MBR as printed above? [y/N] "), &proceed);
- // if (status != 0 || proceed != TRUE)
- // return status;
-
- // adjust the MBR and write it back
- status = write_mbr();
- if (status != 0)
- return status;
-
- return status;
-}
diff --git a/gptsync/gptsync.h b/gptsync/gptsync.h
deleted file mode 100644
index d1bf3c2..0000000
--- a/gptsync/gptsync.h
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * gptsync/gptsync.h
- * Common header for gptsync and showpart
- *
- * Copyright (c) 2006 Christoph Pfisterer
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the
- * distribution.
- *
- * * Neither the name of Christoph Pfisterer nor the names of the
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-//
-// config
-//
-
-#if defined(EFI32) || defined(EFIX64)
-#define CONFIG_EFI
-#endif
-
-//
-// platform-dependent types
-//
-
-#ifdef CONFIG_EFI
-
-#include <efi.h>
-#include <efilib.h>
-
-#define copy_guid(destguid, srcguid) (CopyMem(destguid, srcguid, 16))
-#define guids_are_equal(guid1, guid2) (CompareMem(guid1, guid2, 16) == 0)
-
-typedef CHAR16 CHARN;
-#define STR(x) L##x
-
-#endif
-
-
-#ifndef CONFIG_EFI
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <fcntl.h>
-
-typedef int INTN;
-typedef unsigned int UINTN;
-typedef uint8_t UINT8;
-typedef uint16_t UINT16;
-typedef uint32_t UINT32;
-typedef uint64_t UINT64;
-typedef void VOID;
-
-typedef int BOOLEAN;
-#ifndef FALSE
-#define FALSE (0)
-#endif
-#ifndef TRUE
-#define TRUE (1)
-#endif
-
-typedef unsigned short CHAR16;
-typedef char CHARN;
-#define STR(x) x
-
-void Print(wchar_t *format, ...);
-
-// FUTURE: use STR(), #define Print printf
-
-#define CopyMem memcpy
-#define SetMem memset
-#define CompareMem memcmp
-
-#define copy_guid(destguid, srcguid) (memcpy(destguid, srcguid, 16))
-#define guids_are_equal(guid1, guid2) (memcmp(guid1, guid2, 16) == 0)
-
-#endif
-
-//
-// platform-independent types
-//
-
-typedef struct {
- UINT8 flags;
- UINT8 start_chs[3];
- UINT8 type;
- UINT8 end_chs[3];
- UINT32 start_lba;
- UINT32 size;
-} MBR_PARTITION_INFO;
-
-typedef struct {
- UINT8 type;
- CHARN *name;
-} MBR_PARTTYPE;
-
-typedef struct {
- UINT64 signature;
- UINT32 spec_revision;
- UINT32 header_size;
- UINT32 header_crc32;
- UINT32 reserved;
- UINT64 header_lba;
- UINT64 alternate_header_lba;
- UINT64 first_usable_lba;
- UINT64 last_usable_lba;
- UINT8 disk_guid[16];
- UINT64 entry_lba;
- UINT32 entry_count;
- UINT32 entry_size;
- UINT32 entry_crc32;
-} GPT_HEADER;
-
-typedef struct {
- UINT8 type_guid[16];
- UINT8 partition_guid[16];
- UINT64 start_lba;
- UINT64 end_lba;
- UINT64 attributes;
- CHAR16 name[36];
-} GPT_ENTRY;
-
-#define GPT_KIND_SYSTEM (0)
-#define GPT_KIND_DATA (1)
-#define GPT_KIND_BASIC_DATA (2)
-#define GPT_KIND_FATAL (3)
-
-typedef struct {
- UINT8 guid[16];
- UINT8 mbr_type;
- CHARN *name;
- UINTN kind;
-} GPT_PARTTYPE;
-
-typedef struct {
- UINTN index;
- UINT64 start_lba;
- UINT64 end_lba;
- UINTN mbr_type;
- UINT8 gpt_type[16];
- GPT_PARTTYPE *gpt_parttype;
- BOOLEAN active;
-} PARTITION_INFO;
-
-//
-// functions provided by the OS-specific module
-//
-
-UINTN read_sector(UINT64 lba, UINT8 *buffer);
-UINTN write_sector(UINT64 lba, UINT8 *buffer);
-UINTN input_boolean(CHARN *prompt, BOOLEAN *bool_out);
-
-//
-// vars and functions provided by the common lib module
-//
-
-extern UINT8 empty_guid[16];
-
-extern PARTITION_INFO mbr_parts[4];
-extern UINTN mbr_part_count;
-extern PARTITION_INFO gpt_parts[128];
-extern UINTN gpt_part_count;
-
-extern PARTITION_INFO new_mbr_parts[4];
-extern UINTN new_mbr_part_count;
-
-extern UINT8 sector[512];
-
-extern MBR_PARTTYPE mbr_types[];
-extern GPT_PARTTYPE gpt_types[];
-extern GPT_PARTTYPE gpt_dummy_type;
-
-CHARN * mbr_parttype_name(UINT8 type);
-UINTN read_mbr(VOID);
-
-GPT_PARTTYPE * gpt_parttype(UINT8 *type_guid);
-UINTN read_gpt(VOID);
-
-UINTN detect_mbrtype_fs(UINT64 partlba, UINTN *parttype, CHARN **fsname);
-
-//
-// actual platform-independent programs
-//
-
-UINTN gptsync(VOID);
-UINTN showpart(VOID);
-
-/* EOF */
diff --git a/gptsync/lib.c b/gptsync/lib.c
deleted file mode 100644
index f2d71b2..0000000
--- a/gptsync/lib.c
+++ /dev/null
@@ -1,469 +0,0 @@
-/*
- * gptsync/lib.c
- * Platform-independent code common to gptsync and showpart
- *
- * Copyright (c) 2006-2007 Christoph Pfisterer
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the
- * distribution.
- *
- * * Neither the name of Christoph Pfisterer nor the names of the
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "gptsync.h"
-
-// variables
-
-UINT8 empty_guid[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
-
-PARTITION_INFO mbr_parts[4];
-UINTN mbr_part_count = 0;
-PARTITION_INFO gpt_parts[128];
-UINTN gpt_part_count = 0;
-
-PARTITION_INFO new_mbr_parts[4];
-UINTN new_mbr_part_count = 0;
-
-UINT8 sector[512];
-
-MBR_PARTTYPE mbr_types[] = {
- { 0x01, STR("FAT12 (CHS)") },
- { 0x04, STR("FAT16 <32M (CHS)") },
- { 0x05, STR("Extended (CHS)") },
- { 0x06, STR("FAT16 (CHS)") },
- { 0x07, STR("NTFS/HPFS") },
- { 0x0b, STR("FAT32 (CHS)") },
- { 0x0c, STR("FAT32 (LBA)") },
- { 0x0e, STR("FAT16 (LBA)") },
- { 0x0f, STR("Extended (LBA)") },
- { 0x11, STR("Hidden FAT12 (CHS)") },
- { 0x14, STR("Hidden FAT16 <32M (CHS)") },
- { 0x16, STR("Hidden FAT16 (CHS)") },
- { 0x17, STR("Hidden NTFS/HPFS") },
- { 0x1b, STR("Hidden FAT32 (CHS)") },
- { 0x1c, STR("Hidden FAT32 (LBA)") },
- { 0x1e, STR("Hidden FAT16 (LBA)") },
- { 0x82, STR("Linux swap / Solaris") },
- { 0x83, STR("Linux") },
- { 0x85, STR("Linux Extended") },
- { 0x86, STR("NT FAT volume set") },
- { 0x87, STR("NTFS volume set") },
- { 0x8e, STR("Linux LVM") },
- { 0xa5, STR("FreeBSD") },
- { 0xa6, STR("OpenBSD") },
- { 0xa7, STR("NeXTSTEP") },
- { 0xa8, STR("Mac OS X UFS") },
- { 0xa9, STR("NetBSD") },
- { 0xab, STR("Mac OS X Boot") },
- { 0xac, STR("Apple RAID") },
- { 0xaf, STR("Mac OS X HFS+") },
- { 0xbe, STR("Solaris Boot") },
- { 0xbf, STR("Solaris") },
- { 0xeb, STR("BeOS") },
- { 0xee, STR("EFI Protective") },
- { 0xef, STR("EFI System (FAT)") },
- { 0xfd, STR("Linux RAID") },
- { 0, NULL },
-};
-
-GPT_PARTTYPE gpt_types[] = {
- { "\x28\x73\x2A\xC1\x1F\xF8\xD2\x11\xBA\x4B\x00\xA0\xC9\x3E\xC9\x3B", 0xef, STR("EFI System (FAT)"), GPT_KIND_SYSTEM },
- { "\x41\xEE\x4D\x02\xE7\x33\xD3\x11\x9D\x69\x00\x08\xC7\x81\xF3\x9F", 0x00, STR("MBR partition scheme"), GPT_KIND_FATAL },
- { "\x16\xE3\xC9\xE3\x5C\x0B\xB8\x4D\x81\x7D\xF9\x2D\xF0\x02\x15\xAE", 0x00, STR("MS Reserved"), GPT_KIND_SYSTEM },
- { "\xA2\xA0\xD0\xEB\xE5\xB9\x33\x44\x87\xC0\x68\xB6\xB7\x26\x99\xC7", 0x00, STR("Basic Data"), GPT_KIND_BASIC_DATA },
- { "\xAA\xC8\x08\x58\x8F\x7E\xE0\x42\x85\xD2\xE1\xE9\x04\x34\xCF\xB3", 0x00, STR("MS LDM Metadata"), GPT_KIND_FATAL },
- { "\xA0\x60\x9B\xAF\x31\x14\x62\x4F\xBC\x68\x33\x11\x71\x4A\x69\xAD", 0x00, STR("MS LDM Data"), GPT_KIND_FATAL },
- { "\x1E\x4C\x89\x75\xEB\x3A\xD3\x11\xB7\xC1\x7B\x03\xA0\x00\x00\x00", 0x00, STR("HP/UX Data"), GPT_KIND_DATA },
- { "\x28\xE7\xA1\xE2\xE3\x32\xD6\x11\xA6\x82\x7B\x03\xA0\x00\x00\x00", 0x00, STR("HP/UX Service"), GPT_KIND_SYSTEM },
- { "\x0F\x88\x9D\xA1\xFC\x05\x3B\x4D\xA0\x06\x74\x3F\x0F\x84\x91\x1E", 0xfd, STR("Linux RAID"), GPT_KIND_DATA },
- { "\x6D\xFD\x57\x06\xAB\xA4\xC4\x43\x84\xE5\x09\x33\xC8\x4B\x4F\x4F", 0x82, STR("Linux Swap"), GPT_KIND_SYSTEM },
- { "\x79\xD3\xD6\xE6\x07\xF5\xC2\x44\xA2\x3C\x23\x8F\x2A\x3D\xF9\x28", 0x8e, STR("Linux LVM"), GPT_KIND_DATA },
- { "\x39\x33\xA6\x8D\x07\x00\xC0\x60\xC4\x36\x08\x3A\xC8\x23\x09\x08", 0x00, STR("Linux Reserved"), GPT_KIND_SYSTEM },
- { "\xB4\x7C\x6E\x51\xCF\x6E\xD6\x11\x8F\xF8\x00\x02\x2D\x09\x71\x2B", 0xa5, STR("FreeBSD Data"), GPT_KIND_DATA },
- { "\xB5\x7C\x6E\x51\xCF\x6E\xD6\x11\x8F\xF8\x00\x02\x2D\x09\x71\x2B", 0x00, STR("FreeBSD Swap"), GPT_KIND_SYSTEM },
- { "\xB6\x7C\x6E\x51\xCF\x6E\xD6\x11\x8F\xF8\x00\x02\x2D\x09\x71\x2B", 0xa5, STR("FreeBSD UFS"), GPT_KIND_DATA },
- { "\xB8\x7C\x6E\x51\xCF\x6E\xD6\x11\x8F\xF8\x00\x02\x2D\x09\x71\x2B", 0x00, STR("FreeBSD Vinum"), GPT_KIND_DATA },
- { "\x00\x53\x46\x48\x00\x00\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0xaf, STR("Mac OS X HFS+"), GPT_KIND_DATA },
- { "\x00\x53\x46\x55\x00\x00\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0xa8, STR("Mac OS X UFS"), GPT_KIND_DATA },
- { "\x74\x6F\x6F\x42\x00\x00\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0xab, STR("Mac OS X Boot"), GPT_KIND_DATA },
- { "\x44\x49\x41\x52\x00\x00\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0xac, STR("Apple RAID"), GPT_KIND_DATA },
- { "\x44\x49\x41\x52\x4F\x5F\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0xac, STR("Apple RAID (Offline)"), GPT_KIND_DATA },
- { "\x65\x62\x61\x4C\x00\x6C\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0x00, STR("Apple Label"), GPT_KIND_SYSTEM },
- { "\x6F\x63\x65\x52\x65\x76\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0x00, STR("Apple Recovery"), GPT_KIND_BASIC_DATA },
- { "\x7f\x23\x96\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0x00, STR("Solaris Reserved"), GPT_KIND_SYSTEM },
- { "\x45\xCB\x82\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Boot"), GPT_KIND_DATA },
- { "\x4D\xCF\x85\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Root"), GPT_KIND_DATA },
- { "\x6F\xC4\x87\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0x00, STR("Solaris Swap"), GPT_KIND_SYSTEM },
- { "\xC3\x8C\x89\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Usr"), GPT_KIND_DATA },
- { "\x2B\x64\x8B\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0x00, STR("Solaris Backup"), GPT_KIND_SYSTEM },
- { "\xC7\x2A\x8D\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Stand"), GPT_KIND_DATA },
- { "\xE9\xF2\x8E\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Var"), GPT_KIND_DATA },
- { "\x39\xBA\x90\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Home"), GPT_KIND_DATA },
- { "\xA5\x83\x92\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris ALTSCTR"), GPT_KIND_DATA },
- { "\x3B\x5A\x94\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0x00, STR("Solaris Cache"), GPT_KIND_SYSTEM },
- { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, 0, NULL, 0 },
-};
-GPT_PARTTYPE gpt_dummy_type =
- { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, 0, STR("Unknown"), GPT_KIND_FATAL };
-
-//
-// MBR functions
-//
-
-CHARN * mbr_parttype_name(UINT8 type)
-{
- int i;
-
- for (i = 0; mbr_types[i].name; i++)
- if (mbr_types[i].type == type)
- return mbr_types[i].name;
- return STR("Unknown");
-}
-
-UINTN read_mbr(VOID)
-{
- UINTN status;
- UINTN i;
- BOOLEAN used;
- MBR_PARTITION_INFO *table;
-
- Print(L"\nCurrent MBR partition table:\n");
-
- // read MBR data
- status = read_sector(0, sector);
- if (status != 0)
- return status;
-
- // check for validity
- if (*((UINT16 *)(sector + 510)) != 0xaa55) {
- Print(L" No MBR partition table present!\n");
- return 1;
- }
- table = (MBR_PARTITION_INFO *)(sector + 446);
- for (i = 0; i < 4; i++) {
- if (table[i].flags != 0x00 && table[i].flags != 0x80) {
- Print(L" MBR partition table is invalid!\n");
- return 1;
- }
- }
-
- // check if used
- used = FALSE;
- for (i = 0; i < 4; i++) {
- if (table[i].start_lba > 0 && table[i].size > 0) {
- used = TRUE;
- break;
- }
- }
- if (!used) {
- Print(L" No partitions defined\n");
- return 0;
- }
-
- // dump current state & fill internal structures
- Print(L" # A Start LBA End LBA Type\n");
- for (i = 0; i < 4; i++) {
- if (table[i].start_lba == 0 || table[i].size == 0)
- continue;
-
- mbr_parts[mbr_part_count].index = i;
- mbr_parts[mbr_part_count].start_lba = (UINT64)table[i].start_lba;
- mbr_parts[mbr_part_count].end_lba = (UINT64)table[i].start_lba + (UINT64)table[i].size - 1;
- mbr_parts[mbr_part_count].mbr_type = table[i].type;
- mbr_parts[mbr_part_count].active = (table[i].flags == 0x80) ? TRUE : FALSE;
-
- Print(L" %d %s %12lld %12lld %02x %s\n",
- mbr_parts[mbr_part_count].index + 1,
- mbr_parts[mbr_part_count].active ? STR("*") : STR(" "),
- mbr_parts[mbr_part_count].start_lba,
- mbr_parts[mbr_part_count].end_lba,
- mbr_parts[mbr_part_count].mbr_type,
- mbr_parttype_name(mbr_parts[mbr_part_count].mbr_type));
-
- mbr_part_count++;
- }
-
- return 0;
-}
-
-//
-// GPT functions
-//
-
-GPT_PARTTYPE * gpt_parttype(UINT8 *type_guid)
-{
- int i;
-
- for (i = 0; gpt_types[i].name; i++)
- if (guids_are_equal(gpt_types[i].guid, type_guid))
- return &(gpt_types[i]);
- return &gpt_dummy_type;
-}
-
-UINTN read_gpt(VOID)
-{
- UINTN status;
- GPT_HEADER *header;
- GPT_ENTRY *entry;
- UINT64 entry_lba;
- UINTN entry_count, entry_size, i;
-
- Print(L"\nCurrent GPT partition table:\n");
-
- // read GPT header
- status = read_sector(1, sector);
- if (status != 0)
- return status;
-
- // check signature
- header = (GPT_HEADER *)sector;
- if (header->signature != 0x5452415020494645ULL) {
- Print(L" No GPT partition table present!\n");
- return 0;
- }
- if (header->spec_revision != 0x00010000UL) {
- Print(L" Warning: Unknown GPT spec revision 0x%08x\n", header->spec_revision);
- }
- if ((512 % header->entry_size) > 0 || header->entry_size > 512) {
- Print(L" Error: Invalid GPT entry size (misaligned or more than 512 bytes)\n");
- return 0;
- }
-
- // read entries
- entry_lba = header->entry_lba;
- entry_size = header->entry_size;
- entry_count = header->entry_count;
-
- for (i = 0; i < entry_count; i++) {
- if (((i * entry_size) % 512) == 0) {
- status = read_sector(entry_lba, sector);
- if (status != 0)
- return status;
- entry_lba++;
- }
- entry = (GPT_ENTRY *)(sector + ((i * entry_size) % 512));
-
- if (guids_are_equal(entry->type_guid, empty_guid))
- continue;
- if (gpt_part_count == 0) {
- Print(L" # Start LBA End LBA Type\n");
- }
-
- gpt_parts[gpt_part_count].index = i;
- gpt_parts[gpt_part_count].start_lba = entry->start_lba;
- gpt_parts[gpt_part_count].end_lba = entry->end_lba;
- gpt_parts[gpt_part_count].mbr_type = 0;
- copy_guid(gpt_parts[gpt_part_count].gpt_type, entry->type_guid);
- gpt_parts[gpt_part_count].gpt_parttype = gpt_parttype(gpt_parts[gpt_part_count].gpt_type);
- gpt_parts[gpt_part_count].active = FALSE;
-
- Print(L" %d %12lld %12lld %s\n",
- gpt_parts[gpt_part_count].index + 1,
- gpt_parts[gpt_part_count].start_lba,
- gpt_parts[gpt_part_count].end_lba,
- gpt_parts[gpt_part_count].gpt_parttype->name);
-
- gpt_part_count++;
- }
- if (gpt_part_count == 0) {
- Print(L" No partitions defined\n");
- return 0;
- }
-
- return 0;
-}
-
-//
-// detect file system type
-//
-
-UINTN detect_mbrtype_fs(UINT64 partlba, UINTN *parttype, CHARN **fsname)
-{
- UINTN status;
- UINTN signature, score;
- UINTN sectsize, clustersize, reserved, fatcount, dirsize, sectcount, fatsize, clustercount;
-
- *fsname = STR("Unknown");
- *parttype = 0;
-
- // READ sector 0 / offset 0K
- status = read_sector(partlba, sector);
- if (status != 0)
- return status;
-
- // detect XFS
- memcpy(&signature, sector, sizeof(UINT32));
- if (signature == 0x42534658) {
- *parttype = 0x83;
- *fsname = STR("XFS");
- return 0;
- }
-
- // detect FAT and NTFS
- sectsize = *((UINT16 *)(sector + 11));
- clustersize = sector[13];
- if (sectsize >= 512 && (sectsize & (sectsize - 1)) == 0 &&
- clustersize > 0 && (clustersize & (clustersize - 1)) == 0) {
- // preconditions for both FAT and NTFS are now met
-
- if (CompareMem(sector + 3, "NTFS ", 8) == 0) {
- *parttype = 0x07;
- *fsname = STR("NTFS");
- return 0;
- }
-
- score = 0;
- // boot jump
- if ((sector[0] == 0xEB && sector[2] == 0x90) ||
- sector[0] == 0xE9)
- score++;
- // boot signature
- if (sector[510] == 0x55 && sector[511] == 0xAA)
- score++;
- // reserved sectors
- reserved = *((UINT16 *)(sector + 14));
- if (reserved == 1 || reserved == 32)
- score++;
- // number of FATs
- fatcount = sector[16];
- if (fatcount == 2)
- score++;
- // number of root dir entries
- dirsize = *((UINT16 *)(sector + 17));
- // sector count (16-bit and 32-bit versions)
- sectcount = *((UINT16 *)(sector + 19));
- if (sectcount == 0)
- sectcount = *((UINT32 *)(sector + 32));
- // media byte
- if (sector[21] == 0xF0 || sector[21] >= 0xF8)
- score++;
- // FAT size in sectors
- fatsize = *((UINT16 *)(sector + 22));
- if (fatsize == 0)
- fatsize = *((UINT32 *)(sector + 36));
-
- // determine FAT type
- dirsize = ((dirsize * 32) + (sectsize - 1)) / sectsize;
- clustercount = sectcount - (reserved + (fatcount * fatsize) + dirsize);
- clustercount /= clustersize;
-
- if (score >= 3) {
- if (clustercount < 4085) {
- *parttype = 0x01;
- *fsname = STR("FAT12");
- } else if (clustercount < 65525) {
- *parttype = 0x0e;
- *fsname = STR("FAT16");
- } else {
- *parttype = 0x0c;
- *fsname = STR("FAT32");
- }
- // TODO: check if 0e and 0c are okay to use, maybe we should use 06 and 0b instead...
- return 0;
- }
- }
-
- // READ sector 2 / offset 1K
- status = read_sector(partlba + 2, sector);
- if (status != 0)
- return status;
-
- // detect HFS+
- memcpy(&signature, sector, sizeof(UINT16));
- if (signature == 0x4442) {
- *parttype = 0xaf;
- if (*((UINT16 *)(sector + 0x7c)) == 0x2B48)
- *fsname = STR("HFS Extended (HFS+)");
- else
- *fsname = STR("HFS Standard");
- return 0;
- } else if (signature == 0x2B48) {
- *parttype = 0xaf;
- *fsname = STR("HFS Extended (HFS+)");
- return 0;
- }
-
- // detect ext2/ext3
- signature = *((UINT16 *)(sector + 56));
- if (signature == 0xEF53) {
- *parttype = 0x83;
- if (*((UINT16 *)(sector + 92)) & 0x0004)
- *fsname = STR("ext3");
- else
- *fsname = STR("ext2");
- return 0;
- }
-
- // READ sector 128 / offset 64K
- status = read_sector(partlba + 128, sector);
- if (status != 0)
- return status;
-
- // detect ReiserFS
- if (CompareMem(sector + 52, "ReIsErFs", 8) == 0 ||
- CompareMem(sector + 52, "ReIsEr2Fs", 9) == 0 ||
- CompareMem(sector + 52, "ReIsEr3Fs", 9) == 0) {
- *parttype = 0x83;
- *fsname = STR("ReiserFS");
- return 0;
- }
-
- // detect Reiser4
- if (CompareMem(sector, "ReIsEr4", 7) == 0) {
- *parttype = 0x83;
- *fsname = STR("Reiser4");
- return 0;
- }
-
- // READ sector 64 / offset 32K
- status = read_sector(partlba + 64, sector);
- if (status != 0)
- return status;
-
- // detect JFS
- if (CompareMem(sector, "JFS1", 4) == 0) {
- *parttype = 0x83;
- *fsname = STR("JFS");
- return 0;
- }
-
- // READ sector 16 / offset 8K
- status = read_sector(partlba + 16, sector);
- if (status != 0)
- return status;
-
- // detect ReiserFS
- if (CompareMem(sector + 52, "ReIsErFs", 8) == 0 ||
- CompareMem(sector + 52, "ReIsEr2Fs", 9) == 0 ||
- CompareMem(sector + 52, "ReIsEr3Fs", 9) == 0) {
- *parttype = 0x83;
- *fsname = STR("ReiserFS");
- return 0;
- }
-
- return 0;
-}
diff --git a/gptsync/os_unix.c b/gptsync/os_unix.c
deleted file mode 100644
index c034031..0000000
--- a/gptsync/os_unix.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * gptsync/os_unix.c
- * Unix OS glue for gptsync
- *
- * Copyright (c) 2006 Christoph Pfisterer
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the
- * distribution.
- *
- * * Neither the name of Christoph Pfisterer nor the names of the
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "gptsync.h"
-
-#include <stdarg.h>
-
-#define STRINGIFY(s) #s
-#define STRINGIFY2(s) STRINGIFY(s)
-#define PROGNAME_S STRINGIFY2(PROGNAME)
-
-// variables
-
-static int fd;
-
-//
-// error functions
-//
-
-void error(const char *msg, ...)
-{
- va_list par;
- char buf[4096];
-
- va_start(par, msg);
- vsnprintf(buf, 4096, msg, par);
- va_end(par);
-
- fprintf(stderr, PROGNAME_S ": %s\n", buf);
-}
-
-void errore(const char *msg, ...)
-{
- va_list par;
- char buf[4096];
-
- va_start(par, msg);
- vsnprintf(buf, 4096, msg, par);
- va_end(par);
-
- fprintf(stderr, PROGNAME_S ": %s: %s\n", buf, strerror(errno));
-}
-
-//
-// sector I/O functions
-//
-
-UINTN read_sector(UINT64 lba, UINT8 *buffer)
-{
- off_t offset;
- off_t result_seek;
- ssize_t result_read;
-
- offset = lba * 512;
- result_seek = lseek(fd, offset, SEEK_SET);
- if (result_seek != offset) {
- errore("Seek to %llu failed", offset);
- return 1;
- }
-
- result_read = read(fd, buffer, 512);
- if (result_read < 0) {
- errore("Data read failed at position %llu", offset);
- return 1;
- }
- if (result_read != 512) {
- errore("Data read fell short at position %llu", offset);
- return 1;
- }
- return 0;
-}
-
-UINTN write_sector(UINT64 lba, UINT8 *buffer)
-{
- off_t offset;
- off_t result_seek;
- ssize_t result_write;
-
- offset = lba * 512;
- result_seek = lseek(fd, offset, SEEK_SET);
- if (result_seek != offset) {
- errore("Seek to %llu failed", offset);
- return 1;
- }
-
- result_write = write(fd, buffer, 512);
- if (result_write < 0) {
- errore("Data write failed at position %llu", offset);
- return 1;
- }
- if (result_write != 512) {
- errore("Data write fell short at position %llu", offset);
- return 1;
- }
- return 0;
-}
-
-//
-// keyboard input
-//
-
-UINTN input_boolean(CHARN *prompt, BOOLEAN *bool_out)
-{
- int c;
-
- printf("%s", prompt);
- fflush(NULL);
-
- c = getchar();
- if (c == EOF)
- return 1;
-
- if (c == 'y' || c == 'Y') {
- printf("Yes\n");
- *bool_out = TRUE;
- } else {
- printf("No\n");
- *bool_out = FALSE;
- }
-
- return 0;
-}
-
-//
-// EFI-style print function
-//
-
-void Print(wchar_t *format, ...)
-{
- va_list par;
- char formatbuf[256];
- char buf[4096];
- int i;
-
- for (i = 0; format[i]; i++)
- formatbuf[i] = (format[i] > 255) ? '?' : (char)(format[i] & 0xff);
- formatbuf[i] = 0;
-
- va_start(par, format);
- vsnprintf(buf, 4096, formatbuf, par);
- va_end(par);
-
- printf("%s", buf);
-}
-
-//
-// main entry point
-//
-
-int main(int argc, char *argv[])
-{
- char *filename;
- struct stat sb;
- int filekind;
- char *reason;
- int status;
-
- // argument check
- if (argc != 2) {
- fprintf(stderr, "Usage: " PROGNAME_S " <device>\n");
- return 1;
- }
- filename = argv[1];
-
- // set input to unbuffered
- fflush(NULL);
- setvbuf(stdin, NULL, _IONBF, 0);
-
- // stat check
- if (stat(filename, &sb) < 0) {
- errore("Can't stat %.300s", filename);
- return 1;
- }
-
- filekind = 0;
- reason = NULL;
- if (S_ISREG(sb.st_mode))
- ;
- else if (S_ISBLK(sb.st_mode))
- filekind = 1;
- else if (S_ISCHR(sb.st_mode))
- filekind = 2;
- else if (S_ISDIR(sb.st_mode))
- reason = "Is a directory";
- else if (S_ISFIFO(sb.st_mode))
- reason = "Is a FIFO";
-#ifdef S_ISSOCK
- else if (S_ISSOCK(sb.st_mode))
- reason = "Is a socket";
-#endif
- else
- reason = "Is an unknown kind of special file";
-
- if (reason != NULL) {
- error("%.300s: %s", filename, reason);
- return 1;
- }
-
- // open file
- fd = open(filename, O_RDWR);
- if (fd < 0 && errno == EBUSY) {
- fd = open(filename, O_RDONLY);
-#ifndef NOREADONLYWARN
- if (fd >= 0)
- printf("Warning: %.300s opened read-only\n", filename);
-#endif
- }
- if (fd < 0) {
- errore("Can't open %.300s", filename);
- return 1;
- }
-
- // (try to) guard against TTY character devices
- if (filekind == 2) {
- if (isatty(fd)) {
- error("%.300s: Is a TTY device", filename);
- return 1;
- }
- }
-
- // run sync algorithm
- status = PROGNAME();
- printf("\n");
-
- // close file
- if (close(fd) != 0) {
- errore("Error while closing %.300s", filename);
- return 1;
- }
-
- return status;
-}
diff --git a/gptsync/showpart.c b/gptsync/showpart.c
deleted file mode 100644
index 3d52ba3..0000000
--- a/gptsync/showpart.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * gptsync/showpart.c
- * Platform-independent code for analyzing hard disk partitioning
- *
- * Copyright (c) 2006 Christoph Pfisterer
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the
- * distribution.
- *
- * * Neither the name of Christoph Pfisterer nor the names of the
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "gptsync.h"
-
-//
-// memory string search
-//
-
-static INTN FindMem(VOID *Buffer, UINTN BufferLength, VOID *SearchString, UINTN SearchStringLength)
-{
- UINT8 *BufferPtr;
- UINTN Offset;
-
- BufferPtr = Buffer;
- BufferLength -= SearchStringLength;
- for (Offset = 0; Offset < BufferLength; Offset++, BufferPtr++) {
- if (CompareMem(BufferPtr, SearchString, SearchStringLength) == 0)
- return (INTN)Offset;
- }
-
- return -1;
-}
-
-//
-// detect boot code
-//
-
-static UINTN detect_bootcode(UINT64 partlba, CHARN **bootcodename)
-{
- UINTN status;
- BOOLEAN bootable;
-
- // read MBR data
- status = read_sector(partlba, sector);
- if (status != 0)
- return status;
-
- // check bootable signature
- if (*((UINT16 *)(sector + 510)) == 0xaa55 && sector[0] != 0)
- bootable = TRUE;
- else
- bootable = FALSE;
- *bootcodename = NULL;
-
- // detect specific boot codes
- if (CompareMem(sector + 2, "LILO", 4) == 0 ||
- CompareMem(sector + 6, "LILO", 4) == 0) {
- *bootcodename = STR("LILO");
-
- } else if (CompareMem(sector + 3, "SYSLINUX", 8) == 0) {
- *bootcodename = STR("SYSLINUX");
-
- } else if (FindMem(sector, 512, "ISOLINUX", 8) >= 0) {
- *bootcodename = STR("ISOLINUX");
-
- } else if (FindMem(sector, 512, "Geom\0Hard Disk\0Read\0 Error\0", 27) >= 0) {
- *bootcodename = STR("GRUB");
-
- } else if ((*((UINT32 *)(sector + 502)) == 0 &&
- *((UINT32 *)(sector + 506)) == 50000 &&
- *((UINT16 *)(sector + 510)) == 0xaa55) ||
- FindMem(sector, 512, "Starting the BTX loader", 23) >= 0) {
- *bootcodename = STR("FreeBSD");
-
- } else if (FindMem(sector, 512, "!Loading", 8) >= 0 ||
- FindMem(sector, 512, "/cdboot\0/CDBOOT\0", 16) >= 0) {
- *bootcodename = STR("OpenBSD");
-
- } else if (FindMem(sector, 512, "NTLDR", 5) >= 0) {
- *bootcodename = STR("Windows NTLDR");
-
- } else if (FindMem(sector, 512, "BOOTMGR", 7) >= 0) {
- *bootcodename = STR("Windows BOOTMGR (Vista)");
-
- } else if (FindMem(sector, 512, "CPUBOOT SYS", 11) >= 0 ||
- FindMem(sector, 512, "KERNEL SYS", 11) >= 0) {
- *bootcodename = STR("FreeDOS");
-
- } else if (FindMem(sector, 512, "OS2LDR", 6) >= 0 ||
- FindMem(sector, 512, "OS2BOOT", 7) >= 0) {
- *bootcodename = STR("eComStation");
-
- } else if (FindMem(sector, 512, "Be Boot Loader", 14) >= 0) {
- *bootcodename = STR("BeOS");
-
- } else if (FindMem(sector, 512, "yT Boot Loader", 14) >= 0) {
- *bootcodename = STR("ZETA");
-
- } else if (FindMem(sector, 512, "\x04" "beos\x06" "system\x05" "zbeos", 18) >= 0) {
- *bootcodename = STR("Haiku");
-
- }
-
- if (FindMem(sector, 512, "Non-system disk", 15) >= 0) // dummy FAT boot sector
- *bootcodename = STR("None (Non-system disk message)");
-
- // TODO: Add a note if a specific code was detected, but the sector is not bootable?
-
- if (*bootcodename == NULL) {
- if (bootable)
- *bootcodename = STR("Unknown, but bootable");
- else
- *bootcodename = STR("None");
- }
-
- return 0;
-}
-
-//
-// check one partition
-//
-
-static UINTN analyze_part(UINT64 partlba)
-{
- UINTN status;
- UINTN i;
- CHARN *bootcodename;
- UINTN parttype;
- CHARN *fsname;
-
- if (partlba == 0)
- Print(L"\nMBR contents:\n");
- else
- Print(L"\nPartition at LBA %lld:\n", partlba);
-
- // detect boot code
- status = detect_bootcode(partlba, &bootcodename);
- if (status)
- return status;
- Print(L" Boot Code: %s\n", bootcodename);
-
- if (partlba == 0)
- return 0; // short-circuit MBR analysis
-
- // detect file system
- status = detect_mbrtype_fs(partlba, &parttype, &fsname);
- if (status)
- return status;
- Print(L" File System: %s\n", fsname);
-
- // cross-reference with partition table
- for (i = 0; i < gpt_part_count; i++) {
- if (gpt_parts[i].start_lba == partlba) {
- Print(L" Listed in GPT as partition %d, type %s\n", i+1,
- gpt_parts[i].gpt_parttype->name);
- }
- }
- for (i = 0; i < mbr_part_count; i++) {
- if (mbr_parts[i].start_lba == partlba) {
- Print(L" Listed in MBR as partition %d, type %02x %s%s\n", i+1,
- mbr_parts[i].mbr_type,
- mbr_parttype_name(mbr_parts[i].mbr_type),
- mbr_parts[i].active ? STR(", active") : STR(""));
- }
- }
-
- return 0;
-}
-
-//
-// check all partitions
-//
-
-static UINTN analyze_parts(VOID)
-{
- UINTN i, k;
- UINTN status;
- BOOLEAN is_dupe;
-
- // check MBR (bootcode only)
- status = analyze_part(0);
- if (status)
- return status;
-
- // check partitions listed in GPT
- for (i = 0; i < gpt_part_count; i++) {
- status = analyze_part(gpt_parts[i].start_lba);
- if (status)
- return status;
- }
-
- // check partitions listed in MBR, but not in GPT
- for (i = 0; i < mbr_part_count; i++) {
- if (mbr_parts[i].start_lba == 1 && mbr_parts[i].mbr_type == 0xee)
- continue; // skip EFI Protective entry
-
- is_dupe = FALSE;
- for (k = 0; k < gpt_part_count; k++)
- if (gpt_parts[k].start_lba == mbr_parts[i].start_lba)
- is_dupe = TRUE;
-
- if (!is_dupe) {
- status = analyze_part(mbr_parts[i].start_lba);
- if (status)
- return status;
- }
- }
-
- return 0;
-}
-
-//
-// display algorithm entry point
-//
-
-UINTN showpart(VOID)
-{
- UINTN status = 0;
- UINTN status_gpt, status_mbr;
-
- // get full information from disk
- status_gpt = read_gpt();
- status_mbr = read_mbr();
- if (status_gpt != 0 || status_mbr != 0)
- return (status_gpt || status_mbr);
-
- // analyze all partitions
- status = analyze_parts();
- if (status != 0)
- return status;
-
- return status;
-}
diff --git a/gptsync/syslinux_mbr.h b/gptsync/syslinux_mbr.h
deleted file mode 100644
index 1c33e11..0000000
--- a/gptsync/syslinux_mbr.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * include/syslinux_mbr.h
- * MBR boot code
- *
- * The boot code in this file was taken from syslinux-3.11. It is covered
- * by the following license:
- *
- ; -----------------------------------------------------------------------
- ;
- ; Copyright 2003-2004 H. Peter Anvin - All Rights Reserved
- ;
- ; Permission is hereby granted, free of charge, to any person
- ; obtaining a copy of this software and associated documentation
- ; files (the "Software"), to deal in the Software without
- ; restriction, including without limitation the rights to use,
- ; copy, modify, merge, publish, distribute, sublicense, and/or
- ; sell copies of the Software, and to permit persons to whom
- ; the Software is furnished to do so, subject to the following
- ; conditions:
- ;
- ; The above copyright notice and this permission notice shall
- ; be included in all copies or substantial portions of the Software.
- ;
- ; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- ; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- ; OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- ; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- ; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- ; WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- ; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- ; OTHER DEALINGS IN THE SOFTWARE.
- ;
- ; -----------------------------------------------------------------------
- *
- */
-
-#ifndef __SYSLINUX_MBR_H__
-#define __SYSLINUX_MBR_H__
-
-
-#define MBR_BOOTCODE_SIZE (440)
-
-
-#define SYSLINUX_MBR_SIZE (304)
-
-static UINT8 syslinux_mbr[SYSLINUX_MBR_SIZE] = {
- 0xfa, 0x31, 0xc0, 0x8e, 0xd8, 0x8e, 0xc0, 0x8e,
- 0xd0, 0xbc, 0x00, 0x7c, 0xfb, 0xfc, 0x89, 0xe6,
- 0xbf, 0x00, 0x06, 0xb9, 0x00, 0x01, 0xf3, 0xa5,
- 0xea, 0x1d, 0x06, 0x00, 0x00, 0x88, 0x16, 0x00,
- 0x08, 0xb4, 0x08, 0xcd, 0x13, 0x31, 0xc0, 0x88,
- 0xf0, 0x40, 0xa3, 0xf0, 0x06, 0x80, 0xe1, 0x3f,
- 0x88, 0x0e, 0xf2, 0x06, 0xbe, 0xbe, 0x07, 0x31,
- 0xc0, 0xb9, 0x04, 0x00, 0xf6, 0x04, 0x80, 0x74,
- 0x03, 0x40, 0x89, 0xf7, 0x83, 0xc6, 0x10, 0xe2,
- 0xf3, 0x83, 0xf8, 0x01, 0x75, 0x73, 0x8a, 0x16,
- 0x00, 0x08, 0xb8, 0x00, 0x41, 0xbb, 0xaa, 0x55,
- 0x31, 0xc9, 0x30, 0xf6, 0xf9, 0xcd, 0x13, 0x72,
- 0x23, 0x81, 0xfb, 0x55, 0xaa, 0x75, 0x1d, 0xf6,
- 0xc1, 0x01, 0x74, 0x18, 0x57, 0xbe, 0xe0, 0x06,
- 0x8b, 0x5d, 0x08, 0x89, 0x5c, 0x08, 0x8b, 0x5d,
- 0x0a, 0x89, 0x5c, 0x0a, 0x8a, 0x16, 0x00, 0x08,
- 0xb4, 0x42, 0xeb, 0x2a, 0x57, 0x8b, 0x45, 0x08,
- 0x8b, 0x55, 0x0a, 0xf7, 0x36, 0xf2, 0x06, 0x42,
- 0x89, 0xd1, 0x31, 0xd2, 0xf7, 0x36, 0xf0, 0x06,
- 0x88, 0xc5, 0xd1, 0xe8, 0xd1, 0xe8, 0x24, 0xc0,
- 0x08, 0xc1, 0x88, 0xd6, 0x8a, 0x16, 0x00, 0x08,
- 0xbb, 0x00, 0x7c, 0xb8, 0x01, 0x02, 0xcd, 0x13,
- 0x72, 0x16, 0x5e, 0x81, 0x3e, 0xfe, 0x7d, 0x55,
- 0xaa, 0x75, 0x08, 0xfa, 0xea, 0x00, 0x7c, 0x00,
- 0x00, 0x77, 0x05, 0xbe, 0xf4, 0x06, 0xeb, 0x03,
- 0xbe, 0x0f, 0x07, 0xac, 0x20, 0xc0, 0x74, 0x0c,
- 0xb4, 0x0e, 0x8a, 0x3e, 0x62, 0x04, 0xb3, 0x07,
- 0xcd, 0x10, 0xeb, 0xef, 0xeb, 0xfe, 0x00, 0x00,
- 0x10, 0x00, 0x01, 0x00, 0x00, 0x7c, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x73, 0x73,
- 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x70, 0x65, 0x72,
- 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x79,
- 0x73, 0x74, 0x65, 0x6d, 0x0d, 0x0a, 0x00, 0x4f,
- 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67,
- 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20,
- 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20,
- 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0d, 0x0a, 0x00
-};
-
-
-#endif /* __SYSLINUX_MBR_H__ */
-
-/* EOF */
diff --git a/scripts/makeupdates b/scripts/makeupdates
index 3a346aa..38e92c7 100755
--- a/scripts/makeupdates
+++ b/scripts/makeupdates
@@ -156,7 +156,7 @@ def copyUpdatedFiles(tag, updates, cwd):
fields = file.split('/')
subdir = fields[0]
if subdir in ['po', 'scripts','command-stubs', 'tests',
- 'bootdisk', 'docs', 'fonts', 'utils', 'gptsync',
+ 'bootdisk', 'docs', 'fonts', 'utils',
'liveinst', 'dracut', 'data']:
continue
else:
--
1.7.10.4
11 years, 9 months
[PATCH] Re-remove fedora-import-state
by Will Woods
Commit c8c14c9 deleted these two files, but they got resurrected in some
merge somehow. Delete them again, since we don't need them.
---
data/systemd/fedora-import-state | 14 --------------
data/systemd/fedora-import-state.service | 13 -------------
2 files changed, 27 deletions(-)
delete mode 100644 data/systemd/fedora-import-state
delete mode 100644 data/systemd/fedora-import-state.service
diff --git a/data/systemd/fedora-import-state b/data/systemd/fedora-import-state
deleted file mode 100644
index a853ab9..0000000
--- a/data/systemd/fedora-import-state
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-# fedora-import-state: import state files from initramfs (e.g. network config)
-
-# exit early if root isn't writeable
-[ -w / ] || exit 0
-
-# copy state into root
-cd /run/initramfs/state
-cp -a -t / .
-
-# run restorecon on the copied files
-if [ -e /sys/fs/selinux/enforce ]; then
- find . | ( cd /; restorecon -i -f -; ) || :
-fi
diff --git a/data/systemd/fedora-import-state.service b/data/systemd/fedora-import-state.service
deleted file mode 100644
index 5294fe1..0000000
--- a/data/systemd/fedora-import-state.service
+++ /dev/null
@@ -1,13 +0,0 @@
-[Unit]
-Description=Import network configuration from initramfs
-DefaultDependencies=no
-ConditionDirectoryNotEmpty=/run/initramfs/state
-Conflicts=shutdown.target
-Before=shutdown.target emergency.service emergency.target systemd-tmpfiles-setup.service
-After=remount-rootfs.service
-
-[Service]
-ExecStart=/lib/systemd/fedora-import-state
-Type=oneshot
-TimeoutSec=0
-RemainAfterExit=yes
--
1.7.10.4
11 years, 9 months
[python-meh] Add files specified in the Config object as attachments
by Vratislav Podzimek
Example behaviour:
In Anaconda, we tell python-meh to grab logs and put them to the bugreport. But
they are only appended to the anaconda-tb file. With this patch they would also
appear as single attachments of the bugreport. So one file would still contain
everything (handy when using scp or something like that), but it would be easier
to find any particular (storage, program, ...) log in the bugzilla.
Vratislav Podzimek (1):
Add files specified in the Config object as attachments to bugreports
meh/handler.py | 9 +++++++++
1 file changed, 9 insertions(+)
--
1.7.10.4
11 years, 9 months
[PATCH 0/3] custom partitioning with kickstart
by Brian C. Lane
From: "Brian C. Lane" <bcl(a)redhat.com>
I moved doStorageKickstart into kickstart.py, if that's not ok I can skip that.
This adds kickstart execute calls for btrfs, raid, lvm pv and vg's and
partitioning. Currently only bare partitions has been tested and it does work
with this:
bootloader --location=mbr
zerombr
clearpart --all
part biosboot --size=1
part / --fstype="ext4" --size=4000
part swap --size=1000
These patches are all for newui.
Brian C. Lane (3):
refactor doKickstartStorage slightly
add execute methods for partition related ks classes
setup bootloader and partitioning for kickstart
pyanaconda/kickstart.py | 46 +++++++++++++++++++++++++++++++++++
pyanaconda/storage/__init__.py | 9 +++----
pyanaconda/ui/gui/spokes/storage.py | 12 +++++++-
3 files changed, 60 insertions(+), 7 deletions(-)
--
1.7.7.6
11 years, 9 months
[PATCH] Do not let Lang. spoke override the selection from Welcome Spoke
by Martin Sivak
---
pyanaconda/ui/gui/spokes/welcome.py | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/pyanaconda/ui/gui/spokes/welcome.py b/pyanaconda/ui/gui/spokes/welcome.py
index e95b71b..9c899eb 100644
--- a/pyanaconda/ui/gui/spokes/welcome.py
+++ b/pyanaconda/ui/gui/spokes/welcome.py
@@ -89,6 +89,8 @@ class LanguageMixIn(object):
def initialize(self):
store = self.builder.get_object("languageStore")
+ self._selection = self.builder.get_object(self._selectionName)
+ self._view = self.builder.get_object(self._viewName)
# TODO We can use the territory from geoip here
# to preselect the translation, when it's available.
@@ -101,11 +103,11 @@ class LanguageMixIn(object):
self._addLanguage(store, trans.display_name,
trans.english_name, trans.short_name)
- # select the preferred translation
- self._selectLanguage(store, self.language.preferred_translation.short_name)
+ # select the preferred translation if there wasn't any
+ (store, itr) = self._selection.get_selected()
+ if not itr:
+ self._selectLanguage(store, self.language.preferred_translation.short_name)
- self._view = self.builder.get_object(self._viewName)
- self._selection = self.builder.get_object(self._selectionName)
def retranslate(self):
welcomeLabel = self.builder.get_object(self._labelName)
@@ -206,6 +208,10 @@ class WelcomeLanguageSpoke(LanguageMixIn, StandaloneSpoke):
StandaloneSpoke.refresh(self)
LanguageMixIn.refresh(self, "welcomeWindowContentBox")
+ def initialize(self):
+ LanguageMixIn.initialize(self)
+ StandaloneSpoke.initialize(self)
+
# Override the default in StandaloneSpoke so we can display the beta
# warning dialog first.
def _on_continue_clicked(self, cb):
--
1.7.10.4
11 years, 9 months