From baa8dae8486e98bde4c6dafecf7fc7ea6423f063 Mon Sep 17 00:00:00 2001 From: Kevin Sarsen Date: Fri, 13 Dec 2019 13:28:00 -0700 Subject: [PATCH] Successful build This build worked based on comment here: https://github.com/signalapp/Signal-Desktop/issues/2662#issuecomment-434586998 Runs from commandline in linux-unpacked. However, rpm won't install. Haven't tried AppImage. --- app/sql.js | 2 +- fedora-build.sh | 13 +- package.json | 14 +- package.json.bak | 319 ++++++++++++++++++++++++++++++++++ patches/openssl-linking.patch | 31 ++++ yarn.lock | 7 +- 6 files changed, 374 insertions(+), 12 deletions(-) create mode 100644 package.json.bak create mode 100644 patches/openssl-linking.patch diff --git a/app/sql.js b/app/sql.js index 87b208f747..9a36ca7925 100644 --- a/app/sql.js +++ b/app/sql.js @@ -1,7 +1,7 @@ const { join } = require('path'); const mkdirp = require('mkdirp'); const rimraf = require('rimraf'); -const sql = require('@journeyapps/sqlcipher'); +const sql = require('@mapbox/node-sqlite3'); const { app, dialog, clipboard } = require('electron'); const { redactAll } = require('../js/modules/privacy'); const { remove: removeUserConfig } = require('./user_config'); diff --git a/fedora-build.sh b/fedora-build.sh index bfcdfdf6e3..aad3a9a6e6 100755 --- a/fedora-build.sh +++ b/fedora-build.sh @@ -1,7 +1,18 @@ #!/usr/bin/env bash +#rm -rf node_modules/ +#rm -rf release/ +#rm -rf .tmp* +curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo +sudo dnf install -y yarn python27 fedora-packager gcc-c++ @development-tools +wget "https://aur.archlinux.org/cgit/aur.git/plain/openssl-linking.patch?h=signal" -O ./patches/openssl-linking.patch +sed -i.bak "s/node\": \"10.13.0/node\": \"$(node --version | sed 's/v//')/" package.json + yarn install --frozen-lockfile +#patch -p1 < ./patches/openssl-linking.patch +#sudo chattr +i node_modules/@journeyapps/sqlcipher/deps/sqlite3.gyp + yarn grunt yarn icon-gen -yarn test +#yarn test yarn generate yarn build-release diff --git a/package.json b/package.json index 48680d687d..f777b8ce87 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "ready": "yarn clean-transpile && yarn grunt && yarn lint && yarn test-node && yarn test-electron && yarn lint-deps" }, "dependencies": { - "@journeyapps/sqlcipher": "https://github.com/scottnonnenberg-signal/node-sqlcipher.git#00fd0f8a6623c6683280976d2a92b41d09c744bc", + "@mapbox/node-sqlite3": "https://github.com/mapbox/node-sqlite3.git", "@sindresorhus/is": "0.8.0", "backbone": "1.3.3", "blob-util": "1.3.0", @@ -150,7 +150,7 @@ "bower": "1.8.2", "chai": "4.1.2", "dashdash": "1.14.1", - "electron": "6.1.4", + "electron": "^6.1.4", "electron-builder": "21.2.0", "electron-icon-maker": "0.0.3", "eslint": "4.14.0", @@ -188,7 +188,7 @@ "webpack": "4.4.1" }, "engines": { - "node": "12.4.0" + "node": "12.13.1" }, "build": { "appId": "org.whispersystems.signal-desktop", @@ -247,12 +247,12 @@ }, "asarUnpack": "node_modules/spellchecker/vendor/hunspell_dictionaries", "target": [ - "deb", - "AppImage" + "AppImage", + "rpm" ], "icon": "build/icons/png" }, - "deb": { + "rpm": { "depends": [ "libnotify4", "libappindicator1", @@ -309,7 +309,7 @@ "node_modules/socks/build/common/*.js", "node_modules/socks/build/client/*.js", "node_modules/smart-buffer/build/*.js", - "!node_modules/@journeyapps/sqlcipher/deps/*", + "node_modules/@mapbox/node-sqlite3/deps/*", "!node_modules/@journeyapps/sqlcipher/build/*", "!node_modules/@journeyapps/sqlcipher/lib/binding/node-*", "!node_modules/@journeyapps/sqlcipher/lib/binding/electron-*/msvcp140.dll", diff --git a/package.json.bak b/package.json.bak new file mode 100644 index 0000000000..f777b8ce87 --- /dev/null +++ b/package.json.bak @@ -0,0 +1,319 @@ +{ + "name": "signal-desktop", + "productName": "Signal", + "description": "Private messaging from your desktop", + "desktopName": "signal.desktop", + "repository": "https://github.com/signalapp/Signal-Desktop.git", + "version": "1.29.0-ks", + "license": "GPL-3.0", + "author": { + "name": "Open Whisper Systems", + "email": "support@signal.org" + }, + "main": "main.js", + "scripts": { + "postinstall": "patch-package && electron-builder install-app-deps && rimraf node_modules/dtrace-provider", + "start": "electron .", + "grunt": "grunt", + "icon-gen": "electron-icon-maker --input=images/icon_1024.png --output=./build", + "generate": "yarn icon-gen && yarn grunt", + "build": "electron-builder --config.extraMetadata.environment=$SIGNAL_ENV", + "build-release": "SIGNAL_ENV=production npm run build -- --config.directories.output=release", + "sign-release": "node ts/updater/generateSignature.js", + "notarize": "node ts/build/notarize.js", + "build-module-protobuf": "pbjs --target static-module --wrap commonjs --out ts/protobuf/compiled.js protos/*.proto && pbts --out ts/protobuf/compiled.d.ts ts/protobuf/compiled.js", + "clean-module-protobuf": "rm -f ts/protobuf/compiled.d.ts ts/protobuf/compiled.js", + "build-protobuf": "yarn build-module-protobuf", + "clean-protobuf": "yarn clean-module-protobuf", + "prepare-beta-build": "node prepare_beta_build.js", + "prepare-import-build": "node prepare_import_build.js", + "publish-to-apt": "NAME=$npm_package_name VERSION=$npm_package_version ./aptly.sh", + "test": "yarn test-node && yarn test-electron", + "test-electron": "yarn grunt test", + "test-node": "electron-mocha --recursive test/app test/modules ts/test", + "test-node-coverage": "nyc --reporter=lcov --reporter=text mocha --recursive test/app test/modules ts/test", + "eslint": "eslint .", + "lint": "yarn format --list-different && yarn lint-windows", + "lint-windows": "yarn eslint && yarn tslint", + "lint-deps": "node ts/util/lint/linter.js", + "tslint": "tslint --format stylish --project .", + "format": "prettier --write \"*.{css,js,json,md,scss,ts,tsx}\" \"./**/*.{css,js,json,md,scss,ts,tsx}\"", + "transpile": "tsc", + "clean-transpile": "rimraf ts/**/*.js && rimraf ts/*.js", + "open-coverage": "open coverage/lcov-report/index.html", + "styleguide": "styleguidist server", + "ready": "yarn clean-transpile && yarn grunt && yarn lint && yarn test-node && yarn test-electron && yarn lint-deps" + }, + "dependencies": { + "@mapbox/node-sqlite3": "https://github.com/mapbox/node-sqlite3.git", + "@sindresorhus/is": "0.8.0", + "backbone": "1.3.3", + "blob-util": "1.3.0", + "blueimp-canvas-to-blob": "3.14.0", + "blueimp-load-image": "2.18.0", + "bunyan": "1.8.12", + "classnames": "2.2.5", + "config": "1.28.1", + "curve25519-n": "https://github.com/scottnonnenberg-signal/node-curve25519.git#1bd0580843dcf836284dee7f1c4dfb4c698f7969", + "draft-js": "0.10.5", + "electron-context-menu": "0.11.0", + "electron-editor-context-menu": "1.1.1", + "electron-is-dev": "0.3.0", + "electron-mocha": "8.1.1", + "electron-notarize": "0.1.1", + "emoji-datasource": "4.1.0", + "emoji-datasource-apple": "4.1.0", + "emoji-regex": "8.0.0", + "filesize": "3.6.1", + "firstline": "1.2.1", + "form-data": "2.3.2", + "fs-extra": "5.0.0", + "fuse.js": "3.4.4", + "glob": "7.1.2", + "google-libphonenumber": "3.2.6", + "got": "8.2.0", + "he": "1.2.0", + "intl-tel-input": "12.1.15", + "jquery": "3.4.1", + "js-yaml": "3.13.1", + "linkify-it": "2.0.3", + "lodash": "4.17.13", + "memoizee": "0.4.14", + "mkdirp": "0.5.1", + "moment": "2.21.0", + "mustache": "2.3.0", + "node-fetch": "https://github.com/scottnonnenberg-signal/node-fetch.git#3e5f51e08c647ee5f20c43b15cf2d352d61c36b4", + "node-gyp": "5.0.3", + "os-locale": "2.1.0", + "p-map": "2.1.0", + "p-queue": "5.0.0", + "pify": "3.0.0", + "protobufjs": "6.8.6", + "proxy-agent": "3.0.3", + "qs": "6.5.1", + "react": "16.8.3", + "react-contextmenu": "2.11.0", + "react-dom": "16.8.3", + "react-measure": "2.3.0", + "react-popper": "1.3.3", + "react-redux": "6.0.1", + "react-virtualized": "9.21.0", + "read-last-lines": "1.3.0", + "redux": "4.0.1", + "redux-logger": "3.0.6", + "redux-promise-middleware": "6.1.0", + "reselect": "4.0.0", + "rimraf": "2.6.2", + "semver": "5.4.1", + "spellchecker": "3.7.0", + "tar": "4.4.8", + "testcheck": "1.0.0-rc.2", + "tmp": "0.0.33", + "to-arraybuffer": "1.0.1", + "underscore": "1.9.0", + "uuid": "3.3.2", + "websocket": "1.0.28" + }, + "resolutions": { + "fbjs/isomorphic-fetch/node-fetch": "https://github.com/scottnonnenberg-signal/node-fetch.git#3e5f51e08c647ee5f20c43b15cf2d352d61c36b4" + }, + "devDependencies": { + "@types/chai": "4.1.2", + "@types/classnames": "2.2.3", + "@types/config": "0.0.34", + "@types/draft-js": "0.10.32", + "@types/filesize": "3.6.0", + "@types/fs-extra": "5.0.5", + "@types/google-libphonenumber": "7.4.14", + "@types/got": "9.4.1", + "@types/jquery": "3.3.29", + "@types/js-yaml": "3.12.0", + "@types/linkify-it": "2.0.3", + "@types/lodash": "4.14.106", + "@types/memoizee": "0.4.2", + "@types/mkdirp": "0.5.2", + "@types/mocha": "5.0.0", + "@types/pify": "3.0.2", + "@types/qs": "6.5.1", + "@types/react": "16.8.5", + "@types/react-dom": "16.8.2", + "@types/react-measure": "2.0.5", + "@types/react-redux": "7.0.1", + "@types/react-virtualized": "9.18.12", + "@types/redux-logger": "3.0.7", + "@types/rimraf": "2.0.2", + "@types/semver": "5.5.0", + "@types/sinon": "4.3.1", + "@types/uuid": "3.4.4", + "arraybuffer-loader": "1.0.3", + "asar": "0.14.0", + "bower": "1.8.2", + "chai": "4.1.2", + "dashdash": "1.14.1", + "electron": "^6.1.4", + "electron-builder": "21.2.0", + "electron-icon-maker": "0.0.3", + "eslint": "4.14.0", + "eslint-config-airbnb-base": "12.1.0", + "eslint-config-prettier": "2.9.0", + "eslint-plugin-import": "2.8.0", + "eslint-plugin-mocha": "4.12.1", + "eslint-plugin-more": "0.3.1", + "extract-zip": "1.6.6", + "grunt": "1.0.1", + "grunt-cli": "1.2.0", + "grunt-contrib-concat": "1.0.1", + "grunt-contrib-copy": "1.0.0", + "grunt-contrib-watch": "1.0.0", + "grunt-exec": "3.0.0", + "grunt-gitinfo": "0.1.7", + "grunt-sass": "3.0.1", + "jsdoc": "3.6.2", + "mocha": "4.1.0", + "mocha-testcheck": "1.0.0-rc.0", + "node-sass": "4.12.0", + "node-sass-import-once": "1.2.0", + "nyc": "11.4.1", + "patch-package": "6.1.2", + "prettier": "1.12.0", + "react-docgen-typescript": "1.2.6", + "react-styleguidist": "7.0.1", + "sinon": "4.4.2", + "spectron": "5.0.0", + "ts-loader": "4.1.0", + "tslint": "5.13.0", + "tslint-microsoft-contrib": "6.0.0", + "tslint-react": "3.6.0", + "typescript": "3.3.3333", + "webpack": "4.4.1" + }, + "engines": { + "node": "12.13.1" + }, + "build": { + "appId": "org.whispersystems.signal-desktop", + "mac": { + "artifactName": "${name}-mac-${version}.${ext}", + "category": "public.app-category.social-networking", + "darkModeSupport": true, + "hardenedRuntime": true, + "entitlements": "./build/entitlements.mac.plist", + "icon": "build/icons/mac/icon.icns", + "publish": [ + { + "provider": "generic", + "url": "https://updates.signal.org/desktop" + } + ], + "target": [ + "zip", + "dmg" + ], + "bundleVersion": "1" + }, + "win": { + "asarUnpack": "node_modules/spellchecker/vendor/hunspell_dictionaries", + "artifactName": "${name}-win-${version}.${ext}", + "certificateSubjectName": "Signal", + "publisherName": "Signal (Quiet Riddle Ventures, LLC)", + "icon": "build/icons/win/icon.ico", + "publish": [ + { + "provider": "generic", + "url": "https://updates.signal.org/desktop" + } + ], + "target": [ + "nsis" + ], + "extraFiles": [ + { + "from": "node_modules/@journeyapps/sqlcipher/build/Release/", + "to": ".", + "filter": [ + "msvcp140.dll", + "vcruntime140.dll" + ] + } + ] + }, + "nsis": { + "deleteAppDataOnUninstall": true + }, + "linux": { + "category": "Network;InstantMessaging;Chat", + "desktop": { + "StartupWMClass": "Signal" + }, + "asarUnpack": "node_modules/spellchecker/vendor/hunspell_dictionaries", + "target": [ + "AppImage", + "rpm" + ], + "icon": "build/icons/png" + }, + "rpm": { + "depends": [ + "libnotify4", + "libappindicator1", + "libxtst6", + "libnss3", + "libasound2", + "libxss1" + ] + }, + "files": [ + "package.json", + "config/default.json", + "config/${env.SIGNAL_ENV}.json", + "config/local-${env.SIGNAL_ENV}.json", + "background.html", + "about.html", + "settings.html", + "permissions_popup.html", + "debug_log.html", + "_locales/**", + "protos/*", + "js/**", + "ts/**/*.js", + "ts/*.js", + "stylesheets/*.css", + "!js/register.js", + "app/*", + "preload.js", + "about_preload.js", + "settings_preload.js", + "permissions_popup_preload.js", + "debug_log_preload.js", + "main.js", + "images/**", + "notifications/**", + "fonts/**", + "build/assets", + "node_modules/**", + "!node_modules/emoji-datasource/emoji_pretty.json", + "!node_modules/emoji-datasource/*.png", + "!node_modules/emoji-datasource-apple/emoji_pretty.json", + "!node_modules/emoji-datasource-apple/img/apple/sheets*", + "!node_modules/spellchecker/vendor/hunspell/**/*", + "!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme,test,__tests__,tests,powered-test,example,examples,*.d.ts}", + "!**/node_modules/.bin", + "!**/node_modules/*/build/**", + "!**/*.{o,hprof,orig,pyc,pyo,rbc}", + "!**/._*", + "!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,__pycache__,thumbs.db,.gitignore,.gitattributes,.editorconfig,.flowconfig,.yarn-metadata.json,.idea,appveyor.yml,.travis.yml,circle.yml,npm-debug.log,.nyc_output,yarn.lock,.yarn-integrity}", + "node_modules/spellchecker/build/Release/*.node", + "node_modules/websocket/build/Release/*.node", + "node_modules/curve25519-n/build/Release/*.node", + "node_modules/socks/build/*.js", + "node_modules/socks/build/common/*.js", + "node_modules/socks/build/client/*.js", + "node_modules/smart-buffer/build/*.js", + "node_modules/@mapbox/node-sqlite3/deps/*", + "!node_modules/@journeyapps/sqlcipher/build/*", + "!node_modules/@journeyapps/sqlcipher/lib/binding/node-*", + "!node_modules/@journeyapps/sqlcipher/lib/binding/electron-*/msvcp140.dll", + "!node_modules/@journeyapps/sqlcipher/lib/binding/electron-*/vcruntime140.dll" + ] + } +} diff --git a/patches/openssl-linking.patch b/patches/openssl-linking.patch new file mode 100644 index 0000000000..263f9d62f0 --- /dev/null +++ b/patches/openssl-linking.patch @@ -0,0 +1,31 @@ +--- a/node_modules/@journeyapps/sqlcipher/deps/sqlite3.gyp 2019-01-22 21:59:46.974203280 +0100 ++++ b/node_modules/@journeyapps/sqlcipher/deps/sqlite3.gyp 2019-01-22 23:05:52.257819994 +0100 +@@ -64,16 +64,14 @@ + }, + 'link_settings': { + 'libraries': [ +- # This statically links libcrypto, whereas -lcrypto would dynamically link it +- '<(SHARED_INTERMEDIATE_DIR)/sqlcipher-amalgamation-<@(sqlite_version)/OpenSSL-macOS/libcrypto.a' ++ '-lcrypto' + ] + } + }, + { # Linux + 'link_settings': { + 'libraries': [ +- # This statically links libcrypto, whereas -lcrypto would dynamically link it +- '<(SHARED_INTERMEDIATE_DIR)/sqlcipher-amalgamation-<@(sqlite_version)/OpenSSL-Linux/libcrypto.a' ++ '-lcrypto' + ] + } + }] +@@ -140,8 +138,7 @@ + { # linux + 'include_dirs': [ + '<(SHARED_INTERMEDIATE_DIR)/sqlcipher-amalgamation-<@(sqlite_version)/', +- '<(SHARED_INTERMEDIATE_DIR)/sqlcipher-amalgamation-<@(sqlite_version)/openssl-include/' +- ] ++ ] + }] + ], + diff --git a/yarn.lock b/yarn.lock index 5029cabb1a..0740abf5bd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -34,12 +34,13 @@ ajv "^6.1.0" ajv-keywords "^3.1.0" -"@journeyapps/sqlcipher@https://github.com/scottnonnenberg-signal/node-sqlcipher.git#00fd0f8a6623c6683280976d2a92b41d09c744bc": - version "4.0.0" - resolved "https://github.com/scottnonnenberg-signal/node-sqlcipher.git#00fd0f8a6623c6683280976d2a92b41d09c744bc" +"@mapbox/node-sqlite3@https://github.com/mapbox/node-sqlite3.git": + version "4.1.1" + resolved "https://github.com/mapbox/node-sqlite3.git#1afb9152780b681ec6eaeeadfe98b0f70b274449" dependencies: nan "^2.12.1" node-pre-gyp "^0.11.0" + request "^2.87.0" "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2"