sebastianfeldmann / phpbu

PHP Backup Utility - Creates and encrypts database and file backups, syncs your backups to other servers or cloud services and assists you monitor your backup process
https://phpbu.de
Other
1.29k stars 110 forks source link

Self update of PHAR throws missing permission exception #347

Closed codekandis closed 8 months ago

codekandis commented 1 year ago

I'm trying to run an update from 6.0.16 to 6.0.20 and it breaks.

$ phpbu --self-update
phpbu 6.0.16 by Sebastian Feldmann and contributors.

Updating the phpbu PHAR to version 6.0.20 ... PHP Warning:  file_put_contents(phpbu-temp.phar): failed to open stream: Permission denied in phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php on line 279
PHP Stack trace:
PHP   1. {main}() /home/xyz/path/to/phpbu/phpbu.phar:0
PHP   2. phpbu\App\Cmd::main() /home/xyz/path/to/phpbu/phpbu.phar:1562
PHP   3. phpbu\App\Cmd->run($args = [0 => '/home/codekandis/.local/bin/phpbu', 1 => '--self-update']) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:444
PHP   4. phpbu\App\Cmd->handleOpt($args = [0 => '/home/codekandis/.local/bin/phpbu', 1 => '--self-update']) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:91
PHP   5. phpbu\App\Cmd->handleArgs($options = ['--self-update' => TRUE]) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:125
PHP   6. phpbu\App\Cmd->handleSelfUpdate() phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:146
PHP   7. file_put_contents($filename = 'phpbu-temp.phar', $data = '#!/usr/bin/env php\n<?php\nif (__FILE__ == realpath($GLOBALS[\'_SERVER\'][\'SCRIPT_NAME\'])) {\n    $phar    = realpath($GLOBALS[\'_SERVER\'][\'SCRIPT_NAME\']);\n    $execute = true;\n} else {\n    $files   = get_included_files();\n    $phar    = $files[0];\n    $execute = false;\n}\n\ndefine(\'__PHPBU_PHAR__\', str_replace(DIRECTORY_SEPARATOR, \'/\', $phar));\ndefine(\'__PHPBU_PHAR_ROOT__\', \'phar://phpbu-6.0.20.phar\');\n\nspl_autoload_register(\n  function ($class)\n  {\n      static $classes = NULL;\n\n      if ($classes === NULL) {\n          $classes = array(\n            \'arhitector\\\\yandex\\\\abstractclient\' => \'/lib/arhitector/yandex/AbstractClient.php\',\n            \'arhitector\\\\yandex\\\\client\\\\container\\\\collection\' => \'/lib/arhitector/yandex/Client/Container/Collection.php\',\n            \'arhitector\\\\yandex\\\\client\\\\container\\\\containertrait\' => \'/lib/arhitector/yandex/Client/Container/ContainerTrait.php\',\n            \'arhitector\\\\yandex\\\\client\\\\exception\\\\forbiddenexception\' => \'/lib/arhitector/yandex/Client/Exception/ForbiddenException.php\',\n            \'ar'...) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:279

Warning: file_put_contents(phpbu-temp.phar): failed to open stream: Permission denied in phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php on line 279

Call Stack:
    0.0010     710256   1. {main}() /home/xyz/path/to/phpbu/phpbu.phar:0
    0.0094    2253352   2. phpbu\App\Cmd::main() /home/xyz/path/to/phpbu/phpbu.phar:1562
    0.0094    2253448   3. phpbu\App\Cmd->run($args = [0 => '/home/codekandis/.local/bin/phpbu', 1 => '--self-update']) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:444
    0.0094    2253448   4. phpbu\App\Cmd->handleOpt($args = [0 => '/home/codekandis/.local/bin/phpbu', 1 => '--self-update']) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:91
    0.0095    2270120   5. phpbu\App\Cmd->handleArgs($options = ['--self-update' => TRUE]) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:125
    0.0095    2270120   6. phpbu\App\Cmd->handleSelfUpdate() phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:146
   15.7822    4824120   7. file_put_contents($filename = 'phpbu-temp.phar', $data = '#!/usr/bin/env php\n<?php\nif (__FILE__ == realpath($GLOBALS[\'_SERVER\'][\'SCRIPT_NAME\'])) {\n    $phar    = realpath($GLOBALS[\'_SERVER\'][\'SCRIPT_NAME\']);\n    $execute = true;\n} else {\n    $files   = get_included_files();\n    $phar    = $files[0];\n    $execute = false;\n}\n\ndefine(\'__PHPBU_PHAR__\', str_replace(DIRECTORY_SEPARATOR, \'/\', $phar));\ndefine(\'__PHPBU_PHAR_ROOT__\', \'phar://phpbu-6.0.20.phar\');\n\nspl_autoload_register(\n  function ($class)\n  {\n      static $classes = NULL;\n\n      if ($classes === NULL) {\n          $classes = array(\n            \'arhitector\\\\yandex\\\\abstractclient\' => \'/lib/arhitector/yandex/AbstractClient.php\',\n            \'arhitector\\\\yandex\\\\client\\\\container\\\\collection\' => \'/lib/arhitector/yandex/Client/Container/Collection.php\',\n            \'arhitector\\\\yandex\\\\client\\\\container\\\\containertrait\' => \'/lib/arhitector/yandex/Client/Container/ContainerTrait.php\',\n            \'arhitector\\\\yandex\\\\client\\\\exception\\\\forbiddenexception\' => \'/lib/arhitector/yandex/Client/Exception/ForbiddenException.php\',\n            \'ar'...) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:279

PHP Warning:  chmod(): No such file or directory in phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php on line 281
PHP Stack trace:
PHP   1. {main}() /home/xyz/path/to/phpbu/phpbu.phar:0
PHP   2. phpbu\App\Cmd::main() /home/xyz/path/to/phpbu/phpbu.phar:1562
PHP   3. phpbu\App\Cmd->run($args = [0 => '/home/codekandis/.local/bin/phpbu', 1 => '--self-update']) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:444
PHP   4. phpbu\App\Cmd->handleOpt($args = [0 => '/home/codekandis/.local/bin/phpbu', 1 => '--self-update']) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:91
PHP   5. phpbu\App\Cmd->handleArgs($options = ['--self-update' => TRUE]) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:125
PHP   6. phpbu\App\Cmd->handleSelfUpdate() phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:146
PHP   7. chmod($filename = 'phpbu-temp.phar', $mode = 493) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:281

Warning: chmod(): No such file or directory in phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php on line 281

Call Stack:
    0.0010     710256   1. {main}() /home/xyz/path/to/phpbu/phpbu.phar:0
    0.0094    2253352   2. phpbu\App\Cmd::main() /home/xyz/path/to/phpbu/phpbu.phar:1562
    0.0094    2253448   3. phpbu\App\Cmd->run($args = [0 => '/home/codekandis/.local/bin/phpbu', 1 => '--self-update']) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:444
    0.0094    2253448   4. phpbu\App\Cmd->handleOpt($args = [0 => '/home/codekandis/.local/bin/phpbu', 1 => '--self-update']) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:91
    0.0095    2270120   5. phpbu\App\Cmd->handleArgs($options = ['--self-update' => TRUE]) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:125
    0.0095    2270120   6. phpbu\App\Cmd->handleSelfUpdate() phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:146
   15.7829    4824120   7. chmod($filename = 'phpbu-temp.phar', $mode = 493) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:281

PHP Warning:  rename(phpbu-temp.phar): failed to open stream: No such file or directory in phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php on line 288
PHP Stack trace:
PHP   1. {main}() /home/xyz/path/to/phpbu/phpbu.phar:0
PHP   2. phpbu\App\Cmd::main() /home/xyz/path/to/phpbu/phpbu.phar:1562
PHP   3. phpbu\App\Cmd->run($args = [0 => '/home/codekandis/.local/bin/phpbu', 1 => '--self-update']) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:444
PHP   4. phpbu\App\Cmd->handleOpt($args = [0 => '/home/codekandis/.local/bin/phpbu', 1 => '--self-update']) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:91
PHP   5. phpbu\App\Cmd->handleArgs($options = ['--self-update' => TRUE]) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:125
PHP   6. phpbu\App\Cmd->handleSelfUpdate() phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:146
PHP   7. rename($old_name = 'phpbu-temp.phar', $new_name = '/home/xyz/path/to/phpbu/phpbu.phar') phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:288

Warning: rename(phpbu-temp.phar): failed to open stream: No such file or directory in phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php on line 288

Call Stack:
    0.0010     710256   1. {main}() /home/xyz/path/to/phpbu/phpbu.phar:0
    0.0094    2253352   2. phpbu\App\Cmd::main() /home/xyz/path/to/phpbu/phpbu.phar:1562
    0.0094    2253448   3. phpbu\App\Cmd->run($args = [0 => '/home/codekandis/.local/bin/phpbu', 1 => '--self-update']) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:444
    0.0094    2253448   4. phpbu\App\Cmd->handleOpt($args = [0 => '/home/codekandis/.local/bin/phpbu', 1 => '--self-update']) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:91
    0.0095    2270120   5. phpbu\App\Cmd->handleArgs($options = ['--self-update' => TRUE]) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:125
    0.0095    2270120   6. phpbu\App\Cmd->handleSelfUpdate() phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:146
   15.7837    2280520   7. rename($old_name = 'phpbu-temp.phar', $new_name = '/home/xyz/path/to/phpbu/phpbu.phar') phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:288

PHP Warning:  rename(phpbu-temp.phar,/home/xyz/path/to/phpbu/phpbu.phar): No such file or directory in phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php on line 288
PHP Stack trace:
PHP   1. {main}() /home/xyz/path/to/phpbu/phpbu.phar:0
PHP   2. phpbu\App\Cmd::main() /home/xyz/path/to/phpbu/phpbu.phar:1562
PHP   3. phpbu\App\Cmd->run($args = [0 => '/home/codekandis/.local/bin/phpbu', 1 => '--self-update']) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:444
PHP   4. phpbu\App\Cmd->handleOpt($args = [0 => '/home/codekandis/.local/bin/phpbu', 1 => '--self-update']) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:91
PHP   5. phpbu\App\Cmd->handleArgs($options = ['--self-update' => TRUE]) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:125
PHP   6. phpbu\App\Cmd->handleSelfUpdate() phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:146
PHP   7. rename($old_name = 'phpbu-temp.phar', $new_name = '/home/xyz/path/to/phpbu/phpbu.phar') phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:288

Warning: rename(phpbu-temp.phar,/home/xyz/path/to/phpbu/phpbu.phar): No such file or directory in phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php on line 288

Call Stack:
    0.0010     710256   1. {main}() /home/xyz/path/to/phpbu/phpbu.phar:0
    0.0094    2253352   2. phpbu\App\Cmd::main() /home/xyz/path/to/phpbu/phpbu.phar:1562
    0.0094    2253448   3. phpbu\App\Cmd->run($args = [0 => '/home/codekandis/.local/bin/phpbu', 1 => '--self-update']) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:444
    0.0094    2253448   4. phpbu\App\Cmd->handleOpt($args = [0 => '/home/codekandis/.local/bin/phpbu', 1 => '--self-update']) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:91
    0.0095    2270120   5. phpbu\App\Cmd->handleArgs($options = ['--self-update' => TRUE]) phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:125
    0.0095    2270120   6. phpbu\App\Cmd->handleSelfUpdate() phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:146
   15.7837    2280520   7. rename($old_name = 'phpbu-temp.phar', $new_name = '/home/xyz/path/to/phpbu/phpbu.phar') phar:///home/xyz/path/to/phpbu/phpbu.phar/Cmd.php:288

done

Is the update intended to work non-PHAR only?

sebastianfeldmann commented 1 year ago

Most of the time it means you have no permission to overwrite the binary file (PHAR). Depending on the location your phpbu binary is placed this is expected. For example if you placed it in /usr/local/bin.

Try sudo phpbu --self-update