fix install script11

This commit is contained in:
Edmund Tan 2025-07-22 02:58:13 +08:00
parent 8cf2b6c563
commit a6b49aa3f9
2 changed files with 45 additions and 75 deletions

View File

@ -36,7 +36,7 @@ class EnrollmentManager {
}
/**
* Main enrollment process
* Main enrollment process - calls the enrollment script
*/
public function enrollRouter($hashKey, $apiEndpoint = null) {
try {
@ -46,87 +46,47 @@ class EnrollmentManager {
$this->reportProgress('INIT', 'Starting router enrollment process...', 0);
// Step 1: Check system requirements
$this->reportProgress('REQUIREMENTS', 'Checking system requirements...', 10);
if (!$this->checkSystemRequirements()) {
throw new Exception('System requirements check failed');
}
// Use the enrollment script with sudo
$command = "sudo /usr/local/bin/enroll-router.sh '$hashKey' '$apiEndpoint' 2>&1";
$output = '';
$returnCode = 0;
// Step 2: Install OpenZiti if needed
$this->reportProgress('INSTALL', 'Installing OpenZiti CLI...', 20);
if (!$this->installZiti()) {
throw new Exception('OpenZiti installation failed');
}
$this->reportProgress('INIT', 'Executing enrollment script...', 10);
// Step 3: Create directories
$this->reportProgress('DIRECTORIES', 'Creating necessary directories...', 30);
if (!$this->createDirectories()) {
throw new Exception('Failed to create directories');
}
// Step 4: Register router with API
$this->reportProgress('REGISTER', 'Registering router with ZitiNexus Portal...', 40);
$result = $this->apiClient->registerRouter($hashKey);
if (!$result['success']) {
throw new Exception('Router registration failed: ' . $result['error']);
}
$this->routerData = $result['data'];
$this->reportProgress('REGISTER', 'Router registered successfully: ' . $this->routerData['routerInfo']['name'], 50);
// Step 5: Save configuration files
$this->reportProgress('CONFIG', 'Saving configuration files...', 60);
if (!$this->saveConfiguration()) {
throw new Exception('Failed to save configuration files');
}
// Step 6: Enroll router with OpenZiti
$this->reportProgress('ENROLL', 'Enrolling router with OpenZiti controller...', 70);
if (!$this->enrollWithZiti()) {
throw new Exception('Router enrollment with OpenZiti failed');
}
// Step 7: Create systemd service
$this->reportProgress('SERVICE', 'Creating systemd service...', 80);
if (!$this->createSystemdService()) {
throw new Exception('Failed to create systemd service');
}
// Step 8: Start router service
$this->reportProgress('START', 'Starting router service...', 90);
if (!$this->startRouter()) {
throw new Exception('Failed to start router service');
}
// Step 9: Report success status
$this->reportProgress('REPORT', 'Reporting enrollment status...', 95);
$this->reportSuccessStatus($hashKey);
// Execute the enrollment script
$success = executeCommand($command, $output, $returnCode);
if ($success && $returnCode === 0) {
$this->reportProgress('COMPLETE', 'Router enrollment completed successfully!', 100);
// Parse output to get router information if available
$routerName = 'Unknown';
$routerId = 'Unknown';
// Try to extract router info from output
if (preg_match('/Router Name: (.+)/', $output, $matches)) {
$routerName = trim($matches[1]);
}
if (preg_match('/Router ID: (.+)/', $output, $matches)) {
$routerId = trim($matches[1]);
}
return [
'success' => true,
'routerName' => $this->routerData['routerInfo']['name'],
'routerId' => $this->routerData['routerInfo']['id'],
'message' => 'Router enrollment completed successfully'
'routerName' => $routerName,
'routerId' => $routerId,
'message' => 'Router enrollment completed successfully',
'output' => $output
];
} else {
throw new Exception('Enrollment script failed: ' . $output);
}
} catch (Exception $e) {
$errorMsg = $e->getMessage();
logMessage('ERROR', $errorMsg);
$this->reportProgress('ERROR', $errorMsg, null);
// Report failure status
if (!empty($hashKey) && !empty($this->routerData['callbackUrl'])) {
$this->apiClient->reportStatus(
$this->routerData['callbackUrl'],
$hashKey,
'failed',
null,
$errorMsg
);
}
return [
'success' => false,
'error' => $errorMsg

View File

@ -193,6 +193,15 @@ deploy_ui() {
# Copy main UI files (assets are now inside public)
cp -r public includes "$WEB_DIR/" || error_exit "Failed to copy UI files"
# Copy the enrollment script to a system location
if [[ -f "../Router-enrollment-script/enroll-router.sh" ]]; then
cp "../Router-enrollment-script/enroll-router.sh" "/usr/local/bin/" || error_exit "Failed to copy enrollment script"
chmod +x "/usr/local/bin/enroll-router.sh" || error_exit "Failed to make enrollment script executable"
log "SUCCESS" "Copied enrollment script to /usr/local/bin/enroll-router.sh"
else
log "WARNING" "Enrollment script not found at ../Router-enrollment-script/enroll-router.sh"
fi
# Copy root-level PHP files for direct access (when document root is main directory)
if [[ -f "index.php" ]]; then
cp index.php "$WEB_DIR/" || log "WARNING" "Failed to copy root index.php"
@ -356,6 +365,7 @@ www-data ALL=(ALL) NOPASSWD: /usr/bin/which
www-data ALL=(ALL) NOPASSWD: /usr/bin/hostname
www-data ALL=(ALL) NOPASSWD: /usr/bin/uname
www-data ALL=(ALL) NOPASSWD: /usr/bin/lsb_release
www-data ALL=(ALL) NOPASSWD: /usr/local/bin/enroll-router.sh
EOF
# Validate sudoers file