CityBEM-CityLayers-SaeedRay.../node_modules/electron-installer-debian/README.md

457 lines
14 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

![Electron Installer for Debian](resources/logo.png)
# electron-installer-debian [![Version](https://img.shields.io/npm/v/electron-installer-debian.svg)](https://www.npmjs.com/package/electron-installer-debian) [![Build Status](https://img.shields.io/travis/electron-userland/electron-installer-debian.svg)](http://travis-ci.org/electron-userland/electron-installer-debian)
> Create a Debian package for your Electron app.
----
[Usage](#usage) |
[Options](#options) |
[Release Notes](https://github.com/electron-userland/electron-installer-debian/blob/master/NEWS.md) |
[License](https://github.com/electron-userland/electron-installer-debian/blob/master/LICENSE) |
[Code of Conduct](https://github.com/electron-userland/electron-installer-debian/blob/master/CODE_OF_CONDUCT.md) |
[Support](https://github.com/electron-userland/electron-installer-debian/blob/master/SUPPORT.md)
## Requirements
This tool requires Node 10 or greater, `fakeroot`, and `dpkg` to build the `.deb` package.
I'd recommend building your packages on your target platform, but if you insist on using Mac OS X, you can install these tools through [Homebrew](http://brew.sh/):
```
$ brew install fakeroot dpkg
```
## Installation
For use from command-line:
```
$ npm install -g electron-installer-debian
```
For use in npm scripts or programmatically:
```
$ npm install --save-dev electron-installer-debian
```
## Usage
Say your Electron app lives in `path/to/app`, and has a structure like this:
```
.
├── LICENSE
├── README.md
├── node_modules
│   ├── electron-packager
│   └── electron
├── package.json
├── resources
│   ├── Icon.png
│   ├── IconTemplate.png
│   └── IconTemplate@2x.png
└── src
├── index.js
├── main
│   └── index.js
└── renderer
├── index.html
└── index.js
```
You now run `electron-packager` to build the app for Debian:
```
$ electron-packager . app --platform linux --arch x64 --out dist/
```
And you end up with something like this in your `dist` folder:
```
.
└── dist
   └── app-linux-x64
   ├── LICENSE
   ├── LICENSES.chromium.html
   ├── content_shell.pak
   ├── app
   ├── icudtl.dat
   ├── libgcrypt.so.11
   ├── libnode.so
   ├── locales
   ├── natives_blob.bin
   ├── resources
   ├── snapshot_blob.bin
   └── version
```
How do you turn that into a Debian package that your users can install?
### Command-Line
If you want to run `electron-installer-debian` straight from the command-line, install the package globally:
```
$ npm install -g electron-installer-debian
```
And point it to your built app:
```
$ electron-installer-debian --src dist/app-linux-x64/ --dest dist/installers/ --arch amd64
```
You'll end up with the package at `dist/installers/app_0.0.1_amd64.deb`.
### Scripts
If you want to run `electron-installer-debian` through npm, install the package locally:
```
$ npm install --save-dev electron-installer-debian
```
Edit the `scripts` section of your `package.json`:
```json
{
"name": "app",
"description": "An awesome app!",
"version": "0.0.1",
"scripts": {
"start": "electron .",
"build": "electron-packager . app --platform linux --arch x64 --out dist/",
"deb64": "electron-installer-debian --src dist/app-linux-x64/ --dest dist/installers/ --arch amd64"
},
"devDependencies": {
"electron-installer-debian": "^0.6.0",
"electron-packager": "^9.0.0",
"electron": "~1.7.0"
}
}
```
_*Note*: The versions in `devDependencies` are examples only, please use the latest package versions
when possible._
And run the script:
```
$ npm run deb64
```
You'll end up with the package at `dist/installers/app_0.0.1_amd64.deb`.
### Programmatically
Install the package locally:
```
$ npm install --save-dev electron-installer-debian
```
And write something like this:
```javascript
const installer = require('electron-installer-debian')
const options = {
src: 'dist/app-linux-x64/',
dest: 'dist/installers/',
arch: 'amd64'
}
async function main (options) {
console.log('Creating package (this may take a while)')
try {
await installer(options)
console.log(`Successfully created package at ${options.dest}`)
} catch (err) {
console.error(err, err.stack)
process.exit(1)
}
}
main(options)
```
You'll end up with the package at `dist/installers/app_0.0.1_amd64.deb`.
_Note: As of 1.0.0, the Node-style callback pattern is no longer available. You can use
[`util.callbackify`](https://nodejs.org/api/util.html#util_util_callbackify_original) if this is
required for your use case._
### Options
Even though you can pass most of these options through the command-line interface, it may be easier to create a configuration file:
```javascript
{
"dest": "dist/installers/",
"icon": "resources/Icon.png",
"categories": [
"Utility"
],
"lintianOverrides": [
"changelog-file-missing-in-native-package"
]
}
```
And pass that instead with the `config` option:
```
$ electron-installer-debian --src dist/app-linux-x64/ --arch amd64 --config config.json
```
Anyways, here's the full list of options:
#### src
Type: `String`
Default: `undefined`
Path to the folder that contains your built Electron application.
#### dest
Type: `String`
Default: `undefined`
Path to the folder that will contain your Debian installer.
#### rename
Type: `Function`
Default: `function (dest, src) { return path.join(dest, src); }`
Function that renames all files generated by the task just before putting them in your `dest` folder.
#### options.name
Type: `String`
Default: `package.name || "electron"`
Name of the package (e.g. `atom`), used in the [`Package` field of the `control` specification](https://www.debian.org/doc/debian-policy/#package).
According to the *Debian Policy Manual*:
> Package names [...] must consist only of lower case letters (a-z), digits (0-9), plus (+) and minus (-) signs, and periods (.). They must be at least two characters long and must start with an alphanumeric character.
`electron-installer-debian` will try to help conform to these requirements by lowercasing the name
provided and replacing any invalid characters with `-`s.
#### options.productName
Type: `String`
Default: `package.productName || package.name`
Name of the application (e.g. `Atom`), used in the [`Name` field of the `desktop` specification](http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html).
#### options.genericName
Type: `String`
Default: `package.genericName || package.productName || package.name`
Generic name of the application (e.g. `Text Editor`), used in the [`GenericName` field of the `desktop` specification](http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html).
#### options.description
Type: `String`
Default: `package.description`
Short description of the application, used in the [`Description` field of the `control` specification](https://www.debian.org/doc/debian-policy/#the-single-line-synopsis).
#### options.productDescription
Type: `String`
Default: `package.productDescription || package.description`
Long description of the application, used in the [`Description` field of the `control` specification](https://www.debian.org/doc/debian-policy/#the-extended-description).
#### options.version
Type: `String`
Default: `package.version || "0.0.0"`
Version number of the package, used in the [`Version` field of the `control` specification](https://www.debian.org/doc/debian-policy/#version).
#### options.revision
Type: `String`
Default: `undefined`
Revision number of the package, used in the [`Version` field of the `control` specification](https://www.debian.org/doc/debian-policy/#version) and, by default, the filename of the generated `.deb` file.
#### options.section
Type: `String`
Default: `"utils"`
Application area into which the package has been classified, used in the [`Section` field of the `control` specification](https://www.debian.org/doc/debian-policy/#section).
You can read more about [sections](https://www.debian.org/doc/debian-policy/#sections), and also check out the [list of existing sections in Debian unstable](https://packages.debian.org/unstable/).
#### options.priority
Type: `String`
Default: `"optional"`
How important it is that the user have the package installed., used in the [`Priority` field of the `control` specification](https://www.debian.org/doc/debian-policy/#priority).
You can read more about [priorities](https://www.debian.org/doc/debian-policy/#priorities).
#### options.arch
Type: `String`
Default: `undefined`
Machine architecture the package is targeted to, used in the [`Architecture` field of the `control` specification](https://www.debian.org/doc/debian-policy/#architecture).
For possible values see the output of `dpkg-architecture -L`.
#### options.size
Type: `Integer`
Default: `size of the folder`
Estimate of the total amount of disk space required to install the named package, used in the [`Installed-Size` field of the `control` specification](https://www.debian.org/doc/debian-policy/#installed-size).
#### options.depends, recommends, suggests, enhances, preDepends
Type: `Array[String]`
Default: For `depends`, the minimum set of packages necessary for Electron to run; See [source code](https://github.com/electron-userland/electron-installer-debian/blob/53fb5c5/src/installer.js#L146-L157) for `recommends`, `suggests`, `enhances`, and `preDepends` default values
Relationships to other packages, used in the [`Depends`, `Recommends`, `Suggests`, `Enhances` and `Pre-Depends` fields of the `control` specification](https://www.debian.org/doc/debian-policy/#binary-dependencies-depends-recommends-suggests-enhances-pre-depends).
All user dependencies will be appended to the `Default` array of dependencies and any duplicates will be removed.
#### options.maintainer
Type: `String`
Default: `package.author.name <package.author.email>`
Maintainer of the package, used in the [`Maintainer` field of the `control` specification](https://www.debian.org/doc/debian-policy/#maintainer).
#### options.homepage
Type: `String`
Default: `package.homepage || package.author.url`
URL of the homepage for the package, used in the [`Homepage` field of the `control` specification](https://www.debian.org/doc/debian-policy/#homepage).
#### options.bin
Type: `String`
Default: `package.name || "electron"`
Relative path to the executable that will act as binary for the application, used in the [`Exec` field of the `desktop` specification](http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html).
The generated package will contain a symlink `/usr/bin/<%= options.name %>` pointing to the path provided here.
For example, providing this configuration:
```javascript
{
src: '...',
dest: '...',
name: 'foo',
bin: 'resources/cli/launcher.sh'
}
```
Will create a package with the following symlink:
```
usr/bin/foo@ -> ../lib/foo/resources/cli/launcher.sh
```
And a desktop specification with the following `Exec` key:
```
Exec=foo %U
```
#### options.icon
Type: `String` or `Object[String:String]`
Default: [`resources/icon.png`](https://github.com/electron-userland/electron-installer-debian/blob/master/resources/icon.png)
Path to a single image that will act as icon for the application:
```javascript
{
icon: 'resources/Icon.png'
}
```
Or multiple images with their corresponding resolutions:
```javascript
{
icon: {
'48x48': 'resources/Icon48.png',
'64x64': 'resources/Icon64.png',
'128x128': 'resources/Icon128.png',
'256x256': 'resources/Icon256.png',
'scalable': 'resources/Icon.svg'
}
}
```
Note that the image files must be one of the types: PNG or SVG. The support for SVG works only on `scalable` resolution.
#### options.categories
Type: `Array[String]`
Default: `['GNOME', 'GTK', 'Utility']`
Categories in which the application should be shown in a menu, used in the [`Categories` field of the `desktop` specification](http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html).
For possible values check out the [Desktop Menu Specification](http://standards.freedesktop.org/menu-spec/latest/apa.html).
#### options.mimeType
Type: `Array[String]`
Default: `[]`
MIME types the application is able to open, used in the [`MimeType` field of the `desktop` specification](http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html).
#### options.lintianOverrides
Type: `Array[String]`
Default: `[]`
You can use these to quieten [`lintian`](https://lintian.debian.org/manual/).
#### options.scripts
Type: `Object[String:String]`
Default: `undefined`
Path to package maintainer scripts with their corresponding name, used in the [installation procedure](https://www.debian.org/doc/debian-policy/#introduction-to-package-maintainer-scripts):
```javascript
{
scripts: {
'preinst': 'resources/preinst_script',
'postinst': 'resources/postinst_script',
'prerm': 'resources/prerm_script',
'postrm': 'resources/postrm_script'
}
}
```
You can read more about [package maintainer scripts](https://www.debian.org/doc/debian-policy/#package-maintainer-scripts-and-installation-procedure) and [general scripts](https://www.debian.org/doc/debian-policy/#scripts)
#### options.desktopTemplate
Type: `String`
Default: [`resources/desktop.ejs`](https://github.com/electron-userland/electron-installer-debian/blob/master/resources/desktop.ejs)
The absolute path to a custom template for the generated [FreeDesktop.org desktop
entry](http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html) file.
### Installed Package
The package installs the Electron application into `/usr/lib`, since there are
architecture-specific files in the package. There was a [discussion in the issue
tracker](https://github.com/electron-userland/electron-installer-debian/issues/46) about the
installation directory.
In versions of `electron-installer-debian` prior to 0.5.0, the app was (incorrectly) installed in
`/usr/share`.
## Meta
* Code: `git clone git://github.com/electron-userland/electron-installer-debian.git`
* Home: <https://github.com/electron-userland/electron-installer-debian/>
## Contributors
* Daniel Perez Alvarez ([unindented@gmail.com](mailto:unindented@gmail.com))
## License
Copyright (c) 2016 Daniel Perez Alvarez ([unindented.org](https://unindented.org/)). This is free software, and may be redistributed under the terms specified in the LICENSE file.