From 2b9429d49d5fe7d92060720ca534f24b5ccfa5a0 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Thu, 27 Feb 2014 16:35:49 +0200 Subject: [PATCH 01/19] vdr: update to vdr-2.1.5 --- packages/3rdparty/multimedia/vdr/package.mk | 2 +- .../vdr/patches/vdr-20_improvepatpmt.patch | 282 ------------------ 2 files changed, 1 insertion(+), 283 deletions(-) delete mode 100644 packages/3rdparty/multimedia/vdr/patches/vdr-20_improvepatpmt.patch diff --git a/packages/3rdparty/multimedia/vdr/package.mk b/packages/3rdparty/multimedia/vdr/package.mk index 8d8ef12739..02ba9eb4ef 100644 --- a/packages/3rdparty/multimedia/vdr/package.mk +++ b/packages/3rdparty/multimedia/vdr/package.mk @@ -18,7 +18,7 @@ ################################################################################ PKG_NAME="vdr" -PKG_VERSION="2.1.4" +PKG_VERSION="2.1.5" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/3rdparty/multimedia/vdr/patches/vdr-20_improvepatpmt.patch b/packages/3rdparty/multimedia/vdr/patches/vdr-20_improvepatpmt.patch deleted file mode 100644 index 7f50d4dc9a..0000000000 --- a/packages/3rdparty/multimedia/vdr/patches/vdr-20_improvepatpmt.patch +++ /dev/null @@ -1,282 +0,0 @@ -diff --git a/device.c b/device.c -index 9da5e7f..c9095b0 100644 ---- a/device.c -+++ b/device.c -@@ -794,6 +794,7 @@ eSetChannelResult cDevice::SetChannel(const cChannel *Channel, bool LiveView) - if (SetChannelDevice(Channel, LiveView)) { - // Start section handling: - if (sectionHandler) { -+ patFilter->Trigger(Channel->Sid()); - sectionHandler->SetChannel(Channel); - sectionHandler->SetStatus(true); - } -diff --git a/pat.c b/pat.c -index dabcead..a21b402 100644 ---- a/pat.c -+++ b/pat.c -@@ -12,9 +12,8 @@ - #include "channels.h" - #include "libsi/section.h" - #include "libsi/descriptor.h" --#include "thread.h" - --#define PMT_SCAN_TIMEOUT 10 // seconds -+#define PMT_SCAN_TIMEOUT 1000 // ms - - // --- cCaDescriptor --------------------------------------------------------- - -@@ -273,94 +272,115 @@ int GetCaPids(int Source, int Transponder, int ServiceId, const int *CaSystemIds - - // --- cPatFilter ------------------------------------------------------------ - -+//#define DEBUG_PAT_PMT//XXX -+#ifdef DEBUG_PAT_PMT -+#define DBGLOG(a...) { cString s = cString::sprintf(a); fprintf(stderr, "%s\n", *s); dsyslog("%s", *s); } -+#else -+#define DBGLOG(a...) -+#endif -+ - cPatFilter::cPatFilter(void) - { -- pmtIndex = 0; -- pmtPid = 0; -- pmtSid = 0; -- lastPmtScan = 0; -- numPmtEntries = 0; -+ Trigger(0); - Set(0x00, 0x00); // PAT - } - - void cPatFilter::SetStatus(bool On) - { -+ cMutexLock MutexLock(&mutex); -+ DBGLOG("PAT filter set status %d", On); - cFilter::SetStatus(On); -- pmtIndex = 0; -- pmtPid = 0; -- pmtSid = 0; -- lastPmtScan = 0; -- numPmtEntries = 0; -+ Trigger(); - } - --void cPatFilter::Trigger(void) -+void cPatFilter::Trigger(int Sid) - { -+ cMutexLock MutexLock(&mutex); -+ patVersion = -1; -+ pmtIndex = -1; - numPmtEntries = 0; -+ if (Sid >= 0) { -+ sid = Sid; -+ DBGLOG("PAT filter trigger SID %d", Sid); -+ } - } - --bool cPatFilter::PmtVersionChanged(int PmtPid, int Sid, int Version) -+bool cPatFilter::PmtVersionChanged(int PmtPid, int Sid, int Version, bool SetNewVersion) - { -- uint64_t v = Version; -- v <<= 32; -- uint64_t id = (PmtPid | (Sid << 16)) & 0x00000000FFFFFFFFLL; -+ int Id = MakePmtId(PmtPid, Sid); - for (int i = 0; i < numPmtEntries; i++) { -- if ((pmtVersion[i] & 0x00000000FFFFFFFFLL) == id) { -- bool Changed = (pmtVersion[i] & 0x000000FF00000000LL) != v; -- if (Changed) -- pmtVersion[i] = id | v; -- return Changed; -+ if (pmtId[i] == Id) { -+ if (pmtVersion[i] != Version) { -+ if (SetNewVersion) -+ pmtVersion[i] = Version; -+ else -+ DBGLOG("PMT %d %2d %5d %2d -> %2d", Transponder(), i, PmtPid, pmtVersion[i], Version); -+ return true; -+ } -+ break; - } - } -- if (numPmtEntries < MAXPMTENTRIES) -- pmtVersion[numPmtEntries++] = id | v; -- return true; -+ return false; -+} -+ -+void cPatFilter::SwitchToNextPmtPid(void) -+{ -+ if (pmtIndex >= 0) { -+ Del(GetPmtPid(pmtIndex), SI::TableIdPMT); -+ pmtIndex = (pmtIndex + 1) % numPmtEntries; -+ Add(GetPmtPid(pmtIndex), SI::TableIdPMT); -+ } - } - - void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length) - { -+ cMutexLock MutexLock(&mutex); - if (Pid == 0x00) { -- if (Tid == 0x00) { -- if (pmtPid && time(NULL) - lastPmtScan > PMT_SCAN_TIMEOUT) { -- Del(pmtPid, 0x02); -- pmtPid = 0; -- pmtIndex++; -- lastPmtScan = time(NULL); -- } -- if (!pmtPid) { -- SI::PAT pat(Data, false); -- if (!pat.CheckCRCAndParse()) -- return; -+ if (Tid == SI::TableIdPAT) { -+ SI::PAT pat(Data, false); -+ if (!pat.CheckCRCAndParse()) -+ return; -+ if (pat.getVersionNumber() != patVersion) { -+ DBGLOG("PAT %d/%d %d %d -> %d", pat.getSectionNumber(), pat.getLastSectionNumber(), Transponder(), patVersion, pat.getVersionNumber()); -+ if (pmtIndex >= 0) { -+ Del(GetPmtPid(pmtIndex), SI::TableIdPMT); -+ pmtIndex = -1; -+ } -+ numPmtEntries = 0; - SI::PAT::Association assoc; -- int Index = 0; - for (SI::Loop::Iterator it; pat.associationLoop.getNext(assoc, it); ) { -- if (!assoc.isNITPid()) { -- if (Index++ >= pmtIndex && Channels.GetByServiceID(Source(), Transponder(), assoc.getServiceId())) { -- pmtPid = assoc.getPid(); -- pmtSid = assoc.getServiceId(); -- Add(pmtPid, 0x02); -- break; -+ if (!assoc.isNITPid() && numPmtEntries < MAXPMTENTRIES) { -+ DBGLOG(" PMT pid %2d %5d SID %5d", numPmtEntries, assoc.getPid(), assoc.getServiceId()); -+ pmtId[numPmtEntries] = MakePmtId(assoc.getPid(), assoc.getServiceId()); -+ pmtVersion[numPmtEntries] = -1; -+ if (sid == assoc.getServiceId()) { -+ pmtIndex = numPmtEntries; -+ DBGLOG("sid = %d pmtIndex = %d", sid, pmtIndex); - } -+ numPmtEntries++; - } - } -- if (!pmtPid) -+ if (numPmtEntries > 0 && pmtIndex < 0) - pmtIndex = 0; -+ Add(GetPmtPid(pmtIndex), SI::TableIdPMT); -+ patVersion = pat.getVersionNumber(); -+ timer.Set(PMT_SCAN_TIMEOUT); - } - } - } -- else if (Pid == pmtPid && Tid == SI::TableIdPMT && Source() && Transponder()) { -+ else if (Tid == SI::TableIdPMT && Source() && Transponder()) { -+ timer.Set(PMT_SCAN_TIMEOUT); - SI::PMT pmt(Data, false); - if (!pmt.CheckCRCAndParse()) - return; -- if (pmt.getServiceId() != pmtSid) -- return; // skip broken PMT records -- if (!PmtVersionChanged(pmtPid, pmt.getTableIdExtension(), pmt.getVersionNumber())) { -- lastPmtScan = 0; // this triggers the next scan -+ if (!PmtVersionChanged(Pid, pmt.getTableIdExtension(), pmt.getVersionNumber())) { -+ SwitchToNextPmtPid(); - return; - } -- if (!Channels.Lock(true, 10)) { -- numPmtEntries = 0; // to make sure we try again -+ if (!Channels.Lock(true, 10)) - return; -- } -+ PmtVersionChanged(Pid, pmt.getTableIdExtension(), pmt.getVersionNumber(), true); -+ SwitchToNextPmtPid(); - cChannel *Channel = Channels.GetByServiceID(Source(), Transponder(), pmt.getServiceId()); - if (Channel) { - SI::CaDescriptor *d; -@@ -597,7 +617,12 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length - } - Channel->SetCaDescriptors(CaDescriptorHandler.AddCaDescriptors(CaDescriptors)); - } -- lastPmtScan = 0; // this triggers the next scan - Channels.Unlock(); - } -+ if (timer.TimedOut()) { -+ if (pmtIndex >= 0) -+ DBGLOG("PMT timeout %d", pmtIndex); -+ SwitchToNextPmtPid(); -+ timer.Set(PMT_SCAN_TIMEOUT); -+ } - } -diff --git a/pat.c.orig b/pat.c.orig -index 5246e07..dabcead 100644 ---- a/pat.c.orig -+++ b/pat.c.orig -@@ -591,6 +591,7 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length - } - if (Setup.UpdateChannels >= 2) { - Channel->SetPids(Vpid, Ppid, Vtype, Apids, Atypes, ALangs, Dpids, Dtypes, DLangs, Spids, SLangs, Tpid); -+ if (!cSource::IsType(Channel->Source(), 'I')) - Channel->SetCaIds(CaDescriptors->CaIds()); - Channel->SetSubtitlingDescriptors(SubtitlingTypes, CompositionPageIds, AncillaryPageIds); - } -diff --git a/pat.h b/pat.h -index 7f04575..f52b903 100644 ---- a/pat.h -+++ b/pat.h -@@ -12,24 +12,30 @@ - - #include - #include "filter.h" -+#include "thread.h" - - #define MAXPMTENTRIES 64 - - class cPatFilter : public cFilter { - private: -- time_t lastPmtScan; -+ cMutex mutex; -+ cTimeMs timer; -+ int patVersion; - int pmtIndex; -- int pmtPid; -- int pmtSid; -- uint64_t pmtVersion[MAXPMTENTRIES]; -+ int pmtId[MAXPMTENTRIES]; -+ int pmtVersion[MAXPMTENTRIES]; - int numPmtEntries; -- bool PmtVersionChanged(int PmtPid, int Sid, int Version); -+ int sid; -+ int GetPmtPid(int Index) { return pmtId[Index] & 0x0000FFFF; } -+ int MakePmtId(int PmtPid, int Sid) { return PmtPid | (Sid << 16); } -+ bool PmtVersionChanged(int PmtPid, int Sid, int Version, bool SetNewVersion = false); -+ void SwitchToNextPmtPid(void); - protected: - virtual void Process(u_short Pid, u_char Tid, const u_char *Data, int Length); - public: - cPatFilter(void); - virtual void SetStatus(bool On); -- void Trigger(void); -+ void Trigger(int Sid = -1); - }; - - int GetCaDescriptors(int Source, int Transponder, int ServiceId, const int *CaSystemIds, int BufSize, uchar *Data, int EsPid); -diff --git a/sdt.c b/sdt.c -index c6d0ce5..1667e0f 100644 ---- a/sdt.c -+++ b/sdt.c -@@ -94,7 +94,7 @@ void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length - } - else if (*pn && Setup.UpdateChannels >= 4) { - channel = Channels.NewChannel(Channel(), pn, ps, pp, sdt.getOriginalNetworkId(), sdt.getTransportStreamId(), SiSdtService.getServiceId()); -- patFilter->Trigger(); -+ patFilter->Trigger(SiSdtService.getServiceId()); - } - } - default: ; -@@ -120,7 +120,7 @@ void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length - cChannel *link = Channels.GetByChannelID(tChannelID(Source(), Service.getOriginalNetworkId(), Service.getTransportStream(), Service.getServiceId())); - if (!link && Setup.UpdateChannels >= 4) { - link = Channels.NewChannel(Channel(), "NVOD", "", "", Service.getOriginalNetworkId(), Service.getTransportStream(), Service.getServiceId()); -- patFilter->Trigger(); -+ patFilter->Trigger(Service.getServiceId()); - } - if (link) { - if (!LinkChannels) From 02ee7ba3ea0a235b6a17e6363babc24af95a9c74 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Thu, 27 Feb 2014 16:36:16 +0200 Subject: [PATCH 02/19] vdr-plugin-dvbapi: update to vdr-plugin-dvbapi-a3b4a5a --- packages/3rdparty/multimedia/vdr-plugin-dvbapi/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/3rdparty/multimedia/vdr-plugin-dvbapi/package.mk b/packages/3rdparty/multimedia/vdr-plugin-dvbapi/package.mk index f1db42feae..6986654069 100644 --- a/packages/3rdparty/multimedia/vdr-plugin-dvbapi/package.mk +++ b/packages/3rdparty/multimedia/vdr-plugin-dvbapi/package.mk @@ -17,7 +17,7 @@ ################################################################################ PKG_NAME="vdr-plugin-dvbapi" -PKG_VERSION="400879b" +PKG_VERSION="a3b4a5a" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 7b8e94322ffd30503834263ecea46a395189048a Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Thu, 27 Feb 2014 16:36:33 +0200 Subject: [PATCH 03/19] vdr-plugin-vnsiserver: update to vdr-plugin-vnsiserver-e5f02b6 --- packages/3rdparty/multimedia/vdr-plugin-vnsiserver/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/3rdparty/multimedia/vdr-plugin-vnsiserver/package.mk b/packages/3rdparty/multimedia/vdr-plugin-vnsiserver/package.mk index bcd5e1d429..0f7b46b934 100644 --- a/packages/3rdparty/multimedia/vdr-plugin-vnsiserver/package.mk +++ b/packages/3rdparty/multimedia/vdr-plugin-vnsiserver/package.mk @@ -17,7 +17,7 @@ ################################################################################ PKG_NAME="vdr-plugin-vnsiserver" -PKG_VERSION="1b74f88" +PKG_VERSION="e5f02b6" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From a0dd2e96ac821950058a208b4359f9306baf77ba Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Thu, 27 Feb 2014 16:36:49 +0200 Subject: [PATCH 04/19] vdr-plugin-xvdr: update to vdr-plugin-xvdr-7d6ebb7 --- packages/3rdparty/multimedia/vdr-plugin-xvdr/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/3rdparty/multimedia/vdr-plugin-xvdr/package.mk b/packages/3rdparty/multimedia/vdr-plugin-xvdr/package.mk index 0d8919cc20..cffddb33ac 100644 --- a/packages/3rdparty/multimedia/vdr-plugin-xvdr/package.mk +++ b/packages/3rdparty/multimedia/vdr-plugin-xvdr/package.mk @@ -17,7 +17,7 @@ ################################################################################ PKG_NAME="vdr-plugin-xvdr" -PKG_VERSION="089dd3c" +PKG_VERSION="7d6ebb7" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 3062d042e331e101df403a1425d4ec265c7f833d Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Thu, 27 Feb 2014 16:41:31 +0200 Subject: [PATCH 05/19] vdr-iptv: update to vdr-iptv-2.1.0 --- packages/3rdparty/multimedia/vdr-iptv/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/3rdparty/multimedia/vdr-iptv/package.mk b/packages/3rdparty/multimedia/vdr-iptv/package.mk index 8e5b6f2db4..129bbf82cb 100644 --- a/packages/3rdparty/multimedia/vdr-iptv/package.mk +++ b/packages/3rdparty/multimedia/vdr-iptv/package.mk @@ -17,7 +17,7 @@ ################################################################################ PKG_NAME="vdr-iptv" -PKG_VERSION="2.0.2" +PKG_VERSION="2.1.0" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 82c0036ec9c64f2fc99da8f4c2f89f2ff99d7d3c Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Thu, 27 Feb 2014 17:03:16 +0200 Subject: [PATCH 06/19] projects/*/options: change default wm to fluxbox --- projects/ATV/options | 4 ++-- projects/Cuboxi/options | 2 +- projects/Generic/options | 4 ++-- projects/RPi/options | 2 +- projects/Virtual/options | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/projects/ATV/options b/projects/ATV/options index ab6b677e9e..b9c2190d1d 100644 --- a/projects/ATV/options +++ b/projects/ATV/options @@ -231,8 +231,8 @@ # OpenGL-ES implementation to use (no) OPENGLES="no" -# Windowmanager to use (ratpoison / none) - WINDOWMANAGER="ratpoison" +# Windowmanager to use (ratpoison / fluxbox / dwm / none) + WINDOWMANAGER="fluxbox" # include uvesafb support (yes / no) UVESAFB_SUPPORT="no" diff --git a/projects/Cuboxi/options b/projects/Cuboxi/options index 156b182311..32d75651b8 100644 --- a/projects/Cuboxi/options +++ b/projects/Cuboxi/options @@ -233,7 +233,7 @@ # OpenGL-ES implementation to use (no / bcm2835-driver / gpu-viv-bin-mx6q) OPENGLES="gpu-viv-bin-mx6q" -# Windowmanager to use (ratpoison / none) +# Windowmanager to use (ratpoison / fluxbox / dwm / none) WINDOWMANAGER="none" # include uvesafb support (yes / no) diff --git a/projects/Generic/options b/projects/Generic/options index 239ad01a2d..aad4502220 100644 --- a/projects/Generic/options +++ b/projects/Generic/options @@ -231,8 +231,8 @@ # OpenGL-ES implementation to use (no) OPENGLES="no" -# Windowmanager to use (ratpoison / none) - WINDOWMANAGER="ratpoison" +# Windowmanager to use (ratpoison / fluxbox / dwm / none) + WINDOWMANAGER="fluxbox" # include uvesafb support (yes / no) UVESAFB_SUPPORT="yes" diff --git a/projects/RPi/options b/projects/RPi/options index b4caa98a38..709289552d 100644 --- a/projects/RPi/options +++ b/projects/RPi/options @@ -232,7 +232,7 @@ # OpenGL-ES implementation to use (no / bcm2835-driver) OPENGLES="bcm2835-driver" -# Windowmanager to use (ratpoison / none) +# Windowmanager to use (ratpoison / fluxbox / dwm / none) WINDOWMANAGER="none" # include uvesafb support (yes / no) diff --git a/projects/Virtual/options b/projects/Virtual/options index cc8a5828d4..c3c87ed886 100644 --- a/projects/Virtual/options +++ b/projects/Virtual/options @@ -226,8 +226,8 @@ # OpenGL-ES implementation to use (no) OPENGLES="no" -# Windowmanager to use (ratpoison / none) - WINDOWMANAGER="ratpoison" +# Windowmanager to use (ratpoison / fluxbox / dwm / none) + WINDOWMANAGER="fluxbox" # include uvesafb support (yes / no) UVESAFB_SUPPORT="yes" From 1744311e1c272e980d093f321aa81570ddc5e0a3 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Thu, 27 Feb 2014 20:35:25 +0200 Subject: [PATCH 07/19] vdr-addon: bump (4.1.3) --- packages/addons/service/multimedia/vdr-addon/changelog.txt | 7 +++++++ packages/addons/service/multimedia/vdr-addon/package.mk | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/addons/service/multimedia/vdr-addon/changelog.txt b/packages/addons/service/multimedia/vdr-addon/changelog.txt index 7a5a72c52d..64f7ee0c8f 100644 --- a/packages/addons/service/multimedia/vdr-addon/changelog.txt +++ b/packages/addons/service/multimedia/vdr-addon/changelog.txt @@ -1,3 +1,10 @@ +4.1.3 +- update to vdr-2.1.5 +- update to vdr-iptv-2.1.0 +- update to vdr-plugin-vnsiserver-e5f02b6 +- update to vdr-plugin-dvbapi-a3b4a5a +- update to vdr-plugin-xvdr-7d6ebb7 + 4.1.2 - update to vdr-2.1.3 - update to vdr-iptv-2.0.1 diff --git a/packages/addons/service/multimedia/vdr-addon/package.mk b/packages/addons/service/multimedia/vdr-addon/package.mk index 612c68ce4f..0c8ba6220d 100644 --- a/packages/addons/service/multimedia/vdr-addon/package.mk +++ b/packages/addons/service/multimedia/vdr-addon/package.mk @@ -19,7 +19,7 @@ PKG_NAME="vdr-addon" PKG_VERSION="4.1" -PKG_REV="2" +PKG_REV="3" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.openelec.tv" From 624abb61f4bd70a31ce28a56ff6ba7acf62f6272 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Fri, 28 Feb 2014 20:28:33 +0200 Subject: [PATCH 08/19] scripts/mkimage: sizelimit for partition2 --- scripts/mkimage | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/mkimage b/scripts/mkimage index 9db6014004..35f7a953f6 100755 --- a/scripts/mkimage +++ b/scripts/mkimage @@ -192,7 +192,8 @@ fi # bootloader losetup -d "$LOOP" echo "image: creating filesystem on part2..." OFFSET=$(( $STORAGE_PART_START * 512 )) - losetup -o $OFFSET "$LOOP" "$DISK" + SIZELIMIT=$(( $STORAGE_SIZE * 1024 * 1024 )) + losetup -o $OFFSET --sizelimit $SIZELIMIT "$LOOP" "$DISK" mke2fs -q -t ext4 -m 0 "$LOOP" tune2fs -U $UUID_STORAGE "$LOOP" e2fsck -n "$LOOP" From 56c3d7b79e1f54bbb1da9ee880350942182716db Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Fri, 28 Feb 2014 20:38:46 +0200 Subject: [PATCH 09/19] scripts/mkimage: align partitions --- scripts/mkimage | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/mkimage b/scripts/mkimage index 35f7a953f6..c46430bed7 100755 --- a/scripts/mkimage +++ b/scripts/mkimage @@ -34,7 +34,7 @@ fi STORAGE_SIZE=32 # STORAGE_SIZE must be >= 32 ! - DISK_SIZE=$(( $SYSTEM_SIZE + $STORAGE_SIZE )) + DISK_SIZE=$(( $SYSTEM_SIZE + $STORAGE_SIZE + 4 )) DISK="$TARGET_IMG/$IMAGE_NAME.img" # functions @@ -67,17 +67,17 @@ trap cleanup SIGINT # create part1 echo "image: creating part1 on $DISK..." - SYSTEM_PART_END=$(( $SYSTEM_SIZE * 1024 * 1024 / 512 + 64 )) + SYSTEM_PART_END=$(( $SYSTEM_SIZE * 1024 * 1024 / 512 + 2048 )) if [ "$BOOTLOADER" = "syslinux" ]; then - parted -s "$LOOP" -a min unit s mkpart primary ext4 64 $SYSTEM_PART_END + parted -s "$LOOP" -a min unit s mkpart primary ext4 2048 $SYSTEM_PART_END elif [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then - parted -s "$LOOP" -a min unit s mkpart primary fat32 64 $SYSTEM_PART_END + parted -s "$LOOP" -a min unit s mkpart primary fat32 2048 $SYSTEM_PART_END fi parted -s "$LOOP" set 1 boot on # create part2 echo "image: creating part2 on $DISK..." - STORAGE_PART_START=$(( $SYSTEM_PART_END + 1 )) + STORAGE_PART_START=$(( $SYSTEM_PART_END + 2048 )) parted -s "$LOOP" -a min unit s mkpart primary ext4 $STORAGE_PART_START 100% sync @@ -94,7 +94,7 @@ fi # create filesystem on part1 losetup -d "$LOOP" echo "image: creating filesystem on part1..." - OFFSET=$(( 64 * 512 )) + OFFSET=$(( 2048 * 512 )) SIZELIMIT=$(( $SYSTEM_SIZE * 1024 * 1024 )) losetup -o $OFFSET --sizelimit $SIZELIMIT "$LOOP" "$DISK" if [ "$BOOTLOADER" = "syslinux" ]; then From 4008b4fd93daabfa5514c3c1b78b1fba35d33670 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Fri, 28 Feb 2014 20:41:10 +0200 Subject: [PATCH 10/19] syslinux:host: prepare for uefi images --- packages/tools/syslinux/package.mk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/tools/syslinux/package.mk b/packages/tools/syslinux/package.mk index e26d3f40c7..a3b331997e 100644 --- a/packages/tools/syslinux/package.mk +++ b/packages/tools/syslinux/package.mk @@ -71,12 +71,16 @@ make_host() { makeinstall_host() { mkdir -p $ROOT/$TOOLCHAIN/bin cp bios/extlinux/extlinux $ROOT/$TOOLCHAIN/bin + cp bios/linux/syslinux $ROOT/$TOOLCHAIN/bin mkdir -p $ROOT/$TOOLCHAIN/share/syslinux cp bios/com32/menu/vesamenu.c32 $ROOT/$TOOLCHAIN/share/syslinux cp bios/com32/lib/libcom32.c32 $ROOT/$TOOLCHAIN/share/syslinux cp bios/com32/libutil/libutil.c32 $ROOT/$TOOLCHAIN/share/syslinux cp bios/mbr/mbr.bin $ROOT/$TOOLCHAIN/share/syslinux + cp bios/mbr/gptmbr.bin $ROOT/$TOOLCHAIN/share/syslinux + cp efi64/efi/syslinux.efi $ROOT/$TOOLCHAIN/share/syslinux + cp efi64/com32/elflink/ldlinux/ldlinux.e64 $ROOT/$TOOLCHAIN/share/syslinux } makeinstall_target() { From 9b83058be4df60143f4760509bf50aa8926a8c2f Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Fri, 28 Feb 2014 21:02:48 +0200 Subject: [PATCH 11/19] projects/Generic/linux/linux.x86_64.conf: enable CONFIG_RELOCATABLE required for efi boot with syslinux --- projects/Generic/linux/linux.x86_64.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/Generic/linux/linux.x86_64.conf b/projects/Generic/linux/linux.x86_64.conf index 05ff20fb3f..d38c2376b6 100644 --- a/projects/Generic/linux/linux.x86_64.conf +++ b/projects/Generic/linux/linux.x86_64.conf @@ -443,7 +443,7 @@ CONFIG_SCHED_HRTICK=y # CONFIG_KEXEC is not set # CONFIG_CRASH_DUMP is not set CONFIG_PHYSICAL_START=0x1000000 -# CONFIG_RELOCATABLE is not set +CONFIG_RELOCATABLE=y CONFIG_PHYSICAL_ALIGN=0x1000000 CONFIG_HOTPLUG_CPU=y # CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set From 76a19cc0a6ca3f86af0c1791127d283d8fc2b6b3 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Fri, 28 Feb 2014 21:04:38 +0200 Subject: [PATCH 12/19] testing: add support for creating efi live images TODO: full uefi support in installer --- Makefile | 3 ++ scripts/image | 4 +++ scripts/mkimage | 76 ++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 72 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index e0e4a90f4f..7e43dd3824 100644 --- a/Makefile +++ b/Makefile @@ -11,6 +11,9 @@ release: image: ./scripts/image mkimage +image-efi: + ./scripts/image mkimage efi + noobs: ./scripts/image noobs diff --git a/scripts/image b/scripts/image index a013a5236b..2c10669ab8 100755 --- a/scripts/image +++ b/scripts/image @@ -278,6 +278,9 @@ IMAGE_NAME="$DISTRONAME-$TARGET_VERSION" # create image files if requested if [ "$1" = "mkimage" -a -n "$BOOTLOADER" ]; then + if [ "$2" == "efi" ] ; then + UEFI=yes + fi # variables used in image script must be passed sudo env \ PATH="$PATH" \ @@ -289,6 +292,7 @@ IMAGE_NAME="$DISTRONAME-$TARGET_VERSION" RELEASE_DIR="$RELEASE_DIR" \ UUID_SYSTEM="$(uuidgen)" \ UUID_STORAGE="$(uuidgen)" \ + UEFI="$UEFI" \ $SCRIPTS/mkimage fi diff --git a/scripts/mkimage b/scripts/mkimage index c46430bed7..7bd405ecd3 100755 --- a/scripts/mkimage +++ b/scripts/mkimage @@ -49,6 +49,14 @@ trap cleanup SIGINT +# generate volume id for fat partition +if [ "$UEFI" = "yes" ] ; then + UUID_1=$(date '+%d%m') + UUID_2=$(date '+%M%S') + FAT_VOL_ID="${UUID_1}${UUID_2}" + UUID_SYSTEM="${UUID_1}-${UUID_2}" +fi + # ensure loopX not in use umount "$OE_TMP" &>/dev/null || : umount "$LOOP" &>/dev/null >/dev/null || : @@ -62,29 +70,46 @@ trap cleanup SIGINT # write a disklabel echo "image: creating partition table on $DISK..." losetup "$LOOP" "$DISK" - parted -s "$LOOP" mklabel msdos + if [ "$UEFI" = "yes" ] ; then + parted -s "$LOOP" mklabel gpt + else + parted -s "$LOOP" mklabel msdos + fi sync # create part1 echo "image: creating part1 on $DISK..." SYSTEM_PART_END=$(( $SYSTEM_SIZE * 1024 * 1024 / 512 + 2048 )) if [ "$BOOTLOADER" = "syslinux" ]; then - parted -s "$LOOP" -a min unit s mkpart primary ext4 2048 $SYSTEM_PART_END + if [ "$UEFI" = "yes" ] ; then + parted -s "$LOOP" -a min unit s mkpart primary fat32 2048 $SYSTEM_PART_END + else + parted -s "$LOOP" -a min unit s mkpart primary ext4 2048 $SYSTEM_PART_END + fi elif [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then parted -s "$LOOP" -a min unit s mkpart primary fat32 2048 $SYSTEM_PART_END fi - parted -s "$LOOP" set 1 boot on + if [ "$UEFI" = "yes" ] ; then + parted -s "$LOOP" set 1 legacy_boot on + else + parted -s "$LOOP" set 1 boot on + fi # create part2 echo "image: creating part2 on $DISK..." STORAGE_PART_START=$(( $SYSTEM_PART_END + 2048 )) - parted -s "$LOOP" -a min unit s mkpart primary ext4 $STORAGE_PART_START 100% + STORAGE_PART_END=$(( $STORAGE_PART_START + (( $STORAGE_SIZE * 1024 * 1024 / 512 )) )) + parted -s "$LOOP" -a min unit s mkpart primary ext4 $STORAGE_PART_START $STORAGE_PART_END sync if [ "$BOOTLOADER" = "syslinux" ]; then # write mbr echo "image: writing mbr..." - MBR="$ROOT/$TOOLCHAIN/share/syslinux/mbr.bin" + if [ "$UEFI" = "yes" ] ; then + MBR="$ROOT/$TOOLCHAIN/share/syslinux/gptmbr.bin" + else + MBR="$ROOT/$TOOLCHAIN/share/syslinux/mbr.bin" + fi if [ -n "$MBR" ]; then dd bs=440 count=1 conv=notrunc if="$MBR" of="$LOOP" fi @@ -98,9 +123,13 @@ fi SIZELIMIT=$(( $SYSTEM_SIZE * 1024 * 1024 )) losetup -o $OFFSET --sizelimit $SIZELIMIT "$LOOP" "$DISK" if [ "$BOOTLOADER" = "syslinux" ]; then - mke2fs -q -t ext4 -m 0 "$LOOP" - tune2fs -U $UUID_SYSTEM "$LOOP" - e2fsck -n "$LOOP" + if [ "$UEFI" = "yes" ] ; then + mkfs.vfat -i "$FAT_VOL_ID" "$LOOP" + else + mke2fs -q -t ext4 -m 0 "$LOOP" + tune2fs -U $UUID_SYSTEM "$LOOP" + e2fsck -n "$LOOP" + fi elif [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then mkfs.vfat "$LOOP" fi @@ -156,7 +185,11 @@ EOF # install extlinux echo "image: installing extlinux to part1..." - extlinux --heads=4 --sector=32 -i "$OE_TMP" + if [ "$UEFI" = "yes" ] ; then + syslinux --heads=4 --sector=32 -i "$LOOP" + else + extlinux --heads=4 --sector=32 -i "$OE_TMP" + fi # copy files echo "image: copying files to part1..." @@ -166,7 +199,26 @@ EOF cp $ROOT/$TOOLCHAIN/share/syslinux/vesamenu.c32 "$OE_TMP" cp $ROOT/$TOOLCHAIN/share/syslinux/libcom32.c32 "$OE_TMP" cp $ROOT/$TOOLCHAIN/share/syslinux/libutil.c32 "$OE_TMP" + if [ "$UEFI" = "yes" ] ; then + mkdir -p "$OE_TMP/EFI/BOOT" + cp $RELEASE_DIR/splash.png "$OE_TMP/EFI/BOOT" + cp $ROOT/$TOOLCHAIN/share/syslinux/vesamenu.c32 "$OE_TMP/EFI/BOOT" + cp $ROOT/$TOOLCHAIN/share/syslinux/libcom32.c32 "$OE_TMP/EFI/BOOT" + cp $ROOT/$TOOLCHAIN/share/syslinux/libutil.c32 "$OE_TMP/EFI/BOOT" + cp $ROOT/$TOOLCHAIN/share/syslinux/syslinux.efi "$OE_TMP/EFI/BOOT/bootx64.efi" + cp $ROOT/$TOOLCHAIN/share/syslinux/ldlinux.e64 "$OE_TMP/EFI/BOOT" + cat << EOF > "$OE_TMP"/EFI/BOOT/syslinux.cfg +DEFAULT live +LABEL installer + KERNEL /KERNEL + APPEND boot=UUID=$UUID_SYSTEM installer quiet tty vga=current + +LABEL live + KERNEL /KERNEL + APPEND boot=UUID=$UUID_SYSTEM disk=UUID=$UUID_STORAGE quiet vga=current +EOF + fi elif [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then # create bootloader configuration echo "image: creating bootloader configuration..." @@ -204,8 +256,10 @@ fi # bootloader mount "$LOOP" "$OE_TMP" # add resize mark - touch "$OE_TMP/.please_resize_me" - sync + if [ "$UEFI" != "yes" ] ; then + touch "$OE_TMP/.please_resize_me" + sync + fi # unmount part2 echo "image: unmounting part2..." From 8f4dabd30fce2cc232e6b3839f2506e8505ed2b7 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Fri, 28 Feb 2014 22:46:43 +0200 Subject: [PATCH 13/19] installer: meh. indents.. --- packages/tools/installer/scripts/installer | 947 ++++++++++----------- 1 file changed, 471 insertions(+), 476 deletions(-) diff --git a/packages/tools/installer/scripts/installer b/packages/tools/installer/scripts/installer index 35c0a1a0fa..45c4847d6e 100755 --- a/packages/tools/installer/scripts/installer +++ b/packages/tools/installer/scripts/installer @@ -56,11 +56,11 @@ trap '' 2 dbglg() { # Acts just like echo cmd, with automatic redirection - echo "" >> $LOGFILE - echo "###################################################################" >> $LOGFILE - echo "# $@" >> $LOGFILE - echo "###################################################################" >> $LOGFILE - echo "" >> $LOGFILE + echo "" >> $LOGFILE + echo "###################################################################" >> $LOGFILE + echo "# $@" >> $LOGFILE + echo "###################################################################" >> $LOGFILE + echo "" >> $LOGFILE } get_device_unmount() { @@ -69,12 +69,12 @@ get_device_unmount() { # uses: - # provides: DEVICES - DEVICES="" - DEVICES=$(parted -s -m -l | grep ^/dev/sd | cut -f1 -d ":") + DEVICES="" + DEVICES=$(parted -s -m -l | grep ^/dev/sd | cut -f1 -d ":") - for i in $(cat /proc/mounts | grep ^/dev/sd | cut -f1 -d " " | sed "s/[0-9]//"); do - DEVICES=$(echo $DEVICES |sed -e "s|$i||") - done + for i in $(cat /proc/mounts | grep ^/dev/sd | cut -f1 -d " " | sed "s/[0-9]//"); do + DEVICES=$(echo $DEVICES |sed -e "s|$i||") + done } get_partition() { @@ -83,7 +83,7 @@ get_partition() { # uses: - # provides: PARTITIONS - PARTITIONS=$(parted -s -m $1 print |grep -v ^/dev |grep -v BYT | cut -f1 -d ":") + PARTITIONS=$(parted -s -m $1 print |grep -v ^/dev |grep -v BYT | cut -f1 -d ":") } create_device_list() { @@ -93,23 +93,23 @@ create_device_list() { # provides: DEVICE_MODEL, DEVICE_SIZE, DEVICE_LIST, DEVICE_NAME, # DEVICES (get_device_unmount) - DEVICE_MODEL="" - DEVICE_SIZE="" - DEVICE_LIST="" - DEVICE_NAME="" + DEVICE_MODEL="" + DEVICE_SIZE="" + DEVICE_LIST="" + DEVICE_NAME="" - get_device_unmount + get_device_unmount - if [ "$DEVICES" = "" ]; then - msg_no_device - fi + if [ "$DEVICES" = "" ]; then + msg_no_device + fi - for i in $DEVICES; do - DEVICE_MODEL=$(parted -s $i -m print | grep ^$i | cut -f7 -d ":" | sed "s/;//") - DEVICE_SIZE=$(parted -s $i -m print | grep ^$i | cut -f2 -d ":") - DEVICE_NAME=$(echo $DEVICE_MODEL ${DEVICE_SIZE} | sed 's/ /_/g') - DEVICE_LIST="$DEVICE_LIST $i $DEVICE_NAME" - done + for i in $DEVICES; do + DEVICE_MODEL=$(parted -s $i -m print | grep ^$i | cut -f7 -d ":" | sed "s/;//") + DEVICE_SIZE=$(parted -s $i -m print | grep ^$i | cut -f2 -d ":") + DEVICE_NAME=$(echo $DEVICE_MODEL ${DEVICE_SIZE} | sed 's/ /_/g') + DEVICE_LIST="$DEVICE_LIST $i $DEVICE_NAME" + done } create_partition_list() { @@ -119,401 +119,400 @@ create_partition_list() { # provides: PARTITION_NUMBER, PARTITION_SIZE, PARTITION_FORMAT, # PARTITION_LIST, PARTITIONS (get_partition) - PARTITION_NUMBER="" - PARTITION_SIZE="" - PARTITION_FORMAT="" - PARTITION_LIST="" + PARTITION_NUMBER="" + PARTITION_SIZE="" + PARTITION_FORMAT="" + PARTITION_LIST="" - get_partition $1 + get_partition $1 - for partition in $PARTITIONS; do - PARTITION_NUMBER=$(parted -s -m $1 print |grep -v ^/dev |grep -v BYT | cut -f1 -d ":") - PARTITION_SIZE=$(parted -s -m $1 print |grep -v ^/dev |grep -v BYT | cut -f4 -d ":") - PARTITION_FORMAT=$(parted -s -m $1 print |grep -v ^/dev |grep -v BYT | cut -f5 -d ":") - PARTITION_LIST=" $PARTITION_LIST \n Partition $1$PARTITION_NUMBER Size: $PARTITION_SIZE Format: $PARTITION_FORMAT" - done + for partition in $PARTITIONS; do + PARTITION_NUMBER=$(parted -s -m $1 print |grep -v ^/dev |grep -v BYT | cut -f1 -d ":") + PARTITION_SIZE=$(parted -s -m $1 print |grep -v ^/dev |grep -v BYT | cut -f4 -d ":") + PARTITION_FORMAT=$(parted -s -m $1 print |grep -v ^/dev |grep -v BYT | cut -f5 -d ":") + PARTITION_LIST=" $PARTITION_LIST \n Partition $1$PARTITION_NUMBER Size: $PARTITION_SIZE Format: $PARTITION_FORMAT" + done } do_install_mbr() { - # show menu - MSG_TITLE="\Z4[ (RE)INSTALL MBR ]\Zn" - MSG_MENU="\n Please select where to install MBR.\n\n Please select a device:" - MSG_CANCEL="Back" - create_device_list + MSG_TITLE="\Z4[ (RE)INSTALL MBR ]\Zn" + MSG_MENU="\n Please select where to install MBR.\n\n Please select a device:" + MSG_CANCEL="Back" - dialog --colors --backtitle "$BACKTITLE" --cancel-label "$MSG_CANCEL" \ - --title "$MSG_TITLE" --menu "$MSG_MENU" 20 50 5 \ - $DEVICE_LIST 2> $TMPDIR/device_for_install + create_device_list + + dialog --colors --backtitle "$BACKTITLE" --cancel-label "$MSG_CANCEL" \ + --title "$MSG_TITLE" --menu "$MSG_MENU" 20 50 5 \ + $DEVICE_LIST 2> $TMPDIR/device_for_install # now we must do everything - case $? in - 0) - INSTALL_DEVICE=$(cat "$TMPDIR/device_for_install") + case $? in + 0) + INSTALL_DEVICE=$(cat "$TMPDIR/device_for_install") - # installing mbr - prompt_gpt - if [ "$GPT" = "1" ]; then - cat /usr/share/syslinux/gptmbr.bin > $INSTALL_DEVICE - else - cat /usr/share/syslinux/mbr.bin > $INSTALL_DEVICE - fi + # installing mbr + prompt_gpt + if [ "$GPT" = "1" ]; then + cat /usr/share/syslinux/gptmbr.bin > $INSTALL_DEVICE + else + cat /usr/share/syslinux/mbr.bin > $INSTALL_DEVICE + fi - msg_install_ready "Master Boot Record installed on $INSTALL_DEVICE" - ;; - 1) - menu_main - ;; - 255) - do_poweroff - ;; - esac + msg_install_ready "Master Boot Record installed on $INSTALL_DEVICE" + ;; + 1) + menu_main + ;; + 255) + do_poweroff + ;; + esac } do_install_quick() { # show menu - MSG_TITLE="\Z4[ QUICK INSTALL MENU ]\Zn" - MSG_MENU="\nUse the up/down arrows to select the correct device.\n\n Please select a device:" - MSG_CANCEL="Back" - DIALOG_OPTIONS="--defaultno" + MSG_TITLE="\Z4[ QUICK INSTALL MENU ]\Zn" + MSG_MENU="\nUse the up/down arrows to select the correct device.\n\n Please select a device:" + MSG_CANCEL="Back" + DIALOG_OPTIONS="--defaultno" - create_device_list + create_device_list - dialog --colors --backtitle "$BACKTITLE" --cancel-label "$MSG_CANCEL" \ - $DIALOG_OPTIONS --title "$MSG_TITLE" --menu "$MSG_MENU" 20 50 5 \ - $DEVICE_LIST 2> $TMPDIR/device_for_install + dialog --colors --backtitle "$BACKTITLE" --cancel-label "$MSG_CANCEL" \ + $DIALOG_OPTIONS --title "$MSG_TITLE" --menu "$MSG_MENU" 20 50 5 \ + $DEVICE_LIST 2> $TMPDIR/device_for_install # now we must do everything - case $? in - 0) - INSTALL_DEVICE=$(cat "$TMPDIR/device_for_install") - INSTALL_DEVICE_FULL=$(echo $DEVICE_LIST | sed "s|.*$INSTALL_DEVICE \([^ ]*\).*|$INSTALL_DEVICE \1|") + case $? in + 0) + INSTALL_DEVICE=$(cat "$TMPDIR/device_for_install") + INSTALL_DEVICE_FULL=$(echo $DEVICE_LIST | sed "s|.*$INSTALL_DEVICE \([^ ]*\).*|$INSTALL_DEVICE \1|") - prompt_gpt - prompt_ssh - prompt_backup_unpack + prompt_gpt + prompt_ssh + prompt_backup_unpack - EXTLINUX_SSH="" - if [ "$SSH" = "1" ]; then - EXTLINUX_SSH="ssh" - fi + EXTLINUX_SSH="" + if [ "$SSH" = "1" ]; then + EXTLINUX_SSH="ssh" + fi - # check for confirmation (twice!) - MSG_TITLE="\Z1[ Confirmation before installing ]\Zn" - MSG_DETAIL="\nIf you continue the target disk will be wiped out:\n\n$INSTALL_DEVICE_FULL\n\n" - DIALOG_OPTIONS="--defaultno" - dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" \ - $DIALOG_OPTIONS --yesno "$MSG_DETAIL" 0 0 - if [ $? -ne 0 ]; then - menu_main - fi + # check for confirmation (twice!) + MSG_TITLE="\Z1[ Confirmation before installing ]\Zn" + MSG_DETAIL="\nIf you continue the target disk will be wiped out:\n\n$INSTALL_DEVICE_FULL\n\n" + DIALOG_OPTIONS="--defaultno" + dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" \ + $DIALOG_OPTIONS --yesno "$MSG_DETAIL" 0 0 + if [ $? -ne 0 ]; then + menu_main + fi - MSG_TITLE="\Z1[ Confirmation before installing ]\Zn" - MSG_DETAIL="\nThis is last chance to abort the installation!\n\nIf you continue the target disk will be wiped out:\n\n$INSTALL_DEVICE_FULL\n\n\n" - DIALOG_OPTIONS="--defaultno" - dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" \ - $DIALOG_OPTIONS --yesno "$MSG_DETAIL" 0 0 - if [ $? -ne 0 ]; then - menu_main - fi + MSG_TITLE="\Z1[ Confirmation before installing ]\Zn" + MSG_DETAIL="\nThis is last chance to abort the installation!\n\nIf you continue the target disk will be wiped out:\n\n$INSTALL_DEVICE_FULL\n\n\n" + DIALOG_OPTIONS="--defaultno" + dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" \ + $DIALOG_OPTIONS --yesno "$MSG_DETAIL" 0 0 + if [ $? -ne 0 ]; then + menu_main + fi - # remove all partitions - msg_progress_install "1" "get all partitions $INSTALL_DEVICE" - get_partition $INSTALL_DEVICE + # remove all partitions + msg_progress_install "1" "get all partitions $INSTALL_DEVICE" + get_partition $INSTALL_DEVICE - msg_progress_install "5" "wiping disk $INSTALL_DEVICE" - dd if=/dev/zero of=$INSTALL_DEVICE bs=4096 count=1024 + msg_progress_install "5" "wiping disk $INSTALL_DEVICE" + dd if=/dev/zero of=$INSTALL_DEVICE bs=4096 count=1024 - # create 2 new partitions (first $PARTSIZE_SYSTEM, second rest) + # create 2 new partitions (first $PARTSIZE_SYSTEM, second rest) + msg_progress_install "7" "creating label on $INSTALL_DEVICE" + if [ "$GPT" = "1" ]; then + parted -s $INSTALL_DEVICE mklabel gpt >> $LOGFILE 2>&1 + else + parted -s $INSTALL_DEVICE mklabel msdos >> $LOGFILE 2>&1 + fi - msg_progress_install "7" "creating label on $INSTALL_DEVICE" - if [ "$GPT" = "1" ]; then - parted -s $INSTALL_DEVICE mklabel gpt >> $LOGFILE 2>&1 - else - parted -s $INSTALL_DEVICE mklabel msdos >> $LOGFILE 2>&1 - fi + msg_progress_install "9" "writing Master Boot Record on $INSTALL_DEVICE" + if [ "$GPT" = "1" ]; then + cat /usr/share/syslinux/gptmbr.bin > $INSTALL_DEVICE + else + cat /usr/share/syslinux/mbr.bin > $INSTALL_DEVICE + fi - msg_progress_install "9" "writing Master Boot Record on $INSTALL_DEVICE" - if [ "$GPT" = "1" ]; then - cat /usr/share/syslinux/gptmbr.bin > $INSTALL_DEVICE - else - cat /usr/share/syslinux/mbr.bin > $INSTALL_DEVICE - fi + msg_progress_install "10" "creating partition on $INSTALL_DEVICE" + parted -s $INSTALL_DEVICE unit cyl mkpart primary ext2 -- 0 $PARTSIZE_SYSTEM >> $LOGFILE 2>&1 - msg_progress_install "10" "creating partition on $INSTALL_DEVICE" - parted -s $INSTALL_DEVICE unit cyl mkpart primary ext2 -- 0 $PARTSIZE_SYSTEM >> $LOGFILE 2>&1 + msg_progress_install "13" "creating partition on $INSTALL_DEVICE" + parted -s $INSTALL_DEVICE unit cyl mkpart primary ext2 -- $PARTSIZE_SYSTEM -2 >> $LOGFILE 2>&1 - msg_progress_install "13" "creating partition on $INSTALL_DEVICE" - parted -s $INSTALL_DEVICE unit cyl mkpart primary ext2 -- $PARTSIZE_SYSTEM -2 >> $LOGFILE 2>&1 + msg_progress_install "16" "setup bootflag on partition 1 of $INSTALL_DEVICE" + parted -s $INSTALL_DEVICE set 1 boot on >> $LOGFILE 2>&1 + if [ "$GPT" = "1" ]; then + parted -s $INSTALL_DEVICE set 1 legacy_boot on >> $LOGFILE 2>&1 + fi - msg_progress_install "16" "setup bootflag on partition 1 of $INSTALL_DEVICE" - parted -s $INSTALL_DEVICE set 1 boot on >> $LOGFILE 2>&1 - if [ "$GPT" = "1" ]; then - parted -s $INSTALL_DEVICE set 1 legacy_boot on >> $LOGFILE 2>&1 - fi + msg_progress_install "20" "tell the kernel we have a new partitiontable on $INSTALL_DEVICE" + partprobe $INSTALL_DEVICE >> $LOGFILE 2>&1 - msg_progress_install "20" "tell the kernel we have a new partitiontable on $INSTALL_DEVICE" - partprobe $INSTALL_DEVICE >> $LOGFILE 2>&1 + # create filesystem + msg_progress_install "23" "creating filesystem on ${INSTALL_DEVICE}1" + mke2fs -t ext4 -m 0 ${INSTALL_DEVICE}1 >> $LOGFILE 2>&1 - # create filesystem - msg_progress_install "23" "creating filesystem on ${INSTALL_DEVICE}1" - mke2fs -t ext4 -m 0 ${INSTALL_DEVICE}1 >> $LOGFILE 2>&1 + msg_progress_install "25" "set uuid and disklabel $DISKLABEL_SYSTEM on ${INSTALL_DEVICE}1" + tune2fs -U random -L $DISKLABEL_SYSTEM ${INSTALL_DEVICE}1 >> $LOGFILE 2>&1 - msg_progress_install "25" "set uuid and disklabel $DISKLABEL_SYSTEM on ${INSTALL_DEVICE}1" - tune2fs -U random -L $DISKLABEL_SYSTEM ${INSTALL_DEVICE}1 >> $LOGFILE 2>&1 + msg_progress_install "28" "creating filesystem on ${INSTALL_DEVICE}2" + mke2fs -t ext4 -m 0 ${INSTALL_DEVICE}2 >> $LOGFILE 2>&1 - msg_progress_install "28" "creating filesystem on ${INSTALL_DEVICE}2" - mke2fs -t ext4 -m 0 ${INSTALL_DEVICE}2 >> $LOGFILE 2>&1 + msg_progress_install "30" "set uuid and disklabel $DISKLABEL_STORAGE on ${INSTALL_DEVICE}2" + tune2fs -U random -L $DISKLABEL_STORAGE ${INSTALL_DEVICE}2 >> $LOGFILE 2>&1 - msg_progress_install "30" "set uuid and disklabel $DISKLABEL_STORAGE on ${INSTALL_DEVICE}2" - tune2fs -U random -L $DISKLABEL_STORAGE ${INSTALL_DEVICE}2 >> $LOGFILE 2>&1 + # mount system partition + msg_progress_install "35" "creating $TMPDIR/part1" + mkdir -p $TMPDIR/part1 >> $LOGFILE 2>&1 - # mount system partition - msg_progress_install "35" "creating $TMPDIR/part1" - mkdir -p $TMPDIR/part1 >> $LOGFILE 2>&1 + msg_progress_install "40" "mounting ${INSTALL_DEVICE}1 to $TMPDIR/part1" + mount -t ext4 ${INSTALL_DEVICE}1 $TMPDIR/part1 >> $LOGFILE 2>&1 - msg_progress_install "40" "mounting ${INSTALL_DEVICE}1 to $TMPDIR/part1" - mount -t ext4 ${INSTALL_DEVICE}1 $TMPDIR/part1 >> $LOGFILE 2>&1 + # installing extlinux + msg_progress_install "50" "installing extlinux to $TMPDIR/part1" + extlinux -i $TMPDIR/part1 >> $LOGFILE 2>&1 - # installing extlinux - msg_progress_install "50" "installing extlinux to $TMPDIR/part1" - extlinux -i $TMPDIR/part1 >> $LOGFILE 2>&1 + # install system files + msg_progress_install "60" "installing Kernel" + cp /flash/KERNEL $TMPDIR/part1 >> $LOGFILE 2>&1 - # install system files - msg_progress_install "60" "installing Kernel" - cp /flash/KERNEL $TMPDIR/part1 >> $LOGFILE 2>&1 + msg_progress_install "65" "installing System" + cp /flash/SYSTEM $TMPDIR/part1 >> $LOGFILE 2>&1 + sync - msg_progress_install "65" "installing System" - cp /flash/SYSTEM $TMPDIR/part1 >> $LOGFILE 2>&1 - sync + # configuring bootloader + msg_progress_install "80" "setup bootloader with boot label = $DISKLABEL_SYSTEM and disk label = $DISKLABEL_STORAGE" + echo "DEFAULT linux" > $TMPDIR/part1/extlinux.conf + echo "PROMPT 0" >> $TMPDIR/part1/extlinux.conf + echo " " >> $TMPDIR/part1/extlinux.conf + echo "LABEL linux" >> $TMPDIR/part1/extlinux.conf + echo " KERNEL /KERNEL" >> $TMPDIR/part1/extlinux.conf + echo " APPEND boot=LABEL=$DISKLABEL_SYSTEM disk=LABEL=$DISKLABEL_STORAGE $EXTLINUX_PARAMETERS $EXTLINUX_SSH quiet" >> $TMPDIR/part1/extlinux.conf + sync - # configuring bootloader - msg_progress_install "80" "setup bootloader with boot label = $DISKLABEL_SYSTEM and disk label = $DISKLABEL_STORAGE" - echo "DEFAULT linux" > $TMPDIR/part1/extlinux.conf - echo "PROMPT 0" >> $TMPDIR/part1/extlinux.conf - echo " " >> $TMPDIR/part1/extlinux.conf - echo "LABEL linux" >> $TMPDIR/part1/extlinux.conf - echo " KERNEL /KERNEL" >> $TMPDIR/part1/extlinux.conf - echo " APPEND boot=LABEL=$DISKLABEL_SYSTEM disk=LABEL=$DISKLABEL_STORAGE $EXTLINUX_PARAMETERS $EXTLINUX_SSH quiet" >> $TMPDIR/part1/extlinux.conf - sync + # umount system partition, remove mountpoint + msg_progress_install "85" "unmount $TMPDIR/part1" + umount $TMPDIR/part1 >> $LOGFILE 2>&1 + + msg_progress_install "87" "remove $TMPDIR/part1" + rmdir $TMPDIR/part1 >> $LOGFILE 2>&1 + + if [ "$BACKUP_UNPACK" = "1" ]; then + # mount storage partition + msg_progress_install "89" "creating $TMPDIR/part2" + mkdir -p $TMPDIR/part2 >> $LOGFILE 2>&1 + + msg_progress_install "90" "mounting ${INSTALL_DEVICE}2 to $TMPDIR/part2" + mount -t ext4 ${INSTALL_DEVICE}2 $TMPDIR/part2 >> $LOGFILE 2>&1 + + msg_progress_install "92" "restoring backup" + [ -f /flash/backup.tar.bz2 ] && tar -xjf /flash/backup.tar.bz2 -C $TMPDIR/part2 >> $LOGFILE 2>&1 + [ -f /flash/backup.zip ] && unzip -qq /flash/backup.zip -d $TMPDIR/part2 >> $LOGFILE 2>&1 + sync # umount system partition, remove mountpoint - msg_progress_install "85" "unmount $TMPDIR/part1" - umount $TMPDIR/part1 >> $LOGFILE 2>&1 + msg_progress_install "97" "unmount $TMPDIR/part2" + umount $TMPDIR/part2 >> $LOGFILE 2>&1 - msg_progress_install "87" "remove $TMPDIR/part1" - rmdir $TMPDIR/part1 >> $LOGFILE 2>&1 + msg_progress_install "100" "remove $TMPDIR/part2" + rmdir $TMPDIR/part2 >> $LOGFILE 2>&1 + fi - if [ "$BACKUP_UNPACK" = "1" ]; then - # mount storage partition - msg_progress_install "89" "creating $TMPDIR/part2" - mkdir -p $TMPDIR/part2 >> $LOGFILE 2>&1 - - msg_progress_install "90" "mounting ${INSTALL_DEVICE}2 to $TMPDIR/part2" - mount -t ext4 ${INSTALL_DEVICE}2 $TMPDIR/part2 >> $LOGFILE 2>&1 - - msg_progress_install "92" "restoring backup" - [ -f /flash/backup.tar.bz2 ] && tar -xjf /flash/backup.tar.bz2 -C $TMPDIR/part2 >> $LOGFILE 2>&1 - [ -f /flash/backup.zip ] && unzip -qq /flash/backup.zip -d $TMPDIR/part2 >> $LOGFILE 2>&1 - sync - - # umount system partition, remove mountpoint - msg_progress_install "97" "unmount $TMPDIR/part2" - umount $TMPDIR/part2 >> $LOGFILE 2>&1 - - msg_progress_install "100" "remove $TMPDIR/part2" - rmdir $TMPDIR/part2 >> $LOGFILE 2>&1 - fi - - menu_main - ;; - 1) - menu_main - ;; - 255) - do_poweroff - ;; - esac + menu_main + ;; + 1) + menu_main + ;; + 255) + do_poweroff + ;; + esac } do_install_custom() { # show menu - MSG_TITLE="\Z4[ CUSTOM INSTALL MENU ]\Zn" - MSG_MENU="\nUse the up/down arrows to select the correct partition where you want to overwrite KERNEL and SYSTEM files.\n\n Please select a partition:" - MSG_CANCEL="Back" - DIALOG_OPTIONS="--defaultno" + MSG_TITLE="\Z4[ CUSTOM INSTALL MENU ]\Zn" + MSG_MENU="\nUse the up/down arrows to select the correct partition where you want to overwrite KERNEL and SYSTEM files.\n\n Please select a partition:" + MSG_CANCEL="Back" + DIALOG_OPTIONS="--defaultno" - get_device_unmount + get_device_unmount - if [ "$DEVICES" = "" ]; then - msg_no_device - fi + if [ "$DEVICES" = "" ]; then + msg_no_device + fi - PARTITION_LIST="" - for device in $DEVICES; do - get_partition $device - for partition in $PARTITIONS; do - LABEL=$(tune2fs -l $device$partition | awk 'BEGIN {FS=":"} /Filesystem volume name/ {gsub(/ /,"",$2); print $2}') - if [ "$LABEL" = "$DISKLABEL_SYSTEM" ]; then - DEVICE_MODEL=$(parted -s $device -m print | grep ^$device | cut -f7 -d ":" | sed "s/;//") - DEVICE_SIZE=$(parted -s $device -m print | grep ^$device | cut -f2 -d ":") - DEVICE_NAME=$(echo $DEVICE_MODEL ${DEVICE_SIZE} | sed 's/ /_/g') - PARTITION_LIST="$PARTITION_LIST $device$partition $DEVICE_NAME" - fi - done + PARTITION_LIST="" + for device in $DEVICES; do + get_partition $device + for partition in $PARTITIONS; do + LABEL=$(tune2fs -l $device$partition | awk 'BEGIN {FS=":"} /Filesystem volume name/ {gsub(/ /,"",$2); print $2}') + if [ "$LABEL" = "$DISKLABEL_SYSTEM" ]; then + DEVICE_MODEL=$(parted -s $device -m print | grep ^$device | cut -f7 -d ":" | sed "s/;//") + DEVICE_SIZE=$(parted -s $device -m print | grep ^$device | cut -f2 -d ":") + DEVICE_NAME=$(echo $DEVICE_MODEL ${DEVICE_SIZE} | sed 's/ /_/g') + PARTITION_LIST="$PARTITION_LIST $device$partition $DEVICE_NAME" + fi done + done - if [ "$PARTITION_LIST" = "" ]; then - msg_no_device - fi + if [ "$PARTITION_LIST" = "" ]; then + msg_no_device + fi - dialog --colors --backtitle "$BACKTITLE" --cancel-label "$MSG_CANCEL" \ - $DIALOG_OPTIONS --title "$MSG_TITLE" --menu "$MSG_MENU" 20 50 5 \ - $PARTITION_LIST 2> $TMPDIR/device_for_install + dialog --colors --backtitle "$BACKTITLE" --cancel-label "$MSG_CANCEL" \ + $DIALOG_OPTIONS --title "$MSG_TITLE" --menu "$MSG_MENU" 20 50 5 \ + $PARTITION_LIST 2> $TMPDIR/device_for_install # now we must do everything - case $? in - 0) - INSTALL_PARTITION=$(cat "$TMPDIR/device_for_install") - INSTALL_PARTITION_FULL=$(echo $PARTITION_LIST | sed "s|.*$INSTALL_PARTITION \([^ ]*\).*|$INSTALL_PARTITION \1|") - - # check for confirmation (twice!) - MSG_TITLE="\Z1[ Confirmation before copying ]\Zn" - MSG_DETAIL="\nIf you continue the target partition will be\noverwritten with new KERNEL and SYSTEM files:\n\n$INSTALL_PARTITION_FULL\n\n" - DIALOG_OPTIONS="--defaultno" - dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" \ - $DIALOG_OPTIONS --yesno "$MSG_DETAIL" 0 0 - if [ $? -ne 0 ]; then - menu_main - fi - - MSG_TITLE="\Z1[ Confirmation before copying ]\Zn" - MSG_DETAIL="\nThis is last chance to abort the copying!\n\nIf you continue the target partition will be\noverwritten with new KERNEL and SYSTEM files:\n\n$INSTALL_PARTITION_FULL\n\n\n" - DIALOG_OPTIONS="--defaultno" - dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" \ - $DIALOG_OPTIONS --yesno "$MSG_DETAIL" 0 0 - if [ $? -ne 0 ]; then - menu_main - fi - - # mount system partition - msg_progress_install "5" "creating $TMPDIR/part1" - mkdir -p $TMPDIR/part1 >> $LOGFILE 2>&1 - - msg_progress_install "10" "mounting $INSTALL_PARTITION to $TMPDIR/part1" - mount -t ext4 $INSTALL_PARTITION $TMPDIR/part1 >> $LOGFILE 2>&1 - - # check for enough target space - msg_progress_install "15" "checking for space on $INSTALL_PARTITION" - - KERNEL_SIZE=$(stat -t /flash/KERNEL | awk '{print $2}') - SYSTEM_SIZE=$(stat -t /flash/SYSTEM | awk '{print $2}') - SRC_SIZE=$(( $KERNEL_SIZE + $SYSTEM_SIZE )) - - DEST_SIZE=$(df $TMPDIR/part1 | awk '/[0-9]%/{print $4}') - DEST_SIZE=$(( $DEST_SIZE * 1024 )) - if [ -f $TMPDIR/part1/KERNEL ]; then - KERNEL_SIZE=$(stat -t $TMPDIR/part1/KERNEL | awk '{print $2}') - DEST_SIZE=$(( $DEST_SIZE + $KERNEL_SIZE )) - fi - if [ -f $TMPDIR/part1/SYSTEM ]; then - SYSTEM_SIZE=$(stat -t $TMPDIR/part1/SYSTEM | awk '{print $2}') - DEST_SIZE=$(( $DEST_SIZE + $SYSTEM_SIZE )) - fi - - if [ $SRC_SIZE -ge $DEST_SIZE ]; then - umount $TMPDIR/part1 >> $LOGFILE 2>&1 - rmdir $TMPDIR/part1 >> $LOGFILE 2>&1 - msg_target_space - menu_main - fi - - # install system files - msg_progress_install "20" "installing Kernel" - cp /flash/KERNEL $TMPDIR/part1 >> $LOGFILE 2>&1 - - msg_progress_install "40" "installing System" - cp /flash/SYSTEM $TMPDIR/part1 >> $LOGFILE 2>&1 - sync - - # umount system partition, remove mountpoint - msg_progress_install "95" "unmount $TMPDIR/part1" - umount $TMPDIR/part1 >> $LOGFILE 2>&1 - - msg_progress_install "100" "remove $TMPDIR/part1" - rmdir $TMPDIR/part1 >> $LOGFILE 2>&1 + case $? in + 0) + INSTALL_PARTITION=$(cat "$TMPDIR/device_for_install") + INSTALL_PARTITION_FULL=$(echo $PARTITION_LIST | sed "s|.*$INSTALL_PARTITION \([^ ]*\).*|$INSTALL_PARTITION \1|") + # check for confirmation (twice!) + MSG_TITLE="\Z1[ Confirmation before copying ]\Zn" + MSG_DETAIL="\nIf you continue the target partition will be\noverwritten with new KERNEL and SYSTEM files:\n\n$INSTALL_PARTITION_FULL\n\n" + DIALOG_OPTIONS="--defaultno" + dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" \ + $DIALOG_OPTIONS --yesno "$MSG_DETAIL" 0 0 + if [ $? -ne 0 ]; then menu_main - ;; - 1) + fi + + MSG_TITLE="\Z1[ Confirmation before copying ]\Zn" + MSG_DETAIL="\nThis is last chance to abort the copying!\n\nIf you continue the target partition will be\noverwritten with new KERNEL and SYSTEM files:\n\n$INSTALL_PARTITION_FULL\n\n\n" + DIALOG_OPTIONS="--defaultno" + dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" \ + $DIALOG_OPTIONS --yesno "$MSG_DETAIL" 0 0 + if [ $? -ne 0 ]; then menu_main - ;; - 255) - do_poweroff - ;; - esac + fi + + # mount system partition + msg_progress_install "5" "creating $TMPDIR/part1" + mkdir -p $TMPDIR/part1 >> $LOGFILE 2>&1 + + msg_progress_install "10" "mounting $INSTALL_PARTITION to $TMPDIR/part1" + mount -t ext4 $INSTALL_PARTITION $TMPDIR/part1 >> $LOGFILE 2>&1 + + # check for enough target space + msg_progress_install "15" "checking for space on $INSTALL_PARTITION" + + KERNEL_SIZE=$(stat -t /flash/KERNEL | awk '{print $2}') + SYSTEM_SIZE=$(stat -t /flash/SYSTEM | awk '{print $2}') + SRC_SIZE=$(( $KERNEL_SIZE + $SYSTEM_SIZE )) + + DEST_SIZE=$(df $TMPDIR/part1 | awk '/[0-9]%/{print $4}') + DEST_SIZE=$(( $DEST_SIZE * 1024 )) + if [ -f $TMPDIR/part1/KERNEL ]; then + KERNEL_SIZE=$(stat -t $TMPDIR/part1/KERNEL | awk '{print $2}') + DEST_SIZE=$(( $DEST_SIZE + $KERNEL_SIZE )) + fi + if [ -f $TMPDIR/part1/SYSTEM ]; then + SYSTEM_SIZE=$(stat -t $TMPDIR/part1/SYSTEM | awk '{print $2}') + DEST_SIZE=$(( $DEST_SIZE + $SYSTEM_SIZE )) + fi + + if [ $SRC_SIZE -ge $DEST_SIZE ]; then + umount $TMPDIR/part1 >> $LOGFILE 2>&1 + rmdir $TMPDIR/part1 >> $LOGFILE 2>&1 + msg_target_space + menu_main + fi + + # install system files + msg_progress_install "20" "installing Kernel" + cp /flash/KERNEL $TMPDIR/part1 >> $LOGFILE 2>&1 + + msg_progress_install "40" "installing System" + cp /flash/SYSTEM $TMPDIR/part1 >> $LOGFILE 2>&1 + sync + + # umount system partition, remove mountpoint + msg_progress_install "95" "unmount $TMPDIR/part1" + umount $TMPDIR/part1 >> $LOGFILE 2>&1 + + msg_progress_install "100" "remove $TMPDIR/part1" + rmdir $TMPDIR/part1 >> $LOGFILE 2>&1 + + menu_main + ;; + 1) + menu_main + ;; + 255) + do_poweroff + ;; + esac } msg_not_implemented() { # show a dialog that this function is not yet implemented - MSG_TITLE="\Z2[ WORK IN PROGRESS ]\Zn" - MSG_INFOBOX=" This function is not implemented yet." + MSG_TITLE="\Z2[ WORK IN PROGRESS ]\Zn" + MSG_INFOBOX=" This function is not implemented yet." - dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" --msgbox "$MSG_INFOBOX" 7 70 + dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" --msgbox "$MSG_INFOBOX" 7 70 } msg_oem_only() { # show a dialog that this function is only implemented on special builds - MSG_TITLE="\Z2[ FOR OEM ONLY ]\Zn" - MSG_INFOBOX=" OEM only feature, this function is not implemented in this build. \n if you have questions about this feature \n visit http://www.openelec.tv" + MSG_TITLE="\Z2[ FOR OEM ONLY ]\Zn" + MSG_INFOBOX=" OEM only feature, this function is not implemented in this build. \n if you have questions about this feature \n visit http://www.openelec.tv" - dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" --msgbox "$MSG_INFOBOX" 7 70 + dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" --msgbox "$MSG_INFOBOX" 7 70 } msg_warning_beta() { # show a warning dialog if we use beta software - MSG_TITLE="\Z1[ BETA WARNING ]\Zn" - MSG_INFOBOX=" This installer is for beta versions. \n This means this sofware have not been tested yet. \n Please make sure you have a backup of your files." + MSG_TITLE="\Z1[ BETA WARNING ]\Zn" + MSG_INFOBOX=" This installer is for beta versions. \n This means this sofware have not been tested yet. \n Please make sure you have a backup of your files." - dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" --msgbox "$MSG_INFOBOX" 7 70 + dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" --msgbox "$MSG_INFOBOX" 7 70 } msg_no_device() { # show a warning dialog if we dont find not mounted devices for install and return to main menu - MSG_TITLE="\Z1[ WARNING ]\Zn" - MSG_INFOBOX=" No devices were found. \n If you are trying to install on a brand new harddisk you must \n create atleast one partition. \n Otherwise it won't be found. \n If you dont know how, ask in the forum or on IRC." + MSG_TITLE="\Z1[ WARNING ]\Zn" + MSG_INFOBOX=" No devices were found. \n If you are trying to install on a brand new harddisk you must \n create atleast one partition. \n Otherwise it won't be found. \n If you dont know how, ask in the forum or on IRC." - dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" --msgbox "$MSG_INFOBOX" 9 70 + dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" --msgbox "$MSG_INFOBOX" 9 70 - menu_main + menu_main } msg_target_space() { # show an error dialog for missing space - MSG_TITLE="\Z1[ TARGET SPACE ]\Zn" - MSG_INFOBOX="\nNot enough target space!\nCopying aborted.\n" + MSG_TITLE="\Z1[ TARGET SPACE ]\Zn" + MSG_INFOBOX="\nNot enough target space!\nCopying aborted.\n" - dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" --msgbox "$MSG_INFOBOX" 8 70 + dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" --msgbox "$MSG_INFOBOX" 8 70 - menu_main + menu_main } msg_install_ready() { # show a dialog that we have installed - MSG_TITLE="\Z1[ INFORMATION ]\Zn" + MSG_TITLE="\Z1[ INFORMATION ]\Zn" - dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" --msgbox " $1" 7 70 + dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" --msgbox " $1" 7 70 - menu_main + menu_main } msg_progress_install() { # show the progress dialog - MSG_TITLE="\Z1[ INSTALLING ]\Zn" + MSG_TITLE="\Z1[ INSTALLING ]\Zn" - dbglg "$2" - dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" --gauge "$2 ..." 6 70 $1 & + dbglg "$2" + dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" --gauge "$2 ..." 6 70 $1 & } prompt_gpt() { @@ -521,27 +520,27 @@ prompt_gpt() { # usage: prompt_gpt # uses: INSTALL_DEVICE # provides: GPT - MSG_TITLE="\Z1[ Partition Table Type ]\Zn" - # Get "msdos" or "gpt" - INSTALL_DEVICE_PARTITION_TYPE=$(parted -s -m $INSTALL_DEVICE print | grep $INSTALL_DEVICE | cut -f6 -d ":") - # Get size in GB - INSTALL_DEVICE_SIZE=$(($(cat /sys/block/${INSTALL_DEVICE#/dev/}/size)*512/1000/1000/1000)) - if [ "$INSTALL_DEVICE_PARTITION_TYPE" = "gpt" ]; then - MSG_DETAIL="GUID Partition Table detected on the destination disk. It is recommended that you keep it." - DIALOG_OPTIONS="" - # 2^41 bytes is the DOS limit = 2199023255552 (2.2TB) - elif [ "$INSTALL_DEVICE_SIZE" -ge 2200 ] 2>/dev/null; then - MSG_DETAIL="Destination disk is too large to use a DOS partition table. You will need to use a GUID Partition Table." - DIALOG_OPTIONS="" - else - MSG_DETAIL="You should only use a GUID Partition Table if you know what you are doing." - DIALOG_OPTIONS="--defaultno" - fi - if dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" $DIALOG_OPTIONS --yesno "Use GPT partitions?\n$MSG_DETAIL" 0 0; then - GPT="1" - else - GPT="0" - fi + MSG_TITLE="\Z1[ Partition Table Type ]\Zn" + # Get "msdos" or "gpt" + INSTALL_DEVICE_PARTITION_TYPE=$(parted -s -m $INSTALL_DEVICE print | grep $INSTALL_DEVICE | cut -f6 -d ":") + # Get size in GB + INSTALL_DEVICE_SIZE=$(($(cat /sys/block/${INSTALL_DEVICE#/dev/}/size)*512/1000/1000/1000)) + if [ "$INSTALL_DEVICE_PARTITION_TYPE" = "gpt" ]; then + MSG_DETAIL="GUID Partition Table detected on the destination disk. It is recommended that you keep it." + DIALOG_OPTIONS="" + # 2^41 bytes is the DOS limit = 2199023255552 (2.2TB) + elif [ "$INSTALL_DEVICE_SIZE" -ge 2200 ] 2>/dev/null; then + MSG_DETAIL="Destination disk is too large to use a DOS partition table. You will need to use a GUID Partition Table." + DIALOG_OPTIONS="" + else + MSG_DETAIL="You should only use a GUID Partition Table if you know what you are doing." + DIALOG_OPTIONS="--defaultno" + fi + if dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" $DIALOG_OPTIONS --yesno "Use GPT partitions?\n$MSG_DETAIL" 0 0; then + GPT="1" + else + GPT="0" + fi } prompt_ssh() { @@ -549,14 +548,14 @@ prompt_ssh() { # usage: prompt_ssh # uses: # provides: SSH - MSG_TITLE="\Z1[ Enable SSH Server on start ]\Zn" - MSG_DETAIL="Enable SSH server per default.\nYou should only enable SSH server if you know what you are doing." - DIALOG_OPTIONS="--defaultno" - if dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" $DIALOG_OPTIONS --yesno "$MSG_DETAIL" 0 0; then - SSH="1" - else - SSH="0" - fi + MSG_TITLE="\Z1[ Enable SSH Server on start ]\Zn" + MSG_DETAIL="Enable SSH server per default.\nYou should only enable SSH server if you know what you are doing." + DIALOG_OPTIONS="--defaultno" + if dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" $DIALOG_OPTIONS --yesno "$MSG_DETAIL" 0 0; then + SSH="1" + else + SSH="0" + fi } prompt_backup_unpack() { @@ -570,189 +569,185 @@ prompt_backup_unpack() { MSG_DETAIL="Restore backup files to storage partition.\nFile backup.tar.bz2 or/and backup.zip exist on\ninstallation USB stick." DIALOG_OPTIONS="--defaultno" if dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" $DIALOG_OPTIONS --yesno "$MSG_DETAIL" 0 0; then - BACKUP_UNPACK="1" + BACKUP_UNPACK="1" fi fi } menu_main() { # show the mainmenu - MSG_TITLE="\Z4[ MAIN MENU ]\Zn" - MSG_MENU="\n\ZbQuick Install:\Zn do a default installation on a specific device \ - \Z1\Zb(this will delete ALL data on this device!)\Zn \ - \n\ZbCustom Install:\Zn do a custom installation \ - \n\ZbSetup:\Zn change some settings to run OpenELEC \ - \n\ZbBIOS Update:\Zn backup and update your BIOS (only for OEMs) \ - \n\ZbShow logfile:\Zn show and save the logfile \ - \n \ - \nPlease select:" - MSG_CANCEL="Reboot" + MSG_TITLE="\Z4[ MAIN MENU ]\Zn" + MSG_MENU="\n\ZbQuick Install:\Zn do a default installation on a specific device \ + \Z1\Zb(this will delete ALL data on this device!)\Zn \ + \n\ZbCustom Install:\Zn do a custom installation \ + \n\ZbSetup:\Zn change some settings to run OpenELEC \ + \n\ZbBIOS Update:\Zn backup and update your BIOS (only for OEMs) \ + \n\ZbShow logfile:\Zn show and save the logfile \ + \n \ + \nPlease select:" + MSG_CANCEL="Reboot" - dialog --colors --backtitle "$BACKTITLE" --cancel-label "$MSG_CANCEL" \ - --title "$MSG_TITLE" --menu "$MSG_MENU" 20 70 5 \ - 1 "Quick Install of OpenELEC" \ - 2 "Custom Install of OpenELEC" \ - 3 "Setup OpenELEC" \ - 4 "BIOS update (only for OEM's)" \ - 5 "Show logfile" 2> $TMPDIR/mainmenu + dialog --colors --backtitle "$BACKTITLE" --cancel-label "$MSG_CANCEL" \ + --title "$MSG_TITLE" --menu "$MSG_MENU" 20 70 5 \ + 1 "Quick Install of OpenELEC" \ + 2 "Custom Install of OpenELEC" \ + 3 "Setup OpenELEC" \ + 4 "BIOS update (only for OEM's)" \ + 5 "Show logfile" 2> $TMPDIR/mainmenu - case $? in - 0) - ITEM_MAINMENU=$(cat "$TMPDIR/mainmenu") - case $ITEM_MAINMENU in - 1) do_install_quick; break;; - 2) do_install_custom; break;; - 3) menu_setup; break;; - 4) menu_bios; break;; - 5) logfile_show; break;; - esac - ;; - 1) - do_reboot - ;; - 255) - do_poweroff - ;; - esac + case $? in + 0) + ITEM_MAINMENU=$(cat "$TMPDIR/mainmenu") + case $ITEM_MAINMENU in + 1) do_install_quick; break;; + 2) do_install_custom; break;; + 3) menu_setup; break;; + 4) menu_bios; break;; + 5) logfile_show; break;; + esac + ;; + 1) + do_reboot + ;; + 255) + do_poweroff + ;; + esac } menu_setup() { # TODO: show the setupmenu - msg_not_implemented - menu_main + msg_not_implemented + menu_main } menu_bios() { # show the biosmenu - MSG_TITLE="\Z4[ BIOS MENU ]\Zn" - MSG_MENU="\n You can use the UP/DOWN arrow keys,\n or the number of the choice as a hotkey,\n to choose an option.\n\n Please choose an option:" - MSG_CANCEL="Back" + MSG_TITLE="\Z4[ BIOS MENU ]\Zn" + MSG_MENU="\n You can use the UP/DOWN arrow keys,\n or the number of the choice as a hotkey,\n to choose an option.\n\n Please choose an option:" + MSG_CANCEL="Back" - dialog --colors --backtitle "$BACKTITLE" --cancel-label "$MSG_CANCEL" \ - --title "$MSG_TITLE" --menu "$MSG_MENU" 20 70 5 \ - 1 "Backup installed BIOS" \ - 2 "Update BIOS" \ - 3 "Erase BIOS (not recommended)" 2> $TMPDIR/biosmenu + dialog --colors --backtitle "$BACKTITLE" --cancel-label "$MSG_CANCEL" \ + --title "$MSG_TITLE" --menu "$MSG_MENU" 20 70 5 \ + 1 "Backup installed BIOS" \ + 2 "Update BIOS" \ + 3 "Erase BIOS (not recommended)" 2> $TMPDIR/biosmenu - case $? in - 0) - ITEM_BIOSMENU=$(cat "$TMPDIR/biosmenu") - case $ITEM_BIOSMENU in - 1) bios_backup; break;; - 2) bios_update; break;; - 3) bios_erase; break;; - esac - ;; - 1) - menu_main - ;; - 255) - do_poweroff - ;; - esac + case $? in + 0) + ITEM_BIOSMENU=$(cat "$TMPDIR/biosmenu") + case $ITEM_BIOSMENU in + 1) bios_backup; break;; + 2) bios_update; break;; + 3) bios_erase; break;; + esac + ;; + 1) + menu_main + ;; + 255) + do_poweroff + ;; + esac } bios_backup() { # create a backup of the installed bios - if [ "$BIOS_UPDATE" = "yes" -a -f "$BIOS_FILE" ]; then + if [ "$BIOS_UPDATE" = "yes" -a -f "$BIOS_FILE" ]; then - clear - echo "##### backup old BIOS to $BIOS_BACKUP #####" - usleep 1000000 - mount -o remount,rw /flash - flashrom --read /flash/$BIOS_BACKUP - mount -o remount,ro /flash + clear + echo "##### backup old BIOS to $BIOS_BACKUP #####" + usleep 1000000 + mount -o remount,rw /flash + flashrom --read /flash/$BIOS_BACKUP + mount -o remount,ro /flash - echo "##### Please control the output and press any key to continue #####" - read -sn1 + echo "##### Please control the output and press any key to continue #####" + read -sn1 - else - msg_oem_only - fi - menu_bios + else + msg_oem_only + fi + menu_bios } bios_update() { # update the bios - if [ "$BIOS_UPDATE" = "yes" -a -f "$BIOS_FILE" ]; then + if [ "$BIOS_UPDATE" = "yes" -a -f "$BIOS_FILE" ]; then + clear + echo "##### erasing BIOS #####" + usleep 1000000 + flashrom --erase - clear - echo "##### erasing BIOS #####" - usleep 1000000 - flashrom --erase + echo "##### writing new BIOS from $BIOS_FILE #####" + usleep 1000000 + flashrom --write "$BIOS_FILE" - echo "##### writing new BIOS from $BIOS_FILE #####" - usleep 1000000 - flashrom --write "$BIOS_FILE" - - echo "##### Please control the output and press any key to continue #####" - read -sn1 - - else - msg_oem_only - fi - menu_bios + echo "##### Please control the output and press any key to continue #####" + read -sn1 + else + msg_oem_only + fi + menu_bios } bios_erase() { # erase the bios - if [ "$BIOS_UPDATE" = "yes" -a -f "$BIOS_FILE" ]; then + if [ "$BIOS_UPDATE" = "yes" -a -f "$BIOS_FILE" ]; then + clear + echo "##### erasing BIOS #####" + usleep 1000000 + flashrom --erase - clear - echo "##### erasing BIOS #####" - usleep 1000000 - flashrom --erase - - echo "##### Please control the output and press any key to continue #####" - read -sn1 - - else - msg_oem_only - fi - menu_bios + echo "##### Please control the output and press any key to continue #####" + read -sn1 + else + msg_oem_only + fi + menu_bios } logfile_show() { # TODO: show the logfile - dialog --textbox "$LOGFILE" 20 70 - clear - menu_main + dialog --textbox "$LOGFILE" 20 70 + clear + menu_main } do_reboot() { # reboot on request - clear - sync - reboot + clear + sync + reboot } do_poweroff() { # powerdown on request - clear - sync - poweroff + clear + sync + poweroff } # setup needed variables - BETA="yes" - INSTALLER_VERSION="0.2.6" - OS_VERSION=$(lsb_release) - BACKTITLE="OpenELEC Installer $INSTALLER_VERSION - $OS_VERSION" +BETA="yes" +INSTALLER_VERSION="0.2.6" +OS_VERSION=$(lsb_release) +BACKTITLE="OpenELEC Installer $INSTALLER_VERSION - $OS_VERSION" - TMPDIR="/tmp/installer" - LOGFILE="$TMPDIR/install.log" +TMPDIR="/tmp/installer" +LOGFILE="$TMPDIR/install.log" # prepare temporary directory - rm -rf $TMPDIR - mkdir -p $TMPDIR +rm -rf $TMPDIR +mkdir -p $TMPDIR # main - [ "$BETA" = "yes" ] && msg_warning_beta +[ "$BETA" = "yes" ] && msg_warning_beta - while true; do - clear - menu_main - done +while true; do + clear + menu_main +done # exit cleanly - exit 0 +exit 0 From 3a6278708163706373f170842d4193638f905c21 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Fri, 28 Feb 2014 22:54:15 +0200 Subject: [PATCH 14/19] syslinux:host: install efi64/efi/syslinux.efi as bootx64.efi --- packages/tools/syslinux/package.mk | 2 +- scripts/mkimage | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/tools/syslinux/package.mk b/packages/tools/syslinux/package.mk index a3b331997e..10111e5b8d 100644 --- a/packages/tools/syslinux/package.mk +++ b/packages/tools/syslinux/package.mk @@ -79,7 +79,7 @@ makeinstall_host() { cp bios/com32/libutil/libutil.c32 $ROOT/$TOOLCHAIN/share/syslinux cp bios/mbr/mbr.bin $ROOT/$TOOLCHAIN/share/syslinux cp bios/mbr/gptmbr.bin $ROOT/$TOOLCHAIN/share/syslinux - cp efi64/efi/syslinux.efi $ROOT/$TOOLCHAIN/share/syslinux + cp efi64/efi/syslinux.efi $ROOT/$TOOLCHAIN/share/syslinux/bootx64.efi cp efi64/com32/elflink/ldlinux/ldlinux.e64 $ROOT/$TOOLCHAIN/share/syslinux } diff --git a/scripts/mkimage b/scripts/mkimage index 7bd405ecd3..f8eea8af98 100755 --- a/scripts/mkimage +++ b/scripts/mkimage @@ -205,7 +205,7 @@ EOF cp $ROOT/$TOOLCHAIN/share/syslinux/vesamenu.c32 "$OE_TMP/EFI/BOOT" cp $ROOT/$TOOLCHAIN/share/syslinux/libcom32.c32 "$OE_TMP/EFI/BOOT" cp $ROOT/$TOOLCHAIN/share/syslinux/libutil.c32 "$OE_TMP/EFI/BOOT" - cp $ROOT/$TOOLCHAIN/share/syslinux/syslinux.efi "$OE_TMP/EFI/BOOT/bootx64.efi" + cp $ROOT/$TOOLCHAIN/share/syslinux/bootx64.efi "$OE_TMP/EFI/BOOT" cp $ROOT/$TOOLCHAIN/share/syslinux/ldlinux.e64 "$OE_TMP/EFI/BOOT" cat << EOF > "$OE_TMP"/EFI/BOOT/syslinux.cfg DEFAULT live From d7825fd51182df9140ee332c77ba916103f2eed8 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Fri, 28 Feb 2014 22:57:58 +0200 Subject: [PATCH 15/19] syslinux: also install bootx64.efi & ldlinux.e64 --- packages/tools/syslinux/package.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/tools/syslinux/package.mk b/packages/tools/syslinux/package.mk index 10111e5b8d..d3960b866c 100644 --- a/packages/tools/syslinux/package.mk +++ b/packages/tools/syslinux/package.mk @@ -91,4 +91,6 @@ makeinstall_target() { mkdir -p $INSTALL/usr/share/syslinux cp bios/mbr/mbr.bin $INSTALL/usr/share/syslinux cp bios/mbr/gptmbr.bin $INSTALL/usr/share/syslinux + cp efi64/efi/syslinux.efi $INSTALL/usr/share/syslinux/bootx64.efi + cp efi64/com32/elflink/ldlinux/ldlinux.e64 $INSTALL/usr/share/syslinux } From b165d74d5932b720473920bd80f3ab1fde271bd7 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Sat, 1 Mar 2014 00:45:32 +0200 Subject: [PATCH 16/19] dialog: update to dialog-1.2-20140219 --- packages/tools/dialog/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tools/dialog/package.mk b/packages/tools/dialog/package.mk index f8d9c117a9..8da9c5edb4 100644 --- a/packages/tools/dialog/package.mk +++ b/packages/tools/dialog/package.mk @@ -17,7 +17,7 @@ ################################################################################ PKG_NAME="dialog" -PKG_VERSION="1.1-20120706" +PKG_VERSION="1.2-20140219" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 615d3027d92d34006ad8ee60c04d5104a71cd99e Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Sat, 1 Mar 2014 00:45:58 +0200 Subject: [PATCH 17/19] installer: uefi support --- packages/tools/installer/scripts/installer | 74 ++++++++++++++-------- 1 file changed, 47 insertions(+), 27 deletions(-) diff --git a/packages/tools/installer/scripts/installer b/packages/tools/installer/scripts/installer index 45c4847d6e..9fb2001d16 100755 --- a/packages/tools/installer/scripts/installer +++ b/packages/tools/installer/scripts/installer @@ -241,7 +241,11 @@ do_install_quick() { fi msg_progress_install "10" "creating partition on $INSTALL_DEVICE" - parted -s $INSTALL_DEVICE unit cyl mkpart primary ext2 -- 0 $PARTSIZE_SYSTEM >> $LOGFILE 2>&1 + if [ "$UEFI" = "1" ]; then + parted -s $INSTALL_DEVICE unit cyl mkpart primary fat32 -- 0 $PARTSIZE_SYSTEM >> $LOGFILE 2>&1 + else + parted -s $INSTALL_DEVICE unit cyl mkpart primary ext2 -- 0 $PARTSIZE_SYSTEM >> $LOGFILE 2>&1 + fi msg_progress_install "13" "creating partition on $INSTALL_DEVICE" parted -s $INSTALL_DEVICE unit cyl mkpart primary ext2 -- $PARTSIZE_SYSTEM -2 >> $LOGFILE 2>&1 @@ -257,10 +261,18 @@ do_install_quick() { # create filesystem msg_progress_install "23" "creating filesystem on ${INSTALL_DEVICE}1" - mke2fs -t ext4 -m 0 ${INSTALL_DEVICE}1 >> $LOGFILE 2>&1 + if [ "$UEFI" = "1" ]; then + mkfs.vfat ${INSTALL_DEVICE}1 >> $LOGFILE 2>&1 + else + mke2fs -t ext4 -m 0 ${INSTALL_DEVICE}1 >> $LOGFILE 2>&1 + fi msg_progress_install "25" "set uuid and disklabel $DISKLABEL_SYSTEM on ${INSTALL_DEVICE}1" - tune2fs -U random -L $DISKLABEL_SYSTEM ${INSTALL_DEVICE}1 >> $LOGFILE 2>&1 + if [ "$UEFI" = "1" ]; then + dosfslabel ${INSTALL_DEVICE}1 $DISKLABEL_SYSTEM >> $LOGFILE 2>&1 + else + tune2fs -U random -L $DISKLABEL_SYSTEM ${INSTALL_DEVICE}1 >> $LOGFILE 2>&1 + fi msg_progress_install "28" "creating filesystem on ${INSTALL_DEVICE}2" mke2fs -t ext4 -m 0 ${INSTALL_DEVICE}2 >> $LOGFILE 2>&1 @@ -273,11 +285,19 @@ do_install_quick() { mkdir -p $TMPDIR/part1 >> $LOGFILE 2>&1 msg_progress_install "40" "mounting ${INSTALL_DEVICE}1 to $TMPDIR/part1" - mount -t ext4 ${INSTALL_DEVICE}1 $TMPDIR/part1 >> $LOGFILE 2>&1 + if [ "$UEFI" = "1" ]; then + mount -t vfat ${INSTALL_DEVICE}1 $TMPDIR/part1 >> $LOGFILE 2>&1 + else + mount -t ext4 ${INSTALL_DEVICE}1 $TMPDIR/part1 >> $LOGFILE 2>&1 + fi # installing extlinux msg_progress_install "50" "installing extlinux to $TMPDIR/part1" - extlinux -i $TMPDIR/part1 >> $LOGFILE 2>&1 + if [ "$UEFI" = "1" ]; then + syslinux -i ${INSTALL_DEVICE}1 >> $LOGFILE 2>&1 + else + extlinux -i $TMPDIR/part1 >> $LOGFILE 2>&1 + fi # install system files msg_progress_install "60" "installing Kernel" @@ -295,6 +315,14 @@ do_install_quick() { echo "LABEL linux" >> $TMPDIR/part1/extlinux.conf echo " KERNEL /KERNEL" >> $TMPDIR/part1/extlinux.conf echo " APPEND boot=LABEL=$DISKLABEL_SYSTEM disk=LABEL=$DISKLABEL_STORAGE $EXTLINUX_PARAMETERS $EXTLINUX_SSH quiet" >> $TMPDIR/part1/extlinux.conf + # uefi boot / hybrid mode + if [ "$UEFI" = "1" ]; then + mv $TMPDIR/part1/extlinux.conf $TMPDIR/part1/syslinux.cfg + mkdir -p $TMPDIR/part1/EFI/BOOT + cp $TMPDIR/part1/syslinux.cfg $TMPDIR/part1/EFI/BOOT + cp /usr/share/syslinux/bootx64.efi $TMPDIR/part1/EFI/BOOT + cp /usr/share/syslinux/ldlinux.e64 $TMPDIR/part1/EFI/BOOT + fi sync # umount system partition, remove mountpoint @@ -516,30 +544,22 @@ msg_progress_install() { } prompt_gpt() { - # Prompt for GPT use - # usage: prompt_gpt - # uses: INSTALL_DEVICE - # provides: GPT - MSG_TITLE="\Z1[ Partition Table Type ]\Zn" - # Get "msdos" or "gpt" - INSTALL_DEVICE_PARTITION_TYPE=$(parted -s -m $INSTALL_DEVICE print | grep $INSTALL_DEVICE | cut -f6 -d ":") - # Get size in GB + GPT="0" + UEFI="0" + # Get "msdos" or "gpt". TODO: remove. does this make sense ? + #INSTALL_DEVICE_PARTITION_TYPE=$(parted -s -m $INSTALL_DEVICE print | grep $INSTALL_DEVICE | cut -f6 -d ":") + #if [ "$INSTALL_DEVICE_PARTITION_TYPE" = "gpt" ]; then + # GPT="1" + #fi + # Get size in GB. INSTALL_DEVICE_SIZE=$(($(cat /sys/block/${INSTALL_DEVICE#/dev/}/size)*512/1000/1000/1000)) - if [ "$INSTALL_DEVICE_PARTITION_TYPE" = "gpt" ]; then - MSG_DETAIL="GUID Partition Table detected on the destination disk. It is recommended that you keep it." - DIALOG_OPTIONS="" - # 2^41 bytes is the DOS limit = 2199023255552 (2.2TB) - elif [ "$INSTALL_DEVICE_SIZE" -ge 2200 ] 2>/dev/null; then - MSG_DETAIL="Destination disk is too large to use a DOS partition table. You will need to use a GUID Partition Table." - DIALOG_OPTIONS="" - else - MSG_DETAIL="You should only use a GUID Partition Table if you know what you are doing." - DIALOG_OPTIONS="--defaultno" - fi - if dialog --colors --backtitle "$BACKTITLE" --title "$MSG_TITLE" $DIALOG_OPTIONS --yesno "Use GPT partitions?\n$MSG_DETAIL" 0 0; then + if [ "$INSTALL_DEVICE_SIZE" -ge 2200 ] 2>/dev/null; then + GPT="1" + fi + # force gpt + uefi in uefi boot mode + if [ -d /sys/firmware/efi ]; then + UEFI="1" GPT="1" - else - GPT="0" fi } From 301dfa5f1e3b2dde9ba462c8e073871888aed819 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Sat, 1 Mar 2014 00:46:36 +0200 Subject: [PATCH 18/19] scripts/mkimage: support only installer in uefi boot mode --- scripts/mkimage | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/scripts/mkimage b/scripts/mkimage index f8eea8af98..2d37d1a79d 100755 --- a/scripts/mkimage +++ b/scripts/mkimage @@ -208,15 +208,11 @@ EOF cp $ROOT/$TOOLCHAIN/share/syslinux/bootx64.efi "$OE_TMP/EFI/BOOT" cp $ROOT/$TOOLCHAIN/share/syslinux/ldlinux.e64 "$OE_TMP/EFI/BOOT" cat << EOF > "$OE_TMP"/EFI/BOOT/syslinux.cfg -DEFAULT live +DEFAULT installer LABEL installer KERNEL /KERNEL APPEND boot=UUID=$UUID_SYSTEM installer quiet tty vga=current - -LABEL live - KERNEL /KERNEL - APPEND boot=UUID=$UUID_SYSTEM disk=UUID=$UUID_STORAGE quiet vga=current EOF fi elif [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then From 599837b4ef4a6152ea3b2d5ca87a20756a257b9d Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Sat, 1 Mar 2014 00:49:37 +0200 Subject: [PATCH 19/19] scripts/mkimage: no menu in uefi boot mode. clean up --- scripts/mkimage | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scripts/mkimage b/scripts/mkimage index 2d37d1a79d..82af32119f 100755 --- a/scripts/mkimage +++ b/scripts/mkimage @@ -201,10 +201,6 @@ EOF cp $ROOT/$TOOLCHAIN/share/syslinux/libutil.c32 "$OE_TMP" if [ "$UEFI" = "yes" ] ; then mkdir -p "$OE_TMP/EFI/BOOT" - cp $RELEASE_DIR/splash.png "$OE_TMP/EFI/BOOT" - cp $ROOT/$TOOLCHAIN/share/syslinux/vesamenu.c32 "$OE_TMP/EFI/BOOT" - cp $ROOT/$TOOLCHAIN/share/syslinux/libcom32.c32 "$OE_TMP/EFI/BOOT" - cp $ROOT/$TOOLCHAIN/share/syslinux/libutil.c32 "$OE_TMP/EFI/BOOT" cp $ROOT/$TOOLCHAIN/share/syslinux/bootx64.efi "$OE_TMP/EFI/BOOT" cp $ROOT/$TOOLCHAIN/share/syslinux/ldlinux.e64 "$OE_TMP/EFI/BOOT" cat << EOF > "$OE_TMP"/EFI/BOOT/syslinux.cfg