diff --git a/README.md b/README.md index 8b1e53b6..146a4337 100644 --- a/README.md +++ b/README.md @@ -50,10 +50,12 @@ $ npm run package To build for one platform: ``` -$ npm run package -- [platform] +$ npm run package -- [platform] [package-type] ``` -Where `[platform]` is `darwin`, `linux`, or `win32`. +Where `[platform]` is `darwin`, `linux`, or `win32` + +and `[package-type]` is `all` (default), `deb` or `zip` (`linux` platform only) #### Windows build notes @@ -75,4 +77,3 @@ brew install wine ## License MIT. Copyright (c) [Feross Aboukhadijeh](http://feross.org). - diff --git a/bin/package.js b/bin/package.js index 94d6e5ea..c5cb56d3 100755 --- a/bin/package.js +++ b/bin/package.js @@ -16,18 +16,19 @@ var BUILD_NAME = config.APP_NAME + '-v' + config.APP_VERSION function build () { var platform = process.argv[2] + var packageType = process.argv.length > 3 ? process.argv[3] : 'all' if (platform === 'darwin') { buildDarwin(printDone) } else if (platform === 'win32') { buildWin32(printDone) } else if (platform === 'linux') { - buildLinux(printDone) + buildLinux(packageType, printDone) } else { buildDarwin(function (err, buildPath) { printDone(err, buildPath) buildWin32(function (err, buildPath) { printDone(err, buildPath) - buildLinux(printDone) + buildLinux(packageType, printDone) }) }) } @@ -285,16 +286,45 @@ function buildWin32 (cb) { }) } -function buildLinux (cb) { +function buildLinux (packageType, cb) { electronPackager(Object.assign({}, all, linux), function (err, buildPath) { if (err) return cb(err) - // Create .zip file for Linux var distPath = path.join(config.ROOT_PATH, 'dist') - var zipPath = path.join(config.ROOT_PATH, 'dist', BUILD_NAME + '-linux.zip') - var appFolderName = path.basename(buildPath[0]) - cp.execSync(`cd ${distPath} && zip -r -y ${zipPath} ${appFolderName}`) - console.log('Created Linux .zip file.') + var filesPath = buildPath[0] + + if (packageType === 'deb' || packageType === 'all') { + // Create .deb file for debian based platforms + var deb = require('nobin-debian-installer')() + var destPath = path.join('/opt', pkg.name) + + deb.pack({ + package: pkg, + info: { + arch: 'amd64', + targetDir: distPath, + scripts: { + postinst: path.join(config.STATIC_PATH, 'linux', 'postinst'), + postrm: path.join(config.STATIC_PATH, 'linux', 'postrm') + } + } + }, [{ + src: ['./**'], + dest: destPath, + expand: true, + cwd: filesPath + }], function (err, done) { + console.log(err || 'Created Linux .deb file.') + }) + } + + if (packageType === 'zip' || packageType === 'all') { + // Create .zip file for Linux + var zipPath = path.join(config.ROOT_PATH, 'dist', BUILD_NAME + '-linux.zip') + var appFolderName = path.basename(filesPath) + cp.execSync(`cd ${distPath} && zip -r -y ${zipPath} ${appFolderName}`) + console.log('Created Linux .zip file.') + } }) } diff --git a/main/handlers.js b/main/handlers.js index 1a54a828..d585fce2 100644 --- a/main/handlers.js +++ b/main/handlers.js @@ -174,7 +174,7 @@ function initLinux () { installIconFile() function installDesktopFile () { - var templatePath = path.join(config.STATIC_PATH, 'webtorrent.desktop') + var templatePath = path.join(config.STATIC_PATH, 'linux', 'webtorrent-desktop.desktop') fs.readFile(templatePath, 'utf8', writeDesktopFile) } @@ -195,7 +195,7 @@ function initLinux () { '.local', 'share', 'applications', - 'webtorrent.desktop' + 'webtorrent-desktop.desktop' ) mkdirp(path.dirname(desktopFilePath)) fs.writeFile(desktopFilePath, desktopFile, function (err) { @@ -216,7 +216,7 @@ function initLinux () { '.local', 'share', 'icons', - 'webtorrent.png' + 'webtorrent-desktop.png' ) mkdirp(path.dirname(iconFilePath)) fs.writeFile(iconFilePath, iconFile, function (err) { diff --git a/package.json b/package.json index 8b46d3bc..78aaeb81 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "electron-packager": "^6.0.0", "electron-winstaller": "^2.0.5", "gh-release": "^2.0.3", + "nobin-debian-installer": "^0.0.5", "plist": "^1.2.0", "rimraf": "^2.5.2", "standard": "^6.0.5" diff --git a/static/linux/postinst b/static/linux/postinst new file mode 100644 index 00000000..19145082 --- /dev/null +++ b/static/linux/postinst @@ -0,0 +1,4 @@ +#!/bin/sh +set -e +chmod +x /opt/webtorrent-desktop/WebTorrent +ln -s /opt/webtorrent-desktop/WebTorrent /usr/bin/webtorrent-desktop diff --git a/static/linux/postrm b/static/linux/postrm new file mode 100644 index 00000000..dec86c69 --- /dev/null +++ b/static/linux/postrm @@ -0,0 +1,3 @@ +#!/bin/sh +set -e +rm /usr/bin/webtorrent-desktop diff --git a/static/webtorrent.desktop b/static/linux/webtorrent-desktop.desktop similarity index 96% rename from static/webtorrent.desktop rename to static/linux/webtorrent-desktop.desktop index ea956dea..ac37a056 100644 --- a/static/webtorrent.desktop +++ b/static/linux/webtorrent-desktop.desktop @@ -6,7 +6,7 @@ X-GNOME-FullName=$APP_NAME Comment=Download and share files over BitTorrent Encoding=UTF-8 Type=Application -Icon=webtorrent +Icon=webtorrent-desktop Terminal=false Path=$APP_PATH Exec=$EXEC_PATH %U