private function install($version)
    {
        $retries = 3;
        $infoMsg = 'Downloading...';
        $infoType = 'info';

        $success = false;
        while ($retries--) {
            try {
                if (!$this->quiet) {
                    out($infoMsg, $infoType);
                    $infoMsg = 'Retrying...';
                    $infoType = 'error';
                }

                $releaseInfo = $this->getReleaseInfo($version);

                $this->downloadTemporaryFile($releaseInfo['pharUrl'], $this->tmpPharPath);
                $this->downloadTemporaryFile($releaseInfo['pubkeyUrl'], $this->tmpPubkeyPath);

                $this->verifyAndSave();

                $success = true;
                break;
            } catch (RuntimeException $e) {
                out($e->getMessage(), 'error');
            }
        }

        if (!$this->quiet) {
            if ($success) {
                out(PHP_EOL . "QA Tools (version {$releaseInfo['version']}) successfully installed to: {$this->target}", 'success');
                out("Use it: php {$this->installPath}", 'info');
                out('');
            } else {
                out('The download failed repeatedly, aborting.', 'error');
            }
        }

        return $success;
    }