mirror of
https://github.com/balena-io/etcher.git
synced 2025-07-24 19:56:37 +00:00
617 lines
76 KiB
JSON
617 lines
76 KiB
JSON
{
|
|
"license": "Apache-2.0",
|
|
"blog": [],
|
|
"changelog": [],
|
|
"contributing": "Contributing Guide\n==================\n\nThanks for your interest in contributing to this project! This document aims to\nserve as a friendly guide for making your first contribution.\n\nHigh-level Etcher overview\n--------------------------\n\nMake sure you checkout our [ARCHITECTURE.md][ARCHITECTURE] guide, which aims to\nexplain how all the pieces fit together.\n\nDeveloping\n----------\n\n### Prerequisites\n\n#### Common\n\n- [NodeJS](https://nodejs.org) (at least v6.11)\n- [Python 2.7](https://www.python.org)\n- [jq](https://stedolan.github.io/jq/)\n- [curl](https://curl.haxx.se/)\n- [npm](https://www.npmjs.com/) (version 6.7)\n\n```sh\npip install -r requirements.txt\n```\n\nYou might need to run this with `sudo` or administrator permissions.\n\n#### Windows\n\n- [NSIS v2.51](http://nsis.sourceforge.net/Main_Page) (v3.x won't work)\n- Either one of the following:\n - [Visual C++ 2015 Build Tools](http://landinghub.visualstudio.com/visual-cpp-build-tools) containing standalone compilers, libraries and scripts\n - Install the [windows-build-tools](https://github.com/felixrieseberg/windows-build-tools) via npm with `npm install --global windows-build-tools`\n - [Visual Studio Community 2015](https://www.microsoft.com/en-us/download/details.aspx?id=48146) (free) (other editions, like Professional and Enterprise, should work too)\n **NOTE:** Visual Studio 2015 doesn't install C++ by default. You have to rerun the\n setup, select \"Modify\" and then check `Visual C++ -> Common Tools for Visual\n C++ 2015` (see http://stackoverflow.com/a/31955339)\n- [MinGW](http://www.mingw.org)\n\nYou might need to `npm config set msvs_version 2015` for node-gyp to correctly detect\nthe version of Visual Studio you're using (in this example VS2015).\n\nThe following MinGW packages are required:\n\n- `msys-make`\n- `msys-unzip`\n- `msys-zip`\n- `msys-bash`\n- `msys-coreutils`\n\n#### macOS\n\n- [Xcode](https://developer.apple.com/xcode/)\n\nIt's not enough to have [Xcode Command Line Tools] installed. Xcode must be installed\nas well.\n\n#### Linux\n\n- `libudev-dev` for libusb (install with `sudo apt install libudev-dev` for example)\n\n### Cloning the project\n\n```sh\ngit clone --recursive https://github.com/balena-io/etcher\ncd etcher\n```\n\n### Installing npm dependencies\n\n**NOTE:** Please make use of the following command to install npm dependencies rather\nthan simply running `npm install` given that we need to do extra configuration\nto make sure native dependencies are correctly compiled for Electron, otherwise\nthe application might not run successfully.\n\nIf you're on Windows, **run the command from the _Developer Command Prompt for\nVS2015_**, to ensure all Visual Studio command utilities are available in the\n`%PATH%`.\n\n```sh\nmake electron-develop\n```\n\n### Running the application\n\n#### GUI\n\n```sh\n# Build the GUI\nmake webpack\n# Start Electron\nnpm start\n```\n\nTesting\n-------\n\nTo run the test suite, run the following command:\n\n```sh\nnpm test\n```\n\nGiven the nature of this application, not everything can be unit tested. For\nexample:\n\n- The writing operating on real raw devices.\n- Platform inconsistencies.\n- Style changes.\n- Artwork.\n\nWe encourage our contributors to test the application on as many operating\nsystems as they can before sending a pull request.\n\n*The test suite is run automatically by CI servers when you send a pull\nrequest.*\n\nWe also rely on various `make` targets to perform some common tasks:\n\n- `make lint`: Run the linter.\n- `make sass`: Compile SCSS files.\n\nWe make use of [EditorConfig] to communicate indentation, line endings and\nother text editing default. We encourage you to install the relevant plugin in\nyour text editor of choice to avoid having to fix any issues during the review\nprocess.\n\nUpdating a dependency\n---------------------\n\nGiven we use [npm shrinkwrap][shrinkwrap], we have to take extra steps to make\nsure the `npm-shrinkwrap.json` file gets updated correctly when we update a\ndependency.\n\nUse the following steps to ensure everything goes flawlessly:\n\n- Run `make electron-develop` to ensure you don't have extraneous dependencies\n you might have brought during development, or you are running older\n dependencies because you come from another branch or reference.\n\n- Install the new version of the dependency. For example: `npm install --save\n <package>@<version>`. This will update the `npm-shrinkwrap.json` file.\n\n- Commit *both* `package.json` and `npm-shrinkwrap.json`.\n\nDiffing Binaries\n----------------\n\nBinary files are tagged as \"binary\" in the `.gitattributes` file, but also have\na `diff=hex` tag, which allows you to see hexdump-style diffs for binaries,\nif you add the following to either your global or repository-local git config:\n\n```sh\n$ git config diff.hex.textconv hexdump\n$ git config diff.hex.binary true\n```\n\nAnd global, respectively:\n\n```sh\n$ git config --global diff.hex.textconv hexdump\n$ git config --global diff.hex.binary true\n```\n\nIf you don't have `hexdump` available on your platform,\nyou can try [hxd], which is also a bit faster.\n\nCommit Guidelines\n-----------------\n\nSee [COMMIT-GUIDELINES.md][COMMIT-GUIDELINES] for a thorough guide on how to\nwrite commit messages.\n\nSending a pull request\n----------------------\n\nWhen sending a pull request, consider the following guidelines:\n\n- Write a concise commit message explaining your changes.\n\n- If applies, write more descriptive information in the commit body.\n\n- Mention the operating systems with the corresponding versions in which you\ntested your changes.\n\n- If your change affects the visuals of the application, consider attaching a\nscreenshot.\n\n- Refer to the issue/s your pull request fixes, so they're closed automatically\nwhen your pull request is merged.\n\n- Write a descriptive pull request title.\n\n- Squash commits when possible, for example, when committing review changes.\n\nBefore your pull request can be merged, the following conditions must hold:\n\n- The linter doesn't throw any warning.\n\n- All the tests pass.\n\n- The coding style aligns with the project's convention.\n\n- Your changes are confirmed to be working in recent versions of the operating\nsystems we support.\n\nDon't hesitate to get in touch if you have any questions or need any help!\n\n[ARCHITECTURE]: https://github.com/balena-io/etcher/blob/master/docs/ARCHITECTURE.md\n[COMMIT-GUIDELINES]: https://github.com/balena-io/etcher/blob/master/docs/COMMIT-GUIDELINES.md\n[EditorConfig]: http://editorconfig.org\n[shrinkwrap]: https://docs.npmjs.com/cli/shrinkwrap\n[hxd]: https://github.com/jhermsmeier/hxd\n[Xcode Command Line Tools]: https://developer.apple.com/library/content/technotes/tn2339/_index.html\n",
|
|
"contributors": [
|
|
{
|
|
"username": "zvin",
|
|
"avatar": "https://avatars2.githubusercontent.com/u/180331?v=4"
|
|
},
|
|
{
|
|
"username": "jhermsmeier",
|
|
"avatar": "https://avatars3.githubusercontent.com/u/244907?v=4"
|
|
},
|
|
{
|
|
"username": "thundron",
|
|
"avatar": "https://avatars1.githubusercontent.com/u/5888446?v=4"
|
|
},
|
|
{
|
|
"username": "jviotti",
|
|
"avatar": "https://avatars0.githubusercontent.com/u/2192773?v=4"
|
|
},
|
|
{
|
|
"username": "Shou",
|
|
"avatar": "https://avatars1.githubusercontent.com/u/819413?v=4"
|
|
},
|
|
{
|
|
"username": "lurch",
|
|
"avatar": "https://avatars2.githubusercontent.com/u/476186?v=4"
|
|
},
|
|
{
|
|
"username": "nazrhom",
|
|
"avatar": "https://avatars1.githubusercontent.com/u/6810908?v=4"
|
|
},
|
|
{
|
|
"username": "cpunk2140",
|
|
"avatar": "https://avatars3.githubusercontent.com/u/2217136?v=4"
|
|
},
|
|
{
|
|
"username": "bulldozer-balena[bot]",
|
|
"avatar": "https://avatars0.githubusercontent.com/in/58047?v=4"
|
|
},
|
|
{
|
|
"username": "LucianBuzzo",
|
|
"avatar": "https://avatars0.githubusercontent.com/u/15064535?v=4"
|
|
},
|
|
{
|
|
"username": "sradevski",
|
|
"avatar": "https://avatars1.githubusercontent.com/u/4820812?v=4"
|
|
},
|
|
{
|
|
"username": "dlech",
|
|
"avatar": "https://avatars0.githubusercontent.com/u/963645?v=4"
|
|
},
|
|
{
|
|
"username": "dimitrisnl",
|
|
"avatar": "https://avatars2.githubusercontent.com/u/4951004?v=4"
|
|
},
|
|
{
|
|
"username": "chrisys",
|
|
"avatar": "https://avatars0.githubusercontent.com/u/521698?v=4"
|
|
},
|
|
{
|
|
"username": "Jacalz",
|
|
"avatar": "https://avatars3.githubusercontent.com/u/25466657?v=4"
|
|
},
|
|
{
|
|
"username": "curcuz",
|
|
"avatar": "https://avatars3.githubusercontent.com/u/2338223?v=4"
|
|
},
|
|
{
|
|
"username": "Dark-Passenger",
|
|
"avatar": "https://avatars2.githubusercontent.com/u/3381534?v=4"
|
|
},
|
|
{
|
|
"username": "brownjohnf",
|
|
"avatar": "https://avatars2.githubusercontent.com/u/1001049?v=4"
|
|
},
|
|
{
|
|
"username": "mikesimos",
|
|
"avatar": "https://avatars0.githubusercontent.com/u/3433256?v=4"
|
|
},
|
|
{
|
|
"username": "thgreasi",
|
|
"avatar": "https://avatars0.githubusercontent.com/u/1295829?v=4"
|
|
},
|
|
{
|
|
"username": "WasabiFan",
|
|
"avatar": "https://avatars0.githubusercontent.com/u/3310349?v=4"
|
|
},
|
|
{
|
|
"username": "Lin-Buo-Ren",
|
|
"avatar": "https://avatars3.githubusercontent.com/u/13408130?v=4"
|
|
},
|
|
{
|
|
"username": "amdomanska",
|
|
"avatar": "https://avatars3.githubusercontent.com/u/8298769?v=4"
|
|
},
|
|
{
|
|
"username": "alexandrosm",
|
|
"avatar": "https://avatars1.githubusercontent.com/u/1233928?v=4"
|
|
},
|
|
{
|
|
"username": "aloisklink",
|
|
"avatar": "https://avatars1.githubusercontent.com/u/19716675?v=4"
|
|
},
|
|
{
|
|
"username": "Angeall",
|
|
"avatar": "https://avatars3.githubusercontent.com/u/6820648?v=4"
|
|
},
|
|
{
|
|
"username": "CherryDT",
|
|
"avatar": "https://avatars1.githubusercontent.com/u/6010463?v=4"
|
|
},
|
|
{
|
|
"username": "da2x",
|
|
"avatar": "https://avatars2.githubusercontent.com/u/1102886?v=4"
|
|
},
|
|
{
|
|
"username": "davidlj95",
|
|
"avatar": "https://avatars0.githubusercontent.com/u/8050648?v=4"
|
|
}
|
|
],
|
|
"docs": [
|
|
{
|
|
"filename": "docs/ARCHITECTURE.md",
|
|
"contents": "Etcher Architecture\n===================\n\nThis document aims to serve as a high-level overview of how Etcher works,\nspecially oriented for contributors who want to understand the big picture.\n\nTechnologies\n------------\n\nThis is a non exhaustive list of the major frameworks, libraries, and other\ntechnologies used in Etcher that you should become familiar with:\n\n- [Electron][electron]\n- [NodeJS][nodejs]\n- [Redux][redux]\n- [ImmutableJS][immutablejs]\n- [Sass][sass]\n- [Mocha][mocha]\n- [JSDoc][jsdoc]\n\nModule architecture\n-------------------\n\nInstead of embedding all the functionality required to create a full-featured\nimage writer as a monolithic project, we try to hard to follow the [\"lego block\napproach\"][lego-blocks].\n\nThis has the advantage of allowing other applications to re-use logic we\nimplemented for Etcher in their own project, even for things we didn't expect,\nwhich leads to users benefitting from what we've built, and we benefitting from\nuser's bug reports, suggestions, etc, as an indirect way to make Etcher better.\n\nThe fact that low-level details are scattered around many different modules can\nmake it challenging for a new contributor to wrap their heads around the\nproject as a whole, and get a clear high level view of how things work or where\nto submit their work or bug reports.\n\nThese are the main Etcher components, in a nutshell:\n\n- [Drivelist](https://github.com/balena-io-modules/drivelist)\n\nAs the name implies, this module's duty is to detect the connected drives\nuniformly in all major operating systems, along with valuable metadata, like if\na drive is removable or not, to prevent users from trying to write an image to\na system drive.\n\n- [Etcher](https://github.com/balena-io/etcher)\n\nThis is the *\"main repository\"*, from which you're reading this from, which is\nbasically the front-end and glue for all previously listed projects.\n\nSummary\n-------\n\nWe always welcome contributions to Etcher as well as our documentation. If you\nwant to give back, but feel that your knowledge on how Etcher works is not\nenough to tackle a bug report or feature request, use that as your advantage,\nsince fresh eyes could help unveil things that we take for granted, but should\nbe documented instead!\n\n[lego-blocks]: https://github.com/sindresorhus/ama/issues/10#issuecomment-117766328\n[exit-codes]: https://github.com/balena-io/etcher/blob/master/lib/shared/exit-codes.js\n[gui-dir]: https://github.com/balena-io/etcher/tree/master/lib/gui\n[electron]: http://electron.atom.io\n[nodejs]: https://nodejs.org\n[redux]: http://redux.js.org\n[immutablejs]: http://facebook.github.io/immutable-js/\n[sass]: http://sass-lang.com\n[mocha]: http://mochajs.org\n[jsdoc]: http://usejsdoc.org\n"
|
|
},
|
|
{
|
|
"filename": "docs/COMMIT-GUIDELINES.md",
|
|
"contents": "Commit Guidelines\n=================\n\nWe enforce certain rules on commits with the following goals in mind:\n\n- Be able to reliably auto-generate the `CHANGELOG.md` *without* any human\nintervention.\n- Be able to automatically and correctly increment the semver version number\nbased on what was done since the last release.\n- Be able to get a quick overview of what happened to the project by glancing\nover the commit history.\n- Be able to automatically reference relevant changes from a dependency\nupgrade.\n\nThe guidelines are inspired by the [AngularJS git commit\nguidelines][angular-commit-guidelines].\n\nCommit structure\n----------------\n\nEach commit message consists of a header, a body and a footer. The header has a\nspecial format that includes a type, a scope and a subject.\n\n```\n<type>(<scope>): <subject>\n<BLANK LINE>\n<body>\n<BLANK LINE>\n<footer>\n```\n\nThe subject should not contain more than 70 characters, including the type and\nscope, and the body should be wrapped at 72 characters.\n\nType\n----\n\nMust be one of the following:\n\n- `feat`: A new feature.\n- `fix`: A bug fix.\n- `minifix`: A minimal fix that doesn't warrant an entry in the CHANGELOG.\n- `docs`: Documentation only changes.\n- `style`: Changes that do not affect the meaning of the code (white-space,\nformatting, missing semi-colons, JSDoc annotations, comments, etc).\n- `refactor`: A code change that neither fixes a bug nor adds a feature.\n- `perf`: A code change that improves performance.\n- `test`: Adding missing tests.\n- `chore`: Changes to the build process or auxiliary tools and libraries.\n- `upgrade`: A version upgrade of a project dependency.\n\nScope\n-----\n\nThe scope is required for types that make sense, such as `feat`, `fix`,\n`test`, etc. Certain commit types, such as `chore` might not have a clearly\ndefined scope, in which case its better to omit it.\n\nSubject\n-------\n\nThe subject should contain a short description of the change:\n\n- Use the imperative, present tense.\n- Don't capitalize the first letter.\n- No dot (.) at the end.\n\nFooter\n------\n\nThe footer contains extra information about the commit, such as tags.\n\n**Breaking Changes** should start with the word BREAKING CHANGE: with a space\nor two newlines. The rest of the commit message is then used for this.\n\nTags\n----\n\n### `See: <url>`/`Link: <url>`\n\nThis tag can be used to reference a resource that is relevant to the commit,\nand can be repeated multiple times in the same commit.\n\nResource examples include:\n\n- A link to pull requests.\n- A link to a GitHub issue.\n- A link to a website providing useful information.\n- A commit hash.\n\nIts recommended that you avoid relative URLs, and that you include the whole\ncommit hash to avoid any potential ambiguity issues in the future.\n\nIf the commit type equals `upgrade`, this tag should be present, and should\nlink to the CHANGELOG section of the dependency describing the changes\nintroduced from the previously used version.\n\nExamples:\n\n```\nSee: https://github.com/xxx/yyy/\nSee: 49d89b4acebd80838303b011d30517cd6229fdbe\nLink: https://github.com/xxx/yyy/issues/zzz\n```\n\n### `Closes: <url>`/`Fixes: <url>`\n\nThis tag is used to make GitHub close the referenced issue automatically when\nthe commit is merged.\n\nIts recommended that you provide the absolute URL to the GitHub issue rather\nthan simply writing the ID prefixed by a hash tag for convenience when browsing\nthe commit history outside the GitHub web interface.\n\nA commit can include multiple instances of this tag.\n\nExamples:\n\n```\nCloses: https://github.com/balena-io/etcher/issues/XXX\nFixes: https://github.com/balena-io/etcher/issues/XXX\n```\n\n### `Change-Type: <type>`\n\nThis tag is used to determine the change type that a commit introduces. The\nfollowing types are supported:\n\n- `major`\n- `minor`\n- `patch`\n\nThis tag can be omitted for commits that don't change the application from the\nuser's point of view, such as for refactoring commits.\n\nExamples:\n\n```\nChange-Type: major\nChange-Type: minor\nChange-Type: patch\n```\n\nSee the [Semantic Versioning][semver] specification for a more detailed\nexplanation of the meaning of these types.\n\n### `Changelog-Entry: <message>`\n\nThis tag is used to describe the changes introduced by the commit in a more\nhuman style that would fit the `CHANGELOG.md` better.\n\nIf the commit type is either `fix` or `feat`, the commit will take part in the\nCHANGELOG. If this tag is not defined, then the commit subject will be used\ninstead.\n\nYou explicitly can use this tag to make a commit whose type is not `fix` nor\n`feat` appear in the `CHANGELOG.md`.\n\nSince whatever your write here will be shown *as it is* in the `CHANGELOG.md`,\ntake some time to write a decent entry. Consider the following guidelines:\n\n- Use the imperative, present tense.\n- Capitalize the first letter.\n\nThere is no fixed length limit for the contents of this tag, but always strive\nto make as short as possible without compromising its quality.\n\nExamples:\n\n```\nChangelog-Entry: Fix EPERM errors when flashing to a GPT drive.\n```\n\nComplete examples\n-----------------\n\n```\nfix(GUI): ignore extensions before the first non-compressed extension\n\nCurrently, we extract all the extensions from an image path and report back\nthat the image is invalid if *any* of the extensions is not valid , however\nthis can cause trouble with images including information between dots that are\nnot strictly extensions, for example:\n\n elementaryos-0.3.2-stable-i386.20151209.iso\n\nEtcher will consider `20151209` to be an invalid extension and therefore\nwill prevent such image from being selected at all.\n\nAs a way to allow these corner cases but still make use of our enforced check\ncontrols, the validation routine now only consider extensions starting from the\nfirst non compressed extension.\n\nChange-Type: patch\nChangelog-Entry: Don't interpret image file name information between dots as image extensions.\nFixes: https://github.com/balena-io/etcher/issues/492\n```\n\n***\n\n```\nupgrade: etcher-image-write to v5.0.2\n\nThis version contains a fix to an `EPERM` issue happening to some Windows user,\ntriggered by the `write` system call during the first ~5% of a flash given that\nthe operating system still thinks the drive has a file system.\n\nChange-Type: patch\nChangelog-Entry: Upgrade `etcher-image-write` to v5.0.2.\nLink: https://github.com/balena-io-modules/etcher-image-write/blob/master/CHANGELOG.md#502---2016-06-27\nFixes: https://github.com/balena-io/etcher/issues/531\n```\n\n***\n\n```\nfeat(GUI): implement update notifier functionality\n\nAuto-update functionality is not ready for usage. As a workaround to\nprevent users staying with older versions, we now check for updates at\nstartup, and if the user is not running the latest version, we present a\nmodal informing the user of the availiblity of a new version, and\nprovide a call to action to open the Etcher website in his web browser.\n\nExtra features:\n\n- The user can skip the update, and tell the program to delay the\nnotification for 7 days.\n\nMisc changes:\n\n- Center modal with flexbox, to allow more flexibility on the modal height.\ninteracting with the S3 server.\n- Implement `ManifestBindService`, which now serves as a backend for the\n`manifest-bind` directive to allow the directive's functionality to be\nre-used by other services.\n- Namespace checkbox styles that are specific to the settings page.\n\nChange-Type: minor\nChangelog-Entry: Check for updates and show a modal prompting the user to download the latest version.\nCloses: https://github.com/balena-io/etcher/issues/396\n```\n\n[angular-commit-guidelines]: https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#commit\n[semver]: http://semver.org\n"
|
|
},
|
|
{
|
|
"filename": "docs/CONTRIBUTING.md",
|
|
"contents": "Contributing Guide\n==================\n\nThanks for your interest in contributing to this project! This document aims to\nserve as a friendly guide for making your first contribution.\n\nHigh-level Etcher overview\n--------------------------\n\nMake sure you checkout our [ARCHITECTURE.md][ARCHITECTURE] guide, which aims to\nexplain how all the pieces fit together.\n\nDeveloping\n----------\n\n### Prerequisites\n\n#### Common\n\n- [NodeJS](https://nodejs.org) (at least v6.11)\n- [Python 2.7](https://www.python.org)\n- [jq](https://stedolan.github.io/jq/)\n- [curl](https://curl.haxx.se/)\n- [npm](https://www.npmjs.com/) (version 6.7)\n\n```sh\npip install -r requirements.txt\n```\n\nYou might need to run this with `sudo` or administrator permissions.\n\n#### Windows\n\n- [NSIS v2.51](http://nsis.sourceforge.net/Main_Page) (v3.x won't work)\n- Either one of the following:\n - [Visual C++ 2015 Build Tools](http://landinghub.visualstudio.com/visual-cpp-build-tools) containing standalone compilers, libraries and scripts\n - Install the [windows-build-tools](https://github.com/felixrieseberg/windows-build-tools) via npm with `npm install --global windows-build-tools`\n - [Visual Studio Community 2015](https://www.microsoft.com/en-us/download/details.aspx?id=48146) (free) (other editions, like Professional and Enterprise, should work too)\n **NOTE:** Visual Studio 2015 doesn't install C++ by default. You have to rerun the\n setup, select \"Modify\" and then check `Visual C++ -> Common Tools for Visual\n C++ 2015` (see http://stackoverflow.com/a/31955339)\n- [MinGW](http://www.mingw.org)\n\nYou might need to `npm config set msvs_version 2015` for node-gyp to correctly detect\nthe version of Visual Studio you're using (in this example VS2015).\n\nThe following MinGW packages are required:\n\n- `msys-make`\n- `msys-unzip`\n- `msys-zip`\n- `msys-bash`\n- `msys-coreutils`\n\n#### macOS\n\n- [Xcode](https://developer.apple.com/xcode/)\n\nIt's not enough to have [Xcode Command Line Tools] installed. Xcode must be installed\nas well.\n\n#### Linux\n\n- `libudev-dev` for libusb (install with `sudo apt install libudev-dev` for example)\n\n### Cloning the project\n\n```sh\ngit clone --recursive https://github.com/balena-io/etcher\ncd etcher\n```\n\n### Installing npm dependencies\n\n**NOTE:** Please make use of the following command to install npm dependencies rather\nthan simply running `npm install` given that we need to do extra configuration\nto make sure native dependencies are correctly compiled for Electron, otherwise\nthe application might not run successfully.\n\nIf you're on Windows, **run the command from the _Developer Command Prompt for\nVS2015_**, to ensure all Visual Studio command utilities are available in the\n`%PATH%`.\n\n```sh\nmake electron-develop\n```\n\n### Running the application\n\n#### GUI\n\n```sh\n# Build the GUI\nmake webpack\n# Start Electron\nnpm start\n```\n\nTesting\n-------\n\nTo run the test suite, run the following command:\n\n```sh\nnpm test\n```\n\nGiven the nature of this application, not everything can be unit tested. For\nexample:\n\n- The writing operating on real raw devices.\n- Platform inconsistencies.\n- Style changes.\n- Artwork.\n\nWe encourage our contributors to test the application on as many operating\nsystems as they can before sending a pull request.\n\n*The test suite is run automatically by CI servers when you send a pull\nrequest.*\n\nWe also rely on various `make` targets to perform some common tasks:\n\n- `make lint`: Run the linter.\n- `make sass`: Compile SCSS files.\n\nWe make use of [EditorConfig] to communicate indentation, line endings and\nother text editing default. We encourage you to install the relevant plugin in\nyour text editor of choice to avoid having to fix any issues during the review\nprocess.\n\nUpdating a dependency\n---------------------\n\nGiven we use [npm shrinkwrap][shrinkwrap], we have to take extra steps to make\nsure the `npm-shrinkwrap.json` file gets updated correctly when we update a\ndependency.\n\nUse the following steps to ensure everything goes flawlessly:\n\n- Run `make electron-develop` to ensure you don't have extraneous dependencies\n you might have brought during development, or you are running older\n dependencies because you come from another branch or reference.\n\n- Install the new version of the dependency. For example: `npm install --save\n <package>@<version>`. This will update the `npm-shrinkwrap.json` file.\n\n- Commit *both* `package.json` and `npm-shrinkwrap.json`.\n\nDiffing Binaries\n----------------\n\nBinary files are tagged as \"binary\" in the `.gitattributes` file, but also have\na `diff=hex` tag, which allows you to see hexdump-style diffs for binaries,\nif you add the following to either your global or repository-local git config:\n\n```sh\n$ git config diff.hex.textconv hexdump\n$ git config diff.hex.binary true\n```\n\nAnd global, respectively:\n\n```sh\n$ git config --global diff.hex.textconv hexdump\n$ git config --global diff.hex.binary true\n```\n\nIf you don't have `hexdump` available on your platform,\nyou can try [hxd], which is also a bit faster.\n\nCommit Guidelines\n-----------------\n\nSee [COMMIT-GUIDELINES.md][COMMIT-GUIDELINES] for a thorough guide on how to\nwrite commit messages.\n\nSending a pull request\n----------------------\n\nWhen sending a pull request, consider the following guidelines:\n\n- Write a concise commit message explaining your changes.\n\n- If applies, write more descriptive information in the commit body.\n\n- Mention the operating systems with the corresponding versions in which you\ntested your changes.\n\n- If your change affects the visuals of the application, consider attaching a\nscreenshot.\n\n- Refer to the issue/s your pull request fixes, so they're closed automatically\nwhen your pull request is merged.\n\n- Write a descriptive pull request title.\n\n- Squash commits when possible, for example, when committing review changes.\n\nBefore your pull request can be merged, the following conditions must hold:\n\n- The linter doesn't throw any warning.\n\n- All the tests pass.\n\n- The coding style aligns with the project's convention.\n\n- Your changes are confirmed to be working in recent versions of the operating\nsystems we support.\n\nDon't hesitate to get in touch if you have any questions or need any help!\n\n[ARCHITECTURE]: https://github.com/balena-io/etcher/blob/master/docs/ARCHITECTURE.md\n[COMMIT-GUIDELINES]: https://github.com/balena-io/etcher/blob/master/docs/COMMIT-GUIDELINES.md\n[EditorConfig]: http://editorconfig.org\n[shrinkwrap]: https://docs.npmjs.com/cli/shrinkwrap\n[hxd]: https://github.com/jhermsmeier/hxd\n[Xcode Command Line Tools]: https://developer.apple.com/library/content/technotes/tn2339/_index.html\n"
|
|
},
|
|
{
|
|
"filename": "docs/MAINTAINERS.md",
|
|
"contents": "Maintaining Etcher\n==================\n\nThis document is meant to serve as a guide for maintainers to perform common tasks.\n\nReleasing\n---------\n\n### Release Types\n\n- **snapshot** (default): A continues snapshot of current master, made by the CI services\n- **production**: Full releases\n\n### Flight Plan\n\n#### Preparation\n\n- [Prepare the new version](#preparing-a-new-version)\n- [Generate build artifacts](#generating-binaries) (binaries, archives, etc.)\n- [Draft a release on GitHub](https://github.com/balena-io/etcher/releases)\n - Upload build artifacts to GitHub release draft\n\n#### Testing\n\n- Test the prepared release and build artifacts properly on **all supported operating systems** to prevent regressions that went uncaught by the CI tests (see [MANUAL-TESTING.md](MANUAL-TESTING.md))\n- If regressions or other issues arise, create issues on the repository for each one, and decide whether to fix them in this release (meaning repeating the process up until this point), or to follow up with a patch release\n\n#### Publishing\n\n- [Publish release draft on GitHub](https://github.com/balena-io/etcher/releases)\n- [Post release note to forums](https://forums.balena.io/c/etcher)\n- [Submit Windows binaries to Symantec for whitelisting](#submitting-binaries-to-symantec)\n- [Update the website](https://github.com/balena-io/etcher-homepage)\n- Wait 2-3 hours for analytics (Sentry, Mixpanel) to trickle in and check for elevated error rates, or regressions\n- If regressions arise; pull the release, and release a patched version, else:\n- [Upload deb & rpm packages to Bintray](#uploading-packages-to-bintray)\n- [Upload build artifacts to Amazon S3](#uploading-binaries-to-amazon-s3)\n- Post changelog with `#release-notes` tag on Flowdock\n- If this release packs noteworthy major changes:\n - Write a blog post about it, and / or\n - Write about it to the Etcher mailing list\n\n### Generating binaries\n\n**Environment**\n\nMake sure to set the analytics tokens when generating production release binaries:\n\n```bash\nexport ANALYTICS_SENTRY_TOKEN=\"xxxxxx\"\nexport ANALYTICS_MIXPANEL_TOKEN=\"xxxxxx\"\n```\n\n#### Linux\n\n##### Clean dist folder\n\n**NOTE:** Make sure to adjust the path as necessary (here the Etcher repository has been cloned to `/home/$USER/code/etcher`)\n\n```bash\n./scripts/build/docker/run-command.sh -r x64 -s . -c \"make distclean\"\n```\n\n##### Generating artifacts\n\n```bash\n# x64\n\n# Build Debian packages\n./scripts/build/docker/run-command.sh -r x64 -s . -c \"make electron-develop && make RELEASE_TYPE=production electron-installer-debian\"\n# Build RPM packages\n./scripts/build/docker/run-command.sh -r x64 -s . -c \"make electron-develop && make RELEASE_TYPE=production electron-installer-redhat\"\n# Build AppImages\n./scripts/build/docker/run-command.sh -r x64 -s . -c \"make electron-develop && make RELEASE_TYPE=production electron-installer-appimage\"\n\n# x86\n\n# Build Debian packages\n./scripts/build/docker/run-command.sh -r x86 -s . -c \"make electron-develop && make RELEASE_TYPE=production electron-installer-debian\"\n# Build RPM packages\n./scripts/build/docker/run-command.sh -r x86 -s . -c \"make electron-develop && make RELEASE_TYPE=production electron-installer-redhat\"\n# Build AppImages\n./scripts/build/docker/run-command.sh -r x86 -s . -c \"make electron-develop && make RELEASE_TYPE=production electron-installer-appimage\"\n```\n\n#### Mac OS\n\n**ATTENTION:** For production releases you'll need the code-signing key,\nand set `CSC_NAME` to generate signed binaries on Mac OS.\n\n```bash\nmake electron-develop\n\n# Build the zip\nmake RELEASE_TYPE=production electron-installer-app-zip\n# Build the dmg\nmake RELEASE_TYPE=production electron-installer-dmg\n```\n\n#### Windows\n\n**ATTENTION:** For production releases you'll need the code-signing key,\nand set `CSC_LINK`, and `CSC_KEY_PASSWORD` to generate signed binaries on Windows.\n\n**NOTE:**\n- Keep in mind to also generate artifacts for x86, with `TARGET_ARCH=x86`.\n\n```bash\nmake electron-develop\n\n# Build the Portable version\nmake RELEASE_TYPE=production electron-installer-portable\n# Build the Installer\nmake RELEASE_TYPE=production electron-installer-nsis\n```\n\n### Uploading packages to Bintray\n\n```bash\nexport BINTRAY_USER=\"username@account\"\nexport BINTRAY_API_KEY=\"youruserapikey\"\n```\n\n```bash\n./scripts/publish/bintray.sh -c \"etcher\" -t \"production\" -v \"1.2.1\" -o \"etcher\" -p \"debian\" -y \"debian\" -r \"x64\" -f \"dist/etcher-electron_1.2.1_amd64.deb\"\n./scripts/publish/bintray.sh -c \"etcher\" -t \"production\" -v \"1.2.1\" -o \"etcher\" -p \"debian\" -y \"debian\" -r \"x86\" -f \"dist/etcher-electron_1.2.1_i386.deb\"\n./scripts/publish/bintray.sh -c \"etcher\" -t \"production\" -v \"1.2.1\" -o \"etcher\" -p \"redhat\" -y \"redhat\" -r \"x64\" -f \"dist/etcher-electron-1.2.1.x86_64.rpm\"\n./scripts/publish/bintray.sh -c \"etcher\" -t \"production\" -v \"1.2.1\" -o \"etcher\" -p \"redhat\" -y \"redhat\" -r \"x86\" -f \"dist/etcher-electron-1.2.1.i686.rpm\"\n```\n\n### Uploading binaries to Amazon S3\n\n```bash\nexport S3_KEY=\"...\"\n```\n\n```bash\n./scripts/publish/aws-s3.sh -b \"balena-production-downloads\" -v \"1.2.1\" -p \"etcher\" -f \"dist/<filename>\"\n```\n\n### Dealing with a Problematic Release\n\nThere can be times where a release is accidentally plagued with bugs. If you\nreleased a new version and notice the error rates are higher than normal, then\nrevert the problematic release as soon as possible, until the bugs are fixed.\n\nYou can revert a version by deleting its builds from the S3 bucket and Bintray.\nRefer to the `Makefile` for the up to date information about the S3 bucket\nwhere we push builds to, and get in touch with the balena.io operations team to\nget write access to it.\n\nThe Etcher update notifier dialog and the website only show the a certain\nversion if all the expected files have been uploaded to it, so deleting a\nsingle package or two is enough to bring down the whole version.\n\nUse the following command to delete files from S3:\n\n```bash\naws s3api delete-object --bucket <bucket name> --key <file name>\n```\n\nThe Bintray dashboard provides an easy way to delete a version's files.\n\n\n### Submitting binaries to Symantec\n\n- [Report a Suspected Erroneous Detection](https://submit.symantec.com/false_positive/standard/)\n- Fill out form:\n - **Select Submission Type:** \"Provide a direct download URL\"\n - **Name of the software being detected:** Etcher\n - **Name of detection given by Symantec product:** WS.Reputation.1\n - **Contact name:** Balena.io Ltd\n - **E-mail address:** hello@etcher.io\n - **Are you the creator or distributor of the software in question?** Yes\n"
|
|
},
|
|
{
|
|
"filename": "docs/MANUAL-TESTING.md",
|
|
"contents": "Manual Testing\n==============\n\nThis document describes a high-level script of manual tests to check for. We\nshould aim to replace items on this list with automated Spectron test cases.\n\nImage Selection\n---------------\n\n- [ ] Cancel image selection dialog\n- [ ] Select an unbootable image (without a partition table), and expect a\n sensible warning\n- [ ] Attempt to select a ZIP archive with more than one image\n- [ ] Attempt to select a tar archive (with any compression method)\n- [ ] Change image selection\n- [ ] Select a Windows image, and expect a sensible warning\n\nDrive Selection\n---------------\n\n- [ ] Open the drive selection modal\n- [ ] Switch drive selection\n- [ ] Insert a single drive, and expect auto-selection\n- [ ] Insert more than one drive, and don't expect auto-selection\n- [ ] Insert a locked SD Card and expect a warning\n- [ ] Insert a too small drive and expect a warning\n- [ ] Put an image into a drive and attempt to flash the image to the drive\n that contains it\n- [ ] Attempt to flash a compressed image (for which we can get the\n uncompressed size) into a drive that is big enough to hold the compressed\n image, but not big enough to hold the uncompressed version\n- [ ] Enable \"Unsafe Mode\" and attempt to select a system drive\n- [ ] Enable \"Unsafe Mode\", and if there is only one system drive (and no\n removable ones), don't expect autoselection\n\nImage Support\n-------------\n\nRun the following tests with and without validation enabled:\n\n- [ ] Flash an uncompressed image\n- [ ] Flash a Bzip2 image\n- [ ] Flash a XZ image\n- [ ] Flash a ZIP image\n- [ ] Flash a GZ image\n- [ ] Flash a DMG image\n- [ ] Flash an image whose size is not a multiple of 512 bytes\n- [ ] Flash a compressed image whose size is not a multiple of 512 bytes\n- [ ] Flash an archive whose image size is not a multiple of 512 bytes\n- [ ] Flash an archive image containing a logo\n- [ ] Flash an archive image containing a blockmap file\n- [ ] Flash an archive image containing a manifest metadata file\n\nFlashing Process\n----------------\n\n- [ ] Unplug the drive during flash or validation\n- [ ] Click \"Flash\", cancel elevation dialog, and click \"Flash\" again\n- [ ] Start flashing an image, try to close Etcher, cancel the application\n close warning dialog, and check that Etcher continues to flash the image\n\n### Child Writer\n\n- [ ] Kill the child writer process (i.e. with `SIGINT` or `SIGKILL`), and\n check that the UI reacts appropriately\n- [ ] Close the application while flashing using the window manager close icon\n- [ ] Close the application while flashing using the OS keyboard shortcut\n- [ ] Close the application from the terminal using Ctrl-C while flashing\n- [ ] Force kill the application (using a process monitor tool, etc)\n\nIn all these cases, the child writer process should not remain alive. Note that\nin some systems you need to open your process monitor tool of choice with extra\npermissions to see the elevated child writer process.\n\nGUI\n----\n\n- [ ] Close application from the terminal using Ctrl-C while the application is\n idle\n- [ ] Click footer links that take you to an external website\n- [ ] Attempt to change image or drive selection while flashing\n- [ ] Go to the settings page while flashing and come back\n- [ ] Flash consecutive images without closing the application\n- [ ] Remove the selected drive right before clicking \"Flash\"\n- [ ] Minimize the application\n- [ ] Start the application given no internet connection\n\nSuccess Banner\n--------------\n\n- [ ] Click an external link on the success banner (with and without internet\n connection)\n\nElevation Prompt\n----------------\n\n- [ ] Flash an image as `root`/administrator\n- [ ] Reject elevation prompt\n- [ ] Put incorrect elevation prompt password\n- [ ] Unplug the drive during elevation\n\nUnmounting\n----------\n\n- [ ] Disable unmounting and flash an image\n- [ ] Flash an image with a file system that is readable by the host OS, and\n check that is unmounted correctly\n\nAnalytics\n---------\n\n- [ ] Disable analytics, open DevTools Network pane or a packet sniffer, and\n check that no request is sent\n- [ ] **Disable analytics, refresh application from DevTools (using Cmd-R or\n F5), and check that initial events are not sent to Mixpanel**\n"
|
|
},
|
|
{
|
|
"filename": "docs/PUBLISHING.md",
|
|
"contents": "Publishing Etcher\n=================\n\nThis is a small guide to package and publish Etcher to all supported operating\nsystems.\n\nRelease Types\n-------------\n\nEtcher supports **production** and **snapshot** release types. Each is\npublished to a different S3 bucket, and production release types are code\nsigned, while snapshot release types aren't and include a short git commit-hash\nas a build number. For example, `1.0.0-beta.19` is a production release type,\nwhile `1.0.0-beta.19+531ab82` is a snapshot release type.\n\nIn terms of comparison: `1.0.0-beta.19` (production) < `1.0.0-beta.19+531ab82`\n(snapshot) < `1.0.0-rc.1` (production) < `1.0.0-rc.1+7fde24a` (snapshot) <\n`1.0.0` (production) < `1.0.0+2201e5f` (snapshot). Keep in mind that if you're\nrunning a production release type, you'll only be prompted to update to\nproduction release types, and if you're running a snapshot release type, you'll\nonly be prompted to update to other snapshot release types.\n\nThe build system creates (and publishes) snapshot release types by default, but\nyou can build a specific release type by setting the `RELEASE_TYPE` make\nvariable. For example:\n\n```sh\nmake <target> RELEASE_TYPE=snapshot\nmake <target> RELEASE_TYPE=production\n```\n\nWe can control the version range a specific Etcher version will consider when\nshowing the update notification dialog by tweaking the `updates.semverRange`\nproperty of `package.json`.\n\nUpdate Channels\n---------------\n\nEtcher has a setting to include the unstable update channel. If this option is\nset, Etcher will consider both stable and unstable versions when showing the\nupdate notifier dialog. Unstable versions are the ones that contain a `beta`\npre-release tag. For example:\n\n- Production unstable version: `1.4.0-beta.1`\n- Snapshot unstable version: `1.4.0-beta.1+7fde24a`\n- Production stable version: `1.4.0`\n- Snapshot stable version: `1.4.0+7fde24a`\n\nSigning\n-------\n\n### OS X\n\n1. Get our Apple Developer ID certificate for signing applications distributed\noutside the Mac App Store from the balena.io Apple account.\n\n2. Install the Developer ID certificate to your Mac's Keychain by double\nclicking on the certificate file.\n\nThe application will be signed automatically using this certificate when\npackaging for OS X.\n\n### Windows\n\n1. Get access to our code signing certificate and decryption key as a balena.io\nemployee by asking for it from the relevant people.\n\n2. Place the certificate in the root of the Etcher repository naming it\n`certificate.p12`.\n\nPackaging\n---------\n\nThe resulting installers will be saved to `dist/out`.\n\nRun the following commands:\n\n### OS X\n\n```sh\nmake electron-installer-dmg\nmake electron-installer-app-zip\n```\n\n### GNU/Linux\n\n```sh\nmake electron-installer-appimage\nmake electron-installer-debian\n```\n\n### Windows\n\n```sh\nmake electron-installer-zip\nmake electron-installer-nsis\n```\n\nPublishing to Bintray\n---------------------\n\nWe publish GNU/Linux Debian packages to [Bintray][bintray].\n\nMake sure you set the following environment variables:\n\n- `BINTRAY_USER`\n- `BINTRAY_API_KEY`\n\nRun the following command:\n\n```sh\nmake publish-bintray-debian\n```\n\nPublishing to S3\n----------------\n\n- [AWS CLI][aws-cli]\n\nMake sure you have the [AWS CLI tool][aws-cli] installed and configured to\naccess balena.io's production or snapshot S3 bucket.\n\nRun the following command to publish all files for the current combination of\n_platform_ and _arch_ (building them if necessary):\n\n```sh\nmake publish-aws-s3\n```\n\nAlso add links to each AWS S3 file in [GitHub Releases][github-releases]. See\n[`v1.0.0-beta.17`](https://github.com/balena-io/etcher/releases/tag/v1.0.0-beta.17)\nas an example.\n\nPublishing to Homebrew Cask\n---------------------------\n\n1. Update [`Casks/etcher.rb`][etcher-cask-file] with the new version and\n `sha256`\n\n2. Send a PR with the changes above to\n [`caskroom/homebrew-cask`][homebrew-cask]\n\nAnnouncing\n----------\n\nPost messages to the [Etcher forum][balena-forum-etcher] announcing the new version\nof Etcher, and including the relevant section of the Changelog.\n\n[aws-cli]: https://aws.amazon.com/cli\n[bintray]: https://bintray.com\n[etcher-cask-file]: https://github.com/caskroom/homebrew-cask/blob/master/Casks/balenaetcher.rb\n[homebrew-cask]: https://github.com/caskroom/homebrew-cask\n[balena-forum-etcher]: https://forums.balena.io/c/etcher\n[github-releases]: https://github.com/balena-io/etcher/releases\n"
|
|
},
|
|
{
|
|
"filename": "docs/USER-DOCUMENTATION.md",
|
|
"contents": "Etcher User Documentation\n=========================\n\nThis document contains how-tos and FAQs oriented to Etcher users.\n\nWhy is my drive not bootable?\n-----------------------------\n\nEtcher copies images to drives byte by byte, without doing any transformation\nto the final device, which means images that require special treatment to be\nmade bootable, like Windows images, will not work out of the box. In these\ncases, the general advice is to use software specific to those kind of\nimages, usually available from the image publishers themselves.\n\nImages known to require special treatment:\n\n- Microsoft Windows (use [Windows USB/DVD Download Tool][windows-usb-tool], \n [Rufus][rufus], or [WoeUSB][woeusb]).\n\n- Windows 10 IoT (use the [Windows 10 IoT Core Dashboard][windows-iot-dashboard])\n\nHow can I configure persistent storage?\n---------------------------------------\n\nSome programs, usually oriented at making GNU/Linux live USB drives, include an\noption to set persistent storage. This is currently not supported by Etcher, so\nif you require this functionality, we advise to fallback to\n[UNetbootin][unetbootin].\n\nDeactivate desktop shortcut prompt on GNU/Linux\n-----------------------------------------------\n\nThis is a feature provided by [AppImages][appimage], where the applications\nprompts the user to automatically register a desktop shortcut to easily access\nthe application.\n\nTo deactivate this feature, `touch` any of the files listed below:\n\n- `$HOME/.local/share/appimagekit/no_desktopintegration`\n- `/usr/share/appimagekit/no_desktopintegration`\n- `/etc/appimagekit/no_desktopintegration`\n\nAlternatively, set the `SKIP` environment variable before executing the\nAppImage:\n\n```sh\nSKIP=1 ./Etcher-linux-<arch>.AppImage\n```\n\nFlashing Ubuntu ISOs\n--------------------\n\nUbuntu images (and potentially some other related GNU/Linux distributions) have\na peculiar format that allows the image to boot without any further\nmodification from both CDs and USB drives.\n\nA consequence of this enhancement is that some programs, like `parted` get\nconfused about the drive's format and partition table, printing warnings such\nas:\n\n> /dev/xxx contains GPT signatures, indicating that it has a GPT table.\n> However, it does not have a valid fake msdos partition table, as it should.\n> Perhaps it was corrupted -- possibly by a program that doesn't understand GPT\n> partition tables. Or perhaps you deleted the GPT table, and are now using an\n> msdos partition table. Is this a GPT partition table? Both the primary and\n> backup GPT tables are corrupt. Try making a fresh table, and using Parted's\n> rescue feature to recover partitions.\n\n***\n\n> Warning: The driver descriptor says the physical block size is 2048 bytes,\n> but Linux says it is 512 bytes.\n\nAll these warnings are **safe to ignore**, and your drive should be able to\nboot without any problems.\n\nRefer to [the following message from Ubuntu's mailing\nlist](https://lists.ubuntu.com/archives/ubuntu-devel/2011-June/033495.html) if\nyou want to learn more.\n\nRunning on Wayland\n------------------\n\nElectron is based on Gtk2, which can't run natively on Wayland. Fortunately,\nthe [XWayland Server][xwayland] provides backwards compatibility to run *any* X\nclient on Wayland, including Etcher.\n\nThis usually works out of the box on mainstream GNU/Linux distributions that\nproperly support Wayland. If it doesn't, make sure the `xwayland.so` module is\nbeing loaded by declaring it in your [weston.ini]:\n\n```\n[core]\nmodules=xwayland.so\n```\n\nRuntime GNU/Linux dependencies\n------------------------------\n\nThis entry aims to provide an up to date list of runtime dependencies needed to\nrun Etcher on a GNU/Linux system.\n\n### Electron specific\n\n> See [brightray's gyp file](https://github.com/electron/brightray/blob/master/brightray.gyp#L4)\n\n- gtk+-2.0\n- dbus-1\n- x11\n- xi\n- xcursor\n- xdamage\n- xrandr\n- xcomposite\n- xext\n- xfixes\n- xrender\n- xtst\n- xscrnsaver\n- gconf-2.0\n- gmodule-2.0\n- nss\n\n### Optional dependencies:\n\n- libnotify (for notifications)\n- libspeechd (for text-to-speech)\n\n### Etcher specific:\n\n- liblzma (for xz decompression)\n\nRecovering broken drives\n------------------------\n\nSometimes, things might go wrong, and you end up with a half-flashed drive that\nis unusable by your operating systems, and common graphical tools might even\nrefuse to get it back to a normal state.\n\nTo solve these kinds of problems, we've collected a list of fail-proof methods\nto completely erase your drive in major operating systems.\n\n### Windows\n\nIn Windows, we'll use [diskpart], a command line utility tool that comes\npre-installed in all modern Windows versions.\n\n- Open `cmd.exe` from either the list of all installed applications, or from\n the \"Run...\" dialog usually accessible by pressing Ctrl+X.\n\n- Type `diskpart.exe` and press \"Enter\". You'll be asked to provide\n administrator permissions, and a new prompt window will appear. The following\n commands should be run **in the new window**.\n\n- Run `list disk` to list the available drives. Take note of the number id that\n identifies the drive you want to clean.\n\n- Run `select disk N`, where `N` corresponds to the id from the previous step.\n\n- Run `clean`. This command will completely clean your drive by erasing any\n existent filesystem.\n\n### OS X\n\nRun the following command in `Terminal.app`, replacing `N` by the corresponding\ndisk number, which you can find by running `diskutil list`:\n\n```sh\ndiskutil eraseDisk FAT32 UNTITLED MBRFormat /dev/diskN\n```\n\n### GNU/Linux\n\nMake sure the drive is unmounted (`umount /dev/xxx`), and run the following\ncommand as `root`, replacing `xxx` by your actual device path:\n\n```sh\ndd if=/dev/zero of=/dev/xxx bs=512 count=1 conv=notrunc\n```\n\n\"No polkit authentication agent found\" error in GNU/Linux\n----------------------------------------------------------\n\nEtcher requires an available [polkit authentication\nagent](https://wiki.archlinux.org/index.php/Polkit#Authentication_agents) in\nyour system in order to show a secure password prompt dialog to perform\nelevation. Make sure you have one installed for the desktop environment of your\nchoice.\n\nRunning in older macOS versions\n-------------------------------\n\nEtcher GUI is based on the [Electron][electron] framework, [which only supports\nmacOS 10.10 (Yosemite) and newer versions][electron-supported-platforms].\n\n[balena.io]: https://balena.io\n[appimage]: http://appimage.org\n[xwayland]: https://wayland.freedesktop.org/xserver.html\n[weston.ini]: http://manpages.ubuntu.com/manpages/wily/man5/weston.ini.5.html\n[diskpart]: https://technet.microsoft.com/en-us/library/cc770877(v=ws.11).aspx\n[electron]: https://electronjs.org/\n[electron-supported-platforms]: https://electronjs.org/docs/tutorial/support#supported-platforms\n[publishing]: https://github.com/balena-io/etcher/blob/master/docs/PUBLISHING.md\n[windows-usb-tool]: https://www.microsoft.com/en-us/download/windows-usb-dvd-download-tool\n[rufus]: https://rufus.akeo.ie\n[unetbootin]: https://unetbootin.github.io\n[windows-iot-dashboard]: https://developer.microsoft.com/en-us/windows/iot/downloads\n[woeusb]: https://github.com/slacka/WoeUSB\n"
|
|
}
|
|
],
|
|
"security": null,
|
|
"faq": [
|
|
{
|
|
"title": "Why is my drive not bootable?",
|
|
"content": [
|
|
[
|
|
"para",
|
|
"Etcher copies images to drives byte by byte, without doing any transformation to the final device, which means images that require special treatment to be made bootable, like Windows images, will not work out of the box. In these cases, the general advice is to use software specific to those kind of images, usually available from the image publishers themselves. You can find more information ",
|
|
[
|
|
"link",
|
|
{
|
|
"href": "https://github.com/balena-io/etcher/blob/master/docs/USER-DOCUMENTATION.md#why-is-my-drive-not-bootable"
|
|
},
|
|
"here"
|
|
],
|
|
"."
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"title": "How can I configure persistent storage?",
|
|
"content": [
|
|
[
|
|
"para",
|
|
"Some programs, usually oriented at making GNU/Linux live USB drives, include an option to set persistent storage. This is currently not supported by Etcher, so if you require this functionality, we advise to fallback to ",
|
|
[
|
|
"link",
|
|
{
|
|
"href": "https://unetbootin.github.io/"
|
|
},
|
|
"UNetbootin"
|
|
],
|
|
"."
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"title": "How do I flash Ubuntu ISOs",
|
|
"content": [
|
|
[
|
|
"para",
|
|
"Ubuntu images (and potentially some other related GNU/Linux distributions) have a peculiar format that allows the image to boot without any further modification from both CDs and USB drives.\nA consequence of this enhancement is that some programs, like parted get confused about the drive's format and partition table, printing warnings such as:"
|
|
],
|
|
[
|
|
"blockquote",
|
|
[
|
|
"para",
|
|
"/dev/xxx contains GPT signatures, indicating that it has a GPT table. However, it does not have a valid fake msdos partition table, as it should. Perhaps it was corrupted -- possibly by a program that doesn't understand GPT partition tables. Or perhaps you deleted the GPT table, and are now using an msdos partition table. Is this a GPT partition table? Both the primary and backup GPT tables are corrupt. Try making a fresh table, and using Parted's rescue feature to recover partitions."
|
|
],
|
|
[
|
|
"para",
|
|
"Warning: The driver descriptor says the physical block size is 2048 bytes, but Linux says it is 512 bytes."
|
|
]
|
|
],
|
|
[
|
|
"para",
|
|
"All these warnings are safe to ignore, and your drive should be able to boot without any problems.\nRefer to ",
|
|
[
|
|
"link",
|
|
{
|
|
"href": "https://lists.ubuntu.com/archives/ubuntu-devel/2011-June/033495.html"
|
|
},
|
|
"the following message from Ubuntu's mailing list"
|
|
],
|
|
" if you want to learn more."
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"title": "How do I run Etcher on Wayland?",
|
|
"content": [
|
|
[
|
|
"para",
|
|
"The XWayland Server provides backwards compatibility to run any X client on Wayland, including Etcher.\nThis usually works out of the box on mainstream GNU/Linux distributions that properly support Wayland. If it doesn't, make sure the xwayland.so module is being loaded by declaring it in your ",
|
|
[
|
|
"link",
|
|
{
|
|
"href": "http://manpages.ubuntu.com/manpages/wily/man5/weston.ini.5.html"
|
|
},
|
|
"weston.ini"
|
|
],
|
|
":"
|
|
],
|
|
[
|
|
"para",
|
|
[
|
|
"inlinecode",
|
|
"\n[core]\nmodules=xwayland.so\n"
|
|
]
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"title": "What are the runtime GNU/LINUX dependencies?",
|
|
"content": [
|
|
[
|
|
"para",
|
|
[
|
|
"link",
|
|
{
|
|
"href": "https://github.com/balena-io/etcher/blob/master/docs/USER-DOCUMENTATION.md#runtime-gnulinux-dependencies"
|
|
},
|
|
"This entry"
|
|
],
|
|
" aims to provide an up to date list of runtime dependencies needed to run Etcher on a GNU/Linux system."
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"title": "How can I recover the broken drive?",
|
|
"content": [
|
|
[
|
|
"para",
|
|
"Sometimes, things might go wrong, and you end up with a half-flashed drive that is unusable by your operating systems, and common graphical tools might even refuse to get it back to a normal state.\nTo solve these kinds of problems, we've collected ",
|
|
[
|
|
"link",
|
|
{
|
|
"href": "https://github.com/balena-io/etcher/blob/master/docs/USER-DOCUMENTATION.md#recovering-broken-drives"
|
|
},
|
|
"a list of fail-proof methods"
|
|
],
|
|
" to completely erase your drive in major operating systems."
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"title": "I receive ”No polkit authentication agent found” error in GNU/Linux",
|
|
"content": [
|
|
[
|
|
"para",
|
|
"Etcher requires an available ",
|
|
[
|
|
"link",
|
|
{
|
|
"href": "https://wiki.archlinux.org/index.php/Polkit#Authentication_agents"
|
|
},
|
|
"polkit authentication agent"
|
|
],
|
|
" in your system in order to show a secure password prompt dialog to perform elevation. Make sure you have one installed for the desktop environment of your choice."
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"title": "May I run Etcher in older macOS versions?",
|
|
"content": [
|
|
[
|
|
"para",
|
|
"Etcher GUI is based on the ",
|
|
[
|
|
"link",
|
|
{
|
|
"href": "http://electron.atom.io/"
|
|
},
|
|
"Electron"
|
|
],
|
|
" framework, ",
|
|
[
|
|
"link",
|
|
{
|
|
"href": "https://github.com/electron/electron/blob/master/docs/tutorial/support.md#supported-platforms"
|
|
},
|
|
"which only supports macOS 10.9 and newer versions"
|
|
],
|
|
"."
|
|
]
|
|
]
|
|
}
|
|
],
|
|
"codeOfConduct": null,
|
|
"architecture": "Etcher Architecture\n===================\n\nThis document aims to serve as a high-level overview of how Etcher works,\nspecially oriented for contributors who want to understand the big picture.\n\nTechnologies\n------------\n\nThis is a non exhaustive list of the major frameworks, libraries, and other\ntechnologies used in Etcher that you should become familiar with:\n\n- [Electron][electron]\n- [NodeJS][nodejs]\n- [Redux][redux]\n- [ImmutableJS][immutablejs]\n- [Sass][sass]\n- [Mocha][mocha]\n- [JSDoc][jsdoc]\n\nModule architecture\n-------------------\n\nInstead of embedding all the functionality required to create a full-featured\nimage writer as a monolithic project, we try to hard to follow the [\"lego block\napproach\"][lego-blocks].\n\nThis has the advantage of allowing other applications to re-use logic we\nimplemented for Etcher in their own project, even for things we didn't expect,\nwhich leads to users benefitting from what we've built, and we benefitting from\nuser's bug reports, suggestions, etc, as an indirect way to make Etcher better.\n\nThe fact that low-level details are scattered around many different modules can\nmake it challenging for a new contributor to wrap their heads around the\nproject as a whole, and get a clear high level view of how things work or where\nto submit their work or bug reports.\n\nThese are the main Etcher components, in a nutshell:\n\n- [Drivelist](https://github.com/balena-io-modules/drivelist)\n\nAs the name implies, this module's duty is to detect the connected drives\nuniformly in all major operating systems, along with valuable metadata, like if\na drive is removable or not, to prevent users from trying to write an image to\na system drive.\n\n- [Etcher](https://github.com/balena-io/etcher)\n\nThis is the *\"main repository\"*, from which you're reading this from, which is\nbasically the front-end and glue for all previously listed projects.\n\nSummary\n-------\n\nWe always welcome contributions to Etcher as well as our documentation. If you\nwant to give back, but feel that your knowledge on how Etcher works is not\nenough to tackle a bug report or feature request, use that as your advantage,\nsince fresh eyes could help unveil things that we take for granted, but should\nbe documented instead!\n\n[lego-blocks]: https://github.com/sindresorhus/ama/issues/10#issuecomment-117766328\n[exit-codes]: https://github.com/balena-io/etcher/blob/master/lib/shared/exit-codes.js\n[gui-dir]: https://github.com/balena-io/etcher/tree/master/lib/gui\n[electron]: http://electron.atom.io\n[nodejs]: https://nodejs.org\n[redux]: http://redux.js.org\n[immutablejs]: http://facebook.github.io/immutable-js/\n[sass]: http://sass-lang.com\n[mocha]: http://mochajs.org\n[jsdoc]: http://usejsdoc.org\n",
|
|
"maintainers": [
|
|
"@thundron",
|
|
"@zvin",
|
|
"@jviotti",
|
|
"@nazrhom"
|
|
],
|
|
"readme": "# Etcher\n\n> Flash OS images to SD cards & USB drives, safely and easily.\n\nEtcher is a powerful OS image flasher built with web technologies to ensure\nflashing an SDCard or USB drive is a pleasant and safe experience. It protects\nyou from accidentally writing to your hard-drives, ensures every byte of data\nwas written correctly and much more. It can also flash directly Raspberry Pi devices that support the usbboot protocol\n\n[](https://balena.io/etcher)\n[](https://github.com/balena-io/etcher/blob/master/LICENSE)\n[](https://david-dm.org/balena-io/etcher)\n[](https://forums.balena.io/c/etcher)\n\n***\n\n[**Download**][etcher] | [**Support**][SUPPORT] | [**Documentation**][USER-DOCUMENTATION] | [**Contributing**][CONTRIBUTING] | [**Roadmap**][milestones]\n\n## Supported Operating Systems\n\n- Linux (most distros)\n- macOS 10.10 (Yosemite) and later\n- Microsoft Windows 7 and later\n\nNote that Etcher will run on any platform officially supported by\n[Electron][electron]. Read more in their\n[documentation][electron-supported-platforms].\n\n## Installers\n\nRefer to the [downloads page][etcher] for the latest pre-made\ninstallers for all supported operating systems.\n\n#### Debian and Ubuntu based Package Repository (GNU/Linux x86/x64)\n\n1. Add Etcher debian repository:\n\n ```sh\n echo \"deb https://deb.etcher.io stable etcher\" | sudo tee /etc/apt/sources.list.d/balena-etcher.list\n ```\n\n2. Trust Bintray.com's GPG key:\n\n ```sh\n sudo apt-key adv --keyserver hkps://keyserver.ubuntu.com:443 --recv-keys 379CE192D401AB61\n ```\n\n3. Update and install:\n\n ```sh\n sudo apt-get update\n sudo apt-get install balena-etcher-electron\n ```\n\n##### Uninstall\n\n```sh\nsudo apt-get remove balena-etcher-electron\nsudo rm /etc/apt/sources.list.d/balena-etcher.list\nsudo apt-get update\n```\n\n##### OpenSUSE LEAP & Tumbleweed install\n\n```sh\nsudo zypper ar https://balena.io/etcher/static/etcher-rpm.repo\nsudo zypper ref\nsudo zypper in balena-etcher-electron\n```\n\n##### Uninstall\n\n```sh\nsudo zypper rm balena-etcher-electron\n```\n\n#### Redhat (RHEL) and Fedora based Package Repository (GNU/Linux x86/x64)\n\n1. Add Etcher rpm repository:\n\n ```sh\n sudo wget https://balena.io/etcher/static/etcher-rpm.repo -O /etc/yum.repos.d/etcher-rpm.repo\n ```\n\n2. Update and install:\n\n ```sh\n sudo yum install -y balena-etcher-electron\n ```\n or\n ```sh\n sudo dnf install -y balena-etcher-electron\n ```\n\n##### Uninstall\n\n```sh\nsudo yum remove -y balena-etcher-electron\nsudo rm /etc/yum.repos.d/etcher-rpm.repo\nsudo yum clean all\nsudo yum makecache fast\n```\nor\n```sh\nsudo dnf remove -y balena-etcher-electron\nsudo rm /etc/yum.repos.d/etcher-rpm.repo\nsudo dnf clean all\nsudo dnf makecache\n```\n\n#### Solus (GNU/Linux x64)\n\n```sh\nsudo eopkg it etcher\n```\n\n##### Uninstall\n\n```sh\nsudo eopkg rm etcher\n```\n\n#### Arch Linux / Manjaro (GNU/Linux x64)\n\nEtcher is offered through the Arch User Repository and can be installed on both Manjaro and Arch systems. You can compile it from the source code in this repository using [`balena-etcher`](https://aur.archlinux.org/packages/balena-etcher/). The following example uses a common AUR helper to install the latest release:\n\n\n```sh\nyay -S balena-etcher\n```\n\n##### Uninstall\n\n```sh\nyay -R balena-etcher\n```\n\n#### Brew Cask (macOS)\n\nNote that the Etcher Cask has to be updated manually to point to new versions,\nso it might not refer to the latest version immediately after an Etcher\nrelease.\n\n```sh\nbrew cask install balenaetcher\n```\n\n##### Uninstall\n\n```sh\nbrew cask uninstall balenaetcher\n```\n\n#### Chocolatey (Windows)\n\nThis package is maintained by [@majkinetor](https://github.com/majkinetor), and\nis kept up to date automatically.\n\n```sh\nchoco install etcher\n```\n\n##### Uninstall\n\n```sh\nchoco uninstall etcher\n```\n\n## Support\n\nIf you're having any problem, please [raise an issue][newissue] on GitHub and\nthe balena.io team will be happy to help.\n\n## License\n\nEtcher is free software, and may be redistributed under the terms specified in\nthe [license].\n\n[etcher]: https://balena.io/etcher\n[electron]: https://electronjs.org/\n[electron-supported-platforms]: https://electronjs.org/docs/tutorial/support#supported-platforms\n[SUPPORT]: https://github.com/balena-io/etcher/blob/master/SUPPORT.md\n[CONTRIBUTING]: https://github.com/balena-io/etcher/blob/master/docs/CONTRIBUTING.md\n[USER-DOCUMENTATION]: https://github.com/balena-io/etcher/blob/master/docs/USER-DOCUMENTATION.md\n[milestones]: https://github.com/balena-io/etcher/milestones\n[newissue]: https://github.com/balena-io/etcher/issues/new\n[license]: https://github.com/balena-io/etcher/blob/master/LICENSE\n",
|
|
"highlights": null,
|
|
"installationSteps": null,
|
|
"examples": null,
|
|
"motivation": null,
|
|
"hardwareRequired": null,
|
|
"softwareRequired": null,
|
|
"introduction": null,
|
|
"name": "etcher",
|
|
"public": true,
|
|
"fork": false,
|
|
"description": "Flash OS images to SD cards & USB drives, safely and easily.",
|
|
"stars": 18471,
|
|
"homepage": "https://etcher.io",
|
|
"repositoryUrl": "https://github.com/balena-io/etcher.git",
|
|
"active": true,
|
|
"owner": {
|
|
"avatar": "https://avatars1.githubusercontent.com/u/6157842?v=4",
|
|
"handle": "balena-io",
|
|
"url": "https://github.com/balena-io",
|
|
"type": "Organization"
|
|
},
|
|
"dependencies": [],
|
|
"lastCommitDate": "2020-08-21T13:01:18Z",
|
|
"latestRelease": {
|
|
"tagName": "v1.5.104",
|
|
"asssets": [
|
|
{
|
|
"name": "balena-etcher-electron-1.5.104-linux-ia32.zip",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/balena-etcher-electron-1.5.104-linux-ia32.zip"
|
|
},
|
|
{
|
|
"name": "balena-etcher-electron-1.5.104-linux-x64.zip",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/balena-etcher-electron-1.5.104-linux-x64.zip"
|
|
},
|
|
{
|
|
"name": "balena-etcher-electron-1.5.104.i686.rpm",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/balena-etcher-electron-1.5.104.i686.rpm"
|
|
},
|
|
{
|
|
"name": "balena-etcher-electron-1.5.104.x86_64.rpm",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/balena-etcher-electron-1.5.104.x86_64.rpm"
|
|
},
|
|
{
|
|
"name": "balena-etcher-electron_1.5.104_amd64.deb",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/balena-etcher-electron_1.5.104_amd64.deb"
|
|
},
|
|
{
|
|
"name": "balena-etcher-electron_1.5.104_i386.deb",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/balena-etcher-electron_1.5.104_i386.deb"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-1.5.104-ia32.AppImage",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/balenaEtcher-1.5.104-ia32.AppImage"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-1.5.104-mac.zip",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/balenaEtcher-1.5.104-mac.zip"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-1.5.104-x64.AppImage",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/balenaEtcher-1.5.104-x64.AppImage"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-1.5.104.dmg",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/balenaEtcher-1.5.104.dmg"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-1.5.104.dmg.blockmap",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/balenaEtcher-1.5.104.dmg.blockmap"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-Portable-1.5.104.exe",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/balenaEtcher-Portable-1.5.104.exe"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-Setup-1.5.104.exe",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/balenaEtcher-Setup-1.5.104.exe"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-Setup-1.5.104.exe.blockmap",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/balenaEtcher-Setup-1.5.104.exe.blockmap"
|
|
},
|
|
{
|
|
"name": "builder-effective-config.yaml",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/builder-effective-config.yaml"
|
|
},
|
|
{
|
|
"name": "latest-linux-ia32.yml",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/latest-linux-ia32.yml"
|
|
},
|
|
{
|
|
"name": "latest-linux.yml",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/latest-linux.yml"
|
|
},
|
|
{
|
|
"name": "latest-mac.yml",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/latest-mac.yml"
|
|
},
|
|
{
|
|
"name": "latest.yml",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.104/latest.yml"
|
|
}
|
|
]
|
|
},
|
|
"latestPreRelease": {
|
|
"tagName": "v1.5.26",
|
|
"assets": [
|
|
{
|
|
"name": "balena-etcher-electron_1.5.26_amd64.deb",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balena-etcher-electron_1.5.26_amd64.deb"
|
|
},
|
|
{
|
|
"name": "balena-etcher-electron-1.5.26.x86_64.rpm",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balena-etcher-electron-1.5.26.x86_64.rpm"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-1.5.26-x64.AppImage",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balenaEtcher-1.5.26-x64.AppImage"
|
|
},
|
|
{
|
|
"name": "latest-linux.yml",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/latest-linux.yml"
|
|
},
|
|
{
|
|
"name": "balena-etcher-electron-1.5.26-linux-x64.zip",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balena-etcher-electron-1.5.26-linux-x64.zip"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-Portable-1.5.26-x64.exe",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balenaEtcher-Portable-1.5.26-x64.exe"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-Setup-1.5.26-x64.exe",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balenaEtcher-Setup-1.5.26-x64.exe"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-Setup-1.5.26-x64.exe.blockmap",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balenaEtcher-Setup-1.5.26-x64.exe.blockmap"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-1.5.26-mac.zip",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balenaEtcher-1.5.26-mac.zip"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-1.5.26.dmg",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balenaEtcher-1.5.26.dmg"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-1.5.26.dmg.blockmap",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balenaEtcher-1.5.26.dmg.blockmap"
|
|
},
|
|
{
|
|
"name": "latest-mac.yml",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/latest-mac.yml"
|
|
},
|
|
{
|
|
"name": "builder-effective-config.yaml",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/builder-effective-config.yaml"
|
|
},
|
|
{
|
|
"name": "balena-etcher-electron_1.5.26_i386.deb",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balena-etcher-electron_1.5.26_i386.deb"
|
|
},
|
|
{
|
|
"name": "balena-etcher-electron-1.5.26.i686.rpm",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balena-etcher-electron-1.5.26.i686.rpm"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-1.5.26-ia32.AppImage",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balenaEtcher-1.5.26-ia32.AppImage"
|
|
},
|
|
{
|
|
"name": "latest-linux-ia32.yml",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/latest-linux-ia32.yml"
|
|
},
|
|
{
|
|
"name": "balena-etcher-electron-1.5.26-linux-ia32.zip",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balena-etcher-electron-1.5.26-linux-ia32.zip"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-Portable-1.5.26-x86.exe",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balenaEtcher-Portable-1.5.26-x86.exe"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-Setup-1.5.26-x86.exe",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balenaEtcher-Setup-1.5.26-x86.exe"
|
|
},
|
|
{
|
|
"name": "balenaEtcher-Setup-1.5.26-x86.exe.blockmap",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/balenaEtcher-Setup-1.5.26-x86.exe.blockmap"
|
|
},
|
|
{
|
|
"name": "latest.yml",
|
|
"downloadUrl": "https://github.com/balena-io/etcher/releases/download/v1.5.26/latest.yml"
|
|
}
|
|
]
|
|
},
|
|
"openIssues": {
|
|
"numberOfIssues": 257,
|
|
"latestIssues": [
|
|
{
|
|
"title": "MacOS v1.5.103 - settings cannot be changed",
|
|
"url": "https://github.com/balena-io/etcher/issues/3279"
|
|
},
|
|
{
|
|
"title": "Etcher not showing up on macOS Catalina",
|
|
"url": "https://github.com/balena-io/etcher/issues/3278"
|
|
},
|
|
{
|
|
"title": "Sandisk SDHC - Unknown error",
|
|
"url": "https://github.com/balena-io/etcher/issues/3274"
|
|
},
|
|
{
|
|
"title": "Add clone drive",
|
|
"url": "https://github.com/balena-io/etcher/pull/3273"
|
|
},
|
|
{
|
|
"title": "Unable to package using electron-Build",
|
|
"url": "https://github.com/balena-io/etcher/issues/3269"
|
|
},
|
|
{
|
|
"title": "Etcher renders drive unwritable, to a point",
|
|
"url": "https://github.com/balena-io/etcher/issues/3268"
|
|
},
|
|
{
|
|
"title": "Does not work on Linux Mint 20",
|
|
"url": "https://github.com/balena-io/etcher/issues/3267"
|
|
},
|
|
{
|
|
"title": "AppImage problem on debian (with a workaround)",
|
|
"url": "https://github.com/balena-io/etcher/issues/3263"
|
|
},
|
|
{
|
|
"title": "Tooltip for image and target names is using incorrect font",
|
|
"url": "https://github.com/balena-io/etcher/issues/3260"
|
|
},
|
|
{
|
|
"title": "Cannot drag application window by header on 'flash finished' screen",
|
|
"url": "https://github.com/balena-io/etcher/issues/3256"
|
|
},
|
|
{
|
|
"title": "Command failed error when flashing an image",
|
|
"url": "https://github.com/balena-io/etcher/issues/3248"
|
|
},
|
|
{
|
|
"title": "Etcher should have FAQ entries for Windows displayed if a burn fails",
|
|
"url": "https://github.com/balena-io/etcher/issues/3245"
|
|
},
|
|
{
|
|
"title": "Etcher corrupting SD Cards that are R/O due to Bitlocker. Etcher errormsg: \"The writer process ended unexpectedly\"",
|
|
"url": "https://github.com/balena-io/etcher/issues/3241"
|
|
},
|
|
{
|
|
"title": "The elevated process died unexpectedly",
|
|
"url": "https://github.com/balena-io/etcher/issues/3239"
|
|
},
|
|
{
|
|
"title": "Document or automate recovery process for a USB drive in Windows",
|
|
"url": "https://github.com/balena-io/etcher/issues/3238"
|
|
},
|
|
{
|
|
"title": "Add abilty to reformat disks. ",
|
|
"url": "https://github.com/balena-io/etcher/issues/3236"
|
|
},
|
|
{
|
|
"title": "Windows 10: Write fails but Windows popup notification says it was successful",
|
|
"url": "https://github.com/balena-io/etcher/issues/3235"
|
|
},
|
|
{
|
|
"title": "Etcher Issues with Windows Disk Management after imagining",
|
|
"url": "https://github.com/balena-io/etcher/issues/3234"
|
|
},
|
|
{
|
|
"title": "After the computer had gone to sleep, the software went blank.",
|
|
"url": "https://github.com/balena-io/etcher/issues/3231"
|
|
},
|
|
{
|
|
"title": "`gz` file (from OMV backup) can't be used as input image",
|
|
"url": "https://github.com/balena-io/etcher/issues/3230"
|
|
}
|
|
]
|
|
},
|
|
"version": "1.5.104",
|
|
"screenshot": null,
|
|
"logo": null
|
|
}
|