balena-io / etcher

Flash OS images to SD cards & USB drives, safely and easily.
https://etcher.io/
Apache License 2.0
29.27k stars 2.08k forks source link

bz2 files can no longer be flashed #4038

Open lukedds opened 1 year ago

lukedds commented 1 year ago
dfunckt commented 1 year ago

I'm on Monterey on Mac M1 and I can flash just fine. Can you share a link to the image you're flashing so that I can give it a go?

lukedds commented 1 year ago

https://store.steampowered.com/steamos/download/?ver=steamdeck&snr=

Here you go. I've actually tried this on two M1 macs with Monterey, sorry employer, and the same result on both

dfunckt commented 1 year ago

Seems it has to do with compression -- if you extract the image and try to flash that it pretty fast. Trying to flash the compressed image also works but at an extremely slow rate that is unusable. That said, I'm on a top-of-the-line M1 Max and just uncompressing the image took a couple of minutes so it seems bzip compression is inherently slow to decompress (still a lot faster than Etcher though).

Try flashing the extracted image to get unblocked and I'll see if there's anything we can do to speed up flashing bzips when I get a chance.

lukedds commented 1 year ago

Thanks. Although that doesn't explain why the decompression issue didn't happen on 1.14.3, in fact there was no indication that whilst it was hanging it was even attempting to decompress on 1.18.4.

dfunckt commented 1 year ago

Okay, that’s great to know — we messed a lot with Etcher’s internals since 1.14 in order to allow us to update to newer versions of dependencies so it’s likely we introduced a regression. I’ll try to take a look at this next week.

lukedds commented 1 year ago

No worries, thank you, happy to retest any changes.

aethernet commented 1 year ago

https://github.com/balena-io/etcher/issues/4022

tuiliere commented 1 year ago

Reproduced same problem : 1.18.4 was unable to flash from url (home assistant rasp version : ) on M1 Macbookpro OSX ventura 13.2.1, while 1.14.3 does it fine.

In case... dev console logs for 1.18.4 failure follows :

Failed to load resource: net::ERR_FILE_NOT_FOUND
gui.js:354  _____ _       _
|  ___| |     | |
| |__ | |_ ___| |__   ___ _ __
|  __|| __/ __| '_ \ / _ \ '__|
| |___| || (__| | | |  __/ |
\____/ \__\___|_| |_|\___|_|

Interested in joining the Etcher team?
Drop us a line at join+etcher@balena.io

Version = 1.18.4, Type = dmg
4gui.js:1 Uncaught Error: aborted
    at connResetException (node:internal/errors:691:14)
    at TLSSocket.socketCloseListener (node:_http_client:402:19)
    at TLSSocket.emit (node:events:538:35)
    at node:net:687:12
    at TCP.done (node:_tls_wrap:580:7)
gui.js:37 Elevating command: /Users/jerome/Desktop/balenaEtcher.app/Contents/Frameworks/balenaEtcher Helper (Renderer).app/Contents/MacOS/balenaEtcher Helper (Renderer) /Users/jerome/Desktop/balenaEtcher.app/Contents/Resources/app/generated/child-writer.js
gui.js:37 Error: Error invoking remote method 'disable-screensaver': No handler registered for 'disable-screensaver'
    at o.invoke (node:electron/js2c/renderer_init:57:526)
(anonymous) @ gui.js:37
gui.js:35  0 devices, 0% at 0.00 MB/s (total 0.00 MB/s)  with 0 failed devices
gui.js:37 Successfully connected to IPC server: etcher-server-3664, socket root /var/folders/49/_lp9qx4j1nx06f46gj3_t9780000gn/T/
gui.js:37 Image: https://github.com/home-assistant/operating-system/releases/download/9.5/haos_rpi4-64-9.5.img.xz
gui.js:37 Devices: /dev/disk5
gui.js:37 Auto blockmapping: true
gui.js:37 Decompress first: true
gui.js:37 Terminating IPC server
gui.js:37 Flash results Object
gui.js:37 Error: /Users/jerome/Desktop/balenaEtcher.app/Contents/Resources/app/generated/child-writer.js:1
(()=>{var __webpack_modules__=[,(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:true});const tslib_1=__webpack_require__(2);tslib_1.__exportStar(__webpack_require__(3),exports);tslib_1.__exportStar(__webpack_require__(114),exports);tslib_1.__exportStar(__webpack_require__(122),exports);tslib_1.__exportStar(__webpack_require__(118),exports);tslib_1.__exportStar(__webpack_require__(149),exports);tslib_1.__exportStar(__webpack_require__(179),exports);tslib_1.__exportStar(__webpack_require__(180),exports);tslib_1.__exportStar(__webpack_require__(68),exports);tslib_1.__exportStar(__webpack_require__(181),exports);tslib_1.__exportStar(__webpack_require__(234),exports);tslib_1.__exportStar(__webpack_require__(235),exports);tslib_1.__exportStar(__webpack_require__(28),exports);tslib_1.__exportStar(__webpack_require__(236),exports);tslib_1.__exportStar(__webpack_require__(293),exports);tslib_1.__exportStar(__webpack_require__(69),exports);tslib_1.__exportStar(__webpack_require__(121),exports);tslib_1.__exportStar(__webpack_require__(322),exports);tslib_1.__exportStar(__webpack_require__(323),exports);tslib_1.__exportStar(__webpack_require__(324),exports);tslib_1.__exportStar(__webpack_require__(325),exports);tslib_1.__exportStar(__webpack_require__(259),exports)},(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__);__webpack_require__.d(__webpack_exports__,{__assign:()=>__assign,__asyncDelegator:()=>__asyncDelegator,__asyncGenerator:()=>__asyncGenerator,__asyncValues:()=>__asyncValues,__await:()=>__await,__awaiter:()=>__awaiter,__classPrivateFieldGet:()=>__classPrivateFieldGet,__classPrivateFieldIn:()=>__classPrivateFieldIn,__classPrivateFieldSet:()=>__classPrivateFieldSet,__createBinding:()=>__createBinding,__decorate:()=>__decorate,__exportStar:()=>__exportStar,__extends:()=>__extends,__generator:()=>__generator,__importDefault:()=>__importDefault,__importStar:()=>__importStar,__makeTemplateObject:()=>__makeTemplateObject,__metadata:()=>__metadata,__param:()=>__param,__read:()=>__read,__rest:()=>__rest,__spread:()=>__spread,__spreadArray:()=>__spreadArray,__spreadArrays:()=>__spreadArrays,__values:()=>__values});var extendStatics=function(d,b){extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)if(Object.prototype.hasOwnProperty.call(b,p))d[p]=b[p]};return extendStatics(d,b)};function __extends(d,b){if(typeof b!=="function"&&b!==null)throw new TypeError("Class extends value "+String(b)+" is not a constructor or null");extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __)}var __assign=function(){__assign=Object.assign||function __assign(t){for(var s,i=1,n=arguments.length;i<n;i++){s=arguments[i];for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))t[p]=s[p]}return t};return __assign.apply(this,arguments)};function __rest(s,e){var t={};for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p)&&e.indexOf(p)<0)t[p]=s[p];if(s!=null&&typeof Object.getOwnPropertySymbols==="function")for(var i=0,p=Object.getOwnPropertySymbols(s);i<p.length;i++){if(e.indexOf(p[i])<0&&Object.prototype.propertyIsEnumerable.call(s,p[i]))t[p[i]]=s[p[i]]}return t}function __decorate(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)if(d=decorators[i])r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r;return c>3&&r&&Object.defineProperty(target,key,r),r}function __param(paramIndex,decorator){return function(target,key){decorator(target,key,paramIndex)}}function __metadata(metadataKey,metadataValue){if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(metadataKey,metadataValue)}function __awaiter(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P((function(resolve){resolve(value)}))}return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))}function __generator(thisArg,body){var _={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},f,y,t,g;return g={next:verb(0),throw:verb(1),return:verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(g&&(g=0,op[0]&&(_=0)),_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var __createBinding=Object.create?function(o,m,k,k2){if(k2===undefined)k2=k;var desc=Object.getOwnPropertyDescriptor(m,k);if(!desc||("get"in desc?!m.__esModule:desc.writable||desc.configurable)){desc={enumerable:true,get:function(){return m[k]}}}Object.defineProperty(o,k2,desc)}:function(o,m,k,k2){if(k2===undefined)k2=k;o[k2]=m[k]};function __exportStar(m,o){for(var p in m)if(p!=="default"&&!Object.prototype.hasOwnProperty.call(o,p))__createBinding(o,m,p)}function __values(o){var s=typeof Symbol==="function"&&Symbol.iterator,m=s&&o[s],i=0;if(m)return m.call(o);if(o&&typeof o.length==="number")return{next:function(){if(o&&i>=o.length)o=void 0;return{value:o&&o[i++],done:!o}}};throw new TypeError(s?"Object is not iterable.":"Symbol.iterator is not defined.")}function __read(o,n){var m=typeof Symbol==="function"&&o[Symbol.iterator];if(!m)return o;var i=m.call(o),r,ar=[],e;try{while((n===void 0||n-- >0)&&!(r=i.next()).done)ar.push(r.value)}catch(error){e={error}}finally{try{if(r&&!r.done&&(m=i["return"]))m.call(i)}finally{if(e)throw e.error}}return ar}function __spread(){for(var ar=[],i=0;i<arguments.length;i++)ar=ar.concat(__read(arguments[i]));return ar}function __spreadArrays(){for(var s=0,i=0,il=arguments.length;i<il;i++)s+=arguments[i].length;for(var r=Array(s),k=0,i=0;i<il;i++)for(var a=arguments[i],j=0,jl=a.length;j<jl;j++,k++)r[k]=a[j];return r}function __spreadArray(to,from,pack){if(pack||arguments.length===2)for(var i=0,l=from.length,ar;i<l;i++){if(ar||!(i in from)){if(!ar)ar=Array.prototype.slice.call(from,0,i);ar[i]=from[i]}}return to.concat(ar||Array.prototype.slice.call(from))}function __await(v){return this instanceof __await?(this.v=v,this):new __await(v)}function __asyncGenerator(thisArg,_arguments,generator){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var g=generator.apply(thisArg,_arguments||[]),i,q=[];return i={},verb("next"),verb("throw"),verb("return"),i[Symbol.asyncIterator]=function(){return this},i;function verb(n){if(g[n])i[n]=function(v){return new Promise((function(a,b){q.push([n,v,a,b])>1||resume(n,v)}))}}function resume(n,v){try{step(g[n](v))}catch(e){settle(q[0][3],e)}}function step(r){r.value instanceof __await?Promise.resolve(r.value.v).then(fulfill,reject):settle(q[0][2],r)}function fulfill(value){resume("next
    at Object.createError (gui.js:37:219904)
    at elevateScriptCatalina (gui.js:341:4060)
    at async withTmpFile (gui.js:1:718820)
    at async elevateCommand (gui.js:341:4411)
    at async Server.<anonymous> (gui.js:341:8515)
(anonymous) @ gui.js:37
gui.js:37 Error: Error invoking remote method 'enable-screensaver': No handler registered for 'enable-screensaver'
    at o.invoke (node:electron/js2c/renderer_init:57:526)
(anonymous) @ gui.js:37
ryanburnett commented 1 year ago

Same issue here - trying to flash the Steam Deck OS with balenaEtcher 1.18.4 on macOS Ventura 13.3.

Granted balenaEtcher Full Disk Access and Files & Folders permissions and opened it with:

sudo /Applications/balenaEtcher.app/Contents/MacOS/balenaetcher

Stuck on "Flashing 0%".

ThePragmaticArt commented 1 year ago

Same issue here - trying to flash the Steam Deck OS with balenaEtcher 1.18.4 on macOS Ventura 13.3.

Granted balenaEtcher Full Disk Access and Files & Folders permissions and opened it with:

sudo /Applications/balenaEtcher.app/Contents/MacOS/balenaetcher

Stuck on "Flashing 0%".

Decompress the image before passing it to balenaetcher and you should be good. BalenaEtcher either can't handle the compressed format or is taking it's time decompressing it without any visual indication of it doing so ¯_(ツ)_/¯

hellopahe commented 1 year ago

I had the same issue, tried 1.17.0 and went through, hope this could help you.

DiracSpace commented 11 months ago

I fixed the issue with Balena Etcher not flashing steamdeck-recovery-4.img.bz2 by doing the following steps.

After reading the following reply, I did the following to decompress the bzip2 file.

if you extract the image and try to flash that it pretty fast

➜  Downloads bzip2 -d steamdeck-recovery-4.img.bz2
➜  Downloads ls -la | grep "steamdeck"
.rw-rw-r-- roberto roberto 7.2 GB Thu Sep 14 12:26:51 2023 steamdeck-recovery-4.img

It took a while but it eventually decompressed the file leaving only the image file. I'm not sure if Balena Etcher should be decompressing it automatically (and if you ask me I don't think it should be doing that as the software should only be flashing the image instead of also decompressing) but doing this extra step helps a lot.

image

SplitGemini commented 11 months ago

It was found that when the decompressed image is larger than 5g, etcher will use the method of decompressing and burning at the same time. At this time, the burning will fail (for example, steamdeck.img). However, if the image is smaller than 5g, it will be decompressed first and then burned, and it will not fail.

SplitGemini commented 11 months ago

Are there any relevant updates?

cszwdy commented 6 months ago
  • Etcher version: 1.18.4
  • Operating system and architecture: M1 Mac Monterey 12 to a Sandisk 32Gb USB device
  • Image flashed: steamdeck recovery image
  • What do you think should have happened: should have flashed the steamdeck image to the device
  • What happened: Never gets past 'Flashing 0%', rolled back to 1.14.3 and it works fine
  • Do you see any meaningful error information in the DevTools? Just stays on 0% with an unfathomably long ETA, no actual errors

I created a SteamOS repair image for the SteamDeck OLED and encountered the same issue. I also reverted back to version 1.14.3. It works!

MacBook Pro M1 Pro MacOS Sonoma 14.3.1 128Gb USB device

mbulut-domino commented 1 month ago

Any updates on this?? Also had to downgrade to 1.14.3 but it only works in every full moon...

I don't understand why such serious bug in a generally great product is not prioritized higher? There are numerous duplicates of this issue on the tracker but it seems like they don't get the attention they should. :(

Meanwhile, most of my Windows user colleagues have settled back on Rufus, which might not look that pretty but at least it works.

(Running etcher on Linux btw.)