From a71eb13f06d3278a4c1a95d78c649822179ef5f4 Mon Sep 17 00:00:00 2001 From: Andre van Zuydam Date: Sat, 2 Oct 2021 05:20:47 +0200 Subject: [PATCH 1/4] Some minor changes to make the engine work with latest composer Ability to install without making a phar file Ability to build a phar file just from local Some checks to see if the relevant commandline tools exist Added to the readme file an addendum for ZeroMQ install --- README.md | 26 ++++++++++++++ bin/build.sh | 68 ++++++++++++++++++++++++++++++++++++ composer.json | 3 +- images/9f8869ef.png | Bin 0 -> 56442 bytes src/Console/Application.php | 2 ++ src/Installer/Installer.php | 4 +-- 6 files changed, 100 insertions(+), 3 deletions(-) create mode 100755 bin/build.sh create mode 100644 images/9f8869ef.png diff --git a/README.md b/README.md index 92d87f7..d21b49c 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,33 @@ Go to the [main page](https://litipk.github.io/Jupyter-PHP-Installer/) and follo * First of all, you can take a look on the [bugtracker](https://github.com/Litipk/Jupyter-PHP-Installer/issues) and decide if there is something that you want to do :wink: . If you think there are missing improvements in this file, then you are invited to modify the TODO list. * You can also send us bug reports using the same bugtracker. * If you are really interested on helping to improve Litipk\BigNumbers, we recommend to read the [contributing guidelines](https://github.com/Litipk/Jupyter-PHP-Installer/blob/master/CONTRIBUTING.md). + +##Addendum +If you just want to run the installer from this repository without building a phar file you can do the following: + +```bash +composer install +composer execute install +``` + +To create an installer that works with the latest composer, you can run. Unfortunately this will need to be modified to work for Windows. + +```bash +chmod +x bin/build.sh && bin/build.sh +``` + +The other important thing is to make sure you have the ZeroMQ extension installed or you will hit problems. The Jupyter notebook needs it for communicating with the language engine. + +[Installing ZeroMQ](https://gist.github.com/qutek/42889d82a4cbebf0e801943a9addbbab) + +And finally after you have your successful install + +```bash +jupyter notebook +``` + +![](images/9f8869ef.png) ## License diff --git a/bin/build.sh b/bin/build.sh new file mode 100755 index 0000000..8b2f06e --- /dev/null +++ b/bin/build.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +echo "Starting build"; + +# We only generate packages for tagged versions +git describe --tags --exact-match HEAD || { + echo "Skipped build"; + exit 0; +} + +if ! command -v openssl &> /dev/null +then + echo "openssl could not be found, please install it" + exit +fi + +openssl genrsa -out .travis/phar_private.key 1024 + +#check for wget +if ! command -v wget &> /dev/null +then + echo "wget could not be found, please install it" + exit +fi + +if ! command -v ./bin/box.phar &> /dev/null +then + # Get Box and build + echo "getting the box builder" + wget https://github.com/box-project/box2/releases/download/2.7.0/box-2.7.0.phar -O ./bin/box.phar + chmod a+x ./bin/box.phar +fi + +# Unsigned build +php -d phar.readonly=0 ./bin/box.phar build -vv +mv jupyter-php-installer.phar jupyter-php-installer.phar.tmp + +# Signed build +php -d phar.readonly=0 ./bin/box.phar build -c box.signed.json -vv +mv jupyter-php-installer.phar jupyter-php-installer.signed.phar.tmp +mv jupyter-php-installer.phar.pubkey jupyter-php-installer.signed.phar.pubkey.tmp + +mkdir -p dist + +if ! command -v md5sum &> /dev/null +then + echo "md5sum could not be found, please install it (md5sha1sum)" + exit +fi + +if ! command -v md5sum &> /dev/null +then + echo "sha1sum could not be found, please install it (sha2)" + exit +fi + +# Moving unsigned build +mv jupyter-php-installer.phar.tmp dist/jupyter-php-installer.phar +cd dist && md5sum jupyter-php-installer.phar > jupyter-php-installer.phar.md5 && cd .. +cd dist && sha1sum jupyter-php-installer.phar > jupyter-php-installer.phar.sha1 && cd .. + +# Moving signed build +mv jupyter-php-installer.signed.phar.tmp dist/jupyter-php-installer.signed.phar +mv jupyter-php-installer.signed.phar.pubkey.tmp dist/jupyter-php-installer.signed.phar.pubkey +cd dist && md5sum jupyter-php-installer.signed.phar > jupyter-php-installer.signed.phar.md5 && cd .. +cd dist && sha1sum jupyter-php-installer.signed.phar > jupyter-php-installer.signed.phar.sha1 && cd .. +cd dist && md5sum jupyter-php-installer.signed.phar.pubkey > jupyter-php-installer.signed.phar.pubkey.md5 && cd .. +cd dist && sha1sum jupyter-php-installer.signed.phar.pubkey > jupyter-php-installer.signed.phar.pubkey.sha1 && cd .. \ No newline at end of file diff --git a/composer.json b/composer.json index d9ddd6b..483286e 100644 --- a/composer.json +++ b/composer.json @@ -9,12 +9,13 @@ "seld/cli-prompt": "^1.0" }, "require-dev": { + "roave/security-advisories": "dev-latest", "phpunit/phpunit": "^6.1" }, "autoload": { "psr-4": { "Litipk\\JupyterPhpInstaller\\": "src/"} }, "scripts": { - + "execute": "@php src/EntryPoint/main.php" } } diff --git a/images/9f8869ef.png b/images/9f8869ef.png new file mode 100644 index 0000000000000000000000000000000000000000..698ca91a85745cb6d0d383441ec8bee231ab5ab1 GIT binary patch literal 56442 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

!BRov>--LHYu;jgm8zf%kUTN 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 ME;ccyF?w&wKiLU3uK)l5 literal 0 HcmV?d00001 diff --git a/src/Console/Application.php b/src/Console/Application.php index 863da85..f95da12 100644 --- a/src/Console/Application.php +++ b/src/Console/Application.php @@ -54,6 +54,7 @@ public function __construct() * @param InputInterface|null $input * @param OutputInterface|null $output * @return int + * @throws \Exception */ public function run(InputInterface $input = null, OutputInterface $output = null) { @@ -76,6 +77,7 @@ public function run(InputInterface $input = null, OutputInterface $output = null * @param InputInterface $input * @param OutputInterface $output * @return int + * @throws \Throwable */ public function doRun(InputInterface $input, OutputInterface $output) { diff --git a/src/Installer/Installer.php b/src/Installer/Installer.php index 839d2fa..dcc4291 100644 --- a/src/Installer/Installer.php +++ b/src/Installer/Installer.php @@ -92,7 +92,7 @@ protected abstract function getJupyterKernelsMetadataAdminPath(): string; protected abstract function getJupyterKernelsMetadatUserPath(): string; - protected function executeComposerCommand(string $installPath, bool $beVerbose = false) + protected function executeComposerCommand(string $installPath, bool $beVerbose = true) { $composerStatus = 0; @@ -143,7 +143,7 @@ private function getComposerInitCommand(string $pkgsDir, bool $silent = false): $cmd = ( $this->composerCmd . ' init ' . ' --no-interaction ' . - ' --name=jupyter-php-instance ' . + ' --name=jupyter/php_instance ' . ' --type=project ' . ' --working-dir="' . $pkgsDir . '" ' . ' --require=litipk/jupyter-php=0.* ' From 7c698ab30628b1ac6918b8159e8b2233c5fd9919 Mon Sep 17 00:00:00 2001 From: Andre van Zuydam Date: Sat, 2 Oct 2021 05:30:57 +0200 Subject: [PATCH 2/4] Some minor changes to make the engine work with latest composer Ability to install without making a phar file Ability to build a phar file just from local Some checks to see if the relevant commandline tools exist Added to the readme file an addendum for ZeroMQ install --- .gitignore | 3 ++- README.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 749f654..a68dafa 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ vendor/ bin/box.phar composer.lock jupyter-php-installer.phar -jupyter-php-installer.phar.pubkey \ No newline at end of file +jupyter-php-installer.phar.pubkey +/dist/ diff --git a/README.md b/README.md index d21b49c..3bb1a5c 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Go to the [main page](https://litipk.github.io/Jupyter-PHP-Installer/) and follo * You can also send us bug reports using the same bugtracker. * If you are really interested on helping to improve Litipk\BigNumbers, we recommend to read the [contributing guidelines](https://github.com/Litipk/Jupyter-PHP-Installer/blob/master/CONTRIBUTING.md). -##Addendum +## Addendum If you just want to run the installer from this repository without building a phar file you can do the following: From 29264455b43f6e23a37f58031ab46e200c509264 Mon Sep 17 00:00:00 2001 From: Andre van Zuydam Date: Sat, 2 Oct 2021 05:33:54 +0200 Subject: [PATCH 3/4] Some minor changes to make the engine work with latest composer Ability to install without making a phar file Ability to build a phar file just from local Some checks to see if the relevant commandline tools exist Added to the readme file an addendum for ZeroMQ install --- src/Installer/Installer.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Installer/Installer.php b/src/Installer/Installer.php index dcc4291..f870f4c 100644 --- a/src/Installer/Installer.php +++ b/src/Installer/Installer.php @@ -92,7 +92,7 @@ protected abstract function getJupyterKernelsMetadataAdminPath(): string; protected abstract function getJupyterKernelsMetadatUserPath(): string; - protected function executeComposerCommand(string $installPath, bool $beVerbose = true) + protected function executeComposerCommand(string $installPath, bool $beVerbose = false) { $composerStatus = 0; @@ -189,6 +189,9 @@ protected function preparePackagesDir(string $pkgsDir) } rmdir($pkgsDir); } - mkdir($pkgsDir); + + if (!mkdir($pkgsDir) && !is_dir($pkgsDir)) { + throw new \RuntimeException(sprintf('Directory "%s" was not created', $pkgsDir)); + } } } From 749b5956a22f4986b4c4e5ee87e51958fe4bee7c Mon Sep 17 00:00:00 2001 From: Andre van Zuydam Date: Sat, 2 Oct 2021 05:38:10 +0200 Subject: [PATCH 4/4] Some minor changes to make the engine work with latest composer Changed name to be the same as other pull request --- src/Installer/Installer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Installer/Installer.php b/src/Installer/Installer.php index f870f4c..6bd64b6 100644 --- a/src/Installer/Installer.php +++ b/src/Installer/Installer.php @@ -143,7 +143,7 @@ private function getComposerInitCommand(string $pkgsDir, bool $silent = false): $cmd = ( $this->composerCmd . ' init ' . ' --no-interaction ' . - ' --name=jupyter/php_instance ' . + ' --name=jupyter_php_instance ' . ' --type=project ' . ' --working-dir="' . $pkgsDir . '" ' . ' --require=litipk/jupyter-php=0.* '