linux.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. const fs = require('fs-extra');
  2. const path = require('path');
  3. const util = require('util');
  4. const stream = require('stream');
  5. const pipeline = util.promisify(stream.pipeline);
  6. const axios = require('axios');
  7. const FileDecompressor = require('../server/core/FileDecompressor');
  8. const distDir = path.resolve(__dirname, '../dist');
  9. const publicDir = `${distDir}/tmp/public`;
  10. const outDir = `${distDir}/linux`;
  11. const tempDownloadDir = `${distDir}/tmp/download`;
  12. async function main() {
  13. const decomp = new FileDecompressor();
  14. await fs.emptyDir(outDir);
  15. // перемещаем public на место
  16. if (await fs.pathExists(publicDir))
  17. await fs.move(publicDir, `${outDir}/public`);
  18. await fs.ensureDir(tempDownloadDir);
  19. //sqlite3
  20. const sqliteRemoteUrl = 'https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v5.0.2/napi-v3-linux-x64.tar.gz';
  21. const sqliteDecompressedFilename = `${tempDownloadDir}/napi-v3-linux-x64/node_sqlite3.node`;
  22. if (!await fs.pathExists(sqliteDecompressedFilename)) {
  23. // Скачиваем node_sqlite3.node для винды, т.к. pkg не включает его в сборку
  24. const res = await axios.get(sqliteRemoteUrl, {responseType: 'stream'})
  25. await pipeline(res.data, fs.createWriteStream(`${tempDownloadDir}/sqlite.tar.gz`));
  26. console.log(`done downloading ${sqliteRemoteUrl}`);
  27. //распаковываем
  28. console.log(await decomp.unpackTarZZ(`${tempDownloadDir}/sqlite.tar.gz`, tempDownloadDir));
  29. console.log('files decompressed');
  30. }
  31. // копируем в дистрибутив
  32. await fs.copy(sqliteDecompressedFilename, `${outDir}/node_sqlite3.node`);
  33. console.log(`copied ${sqliteDecompressedFilename} to ${outDir}/node_sqlite3.node`);
  34. //ipfs
  35. const ipfsDecompressedFilename = `${tempDownloadDir}/go-ipfs/ipfs`;
  36. if (!await fs.pathExists(ipfsDecompressedFilename)) {
  37. // Скачиваем ipfs
  38. const ipfsRemoteUrl = 'https://dist.ipfs.io/go-ipfs/v0.4.18/go-ipfs_v0.4.18_linux-amd64.tar.gz';
  39. const res = await axios.get(ipfsRemoteUrl, {responseType: 'stream'})
  40. await pipeline(res.data, fs.createWriteStream(`${tempDownloadDir}/ipfs.tar.gz`));
  41. console.log(`done downloading ${ipfsRemoteUrl}`);
  42. //распаковываем
  43. console.log(await decomp.unpackTarZZ(`${tempDownloadDir}/ipfs.tar.gz`, tempDownloadDir));
  44. console.log('files decompressed');
  45. }
  46. // копируем в дистрибутив
  47. await fs.copy(ipfsDecompressedFilename, `${outDir}/ipfs`);
  48. console.log(`copied ${tempDownloadDir}/go-ipfs/ipfs to ${outDir}/ipfs`);
  49. //для development
  50. const devIpfsFile = path.resolve(__dirname, '../server/ipfs');
  51. if (!await fs.pathExists(devIpfsFile)) {
  52. await fs.copy(ipfsDecompressedFilename, devIpfsFile);
  53. }
  54. }
  55. main();